#!/usr/bin/make -f # debian/rules for Lazarus DEB_PACKAGE_NAME = lazarus export DH_ALWAYS_EXCLUDE := COPYING:LICENSE export LANG:=C # Documentation type to use chm/html ifeq (${DEBDOCTYPE},) DOCTYPE=html # HTML Converter chmdocs or htmldocs for (default) CONVERTER=${DOCTYPE}docs else DOCTYPE=${DEBDOCTYPE} CONVERTER=${DOCTYPE}docs endif # Define FPC ifndef FPC FPC=/usr/bin/fpc endif # Set FPCVER FPCVER=$(shell ${FPC} -iV) FPCTARGET=$(CPU_TARGET)-linux # Get version information from changelog file DEB_VERSION:=$(shell dpkg-parsechangelog | grep '^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/') DEB_BUILD=$(lastword $(subst -, ,${DEB_VERSION})) ifndef PACKAGESUFFIX export PACKAGESUFFIX=-${DEB_UPSTREAM_MAIN_VERSION} endif # Get directories INSTALL_DIR=$(CURDIR)/debian/tmp BIN_DIR=${INSTALL_DIR}/usr/bin LIB_DIR=${INSTALL_DIR}/usr/lib/${DEB_PACKAGE_NAME}/${DEB_UPSTREAM_MAIN_VERSION} DOC_DIR=${INSTALL_DIR}/usr/share/doc/${DEB_PACKAGE_NAME}/${DEB_UPSTREAM_MAIN_VERSION} SRC_DIR=${INSTALL_DIR}/usr/lib/${DEB_PACKAGE_NAME}/${DEB_UPSTREAM_MAIN_VERSION} # Get utils ifndef MKDIR MKDIR=mkdir -p endif ifndef CP CP=cp -Rfpl endif ifndef MV MV=mv endif RM:=rm -rf # Get fpcmake from path if none is specified. ifndef FPCMAKE FPCMAKE=fpcmake endif # Define FPCDIR if it was not set ifndef FPCDIR export FPCDIR=/usr/share/fpcsrc/${FPCVER} # Set default compilation options DEB_BUILD_FPC_OPT=debian/deb-build-fpc.cfg DEB_HOST_FPC_OPT=debian/deb-host-fpc.cfg BUILDOPTS=USESVN2REVISIONINC=0 OPT='@${CURDIR}/${DEB_HOST_FPC_OPT}' INSTALLOPTS=INSTALL_PREFIX=$(INSTALL_DIR)/usr endif ifndef LAZBUILD export LAZBUILD=${CURDIR}/lazbuild --lazarusdir=../.. endif # Set default compilation options DEB_HOST_MULTIARCH ?=$(shell dpkg-architecture -qDEB_HOST_MULTIARCH) DEB_BUILD_MULTIARCH ?=$(shell dpkg-architecture -qDEB_BUILD_MULTIARCH) LDFLAGS=$(shell dpkg-buildflags --get LDFLAGS | sed -e 's/-Wl,//g' -e 's/,/ /g') #export DH_VERBOSE=1 ################### # Clean # clean: clean-patched clean-make-files ${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 # Remove auto-generated version file. ${RM} ide/version.inc dh_clean clean-patched: make-files @echo "--- Cleaning" dh_testdir dh_testroot ${RM} lazarus startlazarus lazbuild ${RM} components/aggpas packager/globallinks/aggpas* $(MAKE) distclean ${BUILDOPTS} $(MAKE) -C docs/html clean find -regex '.*\.\(a\|or?\|so\.*\|ppu\)' -delete ################### # Debian files # debian-files: debian-files-stamp debian-files-stamp: @echo "--- Creating/fixing *.install files" DEB_SUBST_PACKAGESUFFIX=${PACKAGESUFFIX} \ debian/fixdeb debian/*.in touch debian-files-stamp make-files: make-files-stamp make-files-stamp: # Regenrate make files using fpcmake. find * -name Makefile.fpc -exec ${FPCMAKE} -Tall -q '{}' ';' touch $@ clean-make-files: # Remove auto-generated make files. find * -name Makefile.fpc -execdir sh -c '${RM} $$(basename {} .fpc)' ';' ${RM} make-files-stamp ################### # Arch packages # configure: debian-files clean-make-files make-files configure-stamp configure-stamp: dh_testdir dh_prep # Remove auto-generated version file. ${RM} ide/version.inc # Add version.inc: echo \'$(DEB_VERSION)\' > ide/version.inc touch configure-stamp build-arch: configure build-arch-stamp build-arch-stamp: ${DEB_HOST_FPC_OPT} @echo "--- Building" dh_testdir ${MAKE} bigide ${BUILDOPTS} ${MV} $(CURDIR)/lazarus $(CURDIR)/lazarus-gtk2 touch build-arch-stamp install-arch: build-arch install-arch-stamp install-arch-stamp: @echo "--- Installing" dh_testdir dh_testroot dh_installdirs # create all necessary directories ${MKDIR} ${BIN_DIR} ${MKDIR} ${LIB_DIR}/tools # Install the IDE & its accessories ${CP} -t ${LIB_DIR} \ $(CURDIR)/lazarus-gtk2 \ $(CURDIR)/lazbuild \ $(CURDIR)/startlazarus \ $(CURDIR)/languages ${CP} -t ${LIB_DIR}/tools \ $(CURDIR)/tools/lazres \ $(CURDIR)/tools/lrstolfm \ $(CURDIR)/tools/svn2revisioninc \ $(CURDIR)/tools/updatepofiles # Install the library files find -name debian -prune -or '(' -name lib -or -name units ')' -print | xargs ${CP} --parents -t ${LIB_DIR} # Remove READM.txt files from output directories find ${LIB_DIR} '(' -name '*.or' -or -wholename '*/lib/README.txt' ')' -delete # Mark package as manually compilable and install them for package in `find -name '*.lpk'` ; \ do \ ${MKDIR} `dirname "${LIB_DIR}/$${package}"` ; \ sed -e 's@\(\W*\).*@\1\n&@' "$${package}" > "${LIB_DIR}/$${package}" ; \ done # Install packages global links ${CP} -t ${LIB_DIR}/packager $(CURDIR)/packager/globallinks # copy icons and menu entries for the GNOME menu ${MKDIR} $(INSTALL_DIR)/usr/share/pixmaps ${MKDIR} $(INSTALL_DIR)/usr/share/applications convert -geometry 32x32 $(CURDIR)/images/ide_icon48x48.png $(INSTALL_DIR)/usr/share/pixmaps/lazarus-${DEB_UPSTREAM_MAIN_VERSION}.xpm sed -e 's/Lazarus.*/& (${DEB_UPSTREAM_MAIN_VERSION})/' -e 's/Exec=startlazarus/&-${DEB_UPSTREAM_MAIN_VERSION}/' $(CURDIR)/install/lazarus.desktop > $(INSTALL_DIR)/usr/share/applications/lazarus-${DEB_UPSTREAM_MAIN_VERSION}.desktop # Install configuration files ${MKDIR} $(INSTALL_DIR)/etc/lazarus-${DEB_UPSTREAM_MAIN_VERSION} sed -e "s#__LAZARUSDIR__#/usr/lib/lazarus/${DEB_UPSTREAM_MAIN_VERSION}/#" -e 's#__FPCSRCDIR__#/usr/share/fpcsrc/$$(FPCVER)/#' ${CURDIR}/tools/install/linux/environmentoptions.xml > $(INSTALL_DIR)/etc/lazarus-${DEB_UPSTREAM_MAIN_VERSION}/environmentoptions.xml fpcsubst -d LazarusVersion=${DEB_UPSTREAM_MAIN_VERSION} -i ${CURDIR}/tools/install/linux/helpoptions.xml -o $(INSTALL_DIR)/etc/lazarus-${DEB_UPSTREAM_MAIN_VERSION}/helpoptions.xml # Install contributer list ${MKDIR} ${LIB_DIR}/docs ${CP} -t ${LIB_DIR}/docs \ $(CURDIR)/docs/Contributors.txt \ $(CURDIR)/docs/contributors.utf8 \ $(CURDIR)/docs/acknowledgements.txt # Install lintian override files set -x -e ; cd debian/overrides ; for PACKAGE in * ; do \ if [ -d ../$${PACKAGE}${PACKAGESUFFIX} ] ; \ then \ ${MKDIR} ../$${PACKAGE}${PACKAGESUFFIX}/usr/share/lintian/overrides ; \ sed -e "s/$${PACKAGE}/&${PACKAGESUFFIX}/g" $${PACKAGE} > ../$${PACKAGE}${PACKAGESUFFIX}/usr/share/lintian/overrides/$${PACKAGE}${PACKAGESUFFIX} ; \ fi ; \ done ifeq (${DEB_BUILD},0) # We are building upstream debs, install override files for build = 0 set -x -e ; cd debian ; for PACKAGE in `sed -n -e 's/Package: \(.*\)/\1/p' control` ; do \ if [ -d $${PACKAGE} ] ; \ then \ ${MKDIR} $${PACKAGE}/usr/share/lintian/overrides ; \ echo "$${PACKAGE}: debian-revision-should-not-be-zero" >> $${PACKAGE}/usr/share/lintian/overrides/$${PACKAGE} ; \ fi ; \ done endif find ${INSTALL_DIR} -empty -delete touch install-arch-stamp arrange-arch: install-arch arrange-arch-stamp install-man arrange-arch-stamp: dh_testdir dh_testroot dh_install -s --sourcedir=debian/tmp --list-missing touch arrange-arch-stamp build-indep: install-indep: touch install-indep-stamp install-man: install-man-stamp install-man-stamp: # Install man pages $(MAKE) -C install/man installman $(INSTALLOPTS) for s in ${INSTALL_DIR}/usr/man/man[1-9] ; do cd $${s} && for f in *.[1-9] ; do ${MV} $${f} $${f%%.*}-${DEB_UPSTREAM_MAIN_VERSION}."$${f#*.}" ; done ; done || true dh_installman -s ${RM} ${INSTALL_DIR}/usr/man touch install-man-stamp ################### # Documentation # build-doc: build-doc-stamp build-doc-stamp: @echo "--- Building Documentation" dh_testdir $(MAKE) -C docs/html ${CONVERTER} touch build-doc-stamp install-doc: build-doc install-doc-stamp install-doc-stamp: ${DEB_BUILD_FPC_OPT} @echo "--- Installing Documentation" dh_testdir dh_testroot ${MAKE} -C docs/html ${DOCTYPE}install INSTALL_PREFIX=${INSTALL_DIR}/usr INSTALL_DOCDIR=${DOC_DIR} cd docs ; ${CP} --parents -t ${DOC_DIR} \ index.html \ images/laztitle.png find ${DOC_DIR} -empty -delete touch install-doc-stamp ################### # Source # install-source: clean-patched 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)/Makefile* \ $(CURDIR)/components \ $(CURDIR)/converter \ $(CURDIR)/debugger \ $(CURDIR)/designer \ $(CURDIR)/doceditor \ $(CURDIR)/examples \ $(CURDIR)/ide \ $(CURDIR)/images \ $(CURDIR)/lcl \ $(CURDIR)/packager \ $(CURDIR)/test \ $(CURDIR)/tools # Remove files already installed in binary packages find ${SRC_DIR} -name '*.lpk' -delete ${RM} ${SRC_DIR}/packager/globallinks find ${SRC_DIR} -regex '.*\.\(bmp\|jpg\|png\|xpm\)' -delete $(RM) ${SRC_DIR}/components/lazreport/license*.txt find ${SRC_DIR} -empty -delete touch install-source-stamp ################### # Generic # build: build-arch build-indep install: install-arch install-indep binary: binary-arch binary-indep ################### # Deb building # configure-indep: configure-indep-stamp configure configure-indep-stamp: @echo -- Configure indep dh_prep touch configure-indep-stamp binary-indep: configure-indep install-doc install-source @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 # Install lintian override files set -x -e ; cd debian/overrides ; for PACKAGE in * ; do \ if [ -d ../$${PACKAGE}${PACKAGESUFFIX} ] ; \ then \ ${MKDIR} ../$${PACKAGE}${PACKAGESUFFIX}/usr/share/lintian/overrides ; \ sed -e "s/$${PACKAGE}/&${PACKAGESUFFIX}/g" $${PACKAGE} > ../$${PACKAGE}${PACKAGESUFFIX}/usr/share/lintian/overrides/$${PACKAGE}${PACKAGESUFFIX} ; \ fi ; \ done ifeq (${DEB_BUILD},0) # We are building upstream debs, install override files for build = 0 set -x -e ; cd debian ; for PACKAGE in `sed -n -e 's/Package: \(.*\)/\1/p' control` ; do \ if [ -d $${PACKAGE} ] ; \ then \ ${MKDIR} $${PACKAGE}/usr/share/lintian/overrides ; \ echo "$${PACKAGE}: debian-revision-should-not-be-zero" >> $${PACKAGE}/usr/share/lintian/overrides/$${PACKAGE} ; \ fi ; \ done endif dh_compress -i -X.pdf dh_fixperms dh_installdebconf -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 -X.in dh_installchangelogs -a dh_installexamples -a dh_installmenu fpc-depends dh_strip -s dh_compress -a dh_fixperms dh_installdebconf -a dh_installdeb -a 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 configure-indep make-files clean-make-files get-orig-source: -uscan --rename --force-download debian/%:debian/fixdeb debian/changelog debian/%.in DEB_SUBST_PACKAGESUFFIX=${PACKAGESUFFIX} \ DEB_SUBST_TARGET=${FPCTARGET} \ $< --gen-control $@.in ${DEB_BUILD_FPC_OPT}: echo '# FPC configuration file for build system tools' > $@ echo '-k${LDFLAGS}' >> $@ echo '-Fl/usr/lib/${DEB_BUILD_MULTIARCH}' >> $@ ${DEB_HOST_FPC_OPT}: echo '# FPC configuration file for host system applications' > $@ echo '-k${LDFLAGS}' >> $@ echo '-Fl/usr/lib/${DEB_HOST_MULTIARCH}' >> $@