G'day,

I'm trying to help Anonymous build IM/CD/IUP with Lua 4.4.6 and
LuaRocks.  This message documents some of the hoops that "lglicua"
uses to get things to work.

First of all, if you use the Tecgraf-supplied tecmake.mak v4.21,
then CD does not build... because of, you guessed it, incorrectly
inferring that Kernel 6.0.0 is older than Kernel 5, and therefore
selecting GTK2 instead of GTK3:

--

> Tecmake: compiling cdgdk.c ...
> gcc -c  -Wall -O2 -m64 -fPIC -I. -Idrv -Ix11 -Iwin32 -Iintcgm -Isim -Icairo 
> -Isvg -I../include -I/usr/include/lua5.4 -I/usr/include/gtk-unix-print-2.0 
> -I/usr/include/freetype2 -I/usr/include/atk-1.0 -I/usr/include/gtk-2.0 
> -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 
> -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include 
> -I/usr/lib64/gtk-2.0/include -I/usr/lib/glib-2.0/include 
> -I/usr/lib/gtk-2.0/include -I/usr/lib/x86_64-linux-gnu/glib-2.0/include 
> -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include 
> -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include   -DGTK_DISABLE_DEPRECATED 
> -DTEC_UNAME=Linux60_64 -DTEC_SYSNAME=Linux -DLinux=6.0 -DTEC_LITTLEENDIAN 
> -DTEC_64 -DFUNCPROTO=15 -DNDEBUG -o ../obj/Linux60_64/cdgdk.o gdk/cdgdk.c
> In file included from gdk/cdgdk.c:13:
> gdk/cdgdk.h:10:10: fatal error: gdk/gdk.h: No such file or directory
>    10 | #include <gdk/gdk.h>
>       |          ^~~~~~~~~~~
> compilation terminated.
> make[1]: *** [../tecmake.mak:1771: ../obj/Linux60_64/cdgdk.o] Error 1
> make: *** [Makefile:11: cd] Error 2
> Execution of cd build failed: 

**** (Note options such as "-I/usr/include/gtk-2.0" and 
"-DTEC_UNAME=Linux60_64" above.)

--

**** Once we stomp on CD's "tecmake.mak-v4.21" with lglicua's 
"tecmake-mak-v4.31",
**** then the CD build completes successfully.  Note the prominent presence
**** of GTK3 items, e.g. "-I/usr/include/gtk-3.0". "-DUSE_GTK3".  Also, note
**** that the system version names kernel 6: "-DLinux=6.0", 
"-L../../im/lib/Linux60_64":

> Tecmake: compiling cdgdkclp.c ...
> gcc -c  -Wall -O2 -m64 -fPIC -I. -Idrv -Ix11 -Iwin32 -Iintcgm -Isim -Icairo 
> -Isvg -I../include -I/usr/include/lua5.4 -I/usr/include/gtk-3.0/unix-print 
> -I/usr/include/freetype2 -I/usr/include/atk-1.0 -I/usr/include/gtk-3.0 
> -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 
> -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include 
> -I/usr/lib/glib-2.0/include -I/usr/lib/x86_64-linux-gnu/glib-2.0/include 
> -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/usr/include/harfbuzz   
> -DGTK_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGSEAL_ENABLE -DUSE_GTK3 
> -DTEC_UNAME=Linux60_64 -DTEC_SYSNAME=Linux -DLinux=6.0 -DTEC_LITTLEENDIAN 
> -DTEC_64 -DFUNCPROTO=15 -DNDEBUG -o ../obj/Linux60_64/cdgdkclp.o 
> gdk/cdgdkclp.c

**** [...]

> Tecmake: linking libcdluaim54.so ...
> gcc -shared -o ../lib/Linux60_64/Lua54/libcdluaim54.so 
> ../obj/cdluaim54/Linux60_64/Lua54/cdluaim5.o  -L../../im/lib/Linux60_64/Lua54 
> -L../lib/Linux60_64/Lua54 -L../lib/Linux60_64 -L../../im/lib/Linux60_64 
> -lcdim -limlua54 -lcdlua54 -lcd -lfontconfig -lim -lpng -lfreetype -lz -lm 
> 
> Tecmake: Dynamic Library (../lib/Linux60_64/Lua54/libcdluaim54.so) Done.

--

**** Now that CD has compiled correctly, we try to build IUP, first of all
**** using the SourceForge-supplied tecmake.mak-v4.21, and, then after failing,
**** retrying with tecmake.mak-v4.31.  Again, GTK2/GTK3 features prominently:

> Tecmake: compiling iupgtk_focus.c ...
> gcc -c  -Wall -O2 -m64 -fPIC -I../include -I. -Igtk -I/usr/include/lua5.4 
> -I/usr/include/atk-1.0 -I/usr/include/gtk-2.0 -I/usr/include/gdk-pixbuf-2.0 
> -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 
> -I/usr/lib64/glib-2.0/include -I/usr/lib64/gtk-2.0/include 
> -I/usr/lib/glib-2.0/include -I/usr/lib/gtk-2.0/include 
> -I/usr/lib/x86_64-linux-gnu/glib-2.0/include 
> -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include 
> -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/X11R6/include   
> -DGTK_DISABLE_DEPRECATED -DTEC_UNAME=Linux60_64 -DTEC_SYSNAME=Linux 
> -DLinux=6.0 -DTEC_LITTLEENDIAN -DTEC_64 -DFUNCPROTO=15 -DNDEBUG -o 
> ../obj/Linux60_64/iupgtk_focus.o gtk/iupgtk_focus.c
> gtk/iupgtk_focus.c:7:10: fatal error: gtk/gtk.h: No such file or directory
>     7 | #include <gtk/gtk.h>
>       |          ^~~~~~~~~~~
> compilation terminated.
> make[2]: *** [../tecmake.mak:1771: ../obj/Linux60_64/iupgtk_focus.o] Error 1
> make[1]: *** [Makefile:12: iup] Error 2
> make: *** [Makefile:13: iup] Error 2
> Execution of iup build failed: 

--

**** After stomping on tecmake.mak, iupgtk_focus.c compiles cleanly, but we
**** still have a build failure, with iupgtk_webbrowser.c.  Turns out that
**** "iup/srcweb/config.mak" has the same GTK3-tops-out-at-Kernel-5 defect
**** that we treated in tecmake.mak:

**** (Retrying iupgtk_focus.c build:  Now completes successfully.)

> Tecmake: compiling iupgtk_focus.c ...
> gcc -c  -Wall -O2 -m64 -fPIC -I../include -I. -Igtk -I/usr/include/lua5.4 
> -I/usr/include/atk-1.0 -I/usr/include/gtk-3.0 -I/usr/include/gdk-pixbuf-2.0 
> -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 
> -I/usr/lib64/glib-2.0/include -I/usr/lib/glib-2.0/include 
> -I/usr/lib/x86_64-linux-gnu/glib-2.0/include 
> -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/usr/include/harfbuzz 
> -I/usr/X11R6/include   -DGTK_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED 
> -DGSEAL_ENABLE -DTEC_UNAME=Linux60_64 -DTEC_SYSNAME=Linux -DLinux=6.0 
> -DTEC_LITTLEENDIAN -DTEC_64 -DFUNCPROTO=15 -DNDEBUG -o 
> ../obj/Linux60_64/iupgtk_focus.o gtk/iupgtk_focus.c
> 
> Tecmake: compiling iupgtk_clipboard.c ...

**** [...]

**** (New defect further on in the IUP build: iupgtk_webbrowser.c.)

> Tecmake: compiling iupgtk_webbrowser.c ...
> gcc -c  -Wall -O2 -m64 -fPIC -I../include -I../src -I../src/gtk 
> -I/usr/include/lua5.4 -I/usr/include/libsoup-2.4 -I/usr/include/webkitgtk-3.0 
> -I/usr/include/atk-1.0 -I/usr/include/gtk-3.0 -I/usr/include/gdk-pixbuf-2.0 
> -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 
> -I/usr/lib64/glib-2.0/include -I/usr/lib/glib-2.0/include 
> -I/usr/lib/x86_64-linux-gnu/glib-2.0/include 
> -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/usr/include/harfbuzz    
> -DTEC_UNAME=Linux60_64 -DTEC_SYSNAME=Linux -DLinux=6.0 -DTEC_LITTLEENDIAN 
> -DTEC_64 -DFUNCPROTO=15 -DNDEBUG -o 
> ../obj/iupweb/Linux60_64/iupgtk_webbrowser.o iupgtk_webbrowser.c
> iupgtk_webbrowser.c:15:10: fatal error: webkit/webkit.h: No such file or 
> directory
>    15 | #include <webkit/webkit.h>
>       |          ^~~~~~~~~~~~~~~~~
> compilation terminated.
> make[2]: *** [../tecmake.mak:1733: 
> ../obj/iupweb/Linux60_64/iupgtk_webbrowser.o] Error 1
> make[1]: *** [Makefile:10: do_all] Error 2
> make: *** [Makefile:35: iupweb] Error 2
> Execution of iup build failed: 

**** Stomping on iup/srcweb/config.mak with a fixed version yields a build
**** with warnings but no errors:

> Tecmake: compiling iupgtk_webbrowser.c ...
> gcc -c  -Wall -O2 -m64 -fPIC -I../include -I../src -I../src/gtk 
> -I/usr/include/lua5.4 -I/usr/include/l
> ibsoup-2.4 -I/usr/include/webkitgtk-4.0 -I/usr/include/atk-1.0 
> -I/usr/include/gtk-3.0 -I/usr/include/g
> dk-pixbuf-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 
> -I/usr/include/glib-2.0 -I/usr/lib64/glib-
> 2.0/include -I/usr/lib/glib-2.0/include 
> -I/usr/lib/x86_64-linux-gnu/glib-2.0/include 
> -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/usr/include/harfbuzz   
> -DUSE_WEBKIT2 -DTEC_UNAME=Linux60_64 -DTEC_SYSNAME=Linux -DLinux=6.0 
> -DTEC_LITTLEENDIAN -DTEC_64 -DFUNCPROTO=15 -DNDEBUG -o 
> ../obj/iupweb/Linux60_64/iupgtk_webbrowser.o iupgtk_webbrowser.c
> iupgtk_webbrowser.c: In function 'gtkWebBrowserRunJavascript':
> iupgtk_webbrowser.c:419:3: warning: 'webkit_web_view_run_javascript' is 
> deprecated: Use 'webkit_web_view_evaluate_javascript' instead 
> [-Wdeprecated-declarations]
>   419 |   webkit_web_view_run_javascript((WebKitWebView*)ih->handle, js, 
> NULL, NULL, NULL);
>       |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from 
> /usr/include/webkitgtk-4.0/webkit/WebKitPrintOperation.h:29,
>                  from /usr/include/webkitgtk-4.0/webkit2/webkit2.h:72,
>                  from iupgtk_webbrowser.c:13:
> /usr/include/webkitgtk-4.0/webkit/WebKitWebView.h:526:1: note: declared here
>   526 | webkit_web_view_run_javascript                       (WebKitWebView   
>           *web_view,
>       | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> At top level:
> iupgtk_webbrowser.c:410:13: warning: 'gtkWebBrowserRunJavascript' defined but 
> not used [-Wunused-function]
>   410 | static void gtkWebBrowserRunJavascript(Ihandle* ih, const char* 
> format, ...)
>       |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
> 
> Tecmake: librarian libiupweb.a ...

**** [...]

> Tecmake: linking iupluascripter54 ...
> g++ -o ../bin/Linux60_64/Lua54/iupluascripter54 
> ../obj/iupluascripter54/Linux60_64/Lua54/iupluascripter.o 
> /usr/lib/x86_64-linux-gnu/liblua5.4.a -Wl,-E -L../lib/Linux60_64/Lua54 
> -L../lib/Linux60_64/Lua54 -L../lib/Linux60_64 -liupluascripterdlg54 
> -liupimglib -liup_scintilla -ldl -liuplua54 -liup -lm 
> 
> Tecmake: Application (../bin/Linux60_64/Lua54/iupluascripter54) Done.



----------------------------------------------

Okay; enough for this message, but we have skipped some earlier details,
which we will deal with in the next message.  Note that tecmake.mak-v4.31
and iup-srcweb-config.mak are attached to this message, and are also
automatically applied if "lglicua" is used for the build.

cheers,

sur-behoffski (Brenton Hoff)
programmer, Grouse Software
PROJNAME = iup
LIBNAME = iupweb
OPT = YES

INCLUDES =  ../include ../src
LDIR = ../lib/$(TEC_UNAME)
LIBS = iup
SRC = iup_webbrowser.c

ifeq ($(findstring Win, $(TEC_SYSNAME)), )
  DEPENDDIR = dep
endif

ifneq ($(findstring Win, $(TEC_SYSNAME)), )
  SRC += iupwin_webbrowser.cpp
  LIBS += iupole comsuppw
  USE_ATL = Yes
  DEFINES = _MBCS
else
  ifdef GTK_DEFAULT
    ifdef GTK_BASE
      GTK := $(GTK_BASE)
    else ifneq ($(findstring MacOS, $(TEC_UNAME)), )
      GTK = /sw
    else
      GTK = /usr
    endif

    SRC  += iupgtk_webbrowser.c
    USE_GTK = Yes
    INCLUDES += ../src/gtk
    STDINCS += $(GTK)/include/libsoup-2.4
    LINK_WEBKIT = Yes

    ifdef USE_GTK3
      # Non-Linux systems:  Default to "webkit-1.0".
      TEC_WEBKIT_INCLUDES := $(GTK)/include/webkit-1.0
      ifeq (Linux, $(TEC_SYSNAME))
        # For Linux Kernels < 3:  Default to "webkitgtk-1.0".
        # Kernel 3:  Use "webkitgtk-3.0".
        # Kernels > 3:  Use "webkitgtk-4.0"; also define USE_WEBKIT2.
        TEC_WEBKIT_INCLUDES := $(GTK)/include/webkitgtk-1.0
        ifeq (3, $(TEC_SYSVERSION))
          TEC_WEBKIT_INCLUDES := $(GTK)/include/webkitgtk-3.0
        else ifneq ($(filter 4 5 6 7 8 9, $(TEC_SYSVERSION)), )
          DEFINES += USE_WEBKIT2
          TEC_WEBKIT_INCLUDES := $(GTK)/include/webkitgtk-4.0
        endif
      endif
      STDINCS += $(TEC_WEBKIT_INCLUDES)
    endif
  else
#    SRC = iupmot_webbrowser.c
#    LIBS += XmHTML
  endif
endif

ifneq ($(findstring MacOS, $(TEC_UNAME)), )
  ifneq ($(TEC_SYSMINOR), 4)
    BUILD_DYLIB=Yes
  endif
endif

ifneq ($(findstring mingw, $(TEC_UNAME)), )
  $(error No support for WebBrowser in MingW)
endif
ifneq ($(findstring dllw, $(TEC_UNAME)), )
  $(error No support for WebBrowser in MingW)
endif
ifneq ($(findstring owc, $(TEC_UNAME)), )
  $(error No support for WebBrowser in OpenWatcom)
endif
ifneq ($(findstring bc, $(TEC_UNAME)), )
  $(error No support for WebBrowser in BorlandC)
endif
#-------------------------------------------------------------------------#
#- Tecmake  (POSIX Version)                                              -#
#- Generic Makefile to build applications and libraries at TeCGraf       -#
#- The user makefile usually has the name "config.mak".                  -#
#-------------------------------------------------------------------------#

#---------------------------------#
# Tecmake Version
VERSION = 4.31


#---------------------------------#
# First target
.PHONY: build
build: tecmake


#---------------------------------#
# System Variables Definitions

ifndef TEC_UNAME
  # Base Definitions
  TEC_SYSNAME:=$(shell uname -s)
  TEC_SYSVERSION:=$(shell uname -r|cut -f1 -d.)
  TEC_SYSMINOR:=$(shell uname -r|cut -f2 -d.)
  TEC_SYSARCH:=$(shell uname -m)

  # Fixes
  ifneq ($(filter Haiku SunOS IRIX, $(TEC_SYSNAME)), )
    TEC_SYSARCH:=$(shell uname -p)
  else ifeq (FreeBSD, $(TEC_SYSNAME))
    TEC_SYSMINOR:=$(shell uname -r|cut -f2 -d.|cut -f1 -d-)
  else ifeq (GNU/kFreeBSD, $(TEC_SYSNAME))
    TEC_SYSNAME:=kFreeBSD
    TEC_SYSMINOR:=$(shell uname -r|cut -f2 -d.|cut -f1 -d-)
  else ifeq (AIX, $(TEC_SYSNAME))
    TEC_SYSVERSION:=$(shell uname -v)
    TEC_SYSMINOR:=$(shell uname -r)
    TEC_SYSARCH:=ppc
  else ifeq (Darwin, $(TEC_SYSNAME))
    TEC_SYSNAME:=MacOS
    TEC_SYSVERSION:=$(shell sw_vers -productVersion|cut -f1 -d.)
    TEC_SYSMINOR:=$(shell sw_vers -productVersion|cut -f2 -d.)
    TEC_SYSARCH:=$(shell uname -p)
  endif

  # Compose
  TEC_SYSRELEASE:=$(TEC_SYSVERSION).$(TEC_SYSMINOR)
  TEC_UNAME:=$(TEC_SYSNAME)$(TEC_SYSVERSION)$(TEC_SYSMINOR)

  # Architecture (only normalize TEC_SYSARCH)
  ifneq ($(filter x86 i386 i686, $(TEC_SYSARCH)), )
    TEC_SYSARCH:=x86
  else ifneq ($(filter x64 x86_64 amd64, $(TEC_SYSARCH)), )
    TEC_SYSARCH:=x64
  else ifneq ($(filter ppc powerpc, $(TEC_SYSARCH)), )
    TEC_SYSARCH:=ppc
  else ifneq ($(findstring armv, $(TEC_SYSARCH)), )
    TEC_SYSARCH:=arm
  else ifneq ($(findstring aarch64, $(TEC_SYSARCH)), )
    TEC_SYSARCH:=arm64
  endif

  # Cygwin
  ifneq ($(findstring CYGWIN, $(TEC_SYSNAME)), )
    TEC_SYSNAME:=CYGWIN
    TEC_UNAME:=cygw$(TEC_SYSVERSION)$(TEC_SYSMINOR)
  endif

  # Linux 2.4 and GCC 3.x
  ifeq (Linux24, $(TEC_UNAME))
    GCCVER:=$(shell gcc -dumpversion|cut -f1 -d.)
    ifeq (3, $(GCCVER))
      TEC_UNAME:=$(TEC_UNAME)g3
    endif
  endif

  # Linux 2.6 and GCC 4.x
  ifeq (Linux26, $(TEC_UNAME))
    GCCVER:=$(shell gcc -dumpversion|cut -f1 -d.)
    ifeq (4, $(GCCVER))
      TEC_UNAME:=$(TEC_UNAME)g4
    endif
  endif

  ifeq (Linux, $(TEC_SYSNAME))
      # Linux and PowerPC
    ifeq (ppc, $(TEC_SYSARCH))
      TEC_UNAME:=$(TEC_UNAME)ppc
    endif

    # 64-bits Linux
    ifeq (x64, $(TEC_SYSARCH))
      BUILD_64=Yes
      TEC_UNAME:=$(TEC_UNAME)_64
    endif

    # Itanium Linux
    ifeq (ia64, $(TEC_SYSARCH))
      BUILD_64=Yes
      TEC_UNAME:=$(TEC_UNAME)_ia64
    endif

    # arm Linux
    ifeq (arm, $(TEC_SYSARCH))
      TEC_UNAME:=$(TEC_UNAME)_arm
    endif
    ifeq (arm64, $(TEC_SYSARCH))
      BUILD_64=Yes
      TEC_UNAME:=$(TEC_UNAME)_arm64
    endif

    # Linux Distribution
    TEC_DISTNAME=$(shell lsb_release -is)
    TEC_DISTVERSION=$(shell lsb_release -rs|cut -f1 -d.)
    TEC_DIST:=$(TEC_DISTNAME)$(TEC_DISTVERSION)

    # arm Linux (Raspberry Pi) -- NOT GOOD must be improved
    ifeq (arm, $(TEC_SYSARCH))
      # Raspbian GNU/Linux 7 (wheezy)
      TEC_DISTNAME=Raspbian
      TEC_DISTVERSION=7
      TEC_DIST:=$(TEC_DISTNAME)$(TEC_DISTVERSION)
    endif
  endif

  # 64-bits FreeBSD
  ifeq (FreeBSD, $(TEC_SYSNAME))
    ifeq (x64, $(TEC_SYSARCH))
      BUILD_64=Yes
      TEC_UNAME:=$(TEC_UNAME)_64
    endif
  endif

  # Solaris and Intel
  ifeq (SunOS, $(TEC_SYSNAME))
    ifeq (x86, $(TEC_SYSARCH))
      TEC_UNAME:=$(TEC_UNAME)x86
    endif
  endif

  # MacOS and Intel
  ifeq (MacOS, $(TEC_SYSNAME))
    ifeq (5, $(TEC_SYSMINOR))
      ifeq (x86, $(TEC_SYSARCH))
        TEC_UNAME:=$(TEC_UNAME)x86
      endif
    else
      ifeq (4, $(TEC_SYSMINOR))
        ifeq (x86, $(TEC_SYSARCH))
          TEC_UNAME:=$(TEC_UNAME)x86
        endif
      else
        TEC_SYSARCH:=x64
      endif
    endif
  endif
endif


#---------------------------------#
# System Info
.PHONY: sysinfo
sysinfo:
	@echo ''; echo 'Tecmake: System Info'
	@echo 'TEC_SYSNAME = $(TEC_SYSNAME)'
	@echo 'TEC_SYSVERSION = $(TEC_SYSVERSION)'
	@echo 'TEC_SYSMINOR = $(TEC_SYSMINOR)'
	@echo 'TEC_SYSARCH = $(TEC_SYSARCH)'
	@echo 'TEC_UNAME = $(TEC_UNAME)'
	@echo 'GTK_BASE = $(GTK_BASE)'
	@echo 'X11_LIB = $(X11_LIB)'
	@echo 'X11_INC = $(X11_INC)'
	@echo 'MOTIF_LIB = $(MOTIF_LIB)'
	@echo 'MOTIF_INC = $(MOTIF_INC)'
	@echo 'GLUT_LIB = $(GLUT_LIB)'
	@echo 'GLUT_INC = $(GLUT_INC)'
	@echo 'OPENGL_LIB = $(OPENGL_LIB)'
	@echo 'OPENGL_INC = $(OPENGL_INC)'
	@echo ''


#---------------------------------#
# Known Platforms

UNAMES = Linux24 Linux24g3 Linux24g3_64 Linux26 Linux26_64 Linux26g4 Linux26g4_64 Linux26_ia64 FreeBSD54 SunOS57 SunOS58 SunOS510 SunOS510_x86 AIX43 IRIX65 IRIX6465


#---------------------------------#
# Directories Definitions

PROJDIR = ..
SRCDIR  = .
OBJROOT = $(PROJDIR)/obj


#---------------------------------#
# Byte Order and Word Size

ifneq ($(findstring x86, $(TEC_SYSARCH)), )
   TEC_BYTEORDER = TEC_LITTLEENDIAN
else
ifeq (arm, $(TEC_SYSARCH))
   TEC_BYTEORDER = TEC_LITTLEENDIAN
else
   TEC_BYTEORDER = TEC_BIGENDIAN
endif
endif

ifeq (x64, $(TEC_SYSARCH))
  TEC_BYTEORDER = TEC_LITTLEENDIAN
  TEC_WORDSIZE = TEC_64
else
ifdef BUILD_64
  TEC_WORDSIZE = TEC_64
else
  TEC_WORDSIZE = TEC_32
endif
endif

# Itanium Exception
ifeq (ia64, $(TEC_SYSARCH))
  TEC_BYTEORDER = TEC_LITTLEENDIAN
  TEC_WORDSIZE = TEC_64
endif

ifeq (arm64, $(TEC_SYSARCH))
  TEC_BYTEORDER = TEC_LITTLEENDIAN
  TEC_WORDSIZE = TEC_64
endif


#---------------------------------#
# Compilation Flags
STDFLAGS := -Wall
STDDEFS  := -DTEC_UNAME=$(TEC_UNAME) -DTEC_SYSNAME=$(TEC_SYSNAME) -D$(TEC_SYSNAME)=$(TEC_SYSRELEASE) -D$(TEC_BYTEORDER) -D$(TEC_WORDSIZE) -DFUNCPROTO=15
STDINCS  :=
OPTFLAGS := -O2
STDLFLAGS  := r
DEBUGFLAGS := -g
STDLDFLAGS := -shared
DLIBEXT := so
DLIBPRE := lib
APPEXT :=

# Define one, or neither, of GTK_DEFAULT and NO_GTK_DEFAULT, based on
# distribution.  NO_GTK_DEFAULT isn't used explicitly elsewhere in this
# file, but others may use it later.
ifneq ($(findstring Linux24, $(TEC_UNAME)), )
  NO_GTK_DEFAULT = Yes
else ifneq ($(filter Linux26 Linux26_64, $(TEC_UNAME)), )
  NO_GTK_DEFAULT = Yes
else ifneq ($(filter CYGWIN CentOS Linux MacOS FreeBSD, $(TEC_SYSNAME)), )
  GTK_DEFAULT = Yes
else ifneq ($(findstring SunOS, $(TEC_UNAME)), )
  ifeq (x86, $(TEC_SYSARCH))
    GTK_DEFAULT = Yes
  endif
endif

# Refine GTK default request:  Newer GNU/Linux systems get GTK3,
# unless GTK2 is specifically defined.
ifdef GTK_DEFAULT
  ifndef USE_GTK2
    ifeq (Linux, $(TEC_SYSNAME))
      ifneq ($(filter 4 5 6 7 8 9, $(TEC_SYSVERSION)), )
        USE_GTK3 = Yes
      else ifneq ($(findstring Linux31, $(TEC_UNAME)), )
        USE_GTK3 = Yes
      endif
    else ifneq ($(findstring cygw, $(TEC_UNAME)), )
      USE_GTK3 = Yes
    endif
    #Homebrew
    #ifneq ($(findstring MacOS10, $(TEC_UNAME)), )
    #  USE_GTK3 = Yes
    #endif
  endif
endif

#---------------------------------#
# Tools

CC       := $(TEC_TOOLCHAIN)gcc
CPPC     := $(TEC_TOOLCHAIN)g++
FF       := $(TEC_TOOLCHAIN)g77
RANLIB   := $(TEC_TOOLCHAIN)ranlib
AR       := $(TEC_TOOLCHAIN)ar
DEBUGGER := $(TEC_TOOLCHAIN)gdb
RCC      := $(TEC_TOOLCHAIN)windres

ifdef USE_EMSCRIPTEN
CC       := $(TEC_TOOLCHAIN)emcc
CPPC     := $(TEC_TOOLCHAIN)em++
RANLIB   := $(TEC_TOOLCHAIN)emranlib
AR       := $(TEC_TOOLCHAIN)emar
endif

# Remote build script
REMOTE  = $(TECMAKE_HOME)/remote

# Packed Lua script
LUAPRE = $(TECMAKE_HOME)/luapre.lua


#---------------------------------#
# User Configuration File
# Everything before this point can be overwritten
# in the configuration file

MAKENAME = config.mak

ifdef MF
  MAKENAME = $(MF).mak
endif

###################
include $(MAKENAME)
###################


#---------------------------------#
# Definitions of public variables

ifdef LIBNAME
  TARGETNAME = $(LIBNAME)
  MAKETYPE = LIB
else
  TARGETNAME = $(APPNAME)
  MAKETYPE = APP
endif

ifndef TARGETNAME
  $(error LIBNAME nor APPNAME defined in $(MAKENAME))
endif

PROJNAME ?= $(TARGETNAME)

DEPEXT := dep
ifneq ($(findstring cygw, $(TEC_UNAME)), )
  DEPEXT := cdep
endif

DEPEND := $(TARGETNAME).$(DEPEXT)
ifdef DEPENDDIR
  DEPEND := $(DEPENDDIR)/$(TARGETNAME).$(DEPEXT).$(TEC_UNAME)
endif

ifeq (APP, $(MAKETYPE))
  TARGETROOT ?= $(PROJDIR)/bin
else
  TARGETROOT ?= $(PROJDIR)/lib
endif

ifneq ($(PROJNAME), $(TARGETNAME))
  OBJROOT := $(OBJROOT)/$(TARGETNAME)
endif

ifdef DBG
  OPT:=
  STDFLAGS += $(DEBUGFLAGS)
  STDDEFS += -DDEBUG
else
  STDDEFS += -DNDEBUG
  ifdef OPT
    STDFLAGS += $(OPTFLAGS)
    STRIP ?= Yes
  endif
endif

ifdef BUILD_64
  ifneq ($(findstring SunOS, $(TEC_UNAME)), )
    USE_CC = Yes
    BUILD_64_DIR = Yes
  endif
  ifneq ($(findstring AIX, $(TEC_UNAME)), )
    USE_CC = Yes
    BUILD_64_DIR = Yes
  endif
  ifneq ($(findstring IRIX, $(TEC_UNAME)), )
    USE_CC = Yes
    BUILD_64_DIR = Yes
  endif
endif

ifdef USE_CC
  CC := cc
  CPPC := CC
  STDFLAGS =
  UNAMES := $(UNAMES_CC)
  ifdef USE_CC_DIR
    TEC_UNAME := $(TEC_UNAME)cc
  endif
endif

ifdef BUILD_64
  ifdef BUILD_64_DIR
    TEC_UNAME := $(TEC_UNAME)_64
  endif
endif

TEC_UNAME_DIR ?= $(TEC_UNAME)
TEC_UNAME_LIB_DIR ?= $(TEC_UNAME)

ifdef DBG
  ifdef DBG_LIB_DIR
    TEC_UNAME_LIB_DIR := $(TEC_UNAME_LIB_DIR)d
  endif
  ifdef DBG_DIR
    TEC_UNAME_DIR := $(TEC_UNAME_DIR)d
  endif
endif

# Suffix for Lua modules
ifdef USE_LUA
  LIBLUA_SFX := 3
endif
ifdef USE_LUA4
  LIBLUA_SFX := 4
endif
ifdef USE_LUA5
  LIBLUA_SFX := 5
endif
ifdef USE_LUA50
  LIBLUA_SFX := 5
endif
ifdef USE_LUA51
  LIBLUA_SFX := 51
endif
ifdef USE_LUA52
  LIBLUA_SFX := 52
endif
ifdef USE_LUA53
  LIBLUA_SFX := 53
endif
ifdef USE_LUA54
  LIBLUA_SFX := 54
endif

ifdef USE_OLDLIBLUA
  TEC_UNAME_LIBLUA_DIR ?= $(TEC_UNAME_LIB_DIR)
else
  TEC_UNAME_LIBLUA_DIR ?= $(TEC_UNAME_LIB_DIR)/Lua$(LIBLUA_SFX)
endif

# Subfolder for Lua Modules
ifdef LUAMOD_DIR
  TEC_UNAME_DIR := $(TEC_UNAME_DIR)/Lua$(LIBLUA_SFX)
endif

OBJDIR := $(OBJROOT)/$(TEC_UNAME_DIR)
TARGETDIR := $(TARGETROOT)/$(TEC_UNAME_DIR)

# Change linker if any C++ source
ifndef LINKER
  ifneq "$(findstring .cpp, $(SRC))" ""
    LINKER := $(CPPC)
    LD := $(CPPC)
  else
    LINKER := $(CC)
    LD := $(CC)
  endif
endif

ifndef USE_STATIC
  # When using dynamic libraries,
  # there is no need to include indirect dependencies
  NO_OVERRIDE = Yes
endif
ifneq ($(findstring AIX, $(TEC_UNAME)), )
  # No dynamic libraries in AIX, so must behave as USE_STATIC
  NO_OVERRIDE :=
endif

ifdef NO_ECHO
  ECHO:=@
endif

#---------------------------------#
# LO, LOH and LH folders

SRCLUADIR ?= $(SRCDIR)
ifdef NO_LUAOBJECT
  LHDIR  ?= $(SRCLUADIR)
else
  LOHDIR ?= $(SRCLUADIR)
endif

ifdef USE_LOH_SUBDIR
  ifeq (TEC_BIGENDIAN, $(TEC_BYTEORDER))
    ifeq (TEC_64, $(TEC_WORDSIZE))
      LOH_SUBDIR ?= be64
    else
      LOH_SUBDIR ?= be32
    endif
  else
    ifeq (TEC_64, $(TEC_WORDSIZE))
      LOH_SUBDIR ?= le64
    else
      LOH_SUBDIR ?= le32
    endif
  endif

  LOHDIR := $(LOHDIR)/$(LOH_SUBDIR)
  INCLUDES += $(LOHDIR)
else
  ifeq (TEC_BIGENDIAN, $(TEC_BYTEORDER))
    ifeq (TEC_64, $(TEC_WORDSIZE))
      LO_SUFFIX ?= _be64
    else
      LO_SUFFIX ?= _be32
    endif
  else
    ifeq (TEC_64, $(TEC_WORDSIZE))
      LO_SUFFIX ?= _le64
    else
      LO_SUFFIX ?=
    endif
  endif
endif

ifdef USE_LH_SUBDIR
  INCLUDES += $(LHDIR)
endif


#---------------------------------#
#  Platform specific variables

# Definitions for X11
X11_LIBS := Xext X11
#X11_LIB :=
#X11_INC :=                     #include <X11/X.h>

# Definitions for OpenGL
OPENGL_LIBS := GLU GL
#OPENGL_LIB :=
#OPENGL_INC :=                  #include <GL/gl.h>  and possibly
MOTIFGL_LIB := GLw              #include <GL/GLwMDrawA.h>

# Definitions for Motif
#MOTIF_LIB :=
#MOTIF_INC :=                   #include <Xm/Xm.h>

# Definitions for GLUT
#GLUT_LIB :=
#GLUT_INC :=

# Definitions for Freetype
FREETYPE_INC := /usr/include/freetype2
ifneq ($(findstring MacOS, $(TEC_UNAME)), )
  #Homebrew
  #FREETYPE_INC := /usr/local/include/freetype2
  #Fink
  FREETYPE_INC := /sw/include/freetype2
endif

# Definitions for GTK
ifdef GTK_BASE
  GTK := $(GTK_BASE)
else
  ifneq ($(findstring MacOS, $(TEC_UNAME)), )
  # Prefer using GTK_BASE then changing this
  # Homebrew GTK port
  #  GTK = /usr/local
  # Fink GTK port
    GTK = /sw
  # MacPorts GTK
  #  GTK = /opt/local
  # GTK-OSX Framework
  #   GTK := /gtk/inst
  else
    GTK = /usr
  endif
endif

ifdef USE_CPP11
  CPPFLAGS += -std=c++11
  DEPFLAGS += -std=c++11
endif

ifeq "Haiku" "$(TEC_SYSNAME)"
  STDFLAGS += -Wno-multichar
  LIBS += be textencoding tracker
endif

ifneq ($(findstring Linux, $(TEC_UNAME)), )
  UNIX_LINUX = Yes
  ifdef BUILD_64
    ifeq (ia64, $(TEC_SYSARCH))
      STDFLAGS += -fPIC
      X11_LIB := /usr/X11R6/lib
    # arm64 config - AIR
    else ifeq (arm64, $(TEC_SYSARCH))
      STDFLAGS += -fPIC
      X11_LIB := /usr/lib/aarch64-linux-gnu/
    else
      STDFLAGS += -m64 -fPIC
      X11_LIB := /usr/X11R6/lib64
    endif
  else
    X11_LIB := /usr/X11R6/lib
  endif
  X11_INC := /usr/X11R6/include
  MOTIFGL_LIB :=
  ifdef USE_OPENMP
    STDFLAGS += -fopenmp
    LIBS += gomp
  endif
endif

ifneq ($(findstring CentOS, $(TEC_UNAME)), )
  UNIX_LINUX = Yes
  ifdef BUILD_64
    ifeq (ia64, $(TEC_SYSARCH))
      STDFLAGS += -fPIC
      X11_LIB := /usr/X11R6/lib
    else
      STDFLAGS += -m64 -fPIC
      X11_LIB := /usr/X11R6/lib64
    endif
  else
    X11_LIB := /usr/X11R6/lib
  endif
  X11_INC := /usr/X11R6/include
  MOTIFGL_LIB :=
  ifdef USE_OPENMP
    STDFLAGS += -fopenmp
    LIBS += gomp
  endif
endif

ifneq ($(findstring IRIX, $(TEC_UNAME)), )
  UNIX_POSIX = Yes
  ifndef NO_LOCAL_LD
    LD = ld
  endif
  STDLDFLAGS := -elf -shared -rdata_shared -soname lib$(TARGETNAME).so
  RANLIB := /bin/true
  X11_LIBS := X11
  ifdef BUILD_64
    ifdef USE_CC
      STDFLAGS += -64 -KPIC
      STDLDFLAGS += -64
      LINKER += -64
    endif
    X11_LIB := /usr/lib64
    MOTIF_LIB := /usr/Motif-2.1/lib64
  else
    X11_LIB := /usr/lib32
    MOTIF_LIB := /usr/Motif-2.1/lib32
  endif
  MOTIF_INC = /usr/Motif-2.1/include
endif

ifneq ($(findstring AIX, $(TEC_UNAME)), )
  UNIX_POSIX = Yes
  NO_DYNAMIC ?= Yes
  ifdef BUILD_64
    ifdef USE_CC
      STDFLAGS += -q64 # to compilers C and C++
      STDLFLAGS := -X64 $(STDLFLAGS) # to librarian
      STDLDFLAGS += -64
      LINKER += -q64 # to linker
    endif
  endif
endif

ifneq ($(findstring HP-UX, $(TEC_UNAME)), )
  UNIX_POSIX = Yes
  NO_DYNAMIC ?= Yes
  MOTIF_INC := /usr/include/Motif2.1
  X11_LIBS := Xext X11
  OPENGL_LIB := /opt/graphics/OpenGL/lib
  OPENGL_INC := /opt/graphics/OpenGL/include
  STDDEFS := -DTEC_UNAME=$(TEC_UNAME) -DTEC_SYSNAME=$(TEC_SYSNAME) -D$(TEC_BYTEORDER) -D$(TEC_WORDSIZE) -DFUNCPROTO=15
  CC := aCC
  CPPC := aCC
  LINKER := aCC
endif

ifneq ($(findstring SunOS, $(TEC_UNAME)), )
  ifneq ($(TEC_SYSARCH), x86)
    UNIX_POSIX = Yes
  endif
  ifndef NO_LOCAL_LD
    LD = ld
  endif
  STDLDFLAGS := -G
  X11_INC := /usr/openwin/share/include
  X11_LIB := /usr/openwin/lib
  MOTIF_INC := /usr/dt/share/include
  MOTIF_LIB := /usr/dt/lib
  OPENGL_INC := /usr/openwin/share/include/X11
  GLUT_LIB := /usr/local/glut-3.7/lib/glut
  GLUT_INC := /usr/local/glut-3.7/include
  ifeq (x86, $(TEC_SYSARCH))
    STDINCS += /usr/X11/include
    GTK := /usr
  endif
  ifdef BUILD_64
    ifdef USE_CC
      STDFLAGS += -xarch=v9 -KPIC
      # have to force these PATHs because of a conflict with standard PATHs
      STDLDFLAGS += -64 -L/usr/lib/64 -L/usr/ucblib/sparcv9
      LINKER += -xarch=v9
    endif
  endif
  ifdef USE_CC
    ifdef DBG
      STDFLAGS += -g
    else
      ifdef OPT
#        STDFLAGS +=  ????
      endif
    endif
  endif
endif

ifneq ($(findstring MacOS, $(TEC_UNAME)), )
  #Homebrew
  #STDINCS += /usr/local/include
  #LDIR += /usr/local/lib
  #Fink
  STDINCS += /sw/include
  LDIR += /sw/lib

  UNIX_BSD = Yes
  X11_LIBS := Xp Xext X11
  X11_LIB := /usr/X11R6/lib /usr/X11/lib
  X11_INC := /usr/X11R6/include /usr/X11/include
  MOTIF_INC := /usr/OpenMotif/include
  MOTIF_LIB := /usr/OpenMotif/lib
  ifdef BUILD_DYLIB
    STDLDFLAGS := -dynamiclib -Wl -fno-common -headerpad_max_install_names -undefined dynamic_lookup -install_name lib$(TARGETNAME).dylib
    DLIBEXT := dylib
    STDFLAGS += -fno-common
  else
    STDLDFLAGS := -bundle -undefined dynamic_lookup
  endif
  ifdef USE_OPENGL
    LFLAGS = -framework OpenGL
    OPENGL_LIBS :=

    ifeq (5, $(TEC_SYSMINOR))
      #Darwin9 Only - OpenGL bug fix for Fink, when the message bellow appears
      #   ld: cycle in dylib re-exports with /usr/X11R6/lib/libGL.dylib
      #LFLAGS += -dylib_file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
    endif
  endif
  ifdef USE_OPENMP
    STDFLAGS += -fopenmp
    LIBS += gomp
  endif
endif

ifneq ($(findstring FreeBSD, $(TEC_UNAME)), )
  BSD = Yes
  X11_LIB := /usr/X11R6/lib
  X11_INC := /usr/X11R6/include
  ifeq (x64, $(TEC_SYSARCH))
    STDFLAGS += -fPIC
  endif
endif


#---------------------------------#
# Allows an extra configuration file.
ifdef EXTRA_CONFIG
include $(EXTRA_CONFIG)
endif


#---------------------------------#
# Tecgraf Libraries Location
TECTOOLS_HOME ?= ../..

IUP   ?= $(TECTOOLS_HOME)/iup
CD    ?= $(TECTOOLS_HOME)/cd
IM    ?= $(TECTOOLS_HOME)/im
LUA   ?= $(TECTOOLS_HOME)/lua
LUA51 ?= $(TECTOOLS_HOME)/lua5.1
LUA52 ?= $(TECTOOLS_HOME)/lua52
LUA53 ?= $(TECTOOLS_HOME)/lua53
LUA54 ?= $(TECTOOLS_HOME)/lua54
FTGL  ?= $(TECTOOLS_HOME)/ftgl
PDFLIB ?= $(TECTOOLS_HOME)/pdflib7
# Freetype and zlib in Linux we use from the system


#---------------------------------#
#  Pre-defined libraries

# Library order:
#   user + iupcd + cd + iup + motif + X
# Library path order is reversed

ifdef USE_LUA
  LUA_SFX :=
  LIBLUA_SFX := 3
endif

ifdef USE_LUA4
  LUA_SFX := 4
  LIBLUA_SFX := 4
  override USE_LUA = Yes
  LUA := $(LUA4)
endif

ifdef USE_LUA5
  LUA_SFX := 5
  LIBLUA_SFX := 5
  override USE_LUA = Yes
  LUA := $(LUA5)
endif

ifdef USE_LUA50
  LUA_SFX := 50
  LIBLUA_SFX := 5
  override USE_LUA = Yes
  LUA := $(LUA50)
  NO_LUALIB := Yes
endif

ifdef USE_LUA51
  LUA_SFX ?= 5.1
  LIBLUA_SFX := 51
  override USE_LUA = Yes
  LUA := $(LUA51)
  NO_LUALIB := Yes
endif

ifdef USE_LUA52
  LUA_SFX := 52
  LIBLUA_SFX := 52
  override USE_LUA = Yes
  LUA := $(LUA52)
  NO_LUALIB := Yes
endif

ifdef USE_LUA53
  LUA_SFX := 53
  LIBLUA_SFX := 53
  override USE_LUA = Yes
  LUA := $(LUA53)
  NO_LUALIB := Yes
  ifneq ($(findstring CentOS5, $(TEC_DIST)), )
    DEFINES += LUA_C89_NUMBERS
  endif
endif

ifdef USE_LUA54
  LUA_SFX := 54
  LIBLUA_SFX := 54
  override USE_LUA = Yes
  LUA := $(LUA54)
  NO_LUALIB := Yes
  ifneq ($(findstring CentOS5, $(TEC_DIST)), )
    DEFINES += LUA_C89_NUMBERS
  endif
endif

ifdef LUA_SUFFIX
  LUA_SFX := $(LUA_SUFFIX)
endif

ifdef USE_IUP
  override USE_IUP3 = Yes
endif
ifdef USE_IUP3
  override USE_IUP = Yes
endif

ifdef USE_IUP2
  override USE_IUP = Yes
  IUP := $(IUP)2
endif

ifdef USE_IUPBETA
  IUP := $(IUP)/beta
endif

ifdef USE_CDBETA
  CD := $(CD)/beta
endif

ifdef USE_IMBETA
  IM := $(IM)/beta
endif

ifdef USE_GLUT
  override USE_OPENGL = Yes
endif

ifdef USE_GDK
  override USE_GTK = Yes
endif

ifdef USE_IUPCONTROLS
  override USE_CD = Yes
  override USE_IUP = Yes
  IUP_LIB ?= $(IUP)/lib/$(TEC_UNAME_LIB_DIR)

  ifdef USE_IUPLUA
    ifdef USE_STATIC
      SLIB += $(IUPLUA_LIB)/libiupluacontrols$(LIBLUA_SFX).a
    else
      LIBS += iupluacontrols$(LIBLUA_SFX)
    endif
    override USE_CDLUA = Yes
  endif

  ifdef USE_STATIC
    SLIB += $(IUP_LIB)/libiupcontrols.a
  else
    LIBS += iupcontrols
  endif
endif

ifdef USE_IUPGLCONTROLS
  override USE_OPENGL = Yes
  override USE_IUP = Yes
  override LINK_FTGL = Yes
  IUP_LIB ?= $(IUP)/lib/$(TEC_UNAME_LIB_DIR)
  CD_LIB ?= $(CD)/lib/$(TEC_UNAME_LIB_DIR)

  ifdef USE_IUPLUA
    ifdef USE_STATIC
      SLIB += $(IUPLUA_LIB)/libiupluaglcontrols$(LIBLUA_SFX).a
    else
      LIBS += iupluaglcontrols$(LIBLUA_SFX)
    endif
  endif

  ifdef USE_STATIC
    SLIB += $(IUP_LIB)/libiupglcontrols.a
  else
    LIBS += iupglcontrols
  endif
endif

ifdef USE_IUPWEB
  override USE_IUP = Yes
  override LINK_WEBKIT = Yes

  ifdef USE_IUPLUA
    ifdef USE_STATIC
      SLIB += $(IUPLUA_LIB)/libiupluaweb$(LIBLUA_SFX).a
    else
      LIBS += iupluaweb$(LIBLUA_SFX)
    endif
  endif

  ifdef USE_STATIC
    SLIB += $(IUP_LIB)/libiupweb.a
  else
    LIBS += iupweb
  endif
endif

ifdef USE_IMLUA
  override USE_IM = Yes
  IMLUA_LIB ?= $(IM)/lib/$(TEC_UNAME_LIBLUA_DIR)
  ifdef USE_STATIC
    SLIB += $(IMLUA_LIB)/libimlua$(LIBLUA_SFX).a
  else
    LIBS += imlua$(LIBLUA_SFX)
    LDIR += $(IMLUA_LIB)
  endif
endif

ifdef USE_CDLUA
  override USE_CD = Yes
  CDLUA_LIB ?= $(CD)/lib/$(TEC_UNAME_LIBLUA_DIR)
  ifdef USE_STATIC
    SLIB += $(CDLUA_LIB)/libcdlua$(LIBLUA_SFX).a
  else
    LIBS += cdlua$(LIBLUA_SFX)
    LDIR += $(CDLUA_LIB)
  endif
endif

ifdef USE_IUPLUA
  override USE_IUP = Yes
  IUPLUA_LIB ?= $(IUP)/lib/$(TEC_UNAME_LIBLUA_DIR)

  ifdef USE_STATIC
    ifdef USE_CD
      ifeq ($(findstring iupluacd, $(LIBNAME)), )
        SLIB += $(IUPLUA_LIB)/libiupluacd$(LIBLUA_SFX).a
      endif
    endif
    ifdef USE_OPENGL
      ifeq ($(findstring iupluagl, $(LIBNAME)), )
        SLIB += $(IUPLUA_LIB)/libiupluagl$(LIBLUA_SFX).a
      endif
    endif
    SLIB += $(IUPLUA_LIB)/libiuplua$(LIBLUA_SFX).a
  else
    ifdef USE_CD
      ifeq ($(findstring iupluacd, $(LIBNAME)), )
        LIBS += iupluacd$(LIBLUA_SFX)
      endif
    endif
    ifdef USE_OPENGL
      ifeq ($(findstring iupluagl, $(LIBNAME)), )
        LIBS += iupluagl$(LIBLUA_SFX)
      endif
    endif
    LIBS += iuplua$(LIBLUA_SFX)
    LDIR += $(IUPLUA_LIB)
  endif
endif

ifdef USE_LUA
  LUA_LIB ?= $(LUA)/lib/$(TEC_UNAME)
  ifdef USE_STATIC
    ifndef NO_LUALIB
      SLIB += $(LUA_LIB)/liblualib$(LUA_SFX).a
    endif
    SLIB += $(LUA_LIB)/liblua$(LUA_SFX).a
  else
    ifndef NO_LUALIB
      LIBS += lualib$(LUA_SFX)
    endif
    ifndef NO_LUALINK
        LIBS += lua$(LUA_SFX)
        LDIR += $(LUA_LIB)
    else
      ifneq ($(findstring cygw, $(TEC_UNAME)), )
        LIBS += lua$(LUA_SFX)
        LDIR += $(LUA_LIB)
      endif
    endif
  endif

  LUA_INC ?= $(LUA)/include
  INCLUDES += $(LUA_INC)

  LUA_BIN ?= $(LUA)/bin/$(TEC_UNAME)
  ifdef USE_BIN2C_LUA
    BIN2C := $(LUA_BIN)/lua$(LUA_SFX) $(BIN2C_PATH)bin2c.lua
  else
    BIN2C := $(LUA_BIN)/bin2c$(LUA_SFX)
  endif
  LUAC   := $(LUA_BIN)/luac$(LUA_SFX)
  LUABIN := $(LUA_BIN)/lua$(LUA_SFX)
endif

ifdef USE_IUP
  IUP_SUFFIX ?=
  ifdef USE_IUP3
    ifndef USE_HAIKU
      ifdef GTK_DEFAULT
        ifdef USE_MOTIF
          IUP_SUFFIX := mot
        else
          ifndef NO_OVERRIDE
            override USE_GTK = Yes
          endif
        endif
      else
        ifdef USE_GTK
          IUP_SUFFIX := gtk
        else
          ifndef NO_OVERRIDE
            override USE_MOTIF = Yes
          endif
        endif
      endif
    endif
  else
    ifndef NO_OVERRIDE
      override USE_MOTIF = Yes
    endif
  endif

  IUP_LIB ?= $(IUP)/lib/$(TEC_UNAME_LIB_DIR)

  ifdef USE_STATIC
    ifdef USE_CD
      SLIB += $(IUP_LIB)/libiupcd.a
    endif
    ifdef USE_OPENGL
      SLIB += $(IUP_LIB)/libiupgl.a
    endif
    SLIB += $(IUP_LIB)/libiup$(IUP_SUFFIX).a
  else
    ifdef USE_CD
      LIBS += iupcd
    endif
    ifdef USE_OPENGL
      LIBS += iupgl
    endif
    LIBS += iup$(IUP_SUFFIX)
    LDIR += $(IUP_LIB)
  endif

  IUP_INC ?= $(IUP)/include
  INCLUDES += $(IUP_INC)
endif

ifdef USE_CD
  CD_SUFFIX ?=
  ifdef GTK_DEFAULT
    LINK_CAIRO = Yes
    ifdef USE_MOTIF
      CD_SUFFIX := x11
      ifndef NO_OVERRIDE
        override USE_X11 = Yes
      endif
    endif
  else
    ifdef USE_GTK
      LINK_CAIRO = Yes
      CD_SUFFIX := gdk
    else
      ifndef NO_OVERRIDE
        override USE_X11 = Yes
      endif
    endif
  endif

  CD_LIB ?= $(CD)/lib/$(TEC_UNAME_LIB_DIR)

  ifdef USE_STATIC
    ifdef USE_XRENDER
      CHECK_XRENDER = Yes
      SLIB += $(CD_LIB)/libcdcontextplus.a
      LIBS += Xrender Xft
    endif

    ifdef USE_CAIRO
      # To use Cairo with X11 base driver (NOT for GDK)
      # Can NOT be used together with XRender
      SLIB += $(CD_LIB)/libcdcairo.a
      LINK_CAIRO = Yes
    endif

    SLIB += $(CD_LIB)/libcd$(CD_SUFFIX).a
  else
    ifdef USE_XRENDER
      CHECK_XRENDER = Yes
      LIBS += cdcontextplus
      LIBS += Xrender Xft
    endif

    ifdef USE_CAIRO
      # To use Cairo with X11 base driver (NOT for GDK)
      # Can NOT be used together with XRender
      LIBS += cdcairo
      LINK_CAIRO = Yes
    endif

    ifdef USE_HAIKU
	    LIBS += xml2
	  endif

    LIBS += cd$(CD_SUFFIX)
    LDIR += $(CD_LIB)
  endif

# Refine fontconfig:  Cater for Linux Kernels greater than 5.
  ifeq (Linux, $(TEC_SYSNAME))
    ifneq ($(findstring Linux26g4, $(TEC_UNAME)), )
      LIBS += fontconfig
    else ifneq ($(filter 3 4 5 6 7 8 9, $(TEC_SYSVERSION)), )
      LIBS += fontconfig
    endif
  else ifneq ($(findstring cygw, $(TEC_UNAME)), )
    LIBS += fontconfig
  else ifneq ($(findstring MacOS, $(TEC_UNAME)), )
    LIBS += fontconfig
  endif

  LINK_FREETYPE = Yes

  CD_INC ?= $(CD)/include
  INCLUDES += $(CD_INC)
endif

ifdef USE_IM
  IM_LIB ?= $(IM)/lib/$(TEC_UNAME_LIB_DIR)

  ifndef NO_ZLIB
    LINK_ZLIB = Yes
  endif

  ifdef USE_STATIC
    SLIB += $(IM_LIB)/libim.a
  else
    LIBS += im
    LDIR += $(IM_LIB)
  endif

  # In Linux, always use libpng from the system (since 4.15)
  LIBS += png

  IM_INC ?= $(IM)/include
  INCLUDES += $(IM_INC)
endif

ifdef LINK_WEBKIT
  # By default, library "webkit-1.0" is used by the linker.
  TEC_WEBKIT_LIBS := webkit-1.0

  # For Linux Kernels 4.x and above, override default, and use
  # "webkit2gtk-4.0 gio-2.0".
  # For Linux Kernels 3.x, override default, and use either
  # "webkitgtk-3.0" or "webkitgtk-1.0", based on the USE_GTK3 setting.
  ifeq (Linux, $(TEC_SYSNAME))
    ifneq ($(filter 4 5 6 7 8 9, $(TEC_SYSVERSION)), )
      TEC_WEBKIT_LIBS := webkit2gtk-4.0 gio-2.0
    else ifneq ($(findstring Linux3, $(TEC_UNAME)), )
      ifdef USE_GTK3
        TEC_WEBKIT_LIBS := webkitgtk-3.0
      else
        TEC_WEBKIT_LIBS := webkitgtk-1.0
      endif
    endif
  endif

  # Now add the derived librar(ies) to the library list.
  LIBS += $(TEC_WEBKIT_LIBS)
endif

ifdef USE_FTGL
  LINK_FTGL = Yes
  USE_FREETYPE = Yes

  FTGL_INC ?= $(FTGL)/include
  INCLUDES += $(FTGL_INC)
endif

ifdef LINK_FTGL
  LINK_FREETYPE = Yes

  FTGL_LIB ?= $(FTGL)/lib/$(TEC_UNAME)
  ifdef USE_STATIC
    SLIB += $(FTGL_LIB)/libftgl.a
  else
    LIBS += ftgl
    LDIR += $(FTGL_LIB)
  endif
endif

ifdef USE_FREETYPE
  LINK_FREETYPE = Yes

  STDINCS += $(FREETYPE_INC)
endif

ifdef LINK_FREETYPE
  # In Linux, always use freetype from the system (since 4.15)

  ifndef NO_ZLIB
    LINK_ZLIB = Yes
  endif

  LIBS += freetype
endif

ifdef LINK_PDFLIB
  PDFLIB_LIB ?= $(PDFLIB)/lib/$(TEC_UNAME)
  ifdef USE_STATIC
    SLIB += $(PDFLIB_LIB)/libpdflib.a

    ifndef NO_ZLIB
      LINK_ZLIB = Yes
    endif
  else
    LIBS += pdflib
    LDIR += $(PDFLIB_LIB)
  endif
endif

ifdef USE_ZLIB
  # In Linux, always use zlib from the system (since 4.15)

  LINK_ZLIB = Yes
  # includes are already in /usr/include
endif

ifdef LINK_ZLIB
  LIBS += z
endif

ifdef USE_GLUT
  LIBS += glut
  LDIR += $(GLUT_LIB)
  STDINCS += $(GLUT_INC)
endif

ifdef USE_OPENGL
  ifndef NO_OVERRIDE
    override USE_X11 = Yes
  endif
  ifdef USE_MOTIF
    ifndef USE_IUP3
      LIBS += $(MOTIFGL_LIB)
    endif
  endif
  LIBS += $(OPENGL_LIBS)
  LDIR += $(OPENGL_LIB)
  STDINCS += $(OPENGL_INC)
endif

ifdef USE_MOTIF
  ifndef NO_OVERRIDE
    override USE_X11 = Yes
  endif
  LIBS += Xm Xt
  LDIR += $(MOTIF_LIB)
  STDINCS += $(MOTIF_INC)
  ifneq ($(findstring Linux, $(TEC_UNAME)), )
    X11_LIBS := Xpm $(X11_LIBS)
  endif
  ifneq ($(findstring cygw, $(TEC_UNAME)), )
    X11_LIBS := Xpm $(X11_LIBS)
  endif
endif

ifdef USE_EMSCRIPTEN
  EMSCRIPTEN = emscripten
  #EMSCRIPTEN = src/emscripten
  EMFLAGS += --js-library $(EMSCRIPTEN)/iupemscripten_common.js
             --js-library $(EMSCRIPTEN)/iupemscripten_dialog.js
             --js-library $(EMSCRIPTEN)/iupemscripten_button.js
  STDFLAGS += $(EMFLAGS)
  STDLDFLAGS += $(EMFLAGS)
endif

ifdef USE_GTK
  ifdef USE_GTK3
    GTKSFX:=3
  else
    GTKSFX:=2
  endif

  ifdef USE_PKGCONFIG
    # get compile/link flags via pkg-config
    PKGINCS += $(shell pkg-config --cflags gtk+-$(GTKSFX).0 gdk-$(GTKSFX).0 gtk+-unix-print-$(GTKSFX).0)
    PKGLIBS += $(shell pkg-config --libs gtk+-$(GTKSFX).0 gdk-$(GTKSFX).0 gtk+-unix-print-$(GTKSFX).0)
    GTK_BASE := $(shell pkg-config --variable=prefix gtk+-$(GTKSFX).0)
    GTK := $(GTK_BASE)
  else
    CHECK_GTK = Yes
    ifneq ($(findstring MacOS, $(TEC_UNAME)), )
  # Option 1 - Fink GTK port
      LDIR += $(GTK)/lib
      ifndef NO_OVERRIDE
        override USE_X11 = Yes
      endif
      ifdef GTK_MAC
        LIBS += gtk-quartz-$(GTKSFX).0 gdk-quartz-$(GTKSFX).0 pango???-1.0
      else
        LIBS += gtk-x11-$(GTKSFX).0 gdk-x11-$(GTKSFX).0 pangox-1.0
      endif
  # Option 2 - Imendio Framework
  #   STDINCS += /Library/Frameworks/Gtk.framework/Headers
  #   STDINCS += /Library/Frameworks/GLib.framework/Headers
  #   STDINCS += /Library/Frameworks/Cairo.framework/Headers
  #   LFLAGS += -framework Gtk
  # Option 3 - GTK-OSX Framework
  #   LDIR += $(GTK)/lib
  #   LFLAGS += -framework Carbon
  #   LIBS += gtk-quartz-$(GTKSFX).0 gdk-quartz-$(GTKSFX).0 pangoft2-1.0

      LIBS += freetype
    else
      # if not the default, then include it for linker
      # must be before the default
      ifdef GTK_BASE
        LDIR += $(GTK)/lib
      endif
      ifndef NO_OVERRIDE
        override USE_X11 = Yes
      endif
      ifdef USE_GTK3
        LIBS += gtk-3 gdk-3
        LINK_CAIRO = Yes
      else
        LIBS += gtk-x11-2.0 gdk-x11-2.0 pangox-1.0
      endif
    endif

    ifdef LINK_CAIRO
      LIBS += pangocairo-1.0 cairo
    endif

    LIBS += gdk_pixbuf-2.0 pango-1.0 gobject-2.0 gmodule-2.0 glib-2.0

    STDINCS += $(GTK)/include/atk-1.0 $(GTK)/include/gtk-$(GTKSFX).0 $(GTK)/include/gdk-pixbuf-2.0
    STDINCS += $(GTK)/include/cairo $(GTK)/include/pango-1.0 $(GTK)/include/glib-2.0

    ifeq ($(TEC_SYSARCH), x64)
      STDINCS += $(GTK)/lib64/glib-2.0/include
      ifndef USE_GTK3
        STDINCS += $(GTK)/lib64/gtk-2.0/include
      endif

      # Add also these to avoid errors in systems that lib64 does not exists
      STDINCS += $(GTK)/lib/glib-2.0/include
      ifndef USE_GTK3
        STDINCS += $(GTK)/lib/gtk-2.0/include
      endif

      # Add also support for newer instalations
      STDINCS += $(GTK)/lib/x86_64-linux-gnu/glib-2.0/include
      STDINCS += $(GTK)/lib/arm-linux-gnueabihf/glib-2.0/include
      ifndef USE_GTK3
        STDINCS += $(GTK)/lib/x86_64-linux-gnu/gtk-2.0/include
      endif
    else
      ifeq ($(TEC_SYSARCH), ia64)
        STDINCS += $(GTK)/lib64/glib-2.0/include
        ifndef USE_GTK3
          STDINCS += $(GTK)/lib64/gtk-2.0/include
        endif
      else
        STDINCS += $(GTK)/lib/glib-2.0/include
        ifndef USE_GTK3
          STDINCS += $(GTK)/lib/gtk-2.0/include
        endif

        # Add also support for newer instalations
        STDINCS += $(GTK)/lib/i386-linux-gnu/glib-2.0/include
        STDINCS += $(GTK)/lib/arm-linux-gnueabihf/glib-2.0/include
        ifndef USE_GTK3
          STDINCS += $(GTK)/lib/i386-linux-gnu/gtk-2.0/include
          STDINCS += $(GTK)/lib/arm-linux-gnueabihf/gtk-2.0/include
        endif
      endif
    endif

    # Provide harfbuzz for Linux Kernel versions 5 and newer.
    ifneq ($(findstring FreeBSD, $(TEC_UNAME)), )
      STDINCS += /lib/X11R6/include/gtk-2.0
    else ifeq (Linux, $(TEC_SYSNAME))
      ifneq ($(filter 5 6 7 8 9, $(TEC_SYSVERSION)), )
        STDINCS += /usr/include/harfbuzz
      endif
    endif
  endif
endif

ifdef USE_QT
  ifndef NO_OVERRIDE
    override USE_X11 = Yes
  endif
  LIBS += QtGui QtCore
  QT_BASE_INC := /usr/include/qt4
  STDINCS += $(QT_BASE_INC) $(QT_BASE_INC)/QtCore $(QT_BASE_INC)/QtGui
  STDDEFS += -DQT_DLL -DQT_QT3SUPPORT_LIB -DQT3_SUPPORT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT
endif

ifdef USE_X11
  LIBS += $(X11_LIBS)
  LDIR += $(X11_LIB)
  STDINCS += $(X11_INC)
endif

ifneq "Haiku" "$(TEC_SYSNAME)"
  LIBS += m
endif

ifneq ($(findstring cygw, $(TEC_UNAME)), )
  WIN_OTHER := Yes

  DEPINCS := $(INCLUDES) $(EXTRAINCS)

  # INCLUDES for dependencies, remove references to "c:" and similars
  DEPINCS := $(patsubst c:%, /cygdrive/c%, $(DEPINCS))
  DEPINCS := $(patsubst d:%, /cygdrive/d%, $(DEPINCS))
  DEPINCS := $(patsubst x:%, /cygdrive/x%, $(DEPINCS))
  DEPINCS := $(patsubst t:%, /cygdrive/t%, $(DEPINCS))

  DLIBEXT := dll
  APPEXT := .exe
  # Use the cyg prefix to indicate that it is a Cygwin Posix DLL
  DLIBPRE := cyg

  STDLDFLAGS += -Wl,--out-implib=$(TARGETDIR)/lib$(TARGETNAME).dll.a
endif

#---------------------------------#
#  Building compilation flags that are sets

DEPINCS ?= $(INCLUDES) $(EXTRAINCS)
DEPINCS := $(addprefix -I, $(DEPINCS))

INCLUDES := $(addprefix -I, $(INCLUDES))
STDINCS := $(addprefix -I, $(STDINCS))
EXTRAINCS := $(addprefix -I, $(EXTRAINCS))
DEFINES := $(addprefix -D, $(DEFINES))

LIBS := $(addprefix -l, $(LIBS))
ifdef LDIR
  LDIR := $(addprefix -L, $(LDIR))
endif


#---------------------------------#
# Definitions of private variables

# Library flags for application and dynamic library linker
LFLAGS += $(LDIR) $(LIBS) $(PKGLIBS)
# C compiler flags
CFLAGS   = $(FLAGS) $(STDFLAGS) $(INCLUDES) $(STDINCS) $(PKGINCS) $(EXTRAINCS) $(DEFINES) $(STDDEFS)
# C++ compiler flags
CXXFLAGS = $(CPPFLAGS) $(STDFLAGS) $(INCLUDES) $(STDINCS) $(PKGINCS) $(EXTRAINCS) $(DEFINES) $(STDDEFS)

# Sources with relative path
SOURCES := $(addprefix $(SRCDIR)/, $(SRC))

TARGETAPPNAME := $(TARGETNAME)$(APPEXT)
TARGETSLIBNAME := lib$(TARGETNAME).a
TARGETDLIBNAME := $(DLIBPRE)$(TARGETNAME).$(DLIBEXT)

# Target for applications or libraries
ifeq ($(MAKETYPE), APP)
  TARGET := $(TARGETDIR)/$(TARGETAPPNAME)
else
  ifeq ($(NO_DYNAMIC), Yes)
    TARGET := $(TARGETDIR)/$(TARGETSLIBNAME)
  else
  ifeq ($(NO_STATIC), Yes)
    TARGET := $(TARGETDIR)/$(TARGETDLIBNAME)
  else
    TARGET := $(TARGETDIR)/$(TARGETSLIBNAME) $(TARGETDIR)/$(TARGETDLIBNAME)
  endif
  endif
endif

# OBJ: list of .o, without path
# OBJS: list of .o with relative path
OBJ = $(notdir $(SRC))
OBJ := $(OBJ:.c=.o)
OBJ := $(OBJ:.cpp=.o)
OBJ := $(OBJ:.cxx=.o)
OBJ := $(OBJ:.cc=.o)
OBJ := $(OBJ:.f=.o)
OBJ := $(OBJ:.for=.o)
OBJ := $(OBJ:.rc=.ro)
OBJ := $(OBJ:.cu=.o)
OBJS = $(addprefix $(OBJDIR)/, $(OBJ))

ifdef LOHPACK
  # Package with all LOHs
  LOHS := $(LOHDIR)/$(LOHPACK)
  LOHDIRS :=
else
  ifdef NO_LUAOBJECT
    LH = $(notdir $(SRCLUA))
    LH := $(LH:.lua=.lh)
    LHS = $(addprefix $(LHDIR)/, $(LH))
    LUAS := $(LHS)
  else
    # LOH: list of .loh, without path
    # LOHS: list of .loh, with relative path
    LO = $(notdir $(SRCLUA))
    LO := $(LO:.lua=$(LO_SUFFIX).lo)
    LOS = $(addprefix $(OBJROOT)/, $(LO))

    LOH = $(notdir $(SRCLUA))
    LOH := $(LOH:.lua=$(LO_SUFFIX).loh)
    LOHS = $(addprefix $(LOHDIR)/, $(LOH))
    LUAS := $(LOHS)
  endif
endif

# Construct VPATH variable
P-SRC = $(dir $(SRC))
P-SRC += $(dir $(SRCLUA))
VPATH = .:$(foreach dir,$(P-SRC),$(if $(dir)="./",:$(dir)))


#---------------------------------#
# Main Rule - Build Everything that it is necessary

.PHONY: tecmake
ifeq ($(MAKETYPE), APP)
  tecmake: print-start system-check directories application scripts
else
  ifeq ($(NO_DYNAMIC), Yes)
    tecmake: print-start system-check directories static-lib
  else
  ifeq ($(NO_STATIC), Yes)
    tecmake: print-start system-check directories dynamic-lib
  else
    tecmake: print-start system-check directories static-lib dynamic-lib
  endif
  endif
endif

.PHONY: print-start
print-start:
	@echo ''; echo 'Tecmake: starting [ $(TARGETNAME):$(TEC_UNAME) ]'

.PHONY: system-check
system-check:
  ifdef CHECK_XRENDER
    ifdef UNIX_POSIX
			@echo ''; echo 'Tecmake: check failed, XRender NOT available in this system.'; echo ''; exit 1;
    endif
  endif
  ifdef CHECK_GTK
    ifndef GTK_BASE
      ifdef UNIX_POSIX
			@echo ''; echo 'Tecmake: check failed, GTK NOT available in this system.'; echo ''; exit 1;
      else
        ifneq ($(findstring Linux24, $(TEC_UNAME)), )
					@echo ''; echo 'Tecmake: check failed, GTK too OLD in this system.'; echo ''; exit 1;
        endif
      endif
    endif
  endif
  ifdef CHECK_GDIPLUS
    ifdef WIN_OTHER
			@echo ''; echo 'Tecmake: check failed, GDI+ NOT available in this system.'; echo ''; exit 1;
    endif
  endif

#---------------------------------#
# Dynamic Library Build

.PHONY: dynamic-lib
dynamic-lib: $(TARGETDIR)/$(TARGETDLIBNAME)

$(TARGETDIR)/$(TARGETDLIBNAME) : $(LUAS) $(OBJS) $(EXTRADEPS)
	@echo ''; echo Tecmake: linking $(@F) ...
	$(ECHO)$(LD) $(STDLDFLAGS) -o $@ $(OBJS) $(SLIB) $(LFLAGS)
	@echo ''; echo 'Tecmake: Dynamic Library ($@) Done.'; echo ''


#---------------------------------#
# Static Library Build

.PHONY: static-lib
static-lib: $(TARGETDIR)/$(TARGETSLIBNAME)

$(TARGETDIR)/$(TARGETSLIBNAME) : $(LUAS) $(OBJS) $(EXTRADEPS)
	@echo ''; echo Tecmake: librarian $(@F) ...
	$(ECHO)$(AR) $(STDLFLAGS) $@ $(OBJS) $(SLIB) $(LCFLAGS)
	@echo ''; echo Tecmake: updating lib TOC $(@F) ...
	$(ECHO)-$(RANLIB) $@
	@echo ''; echo 'Tecmake: Static Library ($@) Done.'; echo ''


#---------------------------------#
# Application Build

.PHONY: application
application: $(TARGETDIR)/$(TARGETAPPNAME)

$(TARGETDIR)/$(TARGETAPPNAME) : $(LUAS) $(OBJS) $(EXTRADEPS)
	@echo ''; echo Tecmake: linking $(@F) ...
	$(ECHO)$(LINKER) -o $@ $(OBJS) $(SLIB) $(LFLAGS)
	@if [ ! -z "$(STRIP)" ]; then \
	   echo ''; echo 'Tecmake: striping debug information' ;\
	   strip $@ ;\
	 fi
	@echo ''; echo 'Tecmake: Application ($@) Done.'; echo ''


#---------------------------------#
#  Application Scripts

# Script name
SRELEASE := $(SRCDIR)/$(TARGETNAME)

.PHONY: scripts
ifdef NO_SCRIPTS
  scripts: ;
else
  scripts: $(SRELEASE) ;
endif

$(SRELEASE): $(MAKENAME)
	@echo ''; echo 'Tecmake: building script $(@F)'
	@echo "#!/bin/csh" > $@
	@echo "# Script generated automatically by tecmake v$(VERSION)" >> $@
	@echo "# Remove the comment bellow to set the LD_LIBRARY_PATH if needed." >> $@
	@echo '#setenv LD_LIBRARY_PATH $(MYLIB1)/lib/$${TEC_UNAME}:$(MYLIB2)/lib/$${TEC_UNAME}:$$LD_LIBRARY_PATH' >> $@
	@echo 'if ( -r app.env ) source app.env' >> $@
	@echo 'exec $(TARGETROOT)/$$TEC_UNAME/$(TARGETNAME) $$*' >> $@
	@chmod a+x $@


#---------------------------------#
# Directories Creation

.PHONY: directories
directories: $(OBJDIR) $(TARGETDIR) $(EXTRADIR) $(LOHDIR) $(LHDIR) $(DEPENDDIR)

$(OBJDIR) $(TARGETDIR):
	if [ ! -d $@ ] ; then mkdir -p $@ ; fi

ifdef EXTRADIR
  $(EXTRADIR):
	  if [ ! -d $@ ] ; then mkdir -p $@ ; fi
else
  $(EXTRADIR): ;
endif

ifdef LOHDIR
  $(LOHDIR):
	  if [ ! -d $@ ] ; then mkdir -p $@ ; fi
else
  $(LOHDIR): ;
endif

ifdef LHDIR
  $(LHDIR):
	  if [ ! -d $@ ] ; then mkdir -p $@ ; fi
else
  $(LHDIR): ;
endif

ifdef DEPENDDIR
  $(DEPENDDIR):
	  if [ ! -d $@ ] ; then mkdir -p $@ ; fi
else
  $(DEPENDDIR): ;
endif


#---------------------------------#
# Compilation Rules

$(OBJDIR)/%.o:  $(SRCDIR)/%.c
	@echo ''; echo Tecmake: compiling $(<F) ...
	$(ECHO)$(CC) -c $(CFLAGS) -o $@ $<

$(OBJDIR)/%.o:  $(SRCDIR)/%.cpp
	@echo ''; echo Tecmake: compiling $(<F) ...
	$(ECHO)$(CPPC) -c $(CXXFLAGS) -o $@ $<

$(OBJDIR)/%.o:  $(SRCDIR)/%.cxx
	@echo ''; echo Tecmake: compiling $(<F) ...
	$(ECHO)$(CPPC) -c $(CXXFLAGS) -o $@ $<

$(OBJDIR)/%.o:  $(SRCDIR)/%.cc
	@echo ''; echo Tecmake: compiling $(<F) ...
	$(ECHO)$(CPPC) -c $(CXXFLAGS) -o $@ $<

$(OBJDIR)/%.o: $(SRCDIR)/%.f
	@echo ''; echo Tecmake: compiling $(<F) ...
	$(ECHO)$(FC) -c $(FFLAGS) -o $@ $<

$(OBJDIR)/%.o: $(SRCDIR)/%.for
	@echo ''; echo Tecmake: compiling $(<F) ...
	$(ECHO)$(FC) -c $(FFLAGS) -o $@ $<

$(OBJDIR)/%.ro:  $(SRCDIR)/%.rc
	@echo ''; echo Tecmake: compiling $(<F) ...
	$(ECHO)$(RCC) $(RCFLAGS) -O coff -o $@ $<

$(LHDIR)/%.lh:  $(SRCLUADIR)/%.lua
	@echo ''; echo Tecmake: generating $(<F) ...
	$(ECHO)$(BIN2C) $< > $@

$(LOHDIR)/%.loh:  $(OBJROOT)/%.lo
	@echo ''; echo Tecmake: generating $(<F) ...
	$(ECHO)$(BIN2C) $< > $@

$(OBJROOT)/%$(LO_SUFFIX).lo:  $(SRCLUADIR)/%.lua
	@echo ''; echo Tecmake: compiling $(<F) ...
	$(ECHO)$(LUAC) -o $@ $<

ifdef LOHPACK
$(LOHDIR)/$(LOHPACK):  $(SRCLUA)
	@echo ''; echo Tecmake: generating $(<F) ...
	$(ECHO)$(LUABIN) $(LUAPRE) $(LUAPREFLAGS) -l $(SRCLUADIR) -o $@ $(SRCLUA)
endif


#---------------------------------#
# Dependencies

#   Build dependencies
.PHONY: depend
depend: $(DEPEND)

$(DEPEND): $(MAKENAME) $(DEPENDDIR)
  ifdef SRC
	  @echo "" > $(DEPEND)
	  @which $(CPPC) 2> /dev/null 1>&2 ;\
	  if [ $$? -eq 0 ]; then \
	    echo "Tecmake: Building Dependencies ... [ $(DEPEND) ] (can be slow)" ;\
	    $(CPPC) $(DEPFLAGS) $(DEPINCS) $(STDINCS) $(PKGINCS) $(DEFINES) $(STDDEFS) -MM $(SOURCES) | \
	    sed -e '1,$$s/^\([^ ]\)/$$(OBJDIR)\/\1/' > $(DEPEND) ;\
	  else \
	    echo "" ;\
	    echo "Tecmake: error, $(CPPC) not found. Dependencies can not be built." ;\
	    echo "Must set NO_DEPEND=Yes." ;\
	    echo "" ;\
	    exit 1 ;\
	  fi
  endif

ifdef USE_NODEPEND
  NO_DEPEND:=Yes
endif

###################
ifndef NO_DEPEND
include $(DEPEND)
endif
###################


#---------------------------------#
# Management Rules

#   Remove extra files
.PHONY: clean-extra
clean-extra:
	rm -f $(DEPEND) $(SRELEASE) so_locations

#   Remove Lua object inclusion files
.PHONY: clean-lohs
clean-lohs:
	rm -f $(LOS) $(LOHS)

#   Remove Lua inclusion files
.PHONY: clean-lhs
clean-lhs:
	rm -f $(LHS)

#   Remove object files
.PHONY: clean-obj
clean-obj:
	rm -f $(OBJS)

#   Remove target
.PHONY: clean-target
clean-target:
	rm -f $(TARGET)

.PHONY: clean-dir
clean-dir:
	rm -fr $(OBJROOT) $(TARGETROOT)

#   Remove target and object files
.PHONY: clean
clean: clean-target clean-obj

#   Remove symbols from executables
.PHONY: strip
strip:
	test -r $(TARGETDIR)/$(TARGETAPPNAME) && strip $(TARGETDIR)/$(TARGETAPPNAME)

#   Rebuild target and object files
.PHONY: rebuild
rebuild: clean-obj clean-target tecmake

#   Rebuild target without rebuilding object files
.PHONY: relink
relink: clean-target tecmake

#   Remove target and object files
.PHONY: clean-all-obj
clean-all-obj:
	@for d in $(UNAMES); do \
	  (cd $(OBJROOT)/$$d; echo $(OBJ) | xargs rm -f) ;\
	done

#   Remove libraries and executables for all platforms
.PHONY: clean-all-target
clean-all-target:
	@for d in $(UNAMES); do \
	  (rm -f $(TARGETROOT)/$$d/$(TARGETNAME) $(TARGETROOT)/$$d/$(TARGETSLIBNAME) $(TARGETROOT)/$$d/$(TARGETDLIBNAME)) ;\
	done

#---------------------------------#
# Remote build
# There must be aliases in DNS for the known UNAMES
.PHONY: $(UNAMES)
$(UNAMES):
	@cwd=`csh -c "\\pwd"` ; home=`csh -c "cd;\\pwd"` ;\
	 dir=`echo $$cwd | sed -e "s|$$home/||"` ;\
	 xterm -bg black -fg lightblue -T "Tecmake: $@ ($(TARGETNAME))" -e ssh $@ $(REMOTE) $$dir $(TECMAKEFLAGS) $(MAKEFLAGS) & 2> /dev/null


#---------------------------------#

.PHONY: version
version:
	@echo "Tecmake Posix Version $(VERSION)"

#---------------------------------#
_______________________________________________
Iup-users mailing list
Iup-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iup-users

Reply via email to