#!/usr/bin/make -f # debian/rules for Free Pascal DEB_DH_BUILDDEB_ARGS := -- -Z bzip2 export DH_ALWAYS_EXCLUDE := COPYING:LICENSE export LANG:=C # Documentation type to use pdf/html ifeq (${DEBDOCTYPE},) DOCTYPE=html # HTML Converter l2h/4ht/hevea or html for (default) CONVERTER=hevea else DOCTYPE=${DEBDOCTYPE} CONVERTER=${DOCTYPE} endif # Detect name of new compiler, take care that debian uses amd64 instead of x86_64 CPU_SOURCE=$(subst amd64,x86_64,$(shell dpkg-architecture -qDEB_BUILD_ARCH)) CPU_TARGET=$(subst amd64,x86_64,$(shell dpkg-architecture -qDEB_HOST_ARCH)) ifeq ($(CPU_TARGET),m68k) PPSUF=68k endif ifeq ($(CPU_TARGET),i386) PPSUF=386 endif ifeq ($(CPU_TARGET),x86_64) PPSUF=x64 endif ifeq ($(CPU_TARGET),powerpc) PPSUF=ppc endif ifeq ($(CPU_TARGET),alpha) PPSUF=axp endif ifeq ($(CPU_TARGET),arm) PPSUF=arm endif ifeq ($(CPU_TARGET),sparc) PPSUF=sparc endif ifneq ($(CPU_SOURCE),$(CPU_TARGET)) PPPRE=ppcross else PPPRE=ppc endif PPNEW=$(PPPRE)$(PPSUF) FPCTARGET=$(CPU_TARGET)-linux # Reset FPC and FPCDIR if it was set FPC= FPCDIR= # Get version information from changelog file DEB_VERSION:=$(shell dpkg-parsechangelog | egrep '^Version:' | cut -f 2 -d ' ') DEB_UPSTREAM_VERSION:=$(shell echo $(DEB_VERSION) | cut -f 1 -d -) DEB_UPSTREAM_MAIN_VERSION:=$(shell echo ${DEB_UPSTREAM_VERSION} | sed -e 's/^\([0-9\.]*\).*/\1/') # Get directories CURDIR:=$(shell pwd) BUILD_DIR=$(CURDIR)/debian/build INSTALL_DIR=$(CURDIR)/debian/tmp DOC_DIR=${INSTALL_DIR}/usr/share/doc SRC_DIR=$(INSTALL_DIR)/usr/share/fpcsrc/${DEB_UPSTREAM_MAIN_VERSION} EXAMPLE_TEMP=${INSTALL_DIR}/usr/share/doc/fpc-${DEB_UPSTREAM_MAIN_VERSION} # Get utils ifndef MKDIR MKDIR=mkdir -p endif ifndef CP CP=cp -Rfpl endif RM:=rm -rf # Get fpcmake from path if none is specified. ifndef FPCMAKE FPCMAKE=fpcmake endif NEWPP=$(CURDIR)/fpcsrc/compiler/$(PPNEW) NEWFPDOC=$(CURDIR)/fpcsrc/utils/fpdoc/fpdoc #If not cross compiling, then use new generated fpcmake utility. ifeq (${PPPRE},) NEWFPCMAKE=$(CURDIR)/fpcsrc/utils/fpcm/fpcmake else NEWFPCMAKE=${FPCMAKE} endif # Set default compilation options BUILDOPTS=PP=$(NEWPP) ifdef CROSSOPT BUILDOPTS+= CROSSOPT=${CROSSOPT} endif INSTALLOPTS=INSTALL_PREFIX=$(INSTALL_DIR)/usr PP=$(NEWPP) FPCMAKE=$(NEWFPCMAKE) export GDBLIBDIR=/usr/lib # Configure patch system export QUILT_PATCHES=debian/patches #export DH_VERBOSE=1 ################### # Clean # clean: patch configure clean-patched unpatch ${RM} build-arch-stamp install-arch-stamp arrange-arch-stamp configure-stamp ${RM} build-doc-stamp install-doc-stamp ${RM} build-indep-stamp install-indep-stamp ${RM} debian-files-stamp ${RM} debian/files debian/docs debian/dirs debian/*.files debian/*.docs debian/*.examples debian/*.postinst debian/*.postrm ${RM} .pc ${RM} debian/fpc-depends.1 # Remove auto-generated version file. ${RM} fpcsrc/compiler/version.inc # Remove auto-generated make files. find -name Makefile.fpc -execdir 'sh' '-c' '${RM} $$(basename {} .fpc)' ';' dh_clean clean-patched: @echo "--- Cleaning" dh_testdir dh_testroot $(MAKE) -C fpcsrc compiler_distclean $(MAKE) -C fpcsrc rtl_distclean $(MAKE) -C fpcsrc packages_distclean $(MAKE) -C fpcsrc ide_distclean $(MAKE) -C fpcsrc utils_distclean $(MAKE) -C fpcdocs clean find '(' -name '*.a' -or -name '*.o' -or -name '*.so' -or -name '*.ppu' ')' -exec ${RM} '{}' ';' dh_prep patch: patch-stamp patch-stamp: test ! -s ${QUILT_PATCHES}/series || quilt push -a touch patch-stamp unpatch: test ! -s ${QUILT_PATCHES}/series || quilt pop -a rm -rf patch-stamp debian/patched ################### # Debian files # debian-files: patch debian-files-stamp debian-files-stamp: @echo "--- Creating/fixing *.install files" /bin/bash debian/fixdeb debian $(FPCTARGET) $(PPNEW) touch debian-files-stamp ################### # Arch packages # configure: configure-stamp configure-stamp: dh_testdir # Remove auto-generated make files. find -name Makefile.fpc -execdir 'sh' '-c' '${RM} $$(basename {} .fpc)' ';' # Regenrate make files using fpcmake. ${FPCMAKE} -r -Tall */Makefile.fpc # Remove auto-generated version file. ${RM} fpcsrc/compiler/version.inc # Add version.inc: echo \'$(DEB_VERSION)\' > fpcsrc/compiler/version.inc touch configure-stamp build-arch: debian-files configure build-arch-stamp build-arch-stamp: @echo "--- Building" dh_testdir # First make a new Compiler and RTL using a make cycle $(MAKE) -C fpcsrc compiler_cycle $(MAKE) -C fpcsrc rtl_clean rtl_smart $(BUILDOPTS) $(MAKE) -C fpcsrc packages_smart $(BUILDOPTS) $(MAKE) -C fpcsrc ide_all $(BUILDOPTS) $(MAKE) -C fpcsrc utils_all $(BUILDOPTS) touch build-arch-stamp install-arch: build-arch install-arch-stamp install-arch-stamp: @echo "--- Installing" dh_testdir dh_testroot # Specify the compiler to use so installing will use the correct versioned dir $(MAKE) -C fpcsrc compiler_distinstall $(INSTALLOPTS) $(MAKE) -C fpcsrc rtl_distinstall $(INSTALLOPTS) $(MAKE) -C fpcsrc packages_distinstall $(INSTALLOPTS) $(MAKE) -C fpcsrc ide_distinstall $(INSTALLOPTS) INSTALL_DOCDIR=$(DOC_DIR)/fp-ide $(MAKE) -C fpcsrc utils_distinstall $(INSTALLOPTS) # Copy examples to the correct doc dir /bin/bash debian/moveexamples $(EXAMPLE_TEMP) $(DOC_DIR) # Install man pages $(MAKE) -C install/man installman $(INSTALLOPTS) INSTALL_PREFIX=$(INSTALL_DIR)/usr/share # Install RTL demos $(MAKE) -C demo sourceinstall $(INSTALLOPTS) INSTALL_SOURCEDIR=$(DOC_DIR)/fp-compiler # Install whatsnew and readme $(MAKE) -C install/doc installdoc $(INSTALLOPTS) INSTALL_DOCDIR=$(DOC_DIR)/fp-compiler # Create fpc.cfg which is included as conffile /bin/bash fpcsrc/compiler/utils/samplecfg \ /usr/lib/fpc/${DEB_UPSTREAM_VERSION} ${INSTALL_DIR}/etc install -D debian/fpc-depends debian/tmp/usr/bin/ set -x; cd debian/overrides ; for PACKAGE in * ; do \ install -m644 -D $$PACKAGE \ ../$$PACKAGE/usr/share/lintian/overrides/$$PACKAGE ; \ done touch install-arch-stamp arrange-arch: install-arch arrange-arch-stamp arrange-arch-stamp: dh_testdir dh_testroot dh_install -s --sourcedir=debian/tmp --list-missing touch arrange-arch-stamp build-indep: patch install-indep: touch install-indep-stamp ################### # Documentation # build-doc: patch debian-files build-doc-stamp build-doc-stamp: @echo "--- Building Documentation" dh_testdir ${MKDIR} fpcsrc/compiler/utils/units/${FPCTARGET} $(MAKE) -C fpcdocs $(CONVERTER) touch build-doc-stamp install-doc: build-doc install-doc-stamp install-doc-stamp: @echo "--- Installing Documentation" dh_testdir dh_testroot ${MAKE} -C fpcdocs ${DOCTYPE}install INSTALL_PREFIX=${INSTALL_DIR}/usr INSTALL_DOCDIR=${DOC_DIR}/fp-docs/${DEB_UPSTREAM_MAIN_VERSION} touch install-doc-stamp ################### # Source # install-source: install-source-stamp install-source-stamp: @echo "--- Cleaning the tree and copying the source code" dh_testdir dh_testroot ${MKDIR} ${SRC_DIR} ${CP} -t ${SRC_DIR} \ $(CURDIR)/fpcsrc/compiler \ $(CURDIR)/fpcsrc/packages \ $(CURDIR)/fpcsrc/rtl touch install-source-stamp ################### # Generic # build: build-arch build-indep install: install-arch install-indep binary: binary-arch binary-indep ################### # Deb building # binary-indep: clean-patched build-doc install-doc install-source debian-files @echo "--- Building: arch-indep packages" dh_testdir dh_testroot dh_installdocs -i -X.in dh_installchangelogs -i dh_install -i --sourcedir=debian/tmp --list-missing find debian/fpc-source/usr/share/fpcsrc/ -type f \ -not -regex '.*\.\(fpc\|inc\|pas\|pp\)' -delete find debian/fpc-source/usr/share/fpcsrc/ -type d \ -empty -delete dh_compress -i -X.pdf dh_fixperms -i dh_installdeb -i dh_gencontrol -i dh_md5sums -i dh_builddeb -i $(DEB_DH_BUILDDEB_ARGS) binary-arch: arrange-arch @echo "--- Building: arch packages" dh_testdir dh_testroot dh_link dh_installdocs -a dh_installchangelogs -a dh_installexamples -a pod2man -c 'Free pascal for Debian GNU/Linux' \ debian/fpc-depends > debian/fpc-depends.1 dh_installman -s dh_strip -s dh_compress -a dh_fixperms -a dh_installdeb -s dh_shlibdeps -s dh_gencontrol -s dh_md5sums -s dh_builddeb -s $(DEB_DH_BUILDDEB_ARGS) .PHONY: build clean binary binary-arch \ binary-indep debian-files build-arch \ install install-indep install-arch \ configure get-orig-source: -uscan --upstream-version=0 --rename