fpc/base/makefile.fpc
1999-09-27 08:08:15 +00:00

1200 lines
26 KiB
Plaintext

#
# $Id$
# Copyright (c) 1999 by the Free Pascal Development Team
#
# Common makefile for Free Pascal
#
# See the file COPYING.FPC, included in this distribution,
# for details about the copyright.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
#####################################################################
# Autodetect OS (Linux or Dos or Windows NT)
# define inlinux when running under linux
# define inWinNT when running under WinNT
#####################################################################
# We want 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://tflily.fys.kuleuven.ac.be/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
#####################################################################
# Check for FPCDIR environment
#####################################################################
ifndef FPCDIR
nofpcdir:
@echo You need to set the FPCDIR environment variable to use
@echo this Makefile.
@echo Example: SET FPCDIR=/pp
@exit
endif
#####################################################################
# Targets
#####################################################################
# What compiler to use ?
ifndef PP
ifdef inOS2
PP=ppos2$(EXEEXT)
else
PP=ppc386$(EXEEXT)
endif
endif
# Target OS
ifndef OS_TARGET
OS_TARGET=$(shell $(PP) -iTO)
endif
# Source OS
ifndef OS_SOURCE
OS_SOURCE=$(shell $(PP) -iSO)
endif
# CPU
ifndef CPU
CPU=$(shell $(PP) -iTP)
endif
# FPC version
FPC_VERSION=$(shell $(PP) -iV)
# Options
ifndef OPT
OPT=
endif
# assembler, redefine it if cross compiling
ifndef AS
AS=as
endif
# linker, but probably not used
ifndef LD
LD=ld
endif
# 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
#####################################################################
# Shell commands
#####################################################################
# To copy pograms
ifndef COPY
COPY=cp -fp
endif
# To move pograms
ifndef MOVE
MOVE=mv -f
endif
# Check delete program
ifndef DEL
DEL=rm -f
endif
# Check deltree program
ifndef DELTREE
DELTREE=rm -rf
endif
# To install files
ifndef INSTALL
ifdef inlinux
INSTALL=install -m 644
else
INSTALL=$(COPY)
# ginstall has the strange thing to stubify all .o files !
#INSTALL=ginstall -m 644
endif
endif
# To install programs
ifndef INSTALLEXE
ifdef inlinux
INSTALLEXE=install -m 755
else
INSTALLEXE=$(COPY)
# ginstall has the strange thing to stubify all .o files !
#INSTALLEXE=ginstall -m 755
endif
endif
# To make a directory.
ifndef MKDIR
ifdef inlinux
MKDIR=install -m 755 -d
else
MKDIR=ginstall -m 755 -d
endif
endif
#####################################################################
# Default Tools
#####################################################################
# ppas.bat / ppas.sh
ifdef inlinux
PPAS=ppas.sh
else
ifdef inOS2
PPAS=ppas.cmd
else
PPAS=ppas.bat
endif
endif
# The path which is search separated by spaces
ifdef inlinux
SEARCHPATH=$(subst :, ,$(PATH))
else
SEARCHPATH=$(subst ;, ,$(PATH))
endif
# ldconfig to rebuild .so cache
ifdef inlinux
LDCONFIG=ldconfig
else
LDCONFIG=
endif
# Where is the ppumove program ?
ifndef PPUMOVE
PPUMOVE=ppumove
endif
# diff
ifndef DIFF
DIFF=$(strip $(wildcard $(addsuffix /diff$(EXEEXT),$(SEARCHPATH))))
ifeq ($(DIFF),)
DIFF=
else
export DIFF:=$(firstword $(DIFF))
endif
endif
# cmp
ifndef CMP
CMP=$(strip $(wildcard $(addsuffix /cmp$(EXEEXT),$(SEARCHPATH))))
ifeq ($(CMP),)
CMP=
else
export CMP:=$(firstword $(CMP))
endif
endif
# echo
ifndef ECHO
ECHO=$(strip $(wildcard $(addsuffix /echo$(EXEEXT),$(SEARCHPATH))))
ifeq ($(ECHO),)
export ECHO:=echo
else
export ECHO:=$(firstword $(ECHO))
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
# Sed
ifndef SED
SED=$(strip $(wildcard $(addsuffix /sed$(EXEEXT),$(SEARCHPATH))))
ifeq ($(SED),)
SED=
else
export SED:=$(firstword $(SED))
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 ($(UPX),)
UPXPROG=
else
export UPXPROG:=$(firstword $(UPX))
endif
else
UPXPROG=
endif
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
#####################################################################
# Default Directories
#####################################################################
# Base dir
ifdef PWD
BASEDIR:=$(shell $(PWD))
else
BASEDIR=.
endif
# set the directory to the rtl base
ifndef RTLDIR
ifdef RTL
RTLDIR:=$(RTL)/$(OS_TARGET)
else
RTLDIR:=$(FPCDIR)/rtl/$(OS_TARGET)
endif
endif
# specify where units are.
ifndef UNITDIR
ifdef UNITS
UNITDIR=$(UNITS)/$(OS_TARGET)
else
UNITDIR=$(FPCDIR)/units/$(OS_TARGET)
endif
endif
ifeq ($(strip $(wildcard $(UNITDIR)/*)),)
UNITDIR=
endif
# set the prefix directory where to install everything
ifndef PREFIXINSTALLDIR
ifdef inlinux
PREFIXINSTALLDIR=/usr
else
PREFIXINSTALLDIR=/pp
endif
endif
# set the base directory where to install everything
ifndef BASEINSTALLDIR
ifdef inlinux
BASEINSTALLDIR=$(PREFIXINSTALLDIR)/lib/fpc/$(FPC_VERSION)
else
BASEINSTALLDIR=$(PREFIXINSTALLDIR)
endif
endif
# On linux, try to find where libgcc.a is.
ifdef inlinux
ifndef GCCLIBDIR
GCCLIBDIR:=$(shell dirname `(gcc -v 2>&1)| head -n 1| awk '{ print $$4 } '`)
endif
ifndef OTHERLIBDIR
OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }')
endif
endif
#####################################################################
# Install Directories based on BASEINSTALLDIR
#####################################################################
# 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
BININSTALLDIR=$(PREFIXINSTALLDIR)/bin
else
BININSTALLDIR=$(BASEINSTALLDIR)/bin/$(OS_TARGET)
endif
endif
# Where the .msg files will be stored
ifndef MSGINSTALLDIR
MSGINSTALLDIR=$(BASEINSTALLDIR)/msg
endif
# Where the .msg files will be stored
ifndef SOURCEINSTALLDIR
SOURCEINSTALLDIR=$(BASEINSTALLDIR)/source
endif
# Where the doc files will be stored
ifndef DOCINSTALLDIR
ifdef inlinux
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
endif
# set the directory where to install the units.
ifndef UNITINSTALLDIR
UNITINSTALLDIR=$(BASEINSTALLDIR)/$(UNITPREFIX)/$(OS_TARGET)
endif
# set the directory where to install the units.
ifndef STATIC_UNITINSTALLDIR
STATIC_UNITINSTALLDIR=$(UNITINSTALLDIR)/static
endif
# set the directory where to install the units.
ifndef SHARED_UNITINSTALLDIR
SHARED_UNITINSTALLDIR=$(UNITINSTALLDIR)/shared
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 CPU define
override PPOPTDEF:=$(OPTDEF) -d$(CPU)
# Load commandline OPT and add target and unit dir to be sure
override PPOPT:=-T$(OS_TARGET) $(NEEDOPT) $(OPT)
# RTL first and then Unit dir (a unit can override RTLunit)
ifdef RTLDIR
override PPOPT+=$(addprefix -Fu,$(RTLDIR))
endif
ifdef UNITDIR
override PPOPT+=$(addprefix -Fu,$(UNITDIR))
endif
ifdef NEEDUNITDIR
override PPOPT+=$(addprefix -Fu,$(NEEDUNITDIR))
endif
# Library dirs
ifdef LIBDIR
override PPOPT+=$(addprefix -Fl,$(LIBDIR))
endif
ifdef NEEDLIBDIR
override PPOPT+=$(addprefix -Fl,$(NEEDLIBDIR))
endif
# Add GCC lib path if asked
ifdef NEEDGCCLIB
ifdef GCCLIBDIR
override PPOPT+=-Fl$(GCCLIBDIR)
endif
endif
# Add Other dirs path if asked
ifdef NEEDOTHERLIB
ifdef OTHERLIBDIR
override PPOPT+=$(addprefix -Fl,$(OTHERLIBDIR))
endif
endif
# Object dirs
ifdef OBJDIR
override PPOPT+=$(addprefix -Fo,$(OBJDIR))
endif
ifdef NEEDOBJDIR
override PPOPT+=$(addprefix -Fo,$(NEEDOBJDIR))
endif
# Add include dirs INC and PROCINC and OSINC
ifdef INC
override PPOPT+=$(addprefix -Fi,$(INC))
endif
ifdef PROCINC
override PPOPT+=$(addprefix -Fi,$(PROCINC))
endif
ifdef OSINC
override PPOPT+=$(addprefix -Fi,$(OSINC))
endif
# Target dirs
ifdef TARGETDIR
override PPOPT+=-FE$(TARGETDIR)
endif
ifdef UNITTARGETDIR
override PPOPT+=-FU$(UNITTARGETDIR)
endif
# Smartlinking
ifeq ($(SMARTLINK),YES)
override PPOPT+=-CX
endif
# Add defines from PPOPTDEF to PPOPT
override PPOPT:=$(PPOPT) $(PPOPTDEF)
# Was a config file specified ?
ifdef CFGFILE
override PPOPT:=$(PPOPT) @$(CFGFILE)
endif
override COMPILER=$(PP) $(PPOPT)
#####################################################################
# 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
# also call ppas if with command option -s
ifeq (,$(findstring -s ,$(COMPILER)))
EXECPPAS=
else
EXECPPAS=@$(PPAS)
endif
ifdef DATE
DATESTR=$(shell $(DATE) +%Y%m%d)
else
DATESTR=
endif
#####################################################################
# Export commandline values, so nesting use the same values
#####################################################################
# Makefile
export FPCDIR FPCMAKE
# Compiler info
export FPC_VERSION OS_SOURCE OS_TARGET CPU
export OPT OPTDEF PP RELEASE VERBOSE SMARTLINK
# Installation
export PREFIXINSTALLDIR PACKAGESUFFIX
# Directories
export GCCLIBDIR OTHERLIBDIR
#####################################################################
# General compile rules
#####################################################################
# 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))
.PHONY : fpc_all fpc_units fpc_loaders fpc_exes \
fpc_staticlib fpc_sharedlib \
fpc_clean fpc_libsclean fpc_cleanall \
fpc_install fpc_staticinstall fpc_sharedinstall fpc_libinstall \
fpc_info fpc_cfginfo fpc_objectinfo fpc_installinfo fpc_filesinfo\
fpc_dirinfo
.SUFFIXES : $(EXEEXT) $(PPUEXT) $(OEXT) .pas .pp
#####################################################################
# Default
#####################################################################
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
#####################################################################
# Default sharedlib units are all unit objects
ifndef SHAREDLIBUNITOBJECTS
SHAREDLIBUNITOBJECTS=$(UNITOBJECTS)
endif
fpc_staticlib:
$(MAKE) libsclean
$(MAKE) all SMARTLINK=YES
fpc_sharedlib: all
ifdef inlinux
ifndef LIBNAME
@$(ECHO) LIBNAME not set
else
$(PPUMOVE) $(SHAREDLIBUNITOBJECTS) -o$(LIBNAME)
endif
else
@$(ECHO) Shared Libraries not supported
endif
#####################################################################
# Install rules
#####################################################################
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))))
endif
fpc_install : all
$(MAKE) fpc_install2
fpc_install2 :
# Create UnitInstallFiles
ifdef EXTRAINSTALLUNITS
override EXTRAINSTALLFILES=$(wildcard $(addsuffix $(OEXT),$(EXTRAINSTALLUNITS)) $(addsuffix $(STATICLIBEXT),$(EXTRAINSTALLUNITS)) $(addsuffix $(PPUEXT),$(EXTRAINSTALLUNITS)))
endif
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 UNITOBJECTS
$(MKDIR) $(UNITINSTALLDIR)
$(INSTALL) $(wildcard $(UNITPPUFILES) $(UNITOFILES) $(UNITAFILES)) $(UNITINSTALLDIR)
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
# Target for the sharedlib install which is not avail for all targets
ifdef inlinux
SHAREDINSTALL=sharedinstall
else
SHAREDINSTALL=
endif
fpc_staticinstall: staticlib
$(MKDIR) $(STATIC_UNITINSTALLDIR)
$(INSTALL) $(UNITINSTALLFILES) $(STATIC_UNITINSTALLDIR)
$(MKDIR) $(STATIC_LIBINSTALLDIR)
$(INSTALLEXE) *$(STATICLIBEXT) $(STATIC_LIBINSTALLDIR)
fpc_sharedinstall: sharedlib
$(MKDIR) $(SHARED_UNITINSTALLDIR)
ifdef UNITINSTALLFILES
$(INSTALL) $(UNITINSTALLFILES) $(SHARED_UNITINSTALLDIR)
else
$(INSTALL) $(UNITOFILES) $(SHARED_UNITINSTALLDIR)
endif
$(MKDIR) $(SHARED_LIBINSTALLDIR)
$(INSTALLEXE) *$(SHAREDLIBEXT) $(SHARED_LIBINSTALLDIR)
fpc_libinstall: staticinstall $(SHAREDINSTALL)
#####################################################################
# Zip
#####################################################################
# 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
#####################################################################
fpc_clean:
make fpc_clean2
fpc_clean2:
ifdef EXEOBJECTS
-$(DEL) $(EXEFILES) $(EXEOFILES)
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)
endif
-$(DEL) *$(OEXT) *$(PPUEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
-$(DELTREE) *$(SMARTEXT)
#####################################################################
# Depend rules
#####################################################################
fpc_depend:
makedep $(UNITOBJECTS)
#####################################################################
# Info rules
#####################################################################
fpc_info: fpc_cfginfo fpc_objectinfo fpc_toolsinfo fpc_installinfo\
fpc_dirinfo
fpc_cfginfo:
@$(ECHO)
@$(ECHO) == Configuration info ==
@$(ECHO)
@$(ECHO) FPCDir.... $(FPCDIR)
@$(ECHO) FPCMake... $(FPCMAKE)
@$(ECHO)
@$(ECHO) Version... $(FPC_VERSION)
@$(ECHO) CPU....... $(CPU)
@$(ECHO) Source.... $(OS_SOURCE)
@$(ECHO) Target.... $(OS_TARGET)
@$(ECHO)
fpc_dirinfo:
ifdef inlinux
@$(ECHO)
@$(ECHO) == Directory info ==
@$(ECHO)
ifdef NEEDGCCLIB
@$(ECHO) GCC library is needed.
endif
ifdef NEEDOTHERLIB
@$(ECHO) Other library is needed.
endif
@$(ECHO) Basedir......... $(BASEDIR)
@$(ECHO)
@$(ECHO) GCC library..... $(GCCLIBDIR)
@$(ECHO) Other library... $(OTHERLIBDIR)
@$(ECHO)
endif
fpc_toolsinfo:
@$(ECHO)
@$(ECHO) == Tools info ==
@$(ECHO)
@$(ECHO) Pwd....... $(PWD)
@$(ECHO) Echo...... $(ECHO)
ifdef SED
@$(ECHO) Sed....... $(SED)
endif
ifdef DATE
@$(ECHO) Date...... $(DATE)
endif
ifdef DIFF
@$(ECHO) Diff...... $(DIFF)
endif
ifdef CMP
@$(ECHO) Cmp....... $(CMP)
endif
ifdef UPXPROG
@$(ECHO) Upx....... $(UPXPROG)
endif
ifdef ZIPPROG
@$(ECHO) Zip....... $(ZIPPROG)
endif
@$(ECHO)
fpc_objectinfo:
@$(ECHO)
@$(ECHO) == Object info ==
@$(ECHO)
@$(ECHO) LoaderObjects..... $(LOADEROBJECTS)
@$(ECHO) UnitObjects....... $(UNITOBJECTS)
@$(ECHO) ExeObjects........ $(EXEOBJECTS)
@$(ECHO)
@$(ECHO) ExtraCleanUnits... $(EXTRACLEANUNITS)
@$(ECHO) ExtraInstallUnits. $(EXTRAINSTALLUNITS)
@$(ECHO) ExtraInstallUnits. $(EXTRAINSTALLFILES)
@$(ECHO)
@$(ECHO) == Unit info ==
@$(ECHO)
@$(ECHO) UnitInstallFiles. $(UNITINSTALLFILES)
@$(ECHO) UnitCleanFiles... $(UNITCLEANFILES)
@$(ECHO)
fpc_installinfo:
@$(ECHO)
@$(ECHO) == Install info ==
@$(ECHO)
@$(ECHO) DateStr.............. $(DATESTR)
@$(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) DocInstallDir........ $(DOCINSTALLDIR)
@$(ECHO)
# try to get the files in the currentdir
PASFILES:=$(wildcard *.pas)
PPFILES:=$(wildcard *.pp)
INCFILES:=$(wildcard *.inc)
MSGFILES:=$(wildcard *.msg)
ASFILES:=$(wildcard *.as)
fpc_filesinfo:
@$(ECHO)
@$(ECHO) == Files info ==
@$(ECHO)
ifdef PASFILES
@$(ECHO) Pas files are $(PASFILES)
endif
ifdef PPFILES
@$(ECHO) PP files are $(PPFILES)
endif
ifdef INCFILES
@$(ECHO) Inc files are $(INCFILES)
endif
ifdef MSGFILES
@$(ECHO) Msg files are $(MSGFILES)
endif
ifdef ASFILES
@$(ECHO) As files are $(ASFILES)
endif
#
# $Log$
# Revision 1.47 1999-09-27 08:08:15 peter
# * fixed smartlinking switch
#
# Revision 1.46 1999/08/30 12:07:43 pierre
# * use unitdir only if existing and non empty
#
# Revision 1.45 1999/08/19 06:50:25 michael
# + Changes from Sebastian Gunther
#
# Revision 1.44 1999/08/13 15:35:37 peter
# * UPX -> UPXPROG, because upx 0.80+ use the environment itself
#
# Revision 1.43 1999/08/09 22:19:46 peter
# * classes vmt changed to only positive addresses
# * sharedlib creation is working
#
# Revision 1.42 1999/07/22 16:13:32 peter
# * install,clean fixes
#
# Revision 1.41 1999/07/21 14:21:00 peter
# * install works again
#
# Revision 1.40 1999/07/17 14:22:54 peter
# * ECHO is now again without @
#
# Revision 1.39 1999/07/17 11:30:23 peter
# * merged
#
# Revision 1.38 1999/07/16 13:45:24 peter
# * 0.99.12b updates
# * merges
#
# Revision 1.37 1999/07/05 21:37:35 peter
# * display extraunits in info
#
# Revision 1.36 1999/07/01 18:20:01 jonas
# * changed RELEASE=1 processor option from -Op2 to -Op3
#
# Revision 1.35 1999/06/18 11:03:08 peter
# * merged
#
# Revision 1.34 1999/06/18 10:11:18 peter
# * merged
#
# Revision 1.33 1999/06/13 22:43:23 peter
# * merged from fixes
#
# Revision 1.32 1999/06/11 13:31:14 hajny
# * fixes for OS/2
#
# Revision 1.31.2.5 1999/07/17 11:29:02 peter
# * more extrainstallunits,extracleanunits updates
#
# Revision 1.31.2.4 1999/07/16 13:40:56 peter
# + extrainstallunits,extracleanunits
#
# Revision 1.31.2.3 1999/06/18 10:55:31 peter
# * version fixes
# * EXTRAUNITS to set extra units that are build and needs to be cleaned
#
# Revision 1.31.2.2 1999/06/18 10:07:27 peter
# * rtl/linux and units/linux also for linux installs
#
# Revision 1.31.2.1 1999/06/13 22:36:38 peter
# * install msg files in msg/ instead of bin for not linux
#
# Revision 1.31 1999/06/10 15:02:08 peter
# * last fixes for 0.99.12 release
#
# Revision 1.30 1999/06/03 09:36:31 peter
# * first things for sharedlib to work again
#
# Revision 1.29 1999/06/01 13:27:24 peter
# * updates for linux
#
# Revision 1.28 1999/05/30 11:33:04 peter
# * releasever removed, fpc_version will be used
#
# Revision 1.27 1999/05/16 02:37:30 peter
# + fpc_showinstallfiles to show which files will be added to the system
#
# Revision 1.26 1999/05/14 22:46:21 peter
# * patch for comments in ld.so.conf
#
# Revision 1.25 1999/05/12 16:17:07 peter
# + utils_X targets
# * missing export of prefixinstalldir
#
# Revision 1.24 1999/05/11 00:48:12 peter
# * fixed some typos
#
# Revision 1.23 1999/05/10 15:18:43 peter
# * NEEDOTHERLIB define to load ld.so.conf for linux
#
# Revision 1.22 1999/05/04 23:20:42 pierre
# + FPC_VERSION (with shell $(PP) -iV)
#
# Revision 1.21 1999/05/03 22:38:10 peter
# * typo with -TP which should be -iTP
#
# Revision 1.20 1999/05/03 22:29:04 peter
# * os_source,os_target depends now on the compiler
# * cpu depends on the compiler
# * datestr y2k proof
#
# Revision 1.19 1999/05/03 18:04:58 peter
# + sourceinstalldir
#
# Revision 1.18 1999/04/29 15:52:38 peter
# * better gcclib dir detection
#
# Revision 1.17 1999/04/20 12:33:32 michael
# + Fixed GCCLIB detection. Added fpc_dirinfo target
#
# Revision 1.16 1999/04/20 12:07:49 michael
# Added autodetect of gcc lib for linux
#
# Revision 1.15 1999/04/16 20:12:35 michael
# + install target now correctly takes the BASEINSTALLDIR on linux
#
# Revision 1.14 1999/04/08 10:16:17 peter
# * zipinstall for linux with .tar.gz
#
# Revision 1.13 1999/04/01 22:52:28 peter
# * don't override pasext if set
#
# Revision 1.12 1999/03/29 16:04:58 peter
# * place -T as the first parameter on the commandline so a OPT=-A can
# overwrite it
#
# Revision 1.11 1999/03/16 00:46:55 peter
# * makefile.fpc targets start with fpc_
# * small updates for install scripts
#
# Revision 1.10 1999/03/12 21:01:30 michael
# + Changed clean and libsclean to fpc_target
#
# Revision 1.9 1999/03/11 17:54:00 peter
# * better check for makefile.fpc
# * check if cmp exists
#
# Revision 1.8 1999/03/09 01:35:47 peter
# * makefile.fpc updates and defaultfpcdir var
#
#