From 5050f1ff66f2a19270d2c4d4abd54175dfd69b4c Mon Sep 17 00:00:00 2001 From: florian Date: Sat, 17 Nov 2001 16:56:08 +0000 Subject: [PATCH] * init and final code in genrtti.inc updated --- rtl/Makefile | 1869 +++++++++++++++++++----------------------- rtl/i386/rttip.inc | 10 +- rtl/inc/dynarr.inc | 7 +- rtl/inc/genrtti.inc | 130 +-- rtl/inc/makefile.inc | 4 +- rtl/inc/rtti.inc | 9 +- 6 files changed, 923 insertions(+), 1106 deletions(-) diff --git a/rtl/Makefile b/rtl/Makefile index 1b2d387ece..f68e3232e1 100644 --- a/rtl/Makefile +++ b/rtl/Makefile @@ -1,30 +1,38 @@ # -# Don't edit, this file is generated by FPCMake Version 1.1 [2001/10/18] +# Makefile generated by fpcmake v1.00 [2000/12/30] # -default: all + +defaultrule: all + +##################################################################### +# Autodetect OS (Linux or Dos or Windows NT or OS/2) +# define inUnix when running under Unix (Linux,FreeBSD) +# define inWinNT when running under WinNT +# define inOS2 when running under OS/2 +##################################################################### + +# We need only / in the path override PATH:=$(subst \,/,$(PATH)) -ifeq ($(findstring ;,$(PATH)),) -inUnix=1 -SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH))) -else -SEARCHPATH:=$(subst ;, ,$(PATH)) -endif -PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH)))) + +# 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,$(SEARCHPATH)))) +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 +inUnix=1 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 @@ -33,94 +41,89 @@ ifdef OS2_SHELL inOS2=1 endif endif -else -ifneq ($(findstring cygwin,$(MACHTYPE)),) -inCygWin=1 -endif endif + +# The extension of executables ifdef inUnix -BATCHEXT=.sh +SRCEXEEXT= else -ifdef inOS2 -BATCHEXT=.cmd -else -BATCHEXT=.bat -endif +SRCEXEEXT=.exe endif + +# The path which is searched separated by spaces ifdef inUnix -PATHSEP=/ +SEARCHPATH=$(subst :, ,$(PATH)) else -PATHSEP:=$(subst /,\,/) +SEARCHPATH=$(subst ;, ,$(PATH)) endif + +# Base dir ifdef PWD -BASEDIR:=$(subst \,/,$(shell $(PWD))) -ifdef inCygWin -ifneq ($(findstring /cygdrive/,$(BASEDIR)),) -BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR)) -BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR))) -BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR)) -endif -endif +BASEDIR:=$(shell $(PWD)) else BASEDIR=. endif + +##################################################################### +# FPC version/target Detection +##################################################################### + +# What compiler to use ? ifndef FPC +# Compatibility with old makefiles ifdef PP FPC=$(PP) -endif -endif -ifndef FPC -FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH)))) -ifneq ($(FPCPROG),) -FPCPROG:=$(firstword $(FPCPROG)) -FPC:=$(shell $(FPCPROG) -PB) -ifneq ($(findstring Error,$(FPC)),) -override FPC=ppc386 -endif else -override FPC=ppc386 +FPC=ppc386 endif endif override FPC:=$(subst $(SRCEXEEXT),,$(FPC)) override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT) -ifndef FPC_VERSION -FPC_VERSION:=$(shell $(FPC) -iV) -endif -export FPC FPC_VERSION -ifndef CPU_TARGET -CPU_TARGET:=$(shell $(FPC) -iTP) -endif -ifndef CPU_SOURCE -CPU_SOURCE:=$(shell $(FPC) -iSP) -endif + +# Target OS ifndef OS_TARGET OS_TARGET:=$(shell $(FPC) -iTO) endif + +# Source OS ifndef OS_SOURCE OS_SOURCE:=$(shell $(FPC) -iSO) endif -FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET) -FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE) -ifneq ($(FULL_TARGET),$(FULL_SOURCE)) -CROSSCOMPILE=1 + +# Target CPU +ifndef CPU_TARGET +CPU_TARGET:=$(shell $(FPC) -iTP) endif -export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE CROSSCOMPILE + +# Source CPU +ifndef CPU_SOURCE +CPU_SOURCE:=$(shell $(FPC) -iSP) +endif + +# FPC version +ifndef FPC_VERSION +FPC_VERSION:=$(shell $(FPC) -iV) +endif + +export FPC OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FPC_VERSION + +##################################################################### +# 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 -ifeq ($(FPCDIR),wrong) -override FPCDIR=.. ifeq ($(wildcard $(FPCDIR)/rtl),) ifeq ($(wildcard $(FPCDIR)/units),) override FPCDIR=wrong endif endif +else +override FPCDIR=wrong endif + +# Detect FPCDIR ifeq ($(FPCDIR),wrong) ifdef inUnix override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION) @@ -130,416 +133,159 @@ endif else override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH)))))) override FPCDIR:=$(FPCDIR)/.. -ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),) +ifeq ($(wildcard $(FPCDIR)/rtl),) +ifeq ($(wildcard $(FPCDIR)/units),) override FPCDIR:=$(FPCDIR)/.. -ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),) +ifeq ($(wildcard $(FPCDIR)/rtl),) +ifeq ($(wildcard $(FPCDIR)/units),) override FPCDIR=c:/pp endif endif endif endif -ifndef CROSSDIR -CROSSDIR:=$(FPCDIR)/cross/$(FULL_TARGET) -endif -ifndef CROSSTARGETDIR -CROSSTARGETDIR=$(CROSSDIR)/$(FULL_TARGET) -endif -ifdef CROSSCOMPILE -UNITSDIR:=$(wildcard $(CROSSTARGETDIR)/units) -ifeq ($(UNITSDIR),) -UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET)) -endif -else -UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET)) -endif -PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages) -override PACKAGE_NAME=rtl -override PACKAGE_VERSION=1.0.5 -ifeq ($(OS_TARGET),linux) -override TARGET_DIRS+=linux -endif -ifeq ($(OS_TARGET),go32v2) -override TARGET_DIRS+=go32v2 -endif -ifeq ($(OS_TARGET),win32) -override TARGET_DIRS+=win32 -endif -ifeq ($(OS_TARGET),os2) -override TARGET_DIRS+=os2 -endif -ifeq ($(OS_TARGET),freebsd) -override TARGET_DIRS+=freebsd -endif -ifeq ($(OS_TARGET),beos) -override TARGET_DIRS+=beos -endif -ifeq ($(OS_TARGET),amiga) -override TARGET_DIRS+=amiga -endif -override INSTALL_FPCPACKAGE=y -override INSTALL_CREATEPACKAGEFPC=y -ifdef REQUIRE_UNITSDIR -override UNITSDIR+=$(REQUIRE_UNITSDIR) -endif -ifdef REQUIRE_PACKAGESDIR -override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR) -endif -ifdef ZIPINSTALL -ifeq ($(OS_TARGET),linux) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),freebsd) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_TARGET),netbsd) -UNIXINSTALLDIR=1 -endif -else -ifeq ($(OS_SOURCE),linux) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_SOURCE),freebsd) -UNIXINSTALLDIR=1 -endif -ifeq ($(OS_SOURCE),netbsd) -UNIXINSTALLDIR=1 endif endif -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 -ifndef DIST_DESTDIR -DIST_DESTDIR:=$(BASEDIR) -endif -export DIST_DESTDIR -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 -ifndef INSTALL_BINDIR -ifdef UNIXINSTALLDIR -INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin -else -INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin -ifdef INSTALL_FPCPACKAGE -INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(OS_TARGET) -endif -endif -endif -ifndef INSTALL_UNITDIR -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 -ifndef INSTALL_LIBDIR -ifdef UNIXINSTALLDIR -INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib -else -INSTALL_LIBDIR:=$(INSTALL_UNITDIR) -endif -endif -ifndef INSTALL_SOURCEDIR -ifdef UNIXINSTALLDIR -ifdef INSTALL_FPCPACKAGE -INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/src/fpc-$(FPC_VERSION)/$(PACKAGE_NAME) -else -INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/src/$(PACKAGE_NAME)-$(PACKAGE_VERSION) -endif -else -ifdef INSTALL_FPCPACKAGE -INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME) -else -INSTALL_SOURCEDIRL:=$(INSTALL_BASEDIR)/source -endif -endif -endif -ifndef INSTALL_DOCDIR -ifdef UNIXINSTALLDIR -ifdef INSTALL_FPCPACKAGE -INSTALL_DOCDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/$(PACKAGE_NAME) -else -INSTALL_DOCDIR:=$(INSTALL_PREFIX)/doc/$(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 -ifndef INSTALL_EXAMPLEDIR -ifdef UNIXINSTALLDIR -ifdef INSTALL_FPCPACKAGE -INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME) -else -INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION) -endif -else -ifdef INSTALL_FPCPACKAGE -INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME) -else -INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples -endif -endif -endif -ifndef INSTALL_DATADIR -INSTALL_DATADIR=$(INSTALL_BASEDIR) -endif -ifdef CROSSCOMPILE -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 -LOADEREXT=.as -EXEEXT=.exe -PPLEXT=.ppl -PPUEXT=.ppu -OEXT=.o -ASMEXT=.s -SMARTEXT=.sl -STATICLIBEXT=.a -SHAREDLIBEXT=.so -STATICLIBPREFIX=libp -RSTEXT=.rst -FPCMADE=fpcmade -ifeq ($(OS_TARGET),go32v1) -PPUEXT=.pp1 -OEXT=.o1 -ASMEXT=.s1 -SMARTEXT=.sl1 -STATICLIBEXT=.a1 -SHAREDLIBEXT=.so1 -STATICLIBPREFIX= -FPCMADE=fpcmade.v1 -PACKAGESUFFIX=v1 -endif -ifeq ($(OS_TARGET),go32v2) -STATICLIBPREFIX= -FPCMADE=fpcmade.dos -ZIPSUFFIX=go32 -endif -ifeq ($(OS_TARGET),linux) -EXEEXT= -HASSHAREDLIB=1 -FPCMADE=fpcmade.lnx -ZIPSUFFIX=linux -endif -ifeq ($(OS_TARGET),freebsd) -EXEEXT= -HASSHAREDLIB=1 -FPCMADE=fpcmade.freebsd -ZIPSUFFIX=freebsd -endif -ifeq ($(OS_TARGET),netbsd) -EXEEXT= -HASSHAREDLIB=1 -FPCMADE=fpcmade.netbsd -ZIPSUFFIX=netbsd -endif -ifeq ($(OS_TARGET),win32) -PPUEXT=.ppw -OEXT=.ow -ASMEXT=.sw -SMARTEXT=.slw -STATICLIBEXT=.aw -SHAREDLIBEXT=.dll -FPCMADE=fpcmade.w32 -ZIPSUFFIX=w32 -endif -ifeq ($(OS_TARGET),os2) -PPUEXT=.ppo -ASMEXT=.so2 -OEXT=.oo2 -AOUTEXT=.out -SMARTEXT=.so -STATICLIBEXT=.ao2 -SHAREDLIBEXT=.dll -FPCMADE=fpcmade.os2 -ZIPSUFFIX=emx -endif -ifeq ($(OS_TARGET),amiga) -EXEEXT= -PPUEXT=.ppa -ASMEXT=.asm -OEXT=.o -SMARTEXT=.sl -STATICLIBEXT=.a -SHAREDLIBEXT=.library -FPCMADE=fpcmade.amg -endif -ifeq ($(OS_TARGET),atari) -PPUEXT=.ppt -ASMEXT=.s -OEXT=.o -SMARTEXT=.sl -STATICLIBEXT=.a -EXEEXT=.ttp -FPCMADE=fpcmade.ata -endif -ifeq ($(OS_TARGET),beos) -PPUEXT=.ppu -ASMEXT=.s -OEXT=.o -SMARTEXT=.sl -STATICLIBEXT=.a -EXEEXT= -FPCMADE=fpcmade.be -ZIPSUFFIX=be -endif -ifeq ($(OS_TARGET),sunos) -PPUEXT=.ppu -ASMEXT=.s -OEXT=.o -SMARTEXT=.sl -STATICLIBEXT=.a -EXEEXT= -FPCMADE=fpcmade.sun -ZIPSUFFIX=sun -endif -ifeq ($(OS_TARGET),qnx) -PPUEXT=.ppu -ASMEXT=.s -OEXT=.o -SMARTEXT=.sl -STATICLIBEXT=.a -EXEEXT= -FPCMADE=fpcmade.qnx -ZIPSUFFIX=qnx -endif + +##################################################################### +# User Settings +##################################################################### + + +# Targets + + +# Clean + + +# Install + +ZIPTARGET=install + +# Defaults + + +# Directories + + +# Packages + + +# Libraries + + +# Info + +INFOTARGET=fpc_infocfg fpc_infoobjects fpc_infoinstall + +##################################################################### +# Shell tools +##################################################################### + +# echo ifndef ECHO -ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH)))) +ECHO:=$(strip $(wildcard $(addsuffix /gecho$(EXEEXT),$(SEARCHPATH)))) ifeq ($(ECHO),) ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(ECHO),) -ECHO= +ECHO:=echo +ECHOE:=echo else ECHO:=$(firstword $(ECHO)) +ECHOE=$(ECHO) -E endif else ECHO:=$(firstword $(ECHO)) +ECHOE=$(ECHO) -E endif endif -export ECHO -ifndef DATE -DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(DATE),) -DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(DATE),) -DATE= -else -DATE:=$(firstword $(DATE)) -endif -else -DATE:=$(firstword $(DATE)) -endif -endif -export DATE -ifndef GINSTALL -GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(GINSTALL),) -GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(GINSTALL),) -GINSTALL= -else -GINSTALL:=$(firstword $(GINSTALL)) -endif -else -GINSTALL:=$(firstword $(GINSTALL)) -endif -endif -export GINSTALL -ifndef CPPROG -CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(CPPROG),) -CPPROG= -else -CPPROG:=$(firstword $(CPPROG)) -endif -endif -export CPPROG -ifndef RMPROG -RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(RMPROG),) -RMPROG= -else -RMPROG:=$(firstword $(RMPROG)) -endif -endif -export RMPROG -ifndef MVPROG -MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(MVPROG),) -MVPROG= -else -MVPROG:=$(firstword $(MVPROG)) -endif -endif -export MVPROG -ifndef ECHOREDIR -ECHOREDIR:=$(subst /,$(PATHSEP),$(ECHO)) -endif + +# To copy pograms ifndef COPY -COPY:=$(CPPROG) -fp +COPY:=cp -fp endif + +# Copy a whole tree ifndef COPYTREE -COPYTREE:=$(CPPROG) -rfp +COPYTREE:=cp -rfp endif + +# To move pograms ifndef MOVE -MOVE:=$(MVPROG) -f +MOVE:=mv -f endif + +# Check delete program ifndef DEL -DEL:=$(RMPROG) -f +DEL:=rm -f endif + +# Check deltree program ifndef DELTREE -DELTREE:=$(RMPROG) -rf +DELTREE:=rm -rf endif + +# To install files ifndef INSTALL ifdef inUnix -INSTALL:=$(GINSTALL) -c -m 644 +INSTALL:=install -c -m 644 else INSTALL:=$(COPY) endif endif + +# To install programs ifndef INSTALLEXE ifdef inUnix -INSTALLEXE:=$(GINSTALL) -c -m 755 +INSTALLEXE:=install -c -m 755 else INSTALLEXE:=$(COPY) endif endif + +# To make a directory. ifndef MKDIR -MKDIR:=$(GINSTALL) -m 755 -d +ifdef inUnix +MKDIR:=install -m 755 -d +else +MKDIR:=ginstall -m 755 -d endif -export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR +endif + +export ECHO ECHOE COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR + +##################################################################### +# 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 inUnix +PPAS=ppas.sh +else +ifdef inOS2 +PPAS=ppas.cmd +else +PPAS=ppas.bat +endif +endif + +# ldconfig to rebuild .so cache +ifdef inUnix +LDCONFIG=ldconfig +else +LDCONFIG= +endif + +# ppumove ifndef PPUMOVE PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(PPUMOVE),) @@ -549,85 +295,20 @@ PPUMOVE:=$(firstword $(PPUMOVE)) endif endif export PPUMOVE -ifndef FPCMAKE -FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(FPCMAKE),) -FPCMAKE= + +# ppufiles +ifndef PPUFILES +PPUFILES:=$(strip $(wildcard $(addsuffix /ppufiles$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(PPUFILES),) +PPUFILES= else -FPCMAKE:=$(firstword $(FPCMAKE)) +PPUFILES:=$(firstword $(PPUFILES)) endif endif -export FPCMAKE -ifndef ZIPPROG -ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(ZIPPROG),) -ZIPPROG= -else -ZIPPROG:=$(firstword $(ZIPPROG)) -endif -endif -export ZIPPROG -ifndef TARPROG -TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(TARPROG),) -TARPROG= -else -TARPROG:=$(firstword $(TARPROG)) -endif -endif -export TARPROG -ASNAME=as -LDNAME=ld -ARNAME=ar -RCNAME=rc -ifeq ($(OS_TARGET),win32) -ASNAME=asw -LDNAME=ldw -ARNAME=arw -endif -ifndef ASPROG -ifdef CROSSBINDIR -ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT) -else -ASPROG=$(ASNAME) -endif -endif -ifndef LDPROG -ifdef CROSSBINDIR -LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT) -else -LDPROG=$(LDNAME) -endif -endif -ifndef RCPROG -ifdef CROSSBINDIR -RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT) -else -RCPROG=$(RCNAME) -endif -endif -ifndef ARPROG -ifdef CROSSBINDIR -ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT) -else -ARPROG=$(ARNAME) -endif -endif -AS=$(ASPROG) -LD=$(LDPROG) -RC=$(RCPROG) -AR=$(ARPROG) -PPAS=ppas$(BATCHEXT) -ifdef inUnix -LDCONFIG=ldconfig -else -LDCONFIG= -endif -ifdef DATE -DATESTR:=$(shell $(DATE) +%Y%m%d) -else -DATESTR= -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 @@ -647,8 +328,32 @@ UPXPROG= endif endif export UPXPROG + +# ZipProg, you can't use Zip as the var name (PFV) +ifndef ZIPPROG +ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(ZIPPROG),) +ZIPPROG= +else +ZIPPROG:=$(firstword $(ZIPPROG)) +endif +endif +export ZIPPROG + ZIPOPT=-9 ZIPEXT=.zip + +# Tar +ifndef TARPROG +TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH)))) +ifeq ($(TARPROG),) +TARPROG= +else +TARPROG:=$(firstword $(TARPROG)) +endif +endif +export TARPROG + ifeq ($(USETAR),bz2) TAROPT=vI TAREXT=.tar.bz2 @@ -656,12 +361,251 @@ else TAROPT=vz TAREXT=.tar.gz endif -ifndef NOCPUDEF -override FPCOPTDEF=$(CPU_TARGET) + +##################################################################### +# 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 +RSTEXT=.rst +FPCMADE=fpcmade + +# Go32v1 +ifeq ($(OS_TARGET),go32v1) +PPUEXT=.pp1 +OEXT=.o1 +ASMEXT=.s1 +SMARTEXT=.sl1 +STATICLIBEXT=.a1 +SHAREDLIBEXT=.so1 +FPCMADE=fpcmade.v1 endif + +# Go32v2 +ifeq ($(OS_TARGET),go32v2) +FPCMADE=fpcmade.dos +endif + +# Linux +ifeq ($(OS_TARGET),linux) +EXEEXT= +HASSHAREDLIB=1 +FPCMADE=fpcmade.lnx +endif + +# Linux +ifeq ($(OS_TARGET),freebsd) +EXEEXT= +HASSHAREDLIB=1 +FPCMADE=fpcmade.freebsd +endif + +# Win32 +ifeq ($(OS_TARGET),win32) +PPUEXT=.ppw +OEXT=.ow +ASMEXT=.sw +SMARTEXT=.slw +STATICLIBEXT=.aw +SHAREDLIBEXT=.dll +FPCMADE=fpcmade.w32 +endif + +# OS/2 +ifeq ($(OS_TARGET),os2) +PPUEXT=.ppo +ASMEXT=.so2 +OEXT=.oo2 +SMARTEXT=.so +STATICLIBEXT=.ao2 +SHAREDLIBEXT=.dll +FPCMADE=fpcmade.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 Directories +##################################################################### + +# Linux 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 ZIPNAME +# Zipinstall +ifeq ($(OS_TARGET),linux) +UNIXINSTALLDIR=1 +endif +ifeq ($(OS_TARGET),freebsd) +UNIXINSTALLDIR=1 +endif +else +# Normal install +ifeq ($(OS_SOURCE),linux) +UNIXINSTALLDIR=1 +endif +ifeq ($(OS_SOURCE),freebsd) +UNIXINSTALLDIR=1 +endif +endif + +# set the prefix directory where to install everything +ifndef PREFIXINSTALLDIR +ifdef UNIXINSTALLDIR +PREFIXINSTALLDIR=/usr +else +PREFIXINSTALLDIR=/pp +endif +endif +export PREFIXINSTALLDIR + +# Where to place the resulting zip files +ifndef DESTZIPDIR +DESTZIPDIR:=$(BASEDIR) +endif +export DESTZIPDIR + +##################################################################### +# Install Directories +##################################################################### + +# set the base directory where to install everything +ifndef BASEINSTALLDIR +ifdef UNIXINSTALLDIR +BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION) +else +BASEINSTALLDIR=$(PREFIXINSTALLDIR) +endif +endif + +# set the directory where to install the binaries +ifndef BININSTALLDIR +ifdef UNIXINSTALLDIR +BININSTALLDIR=$(PREFIXINSTALLDIR)/bin +else +BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET) +endif +endif + +# set the directory where to install the units. +ifndef UNITINSTALLDIR +UNITINSTALLDIR=$(BASEINSTALLDIR)/units/$(OS_TARGET) +ifdef UNITSUBDIR +UNITINSTALLDIR:=$(UNITINSTALLDIR)/$(UNITSUBDIR) +endif +endif + +# Where to install shared libraries +ifndef LIBINSTALLDIR +ifdef UNIXINSTALLDIR +LIBINSTALLDIR=$(PREFIXINSTALLDIR)/lib +else +LIBINSTALLDIR=$(UNITINSTALLDIR) +endif +endif + +# Where the source files will be stored +ifndef SOURCEINSTALLDIR +ifdef UNIXINSTALLDIR +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 UNIXINSTALLDIR +DOCINSTALLDIR=$(PREFIXINSTALLDIR)/doc/fpc-$(FPC_VERSION) +else +DOCINSTALLDIR=$(BASEINSTALLDIR)/doc +endif +endif + +# Where to install the examples, under linux we use the doc dir +# because the copytree command will create a subdir itself +ifndef EXAMPLEINSTALLDIR +ifdef UNIXINSTALLDIR +EXAMPLEINSTALLDIR=$(DOCINSTALLDIR)/examples +else +EXAMPLEINSTALLDIR=$(BASEINSTALLDIR)/examples +endif +ifdef EXAMPLESUBDIR +EXAMPLEINSTALLDIR:=$(EXAMPLEINSTALLDIR)/$(EXAMPLESUBDIR) +endif +endif + +# Where the some extra (data)files will be stored +ifndef DATAINSTALLDIR +DATAINSTALLDIR=$(BASEINSTALLDIR) +endif + +##################################################################### +# Redirection +##################################################################### + +ifndef REDIRFILE +REDIRFILE=log +endif + +ifdef REDIR +ifndef inUnix +override FPC=redir -eo $(FPC) +endif +# set the verbosity to max +override FPCOPT+=-va +override REDIR:= >> $(REDIRFILE) +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 + +# User dirs should be first, so they are looked at first ifdef UNITDIR override FPCOPT+=$(addprefix -Fu,$(UNITDIR)) endif @@ -674,90 +618,106 @@ 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 +override FPCOPT+=-gl -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 ($(CPU_TARGET),i386) -FPCCPUOPT:=-OG2p3 +ifeq ($(FPC_VERSION),0.99.12) +override FPCOPT+=-Xs -OGp3 -n else -FPCCPUOPT:= +override FPCOPT+=-Xs -OG2p3 -n endif -override FPCOPT+=-Xs $(FPCCPUOPT) -n -override FPCOPTDEF+=RELEASE endif + +# Strip ifdef STRIP override FPCOPT+=-Xs endif + +# Optimizer ifdef OPTIMIZE -ifeq ($(CPU_TARGET),i386) override FPCOPT+=-OG2p3 endif -endif + +# Verbose settings (warning,note,info) ifdef VERBOSE override FPCOPT+=-vwni endif -ifdef COMPILER_OPTIONS -override FPCOPT+=$(COMPILER_OPTIONS) + +ifdef UNITSDIR +override FPCOPT+=-Fu$(UNITSDIR) 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 -ifdef CROSSBINDIR -override FPCOPT+=-FD$(CROSSBINDIR) -endif -ifdef COMPILER_TARGETDIR -override FPCOPT+=-FE$(COMPILER_TARGETDIR) -ifeq ($(COMPILER_TARGETDIR),.) + +# Target dirs and the prefix to use for clean/install +ifdef TARGETDIR +override FPCOPT+=-FE$(TARGETDIR) +ifeq ($(TARGETDIR),.) override TARGETDIRPREFIX= else -override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/ +override TARGETDIRPREFIX=$(TARGETDIR)/ endif endif -ifdef COMPILER_UNITTARGETDIR -override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR) -ifeq ($(COMPILER_UNITTARGETDIR),.) +ifdef UNITTARGETDIR +override FPCOPT+=-FU$(UNITTARGETDIR) +ifeq ($(UNITTARGETDIR),.) override UNITTARGETDIRPREFIX= else -override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/ +override UNITTARGETDIRPREFIX=$(TARGETDIR)/ endif else -ifdef COMPILER_TARGETDIR -override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR) +ifdef TARGETDIR +override UNITTARGETDIR=$(TARGETDIR) override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX) endif endif + +# 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)) +override FPCOPT+=$(FPCOPTDEF) endif + +# Error file ? +ifdef ERRORFILE +override FPCOPT+=-Fr$(ERRORFILE) +endif + +# Was a config file specified ? ifdef CFGFILE override FPCOPT+=@$(CFGFILE) endif -ifdef USEENV + +# 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 +# but only if the OS_SOURCE and OS_TARGE are equal ifeq (,$(findstring -s ,$(COMPILER))) EXECPPAS= else @@ -765,164 +725,314 @@ ifeq ($(OS_SOURCE),$(OS_TARGET)) EXECPPAS:=@$(PPAS) endif endif -ifdef TARGET_RSTS -override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS)) -override CLEANRSTFILES+=$(RSTFILES) + +##################################################################### +# Standard rules +##################################################################### + +all: fpc_all + +debug: fpc_debug + +smart: fpc_smart + +shared: fpc_shared + +showinstall: fpc_showinstall + +install: fpc_install + +sourceinstall: fpc_sourceinstall + +exampleinstall: fpc_exampleinstall + +zipinstall: fpc_zipinstall + +zipsourceinstall: fpc_zipsourceinstall + +zipexampleinstall: fpc_zipexampleinstall + +clean: fpc_clean + +distclean: fpc_distclean + +cleanall: fpc_cleanall + +info: fpc_info + +.PHONY: all debug smart shared showinstall install sourceinstall exampleinstall zipinstall zipsourceinstall zipexampleinstall clean distclean cleanall info + +##################################################################### +# General compile rules +##################################################################### + +.PHONY: fpc_packages fpc_all fpc_debug + +$(FPCMADE): $(ALLTARGET) + @$(ECHO) Compiled > $(FPCMADE) + +fpc_packages: $(COMPILEPACKAGES) + +fpc_all: fpc_packages $(FPCMADE) + +fpc_debug: + $(MAKE) all DEBUG=1 + +# Search paths for .ppu if targetdir is set +ifdef UNITTARGETDIR +vpath %$(PPUEXT) $(UNITTARGETDIR) endif -.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall -ifdef INSTALL_UNITS -override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS)) + +# General compile rules, available for both possible PASEXT + +.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp + +%$(PPUEXT): %.pp + $(COMPILER) $< $(REDIR) + $(EXECPPAS) + +%$(PPUEXT): %.pas + $(COMPILER) $< $(REDIR) + $(EXECPPAS) + +%$(EXEEXT): %.pp + $(COMPILER) $< $(REDIR) + $(EXECPPAS) + +%$(EXEEXT): %.pas + $(COMPILER) $< $(REDIR) + $(EXECPPAS) + +##################################################################### +# Library +##################################################################### + +.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) +endif + +fpc_smart: + $(MAKE) all LINKSMART=1 CREATESMART=1 + +fpc_shared: all +ifdef HASSHAREDLIB +ifndef LIBNAME + @$(ECHO) "LIBNAME not set" +else + $(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBFULLNAME) +endif +else + @$(ECHO) "Shared Libraries not supported" +endif + +##################################################################### +# Install rules +##################################################################### + +.PHONY: fpc_showinstall fpc_install + +ifdef EXTRAINSTALLUNITS +override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS)) +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))) -override INSTALL_CREATEPACKAGEFPC=1 +ifdef PPUFILES +INSTALLPPULINKFILES:=$(shell $(PPUFILES) -S -O $(INSTALLPPUFILES)) +else +INSTALLPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(LIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))) endif +override INSTALLPPULINKFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILES)) +endif + ifdef INSTALLEXEFILES override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(INSTALLEXEFILES)) endif -fpc_install: all $(INSTALLTARGET) + +fpc_showinstall: $(SHOWINSTALLTARGET) ifdef INSTALLEXEFILES - $(MKDIR) $(INSTALL_BINDIR) + @$(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 HASSHAREDLIB + @$(ECHO) $(LIBINSTALLDIR)/$(LIBNAME) +endif +endif +endif +ifdef EXTRAINSTALLFILES + @$(ECHO) -e $(addprefix "\n"$(DATAINSTALLDIR)/,$(EXTRAINSTALLFILES)) +endif + +fpc_install: $(INSTALLTARGET) +# Create UnitInstallFiles +ifdef INSTALLEXEFILES + $(MKDIR) $(BININSTALLDIR) +# Compress the exes if upx is defined ifdef UPXPROG -$(UPXPROG) $(INSTALLEXEFILES) endif - $(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR) -endif -ifdef INSTALL_CREATEPACKAGEFPC -ifdef FPCMAKE -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 + $(INSTALLEXE) $(INSTALLEXEFILES) $(BININSTALLDIR) endif ifdef INSTALLPPUFILES - $(MKDIR) $(INSTALL_UNITDIR) - $(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR) + $(MKDIR) $(UNITINSTALLDIR) + $(INSTALL) $(INSTALLPPUFILES) $(UNITINSTALLDIR) ifneq ($(INSTALLPPULINKFILES),) - $(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR) + $(INSTALL) $(INSTALLPPULINKFILES) $(UNITINSTALLDIR) endif -ifneq ($(wildcard $(LIB_FULLNAME)),) - $(MKDIR) $(INSTALL_LIBDIR) - $(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR) +ifneq ($(wildcard $(LIBFULLNAME)),) + $(MKDIR) $(LIBINSTALLDIR) + $(INSTALL) $(LIBFULLNAME) $(LIBINSTALLDIR) ifdef inUnix - ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME) + ln -sf $(LIBFULLNAME) $(LIBINSTALLDIR)/$(LIBNAME) endif endif endif -ifdef INSTALL_FILES - $(MKDIR) $(INSTALL_DATADIR) - $(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR) +ifdef EXTRAINSTALLFILES + $(MKDIR) $(DATAINSTALLDIR) + $(INSTALL) $(EXTRAINSTALLFILES) $(DATAINSTALLDIR) endif -fpc_sourceinstall: distclean - $(MKDIR) $(INSTALL_SOURCEDIR) - $(COPYTREE) $(BASEDIR) $(INSTALL_SOURCEDIR) -fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS)) -ifdef HASEXAMPLES - $(MKDIR) $(INSTALL_EXAMPLEDIR) + +##################################################################### +# SourceInstall rules +##################################################################### + +.PHONY: fpc_sourceinstall + +ifndef SOURCETOPDIR +SOURCETOPDIR=$(BASEDIR) endif + +fpc_sourceinstall: clean + $(MKDIR) $(SOURCEINSTALLDIR) + $(COPYTREE) $(SOURCETOPDIR) $(SOURCEINSTALLDIR) + +##################################################################### +# exampleinstall rules +##################################################################### + +.PHONY: fpc_exampleinstall + +fpc_exampleinstall: $(addsuffix _clean,$(EXAMPLEDIROBJECTS)) ifdef EXAMPLESOURCEFILES - $(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR) + $(MKDIR) $(EXAMPLEINSTALLDIR) + $(COPY) $(EXAMPLESOURCEFILES) $(EXAMPLEINSTALLDIR) endif -ifdef TARGET_EXAMPLEDIRS - $(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR) +ifdef EXAMPLEDIROBJECTS +ifndef EXAMPLESOURCEFILES + $(MKDIR) $(EXAMPLEINSTALLDIR) endif -.PHONY: fpc_distinstall -fpc_distinstall: install exampleinstall -.PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall + $(COPYTREE) $(addsuffix /*,$(EXAMPLEDIROBJECTS)) $(EXAMPLEINSTALLDIR) +endif + +##################################################################### +# Zip +##################################################################### + +.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 +ifeq ($(OS_TARGET),os2) +PACKAGESUFFIX=emx +endif +endif + +# Temporary path to pack a file ifndef PACKDIR ifndef inUnix -PACKDIR=$(BASEDIR)/../fpc-pack +PACKDIR=$(BASEDIR)/pack_tmp 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 -ifndef ZIPTARGET -ifdef DIST_ZIPTARGET -ZIPTARGET=DIST_ZIPTARGET -else -ZIPTARGET=install +ifdef PACKAGENAME +ZIPNAME=$(PACKAGEPREFIX)$(PACKAGENAME)$(PACKAGESUFFIX) endif endif + +# Use tar by default under linux ifndef USEZIP ifdef inUnix USETAR=1 endif endif -ifndef inUnix -USEZIPWRAPPER=1 -endif -ifdef USEZIPWRAPPER -ZIPPATHSEP=$(PATHSEP) -ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(BATCHEXT)) -else -ZIPPATHSEP=/ -endif -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 -ifneq ($(ECHOREDIR),echo) - $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER) - $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER) - $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER) +ifndef ZIPNAME + @$(ECHO) "Please specify ZIPNAME!" + @exit 1 else - echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER) - echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER) - echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER) -endif -ifdef inUnix - /bin/sh $(ZIPWRAPPER) + $(MAKE) $(ZIPTARGET) PREFIXINSTALLDIR=$(PACKDIR) +ifdef USETAR + $(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT) + cd $(PACKDIR) ; $(TARPROG) cf$(TAROPT) $(DESTZIPDIR)/$(ZIPNAME)$(TAREXT) * ; cd $(BASEDIR) else - $(ZIPWRAPPER) -endif - $(DEL) $(ZIPWRAPPER) -else - $(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE) + $(DEL) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT) + cd $(PACKDIR) ; $(ZIPPROG) -Dr $(ZIPOPT) $(DESTZIPDIR)/$(ZIPNAME)$(ZIPEXT) * ; cd $(BASEDIR) 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 + +.PHONY: fpc_zipsourceinstall + +fpc_zipsourceinstall: + $(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall PACKAGESUFFIX=src + +.PHONY: fpc_zipexampleinstall + +fpc_zipexampleinstall: + $(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall PACKAGESUFFIX=exm + +##################################################################### +# 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)) + +ifdef EXTRACLEANUNITS +override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(EXTRACLEANUNITS)) 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))) +# Get the .o and .a files created for the units +ifdef PPUFILES +CLEANPPULINKFILES:=$(shell $(PPUFILES) $(CLEANPPUFILES)) +else +CLEANPPULINKFILES:=$(wildcard $(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(LIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))) endif +override CLEANPPULINKFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)) +endif + fpc_clean: $(CLEANTARGET) ifdef CLEANEXEFILES -$(DEL) $(CLEANEXEFILES) @@ -936,17 +1046,22 @@ endif ifdef CLEANRSTFILES -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES)) endif -ifdef CLEAN_FILES - -$(DEL) $(CLEAN_FILES) +ifdef EXTRACLEANFILES + -$(DEL) $(EXTRACLEANFILES) endif -ifdef LIB_NAME - -$(DEL) $(LIB_NAME) $(LIB_FULLNAME) +ifdef LIBNAME + -$(DEL) $(LIBNAME) $(LIBFULLNAME) endif - -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE) -fpc_distclean: clean -ifdef COMPILER_UNITTARGETDIR + -$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE) + +fpc_distclean: fpc_clean + +# Also run clean first if targetdir is set. Unittargetdir is always +# set if targetdir or unittargetdir is specified +ifdef UNITTARGETDIR TARGETDIRCLEAN=fpc_clean endif + fpc_cleanall: $(CLEANTARGET) $(TARGETDIRCLEAN) ifdef CLEANEXEFILES -$(DEL) $(CLEANEXEFILES) @@ -954,402 +1069,74 @@ endif -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) -$(DELTREE) *$(SMARTEXT) -$(DEL) $(FPCMADE) $(PPAS) link.res $(FPCEXTFILE) $(REDIRFILE) -ifdef AOUTEXT - -$(DEL) *$(AOUTEXT) -endif -.PHONY: fpc_info -fpc_info: - @$(ECHO) - @$(ECHO) == Package info == - @$(ECHO) Package Name..... $(PACKAGE_NAME) - @$(ECHO) Package Version.. $(PACKAGE_VERSION) + +##################################################################### +# Info rules +##################################################################### + +.PHONY: fpc_info fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo \ + fpc_dirinfo + +fpc_info: $(INFOTARGET) + +fpc_infocfg: @$(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 Target.. $(FULL_SOURCE) - @$(ECHO) Full Source.. $(FULL_TARGET) + @$(ECHO) FPC....... $(FPC) + @$(ECHO) Version... $(FPC_VERSION) + @$(ECHO) CPU....... $(CPU_TARGET) + @$(ECHO) Source.... $(OS_SOURCE) + @$(ECHO) Target.... $(OS_TARGET) @$(ECHO) - @$(ECHO) == Directory info == - @$(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) Date...... $(DATE) - @$(ECHO) FPCMake... $(FPCMAKE) - @$(ECHO) PPUMove... $(PPUMOVE) - @$(ECHO) Upx....... $(UPXPROG) - @$(ECHO) Zip....... $(ZIPPROG) + +fpc_infoobjects: @$(ECHO) @$(ECHO) == Object info == @$(ECHO) - @$(ECHO) Target Loaders...... $(TARGET_LOADERS) - @$(ECHO) Target Units........ $(TARGET_UNITS) - @$(ECHO) Target Programs..... $(TARGET_PROGRAMS) - @$(ECHO) Target Dirs......... $(TARGET_DIRS) - @$(ECHO) Target Examples..... $(TARGET_EXAMPLES) - @$(ECHO) Target ExampleDirs.. $(TARGET_EXAMPLEDIRS) + @$(ECHO) LoaderObjects..... $(LOADEROBJECTS) + @$(ECHO) UnitObjects....... $(UNITOBJECTS) + @$(ECHO) ExeObjects........ $(EXEOBJECTS) @$(ECHO) - @$(ECHO) Clean Units......... $(CLEAN_UNITS) - @$(ECHO) Clean Files......... $(CLEAN_FILES) + @$(ECHO) ExtraCleanUnits... $(EXTRACLEANUNITS) + @$(ECHO) ExtraCleanFiles... $(EXTRACLEANFILES) @$(ECHO) - @$(ECHO) Install Units....... $(INSTALL_UNITS) - @$(ECHO) Install Files....... $(INSTALL_FILES) + @$(ECHO) ExtraInstallUnits. $(EXTRAINSTALLUNITS) + @$(ECHO) ExtraInstallFiles. $(EXTRAINSTALLFILES) + @$(ECHO) + +fpc_infoinstall: @$(ECHO) @$(ECHO) == Install info == @$(ECHO) +ifdef DATE @$(ECHO) DateStr.............. $(DATESTR) - @$(ECHO) ZipPrefix............ $(ZIPPREFIX) - @$(ECHO) ZipSuffix............ $(ZIPSUFFIX) - @$(ECHO) Install FPC Package.. $(INSTALL_FPCPACKAGE) +endif +ifdef PACKAGEPREFIX + @$(ECHO) PackagePrefix........ $(PACKAGEPREFIX) +endif +ifdef PACKAGENAME + @$(ECHO) PackageName.......... $(PACKAGENAME) +endif + @$(ECHO) PackageSuffix........ $(PACKAGESUFFIX) @$(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) BaseInstallDir....... $(BASEINSTALLDIR) + @$(ECHO) BinInstallDir........ $(BININSTALLDIR) + @$(ECHO) LibInstallDir........ $(LIBINSTALLDIR) + @$(ECHO) UnitInstallDir....... $(UNITINSTALLDIR) + @$(ECHO) SourceInstallDir..... $(SOURCEINSTALLDIR) + @$(ECHO) DocInstallDir........ $(DOCINSTALLDIR) + @$(ECHO) DataInstallDir....... $(DATAINSTALLDIR) @$(ECHO) - @$(ECHO) Dist destination dir. $(DIST_DESTDIR) - @$(ECHO) Dist zip name........ $(DIST_ZIPNAME) + @$(ECHO) DestZipDir........... $(DESTZIPDIR) + @$(ECHO) ZipName.............. $(ZIPNAME) @$(ECHO) -ifeq ($(OS_TARGET),linux) -TARGET_DIRS_LINUX=1 -endif -ifeq ($(OS_TARGET),go32v2) -TARGET_DIRS_GO32V2=1 -endif -ifeq ($(OS_TARGET),win32) -TARGET_DIRS_WIN32=1 -endif -ifeq ($(OS_TARGET),os2) -TARGET_DIRS_OS2=1 -endif -ifeq ($(OS_TARGET),freebsd) -TARGET_DIRS_FREEBSD=1 -endif -ifeq ($(OS_TARGET),beos) -TARGET_DIRS_BEOS=1 -endif -ifeq ($(OS_TARGET),amiga) -TARGET_DIRS_AMIGA=1 -endif -ifdef TARGET_DIRS_LINUX -linux_all: - $(MAKE) -C linux all -linux_debug: - $(MAKE) -C linux debug -linux_smart: - $(MAKE) -C linux smart -linux_examples: - $(MAKE) -C linux examples -linux_shared: - $(MAKE) -C linux shared -linux_install: - $(MAKE) -C linux install -linux_sourceinstall: - $(MAKE) -C linux sourceinstall -linux_exampleinstall: - $(MAKE) -C linux exampleinstall -linux_distinstall: - $(MAKE) -C linux distinstall -linux_zipinstall: - $(MAKE) -C linux zipinstall -linux_zipsourceinstall: - $(MAKE) -C linux zipsourceinstall -linux_zipexampleinstall: - $(MAKE) -C linux zipexampleinstall -linux_zipdistinstall: - $(MAKE) -C linux zipdistinstall -linux_clean: - $(MAKE) -C linux clean -linux_distclean: - $(MAKE) -C linux distclean -linux_cleanall: - $(MAKE) -C linux cleanall -linux_info: - $(MAKE) -C linux info -linux: - $(MAKE) -C linux all -.PHONY: linux_all linux_debug linux_smart linux_examples linux_shared linux_install linux_sourceinstall linux_exampleinstall linux_distinstall linux_zipinstall linux_zipsourceinstall linux_zipexampleinstall linux_zipdistinstall linux_clean linux_distclean linux_cleanall linux_info linux -endif -ifdef TARGET_DIRS_GO32V2 -go32v2_all: - $(MAKE) -C go32v2 all -go32v2_debug: - $(MAKE) -C go32v2 debug -go32v2_smart: - $(MAKE) -C go32v2 smart -go32v2_examples: - $(MAKE) -C go32v2 examples -go32v2_shared: - $(MAKE) -C go32v2 shared -go32v2_install: - $(MAKE) -C go32v2 install -go32v2_sourceinstall: - $(MAKE) -C go32v2 sourceinstall -go32v2_exampleinstall: - $(MAKE) -C go32v2 exampleinstall -go32v2_distinstall: - $(MAKE) -C go32v2 distinstall -go32v2_zipinstall: - $(MAKE) -C go32v2 zipinstall -go32v2_zipsourceinstall: - $(MAKE) -C go32v2 zipsourceinstall -go32v2_zipexampleinstall: - $(MAKE) -C go32v2 zipexampleinstall -go32v2_zipdistinstall: - $(MAKE) -C go32v2 zipdistinstall -go32v2_clean: - $(MAKE) -C go32v2 clean -go32v2_distclean: - $(MAKE) -C go32v2 distclean -go32v2_cleanall: - $(MAKE) -C go32v2 cleanall -go32v2_info: - $(MAKE) -C go32v2 info -go32v2: - $(MAKE) -C go32v2 all -.PHONY: go32v2_all go32v2_debug go32v2_smart go32v2_examples go32v2_shared go32v2_install go32v2_sourceinstall go32v2_exampleinstall go32v2_distinstall go32v2_zipinstall go32v2_zipsourceinstall go32v2_zipexampleinstall go32v2_zipdistinstall go32v2_clean go32v2_distclean go32v2_cleanall go32v2_info go32v2 -endif -ifdef TARGET_DIRS_WIN32 -win32_all: - $(MAKE) -C win32 all -win32_debug: - $(MAKE) -C win32 debug -win32_smart: - $(MAKE) -C win32 smart -win32_examples: - $(MAKE) -C win32 examples -win32_shared: - $(MAKE) -C win32 shared -win32_install: - $(MAKE) -C win32 install -win32_sourceinstall: - $(MAKE) -C win32 sourceinstall -win32_exampleinstall: - $(MAKE) -C win32 exampleinstall -win32_distinstall: - $(MAKE) -C win32 distinstall -win32_zipinstall: - $(MAKE) -C win32 zipinstall -win32_zipsourceinstall: - $(MAKE) -C win32 zipsourceinstall -win32_zipexampleinstall: - $(MAKE) -C win32 zipexampleinstall -win32_zipdistinstall: - $(MAKE) -C win32 zipdistinstall -win32_clean: - $(MAKE) -C win32 clean -win32_distclean: - $(MAKE) -C win32 distclean -win32_cleanall: - $(MAKE) -C win32 cleanall -win32_info: - $(MAKE) -C win32 info -win32: - $(MAKE) -C win32 all -.PHONY: win32_all win32_debug win32_smart win32_examples win32_shared win32_install win32_sourceinstall win32_exampleinstall win32_distinstall win32_zipinstall win32_zipsourceinstall win32_zipexampleinstall win32_zipdistinstall win32_clean win32_distclean win32_cleanall win32_info win32 -endif -ifdef TARGET_DIRS_OS2 -os2_all: - $(MAKE) -C os2 all -os2_debug: - $(MAKE) -C os2 debug -os2_smart: - $(MAKE) -C os2 smart -os2_examples: - $(MAKE) -C os2 examples -os2_shared: - $(MAKE) -C os2 shared -os2_install: - $(MAKE) -C os2 install -os2_sourceinstall: - $(MAKE) -C os2 sourceinstall -os2_exampleinstall: - $(MAKE) -C os2 exampleinstall -os2_distinstall: - $(MAKE) -C os2 distinstall -os2_zipinstall: - $(MAKE) -C os2 zipinstall -os2_zipsourceinstall: - $(MAKE) -C os2 zipsourceinstall -os2_zipexampleinstall: - $(MAKE) -C os2 zipexampleinstall -os2_zipdistinstall: - $(MAKE) -C os2 zipdistinstall -os2_clean: - $(MAKE) -C os2 clean -os2_distclean: - $(MAKE) -C os2 distclean -os2_cleanall: - $(MAKE) -C os2 cleanall -os2_info: - $(MAKE) -C os2 info -os2: - $(MAKE) -C os2 all -.PHONY: os2_all os2_debug os2_smart os2_examples os2_shared os2_install os2_sourceinstall os2_exampleinstall os2_distinstall os2_zipinstall os2_zipsourceinstall os2_zipexampleinstall os2_zipdistinstall os2_clean os2_distclean os2_cleanall os2_info os2 -endif -ifdef TARGET_DIRS_FREEBSD -freebsd_all: - $(MAKE) -C freebsd all -freebsd_debug: - $(MAKE) -C freebsd debug -freebsd_smart: - $(MAKE) -C freebsd smart -freebsd_examples: - $(MAKE) -C freebsd examples -freebsd_shared: - $(MAKE) -C freebsd shared -freebsd_install: - $(MAKE) -C freebsd install -freebsd_sourceinstall: - $(MAKE) -C freebsd sourceinstall -freebsd_exampleinstall: - $(MAKE) -C freebsd exampleinstall -freebsd_distinstall: - $(MAKE) -C freebsd distinstall -freebsd_zipinstall: - $(MAKE) -C freebsd zipinstall -freebsd_zipsourceinstall: - $(MAKE) -C freebsd zipsourceinstall -freebsd_zipexampleinstall: - $(MAKE) -C freebsd zipexampleinstall -freebsd_zipdistinstall: - $(MAKE) -C freebsd zipdistinstall -freebsd_clean: - $(MAKE) -C freebsd clean -freebsd_distclean: - $(MAKE) -C freebsd distclean -freebsd_cleanall: - $(MAKE) -C freebsd cleanall -freebsd_info: - $(MAKE) -C freebsd info -freebsd: - $(MAKE) -C freebsd all -.PHONY: freebsd_all freebsd_debug freebsd_smart freebsd_examples freebsd_shared freebsd_install freebsd_sourceinstall freebsd_exampleinstall freebsd_distinstall freebsd_zipinstall freebsd_zipsourceinstall freebsd_zipexampleinstall freebsd_zipdistinstall freebsd_clean freebsd_distclean freebsd_cleanall freebsd_info freebsd -endif -ifdef TARGET_DIRS_BEOS -beos_all: - $(MAKE) -C beos all -beos_debug: - $(MAKE) -C beos debug -beos_smart: - $(MAKE) -C beos smart -beos_examples: - $(MAKE) -C beos examples -beos_shared: - $(MAKE) -C beos shared -beos_install: - $(MAKE) -C beos install -beos_sourceinstall: - $(MAKE) -C beos sourceinstall -beos_exampleinstall: - $(MAKE) -C beos exampleinstall -beos_distinstall: - $(MAKE) -C beos distinstall -beos_zipinstall: - $(MAKE) -C beos zipinstall -beos_zipsourceinstall: - $(MAKE) -C beos zipsourceinstall -beos_zipexampleinstall: - $(MAKE) -C beos zipexampleinstall -beos_zipdistinstall: - $(MAKE) -C beos zipdistinstall -beos_clean: - $(MAKE) -C beos clean -beos_distclean: - $(MAKE) -C beos distclean -beos_cleanall: - $(MAKE) -C beos cleanall -beos_info: - $(MAKE) -C beos info -beos: - $(MAKE) -C beos all -.PHONY: beos_all beos_debug beos_smart beos_examples beos_shared beos_install beos_sourceinstall beos_exampleinstall beos_distinstall beos_zipinstall beos_zipsourceinstall beos_zipexampleinstall beos_zipdistinstall beos_clean beos_distclean beos_cleanall beos_info beos -endif -ifdef TARGET_DIRS_AMIGA -amiga_all: - $(MAKE) -C amiga all -amiga_debug: - $(MAKE) -C amiga debug -amiga_smart: - $(MAKE) -C amiga smart -amiga_examples: - $(MAKE) -C amiga examples -amiga_shared: - $(MAKE) -C amiga shared -amiga_install: - $(MAKE) -C amiga install -amiga_sourceinstall: - $(MAKE) -C amiga sourceinstall -amiga_exampleinstall: - $(MAKE) -C amiga exampleinstall -amiga_distinstall: - $(MAKE) -C amiga distinstall -amiga_zipinstall: - $(MAKE) -C amiga zipinstall -amiga_zipsourceinstall: - $(MAKE) -C amiga zipsourceinstall -amiga_zipexampleinstall: - $(MAKE) -C amiga zipexampleinstall -amiga_zipdistinstall: - $(MAKE) -C amiga zipdistinstall -amiga_clean: - $(MAKE) -C amiga clean -amiga_distclean: - $(MAKE) -C amiga distclean -amiga_cleanall: - $(MAKE) -C amiga cleanall -amiga_info: - $(MAKE) -C amiga info -amiga: - $(MAKE) -C amiga all -.PHONY: amiga_all amiga_debug amiga_smart amiga_examples amiga_shared amiga_install amiga_sourceinstall amiga_exampleinstall amiga_distinstall amiga_zipinstall amiga_zipsourceinstall amiga_zipexampleinstall amiga_zipdistinstall amiga_clean amiga_distclean amiga_cleanall amiga_info amiga -endif -all: $(addsuffix _all,$(TARGET_DIRS)) -debug: $(addsuffix _debug,$(TARGET_DIRS)) -smart: $(addsuffix _smart,$(TARGET_DIRS)) -examples: $(addsuffix _examples,$(TARGET_DIRS)) -shared: $(addsuffix _shared,$(TARGET_DIRS)) -install: fpc_install $(addsuffix _install,$(TARGET_DIRS)) -sourceinstall: fpc_sourceinstall -exampleinstall: fpc_exampleinstall $(addsuffix _exampleinstall,$(TARGET_DIRS)) -distinstall: fpc_distinstall -zipinstall: fpc_zipinstall -zipsourceinstall: fpc_zipsourceinstall -zipexampleinstall: fpc_zipexampleinstall $(addsuffix _zipexampleinstall,$(TARGET_DIRS)) -zipdistinstall: fpc_zipdistinstall $(addsuffix _zipdistinstall,$(TARGET_DIRS)) -clean: fpc_clean $(addsuffix _clean,$(TARGET_DIRS)) -distclean: fpc_distclean $(addsuffix _distclean,$(TARGET_DIRS)) -cleanall: fpc_cleanall $(addsuffix _cleanall,$(TARGET_DIRS)) -info: fpc_info -.PHONY: all debug smart examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info + +##################################################################### +# Local Makefile +##################################################################### + ifneq ($(wildcard fpcmake.loc),) include fpcmake.loc endif + diff --git a/rtl/i386/rttip.inc b/rtl/i386/rttip.inc index aa3958b90b..ba3ab6f7d7 100644 --- a/rtl/i386/rttip.inc +++ b/rtl/i386/rttip.inc @@ -30,7 +30,6 @@ asm // decide what type it is movl TypeInfo,%ebx movb (%ebx),%al -// This is MANIFESTLY wrong subb $9,%al jz .LDoAnsiStringInit decb %al @@ -55,8 +54,8 @@ asm jmp .LExitInitialize // Interfaces .LDoInterfaceInit: - movl Data, %eax - movl $0,(%eax) + movl Data, %eax + movl $0,(%eax) jmp .LExitInitialize // Variants .LDoVariantInit: @@ -483,7 +482,10 @@ end; { $Log$ - Revision 1.11 2001-11-14 22:59:11 michael + Revision 1.12 2001-11-17 16:56:08 florian + * init and final code in genrtti.inc updated + + Revision 1.11 2001/11/14 22:59:11 michael + Initial variant support Revision 1.10 2001/08/01 15:00:10 jonas diff --git a/rtl/inc/dynarr.inc b/rtl/inc/dynarr.inc index 0246862dc0..fcb07dc58a 100644 --- a/rtl/inc/dynarr.inc +++ b/rtl/inc/dynarr.inc @@ -249,7 +249,10 @@ function fpc_dynarray_copy(var p : pointer;ti : pointer; { $Log$ - Revision 1.11 2001-09-27 08:59:13 jonas + Revision 1.12 2001-11-17 16:56:08 florian + * init and final code in genrtti.inc updated + + Revision 1.11 2001/09/27 08:59:13 jonas * fixed bug in dynarr_decr_ref I introduced with my previous fixes Revision 1.10 2001/09/26 14:07:25 jonas @@ -257,7 +260,7 @@ function fpc_dynarray_copy(var p : pointer;ti : pointer; dynamical arrays Revision 1.9 2001/08/19 21:02:01 florian - * fixed and added a lot of stuff to get the Jedi DX( headers + * fixed and added a lot of stuff to get the Jedi DX8 headers compiled Revision 1.8 2001/08/01 15:00:10 jonas diff --git a/rtl/inc/genrtti.inc b/rtl/inc/genrtti.inc index dc7f04ca37..24a03edb98 100644 --- a/rtl/inc/genrtti.inc +++ b/rtl/inc/genrtti.inc @@ -23,7 +23,7 @@ Procedure fpc_Initialize (Data,TypeInfo : pointer);saveregisters;[Public,Alias : already defined or not so define it locally to avoid problems PM } Type Pbyte = ^Byte; - + Var Temp : PByte; I : longint; Size,Count : longint; @@ -32,33 +32,36 @@ Var Temp : PByte; begin Temp:=PByte(TypeInfo); case temp^ of - tkAstring,tkWstring : PPchar(Data)^:=Nil; - tkArray : + tkAstring,tkWstring,tkInterface,tkDynArray: + PPchar(Data)^:=Nil; + tkArray: begin - temp:=Temp+1; - I:=temp^; - temp:=temp+(I+1); // skip name string; - Size:=PArrayRec(Temp)^.Size; // get element size - Count:=PArrayRec(Temp)^.Count; // get element Count - TInfo:=PArrayRec(Temp)^.Info; // Get element info - For I:=0 to Count-1 do - int_Initialize (Data+(I*size),TInfo); + inc(temp); + I:=temp^; + inc(temp,(I+1)); // skip name string; + Size:=PArrayRec(Temp)^.Size; // get element size + Count:=PArrayRec(Temp)^.Count; // get element Count + TInfo:=PArrayRec(Temp)^.Info; // Get element info + For I:=0 to Count-1 do + int_Initialize (Data+(I*size),TInfo); end; - tkrecord : + tkRecord,tkClass,tkObject: begin - Temp:=Temp+1; - I:=Temp^; - temp:=temp+(I+1); // skip name string; - Size:=PRecRec(Temp)^.Size; // get record size; not needed. - Count:=PRecRec(Temp)^.Count; // get element Count - For I:=1 to count Do - With PRecRec(Temp)^.elements[I] do - int_Initialize (Data+Offset,Info); + inc(Temp); + I:=Temp^; + inc(temp,I+1); // skip name string; + { if it isn't necessary, why should we load it ? FK + Size:=PRecRec(Temp)^.Size; // get record size; not needed. + } + Count:=PRecRec(Temp)^.Count; // get element Count + For I:=1 to count Do + With PRecRec(Temp)^.elements[I] do + int_Initialize (Data+Offset,Info); end; -{$ifdef HASVARIANTS} +{$ifdef HASVARIANT} tkVariant: variant_init(Variant(PVarData(Data)^)) -{$endif HASVARIANTS} +{$endif HASVARIANT} end; end; {$endif} @@ -79,33 +82,42 @@ Var Temp : PByte; begin Temp:=PByte(TypeInfo); case temp^ of - tkAstring,tkWstring : fpc_AnsiStr_Decr_Ref(Data); + tkAstring,tkWstring: + fpc_AnsiStr_Decr_Ref(Data); tkArray : begin - Temp:=Temp+1; - I:=temp^; - temp:=temp+(I+1); // skip name string; - Size:=PArrayRec(Temp)^.Size; // get element size - Count:=PArrayRec(Temp)^.Count; // get element Count - TInfo:=PArrayRec(Temp)^.Info; // Get element info - For I:=0 to Count-1 do - int_Finalize (Data+(I*size),TInfo); + inc(Temp); + I:=temp^; + inc(temp,I+1); // skip name string; + Size:=PArrayRec(Temp)^.Size; // get element size + Count:=PArrayRec(Temp)^.Count; // get element Count + TInfo:=PArrayRec(Temp)^.Info; // Get element info + For I:=0 to Count-1 do + int_Finalize (Data+(I*size),TInfo); end; - tkrecord : + tkRecord,tkObject,tkClass: begin - Temp:=Temp+1; - I:=Temp^; - temp:=temp+(I+1); // skip name string; - Size:=PRecRec(Temp)^.Size; // get record size; not needed. - Count:=PRecRec(Temp)^.Count; // get element Count - For I:=1 to count do - With PRecRec(Temp)^.elements[I] do - int_Finalize (Data+Offset,Info); + inc(Temp); + I:=Temp^; + inc(temp,I+1); // skip name string; + { if it isn't necessary, why should we load it? FK + Size:=PRecRec(Temp)^.Size; // get record size; not needed. + } + Count:=PRecRec(Temp)^.Count; // get element Count + For I:=1 to count do + With PRecRec(Temp)^.elements[I] do + int_Finalize (Data+Offset,Info); end; -{$ifdef HASVARIANTS} +{$ifdef HASINTF} + tkInterface: + Intf_Decr_Ref(Data); +{$endif HASINTF} + tkDynArray: + fpc_dynarray_decr_ref(Data,TypeInfo); +{$ifdef HASVARIANT} tkVariant: variant_clear(Variant(PVarData(Data)^)) -{$endif HASVARIANTS} +{$endif HASVARIANT} end; end; {$endif} @@ -177,19 +189,20 @@ begin Temp:=PByte(TypeInfo); case temp^ of { see AddRef for comment about below construct (JM) } - tkAstring,tkWstring : fpc_AnsiStr_Decr_Ref(PPointer(Data)^); - tkArray : + tkAstring,tkWstring: + fpc_AnsiStr_Decr_Ref(PPointer(Data)^); + tkArray: begin - Temp:=Temp+1; - I:=temp^; - temp:=temp+(I+1); // skip name string; - Size:=PArrayRec(Temp)^.Size; // get element size - Count:=PArrayRec(Temp)^.Count; // get element Count - TInfo:=PArrayRec(Temp)^.Info; // Get element info - For I:=0 to Count-1 do - fpc_DecRef (Data+(I*size),TInfo); + inc(Temp); + I:=temp^; + inc(temp,I+1); // skip name string; + Size:=PArrayRec(Temp)^.Size; // get element size + Count:=PArrayRec(Temp)^.Count; // get element Count + TInfo:=PArrayRec(Temp)^.Info; // Get element info + For I:=0 to Count-1 do + fpc_DecRef (Data+(I*size),TInfo); end; - tkrecord : + tkrecord: begin Temp:=Temp+1; I:=Temp^; @@ -200,6 +213,12 @@ begin With PRecRec(Temp)^.elements[I] do fpc_DecRef (Data+Offset,Info); end; + tkDynArray: + fpc_dynarray_decr_ref(Data,TypeInfo); +{$ifdef HASINTF} + tkInterface: + Intf_Decr_Ref(Data); +{$endif HASINTF} end; end; {$endif} @@ -216,7 +235,10 @@ procedure fpc_FinalizeArray(data,typeinfo : pointer;count,size : longint); [Publ { $Log$ - Revision 1.7 2001-11-17 10:29:48 florian + Revision 1.8 2001-11-17 16:56:08 florian + * init and final code in genrtti.inc updated + + Revision 1.7 2001/11/17 10:29:48 florian * make cycle for win32 fixed Revision 1.6 2001/11/14 22:59:11 michael diff --git a/rtl/inc/makefile.inc b/rtl/inc/makefile.inc index ce7dda1311..15a02efc32 100644 --- a/rtl/inc/makefile.inc +++ b/rtl/inc/makefile.inc @@ -6,8 +6,8 @@ SYSNAMES=systemh heaph mathh filerec textrec system real2str sstrings innr \ file typefile text rtti heap astrings objpas objpash except int64 \ - generic - + generic dynarr varianth variant genrtti + SYSINCNAMES=$(addsuffix .inc,$(SYSNAMES)) # Other unit names which can be used for all systems diff --git a/rtl/inc/rtti.inc b/rtl/inc/rtti.inc index 2f90b4d318..f9100484e0 100644 --- a/rtl/inc/rtti.inc +++ b/rtl/inc/rtti.inc @@ -40,7 +40,7 @@ Const tkBool = 18; tkInt64 = 19; tkQWord = 20; - tkDynArray = 21; + tkDynArray = 21; { A record is designed as follows : 1 : tkrecord @@ -92,7 +92,10 @@ TArrayRec = record { $Log$ - Revision 1.4 2001-04-23 18:25:45 peter + Revision 1.5 2001-11-17 16:56:08 florian + * init and final code in genrtti.inc updated + + Revision 1.4 2001/04/23 18:25:45 peter * m68k updates Revision 1.3 2000/10/21 18:20:17 florian @@ -104,4 +107,4 @@ TArrayRec = record Revision 1.2 2000/07/13 11:33:45 michael + removed logs -} \ No newline at end of file +}