diff options
-rw-r--r-- | src/Makefile | 43 | ||||
-rw-r--r-- | src/tecmake.mak | 368 | ||||
-rw-r--r-- | src/tecmakewin.mak | 1384 |
3 files changed, 1619 insertions, 176 deletions
diff --git a/src/Makefile b/src/Makefile index 1ef8771..fc69f09 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,42 +1,47 @@ +ifeq ($(OS), Windows_NT) + TECMAKE_CMD = $(MAKE) --no-print-directory -f tecmakewin.mak TEC_UNAME=$(TEC_UNAME) +else + TECMAKE_CMD = $(MAKE) --no-print-directory -f tecmake.mak +endif .PHONY: do_all cd_freetype cd_ftgl cd cdx11 cdgdk cd_pdflib cdpdf cdgl cdcontextplus cdcairo cdlua3 cdluapdf3 cdluagl3 cdlua5 cdluapdf5 cdluagl5 cdluacontextplus5 cdluacairo5 cdluaim5 do_all: cd_freetype cd_ftgl cd cd_pdflib cdpdf cdgl cdlua5 cdluapdf5 cdluagl5 cdluaim5 cd_freetype: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cd_freetype + @$(TECMAKE_CMD) MF=cd_freetype cd_ftgl: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cd_ftgl + @$(TECMAKE_CMD) MF=cd_ftgl cd: - @$(MAKE) --no-print-directory -f tecmake.mak + @$(TECMAKE_CMD) cdx11: - @$(MAKE) --no-print-directory -f tecmake.mak USE_X11=Yes + @$(TECMAKE_CMD) USE_X11=Yes cdgdk: - @$(MAKE) --no-print-directory -f tecmake.mak USE_GDK=Yes + @$(TECMAKE_CMD) USE_GDK=Yes cd_pdflib: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cd_pdflib + @$(TECMAKE_CMD) MF=cd_pdflib cdpdf: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cdpdf + @$(TECMAKE_CMD) MF=cdpdf cdgl: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cdgl + @$(TECMAKE_CMD) MF=cdgl cdcontextplus: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cdcontextplus + @$(TECMAKE_CMD) MF=cdcontextplus cdcairo: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cdcairo + @$(TECMAKE_CMD) MF=cdcairo cdlua3: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cdlua3 + @$(TECMAKE_CMD) MF=cdlua3 cdluapdf3: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cdluapdf3 + @$(TECMAKE_CMD) MF=cdluapdf3 cdluagl3: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cdluagl3 + @$(TECMAKE_CMD) MF=cdluagl3 cdlua5: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cdlua5 + @$(TECMAKE_CMD) MF=cdlua5 cdluapdf5: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cdluapdf5 + @$(TECMAKE_CMD) MF=cdluapdf5 cdluagl5: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cdluagl5 + @$(TECMAKE_CMD) MF=cdluagl5 cdluacontextplus5: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cdluacontextplus5 + @$(TECMAKE_CMD) MF=cdluacontextplus5 cdluacairo5: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cdluacairo5 + @$(TECMAKE_CMD) MF=cdluacairo5 cdluaim5: - @$(MAKE) --no-print-directory -f tecmake.mak MF=cdluaim5 + @$(TECMAKE_CMD) MF=cdluaim5 diff --git a/src/tecmake.mak b/src/tecmake.mak index 0d9109e..2426d5b 100644 --- a/src/tecmake.mak +++ b/src/tecmake.mak @@ -6,10 +6,11 @@ #---------------------------------# # Tecmake Version -VERSION = 4.1 +VERSION = 4.3 + #---------------------------------# -# First target +# First target .PHONY: build build: tecmake @@ -58,11 +59,20 @@ ifndef TEC_UNAME ifeq ($(TEC_SYSARCH), x86_64) TEC_SYSARCH:=x64 endif + ifeq ($(TEC_SYSARCH), amd64) + TEC_SYSARCH:=x64 + endif # Compose TEC_SYSRELEASE:=$(TEC_SYSVERSION).$(TEC_SYSMINOR) TEC_UNAME:=$(TEC_SYSNAME)$(TEC_SYSVERSION)$(TEC_SYSMINOR) + # 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 ($(TEC_UNAME), Linux24) GCCVER:=$(shell gcc -dumpversion|cut -f1 -d.) @@ -87,14 +97,24 @@ ifndef TEC_UNAME endif # 64-bits Linux - ifeq ($(TEC_SYSARCH), x64) - BUILD_64=Yes - TEC_UNAME:=$(TEC_UNAME)_64 + ifeq ($(TEC_SYSNAME), Linux) + ifeq ($(TEC_SYSARCH), x64) + BUILD_64=Yes + TEC_UNAME:=$(TEC_UNAME)_64 + endif + + ifeq ($(TEC_SYSARCH), ia64) + BUILD_64=Yes + TEC_UNAME:=$(TEC_UNAME)_ia64 + endif endif - ifeq ($(TEC_SYSARCH), ia64) - BUILD_64=Yes - TEC_UNAME:=$(TEC_UNAME)_ia64 + # 64-bits FreeBSD + ifeq ($(TEC_SYSNAME), FreeBSD) + ifeq ($(TEC_SYSARCH), x64) + BUILD_64=Yes + TEC_UNAME:=$(TEC_UNAME)_64 + endif endif # Solaris and Intel @@ -126,9 +146,19 @@ sysinfo: @echo 'TEC_SYSVERSION = $(TEC_SYSVERSION)' @echo 'TEC_SYSMINOR = $(TEC_SYSMINOR)' @echo 'TEC_SYSARCH = $(TEC_SYSARCH)' - @echo 'TEC_UNAME = $(TEC_UNAME)'; echo '' + @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 @@ -178,32 +208,39 @@ 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 := +STDINCS := OPTFLAGS := -O2 STDLFLAGS := r -DEBUGFLAGS := -g +DEBUGFLAGS := -g STDLDFLAGS := -shared DLIBEXT := so DLIBPRE := lib APPEXT := - -ifneq ($(findstring cygw, $(TEC_UNAME)), ) - GTK_DEFAULT = Yes -endif -ifneq ($(findstring Linux, $(TEC_UNAME)), ) - GTK_DEFAULT = Yes -endif -ifneq ($(findstring MacOS, $(TEC_UNAME)), ) - GTK_DEFAULT = Yes -endif -ifneq ($(findstring FreeBSD, $(TEC_UNAME)), ) - GTK_DEFAULT = Yes -endif ifneq ($(findstring Linux24, $(TEC_UNAME)), ) - GTK_DEFAULT := -endif + NO_GTK_DEFAULT = Yes +endif +ifeq ($(TEC_UNAME), Linux26) + NO_GTK_DEFAULT = Yes +endif +ifeq ($(TEC_UNAME), Linux26_64) + NO_GTK_DEFAULT = Yes +endif +ifndef NO_GTK_DEFAULT + ifneq ($(findstring cygw, $(TEC_UNAME)), ) + GTK_DEFAULT = Yes + endif + ifneq ($(findstring Linux, $(TEC_UNAME)), ) + GTK_DEFAULT = Yes + endif + ifneq ($(findstring MacOS, $(TEC_UNAME)), ) + GTK_DEFAULT = Yes + endif + ifneq ($(findstring FreeBSD, $(TEC_UNAME)), ) + GTK_DEFAULT = Yes + endif +endif #---------------------------------# # Tools @@ -214,7 +251,7 @@ FF := $(TEC_TOOLCHAIN)g77 RANLIB := $(TEC_TOOLCHAIN)ranlib AR := $(TEC_TOOLCHAIN)ar DEBUGGER := $(TEC_TOOLCHAIN)gdb -RCC := $(TEC_TOOLCHAIN)windres +RCC := $(TEC_TOOLCHAIN)windres # Remote build script REMOTE = $(TECMAKE_HOME)/remote @@ -238,7 +275,7 @@ include $(MAKENAME) #---------------------------------# -# Definitions of public variables +# Definitions of public variables ifdef LIBNAME TARGETNAME = $(LIBNAME) @@ -249,7 +286,7 @@ else endif ifndef TARGETNAME - $(error LIBNAME nor APPNAME defined in $(MAKENAME)) + $(error LIBNAME nor APPNAME defined in $(MAKENAME)) endif PROJNAME ?= $(TARGETNAME) @@ -284,7 +321,7 @@ endif ifdef BUILD_64 ifneq ($(findstring SunOS, $(TEC_UNAME)), ) USE_CC = Yes - BUILD_64_DIR = Yes + BUILD_64_DIR = Yes endif ifneq ($(findstring AIX, $(TEC_UNAME)), ) USE_CC = Yes @@ -295,11 +332,11 @@ ifdef BUILD_64 BUILD_64_DIR = Yes endif endif - + ifdef USE_CC CC := cc CPPC := CC - STDFLAGS = + STDFLAGS = UNAMES := $(UNAMES_CC) ifdef USE_CC_DIR TEC_UNAME := $(TEC_UNAME)cc @@ -386,22 +423,22 @@ endif # Definitions for X11 X11_LIBS := Xmu Xt Xext X11 -#X11_LIB := +#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 +#OPENGL_LIB := +#OPENGL_INC := #include <GL/gl.h> and possibly MOTIFGL_LIB := GLw #include <GL/GLwMDrawA.h> # Definitions for Motif -#MOTIF_LIB := +#MOTIF_LIB := #MOTIF_INC := #include <Xm/Xm.h> # Definitions for GLUT -#GLUT_LIB := -#GLUT_INC := +#GLUT_LIB := +#GLUT_INC := # Definitions for GTK ifdef GTK_BASE @@ -431,7 +468,7 @@ ifneq ($(findstring Linux, $(TEC_UNAME)), ) X11_LIB := /usr/X11R6/lib endif X11_INC := /usr/X11R6/include - MOTIFGL_LIB := + MOTIFGL_LIB := endif ifneq ($(findstring IRIX, $(TEC_UNAME)), ) @@ -440,8 +477,8 @@ ifneq ($(findstring IRIX, $(TEC_UNAME)), ) STDLDFLAGS := -elf -shared -rdata_shared -soname lib$(TARGETNAME).so RANLIB := /bin/true X11_LIBS := Xmu Xt X11 - ifdef BUILD_64 - ifdef USE_CC + ifdef BUILD_64 + ifdef USE_CC STDFLAGS += -64 -KPIC STDLDFLAGS += -64 LINKER += -64 @@ -455,11 +492,11 @@ ifneq ($(findstring IRIX, $(TEC_UNAME)), ) MOTIF_INC = /usr/Motif-2.1/include endif -ifneq ($(findstring AIX, $(TEC_UNAME)), ) +ifneq ($(findstring AIX, $(TEC_UNAME)), ) UNIX_POSIX = Yes NO_DYNAMIC ?= Yes ifdef BUILD_64 - ifdef USE_CC + ifdef USE_CC STDFLAGS += -q64 # to compilers C and C++ STDLFLAGS := -X64 $(STDLFLAGS) # to librarian STDLDFLAGS += -64 @@ -493,10 +530,10 @@ ifneq ($(findstring SunOS, $(TEC_UNAME)), ) GLUT_LIB := /usr/local/glut-3.7/lib/glut GLUT_INC := /usr/local/glut-3.7/include ifdef BUILD_64 - ifdef USE_CC + 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 + STDLDFLAGS += -64 -L/usr/lib/64 -L/usr/ucblib/sparcv9 LINKER += -xarch=v9 endif endif @@ -529,6 +566,9 @@ ifneq ($(findstring FreeBSD, $(TEC_UNAME)), ) BSD = Yes X11_LIB := /usr/X11R6/lib X11_INC := /usr/X11R6/include + ifeq ($(TEC_SYSARCH), x64) + STDFLAGS += -fPIC + endif endif #---------------------------------# @@ -558,26 +598,26 @@ LUA52 ?= $(TECTOOLS_HOME)/lua52 # Library path order is reversed ifdef USE_LUA - LUASUFX := + LUA_SUFFIX ?= LIBLUASUFX := 3 endif ifdef USE_LUA4 - LUASUFX := 4 + LUA_SUFFIX ?= 4 LIBLUASUFX := 4 override USE_LUA = Yes LUA := $(LUA4) endif ifdef USE_LUA5 - LUASUFX := 5 + LUA_SUFFIX ?= 5 LIBLUASUFX := 5 override USE_LUA = Yes LUA := $(LUA5) endif ifdef USE_LUA50 - LUASUFX := 50 + LUA_SUFFIX ?= 50 LIBLUASUFX := 5 override USE_LUA = Yes LUA := $(LUA50) @@ -585,7 +625,7 @@ ifdef USE_LUA50 endif ifdef USE_LUA51 - LUASUFX := 5.1 + LUA_SUFFIX ?= 5.1 LIBLUASUFX := 51 override USE_LUA = Yes LUA := $(LUA51) @@ -593,7 +633,7 @@ ifdef USE_LUA51 endif ifdef USE_LUA52 - LUASUFX := 52 + LUA_SUFFIX ?= 52 LIBLUASUFX := 52 override USE_LUA = Yes LUA := $(LUA52) @@ -602,23 +642,23 @@ endif ifdef USE_IUP3 override USE_IUP = Yes -# Inside Tecgraf only +# Inside Tecgraf only ifndef IUP3_BUILD # IUP := $(IUP)3 endif -endif +endif ifdef USE_IUPBETA IUP := $(IUP)/beta -endif +endif ifdef USE_CDBETA CD := $(CD)/beta -endif +endif ifdef USE_IMBETA IM := $(IM)/beta -endif +endif ifdef USE_GLUT override USE_OPENGL = Yes @@ -645,7 +685,7 @@ ifdef USE_IUPCONTROLS LIBS += iupcontrols endif endif - + ifdef USE_IMLUA override USE_IM = Yes ifdef USE_STATIC @@ -689,46 +729,46 @@ ifdef USE_LUA LUA_LIB ?= $(LUA)/lib/$(TEC_UNAME_LIB_DIR) ifdef USE_STATIC ifndef NO_LUALIB - SLIB += $(LUA_LIB)/liblualib$(LUASUFX).a + SLIB += $(LUA_LIB)/liblualib$(LUA_SUFFIX).a endif - SLIB += $(LUA_LIB)/liblua$(LUASUFX).a + SLIB += $(LUA_LIB)/liblua$(LUA_SUFFIX).a else ifndef NO_LUALIB - LIBS += lualib$(LUASUFX) + LIBS += lualib$(LUA_SUFFIX) endif ifndef NO_LUALINK - LIBS += lua$(LUASUFX) + LIBS += lua$(LUA_SUFFIX) LDIR += $(LUA_LIB) else ifneq ($(findstring cygw, $(TEC_UNAME)), ) - LIBS += lua$(LUASUFX) + LIBS += lua$(LUA_SUFFIX) LDIR += $(LUA_LIB) endif endif endif - + LUA_INC ?= $(LUA)/include INCLUDES += $(LUA_INC) - + LUA_BIN ?= $(LUA)/bin/$(TEC_UNAME) - BIN2C := $(LUA_BIN)/bin2c$(LUASUFX) - LUAC := $(LUA_BIN)/luac$(LUASUFX) - LUABIN := $(LUA_BIN)/lua$(LUASUFX) + BIN2C := $(LUA_BIN)/bin2c$(LUA_SUFFIX) + LUAC := $(LUA_BIN)/luac$(LUA_SUFFIX) + LUABIN := $(LUA_BIN)/lua$(LUA_SUFFIX) endif -ifdef USE_IUP - IUPSUFX := +ifdef USE_IUP + IUP_SUFFIX ?= ifdef USE_IUP3 ifdef GTK_DEFAULT ifdef USE_MOTIF - IUPSUFX := mot + IUP_SUFFIX := mot else override USE_GTK = Yes override USE_GDK = Yes endif else ifdef USE_GTK - IUPSUFX := gtk + IUP_SUFFIX := gtk else override USE_MOTIF = Yes endif @@ -743,7 +783,7 @@ ifdef USE_IUP ifdef USE_OPENGL SLIB += $(IUP)/lib/$(TEC_UNAME_LIB_DIR)/libiupgl.a endif - SLIB += $(IUP)/lib/$(TEC_UNAME_LIB_DIR)/libiup$(IUPSUFX).a + SLIB += $(IUP)/lib/$(TEC_UNAME_LIB_DIR)/libiup$(IUP_SUFFIX).a else ifdef USE_CD LIBS += iupcd @@ -751,23 +791,23 @@ ifdef USE_IUP ifdef USE_OPENGL LIBS += iupgl endif - LIBS += iup$(IUPSUFX) + LIBS += iup$(IUP_SUFFIX) LDIR += $(IUP)/lib/$(TEC_UNAME_LIB_DIR) endif INCLUDES += $(IUP)/include endif ifdef USE_CD - CDSUFX := + CD_SUFFIX ?= override USE_X11 = Yes - ifndef USE_CD_OLD + ifndef USE_CD_OLD ifdef GTK_DEFAULT ifdef USE_MOTIF - CDSUFX := x11 + CD_SUFFIX := x11 endif else ifdef USE_GTK - CDSUFX := gdk + CD_SUFFIX := gdk endif endif endif @@ -783,7 +823,7 @@ ifdef USE_CD SLIB += $(CD)/lib/$(TEC_UNAME_LIB_DIR)/libcdcairo.a LIBS += pangocairo-1.0 cairo endif - SLIB += $(CD)/lib/$(TEC_UNAME_LIB_DIR)/libcd$(CDSUFX).a + SLIB += $(CD)/lib/$(TEC_UNAME_LIB_DIR)/libcd$(CD_SUFFIX).a ifndef USE_GTK # Freetype is already included in GTK SLIB += $(CD)/lib/$(TEC_UNAME_LIB_DIR)/libfreetype.a @@ -800,11 +840,15 @@ ifdef USE_CD LIBS += cdcairo LIBS += pangocairo-1.0 cairo endif - LIBS += cd$(CDSUFX) + LIBS += cd$(CD_SUFFIX) LDIR += $(CD)/lib/$(TEC_UNAME_LIB_DIR) ifndef USE_GTK # Freetype is already included in GTK - LIBS += freetype + ifneq ($(findstring cygw, $(TEC_UNAME)), ) + LIBS += freetype-6 + else + LIBS += freetype + endif endif endif INCLUDES += $(CD)/include @@ -824,7 +868,7 @@ ifdef USE_GLUT LIBS += glut LDIR += $(GLUT_LIB) STDINCS += $(GLUT_INC) -endif +endif ifdef USE_OPENGL override USE_X11 = Yes @@ -836,7 +880,7 @@ ifdef USE_OPENGL LIBS += $(OPENGL_LIBS) LDIR += $(OPENGL_LIB) STDINCS += $(OPENGL_INC) -endif +endif ifdef USE_MOTIF override USE_X11 = Yes @@ -846,55 +890,61 @@ ifdef USE_MOTIF ifneq ($(findstring Linux, $(TEC_UNAME)), ) X11_LIBS := Xpm $(X11_LIBS) endif - ifneq ($(findstring cygw, $(TEC_UNAME)), ) + ifneq ($(findstring cygw, $(TEC_UNAME)), ) X11_LIBS := Xpm $(X11_LIBS) endif endif ifdef USE_GTK - CHECK_GTK = Yes - ifneq ($(findstring MacOS, $(TEC_UNAME)), ) -# Option 1 - Fink GTK port - LDIR += $(GTK)/lib - override USE_X11 = Yes - LIBS += gtk-x11-2.0 gdk-x11-2.0 pangox-1.0 -# 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-2.0 gdk-quartz-2.0 pangoft2-1.0 - - LIBS += freetype + ifdef USE_PKGCONFIG + # get compile/link flags via pkg-config + STDFLAGS += $(shell pkg-config --cflags gtk+-2.0 gdk-2.0) + LIBS += $(shell pkg-config --libs gtk+-2.0 gdk-2.0) else - # if not the default, then include it for linker - # must be before the default - ifdef GTK_BASE + CHECK_GTK = Yes + ifneq ($(findstring MacOS, $(TEC_UNAME)), ) + # Option 1 - Fink GTK port LDIR += $(GTK)/lib + override USE_X11 = Yes + LIBS += gtk-x11-2.0 gdk-x11-2.0 pangox-1.0 + # 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-2.0 gdk-quartz-2.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 + override USE_X11 = Yes + LIBS += gtk-x11-2.0 gdk-x11-2.0 pangox-1.0 + 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-2.0 $(GTK)/include/cairo $(GTK)/include/pango-1.0 $(GTK)/include/glib-2.0 + + ifeq ($(TEC_SYSARCH), x64) + STDINCS += $(GTK)/lib64/glib-2.0/include $(GTK)/lib64/gtk-2.0/include + # Add also these to avoid errors in systems that lib64 does not exists + STDINCS += $(GTK)/lib/glib-2.0/include $(GTK)/lib/gtk-2.0/include + else + ifeq ($(TEC_SYSARCH), ia64) + STDINCS += $(GTK)/lib64/glib-2.0/include $(GTK)/lib64/gtk-2.0/include + else + STDINCS += $(GTK)/lib/glib-2.0/include $(GTK)/lib/gtk-2.0/include + endif + endif + ifneq ($(findstring FreeBSD, $(TEC_UNAME)), ) + STDINCS += /lib/X11R6/include/gtk-2.0 endif - override USE_X11 = Yes - LIBS += gtk-x11-2.0 gdk-x11-2.0 pangox-1.0 - 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-2.0 $(GTK)/include/cairo $(GTK)/include/pango-1.0 $(GTK)/include/glib-2.0 - - ifeq ($(TEC_SYSARCH), x64) - STDINCS += $(GTK)/lib64/glib-2.0/include $(GTK)/lib64/gtk-2.0/include - # Add also these to avoid errors in systems that lib64 does not exists - STDINCS += $(GTK)/lib/glib-2.0/include $(GTK)/lib/gtk-2.0/include - else - ifeq ($(TEC_SYSARCH), ia64) - STDINCS += $(GTK)/lib64/glib-2.0/include $(GTK)/lib64/gtk-2.0/include - else - STDINCS += $(GTK)/lib/glib-2.0/include $(GTK)/lib/gtk-2.0/include - endif - endif - ifneq ($(findstring FreeBSD, $(TEC_UNAME)), ) - STDINCS += /lib/X11R6/include/gtk-2.0 endif endif @@ -910,26 +960,26 @@ ifdef USE_X11 LIBS += $(X11_LIBS) LDIR += $(X11_LIB) STDINCS += $(X11_INC) -endif +endif LIBS += m ifneq ($(findstring cygw, $(TEC_UNAME)), ) WIN_OTHER := Yes - + # INCLUDES for dependencies, remove references to "c:" and similars DEPINCS := $(patsubst c:%, /cygdrive/c%, $(INCLUDES)) 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 + # 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 +endif #---------------------------------# # Building compilation flags that are sets @@ -969,10 +1019,10 @@ TARGETDLIBNAME := $(DLIBPRE)$(TARGETNAME).$(DLIBEXT) ifeq ($(MAKETYPE), APP) TARGET := $(TARGETDIR)/$(TARGETAPPNAME) else - ifeq ($(NO_DYNAMIC), Yes) + ifeq ($(NO_DYNAMIC), Yes) TARGET := $(TARGETDIR)/$(TARGETSLIBNAME) else - ifeq ($(NO_STATIC), Yes) + ifeq ($(NO_STATIC), Yes) TARGET := $(TARGETDIR)/$(TARGETDLIBNAME) else TARGET := $(TARGETDIR)/$(TARGETSLIBNAME) $(TARGETDIR)/$(TARGETDLIBNAME) @@ -1017,14 +1067,14 @@ VPATH = .:$(foreach dir,$(P-SRC),$(if $(dir)="./",:$(dir))) #---------------------------------# # Main Rule - Build Everything that it is necessary -.PHONY: tecmake +.PHONY: tecmake ifeq ($(MAKETYPE), APP) tecmake: print-start system-check directories application scripts else - ifeq ($(NO_DYNAMIC), Yes) + ifeq ($(NO_DYNAMIC), Yes) tecmake: print-start system-check directories static-lib else - ifeq ($(NO_STATIC), Yes) + ifeq ($(NO_STATIC), Yes) tecmake: print-start system-check directories dynamic-lib else tecmake: print-start system-check directories static-lib dynamic-lib @@ -1044,14 +1094,14 @@ system-check: endif endif ifdef CHECK_GTK - ifdef UNIX_POSIX - @echo ''; echo 'Tecmake: check failed, GTK NOT available in this system.'; echo ''; exit 1; - else - ifneq ($(findstring Linux24, $(TEC_UNAME)), ) - ifndef GTK_BASE - @echo ''; echo 'Tecmake: check failed, GTK too OLD in this system.'; echo ''; exit 1; - endif - endif + 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 @@ -1059,7 +1109,7 @@ system-check: @echo ''; echo 'Tecmake: check failed, GDI+ NOT available in this system.'; echo ''; exit 1; endif endif - + #---------------------------------# # Dynamic Library Build @@ -1071,7 +1121,7 @@ $(TARGETDIR)/$(TARGETDLIBNAME) : $(LOHS) $(OBJS) $(EXTRADEPS) $(ECHO)$(LD) $(STDLDFLAGS) -o $@ $(OBJS) $(SLIB) $(LFLAGS) @echo ''; echo 'Tecmake: Dynamic Library ($@) Done.'; echo '' - + #---------------------------------# # Static Library Build @@ -1085,7 +1135,7 @@ $(TARGETDIR)/$(TARGETSLIBNAME) : $(LOHS) $(OBJS) $(EXTRADEPS) $(ECHO)-$(RANLIB) $@ @echo ''; echo 'Tecmake: Static Library ($@) Done.'; echo '' - + #---------------------------------# # Application Build @@ -1101,7 +1151,7 @@ $(TARGETDIR)/$(TARGETAPPNAME) : $(LOHS) $(OBJS) $(EXTRADEPS) fi @echo ''; echo 'Tecmake: Application ($@) Done.'; echo '' - + #---------------------------------# # Application Scripts @@ -1114,7 +1164,7 @@ ifdef NO_SCRIPTS else scripts: $(SRELEASE) ; endif - + $(SRELEASE): $(MAKENAME) @echo ''; echo 'Tecmake: building script $(@F)' @echo "#!/bin/csh" > $@ @@ -1125,7 +1175,7 @@ $(SRELEASE): $(MAKENAME) @echo 'exec $(TARGETROOT)/$$TEC_UNAME/$(TARGETNAME) $$*' >> $@ @chmod a+x $@ - + #---------------------------------# # Directories Creation @@ -1195,7 +1245,7 @@ $(LOHDIR)/$(LOHPACK): $(SRCLUA) $(ECHO)$(LUABIN) $(LUAPRE) $(LUAPREFLAGS) -l $(SRCLUADIR) -o $@ $(SRCLUA) endif - + #---------------------------------# # Dependencies @@ -1214,14 +1264,18 @@ $(DEPEND): $(MAKENAME) else \ echo "" ;\ echo "Tecmake: error, $(CPPC) not found. Dependencies can not be built." ;\ - echo "Must set USE_NODEPEND=Yes." ;\ + echo "Must set NO_DEPEND=Yes." ;\ echo "" ;\ exit 1 ;\ fi endif +ifdef USE_NODEPEND + NO_DEPEND:=Yes +endif + ################### -ifndef USE_NODEPEND +ifndef NO_DEPEND include $(DEPEND) endif ################### @@ -1234,12 +1288,12 @@ endif .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 object files .PHONY: clean-obj clean-obj: @@ -1263,11 +1317,11 @@ clean: clean-target clean-obj strip: test -r $(TARGETDIR)/$(TARGETAPPNAME) && strip $(TARGETDIR)/$(TARGETAPPNAME) -# Rebuild target and object files +# Rebuild target and object files .PHONY: rebuild rebuild: clean-extra clean-lohs clean-obj clean-target tecmake -# Rebuild target without rebuilding object files +# Rebuild target without rebuilding object files .PHONY: relink relink: clean-target tecmake @@ -1284,7 +1338,7 @@ 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 diff --git a/src/tecmakewin.mak b/src/tecmakewin.mak new file mode 100644 index 0000000..90506ed --- /dev/null +++ b/src/tecmakewin.mak @@ -0,0 +1,1384 @@ +#-------------------------------------------------------------------------# +#- Tecmake (Windows Version) -# +#- Generic Makefile to build applications and libraries at TeCGraf -# +#- The user makefile usually has the name "config.mak". -# +#-------------------------------------------------------------------------# + +#---------------------------------# +# Tecmake Version +VERSION = 4.3 + + +#---------------------------------# +# First target +.PHONY: build +build: tecmake + + +#---------------------------------# +# Location of this file +TECMAKE = $(TECMAKE_HOME)/tecmakewin.mak + + +#---------------------------------# +# System Variables Definitions + +# If tecmake.bat is not used, +# then at least define main system variables. + +WIN32NAMES = vc10 vc9 vc8 vc7 vc6 owc1 bc55 bc56 bc6 gcc3 gcc4 mingw3 mingw4 dllw4 dllg4 dll dll7 dll8 dll9 dll10 +WIN64UNAMES = vc10_64 vc9_64 vc8_64 dll8_64 dll9_64 dll10_64 + +ifdef TEC_UNAME + ifneq ($(findstring $(TEC_UNAME), $(WIN32NAMES)), ) + TEC_WIN32 = Yes + else + ifneq ($(findstring $(TEC_UNAME), $(WIN64NAMES)), ) + TEC_WIN64 = Yes + endif + endif +endif + +ifdef TEC_WIN64 + TEC_SYSNAME=Win64 TEC_SYSARCH=x64 + ifeq ($(PROCESSOR_ARCHITECTURE), x86) + # Define this if compiling for 64-bits in a 32bits environment + USE_X86_CL64=Yes + endif +else + TEC_SYSNAME=Win32 + TEC_SYSARCH=x86 +endif + + +#---------------------------------# +# System Info +.PHONY: sysinfo +sysinfo: + @echo ''; echo 'Tecmake: System Info' + @echo 'TEC_SYSNAME = $(TEC_SYSNAME)' + @echo 'TEC_SYSARCH = $(TEC_SYSARCH)' + @echo 'TEC_UNAME = $(TEC_UNAME)'; echo '' + + +#---------------------------------# +# Known platforms + +UNAMES = $(WIN32NAMES) $(WIN64NAMES) + + +#---------------------------------# +# Directories Definitions + +PROJDIR = .. +SRCDIR = . +OBJROOT = $(PROJDIR)/obj + + +# --------------------------------------------------------- +# Byte Order and Word Size + +ifneq ($(findstring x86, $(TEC_SYSARCH)), ) + TEC_BYTEORDER = TEC_LITTLEENDIAN +else +ifeq ($(TEC_SYSARCH), arm) + TEC_BYTEORDER = TEC_LITTLEENDIAN +else + TEC_BYTEORDER = TEC_BIGENDIAN +endif +endif + +ifeq ($(TEC_SYSARCH), x64) + TEC_BYTEORDER = TEC_LITTLEENDIAN + TEC_WORDSIZE = TEC_64 +else + TEC_WORDSIZE = TEC_32 +endif + +# Itanium Exception +ifeq ($(TEC_SYSARCH), ia64) + TEC_BYTEORDER = TEC_LITTLEENDIAN + TEC_WORDSIZE = TEC_64 +endif + + +#---------------------------------# +# Tools + +SHELL = bash +SLASH = slash_parser + +# Packed LOHs script +LUAPRE = "$(TECMAKE_PATH)"/luapre.lua + + +#---------------------------------# +# Defaults +APPTYPE = windows +INCLUDES = +LIBS = +LIB = + + +#---------------------------------# +# User 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) + +ifneq ($(PROJNAME), $(TARGETNAME)) + OBJROOT := $(OBJROOT)/$(TARGETNAME) +endif + +ifneq ($(findstring dll, $(TEC_UNAME)), ) + ifneq ($(MAKETYPE), APP) + MAKETYPE = DLL + DEF_FILE ?= $(TARGETNAME).def + DEF_FILE := $(SRCDIR)/$(DEF_FILE) + endif +endif + +DEPEND := $(TARGETNAME).wdep + +ifdef DEPENDDIR + DEPEND := $(DEPENDDIR)/$(TARGETNAME).dep.$(TEC_UNAME) +endif + + +# --------------------------------------------------------- +# LO and LOH Suffix + +SRCLUADIR ?= $(SRCDIR) +LOHDIR ?= $(SRCLUADIR) + +ifdef USE_LOH_SUBDIR + ifeq ($(TEC_BYTEORDER), TEC_BIGENDIAN) + ifeq ($(TEC_WORDSIZE), TEC_64) + LOH_SUBDIR ?= be64 + else + LOH_SUBDIR ?= be32 + endif + else + ifeq ($(TEC_WORDSIZE), TEC_64) + # longs in 64-bits Windows are 32 bits!!! + LOH_SUBDIR ?= le64w + else + LOH_SUBDIR ?= le32 + endif + endif + LOHDIR := $(LOHDIR)/$(LOH_SUBDIR) + INCLUDES += $(LOHDIR) +else + ifeq ($(TEC_BYTEORDER), TEC_BIGENDIAN) + ifeq ($(TEC_WORDSIZE), TEC_64) + LO_SUFFIX ?= _be64 + else + LO_SUFFIX ?= _be32 + endif + else + ifeq ($(TEC_WORDSIZE), TEC_64) + # longs in 64-bits Windows are 32 bits!!! + LO_SUFFIX ?= _le64w + else + LO_SUFFIX ?= + endif + endif +endif + + +#---------------------------------# +# Main Rule - Build Everything that it is necessary + +.PHONY: tecmake +ifeq ($(MAKETYPE), APP) + tecmake: print-start system-check directories application scripts +else + ifeq ($(MAKETYPE), DLL) + tecmake: print-start system-check directories dynamic-lib + else + tecmake: print-start system-check directories static-lib + endif +endif + +.PHONY: print-start +print-start: + @echo ''; echo 'Tecmake: Starting [ $(TARGETNAME):$(TEC_UNAME) ]' + + +#---------------------------------# +# Definitions of public variables + +ifeq ($(MAKETYPE), APP) + TARGETROOT ?= $(PROJDIR)/bin +else + TARGETROOT ?= $(PROJDIR)/lib +endif + +ifeq ($(MAKETYPE), APP) + TEC_UNAME_DIR ?= $(TEC_SYSNAME) +else + TEC_UNAME_DIR ?= $(TEC_UNAME) +endif + +ifdef DBG + ifdef DBG_DIR + TEC_UNAME_DIR := $(TEC_UNAME_DIR)d + endif +endif + +OBJDIR := $(OBJROOT)/$(TEC_UNAME_DIR) +TARGETDIR := $(TARGETROOT)/$(TEC_UNAME_DIR) + +TARGETEXE := $(TARGETDIR)/$(TARGETNAME).exe +TARGETDLL := $(TARGETDIR)/$(TARGETNAME).dll +TARGETLIB := $(TARGETDIR)/$(TARGETNAME).lib +ifneq ($(findstring gcc, $(TEC_UNAME)), ) + TARGETLIB := $(TARGETDIR)/lib$(TARGETNAME).a +endif +ifneq ($(findstring mingw, $(TEC_UNAME)), ) + TARGETLIB := $(TARGETDIR)/lib$(TARGETNAME).a +endif +ifneq ($(findstring dllg4, $(TEC_UNAME)), ) + TARGETLIB := $(TARGETDIR)/$(TARGETNAME).a +endif +ifneq ($(findstring dllw4, $(TEC_UNAME)), ) + TARGETLIB := $(TARGETDIR)/$(TARGETNAME).a +endif + +ifdef NO_ECHO + ECHO:=@ +endif + +#---------------------------------# +# Platform/Compiler dependend parameters + +STDDEFS = -DTEC_UNAME=$(TEC_UNAME) -DTEC_SYSNAME=$(TEC_SYSNAME) -D$(TEC_BYTEORDER) -D$(TEC_WORDSIZE) -DWIN32 +STDLIB = kernel32 user32 gdi32 winspool comdlg32 advapi32 shell32 ole32 oleaut32 uuid comctl32 + +#Compilers +VC6 ?= x:/lng/vc6 +VC7 ?= x:/lng/vc7 +VC8 ?= x:/lng/vc8 +VC9 ?= x:/lng/vc9 +VC10 ?= x:/lng/vc10 +OWC1 ?= x:/lng/owc1 +BC55 ?= x:/lng/bc55 +BC56 ?= x:/lng/cbuilderx +BC6 ?= x:/lng/bc6 +MINGW3 ?= x:/lng/mingw3 +MINGW4 ?= x:/lng/mingw4 +# The default location is in the PATH +#GCC3 ?= x:/lng/cygw15 +#GCC4 ?= x:/lng/cygw17 + +#Tools +QT ?= x:/lng/qt +GTK ?= x:/lng/gtk +GLUT ?= x:/lng/glut + +OBJEXT = obj +LIBEXT = lib + +ifeq "$(TEC_UNAME)" "vc6" + COMPILER = $(VC6) +endif + +ifeq "$(TEC_UNAME)" "vc7" + COMPILER = $(VC7) +endif + +ifeq "$(TEC_UNAME)" "vc8" + COMPILER = $(VC8) +endif + +ifeq "$(TEC_UNAME)" "vc8_64" + COMPILER = $(VC8) + BUILD64 = Yes + SDKLIBBIN = /amd64 +endif + +ifeq "$(TEC_UNAME)" "vc9" + COMPILER = $(VC9) +endif + +ifeq "$(TEC_UNAME)" "vc9_64" + COMPILER = $(VC9) + BUILD64 = Yes +endif + +ifeq "$(TEC_UNAME)" "vc10" + COMPILER = $(VC10) +endif + +ifeq "$(TEC_UNAME)" "vc10_64" + COMPILER = $(VC10) + BUILD64 = Yes +endif + +ifeq "$(TEC_UNAME)" "dll" + COMPILER = $(VC6) + USE_DLL = Yes +endif + +ifeq "$(TEC_UNAME)" "dll7" + COMPILER = $(VC7) + USE_DLL = Yes +endif + +ifeq "$(TEC_UNAME)" "dll8" + COMPILER = $(VC8) + USE_DLL = Yes + ifdef DBG + #debug info not working for dll8 linker + define DBG + endef + endif +endif + +ifeq "$(TEC_UNAME)" "dll8_64" + COMPILER = $(VC8) + USE_DLL = Yes + BUILD64 = Yes + SDKLIBBIN = /amd64 +endif + +ifeq "$(TEC_UNAME)" "dll9" + COMPILER = $(VC9) + USE_DLL = Yes +endif + +ifeq "$(TEC_UNAME)" "dll9_64" + COMPILER = $(VC9) + USE_DLL = Yes + BUILD64 = Yes +endif + +ifeq "$(TEC_UNAME)" "dll10" + COMPILER = $(VC10) + USE_DLL = Yes +endif + +ifeq "$(TEC_UNAME)" "dll10_64" + COMPILER = $(VC10) + USE_DLL = Yes + BUILD64 = Yes +endif + +ifeq "$(COMPILER)" "$(VC6)" + TEC_CC = vc + # Use the VC7 Platform SDK, no harm if VC7 is not installed + PLATSDK ?= $(VC7)/PlatformSDK + OLD_OPENGL = Yes +endif + +ifeq "$(COMPILER)" "$(VC7)" + TEC_CC = vc + PLATSDK ?= $(VC7)/PlatformSDK + OLD_OPENGL = Yes +endif + +ifeq "$(COMPILER)" "$(VC8)" + NEW_VC_COMPILER = Yes + TEC_CC = vc + STDDEFS += -DMSVC8 + PLATSDK ?= $(VC8)/PlatformSDK + OLD_OPENGL = Yes + ifdef USE_DLL + GEN_MANIFEST ?= Yes + else + #there is no single thread RTL in VC8 + USE_MT = Yes + endif +endif + +ifeq "$(COMPILER)" "$(VC9)" + NEW_VC_COMPILER = Yes + TEC_CC = vc + STDDEFS += -DMSVC9 + ifdef USE_DLL + GEN_MANIFEST ?= Yes + else + #there is no single thread RTL in VC9 + USE_MT = Yes + endif + ifdef VC9SDK + PLATSDK ?= $(VC9SDK) + else + # Not the real folder, we copied from "C:\Program Files\Microsoft SDKs\Windows\v6.0A" + PLATSDK ?= $(VC9)/WinSDK + endif + RESBIN := $(PLATSDK)/bin + ifdef BUILD64 + RESBIN := $(RESBIN)/x64 + endif +endif + +ifeq "$(COMPILER)" "$(VC10)" + NEW_VC_COMPILER = Yes + TEC_CC = vc + STDDEFS += -DMSVC10 + ifdef USE_DLL + GEN_MANIFEST ?= Yes + else + #there is no single thread RTL in VC10 + USE_MT = Yes + endif + ifdef VC10SDK + PLATSDK ?= $(VC10SDK) + else + # Not the real folder, we copied from "C:\Program Files\Microsoft SDKs\Windows\v7.1" + PLATSDK ?= $(VC10)/WinSDK + endif + RESBIN := $(PLATSDK)/bin + ifdef BUILD64 + RESBIN := $(RESBIN)/x64 + endif +endif + +ifeq "$(TEC_CC)" "vc" + ifdef BUILD64 + STDDEFS += -DWIN64 + MACHINE = X64 + GTK := $(GTK)_x64 + VCLIBBIN = /amd64 + SDKLIBBIN ?= /x64 + ifdef USE_X86_CL64 + BIN = $(COMPILER)/bin/x86_amd64 + else + BIN = $(COMPILER)/bin/amd64 + endif + else + VCLIBBIN = + SDKLIBBIN = + MACHINE = X86 + BIN = $(COMPILER)/bin + endif + RESBIN ?= $(COMPILER)/bin + CC = $(BIN)/cl -nologo + CPPC = $(BIN)/cl -nologo + LIBC = $(BIN)/link -lib -nologo + LINKER = $(BIN)/link -nologo + MT = $(RESBIN)/mt -nologo + RCC = $(RESBIN)/rc -fo + STDINCS = $(PLATSDK)/include $(COMPILER)/include + STDFLAGS = -c -Fo$(OBJDIR)/ -W3 + STDLFLAGS = + DEPDEFS = -D_WIN32 -D_M_IX86 -D_STDCALL_SUPPORTED + STDLIBDIR = -LIBPATH:$(COMPILER)/lib$(VCLIBBIN) -LIBPATH:$(PLATSDK)/lib$(SDKLIBBIN) + OPTFLAGS := -O2 + DEBUGFLAGS := -Z7 -Od -GZ + ifdef NEW_VC_COMPILER + DEBUGFLAGS := -Z7 -Od -RTC1 + STDDEFS += -D_CRT_SECURE_NO_DEPRECATE + ifndef CPP_NARROW_INLINES + STDDEFS += -D_CPP_NARROW_INLINES_DEFINED + endif + STDFLAGS += -EHsc + else # Exception Handling Model + STDFLAGS += -GX + endif + ifneq ($(MAKETYPE), LIB) + ifeq "$(COMPILER)" "$(VC6)" + STDLFLAGS += -pdb:none -incremental:no -machine:$(MACHINE) + else + STDLFLAGS += -incremental:no -machine:$(MACHINE) + endif + ifdef DBG + STDLFLAGS += -debug + endif + ifdef NEW_VC_COMPILER + ifndef GEN_MANIFEST + STDLFLAGS += -MANIFEST:NO + else + ifeq ($(GEN_MANIFEST), No) + STDLFLAGS += -MANIFEST:NO + else + STDLFLAGS += -MANIFEST + endif + endif + endif + endif + ifeq ($(MAKETYPE), APP) + ifeq "$(COMPILER)" "$(VC6)" + STDFLAGS += -GA + else + OPTFLAGS += -GL + ifdef OPT + STDLFLAGS += -LTCG + endif + endif + STDLFLAGS += -subsystem:$(APPTYPE) -out:$(TARGETEXE) + else + ifeq ($(MAKETYPE), DLL) + ifeq "$(COMPILER)" "$(VC6)" + STDFLAGS += -GD + else + OPTFLAGS += -GL + STDLFLAGS += -LTCG + endif + STDLFLAGS += -dll -subsystem:$(APPTYPE) -out:$(TARGETDLL) -implib:$(TARGETLIB) -def:$(DEF_FILE) + else + STDLFLAGS += -out:$(TARGETLIB) + endif + endif + ifdef USE_DLL + ifdef DBG + STDFLAGS += -MDd + else + STDFLAGS += -MD + endif + else + ifdef USE_MT + ifdef DBG + STDFLAGS += -MTd + else + STDFLAGS += -MT + endif + else + ifdef DBG + STDFLAGS += -MLd + else + STDFLAGS += -ML + endif + endif + endif +endif + +ifeq "$(TEC_UNAME)" "owc1" + COMPILER = $(OWC1) + TEC_CC = wc + STDLFLAGS = +endif + +ifeq "$(TEC_CC)" "wc" + WIN_OTHER = YES + BIN = $(COMPILER)/binnt + CC = $(SLASH) $(BIN)/wcc386 + CPPC = $(SLASH) $(BIN)/wpp386 + LIBC = $(SLASH) $(BIN)/wlib + LINKER = $(SLASH) $(BIN)/wlink + RCC = $(SLASH) $(BIN)/rc -fo + STDINCS = $(COMPILER)/h $(COMPILER)/h/nt + STDFLAGS += -od -w4 -5r -bt=nt -mf -e25 -zq -fo$(OBJDIR)/ + STDLIBDIR = LIBP $(COMPILER)/lib386 LIBP $(COMPILER)/lib386/nt + DEBUGFLAGS := -d2 + OPTFLAGS := -ot + ifeq ($(MAKETYPE), APP) + STDLFLAGS = OP maxe=25 OP quiet FORM windows nt NAME $(TARGETEXE) + ifeq ($(APPTYPE), CONSOLE) + STDLFLAGS += RU con + endif + else + STDLFLAGS += -b -c -n -q -p=512 $(TARGETLIB) + endif + ifdef USE_DLL + STDFLAGS += -bm -br + endif +endif + +ifeq "$(TEC_UNAME)" "bc55" + COMPILER = $(BC55) + TEC_CC = bc + OLD_OPENGL = Yes +endif + +ifeq "$(TEC_UNAME)" "bc56" + COMPILER = $(BC56) + TEC_CC = bc + OLD_OPENGL = Yes +endif + +ifeq "$(TEC_UNAME)" "bc6" + COMPILER = $(BC6) + TEC_CC = bc + OLD_OPENGL = Yes +endif + +ifeq "$(TEC_CC)" "bc" + WIN_OTHER = YES + TEC_CC = bc + BIN = $(COMPILER)/bin + CC = $(BIN)/bcc32 + CPPC = $(BIN)/bcc32 + LIBC = $(BIN)/tlib /P32 + RCC = $(BIN)/brc32 -r -fo + LINKER = $(SLASH) $(BIN)/ilink32 + STDINCS = $(COMPILER)/include $(COMPILER)/include/dinkumware + STDLIBDIR = -L$(COMPILER)/lib -L$(COMPILER)/lib/PSDK + STDFLAGS = -c -n$(OBJDIR)/ + STDLIB := cw32 import32 $(STDLIB) + ifeq ($(MAKETYPE), APP) + STDLFLAGS = -Tpe #-x -c -Gn + ifeq ($(APPTYPE), CONSOLE) + STARTUP = c0x32.obj + STDLFLAGS += -ap + else + STARTUP = c0w32.obj + STDLFLAGS += -aa + endif + else + STDLFLAGS = $(TARGETLIB) + endif + OPTFLAGS := -O2 + DEBUGFLAGS := -v -x -xp + ifdef USE_DLL + STDFLAGS += -tWDMR + endif +endif + +ifeq "$(TEC_UNAME)" "gcc3" + COMPILER = $(GCC3) + TEC_CC = gcc + ifdef USE_OPENGL + STDDEFS += -DUSE_OPENGL32 + endif +endif + +ifeq "$(TEC_UNAME)" "gcc4" + COMPILER = $(GCC4) + TEC_CC = gcc + ifdef USE_OPENGL + STDDEFS += -DUSE_OPENGL32 + endif +endif + +ifeq "$(TEC_UNAME)" "mingw3" + COMPILER = $(MINGW3) + TEC_CC = gcc + OLD_OPENGL = Yes +endif + +ifeq "$(TEC_UNAME)" "mingw4" + COMPILER = $(MINGW4) + TEC_CC = gcc + OLD_OPENGL = Yes +endif + +ifeq "$(TEC_UNAME)" "dllg4" + # USE_DLL is unused by gcc but we define it anyway + USE_DLL = Yes + COMPILER = $(GCC4) + TEC_CC = gcc + ifdef USE_OPENGL + STDDEFS += -DUSE_OPENGL32 + endif +endif + +ifeq "$(TEC_UNAME)" "dllw4" + # USE_DLL is unused by gcc but we define it anyway + USE_DLL = Yes + COMPILER = $(MINGW4) + TEC_CC = gcc + OLD_OPENGL = Yes +endif + +ifeq "$(TEC_CC)" "gcc" + WIN_OTHER = YES + ifneq "$(findstring mingw, $(COMPILER))" "" + BIN = $(COMPILER)/bin/ + endif + CC = $(BIN)gcc + CPPC = $(BIN)g++ + LIBC = $(BIN)ar + RCC = $(BIN)windres -O coff -o + ifndef LINKER + ifneq "$(findstring .cpp, $(SRC))" "" + LINKER := $(CPPC) + else + LINKER := $(CC) + endif + endif + RANLIB = $(BIN)ranlib + ifneq "$(findstring mingw, $(COMPILER))" "" + STDINCS = $(COMPILER)/include + STDLIBDIR = -L$(COMPILER)/lib + endif + STDFLAGS += -Wall + DEBUGFLAGS := -g + OPTFLAGS := -O2 + OBJEXT=o + LIBEXT=a + ifeq ($(MAKETYPE), APP) + STDLFLAGS = -Wl,-subsystem,$(APPTYPE) + else + ifeq ($(MAKETYPE), DLL) + STDLFLAGS = + else + STDLFLAGS = r + endif + endif +endif + +ifdef DBG + STDFLAGS += $(DEBUGFLAGS) + STDDEFS += -DDEBUG +else + STDDEFS += -DNDEBUG + ifdef OPT + STDFLAGS += $(OPTFLAGS) + endif +endif + +# allows an extra configuration file. +ifdef EXTRA_CONFIG +include $(EXTRA_CONFIG) +endif + +.PHONY: system-check +system-check: + ifndef TEC_UNAME + @echo ''; echo 'Tecmake: check failed, TEC_UNAME not defined.'; echo ''; + @exit 1; + endif + ifndef TEC_WIN32 + ifndef TEC_WIN64 + @echo ''; echo 'Tecmake: check failed, TEC_UNAME not recognized.'; echo ''; + @exit 1; + endif + endif + ifdef CHECK_GDIPLUS + ifdef WIN_OTHER + @echo ''; echo 'Tecmake: check failed, GDI+ NOT available in this system.'; echo ''; + @exit 1; + endif + 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 + + +#---------------------------------# +# Pre-defined libraries + +# Library order: +# user + iupcd + cd + iup + motif + X +# Library path order is reversed + +ifdef USE_LUA + LUA_SUFFIX ?= + LIBLUASUFX := 3 +endif + +ifdef USE_LUA4 + LUA_SUFFIX ?= 4 + LIBLUASUFX := 4 + override USE_LUA = Yes + LUA := $(LUA4) +endif + +ifdef USE_LUA5 + LUA_SUFFIX ?= 5 + LIBLUASUFX := 5 + override USE_LUA = Yes + LUA := $(LUA5) +endif + +ifdef USE_LUA50 + LUA_SUFFIX ?= 50 + LIBLUASUFX := 5 + override USE_LUA = Yes + LUA := $(LUA50) + NO_LUALIB := Yes +endif + +ifdef USE_LUA51 + LUA_SUFFIX ?= 5.1 + LIBLUASUFX := 51 + override USE_LUA = Yes + LUA := $(LUA51) + NO_LUALIB := Yes +endif + +ifdef USE_LUA52 + LUA_SUFFIX ?= 52 + LIBLUASUFX := 52 + override USE_LUA = Yes + LUA := $(LUA52) + NO_LUALIB := Yes +endif + +ifdef USE_IUP3 + override USE_IUP = Yes +# Inside Tecgraf only +# IUP := $(IUP)3 +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 + LIBS += glut32 + LDIR += $(GLUT)/lib + STDINCS += $(GLUT)/include +endif + +ifdef USE_GDK + override USE_GTK = Yes +endif + +ifdef USE_IUPCONTROLS + override USE_CD = Yes + override USE_IUP = Yes + ifdef USE_IUPLUA + LIBS += iupluacontrols$(LIBLUASUFX) + override USE_CDLUA = Yes + endif + LIBS += iupcontrols +endif + +ifdef USE_IMLUA + override USE_IM = Yes + LIBS += imlua$(LIBLUASUFX) +endif + +ifdef USE_CDLUA + override USE_CD = Yes + LIBS += cdlua$(LIBLUASUFX) +endif + +ifdef USE_IUPLUA + override USE_IUP = Yes + ifdef USE_CD + LIBS += iupluacd$(LIBLUASUFX) + endif + ifdef USE_OPENGL + LIBS += iupluagl$(LIBLUASUFX) + endif + LIBS += iuplua$(LIBLUASUFX) +endif + +ifdef USE_LUA + ifndef NO_LUALIB + LIBS += lualib$(LUA_SUFFIX) + endif + LIBS += lua$(LUA_SUFFIX) + + LUA_LIB ?= $(LUA)/lib/$(TEC_UNAME) + LDIR += $(LUA_LIB) + + LUA_INC ?= $(LUA)/include + INCLUDES += $(LUA_INC) + + LUA_BIN ?= $(LUA)/bin/$(TEC_SYSNAME) + BIN2C := $(LUA_BIN)/bin2c$(LUA_SUFFIX) + LUAC := $(LUA_BIN)/luac$(LUA_SUFFIX) + LUABIN := $(LUA_BIN)/lua$(LUA_SUFFIX) +endif + +ifdef USE_IUP + ifdef USE_CD + LIBS += iupcd + endif + ifdef USE_GTK + LIBS += iupgtk + else + LIBS += iup + endif + LDIR += $(IUP)/lib/$(TEC_UNAME) + ifdef USE_OPENGL + LIBS += iupgl + endif + ifdef USE_DLL + ifeq ($(MAKETYPE), APP) + LIBS += iupstub + endif + endif + INCLUDES += $(IUP)/include +endif + +ifdef USE_CD + ifdef USE_GDIPLUS + CHECK_GDIPLUS = Yes + LIBS += cdcontextplus gdiplus + endif + ifdef USE_CAIRO + # To use Cairo with Win32 base driver (NOT for GDK) + # Can NOT be used together with GDI+ + LIBS += cdcairo pangocairo-1.0 cairo + endif + ifdef USE_GDK + LIBS += cdgdk + else + LIBS += cd + endif + LIBS += freetype6 + LDIR += $(CD)/lib/$(TEC_UNAME) + INCLUDES += $(CD)/include +endif + +ifdef USE_IM + LIBS += im + LDIR += $(IM)/lib/$(TEC_UNAME) + INCLUDES += $(IM)/include +endif + +ifdef USE_OPENGL + ifdef OLD_OPENGL + LIBS += glaux glu32 opengl32 + else + LIBS += glu32 opengl32 + endif +endif + +ifdef USE_GTK + STDINCS += $(GTK)/include/atk-1.0 $(GTK)/include/gtk-2.0 $(GTK)/include/cairo $(GTK)/include/pango-1.0 $(GTK)/include/glib-2.0 $(GTK)/lib/glib-2.0/include $(GTK)/lib/gtk-2.0/include + ifeq "$(TEC_CC)" "gcc" + STDFLAGS += -mms-bitfields + endif + LDIR += $(GTK)/lib + LIBS += gtk-win32-2.0 gdk-win32-2.0 gdk_pixbuf-2.0 pango-1.0 pangowin32-1.0 gobject-2.0 gmodule-2.0 glib-2.0 +endif + +ifdef USE_QT + #STDFLAGS += -Zm200 -w34100 -w34189 -Zm200 -w34100 -w34189 -w34100 -w34189 + STDINCS += $(QT)/include $(QT)/include/QtCore $(QT)/include/QtGui $(QT)/include/ActiveQt $(QT)/mkspecs/win32-msvc2005 + STDDEFS += -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_QT3SUPPORT_LIB -DQT3_SUPPORT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT + LDIR += $(QT)/lib + LIBS += QtMain QtGui4 QtCore4 +endif + + +#---------------------------------# +# Building compilation flags that are sets + +# INCLUDES for dependencies, remove references to "c:" and similars +DEPINCS := $(patsubst c:%, /cygdrive/c%, $(INCLUDES)) +DEPINCS := $(patsubst d:%, /cygdrive/d%, $(DEPINCS)) +DEPINCS := $(patsubst x:%, /cygdrive/x%, $(DEPINCS)) +DEPINCS := $(patsubst t:%, /cygdrive/t%, $(DEPINCS)) +DEPINCS := $(addprefix -I, $(DEPINCS)) + +INCLUDES := $(addprefix -I, $(INCLUDES)) +STDINCS := $(addprefix -I, $(STDINCS)) +EXTRAINCS := $(addprefix -I, $(EXTRAINCS)) +DEFINES := $(addprefix -D, $(DEFINES)) + +# For aplications and DLLs +ifneq ($(MAKETYPE), LIB) + LIBS += $(STDLIB) + LIBS := $(addsuffix .$(LIBEXT), $(LIBS)) + + ifeq ($(TEC_CC), vc) + ifdef LDIR + LDIR := $(addprefix -LIBPATH:, $(LDIR)) + endif + + STDLFLAGS += $(LDIR) $(STDLIBDIR) $(LIBS) + endif + + ifeq ($(TEC_CC), bc) + ifdef LDIR + LDIR := $(addprefix -L, $(LDIR)) + endif + endif + + ifeq ($(TEC_CC), wc) + ifdef LDIR + LDIR := $(addprefix LIBP , $(LDIR)) + endif + + LIBS := $(addprefix LIB , $(LIBS)) + + STDLFLAGS += $(LDIR) $(STDLIBDIR) $(LIBS) + endif + + ifeq ($(TEC_CC), gcc) + LIBS := $(addprefix -l, $(LIBS)) + LIBS := $(LIBS:.a=) + ifdef LDIR + LDIR := $(addprefix -L, $(LDIR)) + endif + + STDLFLAGS += $(LDIR) $(STDLIBDIR) $(LIBS) + endif + +endif + + +#---------------------------------# +# Definitions of private variables + +# C, C++ and RC compiler flags +CFLAGS = $(FLAGS) $(STDFLAGS) $(INCLUDES) $(STDINCS) $(EXTRAINCS) $(DEFINES) $(STDDEFS) +CXXFLAGS = $(CPPFLAGS) $(STDFLAGS) $(INCLUDES) $(STDINCS) $(EXTRAINCS) $(DEFINES) $(STDDEFS) +RCFLAGS = $(INCLUDES) $(STDINCS) $(EXTRAINCS) $(DEFINES) $(STDDEFS) + +# Sources with relative path +SOURCES = $(addprefix $(SRCDIR)/, $(SRC)) + +# Target for applications or libraries +ifeq ($(MAKETYPE), APP) + TARGET := $(TARGETEXE) +else + ifeq ($(MAKETYPE), DLL) + TARGET := $(TARGETDLL) $(TARGETLIB) $(TARGETDIR)/$(TARGETNAME).exp + else + TARGET := $(TARGETLIB) + endif +endif + +# OBJ: list of .o, without path +# OBJS: list of .o with relative path +OBJ = $(notdir $(SRC)) +OBJ := $(OBJ:.c=.$(OBJEXT)) +OBJ := $(OBJ:.cpp=.$(OBJEXT)) +OBJ := $(OBJ:.cxx=.$(OBJEXT)) +OBJ := $(OBJ:.cc=.$(OBJEXT)) +OBJ := $(OBJ:.rc=.res) +OBJS = $(addprefix $(OBJDIR)/, $(OBJ)) + +# Construct VPATH variable +P-SRC = $(dir $(SRC)) +P-SRC += $(dir $(SRCLUA)) +VPATH = .:$(foreach dir,$(P-SRC),$(if $(dir)="./",:$(dir))) + +#---------------------------------# +ifdef LOHPACK + # Pacote LOH unificado com todos scripts Lua precompilados + LOHS := $(LOHDIR)/$(LOHPACK) + LOHDIRS := +else + # LOH: lista dos arquivos .loh, sem path + # LOHS: lista dos arquivos .loh, com path relativo + 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)) +endif + +#---------------------------------# +# Compiler depedent adjusts + +# CFLAGS: parametros passados ao linker e librarian +LINKFLAGS := $(LFLAGS) $(STDLFLAGS) $(OBJS) $(SLIB) +LIBFLAGS := $(LCFLAGS) $(STDLFLAGS) $(OBJS) $(SLIB) + +ifeq ($(TEC_CC), bc) + ifeq ($(MAKETYPE), APP) + LINKFLAGS = $(LFLAGS) $(STDLFLAGS) $(LDIR) $(STDLIBDIR) $(STARTUP) $(OBJS), $(TARGETEXE), , $(LIBS) $(SLIB), + else + LIBFLAGS = $(LCFLAGS) $(subst /,\\, $(STDLFLAGS) $(addprefix +,$(OBJS) $(SLIB))) + endif +endif + +ifeq ($(TEC_CC), wc) + ifeq ($(MAKETYPE), APP) + LINKFLAGS = $(LFLAGS) $(STDLFLAGS) $(addprefix F , $(OBJS) $(SLIB)) + else + #wlib adds files using "+" as an option + LIBFLAGS := $(LCFLAGS) $(STDLFLAGS) $(addprefix +, $(OBJS) $(SLIB)) + endif +endif + +ifeq ($(TEC_CC), gcc) + ifeq ($(MAKETYPE), APP) + LINKFLAGS = -o $(TARGETEXE) $(OBJS) $(SLIB) $(LFLAGS) $(STDLFLAGS) + endif + ifeq ($(MAKETYPE), DLL) + LINKFLAGS = -shared -o $(TARGETDLL) -Wl,--out-implib=$(TARGETLIB) $(OBJS) $(DEF_FILE) $(SLIB) $(LFLAGS) $(STDLFLAGS) + endif +endif + +#---------------------------------# +# Dynamic Library Build + +.PHONY: dynamic-lib +dynamic-lib: $(TARGETDLL) addmanifest + +$(TARGETDLL) : $(LOHS) $(OBJS) $(EXTRADEPS) $(DEF_FILE) + @echo ''; echo Tecmake: linking $(@F) ... + $(ECHO)$(LINKER) $(LINKFLAGS) + @echo ''; echo 'Tecmake: Dynamic Library ($@) Done'; echo '' + + +#---------------------------------# +# Static Library Build + +.PHONY: static-lib +static-lib: $(TARGETLIB) + +$(TARGETDIR)/$(TARGETNAME).lib : $(LOHS) $(OBJS) $(EXTRADEPS) + @echo ''; echo Tecmake: librarian $(@F) ... + $(ECHO)$(LIBC) $(LIBFLAGS) + @echo ''; echo 'Tecmake: Static Library ($@) Done'; echo '' + +$(TARGETDIR)/lib$(TARGETNAME).a : $(LOHS) $(OBJS) $(EXTRADEPS) + @echo ''; echo Tecmake: librarian $(@F) ... + $(ECHO)$(LIBC) $(ARFLAGS) $@ $(OBJS) $(SLIB) + @echo ''; echo Tecmake: updating lib TOC $(@F) ... + $(ECHO)-$(RANLIB) $@ + @echo ''; echo 'Tecmake: Static Library ($@) Done'; echo '' + + +#---------------------------------# +# Application Build + +.PHONY: application +application: $(TARGETEXE) addmanifest + +$(TARGETEXE) : $(LOHS) $(OBJS) $(EXTRADEPS) + @echo ''; echo Tecmake: linking $(@F) ... + $(ECHO)$(LINKER) $(LINKFLAGS) + @echo ''; echo 'Tecmake: Application ($@) Done.'; echo '' + + +#---------------------------------# +# Application Scripts + +# Nomes dos scripts +SRELEASE = $(SRCDIR)/$(TARGETNAME).bat +EXEC := $(subst /,\,$(TARGETEXE)) + +.PHONY: scripts +ifdef NO_SCRIPTS + scripts: ; +else + scripts: $(SRELEASE) ; +endif + +$(SRELEASE): $(TARGETEXE) + @echo ''; echo 'Tecmake: generating script $(@F)' + @echo '@echo off' > $@ + @echo 'REM Script generated automatically by tecmake v$(VERSION)' >> $@ + @echo '$(EXEC) %*' >> $@ + + +#---------------------------------# +# Directories Creation + +.PHONY: directories +directories: $(OBJDIR) $(TARGETDIR) $(EXTRADIR) $(LOHDIR) + +$(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 + + +#---------------------------------# +# 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)/%.obj: $(SRCDIR)/%.c + @echo ''; echo Tecmake: compiling $(<F) ... + $(ECHO)$(CC) $(CFLAGS) $< + +$(OBJDIR)/%.obj: $(SRCDIR)/%.cpp + @echo ''; echo Tecmake: compiling $(<F) ... + $(ECHO)$(CPPC) $(CXXFLAGS) $< + +$(OBJDIR)/%.obj: $(SRCDIR)/%.cxx + @echo ''; echo Tecmake: compiling $(<F) ... + $(ECHO)$(CPPC) $(CXXFLAGS) $< + +$(OBJDIR)/%.obj: $(SRCDIR)/%.cc + @echo ''; echo Tecmake: compiling $(<F) ... + $(ECHO)$(CPPC) $(CXXFLAGS) $< + +$(OBJDIR)/%.res: $(SRCDIR)/%.rc + @echo ''; echo Tecmake: compiling $(<F) ... + $(ECHO)$(RCC) $@ $(RCFLAGS) $< + +$(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 + + +#---------------------------------# +# Rule to add a manifest file to the generted binary +.PHONY: addmanifest +addmanifest: + ifdef NEW_VC_COMPILER + ifeq ($(GEN_MANIFEST), Yes) + @echo ''; echo Tecmake: adding Manifest ... + ifeq ($(MAKETYPE), DLL) + $(ECHO)$(MT) -manifest $(TARGETDLL).manifest "-outputresource:$(TARGETDLL);2" + endif + ifeq ($(MAKETYPE), APP) + $(ECHO)$(MT) -manifest $(TARGETEXE).manifest "-outputresource:$(TARGETEXE);1" + endif + endif + endif + + +#---------------------------------# +# Dependencies + +.PHONY: depend +depend: $(DEPEND) + +$(DEPEND): $(MAKENAME) + ifdef SRC + @echo "" > $(DEPEND) + @which gcc 2> /dev/null 1>&2 ;\ + if [ $$? -eq 0 ]; then \ + echo "Tecmake: Building Dependencies ... (can be slow)" ;\ + g++ $(DEPINCS) $(DEFINES) $(STDDEFS) $(DEPDEFS) -MM $(SOURCES) | \ + sed -e '1,$$s/^\([^ ]*\)\.o/$$(OBJDIR)\/\1.$(OBJEXT)/' > $(DEPEND) ;\ + else \ + echo "" ;\ + echo "Tecmake: error, g++ 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 + +.PHONY: clean-dir +clean-dir: + rm -fr $(OBJROOT) $(TARGETROOT) + +# Remove extra files +.PHONY: clean-extra +clean-extra: + rm -f $(DEPEND) $(SRELEASE) + +# Remove Lua object inclusion files +.PHONY: clean-lohs +clean-lohs: + rm -f $(LOS) $(LOHS) + +# Remove object files +.PHONY: clean-obj +clean-obj: + rm -f $(OBJS) + +# Remove target +.PHONY: clean-target +clean-target: + rm -f $(TARGET) + +# 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).exe $(TARGETROOT)/$$d/$(TARGETNAME).$(LIBEXT) $(TARGETROOT)/$$d/$(TARGETNAME).dll $(TARGETROOT)/$$d/$(TARGETNAME).exp) ;\ + done + +.PHONY: clean +clean: clean-target clean-obj + +.PHONY: clean-all +clean-all: clean-extra clean-lohs clean-all-target clean-all-obj + +# Rebuild target and object files +.PHONY: rebuild +rebuild: clean-extra clean-lohs clean-obj clean-target tecmake + +# Rebuild target without rebuilding object files +.PHONY: relink +relink: clean-target tecmake + + +#---------------------------------# + +.PHONY: version +version: + @echo "Tecmake Windows Version $(VERSION)" + +#---------------------------------# |