; ; Templates used by fpcmake to create a Makefile from Makefile.fpc ; [osdetect] ##################################################################### # Autodetect OS (Linux or Dos or Windows NT or OS/2) # define inUnix when running under Unix like environment # (Linux,FreeBSD,NetBSD,Cygwin) # define inWinNT when running under WinNT # define inOS2 when running under OS/2 # define inCygwin when running under Cygwin32 ##################################################################### # We need only / in the path also remove the current dir override PATH:=$(subst \,/,$(PATH)) # Determine if we've a unix searchpath using : by looking for a ; # that normally doesn't exists in path names. ifeq ($(findstring ;,$(PATH)),) inUnix=1 SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH))) else SEARCHPATH:=$(subst ;, ,$(PATH)) endif # Add path were make is located SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE)))) # Search for PWD and determine also if we are under linux PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH)))) ifeq ($(PWD),) PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH)))) ifeq ($(PWD),) $(error You need the GNU utils package to use this Makefile) else PWD:=$(firstword $(PWD)) SRCEXEEXT= endif else PWD:=$(firstword $(PWD)) SRCEXEEXT=.exe endif # Detect NT - NT sets OS to Windows_NT # Detect OS/2 - OS/2 has OS2_SHELL defined ifndef inUnix ifeq ($(OS),Windows_NT) inWinNT=1 else ifdef OS2_SHELL inOS2=1 endif endif else ifneq ($(findstring cygdrive,$(PATH)),) inCygWin=1 endif endif # Detect BSD, since BSD uses a slightly different directory hierarchy. # Note that maybe Linux Slackware users would also like this, since # Slackwares hierachy is closer to BSD than other unices IIRC. ifeq ($(OS_TARGET),freebsd) BSDhier=1 endif ifeq ($(OS_TARGET),netbsd) BSDhier=1 endif ifeq ($(OS_TARGET),openbsd) BSDhier=1 endif # The extension of batch files / scripts ifdef inUnix BATCHEXT=.sh else ifdef inOS2 BATCHEXT=.cmd else BATCHEXT=.bat endif endif # Path Separator, the subst trick is necessary for the \ that can't exists # at the end of a line ifdef inUnix PATHSEP=/ else PATHSEP:=$(subst /,\,/) # cygwin bash or sh can not handle backslashs ifdef inCygWin PATHSEP=/ endif endif # Base dir ifdef PWD BASEDIR:=$(subst \,/,$(shell $(PWD))) # For Cygwin we need to replace /cygdrive/c/ with c:/ ifdef inCygWin ifneq ($(findstring /cygdrive/,$(BASEDIR)),) BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR)) BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR))) BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR)) endif endif else BASEDIR=. endif # Echo is an internal command under OS/2 (and others), so it's always found ifdef inOS2 ifndef ECHO ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(ECHO),) ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(ECHO),) ECHO=echo else ECHO:=$(firstword $(ECHO)) endif else ECHO:=$(firstword $(ECHO)) endif endif export ECHO endif [fpcdetect] ##################################################################### # FPC Binary and Version Detection ##################################################################### # Compatibility with old makefiles ifndef FPC ifdef PP FPC=$(PP) endif endif # Try to detect the ppcXXX file to use by using "fpc -PB" option # to query for the default ppcXXX the fpc executable tries. When # fpc is not found use ppc386 by default. Also when fpc -PB gives # an error ppc386 will be used. ifndef FPC # check if fpc exists FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH)))) ifneq ($(FPCPROG),) FPCPROG:=$(firstword $(FPCPROG)) FPC:=$(shell $(FPCPROG) -PB) # Older fpc executables didn't support it and return # Error: Illegal processor... When found then fallback to ppc386 ifneq ($(findstring Error,$(FPC)),) override FPC=ppc386 endif else # fpc binary not found, fallback to ppc386 override FPC=ppc386 endif endif # Get a clean executable name override FPC:=$(subst $(SRCEXEEXT),,$(FPC)) override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT) # FPC version ifndef FPC_VERSION # For 1.1 and up we can use a single compiler call to retrieve # all needed information FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO) FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO)) endif export FPC FPC_VERSION FPC_COMPILERINFO # CHECKDEPEND should not be exported # This should limit multiple checks unexport CHECKDEPEND ALLDEPENDENCIES ##################################################################### # FPC Target Detection ##################################################################### # Fall back to default values if needed ifndef CPU_TARGET ifdef CPU_TARGET_DEFAULT CPU_TARGET=$(CPU_TARGET_DEFAULT) endif endif ifndef OS_TARGET ifdef OS_TARGET_DEFAULT OS_TARGET=$(OS_TARGET_DEFAULT) endif endif # For 1.0.x we need to use extra calls to retrieve all info ifneq ($(words $(FPC_COMPILERINFO)),5) FPC_COMPILERINFO+=$(shell $(FPC) -iSP) FPC_COMPILERINFO+=$(shell $(FPC) -iTP) FPC_COMPILERINFO+=$(shell $(FPC) -iSO) FPC_COMPILERINFO+=$(shell $(FPC) -iTO) endif # Retrieve Target/Source CPU and Target/Source OS ifndef CPU_SOURCE CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO)) endif ifndef CPU_TARGET CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO)) endif ifndef OS_SOURCE OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO)) endif ifndef OS_TARGET OS_TARGET:=$(word 5,$(FPC_COMPILERINFO)) endif # Full name of the target, including CPU and OS FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET) FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE) # Cross compile flag ifneq ($(FULL_TARGET),$(FULL_SOURCE)) CROSSCOMPILE=1 endif # Check if the Makefile supports this target, but not # when the make target is to rebuild the makefile ifeq ($(findstring makefile,$(MAKECMDGOALS)),) ifeq ($(findstring $(OS_TARGET),$(MAKEFILETARGETS)),) $(error The Makefile doesn't support target $(OS_TARGET), please run fpcmake first) endif endif export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE CROSSCOMPILE [fpcdircheckenv] ##################################################################### # FPCDIR Setting ##################################################################### # Test FPCDIR to look if the RTL dir exists ifdef FPCDIR override FPCDIR:=$(subst \,/,$(FPCDIR)) ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),) override FPCDIR=wrong endif else override FPCDIR=wrong endif # Default FPCDIR from Makefile.fpc ifdef DEFAULT_FPCDIR ifeq ($(FPCDIR),wrong) override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR)) ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),) override FPCDIR=wrong endif endif endif [fpcdirdetect] # Detect FPCDIR ifeq ($(FPCDIR),wrong) ifdef inUnix override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION) ifeq ($(wildcard $(FPCDIR)/units),) override FPCDIR=/usr/lib/fpc/$(FPC_VERSION) endif else override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH)))))) override FPCDIR:=$(FPCDIR)/.. ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),) override FPCDIR:=$(FPCDIR)/.. ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),) override FPCDIR:=$(BASEDIR) ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),) override FPCDIR=c:/pp endif endif endif endif endif # Cross compiler dir ifndef CROSSDIR CROSSDIR:=$(FPCDIR)/cross/$(FULL_TARGET) endif # Cross target dir ifndef CROSSTARGETDIR CROSSTARGETDIR=$(CROSSDIR)/$(FULL_TARGET) endif # Units dir, when cross compiling try first the ifdef CROSSCOMPILE UNITSDIR:=$(wildcard $(CROSSTARGETDIR)/units) ifeq ($(UNITSDIR),) UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET)) endif else UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET)) endif # Packages dir PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra) [shelltools] ##################################################################### # Shell tools ##################################################################### # Echo that can redir (must be able run in the default OS shell) ifndef ECHOREDIR ifndef inUnix ECHOREDIR=echo else ECHOREDIR=$(ECHO) endif endif # To copy pograms ifndef COPY COPY:=$(CPPROG) -fp endif # Copy a whole tree ifndef COPYTREE COPYTREE:=$(CPPROG) -rfp endif # To move pograms ifndef MOVE MOVE:=$(MVPROG) -f endif # Check delete program ifndef DEL DEL:=$(RMPROG) -f endif # Check deltree program ifndef DELTREE DELTREE:=$(RMPROG) -rf endif # To install files ifndef INSTALL ifdef inUnix INSTALL:=$(GINSTALL) -c -m 644 else INSTALL:=$(COPY) endif endif # To install programs ifndef INSTALLEXE ifdef inUnix INSTALLEXE:=$(GINSTALL) -c -m 755 else INSTALLEXE:=$(COPY) endif endif # To make a directory. ifndef MKDIR MKDIR:=$(GINSTALL) -m 755 -d endif export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR [defaultdirs] ##################################################################### # Default Directories ##################################################################### # Units dir ifdef REQUIRE_UNITSDIR override UNITSDIR+=$(REQUIRE_UNITSDIR) endif # Units dir ifdef REQUIRE_PACKAGESDIR override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR) endif # Linux, netbsd and freebsd use unix dirs with /usr/bin, /usr/lib # When zipping use the target as default, when normal install then # use the source os as default ifdef ZIPINSTALL # Zipinstall ifeq ($(OS_TARGET),linux) UNIXINSTALLDIR=1 endif ifeq ($(OS_TARGET),freebsd) UNIXINSTALLDIR=1 endif ifeq ($(OS_TARGET),netbsd) UNIXINSTALLDIR=1 endif ifeq ($(OS_TARGET),openbsd) UNIXINSTALLDIR=1 endif ifeq ($(OS_TARGET),sunos) UNIXINSTALLDIR=1 endif ifeq ($(OS_TARGET),qnx) UNIXINSTALLDIR=1 endif else # Normal install ifeq ($(OS_SOURCE),linux) UNIXINSTALLDIR=1 endif ifeq ($(OS_SOURCE),freebsd) UNIXINSTALLDIR=1 endif ifeq ($(OS_SOURCE),netbsd) UNIXINSTALLDIR=1 endif ifeq ($(OS_SOURCE),openbsd) UNIXINSTALLDIR=1 endif ifeq ($(OS_TARGET),sunos) UNIXINSTALLDIR=1 endif ifeq ($(OS_TARGET),qnx) UNIXINSTALLDIR=1 endif endif # When install prefix is not set try to use prefix ifndef INSTALL_PREFIX ifdef PREFIX INSTALL_PREFIX=$(PREFIX) endif endif # set the prefix directory where to install everything ifndef INSTALL_PREFIX ifdef UNIXINSTALLDIR INSTALL_PREFIX=/usr/local else ifdef INSTALL_FPCPACKAGE INSTALL_BASEDIR:=/pp else INSTALL_BASEDIR:=/$(PACKAGE_NAME) endif endif endif export INSTALL_PREFIX # Export also INSTALL_SOURCESUBDIR set so it will be # used recursively for all subdirs ifdef INSTALL_FPCSUBDIR export INSTALL_FPCSUBDIR endif # Where to place the resulting zip files ifndef DIST_DESTDIR DIST_DESTDIR:=$(BASEDIR) endif export DIST_DESTDIR ##################################################################### # Install Directories ##################################################################### # set the base directory where to install everything ifndef INSTALL_BASEDIR ifdef UNIXINSTALLDIR ifdef INSTALL_FPCPACKAGE INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION) else INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME) endif else INSTALL_BASEDIR:=$(INSTALL_PREFIX) endif endif # set the directory where to install the binaries ifndef INSTALL_BINDIR ifdef UNIXINSTALLDIR ifdef CROSSCOMPILE INSTALL_BINDIR:=$(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/bin else INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin endif else ifdef CROSSCOMPILE INSTALL_BINDIR:=$(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/bin else INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin endif # for FPC packages install the binaries under their os target subdir ifdef INSTALL_FPCPACKAGE INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(OS_TARGET) endif endif endif # set the directory where to install the units. ifndef INSTALL_UNITDIR # If cross compiling install in the cross compile directory ifdef CROSSCOMPILE INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/units else INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(OS_TARGET) endif ifdef INSTALL_FPCPACKAGE ifdef PACKAGE_NAME INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME) endif endif endif # Where to install shared libraries ifndef INSTALL_LIBDIR ifdef UNIXINSTALLDIR INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib else INSTALL_LIBDIR:=$(INSTALL_UNITDIR) endif endif # Where the source files will be stored ifndef INSTALL_SOURCEDIR ifdef UNIXINSTALLDIR ifdef BSDhier SRCPREFIXDIR=share/src else SRCPREFIXDIR=src endif ifdef INSTALL_FPCPACKAGE ifdef INSTALL_FPCSUBDIR INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME) else INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME) endif else INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION) endif else ifdef INSTALL_FPCPACKAGE ifdef INSTALL_FPCSUBDIR INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME) else INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME) endif else INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source endif endif endif # Where the doc files will be stored ifndef INSTALL_DOCDIR ifdef UNIXINSTALLDIR ifdef BSDhier DOCPREFIXDIR=share/doc else DOCPREFIXDIR=doc endif ifdef INSTALL_FPCPACKAGE INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME) else INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION) endif else ifdef INSTALL_FPCPACKAGE INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME) else INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc endif endif endif # Where to install the examples, under linux we use the doc dir # because the copytree command will create a subdir itself ifndef INSTALL_EXAMPLEDIR ifdef UNIXINSTALLDIR ifdef INSTALL_FPCPACKAGE ifdef BSDhier INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME) else INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME) endif else ifdef BSDhier INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION) else INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION) endif endif else ifdef INSTALL_FPCPACKAGE INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME) else INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples endif endif endif # Where the some extra (data)files will be stored ifndef INSTALL_DATADIR INSTALL_DATADIR=$(INSTALL_BASEDIR) endif ##################################################################### # Cross compile dirs ##################################################################### ifdef CROSSCOMPILE # Directory where the cross compile tools are stored. # First check if they are available in FPCDIR. If no targets/ subdir # is found use the targets/ subdir in INSTALL_BASEDIR. ifndef CROSSBINDIR CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(FULL_SOURCE)) ifeq ($(CROSSBINDIR),) CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/bin/$(FULL_SOURCE)) endif endif else CROSSBINDIR= endif [dirlibc] # On linux, try to find where libgcc.a is. ifeq ($(OS_SOURCE),linux) ifndef GCCLIBDIR GCCLIBDIR:=$(shell dirname `gcc -print-libgcc-file-name`) endif ifndef OTHERLIBDIR OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }') endif endif ifdef inUnix ifeq ($(OS_SOURCE),netbsd) OTHERLIBDIR+=/usr/pkg/lib endif export GCCLIBDIR OTHERLIB endif [extensions] ##################################################################### # Default extensions ##################################################################### # Default needed extensions (Go32v2,Linux) LOADEREXT=.as EXEEXT=.exe PPLEXT=.ppl PPUEXT=.ppu OEXT=.o ASMEXT=.s SMARTEXT=.sl STATICLIBEXT=.a SHAREDLIBEXT=.so STATICLIBPREFIX=libp RSTEXT=.rst FPCMADE=fpcmade # 1.0.x has target specific extensions for ppu files and objects ifeq ($(findstring 1.0.,$(FPC_VERSION)),) # short version for 1.1 and above - no target specific extensions # Go32v1 ifeq ($(OS_TARGET),go32v1) STATICLIBPREFIX= FPCMADE=fpcmade.v1 PACKAGESUFFIX=v1 endif # Go32v2 ifeq ($(OS_TARGET),go32v2) STATICLIBPREFIX= FPCMADE=fpcmade.dos ZIPSUFFIX=go32 endif # watcom ifeq ($(OS_TARGET),watcom) STATICLIBPREFIX= FPCMADE=fpcmade.wat ZIPSUFFIX=watc OEXT=.obj ASMEXT=.asm SHAREDLIBEXT=.dll endif # Linux ifeq ($(OS_TARGET),linux) EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.lnx ZIPSUFFIX=linux endif # FreeBSD ifeq ($(OS_TARGET),freebsd) EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.freebsd ZIPSUFFIX=freebsd endif # NetBSD ifeq ($(OS_TARGET),netbsd) EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.netbsd ZIPSUFFIX=netbsd endif # OpenBSD ifeq ($(OS_TARGET),openbsd) EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.openbsd ZIPSUFFIX=openbsd endif # Win32 ifeq ($(OS_TARGET),win32) SHAREDLIBEXT=.dll FPCMADE=fpcmade.w32 ZIPSUFFIX=w32 endif # OS/2 ifeq ($(OS_TARGET),os2) AOUTEXT=.out STATICLIBPREFIX= SHAREDLIBEXT=.dll FPCMADE=fpcmade.os2 ZIPSUFFIX=os2 ECHO=echo endif # EMX ifeq ($(OS_TARGET),emx) AOUTEXT=.out STATICLIBPREFIX= SHAREDLIBEXT=.dll FPCMADE=fpcmade.emx ZIPSUFFIX=emx ECHO=echo endif # Amiga ifeq ($(OS_TARGET),amiga) EXEEXT= SHAREDLIBEXT=.library FPCMADE=fpcmade.amg endif # Atari ifeq ($(OS_TARGET),atari) EXEEXT=.ttp FPCMADE=fpcmade.ata endif # BeOS ifeq ($(OS_TARGET),beos) EXEEXT= FPCMADE=fpcmade.be ZIPSUFFIX=be endif # Solaris ifeq ($(OS_TARGET),sunos) EXEEXT= FPCMADE=fpcmade.sun ZIPSUFFIX=sun endif # QNX ifeq ($(OS_TARGET),qnx) EXEEXT= FPCMADE=fpcmade.qnx ZIPSUFFIX=qnx endif # Netware ifeq ($(OS_TARGET),netware) EXEEXT=.nlm STATICLIBPREFIX= FPCMADE=fpcmade.nw ZIPSUFFIX=nw endif # MacOS ifeq ($(OS_TARGET),macos) EXEEXT= FPCMADE=fpcmade.mcc endif # Darwin ifeq ($(OS_TARGET),darwin) EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.darwin ZIPSUFFIX=darwin endif else # long version for 1.0.x - target specific extensions # Go32v1 ifeq ($(OS_TARGET),go32v1) PPUEXT=.pp1 OEXT=.o1 ASMEXT=.s1 SMARTEXT=.sl1 STATICLIBEXT=.a1 SHAREDLIBEXT=.so1 STATICLIBPREFIX= FPCMADE=fpcmade.v1 PACKAGESUFFIX=v1 endif # Go32v2 ifeq ($(OS_TARGET),go32v2) STATICLIBPREFIX= FPCMADE=fpcmade.dos ZIPSUFFIX=go32 endif # watcom ifeq ($(OS_TARGET),watcom) STATICLIBPREFIX= FPCMADE=fpcmade.dos ZIPSUFFIX=watcom endif # Linux ifeq ($(OS_TARGET),linux) EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.lnx ZIPSUFFIX=linux endif # FreeBSD ifeq ($(OS_TARGET),freebsd) EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.freebsd ZIPSUFFIX=freebsd endif # NetBSD ifeq ($(OS_TARGET),netbsd) EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.netbsd ZIPSUFFIX=netbsd endif # OpenBSD ifeq ($(OS_TARGET),openbsd) EXEEXT= HASSHAREDLIB=1 FPCMADE=fpcmade.openbsd ZIPSUFFIX=openbsd endif # Win32 ifeq ($(OS_TARGET),win32) PPUEXT=.ppw OEXT=.ow ASMEXT=.sw SMARTEXT=.slw STATICLIBEXT=.aw SHAREDLIBEXT=.dll FPCMADE=fpcmade.w32 ZIPSUFFIX=w32 endif # OS/2 ifeq ($(OS_TARGET),os2) PPUEXT=.ppo ASMEXT=.so2 OEXT=.oo2 AOUTEXT=.out SMARTEXT=.sl2 STATICLIBPREFIX= STATICLIBEXT=.ao2 SHAREDLIBEXT=.dll FPCMADE=fpcmade.os2 ZIPSUFFIX=emx ECHO=echo endif # Amiga ifeq ($(OS_TARGET),amiga) EXEEXT= PPUEXT=.ppu ASMEXT=.asm OEXT=.o SMARTEXT=.sl STATICLIBEXT=.a SHAREDLIBEXT=.library FPCMADE=fpcmade.amg endif # Atari ifeq ($(OS_TARGET),atari) PPUEXT=.ppu ASMEXT=.s OEXT=.o SMARTEXT=.sl STATICLIBEXT=.a EXEEXT=.ttp FPCMADE=fpcmade.ata endif # BeOS ifeq ($(OS_TARGET),beos) PPUEXT=.ppu ASMEXT=.s OEXT=.o SMARTEXT=.sl STATICLIBEXT=.a EXEEXT= FPCMADE=fpcmade.be ZIPSUFFIX=be endif # Solaris ifeq ($(OS_TARGET),sunos) PPUEXT=.ppu ASMEXT=.s OEXT=.o SMARTEXT=.sl STATICLIBEXT=.a EXEEXT= FPCMADE=fpcmade.sun ZIPSUFFIX=sun endif # QNX ifeq ($(OS_TARGET),qnx) PPUEXT=.ppu ASMEXT=.s OEXT=.o SMARTEXT=.sl STATICLIBEXT=.a EXEEXT= FPCMADE=fpcmade.qnx ZIPSUFFIX=qnx endif # Netware ifeq ($(OS_TARGET),netware) STATICLIBPREFIX= PPUEXT=.ppu OEXT=.o ASMEXT=.s SMARTEXT=.sl STATICLIBEXT=.a SHAREDLIBEXT=.nlm FPCMADE=fpcmade.nw ZIPSUFFIX=nw EXEEXT=.nlm endif # MacOS ifeq ($(OS_TARGET),macos) PPUEXT=.ppu ASMEXT=.s OEXT=.o SMARTEXT=.sl STATICLIBEXT=.a EXEEXT= FPCMADE=fpcmade.mcc endif #end of target specific settings endif [defaulttools] ##################################################################### # Default Tools ##################################################################### # Names of the binutils tools ASNAME=$(BINUTILSPREFIX)as LDNAME=$(BINUTILSPREFIX)ld ARNAME=$(BINUTILSPREFIX)ar RCNAME=$(BINUTILSPREFIX)rc ifneq ($(findstring 1.0.,$(FPC_VERSION)),) ifeq ($(OS_TARGET),win32) ASNAME=as LDNAME=ld ARNAME=ar endif endif # assembler, redefine it if cross compiling ifndef ASPROG ifdef CROSSBINDIR ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT) else ASPROG=$(ASNAME) endif endif # linker, but probably not used ifndef LDPROG ifdef CROSSBINDIR LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT) else LDPROG=$(LDNAME) endif endif # Resource compiler ifndef RCPROG ifdef CROSSBINDIR RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT) else RCPROG=$(RCNAME) endif endif # Archiver ifndef ARPROG ifdef CROSSBINDIR ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT) else ARPROG=$(ARNAME) endif endif # Override defaults AS=$(ASPROG) LD=$(LDPROG) RC=$(RCPROG) AR=$(ARPROG) # ppas.bat / ppas.sh PPAS=ppas$(BATCHEXT) # ldconfig to rebuild .so cache ifdef inUnix LDCONFIG=ldconfig else LDCONFIG= endif ifdef DATE DATESTR:=$(shell $(DATE) +%Y%m%d) else DATESTR= endif # Look if UPX is found for go32v2 and win32. We can't use $UPX becuase # upx uses that one itself (PFV) ifndef UPXPROG ifeq ($(OS_TARGET),go32v2) UPXPROG:=1 endif ifeq ($(OS_TARGET),win32) UPXPROG:=1 endif ifdef UPXPROG UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(UPXPROG),) UPXPROG= else UPXPROG:=$(firstword $(UPXPROG)) endif else UPXPROG= endif endif export UPXPROG # Zip options ZIPOPT=-9 ZIPEXT=.zip # Tar options ifeq ($(USETAR),bz2) TAROPT=vI TAREXT=.tar.bz2 else TAROPT=vz TAREXT=.tar.gz endif [command_begin] ##################################################################### # Compiler Command Line ##################################################################### # Load commandline OPTDEF and add FPC_CPU define, for compiling the # compiler this needs to be turned off ifndef NOCPUDEF override FPCOPTDEF=$(CPU_TARGET) endif # Load commandline OPT and add target and unit dir to be sure ifneq ($(OS_TARGET),$(OS_SOURCE)) override FPCOPT+=-T$(OS_TARGET) endif ifeq ($(OS_SOURCE),openbsd) override FPCOPT+=-FD$(NEW_BINUTILS_PATH) endif ifndef CROSSBOOTSTRAP ifneq ($(BINUTILSPREFIX),) override FPCOPT+=-XP$(BINUTILSPREFIX) -Xc endif ifneq ($(BINUTILSPREFIX),) override FPCOPT+=-Xr$(RLINKPATH) endif endif # User dirs should be first, so they are looked at first ifdef UNITDIR override FPCOPT+=$(addprefix -Fu,$(UNITDIR)) endif ifdef LIBDIR override FPCOPT+=$(addprefix -Fl,$(LIBDIR)) endif ifdef OBJDIR override FPCOPT+=$(addprefix -Fo,$(OBJDIR)) endif ifdef INCDIR override FPCOPT+=$(addprefix -Fi,$(INCDIR)) endif # Smartlinking ifdef LINKSMART override FPCOPT+=-XX endif # Smartlinking creation ifdef CREATESMART override FPCOPT+=-CX endif # Debug ifdef DEBUG override FPCOPT+=-gl override FPCOPTDEF+=DEBUG endif # Release mode (strip, optimize and don't load fpc.cfg) ifdef RELEASE ifeq ($(CPU_TARGET),i386) FPCCPUOPT:=-OG2p3 else FPCCPUOPT:= endif override FPCOPT+=-Xs $(FPCCPUOPT) -n override FPCOPTDEF+=RELEASE endif # Strip ifdef STRIP override FPCOPT+=-Xs endif # Optimizer (i386 only for now) ifdef OPTIMIZE ifeq ($(CPU_TARGET),i386) override FPCOPT+=-OG2p3 endif endif # Verbose settings (warning,note,info) ifdef VERBOSE override FPCOPT+=-vwni endif # Needed compiler options ifdef COMPILER_OPTIONS override FPCOPT+=$(COMPILER_OPTIONS) endif ifdef COMPILER_UNITDIR override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR)) endif ifdef COMPILER_LIBRARYDIR override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR)) endif ifdef COMPILER_OBJECTDIR override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR)) endif ifdef COMPILER_INCLUDEDIR override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR)) endif # Cross compiler utils ifdef CROSSBINDIR override FPCOPT+=-FD$(CROSSBINDIR) endif # Target dirs and the prefix to use for clean/install ifdef COMPILER_TARGETDIR override FPCOPT+=-FE$(COMPILER_TARGETDIR) ifeq ($(COMPILER_TARGETDIR),.) override TARGETDIRPREFIX= else override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/ endif endif # Unit target dir ifdef COMPILER_UNITTARGETDIR override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR) ifeq ($(COMPILER_UNITTARGETDIR),.) override UNITTARGETDIRPREFIX= else override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/ endif else ifdef COMPILER_TARGETDIR override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR) override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX) endif endif # Temporary hack to add HASUNIX define for linux 1.0.6 compiler ifeq ($(OS_TARGET),linux) ifeq ($(FPC_VERSION),1.0.6) override FPCOPTDEF+=HASUNIX endif endif [command_libc] # Add GCC lib path if asked ifdef GCCLIBDIR override FPCOPT+=-Fl$(GCCLIBDIR) endif ifdef OTHERLIBDIR override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR)) endif [command_end] # Add commandline options last so they can override ifdef OPT override FPCOPT+=$(OPT) endif # Add defines from FPCOPTDEF to FPCOPT ifdef FPCOPTDEF override FPCOPT+=$(addprefix -d,$(FPCOPTDEF)) endif # Was a config file specified ? ifdef CFGFILE override FPCOPT+=@$(CFGFILE) endif # Use the environment to pass commandline options? ifdef USEENV override FPCEXTCMD:=$(FPCOPT) override FPCOPT:=!FPCEXTCMD export FPCEXTCMD endif # Compiler commandline override COMPILER:=$(FPC) $(FPCOPT) # also call ppas if with command option -s # but only if the FULL_SOURCE and FULL_TARGET are equal ifeq (,$(findstring -s ,$(COMPILER))) EXECPPAS= else ifeq ($(FULL_SOURCE),$(FULL_TARGET)) EXECPPAS:=@$(PPAS) endif endif [loaderrules] ##################################################################### # Loaders ##################################################################### .PHONY: fpc_loaders ifdef TARGET_LOADERS override ALLTARGET+=fpc_loaders override CLEANTARGET+=fpc_loaders_clean override INSTALLTARGET+=fpc_loaders_install override LOADEROFILES:=$(addsuffix $(OEXT),$(TARGET_LOADERS)) endif %$(OEXT): %$(LOADEREXT) $(AS) -o $*$(OEXT) $< fpc_loaders: $(LOADEROFILES) fpc_loaders_clean: -$(DEL) $(LOADEROFILES) fpc_loaders_install: $(MKDIR) $(INSTALL_UNITDIR) $(INSTALL) $(LOADEROFILES) $(INSTALL_UNITDIR) [unitrules] ##################################################################### # Units ##################################################################### .PHONY: fpc_units ifdef TARGET_UNITS override ALLTARGET+=fpc_units override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS)) override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITUNITS)) override INSTALLPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES) override CLEANPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES) endif fpc_units: $(UNITPPUFILES) [exerules] ##################################################################### # Exes ##################################################################### .PHONY: fpc_exes ifdef TARGET_PROGRAMS override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS)) override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) override ALLTARGET+=fpc_exes override INSTALLEXEFILES+=$(EXEFILES) override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES) ifeq ($(OS_TARGET),os2) override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS)) endif ifeq ($(OS_TARGET),emx) override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS)) endif endif fpc_exes: $(EXEFILES) [rstrules] ##################################################################### # Resource strings ##################################################################### ifdef TARGET_RSTS override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS)) override CLEANRSTFILES+=$(RSTFILES) endif [examplerules] ##################################################################### # Examples ##################################################################### .PHONY: fpc_examples ifdef TARGET_EXAMPLES HASEXAMPLES=1 override EXAMPLESOURCEFILES:=$(wildcard $(addsuffix .pp,$(TARGET_EXAMPLES)) $(addsuffix .pas,$(TARGET_EXAMPLES)) $(addsuffix .dpr,$(TARGET_EXAMPLES))) override EXAMPLEFILES:=$(addsuffix $(EXEEXT),$(TARGET_EXAMPLES)) override EXAMPLEOFILES:=$(addsuffix $(OEXT),$(TARGET_EXAMPLES)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES))) override CLEANEXEFILES+=$(EXAMPLEFILES) $(EXAMPLEOFILES) ifeq ($(OS_TARGET),os2) override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES)) endif ifeq ($(OS_TARGET),emx) override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES)) endif endif ifdef TARGET_EXAMPLEDIRS HASEXAMPLES=1 endif fpc_examples: all $(EXAMPLEFILES) $(addsuffix _all,$(TARGET_EXAMPLEDIRS)) [compilerules] ##################################################################### # General compile rules ##################################################################### .PHONY: fpc_all fpc_smart fpc_debug fpc_release $(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET) @$(ECHOREDIR) Compiled > $(FPCMADE) fpc_all: $(FPCMADE) fpc_smart: $(MAKE) all LINKSMART=1 CREATESMART=1 fpc_debug: $(MAKE) all DEBUG=1 fpc_release: $(MAKE) all RELEASE=1 # General compile rules, available for both possible .pp and .pas extensions .SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .dpr .pp .rc .res %$(PPUEXT): %.pp $(COMPILER) $< $(EXECPPAS) %$(PPUEXT): %.pas $(COMPILER) $< $(EXECPPAS) %$(EXEEXT): %.pp $(COMPILER) $< $(EXECPPAS) %$(EXEEXT): %.pas $(COMPILER) $< $(EXECPPAS) %$(EXEEXT): %.dpr $(COMPILER) $< $(EXECPPAS) %.res: %.rc windres -i $< -o $@ # Search paths for .ppu and .pp and .pas .dpr vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR) [libraryrules] ##################################################################### # Library ##################################################################### .PHONY: fpc_shared ifndef LIB_FULLNAME ifdef LIB_VERSION LIB_FULLNAME=$(LIB_NAME).$(LIB_VERSION) else LIB_FULLNAME=$(LIB_NAME) endif endif # Default sharedlib units are all unit objects ifndef LIB_SHAREDUNITS LIB_SHAREDUNITS:=$(TARGET_UNITS) endif fpc_shared: all ifdef HASSHAREDLIB $(PPUMOVE) $(LIB_SHAREDUNITS) -o$(LIB_FULLNAME) else @$(ECHO) Shared Libraries not supported endif [installrules] ##################################################################### # Install rules ##################################################################### .PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall ifdef INSTALL_UNITS override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS)) endif ifdef INSTALL_BUILDUNIT override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES)) endif ifdef INSTALLPPUFILES override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPUFILES)) override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILES))) # Implicitly install Package.fpc override INSTALL_CREATEPACKAGEFPC=1 endif ifdef INSTALLEXEFILES override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(INSTALLEXEFILES)) endif fpc_install: all $(INSTALLTARGET) ifdef INSTALLEXEFILES $(MKDIR) $(INSTALL_BINDIR) # Compress the exes if upx is defined ifdef UPXPROG -$(UPXPROG) $(INSTALLEXEFILES) endif $(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR) endif ifdef INSTALL_CREATEPACKAGEFPC ifdef FPCMAKE # If the fpcpackage variable is set then create and install Package.fpc, # a safety check is done if Makefile.fpc is available ifdef PACKAGE_VERSION ifneq ($(wildcard Makefile.fpc),) $(FPCMAKE) -p -T$(OS_TARGET) Makefile.fpc $(MKDIR) $(INSTALL_UNITDIR) $(INSTALL) Package.fpc $(INSTALL_UNITDIR) endif endif endif endif ifdef INSTALLPPUFILES $(MKDIR) $(INSTALL_UNITDIR) $(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR) ifneq ($(INSTALLPPULINKFILES),) $(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR) endif ifneq ($(wildcard $(LIB_FULLNAME)),) $(MKDIR) $(INSTALL_LIBDIR) $(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR) ifdef inUnix ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME) endif endif endif ifdef INSTALL_FILES $(MKDIR) $(INSTALL_DATADIR) $(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR) endif fpc_sourceinstall: distclean $(MKDIR) $(INSTALL_SOURCEDIR) $(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR) fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS)) ifdef HASEXAMPLES $(MKDIR) $(INSTALL_EXAMPLEDIR) endif ifdef EXAMPLESOURCEFILES $(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR) endif ifdef TARGET_EXAMPLEDIRS $(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR) endif [distinstallrules] ##################################################################### # Dist Install ##################################################################### .PHONY: fpc_distinstall fpc_distinstall: install exampleinstall [zipinstallrules] ##################################################################### # Zip ##################################################################### .PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall # Temporary path to pack a file, can only use a single deep # subdir, because the deltree can't see the whole tree to remove ifndef PACKDIR ifndef inUnix PACKDIR=$(BASEDIR)/../fpc-pack else PACKDIR=/tmp/fpc-pack endif endif # Maybe create default zipname from packagename ifndef ZIPNAME ifdef DIST_ZIPNAME ZIPNAME=$(DIST_ZIPNAME) else ZIPNAME=$(ZIPPREFIX)$(PACKAGE_NAME)$(ZIPSUFFIX) endif endif # ZipTarget ifndef ZIPTARGET ifdef DIST_ZIPTARGET ZIPTARGET=DIST_ZIPTARGET else ZIPTARGET=install endif endif # Use tar by default under linux ifndef USEZIP ifdef inUnix USETAR=1 endif endif # Use a wrapper script by default for Os/2 ifndef inUnix USEZIPWRAPPER=1 endif # We need to be able to run in the current OS so fix # the path separator ifdef USEZIPWRAPPER ZIPPATHSEP=$(PATHSEP) ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(BATCHEXT)) else ZIPPATHSEP=/ endif # Create commands to create the zip/tar file ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR)) ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR)) ifdef USETAR ZIPDESTFILE:=$(DIST_DESTDIR)/$(ZIPNAME)$(TAREXT) ZIPCMD_ZIP:=$(TARPROG) cf$(TAROPT) $(ZIPDESTFILE) * else ZIPDESTFILE:=$(DIST_DESTDIR)/$(ZIPNAME)$(ZIPEXT) ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) * endif fpc_zipinstall: $(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1 $(MKDIR) $(DIST_DESTDIR) $(DEL) $(ZIPDESTFILE) ifdef USEZIPWRAPPER # Handle gecho separate as we need to espace \ with \\ ifneq ($(ECHOREDIR),echo) $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER) $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER) $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER) else echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER) echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER) echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER) endif ifdef inUnix /bin/sh $(ZIPWRAPPER) else $(ZIPWRAPPER) endif $(DEL) $(ZIPWRAPPER) else $(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE) endif $(DELTREE) $(PACKDIR) fpc_zipsourceinstall: $(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=src fpc_zipexampleinstall: ifdef HASEXAMPLES $(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=exm endif fpc_zipdistinstall: $(MAKE) fpc_zipinstall ZIPTARGET=distinstall [cleanrules] ##################################################################### # Clean rules ##################################################################### .PHONY: fpc_clean fpc_cleanall fpc_distclean ifdef EXEFILES override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES)) endif ifdef CLEAN_UNITS override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS)) endif ifdef CLEANPPUFILES override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES)) override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES))) endif fpc_clean: $(CLEANTARGET) ifdef CLEANEXEFILES -$(DEL) $(CLEANEXEFILES) endif ifdef CLEANPPUFILES -$(DEL) $(CLEANPPUFILES) endif ifneq ($(CLEANPPULINKFILES),) -$(DEL) $(CLEANPPULINKFILES) endif ifdef CLEANRSTFILES -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES)) endif ifdef CLEAN_FILES -$(DEL) $(CLEAN_FILES) endif ifdef LIB_NAME -$(DEL) $(LIB_NAME) $(LIB_FULLNAME) endif -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE) fpc_distclean: clean # Also run clean first if targetdir is set. Unittargetdir is always # set if targetdir or unittargetdir is specified ifdef COMPILER_UNITTARGETDIR TARGETDIRCLEAN=fpc_clean endif fpc_cleanall: $(CLEANTARGET) $(TARGETDIRCLEAN) ifdef CLEANEXEFILES -$(DEL) $(CLEANEXEFILES) endif -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) -$(DELTREE) *$(SMARTEXT) -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE) ifdef AOUTEXT -$(DEL) *$(AOUTEXT) endif [baseinforules] ##################################################################### # Base info rules ##################################################################### .PHONY: fpc_baseinfo override INFORULES+=fpc_baseinfo fpc_baseinfo: @$(ECHO) @$(ECHO) == Package info == @$(ECHO) Package Name..... $(PACKAGE_NAME) @$(ECHO) Package Version.. $(PACKAGE_VERSION) @$(ECHO) @$(ECHO) == Configuration info == @$(ECHO) @$(ECHO) FPC.......... $(FPC) @$(ECHO) FPC Version.. $(FPC_VERSION) @$(ECHO) Source CPU... $(CPU_SOURCE) @$(ECHO) Target CPU... $(CPU_TARGET) @$(ECHO) Source OS.... $(OS_SOURCE) @$(ECHO) Target OS.... $(OS_TARGET) @$(ECHO) Full Source.. $(FULL_SOURCE) @$(ECHO) Full Target.. $(FULL_TARGET) @$(ECHO) @$(ECHO) == Directory info == @$(ECHO) @$(ECHO) Required pkgs... $(REQUIRE_PACKAGES) @$(ECHO) @$(ECHO) Basedir......... $(BASEDIR) @$(ECHO) FPCDir.......... $(FPCDIR) @$(ECHO) CrossBinDir..... $(CROSSBINDIR) @$(ECHO) UnitsDir........ $(UNITSDIR) @$(ECHO) PackagesDir..... $(PACKAGESDIR) @$(ECHO) @$(ECHO) GCC library..... $(GCCLIBDIR) @$(ECHO) Other library... $(OTHERLIBDIR) @$(ECHO) @$(ECHO) == Tools info == @$(ECHO) @$(ECHO) As........ $(AS) @$(ECHO) Ld........ $(LD) @$(ECHO) Ar........ $(AR) @$(ECHO) Rc........ $(RC) @$(ECHO) @$(ECHO) Mv........ $(MVPROG) @$(ECHO) Cp........ $(CPPROG) @$(ECHO) Rm........ $(RMPROG) @$(ECHO) GInstall.. $(GINSTALL) @$(ECHO) Echo...... $(ECHO) @$(ECHO) Shell..... $(SHELL) @$(ECHO) Date...... $(DATE) @$(ECHO) FPCMake... $(FPCMAKE) @$(ECHO) PPUMove... $(PPUMOVE) @$(ECHO) Upx....... $(UPXPROG) @$(ECHO) Zip....... $(ZIPPROG) @$(ECHO) @$(ECHO) == Object info == @$(ECHO) @$(ECHO) Target Loaders........ $(TARGET_LOADERS) @$(ECHO) Target Units.......... $(TARGET_UNITS) @$(ECHO) Target Implicit Units. $(TARGET_IMPLICITUNITS) @$(ECHO) Target Programs....... $(TARGET_PROGRAMS) @$(ECHO) Target Dirs........... $(TARGET_DIRS) @$(ECHO) Target Examples....... $(TARGET_EXAMPLES) @$(ECHO) Target ExampleDirs.... $(TARGET_EXAMPLEDIRS) @$(ECHO) @$(ECHO) Clean Units......... $(CLEAN_UNITS) @$(ECHO) Clean Files......... $(CLEAN_FILES) @$(ECHO) @$(ECHO) Install Units....... $(INSTALL_UNITS) @$(ECHO) Install Files....... $(INSTALL_FILES) @$(ECHO) @$(ECHO) == Install info == @$(ECHO) @$(ECHO) DateStr.............. $(DATESTR) @$(ECHO) ZipPrefix............ $(ZIPPREFIX) @$(ECHO) ZipSuffix............ $(ZIPSUFFIX) @$(ECHO) Install FPC Package.. $(INSTALL_FPCPACKAGE) @$(ECHO) @$(ECHO) Install base dir..... $(INSTALL_BASEDIR) @$(ECHO) Install binary dir... $(INSTALL_BINDIR) @$(ECHO) Install library dir.. $(INSTALL_LIBDIR) @$(ECHO) Install units dir.... $(INSTALL_UNITDIR) @$(ECHO) Install source dir... $(INSTALL_SOURCEDIR) @$(ECHO) Install doc dir...... $(INSTALL_DOCDIR) @$(ECHO) Install example dir.. $(INSTALL_EXAMPLEDIR) @$(ECHO) Install data dir..... $(INSTALL_DATADIR) @$(ECHO) @$(ECHO) Dist destination dir. $(DIST_DESTDIR) @$(ECHO) Dist zip name........ $(DIST_ZIPNAME) @$(ECHO) [inforules] ##################################################################### # Info rules ##################################################################### .PHONY: fpc_info fpc_info: $(INFORULES) [makefilerules] ##################################################################### # Rebuild Makefile ##################################################################### .PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \ fpc_makefile_dirs fpc_makefile: $(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc fpc_makefile_sub1: ifdef TARGET_DIRS $(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS)) endif ifdef TARGET_EXAMPLEDIRS $(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS)) endif fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS)) fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2 fpc_makefiles: fpc_makefile fpc_makefile_dirs [localmakefile] ##################################################################### # Local Makefile ##################################################################### ifneq ($(wildcard fpcmake.loc),) include fpcmake.loc endif [userrules] ##################################################################### # Users rules ##################################################################### [lclrules] ##################################################################### # LCL Rules ##################################################################### # LCL Platform ifndef LCL_PLATFORM ifeq ($(OS_TARGET),win32) LCL_PLATFORM=win32 else LCL_PLATFORM=gtk endif endif export LCL_PLATFORM # Check if the specified LCLDIR is correct ifdef LCLDIR override LCLDIR:=$(subst \,/,$(LCLDIR)) ifeq ($(wildcard $(LCLDIR)/units/$(LCL_PLATFORM)),) override LCLDIR=wrong endif else override LCLDIR=wrong endif # Check if the default LCLDIR is correct ifdef DEFAULT_LCLDIR override LCLDIR:=$(subst \,/,$(DEFAULT_LCLDIR)) ifeq ($(wildcard $(LCLDIR)/units/$(LCL_PLATFORM)),) override LCLDIR=wrong endif endif # Check for development version ifeq ($(LCLDIR),wrong) override LCLDIR=$(subst /units/$(LCL_PLATFORM),,$(firstword $(wildcard $(addsuffix /units/$(LCL_PLATFORM),$(BASEDIR)/lcl $(BASEDIR))))) ifeq ($(LCLDIR),) override LCLDIR=wrong endif endif # Check for release version ifeq ($(LCLDIR),wrong) override LCLDIR=$(subst /units/$(LCL_PLATFORM),,$(firstword $(wildcard $(addsuffix /lib/lazarus/units/$(LCL_PLATFORM),/usr/local /usr)))) ifeq ($(LCLDIR),) override LCLDIR=wrong endif endif # Generate dirs override LCLUNITDIR:=$(wildcard $(LCLDIR)/units/$(LCL_PLATFORM) $(LCLDIR)/units) override LCLCOMPONENTDIR:=$(wildcard $(LCLDIR)/.. $(LCLDIR)/../components $(LCLDIR)/components) export LCLDIR LCLUNITDIR LCLCOMPONENTDIR # Add LCL dirs to paths override REQUIRE_PACKAGESDIR+=$(LCLCOMPONENTDIR) override COMPILER_UNITDIR+=$(LCLUNITDIR) [lclinforules] ##################################################################### # LCL Info rules ##################################################################### override INFORULES+=lclinfo .PHONY: lclinfo lclinfo: @$(ECHO) == LCL info == @$(ECHO) @$(ECHO) Platform............. $(LCL_PLATFORM) @$(ECHO) LCLDIR............... $(LCLDIR) @$(ECHO) LCL Unit dir......... $(LCLUNITDIR) @$(ECHO) LCL Component dir.... $(LCLCOMPONENTDIR) @$(ECHO)