# # Makefile.fpc for Free Pascal Source Tree # [package] name=fpc version=1.0.5 [target] dirs=compiler rtl utils fcl fv packages ide [install] fpcpackage=y [default] fpcdir=. rule=help [prerules] # make versions < 3.77 (OS2 version) are buggy ifndef inOS2 override FPCDIR:=$(BASEDIR) export FPCDIR endif # New ppc386 (or ppc68k if on m68k machine !) ifndef PPNEW ifeq ($(CPU_TARGET),m68k) PPSUF=68k endif ifeq ($(CPU_TARGET),i386) PPSUF=386 endif ifeq ($(CPU_TARGET),powerpc) PPSUF=ppc endif ifeq ($(CPU_TARGET),alpha) PPSUF=axp endif ifneq ($(OS_TARGET),$(OS_SOURCE)) PPPRE=ppcross else ifneq ($(CPU_TARGET),$(CPU_SOURCE)) PPPRE=ppcross else PPPRE=ppc endif endif PPNEW=$(BASEDIR)/compiler/$(PPPRE)$(PPSUF)$(SRCEXEEXT) endif # Check if there is already a ppc386 binary in compiler, then # we will use that version for target and version info # # This is not possible as you can't install a specific target # after a first target has been compiled # #ifneq ($(wildcard $(PPNEW)),) #override FPC_VERSION:=$(shell $(PPNEW) -iV) #override OS_TARGET:=$(shell $(PPNEW) -iTO) #override CPU_TARGET:=$(shell $(PPNEW) -iTP) #export FPC_VERSION OS_TARGET CPU_TARGET #endif # Check if install/ subdir is available ifneq ($(wildcard install),) CVSINSTALL=install else CVSINSTALL=. endif # Install target ifdef SNAPSHOT INSTALLTARGET=install else INSTALLTARGET=distinstall endif # All target ifdef SNAPSHOT ALLTARGET=all else ifndef ALLTARGET ifeq ($(OS_TARGET),win32) ALLTARGET=smart else ifeq ($(OS_TARGET),go32v2) ALLTARGET=smart else ifeq ($(OS_TARGET),linux) ALLTARGET=smart else ifeq ($(OS_TARGET),freebsd) ALLTARGET=smart else ALLTARGET=all endif endif endif endif endif endif # Stop with an error? ifdef SNAPSHOT NOSTOP=- else NOSTOP= endif # Prefix for units ifeq ($(OS_TARGET),linux) PKGPRE=units else ifeq ($(OS_TARGET),freebsd) PKGPRE=units else PKGPRE=u endif endif # Always compile for release override RELEASE=1 export RELEASE # We want to have the resulting .zips in the current dir ifndef DIST_DESTDIR export DIST_DESTDIR:=$(BASEDIR) endif # Temporary path to pack a file BASEPACKDIR=$(BASEDIR)/basepack # Newly created fpcmake FPCMAKENEW=$(BASEDIR)/utils/fpcm/fpcmake$(EXEEXT) # Build/install options BUILDOPTS=FPC=$(PPNEW) RELEASE=1 INSTALLOPTS=FPC=$(PPNEW) ZIPDESTDIR=$(BASEDIR) FPCMAKE=$(FPCMAKENEW) # Compile also IDE (check for ide and fv dir) ifneq ($(wildcard ide),) ifneq ($(wildcard fv),) ifeq ($(OS_TARGET),go32v2) IDE=1 endif ifeq ($(OS_TARGET),win32) IDE=1 endif ifeq ($(OS_TARGET),linux) IDE=1 endif endif endif [rules] # These values can change unexport FPC_VERSION OS_SOURCE # Only process directories that really exists override TARGET_DIRS:=$(wildcard $(TARGET_DIRS)) ##################################################################### # Main targets ##################################################################### .PHONY: help checkfpcdir help: @$(ECHO) @$(ECHO) Directory targets: @$(ECHO) @$(ECHO) $(TARGET_DIRS) @$(ECHO) @$(ECHO) Packing targets are: @$(ECHO) @$(ECHO) go32v2zip,win32zip,linuxzip,freebsdzip,sourcezip,os2zip @$(ECHO) @exit ##################################################################### # Dependencies ##################################################################### ####################################### # Compiler ####################################### .PHONY: compiler_cycle compiler_cycle: $(MAKE) -C compiler cycle ####################################### # Install targets ####################################### demo_install: $(MAKE) -C $(CVSINSTALL)/demo sourceinstall man_install: $(MAKE) -C $(CVSINSTALL)/man installman doc_install: $(MAKE) -C $(CVSINSTALL)/doc installdoc ####################################### # Packaging targets ####################################### optzips: optcompinstall optcompzip optcompinstall: $(MAKE) compiler_cycle OPT=-dNEWOPTIMIZATIONS $(MAKE) compiler_install $(MAKE) rtl_install optcompzip: $(MAKE) fpc_zipinstall PACKAGENAME=optcomp ZIPTARGET=optcompinstall ########################################################################## # Install ########################################################################## .PHONY: installer installersrc INSTALLERBUILDDIR=fpinst installer: $(COPYTREE) $(CVSINSTALL)/fpinst $(INSTALLERBUILDDIR) $(MAKE) -C $(INSTALLERBUILDDIR) all RELEASE=1 $(MOVE) $(INSTALLERBUILDDIR)/install.exe . ifdef UPXPROG -$(UPXPROG) install.exe endif $(DELTREE) $(INSTALLERBUILDDIR) installersrc: $(COPYTREE) $(CVSINSTALL)/fpinst $(INSTALLERBUILDDIR) $(MAKE) -C $(INSTALLERBUILDDIR) zipsourceinstall $(DELTREE) $(INSTALLERBUILDDIR) ########################################################################## # Packaging ########################################################################## .PHONY: all clean distclean build install installbase zipinstall zipinstallbase zipinstallfcl \ zipinstallpackages all: build clean: $(addsuffix _distclean,$(TARGET_DIRS)) $(DEL) build-stamp.$(OS_TARGET) distclean: clean build: build-stamp.$(OS_TARGET) build-stamp.$(OS_TARGET): # create new compiler $(MAKE) compiler_cycle # clean $(MAKE) rtl_clean $(MAKE) packages_clean $(MAKE) fcl_clean $(MAKE) utils_clean ifdef IDE $(MAKE) fv_clean $(MAKE) ide_clean endif # build everything $(MAKE) rtl_$(ALLTARGET) $(BUILDOPTS) $(MAKE) packages_$(ALLTARGET) $(BUILDOPTS) $(MAKE) fcl_$(ALLTARGET) $(BUILDOPTS) $(MAKE) utils_all $(BUILDOPTS) ifdef IDE $(MAKE) ide_all $(BUILDOPTS) endif $(ECHOREDIR) Build > build-stamp.$(OS_TARGET) installbase: build-stamp.$(OS_TARGET) # create dirs $(MKDIR) $(INSTALL_BASEDIR) $(MKDIR) $(INSTALL_DOCDIR) $(MKDIR) $(INSTALL_BINDIR) ifndef SNAPSHOT # readme & whatsnew and docs $(COPY) $(CVSINSTALL)/doc/*.txt $(CVSINSTALL)/doc/copying* $(CVSINSTALL)/doc/faq.* $(INSTALL_DOCDIR) # bingo32 (cwsdpmi,wmemu387.dxe) ifeq ($(OS_TARGET),go32v2) $(COPY) $(CVSINSTALL)/bingo32/* $(INSTALL_BINDIR) endif # binw32 (cygwin1.dll) ifeq ($(OS_TARGET),win32) $(COPY) $(CVSINSTALL)/binw32/* $(INSTALL_BINDIR) endif # manpages for linux ifeq ($(OS_TARGET),linux) $(MAKE) -C $(CVSINSTALL)/man installman endif ifeq ($(OS_TARGET),freebsd) $(MAKE) -C $(CVSINSTALL)/man installman endif endif # install generated things $(MAKE) compiler_$(INSTALLTARGET) $(INSTALLOPTS) $(MAKE) rtl_$(INSTALLTARGET) $(INSTALLOPTS) install: build-stamp.$(OS_TARGET) $(MAKE) installbase $(INSTALLOPTS) $(MAKE) packages_$(INSTALLTARGET) $(INSTALLOPTS) $(MAKE) fcl_$(INSTALLTARGET) $(INSTALLOPTS) $(MAKE) utils_$(INSTALLTARGET) $(INSTALLOPTS) ifdef IDE $(NOSTOP)$(MAKE) ide_$(INSTALLTARGET) $(BUILDOPTS) endif zipinstall: build-stamp.$(OS_TARGET) $(MAKE) fpc_zipinstall ZIPTARGET=installbase ZIPNAME=base$(ZIPSUFFIX) $(INSTALLOPTS) $(MAKE) packages_zip$(INSTALLTARGET) $(INSTALLOPTS) ZIPPREFIX=$(PKGPRE) $(MAKE) fcl_zip$(INSTALLTARGET) $(INSTALLOPTS) ZIPPREFIX=$(PKGPRE) $(MAKE) utils_zip$(INSTALLTARGET) $(INSTALLOPTS) ZIPNAME=util$(ZIPSUFFIX) ifdef IDE $(NOSTOP)$(MAKE) ide_zip$(INSTALLTARGET) $(INSTALLOPTS) ZIPNAME=ide$(ZIPSUFFIX) endif ########################################################################## # Docs ########################################################################## .PHONY: docspdf docs docsrcinstall docsrc docspdf: $(MAKE) -C docs pdfinstall docs: $(MAKE) fpc_zipinstall ZIPTARGET=docspdf ZIPNAME=docs docsrcinstall: $(MAKE) -C docs clean $(MKDIR) $(INSTALL_SOURCEDIR) $(COPYTREE) docs $(INSTALL_SOURCEDIR) docsrc: $(MAKE) fpc_zipinstall ZIPTARGET=docsrcinstall ZIPNAME=docsrc ########################################################################## # Demos ########################################################################## .PHONY: demozip demozip: $(MAKE) -C $(CVSINSTALL)/demo zipsourceinstall ZIPNAME=demo ########################################################################## # Source targets ########################################################################## .PHONY: sourcebase sourcezip sourcebase: # base Makefiles needed for sources $(MKDIR) $(INSTALL_SOURCEDIR) $(MKDIR) $(INSTALL_SOURCEDIR)/rtl $(MKDIR) $(INSTALL_SOURCEDIR)/packages $(COPY) Makefile* $(INSTALL_SOURCEDIR) $(COPY) rtl/Makefile* $(INSTALL_SOURCEDIR)/rtl $(COPY) packages/Makefile* $(INSTALL_SOURCEDIR)/packages sourcezip: distclean $(MAKE) fpc_zipinstall ZIPTARGET=sourcebase ZIPNAME=basesrc $(MAKE) compiler_zipsourceinstall $(MAKE) rtl_zipsourceinstall $(MAKE) packages_zipsourceinstall $(MAKE) fcl_zipsourceinstall $(MAKE) utils_zipsourceinstall $(MAKE) ide_zipsourceinstall # $(MAKE) installersrc # $(MAKE) docsrc ########################################################################## # OS targets ########################################################################## .PHONY: go32v2 win32 linux freebsd os2 go32v2zip win32zip linuxzip freebsdzip os2zip go32v2: checkfpcdir $(MAKE) install OS_TARGET=go32v2 win32: checkfpcdir $(MAKE) install OS_TARGET=win32 linux: checkfpcdir $(MAKE) install OS_TARGET=linux freebsd: checkfpcdir $(MAKE) install OS_TARGET=freebsd os2: checkfpcdir $(MAKE) install OS_TARGET=os2 go32v2zip: checkfpcdir $(MAKE) zipinstall OS_TARGET=go32v2 win32zip: checkfpcdir $(MAKE) zipinstall OS_TARGET=win32 linuxzip: checkfpcdir $(MAKE) zipinstall OS_TARGET=linux freebsdzip : checkfpcdir $(MAKE) zipinstall OS_TARGET=freebsd beoszip : checkfpcdir $(MAKE) zipinstall OS_TARGET=beos USEZIP=1 os2zip: checkfpcdir $(MAKE) zipinstall OS_TARGET=os2 ########################################################################## # Debian ########################################################################## ifdef inUnix ifneq ($(wildcard $(CVSINSTALL)/debian/changelog),) .PHONY: debcopy deb DEBPACKAGEVERSION:=$(shell head -n 1 $(CVSINSTALL)/debian/changelog | awk '{ print $$2 }' | tr -d '[()]') DEBFPCVERSION:=$(shell echo $(DEBPACKAGEVERSION) | awk -F '-' '{ print $$1 }') DEBSRCDIR:=/usr/src/fpc-$(DEBFPCVERSION) debcopy: distclean rm -rf $(DEBSRCDIR) install -d $(DEBSRCDIR) $(COPYTREE) compiler $(DEBSRCDIR) $(COPYTREE) rtl $(DEBSRCDIR) $(COPYTREE) fcl $(DEBSRCDIR) $(COPYTREE) packages $(DEBSRCDIR) $(COPYTREE) utils $(DEBSRCDIR) $(COPYTREE) demo $(DEBSRCDIR) $(COPYTREE) logs $(DEBSRCDIR) $(COPYTREE) docs $(DEBSRCDIR) $(COPYTREE) Makefile* $(DEBSRCDIR) $(COPYTREE) $(CVSINSTALL)/debian $(DEBSRCDIR) $(COPYTREE) $(CVSINSTALL)/man $(DEBSRCDIR) $(COPYTREE) $(CVSINSTALL)/doc $(DEBSRCDIR) find $(DEBSRCDIR) -name 'CVS*' | xargs -n1 rm -rf chmod 755 $(DEBSRCDIR)/debian/rules deb: checkfpcdir debcopy cd $(DEBSRCDIR) ; debian/rules binary endif # changelog found endif ########################################################################## # RPM ########################################################################## ifdef inUnix ifneq ($(wildcard $(CVSINSTALL)/fpc.spec),) .PHONY: rpmcopy rpm RPMFPCVERSION:=$(shell grep 'define fpcversion' $(CVSINSTALL)/fpc.spec | awk '{ print $$2 }') REDHATDIR=/usr/src/redhat RPMSOURCESDIR:=$(REDHATDIR)/SOURCES RPMSPECDIR:=$(REDHATDIR)/SPECS RPMSRCDIR:=$(RPMSOURCESDIR)/fpc DOCSRCDIR:=$(RPMSOURCESDIR)/fpcdoc rpmcopy: distclean install -d $(REDHATDIR) install -d $(RPMSPECDIR) install -d $(RPMSOURCESDIR) # fpc.rpm rm -rf $(RPMSRCDIR) cp $(CVSINSTALL)/fpc.spec $(RPMSPECDIR)/fpc-$(RPMFPCVERSION).spec install -d $(RPMSRCDIR) $(COPYTREE) compiler $(RPMSRCDIR) $(COPYTREE) rtl $(RPMSRCDIR) $(COPYTREE) fcl $(RPMSRCDIR) $(COPYTREE) packages $(RPMSRCDIR) $(COPYTREE) utils $(RPMSRCDIR) $(COPYTREE) demo $(RPMSRCDIR) $(COPYTREE) logs $(RPMSRCDIR) $(COPYTREE) Makefile* $(RPMSRCDIR) $(COPYTREE) $(CVSINSTALL)/man $(RPMSRCDIR) $(COPYTREE) $(CVSINSTALL)/doc $(RPMSRCDIR) find $(RPMSRCDIR) -name 'CVS*' | xargs -n1 rm -rf cd $(RPMSRCDIR) ; tar cvz * > $(RPMSOURCESDIR)/fpc-$(RPMFPCVERSION)-src.tar.gz # fpc-docs.rpm rm -rf $(DOCSRCDIR) cp $(CVSINSTALL)/fpc-docs.spec $(RPMSPECDIR)/fpc-docs-$(RPMFPCVERSION).spec install -d $(DOCSRCDIR) $(COPYTREE) docs $(DOCSRCDIR) find $(DOCSRCDIR) -name 'CVS*' | xargs -n1 rm -rf cd $(DOCSRCDIR) ; tar cvz * > $(RPMSOURCESDIR)/fpc-docs-$(RPMFPCVERSION)-src.tar.gz rpm: checkfpcdir rpmcopy cd $(RPMSPECDIR) ; rpm --nodeps -ba fpc-$(RPMFPCVERSION).spec cd $(RPMSPECDIR) ; rpm --nodeps -ba fpc-docs-$(RPMFPCVERSION).spec endif # spec found endif