diff --git a/compiler/Makefile b/compiler/Makefile index 54cad793dd..5384a8bf89 100644 --- a/compiler/Makefile +++ b/compiler/Makefile @@ -1,5 +1,5 @@ # -# Makefile generated by fpcmake v0.99.15 [2000/06/15] +# Makefile generated by fpcmake v0.99.15 [2000/06/16] # defaultrule: all @@ -14,9 +14,9 @@ defaultrule: all override PATH:=$(subst \,/,$(PATH)) # Search for PWD and determine also if we are under linux -PWD=$(strip $(wildcard $(addsuffix /pwd.exe,$(subst ;, ,$(PATH))))) +PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(subst ;, ,$(PATH))))) ifeq ($(PWD),) -PWD=$(strip $(wildcard $(addsuffix /pwd,$(subst :, ,$(PATH))))) +PWD:=$(strip $(wildcard $(addsuffix /pwd,$(subst :, ,$(PATH))))) ifeq ($(PWD),) nopwd: @echo You need the GNU utils package to use this Makefile! @@ -52,46 +52,70 @@ else EXEEXT=.exe endif -# The path which is search separated by spaces +# The path which is searched separated by spaces ifdef inlinux SEARCHPATH=$(subst :, ,$(PATH)) else SEARCHPATH=$(subst ;, ,$(PATH)) endif +# Base dir +ifdef PWD +BASEDIR:=$(shell $(PWD)) +else +BASEDIR=. +endif + ##################################################################### # FPC version/target Detection ##################################################################### # What compiler to use ? ifndef FPC -ifdef inOS2 -export FPC=ppos2$(EXEEXT) +# Compatibility with old makefiles +ifdef PP +FPC=$(PP) else -export FPC=ppc386$(EXEEXT) +ifdef inOS2 +FPC=ppos2 +else +FPC=ppc386 endif endif +endif +override FPC:=$(subst $(EXEEXT),,$(FPC)) +override FPC:=$(subst \,/,$(FPC))$(EXEEXT) # Target OS ifndef OS_TARGET -export OS_TARGET=$(shell $(FPC) -iTO) +OS_TARGET:=$(shell $(FPC) -iTO) endif # Source OS ifndef OS_SOURCE -export OS_SOURCE=$(shell $(FPC) -iSO) +OS_SOURCE:=$(shell $(FPC) -iSO) endif -# FPC_CPU -ifndef FPC_CPU -export FPC_CPU=$(shell $(FPC) -iTP) +# Target CPU +ifndef CPU_TARGET +CPU_TARGET:=$(shell $(FPC) -iTP) +endif + +# Source CPU +ifndef CPU_SOURCE +CPU_SOURCE:=$(shell $(FPC) -iSP) endif # FPC version ifndef FPC_VERSION -export FPC_VERSION=$(shell $(FPC) -iV) +FPC_VERSION:=$(shell $(FPC) -iV) endif +export FPC OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FPC_VERSION + +##################################################################### +# Pre Settings +##################################################################### # Don't export OS_SOURCE because it can change after the first compile unexport OS_SOURCE FPC_VERSION @@ -138,6 +162,21 @@ endif # Message files MSGFILES=$(wildcard error*.msg) +##################################################################### +# FPCDIR Setting +##################################################################### + +# Test FPCDIR to look if the RTL dir exists +ifdef FPCDIR +override FPCDIR:=$(subst \,/,$(FPCDIR)) +ifeq ($(wildcard $(FPCDIR)/rtl),) +ifeq ($(wildcard $(FPCDIR)/units),) +override FPCDIR=wrong +endif +endif +else +override FPCDIR=wrong +endif # Default FPCDIR ifeq ($(FPCDIR),wrong) @@ -149,6 +188,28 @@ endif endif endif +# Detect FPCDIR +ifeq ($(FPCDIR),wrong) +ifdef inlinux +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 $(FPCDIR)/rtl),) +ifeq ($(wildcard $(FPCDIR)/units),) +override FPCDIR:=$(FPCDIR)/.. +ifeq ($(wildcard $(FPCDIR)/rtl),) +ifeq ($(wildcard $(FPCDIR)/units),) +override FPCDIR=c:/pp +endif +endif +endif +endif +endif +endif ifndef PACKAGESDIR PACKAGESDIR=$(FPCDIR)/packages @@ -160,6 +221,10 @@ ifndef COMPONENTSDIR COMPONENTSDIR= endif +# Create units dir +ifneq ($(FPCDIR),.) +UNITSDIR=$(FPCDIR)/units/$(OS_TARGET) +endif ##################################################################### # User Settings @@ -198,6 +263,9 @@ override PACKAGES+=rtl INFOTARGET=fpc_infocfg fpc_infoobjects fpc_infoinstall +##################################################################### +# Post Settings +##################################################################### # Default message file MSGFILE=error$(FPCLANG).msg @@ -223,57 +291,78 @@ override FPCOPT+=$(LOCALOPT) # Shell tools ##################################################################### +# echo +ifndef ECHO +ECHO:=$(strip $(wildcard $(addsuffix /gecho$(EXEEXT),$(SEARCHPATH)))) +ifeq ($(ECHO),) +ECHO:=$(strip $(wildcard $(addsuffix /echo$(EXEEXT),$(SEARCHPATH)))) +ifeq ($(ECHO),) +ECHO:=echo +ECHOE:=echo +else +ECHO:=$(firstword $(ECHO)) +ECHOE=$(ECHO) -E +endif +else +ECHO:=$(firstword $(ECHO)) +ECHOE=$(ECHO) -E +endif +endif + # To copy pograms ifndef COPY -export COPY=cp -fp +COPY:=cp -fp +endif + +# Copy a whole tree +ifndef COPYTREE +COPYTREE:=cp -rfp endif # To move pograms ifndef MOVE -export MOVE=mv -f +MOVE:=mv -f endif # Check delete program ifndef DEL -export DEL=rm -f +DEL:=rm -f endif # Check deltree program ifndef DELTREE -export DELTREE=rm -rf +DELTREE:=rm -rf endif # To install files ifndef INSTALL ifdef inlinux -export INSTALL=install -m 644 +INSTALL:=install -m 644 else -export INSTALL=$(COPY) -# ginstall has the strange thing to stubify all .o files ! -#INSTALL=ginstall -m 644 +INSTALL:=$(COPY) endif endif # To install programs ifndef INSTALLEXE ifdef inlinux -export INSTALLEXE=install -m 755 +INSTALLEXE:=install -m 755 else -export INSTALLEXE=$(COPY) -# ginstall has the strange thing to stubify all .o files ! -#INSTALLEXE=ginstall -m 755 +INSTALLEXE:=$(COPY) endif endif # To make a directory. ifndef MKDIR ifdef inlinux -export MKDIR=install -m 755 -d +MKDIR:=install -m 755 -d else -export MKDIR=ginstall -m 755 -d +MKDIR:=ginstall -m 755 -d endif endif +export ECHO ECHOE COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR + ##################################################################### # Default Tools ##################################################################### @@ -288,11 +377,6 @@ ifndef LD LD=ld endif -# Where is the ppumove program ? -ifndef PPUMOVE -PPUMOVE=ppumove -endif - # ppas.bat / ppas.sh ifdef inlinux PPAS=ppas.sh @@ -304,13 +388,6 @@ 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 @@ -318,94 +395,126 @@ else LDCONFIG= endif -# echo -ifndef ECHO -ECHO=$(strip $(wildcard $(addsuffix /echo$(EXEEXT),$(SEARCHPATH)))) -ifeq ($(ECHO),) -export ECHO:=echo +# ppumove +ifndef PPUMOVE +PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(EXEEXT),$(SEARCHPATH)))) +ifeq ($(PPUMOVE),) +PPUMOVE= else -export ECHO:=$(firstword $(ECHO)) +PPUMOVE:=$(firstword $(PPUMOVE)) endif endif +export PPUMOVE - +# ppufiles +ifndef PPUFILES +PPUFILES:=$(strip $(wildcard $(addsuffix /ppufiles$(EXEEXT),$(SEARCHPATH)))) +ifeq ($(PPUFILES),) +PPUFILES= +else +PPUFILES:=$(firstword $(PPUFILES)) +endif +endif +export PPUFILES # 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 +UPXPROG:=1 endif ifeq ($(OS_TARGET),win32) -UPXPROG=1 +UPXPROG:=1 endif ifdef UPXPROG -UPXPROG=$(strip $(wildcard $(addsuffix /upx$(EXEEXT),$(SEARCHPATH)))) -ifeq ($(UPX),) +UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(EXEEXT),$(SEARCHPATH)))) +ifeq ($(UPXPROG),) UPXPROG= else -export UPXPROG:=$(firstword $(UPX)) +UPXPROG:=$(firstword $(UPXPROG)) endif else UPXPROG= endif endif +export UPXPROG # cmp ifndef CMP -CMP=$(strip $(wildcard $(addsuffix /cmp$(EXEEXT),$(SEARCHPATH)))) +CMP:=$(strip $(wildcard $(addsuffix /cmp$(EXEEXT),$(SEARCHPATH)))) ifeq ($(CMP),) CMP= else -export CMP:=$(firstword $(CMP)) +CMP:=$(firstword $(CMP)) endif endif +export CMP # diff ifndef DIFF -DIFF=$(strip $(wildcard $(addsuffix /diff$(EXEEXT),$(SEARCHPATH)))) +DIFF:=$(strip $(wildcard $(addsuffix /diff$(EXEEXT),$(SEARCHPATH)))) ifeq ($(DIFF),) DIFF= else -export DIFF:=$(firstword $(DIFF)) +DIFF:=$(firstword $(DIFF)) endif endif +export DIFF # gdate/date ifndef DATE -DATE=$(strip $(wildcard $(addsuffix /date$(EXEEXT),$(SEARCHPATH)))) +DATE:=$(strip $(wildcard $(addsuffix /date$(EXEEXT),$(SEARCHPATH)))) ifeq ($(DATE),) -DATE=$(strip $(wildcard $(addsuffix /gdate$(EXEEXT),$(SEACHPATH)))) +DATE:=$(strip $(wildcard $(addsuffix /gdate$(EXEEXT),$(SEACHPATH)))) ifeq ($(DATE),) DATE= else -export DATE:=$(firstword $(DATE)) +DATE:=$(firstword $(DATE)) endif else -export DATE:=$(firstword $(DATE)) +DATE:=$(firstword $(DATE)) endif endif +export DATE ifdef DATE -DATESTR=$(shell $(DATE) +%Y%m%d) +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)))) +ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(EXEEXT),$(SEARCHPATH)))) ifeq ($(ZIPPROG),) ZIPPROG= else -export ZIPPROG:=$(firstword $(ZIPPROG)) -D9 -r +ZIPPROG:=$(firstword $(ZIPPROG)) endif endif +export ZIPPROG -ifndef ZIPEXT +ZIPOPT=-9 ZIPEXT=.zip -endif +# Tar +ifndef TARPROG +TARPROG:=$(strip $(wildcard $(addsuffix /tar$(EXEEXT),$(SEARCHPATH)))) +ifeq ($(TARPROG),) +TARPROG= +else +TARPROG:=$(firstword $(TARPROG)) +endif +endif +export TARPROG + +ifeq ($(USETAR),bz2) +TAROPT=vI +TAREXT=.tar.bz2 +else +TAROPT=vz +TAREXT=.tar.gz +endif ##################################################################### # Default extensions @@ -420,7 +529,8 @@ ASMEXT=.s SMARTEXT=.sl STATICLIBEXT=.a SHAREDLIBEXT=.so -PACKAGESUFFIX= +RSTEXT=.rst +FPCMADE=fpcmade # Go32v1 ifeq ($(OS_TARGET),go32v1) @@ -430,17 +540,17 @@ ASMEXT=.s1 SMARTEXT=.sl1 STATICLIBEXT=.a1 SHAREDLIBEXT=.so1 -PACKAGESUFFIX=v1 +FPCMADE=fpcmade.v1 endif # Go32v2 ifeq ($(OS_TARGET),go32v2) -PACKAGESUFFIX=go32 +FPCMADE=fpcmade.dos endif # Linux ifeq ($(OS_TARGET),linux) -PACKAGESUFFIX=linux +FPCMADE=fpcmade.lnx endif # Win32 @@ -451,7 +561,7 @@ ASMEXT=.sw SMARTEXT=.slw STATICLIBEXT=.aw SHAREDLIBEXT=.dll -PACKAGESUFFIX=win32 +FPCMADE=fpcmade.w32 endif # OS/2 @@ -462,7 +572,7 @@ OEXT=.oo2 SMARTEXT=.so STATICLIBEXT=.ao2 SHAREDLIBEXT=.dll -PACKAGESUFFIX=os2 +FPCMADE=fpcmade.os2 endif # library prefix @@ -489,6 +599,19 @@ endif endif +# Check if the dirs really exists, else turn it off +ifeq ($(wildcard $(UNITSDIR)),) +UNITSDIR= +endif +ifeq ($(wildcard $(TOOLKITSDIR)),) +TOOLKITSDIR= +endif +ifeq ($(wildcard $(PACKAGESDIR)),) +PACKAGESDIR= +endif +ifeq ($(wildcard $(COMPONENTSDIR)),) +COMPONENTSDIR= +endif # PACKAGESDIR packages @@ -530,24 +653,24 @@ endif # Default Directories ##################################################################### -# Base dir -ifdef PWD -BASEDIR:=$(shell $(PWD)) -else -BASEDIR=. -endif - # set the prefix directory where to install everything ifndef PREFIXINSTALLDIR ifdef inlinux -export PREFIXINSTALLDIR=/usr +PREFIXINSTALLDIR=/usr else -export PREFIXINSTALLDIR=/pp +PREFIXINSTALLDIR=/pp endif endif +export PREFIXINSTALLDIR + +# Where to place the resulting zip files +ifndef DESTZIPDIR +DESTZIPDIR:=$(BASEDIR) +endif +export DESTZIPDIR ##################################################################### -# Install Directories based on BASEINSTALLDIR +# Install Directories ##################################################################### # set the base directory where to install everything @@ -559,16 +682,6 @@ BASEINSTALLDIR=$(PREFIXINSTALLDIR) endif endif - -# Linux binary really goes to baseinstalldir -ifndef LIBINSTALLDIR -ifdef inlinux -LIBINSTALLDIR=$(BASEINSTALLDIR) -else -LIBINSTALLDIR=$(BASEINSTALLDIR)/lib -endif -endif - # set the directory where to install the binaries ifndef BININSTALLDIR ifdef inlinux @@ -578,77 +691,133 @@ BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET) endif endif -# Where the .msg files will be stored -ifndef MSGINSTALLDIR -MSGINSTALLDIR=$(BASEINSTALLDIR)/msg +# set the directory where to install the units. +ifndef UNITINSTALLDIR +UNITINSTALLDIR=$(BASEINSTALLDIR)/units/$(OS_TARGET) +ifdef UNITSUBDIR +UNITINSTALLDIR:=$(UNITINSTALLDIR)/$(UNITSUBDIR) +endif endif -# Where the .msg files will be stored +# 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 +ifdef SOURCESUBDIR +SOURCEINSTALLDIR:=$(SOURCEINSTALLDIR)/$(SOURCESUBDIR) +endif +endif # Where the doc files will be stored ifndef DOCINSTALLDIR ifdef inlinux -DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc/$(FPC_VERSION) +DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc-$(FPC_VERSION) else DOCINSTALLDIR=$(BASEINSTALLDIR)/doc endif endif -######################## -# Unit Directories -######################## - -# this can be set to 'rtl' when the RTL units are installed -ifndef UNITPREFIX -UNITPREFIX=units +# Where the some extra (data)files will be stored +ifndef DATAINSTALLDIR +DATAINSTALLDIR=$(BASEINSTALLDIR) endif -# set the directory where to install the units. -ifndef UNITINSTALLDIR -UNITINSTALLDIR=$(BASEINSTALLDIR)/$(UNITPREFIX)/$(OS_TARGET) +##################################################################### +# Redirection +##################################################################### + +ifndef REDIRFILE +REDIRFILE=log endif -# set the directory where to install the units. -ifndef STATIC_UNITINSTALLDIR -STATIC_UNITINSTALLDIR=$(UNITINSTALLDIR)/static +ifdef REDIR +ifndef inlinux +override FPC=redir -eo $(FPC) endif - -# set the directory where to install the units. -ifndef SHARED_UNITINSTALLDIR -SHARED_UNITINSTALLDIR=$(UNITINSTALLDIR)/shared +# set the verbosity to max +override FPCOPT+=-va +override REDIR:= >> $(REDIRFILE) endif -# set the directory where to install the libs (must exist) -ifndef STATIC_LIBINSTALLDIR -STATIC_LIBINSTALLDIR=$(STATIC_UNITINSTALLDIR) -endif - -# set the directory where to install the libs (must exist) -ifndef SHARED_LIBINSTALLDIR -ifdef inlinux -SHARED_LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib -else -SHARED_LIBINSTALLDIR=$(SHARED_UNITINSTALLDIR) -endif -endif - - ##################################################################### # Compiler Command Line ##################################################################### # Load commandline OPTDEF and add FPC_CPU define -override FPCOPTDEF:=-d$(FPC_CPU) +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 +# 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+=-g -dDEBUG +endif + +# Release mode (strip, optimize and don't load ppc386.cfg) +# 0.99.12b has a bug in the optimizer so don't use it by default +ifdef RELEASE +ifeq ($(FPC_VERSION),0.99.12) +override FPCOPT+=-Xs -OGp3 -n +else +override FPCOPT+=-Xs -OG2p3 -n +endif +endif + +# Strip +ifdef STRIP +override FPCOPT+=-Xs +endif + +# Optimizer +ifdef OPTIMIZE +override FPCOPT+=-OG2p3 +endif + +# Verbose settings (warning,note,info) +ifdef VERBOSE +override FPCOPT+=-vwni +endif + ifdef NEEDOPT override FPCOPT+=$(NEEDOPT) endif @@ -657,40 +826,55 @@ ifdef NEEDUNITDIR override FPCOPT+=$(addprefix -Fu,$(NEEDUNITDIR)) endif +ifdef UNITSDIR +override FPCOPT+=-Fu$(UNITSDIR) +endif # Target dirs ifdef TARGETDIR override FPCOPT+=-FE$(TARGETDIR) endif -# Add commandline options +# Add commandline options last so they can override 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 # Add defines from FPCOPTDEF to FPCOPT ifdef FPCOPTDEF override FPCOPT+=$(FPCOPTDEF) endif +# Error file ? +ifdef ERRORFILE +override FPCOPT+=-Fr$(ERRORFILE) +endif + # Was a config file specified ? ifdef CFGFILE override FPCOPT+=@$(CFGFILE) endif -override COMPILER=$(FPC) $(FPCOPT) +# For win32 the options are passed using the environment FPCEXTCMD +ifeq ($(OS_SOURCE),win32) +override FPCEXTCMD:=$(FPCOPT) +override FPCOPT:=!FPCEXTCMD +export FPCEXTCMD +endif +# Compiler commandline +override COMPILER:=$(FPC) $(FPCOPT) +# also call ppas if with command option -s +ifeq (,$(findstring -s ,$(COMPILER))) +EXECPPAS= +else +EXECPPAS:=@$(PPAS) +endif +##################################################################### +# Standard rules +##################################################################### debug: fpc_debug @@ -716,223 +900,259 @@ info: fpc_info # General compile rules ##################################################################### -.PHONY: fpc_all fpc_units fpc_exes fpc_loaders +.PHONY: fpc_packages fpc_all fpc_debug -# Create Filenames -LOADEROFILES=$(addsuffix $(OEXT),$(LOADEROBJECTS)) -EXEFILES=$(addsuffix $(EXEEXT),$(EXEOBJECTS)) -EXEOFILES=$(addsuffix $(OEXT),$(EXEOBJECTS)) -UNITPPUFILES=$(addsuffix $(PPUEXT),$(UNITOBJECTS)) -UNITOFILES=$(addsuffix $(OEXT),$(UNITOBJECTS)) -UNITAFILES=$(addsuffix $(STATICLIBEXT),$(UNITOBJECTS)) +$(FPCMADE): $(ALLTARGET) + @$(ECHO) Compiled > $(FPCMADE) + +fpc_packages: $(COMPILEPACKAGES) + +fpc_all: fpc_packages $(FPCMADE) + +fpc_debug: + $(MAKE) all DEBUG=1 + +# General compile rules, available for both possible PASEXT .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) + $(EXECPPAS) %$(PPUEXT): %.pas $(COMPILER) $< $(REDIR) - $(EXECPASS) + $(EXECPPAS) %$(EXEEXT): %.pp $(COMPILER) $< $(REDIR) - $(EXECPASS) + $(EXECPPAS) %$(EXEEXT): %.pas $(COMPILER) $< $(REDIR) - $(EXECPASS) - -%$(OEXT): %$(LOADEREXT) - $(AS) -o $*$(OEXT) $< + $(EXECPPAS) ##################################################################### # Library ##################################################################### -.PHONY: fpc_staticlib fpc_sharedlib +.PHONY: fpc_smart fpc_shared + +ifdef LIBVERSION +LIBFULLNAME=$(LIBNAME).$(LIBVERSION) +else +LIBFULLNAME=$(LIBNAME) +endif # Default sharedlib units are all unit objects ifndef SHAREDLIBUNITOBJECTS -SHAREDLIBUNITOBJECTS=$(UNITOBJECTS) +SHAREDLIBUNITOBJECTS:=$(UNITOBJECTS) endif -fpc_staticlib: - $(MAKE) libsclean - $(MAKE) all SMARTLINK=YES +fpc_smart: + $(MAKE) all LINKSMART=1 CREATESMART=1 -fpc_sharedlib: all +fpc_shared: all ifdef inlinux ifndef LIBNAME - @$(ECHO) LIBNAME not set + @$(ECHO) "LIBNAME not set" else - $(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBNAME) + $(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBFULLNAME) endif else - @$(ECHO) Shared Libraries not supported + @$(ECHO) "Shared Libraries not supported" endif ##################################################################### # Install rules ##################################################################### -.PHONY: fpc_showinstallfiles fpc_install +.PHONY: fpc_showinstall fpc_install -fpc_showinstallfiles : all -ifndef DEFAULTUNITS -ifdef EXEOBJECTS - @$(ECHO) $(addprefix "\n"$(BININSTALLDIR)/,$(EXEFILES)) -endif -endif -ifdef LOADEROBJECTS - @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(LOADEROFILES)) -endif -ifdef UNITOBJECTS - @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(wildcard $(UNITPPUFILES) $(UNITOFILES) $(UNITAFILES))) -endif ifdef EXTRAINSTALLUNITS - @$(ECHO) $(addprefix "\n"$(UNITINSTALLDIR)/,$(wildcard $(addsuffix $(OEXT),$(EXTRAINSTALLUNITS)) $(addsuffix $(STATICLIBEXT),$(EXTRAINSTALLUNITS)) $(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS)))) +override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS)) endif -fpc_install: +ifdef INSTALLPPUFILES +ifdef PPUFILES +INSTALLPPULINKFILES:=$(shell $(PPUFILES) -S -O $(INSTALLPPUFILES)) +else +INSTALLPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES))) +endif +endif + +fpc_showinstall: $(SHOWINSTALLTARGET) +ifdef INSTALLEXEFILES + @$(ECHO) -e $(addprefix "\n"$(BININSTALLDIR)/,$(INSTALLEXEFILES)) +endif +ifdef INSTALLPPUFILES + @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPUFILES)) +ifneq ($(INSTALLPPULINKFILES),) + @$(ECHO) -e $(addprefix "\n"$(UNITINSTALLDIR)/,$(INSTALLPPULINKFILES)) +endif +ifneq ($(wildcard $(LIBFULLNAME)),) + @$(ECHO) $(LIBINSTALLDIR)/$(LIBFULLNAME) +ifdef inlinux + @$(ECHO) $(LIBINSTALLDIR)/$(LIBNAME) +endif +endif +endif +ifdef EXTRAINSTALLFILES + @$(ECHO) -e $(addprefix "\n"$(DATAINSTALLDIR)/,$(EXTRAINSTALLFILES)) +endif + +fpc_install: $(INSTALLTARGET) # Create UnitInstallFiles -ifdef EXTRAINSTALLUNITS -override EXTRAINSTALLFILES=$(wildcard $(addsuffix $(OEXT),$(EXTRAINSTALLUNITS)) $(addsuffix $(STATICLIBEXT),$(EXTRAINSTALLUNITS)) $(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS))) -endif -ifndef DEFAULTUNITS -ifdef EXEOBJECTS +ifdef INSTALLEXEFILES $(MKDIR) $(BININSTALLDIR) # Compress the exes if upx is defined ifdef UPXPROG - -$(UPXPROG) $(EXEFILES) + -$(UPXPROG) $(INSTALLEXEFILES) endif - $(INSTALLEXE) $(EXEFILES) $(BININSTALLDIR) + $(INSTALLEXE) $(INSTALLEXEFILES) $(BININSTALLDIR) endif -endif -ifdef LOADEROBJECTS +ifdef INSTALLPPUFILES $(MKDIR) $(UNITINSTALLDIR) - $(INSTALL) $(LOADEROFILES) $(UNITINSTALLDIR) + $(INSTALL) $(INSTALLPPUFILES) $(UNITINSTALLDIR) +ifneq ($(INSTALLPPULINKFILES),) + $(INSTALL) $(INSTALLPPULINKFILES) $(UNITINSTALLDIR) endif -ifdef UNITOBJECTS - $(MKDIR) $(UNITINSTALLDIR) - $(INSTALL) $(wildcard $(UNITPPUFILES) $(UNITOFILES) $(UNITAFILES)) $(UNITINSTALLDIR) +ifneq ($(wildcard $(LIBFULLNAME)),) + $(MKDIR) $(LIBINSTALLDIR) + $(INSTALL) $(LIBFULLNAME) $(LIBINSTALLDIR) +ifdef inlinux + ln -sf $(LIBFULLNAME) $(LIBINSTALLDIR)/$(LIBNAME) endif -ifneq ($(wildcard $(addsuffix $(OEXT),$(EXTRAINSTALLUNITS)) $(addsuffix $(STATICLIBEXT),$(EXTRAINSTALLUNITS)) $(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS))),) - $(MKDIR) $(UNITINSTALLDIR) - $(INSTALL) $(wildcard $(addsuffix $(OEXT),$(EXTRAINSTALLUNITS)) $(addsuffix $(STATICLIBEXT),$(EXTRAINSTALLUNITS)) $(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS))) $(UNITINSTALLDIR) +endif +endif +ifdef EXTRAINSTALLFILES + $(MKDIR) $(DATAINSTALLDIR) + $(INSTALL) $(EXTRAINSTALLFILES) $(DATAINSTALLDIR) endif +##################################################################### +# SourceInstall rules +##################################################################### + +.PHONY: fpc_sourceinstall + +ifndef SOURCETOPDIR +SOURCETOPDIR=$(BASEDIR) +endif + +fpc_sourceinstall: clean + $(MKDIR) $(SOURCEINSTALLDIR) + $(COPYTREE) $(SOURCETOPDIR) $(SOURCEINSTALLDIR) ##################################################################### # Zip ##################################################################### -.PHONY: fpc_zipinstall fpc_zipinstalladd +.PHONY: fpc_zipinstall + +# Create suffix to add +ifndef PACKAGESUFFIX +PACKAGESUFFIX=$(OS_TARGET) +ifeq ($(OS_TARGET),go32v2) +PACKAGESUFFIX=go32 +endif +ifeq ($(OS_TARGET),win32) +PACKAGESUFFIX=w32 +endif +endif # Temporary path to pack a file ifndef PACKDIR ifndef inlinux -PACKDIR=pack_tmp +PACKDIR=$(BASEDIR)/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: +# Maybe create default zipname from packagename 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) +ifdef PACKAGENAME +ZIPNAME=$(PACKAGEPREFIX)$(PACKAGENAME)$(PACKAGESUFFIX) +endif +endif + +# Use tar by default under linux +ifndef USEZIP +ifdef inlinux +USETAR=1 endif - $(DELTREE) $(PACKDIR) endif -# First remove the zip and then install fpc_zipinstall: ifndef ZIPNAME - @$(ECHO) Please specify ZIPNAME! - @exit + @$(ECHO) "Please specify ZIPNAME!" + @exit 1 else - $(DEL) $(PACKAGEDIR)/$(ZIPNAME) $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR) -ifdef inlinux - cd $(PACKDIR) ; tar cvz --file $(PACKAGEDIR)/$(ZIPNAME).tar.gz * ; cd $(BASEDIR) +ifdef USETAR + $(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT) + cd $(PACKDIR) ; $(TARPROG) c$(TAROPT) --file $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT) * ; cd $(BASEDIR) else - cd $(PACKDIR) ; $(ZIPPROG) $(PACKAGEDIR)/$(ZIPNAME) * ; cd $(BASEDIR) + $(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT) + cd $(PACKDIR) ; $(ZIPPROG) -Dr $(ZIPOPT) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT) * ; cd $(BASEDIR) endif $(DELTREE) $(PACKDIR) endif +.PHONY: fpc_zipsourceinstall + +fpc_zipsourceinstall: + $(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall PACKAGESUFFIX=src ##################################################################### # Clean rules ##################################################################### -.PHONY: fpc_clean fpc_libsclean fpc_cleanall +.PHONY: fpc_clean fpc_cleanall fpc_distclean -fpc_clean: -ifdef EXEOBJECTS - -$(DEL) $(EXEFILES) $(EXEOFILES) +ifdef EXTRACLEANUNITS +override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRACLEANUNITS)) endif -ifdef LOADEROBJECTS - -$(DEL) $(LOADEROFILES) -endif -ifdef UNITOBJECTS - -$(DEL) $(wildcard $(UNITPPUFILES) $(UNITOFILES) $(UNITAFILES)) -endif -ifneq ($(wildcard $(addsuffix $(OEXT),$(EXTRACLEANUNITS)) $(addsuffix $(STATICLIBEXT),$(EXTRACLEANUNITS)) $(addsuffix $(PPUEXT),$(EXTRACLEANUNITS))) ,) - -$(DEL) $(wildcard $(addsuffix $(OEXT),$(EXTRACLEANUNITS)) $(addsuffix $(STATICLIBEXT),$(EXTRACLEANUNITS)) $(addsuffix $(PPUEXT),$(EXTRACLEANUNITS))) -endif - -$(DEL) $(PPAS) link.res log -fpc_libsclean: clean - -$(DEL) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) - -fpc_cleanall: -ifdef EXEOBJECTS - -$(DEL) $(EXEFILES) +ifdef CLEANPPUFILES +ifdef PPUFILES +CLEANPPULINKFILES:=$(shell $(PPUFILES) $(CLEANPPUFILES)) +else +CLEANPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES))) endif - -$(DEL) *$(OEXT) *$(PPUEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) +endif + +fpc_clean: $(CLEANTARGET) +ifdef CLEANEXEFILES + -$(DEL) $(CLEANEXEFILES) +endif +ifdef CLEANPPUFILES + -$(DEL) $(CLEANPPUFILES) +endif +ifneq ($(CLEANPPULINKFILES),) + -$(DEL) $(CLEANPPULINKFILES) +endif +ifdef CLEANRSTFILES + -$(DEL) $(CLEANRSTFILES) +endif +ifdef EXTRACLEANFILES + -$(DEL) $(EXTRACLEANFILES) +endif +ifdef LIBNAME + -$(DEL) $(LIBNAME) $(LIBFULLNAME) +endif + -$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE) + +fpc_distclean: fpc_clean + +fpc_cleanall: $(CLEANTARGET) +ifdef CLEANEXEFILES + -$(DEL) $(CLEANEXEFILES) +endif + -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) -$(DELTREE) *$(SMARTEXT) + -$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE) ##################################################################### # Info rules @@ -941,7 +1161,7 @@ endif .PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \ fpc_dirinfo -fpc_info: $(FPCINFO) +fpc_info: $(INFOTARGET) fpc_infocfg: @$(ECHO) @@ -949,11 +1169,25 @@ fpc_infocfg: @$(ECHO) @$(ECHO) FPC....... $(FPC) @$(ECHO) Version... $(FPC_VERSION) - @$(ECHO) CPU....... $(FPC_CPU) + @$(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) @@ -961,27 +1195,39 @@ fpc_infoinstall: @$(ECHO) ifdef DATE @$(ECHO) DateStr.............. $(DATESTR) +endif +ifdef PACKAGEPREFIX + @$(ECHO) PackagePrefix........ $(PACKAGEPREFIX) +endif +ifdef PACKAGENAME + @$(ECHO) PackageName.......... $(PACKAGENAME) endif @$(ECHO) PackageSuffix........ $(PACKAGESUFFIX) @$(ECHO) @$(ECHO) BaseInstallDir....... $(BASEINSTALLDIR) @$(ECHO) BinInstallDir........ $(BININSTALLDIR) - @$(ECHO) UnitInstallDir....... $(UNITINSTALLDIR) - @$(ECHO) StaticUnitInstallDir. $(STATIC_UNITINSTALLDIR) - @$(ECHO) SharedUnitInstallDir. $(SHARED_UNITINSTALLDIR) @$(ECHO) LibInstallDir........ $(LIBINSTALLDIR) - @$(ECHO) StaticLibInstallDir.. $(STATIC_LIBINSTALLDIR) - @$(ECHO) SharedLibInstallDir.. $(SHARED_LIBINSTALLDIR) - @$(ECHO) MsgInstallDir........ $(MSGINSTALLDIR) + @$(ECHO) UnitInstallDir....... $(UNITINSTALLDIR) + @$(ECHO) SourceInstallDir..... $(SOURCEINSTALLDIR) @$(ECHO) DocInstallDir........ $(DOCINSTALLDIR) + @$(ECHO) DataInstallDir....... $(DATAINSTALLDIR) + @$(ECHO) + @$(ECHO) DestZipDir........... $(DESTZIPDIR) + @$(ECHO) ZipName.............. $(ZIPNAME) @$(ECHO) +##################################################################### +# Local Makefile +##################################################################### + +ifneq ($(wildcard fpcmake.loc),) +include fpcmake.loc +endif ##################################################################### # Users rules ##################################################################### - ##################################################################### # Setup Targets #####################################################################