# # Makefile.fpc for Free Pascal Source Tree # [package] name=fpc version=1.0.5 [target] dirs=compiler rtl utils fcl fv packages ide [default] fpcdir=. rule=help [prerules] override FPCDIR:=$(BASEDIR) export FPCDIR # 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 # Use new ppc386 PPNEW=$(BASEDIR)/compiler/ppc386$(EXEEXT) # Don't use ppufiles for win32 becuase of commandline length problems ifneq ($(OS_TARGET),win32) PPUFILESNEW=$(BASEDIR)/utils/ppufiles$(EXEEXT) endif # Build/install options BUILDOPTS=FPC=$(PPNEW) RELEASE=1 INSTALLOPTS=FPC=$(PPNEW) ZIPDESTDIR=$(BASEDIR) ifdef PPUFILESNEW override INSTALLOPTS+=PPUFILES=$(PPUFILESNEW) endif # 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_fpcexe compiler_cycle: $(MAKE) -C compiler cycle compiler_fpcexe: $(MAKE) -C compiler fpcexe ####################################### # IDE ####################################### .PHONY: ide_comp ide_full ide_comp: $(MAKE) -C compiler ppuclean $(MAKE) -C ide full # Look if libgdb.a is available then use fullgdb ifneq ($(wildcard packages/gdbint/libgdb/$(OS_TARGET)/libgdb.a),) ide_full: $(MAKE) -C compiler ppuclean $(MAKE) -C ide fullgdb else ide_full: $(MAKE) -C compiler ppuclean $(MAKE) -C ide full endif ####################################### # 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 ####################################### idezips: ide_fullzip ide_fullgdbzip optcompinstall optcompzip ide_compzip: $(MAKE) compiler_clean $(MAKE) ide_clean $(MAKE) ide_full $(MAKE) -C ide/text zipinstall ZIPNAME=ide-comp-$(PACKAGESUFFIX) ide_fullgdbzip: $(MAKE) ide_clean $(MAKE) ide_fullgdb $(MAKE) -C ide/text zipinstall ZIPNAME=ide-full-$(PACKAGESUFFIX) 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 ifeq ($(OS_TARGET),win32) -$(MAKE) compiler_cycle else $(MAKE) compiler_cycle endif # clean $(MAKE) rtl_clean $(MAKE) fcl_clean $(MAKE) packages_clean $(MAKE) utils_clean ifdef IDE $(MAKE) fv_clean $(MAKE) ide_clean endif # build everything $(MAKE) rtl_$(ALLTARGET) $(BUILDOPTS) $(MAKE) fcl_$(ALLTARGET) $(BUILDOPTS) $(MAKE) packages_$(ALLTARGET) $(BUILDOPTS) $(MAKE) utils_all $(BUILDOPTS) $(MAKE) compiler_fpcexe $(BUILDOPTS) ifdef IDE $(MAKE) ide_full $(BUILDOPTS) endif $(ECHO) 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) utils_$(INSTALLTARGET) $(INSTALLOPTS) $(MAKE) fcl_$(INSTALLTARGET) $(INSTALLOPTS) $(MAKE) packages_$(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) utils_zip$(INSTALLTARGET) $(INSTALLOPTS) ZIPNAME=util$(ZIPSUFFIX) $(MAKE) fcl_zip$(INSTALLTARGET) $(INSTALLOPTS) ZIPPREFIX=$(PKGPRE) $(MAKE) packages_zip$(INSTALLTARGET) $(INSTALLOPTS) ZIPPREFIX=$(PKGPRE) ifdef IDE $(NOSTOP)$(MAKE) ide_zip$(INSTALLTARGET) $(INSTALLOPTS) 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) fcl_zipsourceinstall $(MAKE) packages_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 os2zip: checkfpcdir $(MAKE) zipinstall OS_TARGET=os2 ########################################################################## # Debian / RPM ########################################################################## .PHONY: debcopy deb rpmcopy rpm DEBSRCDIR:=/usr/src/fpc-$(FPC_VERSION) debcopy: distclean rm -rf $(DEBSRCDIR) install -d $(DEBSRCDIR) $(COPYTREE) compiler $(DEBSRCDIR) $(COPYTREE) rtl $(DEBSRCDIR) $(COPYTREE) fcl $(DEBSRCDIR) $(COPYTREE) packages $(DEBSRCDIR) $(COPYTREE) utils $(DEBSRCDIR) $(COPYTREE) logs $(DEBSRCDIR) $(COPYTREE) docs $(DEBSRCDIR) $(COPYTREE) Makefile* $(DEBSRCDIR) $(COPYTREE) $(CVSINSTALL)/debian $(DEBSRCDIR) $(COPYTREE) $(CVSINSTALL)/man $(DEBSRCDIR) $(COPYTREE) $(CVSINSTALL)/doc $(DEBSRCDIR) $(COPYTREE) $(CVSINSTALL)/demo $(DEBSRCDIR) find $(DEBSRCDIR) -name 'CVS*' | xargs -n1 rm -rf chmod 755 $(DEBSRCDIR)/debian/rules deb: checkfpcdir debcopy cd $(DEBSRCDIR) ; debian/rules binary 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-$(FPC_VERSION).spec install -d $(RPMSRCDIR) $(COPYTREE) compiler $(RPMSRCDIR) $(COPYTREE) rtl $(RPMSRCDIR) $(COPYTREE) fcl $(RPMSRCDIR) $(COPYTREE) packages $(RPMSRCDIR) $(COPYTREE) utils $(RPMSRCDIR) $(COPYTREE) logs $(RPMSRCDIR) $(COPYTREE) Makefile* $(RPMSRCDIR) $(COPYTREE) $(CVSINSTALL)/man $(RPMSRCDIR) $(COPYTREE) $(CVSINSTALL)/doc $(RPMSRCDIR) $(COPYTREE) $(CVSINSTALL)/demo $(RPMSRCDIR) find $(RPMSRCDIR) -name 'CVS*' | xargs -n1 rm -rf cd $(RPMSRCDIR) ; tar cvz * > $(RPMSOURCESDIR)/fpc-$(FPC_VERSION)-src.tar.gz # fpc-docs.rpm rm -rf $(DOCSRCDIR) cp $(CVSINSTALL)/fpc-docs.spec $(RPMSPECDIR)/fpc-docs-$(FPC_VERSION).spec install -d $(DOCSRCDIR) $(COPYTREE) docs $(DOCSRCDIR) find $(DOCSRCDIR) -name 'CVS*' | xargs -n1 rm -rf cd $(DOCSRCDIR) ; tar cvz * > $(RPMSOURCESDIR)/fpc-docs-$(FPC_VERSION)-src.tar.gz rpm: checkfpcdir rpmcopy cd $(RPMSPECDIR) ; rpm -ba fpc-$(FPC_VERSION).spec cd $(RPMSPECDIR) ; rpm -ba fpc-docs-$(FPC_VERSION).spec