#-------------------------------------------------------------------------# #- 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.21 #---------------------------------# # 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 ifeq ($(TEC_SYSNAME), Haiku) TEC_SYSARCH:=$(shell uname -p) endif ifeq ($(TEC_SYSNAME), SunOS) TEC_SYSARCH:=$(shell uname -p) endif ifeq ($(TEC_SYSNAME), IRIX) TEC_SYSARCH:=$(shell uname -p) endif ifeq ($(TEC_SYSNAME), FreeBSD) TEC_SYSMINOR:=$(shell uname -r|cut -f2 -d.|cut -f1 -d-) endif ifeq ($(TEC_SYSNAME), GNU/kFreeBSD) TEC_SYSNAME:=kFreeBSD TEC_SYSMINOR:=$(shell uname -r|cut -f2 -d.|cut -f1 -d-) endif ifeq ($(TEC_SYSNAME), AIX) TEC_SYSVERSION:=$(shell uname -v) TEC_SYSMINOR:=$(shell uname -r) TEC_SYSARCH:=ppc endif ifeq ($(TEC_SYSNAME), Darwin) 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 ifeq ($(TEC_SYSARCH), i686) TEC_SYSARCH:=x86 endif ifeq ($(TEC_SYSARCH), i386) TEC_SYSARCH:=x86 endif ifeq ($(TEC_SYSARCH), powerpc) TEC_SYSARCH:=ppc endif ifeq ($(TEC_SYSARCH), x86_64) TEC_SYSARCH:=x64 endif ifeq ($(TEC_SYSARCH), amd64) TEC_SYSARCH:=x64 endif ifneq ($(findstring armv, $(TEC_SYSARCH)), ) TEC_SYSARCH:=arm endif ifneq ($(findstring aarch64, $(TEC_SYSARCH)), ) TEC_SYSARCH:=arm64 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.) ifeq ($(GCCVER), 3) TEC_UNAME:=$(TEC_UNAME)g3 endif endif # Linux 2.6 and GCC 4.x ifeq ($(TEC_UNAME), Linux26) GCCVER:=$(shell gcc -dumpversion|cut -f1 -d.) ifeq ($(GCCVER), 4) TEC_UNAME:=$(TEC_UNAME)g4 endif endif ifeq ($(TEC_SYSNAME), Linux) # Linux and PowerPC ifeq ($(TEC_SYSARCH), ppc) TEC_UNAME:=$(TEC_UNAME)ppc endif # 64-bits Linux ifeq ($(TEC_SYSARCH), x64) BUILD_64=Yes TEC_UNAME:=$(TEC_UNAME)_64 endif # Itanium Linux ifeq ($(TEC_SYSARCH), ia64) BUILD_64=Yes TEC_UNAME:=$(TEC_UNAME)_ia64 endif # arm Linux ifeq ($(TEC_SYSARCH), arm) TEC_UNAME:=$(TEC_UNAME)_arm endif ifeq ($(TEC_SYSARCH), arm64) 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 ($(TEC_SYSARCH), arm) # Raspbian GNU/Linux 7 (wheezy) TEC_DISTNAME=Raspbian TEC_DISTVERSION=7 TEC_DIST:=$(TEC_DISTNAME)$(TEC_DISTVERSION) endif endif # 64-bits FreeBSD ifeq ($(TEC_SYSNAME), FreeBSD) ifeq ($(TEC_SYSARCH), x64) BUILD_64=Yes TEC_UNAME:=$(TEC_UNAME)_64 endif endif # Solaris and Intel ifeq ($(TEC_SYSNAME), SunOS) ifeq ($(TEC_SYSARCH) , x86) TEC_UNAME:=$(TEC_UNAME)x86 endif endif # MacOS and Intel ifeq ($(TEC_SYSNAME), MacOS) ifeq ($(TEC_SYSMINOR), 5) ifeq ($(TEC_SYSARCH), x86) TEC_UNAME:=$(TEC_UNAME)x86 endif else ifeq ($(TEC_SYSMINOR), 4) ifeq ($(TEC_SYSARCH), x86) 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 ($(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 ifdef BUILD_64 TEC_WORDSIZE = TEC_64 else TEC_WORDSIZE = TEC_32 endif endif # Itanium Exception ifeq ($(TEC_SYSARCH), ia64) TEC_BYTEORDER = TEC_LITTLEENDIAN TEC_WORDSIZE = TEC_64 endif ifeq ($(TEC_SYSARCH), arm64) 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 := ifneq ($(findstring Linux24, $(TEC_UNAME)), ) 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 CentOS, $(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 SunOS, $(TEC_UNAME)), ) ifeq ($(TEC_SYSARCH), x86) GTK_DEFAULT = Yes endif endif endif ifdef GTK_DEFAULT ifndef USE_GTK2 ifneq ($(findstring Linux5, $(TEC_UNAME)), ) USE_GTK3 = Yes endif ifneq ($(findstring Linux4, $(TEC_UNAME)), ) USE_GTK3 = Yes endif ifneq ($(findstring Linux31, $(TEC_UNAME)), ) USE_GTK3 = Yes endif 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 ($(MAKETYPE), APP) 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_BYTEORDER), TEC_BIGENDIAN) ifeq ($(TEC_WORDSIZE), TEC_64) LOH_SUBDIR ?= be64 else LOH_SUBDIR ?= be32 endif else ifeq ($(TEC_WORDSIZE), TEC_64) LOH_SUBDIR ?= le64 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) 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 # Definitions for OpenGL OPENGL_LIBS := GLU GL #OPENGL_LIB := #OPENGL_INC := #include and possibly MOTIFGL_LIB := GLw #include # Definitions for Motif #MOTIF_LIB := #MOTIF_INC := #include # 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 "$(TEC_SYSNAME)" "Haiku" STDFLAGS += -Wno-multichar LIBS += be textencoding tracker endif ifneq ($(findstring Linux, $(TEC_UNAME)), ) UNIX_LINUX = Yes ifdef BUILD_64 ifeq ($(TEC_SYSARCH), ia64) STDFLAGS += -fPIC X11_LIB := /usr/X11R6/lib # arm64 config - AIR else ifeq ($(TEC_SYSARCH), arm64) 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 ($(TEC_SYSARCH), ia64) 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 ($(TEC_SYSARCH), x86) 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 ($(TEC_SYSMINOR), 5) #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 ($(TEC_SYSARCH), x64) 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 ifneq ($(findstring Linux26g4, $(TEC_UNAME)), ) LIBS += fontconfig endif ifneq ($(findstring Linux3, $(TEC_UNAME)), ) LIBS += fontconfig endif ifneq ($(findstring Linux4, $(TEC_UNAME)), ) LIBS += fontconfig endif ifneq ($(findstring Linux5, $(TEC_UNAME)), ) LIBS += fontconfig endif ifneq ($(findstring cygw, $(TEC_UNAME)), ) LIBS += fontconfig endif 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 ifneq ($(findstring Linux5, $(TEC_UNAME)), ) LIBS += webkit2gtk-4.0 gio-2.0 else ifneq ($(findstring Linux4, $(TEC_UNAME)), ) LIBS += webkit2gtk-4.0 gio-2.0 else ifneq ($(findstring Linux3, $(TEC_UNAME)), ) ifdef USE_GTK3 LIBS += webkitgtk-3.0 else LIBS += webkitgtk-1.0 endif else LIBS += webkit-1.0 endif endif endif 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 ifneq ($(findstring FreeBSD, $(TEC_UNAME)), ) STDINCS += /lib/X11R6/include/gtk-2.0 endif ifneq ($(findstring Linux5, $(TEC_UNAME)), ) STDINCS += /usr/include/harfbuzz 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 "$(TEC_SYSNAME)" "Haiku" 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 $( $@ $(LOHDIR)/%.loh: $(OBJROOT)/%.lo @echo ''; echo Tecmake: generating $( $@ $(OBJROOT)/%$(LO_SUFFIX).lo: $(SRCLUADIR)/%.lua @echo ''; echo Tecmake: compiling $( $(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)" #---------------------------------#