# # Makefile generated by fpcmake v0.99.13 on 1999-11-23 12:24 # defaultrule: all ##################################################################### # Autodetect OS (Linux or Dos or Windows NT) # define inlinux when running under linux # define inWinNT when running under WinNT ##################################################################### # We need only / in the path override PATH:=$(subst \,/,$(PATH)) # Search for PWD and determine also if we are under linux PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(subst ;, ,$(PATH))))) ifeq ($(PWD),) PWD:=$(strip $(wildcard $(addsuffix /pwd,$(subst :, ,$(PATH))))) ifeq ($(PWD),) nopwd: @echo You need the GNU utils package to use this Makefile! @echo Get ftp://ftp.freepascal.org/pub/fpc/dist/go32v2/utilgo32.zip @exit else inlinux=1 endif else PWD:=$(firstword $(PWD)) endif # Detect NT - NT sets OS to Windows_NT ifndef inlinux ifeq ($(OS),Windows_NT) inWinNT=1 endif endif # Detect OS/2 - OS/2 has OS2_SHELL defined ifndef inlinux ifndef inWinNT ifdef OS2_SHELL inOS2=1 endif endif endif # The extension of executables ifdef inlinux EXEEXT= else EXEEXT=.exe endif # The path which is search separated by spaces ifdef inlinux SEARCHPATH=$(subst :, ,$(PATH)) else SEARCHPATH=$(subst ;, ,$(PATH)) endif ##################################################################### # FPC version/target Detection ##################################################################### # What compiler to use ? ifndef FPC ifdef inOS2 export FPC=ppos2$(EXEEXT) else export FPC=ppc386$(EXEEXT) endif endif # Target OS ifndef OS_TARGET export OS_TARGET:=$(shell $(FPC) -iTO) endif # Source OS ifndef OS_SOURCE export OS_SOURCE:=$(shell $(FPC) -iSO) endif # Target CPU ifndef CPU_TARGET export CPU_TARGET:=$(shell $(FPC) -iTP) endif # Source CPU ifndef CPU_SOURCE export CPU_SOURCE:=$(shell $(FPC) -iSP) endif # FPC version ifndef FPC_VERSION export FPC_VERSION:=$(shell $(FPC) -iV) endif ##################################################################### # Default Settings ##################################################################### # Release ? Then force OPT and don't use extra opts via commandline ifdef RELEASE override OPT:=-Xs -OG2p3 -n endif # Verbose settings (warning,note,info) ifdef VERBOSE override OPT+=-vwni endif ##################################################################### # User Settings ##################################################################### # Pre Settings # Allow ALPHA, POWERPC, M68K, I386 defines for target cpu ifdef ALPHA CPU_TARGET=alpha endif ifdef POWERPC CPU_TARGET=powerpc endif ifdef M68K CPU_TARGET=m68k endif ifdef I386 CPU_TARGET=i386 endif # RTL RTLDIR=../rtl/$(OS_TARGET) UTILSDIR=../utils # Utils used by compiler development/installation COMPILERUTILSDIR=utils # Default language for the compiler ifndef FPCLANG FPCLANG=e endif # Local defines for the compiler only ifndef LOCALDEF LOCALDEF= endif # Local options for the compiler only ifndef LOCALOPT LOCALOPT= endif # Options for the RTL only when cycling ifndef RTLOPTS RTLOPTS= endif # Message files MSGFILES=$(wildcard error*.msg) # Targets # Clean # Install # Defaults override NEEDOPT=-Sg # Directories ifndef FPCDIR FPCDIR=.. endif ifndef PACKAGEDIR PACKAGEDIR=$(FPCDIR)/packages endif ifndef TARGETDIR TARGETDIR=. endif # Packages # Libraries # Info FPCINFO=fpc_infocfg fpc_infoobjects fpc_infoinstall # Post Settings # Default message file MSGFILE=error$(FPCLANG).msg # set correct defines (-d$(CPU_TARGET) is automaticly added in makefile.fpc) override LOCALDEF+=-dGDB -dBROWSERLOG # i386 specific ifeq ($(CPU_TARGET),i386) # also insert MMX support override LOCALDEF+=-dSUPPORT_MMX # We don't need the intel and binary writer on linux... ifdef inlinux override LOCALDEF+=-dNOAG386INT -dNOAG386BIN endif endif override LOCALOPT+=$(LOCALDEF) override FPCOPT+=$(LOCALOPT) ##################################################################### # Default Directories ##################################################################### # Base dir ifdef PWD BASEDIR:=$(shell $(PWD)) else BASEDIR=. endif # this can be set to 'rtl' when the RTL units are installed ifndef UNITPREFIX UNITPREFIX=units endif # set the prefix directory where to install everything ifndef PREFIXINSTALLDIR ifdef inlinux export PREFIXINSTALLDIR=/usr else export PREFIXINSTALLDIR=/pp endif endif ##################################################################### # Install Directories ##################################################################### # set the base directory where to install everything ifndef BASEINSTALLDIR ifdef inlinux BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION) else BASEINSTALLDIR=$(PREFIXINSTALLDIR) endif endif # set the directory where to install the binaries ifndef BININSTALLDIR ifdef inlinux BININSTALLDIR=$(PREFIXINSTALLDIR)/bin else BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET) endif endif # set the directory where to install the units. ifndef UNITINSTALLDIR UNITINSTALLDIR=$(BASEINSTALLDIR)/$(UNITPREFIX)/$(OS_TARGET) endif # Where to install shared libraries ifndef LIBINSTALLDIR ifdef inlinux LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib else LIBINSTALLDIR=$(UNITINSTALLDIR) endif endif # Where the source files will be stored ifndef SOURCEINSTALLDIR ifdef inlinux SOURCEINSTALLDIR=$(PREFIXINSTALLDIR)/src/fpc-$(FPC_VERSION) else SOURCEINSTALLDIR=$(BASEINSTALLDIR)/source endif endif # Where the doc files will be stored ifndef DOCINSTALLDIR ifdef inlinux DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc/$(FPC_VERSION) else DOCINSTALLDIR=$(BASEINSTALLDIR)/doc endif endif # Where the some extra (data)files will be stored ifndef EXTRAINSTALLDIR EXTRAINSTALLDIR=$(BASEINSTALLDIR) endif ##################################################################### # Compiler Command Line ##################################################################### # Load commandline OPTDEF and add FPC_CPU define override FPCOPTDEF:=-d$(CPU_TARGET) # Load commandline OPT and add target and unit dir to be sure ifneq ($(OS_TARGET),$(OS_SOURCE)) override FPCOPT+=-T$(OS_TARGET) endif ifdef NEEDOPT override FPCOPT+=$(NEEDOPT) endif # RTL first and then Unit dir (a unit can override RTLunit). Don't add the # dirs if fpcdir=. which can be used for the rtl makefiles ifdef FPCDIR ifneq ($(FPCDIR),.) override FPCOPT+=-Fu$(FPCDIR)/rtl/$(OS_TARGET) -Fu$(FPCDIR)/units/$(OS_TARGET) endif endif # Target dirs ifdef TARGETDIR override FPCOPT+=-FE$(TARGETDIR) endif # Smartlinking ifdef SMARTLINK override FPCOPT+=-CX endif # Add commandline options ifdef OPT override FPCOPT+=$(OPT) endif 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 # Add defines from FPCOPTDEF to FPCOPT ifdef FPCOPTDEF override FPCOPT+=$(FPCOPTDEF) endif # Was a config file specified ? ifdef CFGFILE override FPCOPT+=@$(CFGFILE) endif override COMPILER=$(FPC) $(FPCOPT) ##################################################################### # Shell tools ##################################################################### # To copy pograms ifndef COPY export COPY:=cp -fp endif # To move pograms ifndef MOVE export MOVE:=mv -f endif # Check delete program ifndef DEL export DEL:=rm -f endif # Check deltree program ifndef DELTREE export DELTREE:=rm -rf endif # To install files ifndef INSTALL ifdef inlinux export INSTALL:=install -m 644 else export INSTALL:=$(COPY) endif endif # To install programs ifndef INSTALLEXE ifdef inlinux export INSTALLEXE:=install -m 755 else export INSTALLEXE:=$(COPY) endif endif # To make a directory. ifndef MKDIR ifdef inlinux export MKDIR:=install -m 755 -d else export MKDIR:=ginstall -m 755 -d endif endif ##################################################################### # Default Tools ##################################################################### # assembler, redefine it if cross compiling ifndef AS AS=as endif # linker, but probably not used ifndef LD LD=ld endif # ppas.bat / ppas.sh ifdef inlinux PPAS=ppas.sh else ifdef inOS2 PPAS=ppas.cmd else PPAS=ppas.bat endif endif # also call ppas if with command option -s ifeq (,$(findstring -s ,$(COMPILER))) EXECPPAS= else EXECPPAS=@$(PPAS) endif # ldconfig to rebuild .so cache ifdef inlinux LDCONFIG=ldconfig else LDCONFIG= endif # echo ifndef ECHO ECHO:=$(strip $(wildcard $(addsuffix /echo$(EXEEXT),$(SEARCHPATH)))) ifeq ($(ECHO),) export ECHO:=echo else export ECHO:=$(firstword $(ECHO)) endif endif # ppdep ifndef PPDEP PPDEP:=$(strip $(wildcard $(addsuffix /ppdep$(EXEEXT),$(SEARCHPATH)))) ifeq ($(PPDEP),) PPDEP= else export PPDEP:=$(firstword $(PPDEP)) endif endif # ppumove ifndef PPUMOVE PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(EXEEXT),$(SEARCHPATH)))) ifeq ($(PPUMOVE),) PPUMOVE= else export PPUMOVE:=$(firstword $(PPUMOVE)) endif endif # ppufiles ifndef PPUFILES PPUFILES:=$(strip $(wildcard $(addsuffix /ppufiles$(EXEEXT),$(SEARCHPATH)))) ifeq ($(PPUFILES),) PPUFILES= else export PPUFILES:=$(firstword $(PPUFILES)) endif 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$(EXEEXT),$(SEARCHPATH)))) ifeq ($(UPXPROG),) UPXPROG= else export UPXPROG:=$(firstword $(UPXPROG)) endif else UPXPROG= endif endif # gdate/date ifndef DATE DATE:=$(strip $(wildcard $(addsuffix /date$(EXEEXT),$(SEARCHPATH)))) ifeq ($(DATE),) DATE:=$(strip $(wildcard $(addsuffix /gdate$(EXEEXT),$(SEACHPATH)))) ifeq ($(DATE),) DATE= else export DATE:=$(firstword $(DATE)) endif else export DATE:=$(firstword $(DATE)) endif endif ifdef DATE DATESTR:=$(shell $(DATE) +%Y%m%d) else DATESTR= endif # ZipProg, you can't use Zip as the var name (PFV) ifndef ZIPPROG ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(EXEEXT),$(SEARCHPATH)))) ifeq ($(ZIPPROG),) ZIPPROG= else export ZIPPROG:=$(firstword $(ZIPPROG)) -D9 -r endif endif ifndef ZIPEXT ZIPEXT=.zip endif # cmp ifndef CMP CMP:=$(strip $(wildcard $(addsuffix /cmp$(EXEEXT),$(SEARCHPATH)))) ifeq ($(CMP),) CMP= else export CMP:=$(firstword $(CMP)) endif endif # diff ifndef DIFF DIFF:=$(strip $(wildcard $(addsuffix /diff$(EXEEXT),$(SEARCHPATH)))) ifeq ($(DIFF),) DIFF= else export DIFF:=$(firstword $(DIFF)) endif endif ##################################################################### # Default extensions ##################################################################### # Default needed extensions (Go32v2,Linux) LOADEREXT=.as PPLEXT=.ppl PPUEXT=.ppu OEXT=.o ASMEXT=.s SMARTEXT=.sl STATICLIBEXT=.a SHAREDLIBEXT=.so PACKAGESUFFIX= # Go32v1 ifeq ($(OS_TARGET),go32v1) PPUEXT=.pp1 OEXT=.o1 ASMEXT=.s1 SMARTEXT=.sl1 STATICLIBEXT=.a1 SHAREDLIBEXT=.so1 PACKAGESUFFIX=v1 endif # Go32v2 ifeq ($(OS_TARGET),go32v2) PACKAGESUFFIX=go32 endif # Linux ifeq ($(OS_TARGET),linux) PACKAGESUFFIX=linux endif # Win32 ifeq ($(OS_TARGET),win32) PPUEXT=.ppw OEXT=.ow ASMEXT=.sw SMARTEXT=.slw STATICLIBEXT=.aw SHAREDLIBEXT=.dll PACKAGESUFFIX=win32 endif # OS/2 ifeq ($(OS_TARGET),os2) PPUEXT=.ppo ASMEXT=.so2 OEXT=.oo2 SMARTEXT=.so STATICLIBEXT=.ao2 SHAREDLIBEXT=.dll PACKAGESUFFIX=os2 endif # library prefix LIBPREFIX=lib ifeq ($(OS_TARGET),go32v2) LIBPREFIX= endif ifeq ($(OS_TARGET),go32v1) LIBPREFIX= endif # determine which .pas extension is used ifndef PASEXT ifdef EXEOBJECTS override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(EXEOBJECTS))))) else override TESTPAS:=$(strip $(wildcard $(addsuffix .pas,$(firstword $(UNITOBJECTS))))) endif ifeq ($(TESTPAS),) PASEXT=.pp else PASEXT=.pas endif endif ##################################################################### # Default rules ##################################################################### .PHONY: defaultrule all smart shared \ showinstall install zipinstall zipinstalladd \ clean cleanall depend info smart: fpc_smart shared: fpc_shared showinstall: fpc_showinstall zipinstall: fpc_zipinstall zipinstalladd: fpc_zipinstalladd cleanall: fpc_cleanall info: fpc_info ##################################################################### # General compile rules ##################################################################### .PHONY: fpc_all fpc_units fpc_exes fpc_loaders # Create Filenames ifdef LOADEROBJECTS LOADEROFILES=$(addsuffix $(OEXT),$(LOADEROBJECTS)) endif ifdef EXEOBJECTS EXEFILES=$(addsuffix $(EXEEXT),$(EXEOBJECTS)) EXEOFILES=$(addsuffix $(OEXT),$(EXEOBJECTS)) endif ifdef UNITOBJECTS UNITPPUFILES=$(addsuffix $(PPUEXT),$(UNITOBJECTS)) endif .SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp ifdef DEFAULTUNITS fpc_all: fpc_loaders fpc_units else fpc_all: fpc_loaders fpc_units fpc_exes endif fpc_loaders: $(LOADEROFILES) fpc_units: $(UNITPPUFILES) fpc_exes: $(EXEFILES) # General compile rules, available for both possible PASEXT %$(PPUEXT): %.pp $(COMPILER) $< $(REDIR) $(EXECPASS) %$(PPUEXT): %.pas $(COMPILER) $< $(REDIR) $(EXECPASS) %$(EXEEXT): %.pp $(COMPILER) $< $(REDIR) $(EXECPASS) %$(EXEEXT): %.pas $(COMPILER) $< $(REDIR) $(EXECPASS) %$(OEXT): %$(LOADEREXT) $(AS) -o $*$(OEXT) $< ##################################################################### # Library ##################################################################### .PHONY: fpc_smart fpc_shared # Default sharedlib units are all unit objects ifndef SHAREDLIBUNITOBJECTS SHAREDLIBUNITOBJECTS=$(UNITOBJECTS) endif fpc_smart: $(MAKE) all SMARTLINK=1 fpc_shared: all ifdef inlinux ifndef LIBNAME @$(ECHO) LIBNAME not set else $(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBNAME) endif else @$(ECHO) Shared Libraries not supported endif ##################################################################### # Install rules ##################################################################### .PHONY: fpc_showinstall fpc_install ifdef UNITPPUFILES override INSTALLPPUFILES:=$(UNITPPUFILES) endif ifdef EXTRAINSTALLUNITS override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS)) endif ifdef INSTALLPPUFILES ifdef PPUFILES ifdef inlinux INSTALLPPULINKFILES=$(shell $(PPUFILES) -S -O $(INSTALLPPUFILES)) INSTALLPPULIBFILES=$(shell $(PPUFILES) -L $(INSTALLPPUFILES)) else INSTALLPPULINKFILES=$(shell $(PPUFILES) $(INSTALLPPUFILES)) endif endif endif fpc_showinstall: ifndef DEFAULTUNITS ifdef EXEOBJECTS @$(ECHO) $(addprefix "\n"$(BININSTALLDIR)/,$(EXEFILES)) endif endif ifdef LOADEROBJECTS @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(LOADEROFILES)) endif ifdef INSTALLPPUFILES @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPUFILES)) ifneq ($(INSTALLPPULINKFILES),) @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPULINKFILES)) endif ifneq ($(INSTALLPPULIBFILES),) @$(ECHO) $(addprefix "\n"$(LIBINSTALLDIR)/,$(INSTALLPPULIBFILES)) endif endif ifdef EXTRAINSTALLFILES @$(ECHO) $(addprefix "\n"$(EXTRAINSTALLDIR)/,$(EXTRAINSTALLFILES)) endif fpc_install: # Create UnitInstallFiles ifndef DEFAULTUNITS ifdef EXEOBJECTS $(MKDIR) $(BININSTALLDIR) # Compress the exes if upx is defined ifdef UPXPROG -$(UPXPROG) $(EXEFILES) endif $(INSTALLEXE) $(EXEFILES) $(BININSTALLDIR) endif endif ifdef LOADEROBJECTS $(MKDIR) $(UNITINSTALLDIR) $(INSTALL) $(LOADEROFILES) $(UNITINSTALLDIR) endif ifdef INSTALLPPUFILES $(MKDIR) $(UNITINSTALLDIR) $(INSTALL) $(INSTALLPPUFILES) $(UNITINSTALLDIR) ifneq ($(INSTALLPPULINKFILES),) $(INSTALL) $(INSTALLPPULINKFILES) $(UNITINSTALLDIR) endif ifneq ($(INSTALLPPULIBFILES),) $(MKDIR) $(LIBINSTALLDIR) $(INSTALL) $(INSTALLPPULIBFILES) $(LIBINSTALLDIR) endif endif ifdef EXTRAINSTALLFILES $(MKDIR) $(EXTRAINSTALLDIR) $(INSTALL) $(EXTRAINSTALLFILES) $(EXTRAINSTALLDIR) endif ##################################################################### # Zip ##################################################################### .PHONY: fpc_zipinstall fpc_zipinstalladd # Temporary path to pack a file ifndef PACKDIR ifndef inlinux PACKDIR=pack_tmp else PACKDIR=/tmp/fpc-pack endif endif # Test dir if none specified ifndef PACKAGEDIR PACKAGEDIR=$(BASEDIR) endif # Add .zip/.tar.gz extension ifdef ZIPNAME ifndef inlinux override ZIPNAME:=$(ZIPNAME)$(ZIPEXT) endif endif # Default target which is call before zipping ifndef ZIPTARGET ZIPTARGET=install endif # Note: This will not remove the zipfile first fpc_zipinstalladd: ifndef ZIPNAME @$(ECHO) Please specify ZIPNAME! @exit else $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR) ifdef inlinux gzip -d $(PACKAGEDIR)/$(ZIPNAME).tar.gz cd $(PACKDIR) ; tar rv --file $(PACKAGEDIR)/$(ZIPNAME).tar * ; cd $(BASEDIR) gzip $(PACKAGEDIR)/$(ZIPNAME).tar else cd $(PACKDIR) ; $(ZIPPROG) $(PACKAGEDIR)/$(ZIPNAME) * ; cd $(BASEDIR) endif $(DELTREE) $(PACKDIR) endif # First remove the zip and then install fpc_zipinstall: ifndef ZIPNAME @$(ECHO) Please specify ZIPNAME! @exit else $(DEL) $(PACKAGEDIR)/$(ZIPNAME) $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR) ifdef inlinux cd $(PACKDIR) ; tar cvz --file $(PACKAGEDIR)/$(ZIPNAME).tar.gz * ; cd $(BASEDIR) else cd $(PACKDIR) ; $(ZIPPROG) $(PACKAGEDIR)/$(ZIPNAME) * ; cd $(BASEDIR) endif $(DELTREE) $(PACKDIR) endif ##################################################################### # Clean rules ##################################################################### .PHONY: fpc_clean fpc_cleanall ifdef UNITPPUFILES override CLEANPPUFILES=$(UNITPPUFILES) endif ifdef EXTRACLEANUNITS override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRACLEANUNITS)) endif fpc_clean: ifdef EXEOBJECTS -$(DEL) $(EXEFILES) $(EXEOFILES) endif ifdef LOADEROBJECTS -$(DEL) $(LOADEROFILES) endif ifdef CLEANPPUFILES -$(DEL) $(CLEANPPUFILES) ifdef PPUFILES -$(DEL) $(shell $(PPUFILES) $(CLEANPPUFILES)) endif endif ifdef EXTRACLEANFILES -$(DEL) $(EXTRACLEANFILES) endif -$(DEL) $(PPAS) link.res log fpc_cleanall: ifdef EXEOBJECTS -$(DEL) $(EXEFILES) endif -$(DEL) *$(OEXT) *$(PPUEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) -$(DELTREE) *$(SMARTEXT) -$(DEL) $(PPAS) link.res log ##################################################################### # Depend rules ##################################################################### .PHONY: fpc_depend fpc_depend: $(PPDEP) $(UNITOBJECTS) ##################################################################### # Info rules ##################################################################### .PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \ fpc_dirinfo fpc_info: $(FPCINFO) fpc_infocfg: @$(ECHO) @$(ECHO) == Configuration info == @$(ECHO) @$(ECHO) FPC....... $(FPC) @$(ECHO) Version... $(FPC_VERSION) @$(ECHO) CPU....... $(CPU_TARGET) @$(ECHO) Source.... $(OS_SOURCE) @$(ECHO) Target.... $(OS_TARGET) @$(ECHO) fpc_infoobjects: @$(ECHO) @$(ECHO) == Object info == @$(ECHO) @$(ECHO) LoaderObjects..... $(LOADEROBJECTS) @$(ECHO) UnitObjects....... $(UNITOBJECTS) @$(ECHO) ExeObjects........ $(EXEOBJECTS) @$(ECHO) @$(ECHO) ExtraCleanUnits... $(EXTRACLEANUNITS) @$(ECHO) ExtraCleanFiles... $(EXTRACLEANFILES) @$(ECHO) @$(ECHO) ExtraInstallUnits. $(EXTRAINSTALLUNITS) @$(ECHO) ExtraInstallFiles. $(EXTRAINSTALLFILES) @$(ECHO) fpc_infoinstall: @$(ECHO) @$(ECHO) == Install info == @$(ECHO) ifdef DATE @$(ECHO) DateStr.............. $(DATESTR) endif @$(ECHO) PackageSuffix........ $(PACKAGESUFFIX) @$(ECHO) @$(ECHO) BaseInstallDir....... $(BASEINSTALLDIR) @$(ECHO) BinInstallDir........ $(BININSTALLDIR) @$(ECHO) LibInstallDir........ $(LIBINSTALLDIR) @$(ECHO) UnitInstallDir....... $(UNITINSTALLDIR) @$(ECHO) SourceInstallDir..... $(SOURCEINSTALLDIR) @$(ECHO) DocInstallDir........ $(DOCINSTALLDIR) @$(ECHO) ExtraInstallDir...... $(EXTRAINSTALLDIR) @$(ECHO) ##################################################################### # Users rules ##################################################################### ##################################################################### # Setup Targets ##################################################################### ifeq ($(OS_TARGET),win32) ifdef CMP override DIFF:=$(CMP) -i138 endif endif # Used to avoid unnecessary steps in remake3 ifdef DIFF ifdef OLDFPC DIFFRESULT:=$(shell $(DIFF) $(OLDFPC) $(FPC)) else DIFFRESULT=Not equal endif else DIFFRESULT=No diff program endif ##################################################################### # Setup os-independent filenames ##################################################################### FPCEXENAME=pp$(EXEEXT) EXENAME=ppc386$(EXEEXT) M68KEXENAME=ppc68k$(EXEEXT) TEMPNAME=ppc$(EXEEXT) TEMPNAME1=ppc1$(EXEEXT) TEMPNAME2=ppc2$(EXEEXT) TEMPNAME3=ppc3$(EXEEXT) MAKEDEP=ppdep$(EXEEXT) MSG2INC=msg2inc$(EXEEXT) ##################################################################### # Default makefile ##################################################################### all: $(EXENAME) $(MAKE) echotime ifeq ($(MAKELEVEL),0) ifndef STARTTIME ifdef DATE STARTTIME:=$(shell $(DATE) +%T) else STARTTIME:=unknown endif endif endif export STARTTIME ifdef DATE ENDTIME=$(shell $(DATE) +%T) else ENDTIME:=unknown endif echotime: @echo Start $(STARTTIME) now $(ENDTIME) ifndef DIFFRESULT next : @echo $(OLDFPC) and $(FPC) are equal $(COPY) $(FPC) $(EXENAME) else next : $(MAKE) execlean $(MAKE) -C $(RTLDIR) clean $(MAKE) -C $(RTLDIR) 'FPC=$(FPC)' 'OPT=$(RTLOPTS)' all $(MAKE) clean $(MAKE) all endif clean : execlean fpc_cleanall execlean : -$(DEL) $(EXENAME) distclean: clean -$(DEL) $(TEMPNAME) $(TEMPNAME1) $(TEMPNAME2) $(TEMPNAME3) $(MSG2INC) ##################################################################### # Include depencies ##################################################################### $(MAKEDEP): $(UTILSDIR)/ppdep.pp $(COMPILER) $(UTILSDIR)/ppdep.pp $(COPY) $(UTILSDIR)/$(MAKEDEP) $(MAKEDEP) dependencies : $(MAKEDEP) $(MAKEDEP) pp.pas $(FPCOPTDEF) $(LOCALDEF) '-F$$(COMPILER) $$(LOCALOPT)' > depend ifdef USEDEPEND include depend endif ##################################################################### # Make targets ##################################################################### $(MSG2INC): $(COMPILERUTILSDIR)/msg2inc.pp $(COMPILER) -FE. $(COMPILERUTILSDIR)/msg2inc.pp # The msgtxt.inc only depends on the error?.msg file, not on msg2inc, # because that one will be new almost everytime msgtxt.inc: $(MSGFILE) $(MAKE) $(MSG2INC) $(MSG2INC) $(MSGFILE) msg msg msg: msgtxt.inc # Make only the compiler ifndef COMPLETE $(EXENAME) : $(wildcard *.pas) $(wildcard *.inc) msg $(COMPILER) pp.pas $(EXECPPAS) $(MOVE) $(FPCEXENAME) $(EXENAME) else $(EXENAME) : $(wildcard *.pas) $(wildcard *.inc) msg $(COMPILER) pp.pas $(EXECPPAS) $(COMPILER) pp.pas $(EXECPPAS) $(COMPILER) pp.pas $(EXECPPAS) $(MOVE) $(FPCEXENAME) $(EXENAME) endif tokens.dat : $(wildcard *.pas) $(wildcard *.inc) $(COMPILER) tokendat.pas ./tokendat # This target remakes the units with the currently made version remake: $(EXENAME) $(MOVE) $(EXENAME) $(TEMPNAME) $(MAKE) execlean $(MAKE) -C $(RTLDIR) clean $(MAKE) clean $(MAKE) 'FPC=$(BASEDIR)/$(TEMPNAME)' all remake3: $(TEMPNAME3) $(MAKE) 'FPC=$(BASEDIR)/$(TEMPNAME3)' 'OLDFPC=$(BASEDIR)/$(TEMPNAME2)' next $(DIFF) $(TEMPNAME3) $(EXENAME) $(TEMPNAME1) : $(EXENAME) -$(DEL) $(TEMPNAME1) $(MOVE) $(EXENAME) $(TEMPNAME1) $(TEMPNAME2) : $(TEMPNAME1) $(MAKE) 'FPC=$(BASEDIR)/$(TEMPNAME1)' 'OLDFPC=' next -$(DEL) $(TEMPNAME2) $(MOVE) $(EXENAME) $(TEMPNAME2) $(TEMPNAME3) : $(TEMPNAME2) $(MAKE) 'FPC=$(BASEDIR)/$(TEMPNAME2)' 'OLDFPC=$(BASEDIR)/$(TEMPNAME1)' next -$(DEL) $(TEMPNAME3) $(MOVE) $(EXENAME) $(TEMPNAME3) cycle: $(MAKE) clean $(MAKE) -C $(RTLDIR) clean $(MAKE) -C $(RTLDIR) 'OPT=$(RTLOPTS)' all $(MAKE) remake3 $(MAKE) echotime cycledep: $(MAKE) cycle USEDEPEND=1 cvstest: $(MAKE) cycle 'LOCALOPT=-n -Se' 'RTLOPTS=-n -Se' ##################################################################### # Installation ##################################################################### MSGINSTALLDIR=$(BASEINSTALLDIR)/msg # This will only install the ppc386.exe, not the message files etc. quickinstall: ifdef inlinux $(MKDIR) $(BASEINSTALLDIR) $(INSTALLEXE) $(EXENAME) $(BASEINSTALLDIR) else $(MKDIR) $(BININSTALLDIR) ifdef UPXPROG -$(UPXPROG) $(EXENAME) endif $(INSTALLEXE) $(EXENAME) $(BININSTALLDIR) endif installlib: quickinstall ifdef inlinux $(INSTALLEXE) $(COMPILERUTILSDIR)/samplecfg $(BASEINSTALLDIR)/samplecfg endif $(MKDIR) $(MSGINSTALLDIR) $(INSTALL) $(MSGFILES) $(MSGINSTALLDIR) # this also installs the link /usr/bin/ppc386. The .deb does that later install: installlib ifdef inlinux $(MKDIR) $(BININSTALLDIR) ln -sf $(BASEINSTALLDIR)/ppc386 $(BININSTALLDIR)/ppc386 endif ##################################################################### # Misc ##################################################################### rtl : $(MAKE) -C $(RTLDIR) all rtlclean : $(MAKE) -C $(RTLDIR) clean rtlinstall: $(MAKE) -C $(RTLDIR) install ##################################################################### # local user configurable file # in makefile.loc you can add any desired target ##################################################################### localmake:=$(strip $(wildcard makefile.loc)) ifdef localmake include ./$(localmake) endif ##################################################################### # M68k test targets ##################################################################### # just a quick way to get ppc68k # needs to be after makefile.def for PASFILES INCFILES $(M68KEXENAME): $(PASFILES) $(INCFILES) $(MAKE) clean $(FPC) -uI386 -uSUPPORT_MMX -dm68k -o$(M68KEXENAME) pp $(MAKE) clean