#!/usr/bin/make -f # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. unexport LANG LC_ALL LC_CTYPE LC_COLLATE LC_TIME LC_NUMERIC LC_MESSAGES unexport CFLAGS CXXFLAGS CPPFLAGS export SHELL = /bin/bash # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 vafilt = $(subst $(2)=,,$(filter $(2)=%,$(1))) DPKG_VARS := $(shell dpkg-architecture) DEB_HOST_ARCH ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH) DEB_HOST_ARCH_OS ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH_OS) CHANGELOG_VARS := $(shell dpkg-parsechangelog | \ sed -n 's/ /_/g;/^[^_]/s/^\([^:]*\):_\(.*\)/\1=\2/p') PKGSOURCE := $(call vafilt,$(CHANGELOG_VARS),Source) PKGVERSION := $(call vafilt,$(CHANGELOG_VARS),Version) on_buildd := $(shell [ -f /CurrentlyBuilding -o "$$LOGNAME" = buildd ] && echo yes) ifneq (,$(findstring nocheck, $(DEB_BUILD_OPTIONS))) WITHOUT_CHECK := yes endif WITHOUT_BENCH := ifneq (,$(findstring nobench, $(DEB_BUILD_OPTIONS))) WITHOUT_BENCH := yes endif ifeq ($(on_buildd),yes) ifneq (,$(findstring $(DEB_HOST_ARCH), armel hppa mips mipsel s390)) WITHOUT_CHECK := yes endif ifneq (,$(findstring $(DEB_HOST_ARCH), armel hppa mips mipsel s390)) WITHOUT_BENCH := yes endif endif WITHOUT_CHECK := yes COMMA = , ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) NJOBS := -j $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) endif distribution := $(shell lsb_release -is) export VER=3.2 export SVER=3.2~a4 export NVER=3.3 export PVER=python3.2 export PRIORITY=$(shell echo $(VER) | tr -d '.')0 PREVVER := $(shell awk '/^python/ && NR > 1 {print substr($$2,2,length($$2)-2); exit}' debian/changelog) # default versions are built from the python-defaults source package # keep the definition to adjust package priorities. DEFAULT_VERSION = no STATIC_PYTHON=yes MIN_MODS := $(shell awk '/^ / && $$2 == "module" { print $$1 }' \ debian/PVER-minimal.README.Debian.in) MIN_EXTS := $(shell awk '/^ / && $$2 == "extension" { print $$1 }' \ debian/PVER-minimal.README.Debian.in) MIN_BUILTINS := $(shell awk '/^ / && $$2 == "builtin" { print $$1 }' \ debian/PVER-minimal.README.Debian.in) MIN_PACKAGES := $(shell awk '/^ / && $$2 == "package" { print $$1 }' \ debian/PVER-minimal.README.Debian.in) MIN_ENCODINGS := $(foreach i, \ $(filter-out \ big5% bz2% cp932.py cp949.py cp950.py euc_% \ gb% iso2022% johab.py shift_jis% , \ $(shell cd Lib/encodings && echo *.py)), \ encodings/$(i)) \ codecs.py stringprep.py with_tk := no with_interp := static #with_interp := shared build_target := build-all install_target := install PY_INTERPRETER = /usr/bin/python$(VER) ifeq ($(DEFAULT_VERSION),yes) PY_PRIO = standard #PYSTDDEP = , python (>= $(VER)) else PY_PRIO = optional endif ifeq ($(distribution),Ubuntu) PY_MINPRIO = required PY_MINPRIO = optional with_fpectl = yes else PY_MINPRIO = $(PY_PRIO) with_fpectl = yes endif CC = gcc # on alpha, use -O2 only, use -mieee ifeq ($(DEB_HOST_ARCH),alpha) OPTSETTINGS = OPT="-g -O2 -fwrapv -mieee -Wall -Wstrict-prototypes" OPTDEBUGSETTINGS = OPT="-g -O0 -fwrapv -mieee -Wall -Wstrict-prototypes" endif ifeq ($(DEB_HOST_ARCH),m68k) OPTSETTINGS = OPT="-g -O2 -fwrapv -Wall -Wstrict-prototypes" endif PWD := $(shell pwd) buildd_static := $(CURDIR)/build-static buildd_shared := $(CURDIR)/build-shared buildd_debug := $(CURDIR)/build-debug buildd_shdebug := $(CURDIR)/build-shdebug d := debian/tmp scriptdir = usr/share/lib/python$(VER) scriptdir = usr/share/python$(VER) scriptdir = usr/lib/python$(VER) # package names and directories p_base := $(PVER) p_min := $(PVER)-minimal p_lib := lib$(PVER) p_tk := $(PVER)-tk p_dev := $(PVER)-dev p_exam := $(PVER)-examples p_idle := idle-$(PVER) p_doc := $(PVER)-doc p_dbg := $(PVER)-dbg d_base := debian/$(p_base) d_min := debian/$(p_min) d_lib := debian/$(p_lib) d_tk := debian/$(p_tk) d_dev := debian/$(p_dev) d_exam := debian/$(p_exam) d_idle := debian/$(p_idle) d_doc := debian/$(p_doc) d_dbg := debian/$(p_dbg) ifneq (,$(findstring $(DEB_HOST_ARCH), amd64 armel hppa powerpc ppc64 hurd-i386)) make_build_target = else make_build_target = profile-opt endif ifeq ($(distribution),Debian) make_build_target = endif # make_build_target = profile-opt build: $(build_target) build-all: stamps/stamp-build stamps/stamp-build: stamps/stamp-build-static stamps/stamp-build-shared stamps/stamp-build-debug stamps/stamp-build-shared-debug stamps/stamp-mincheck stamps/stamp-check stamps/stamp-pystone stamps/stamp-pybench touch stamps/stamp-build PROFILE_EXCLUDES = test_compiler test_distutils test_platform test_subprocess \ test_multiprocessing test_socketserver \ test_thread test_threaded_import test_threadedtempfile \ test_threading test_threading_local test_threadsignals \ test_dbm_dumb test_dbm_ndbm test_pydoc test_sundry \ test_signal test_ioctl test_gdb # FIXME: test_mailxbox breaks, 20090703 PROFILE_EXCLUDES += test_mailbox # FIXME: test_xmlrpc breaks, 20090818 PROFILE_EXCLUDES += test_xmlrpc # FIXME: test_telnetlib uses network resources PROFILE_EXCLUDES += test_telnetlib PROFILE_TASK = ../Lib/test/regrtest.py \ -x $(sort $(TEST_EXCLUDES) $(PROFILE_EXCLUDES)) stamps/stamp-build-static: stamps/stamp-configure-static dh_testdir $(MAKE) $(NJOBS) -C $(buildd_static) \ PROFILE_TASK='$(PROFILE_TASK)' $(make_build_target) touch stamps/stamp-build-static stamps/stamp-build-shared: stamps/stamp-configure-shared dh_testdir $(MAKE) $(NJOBS) -C $(buildd_shared) # : # build the shared library # $(MAKE) $(NJOBS) -C $(buildd_shared) \ # libpython$(VER).so : # build a static library with PIC objects $(MAKE) $(NJOBS) -C $(buildd_shared) \ LIBRARY=libpython$(VER)mu-pic.a libpython$(VER)mu-pic.a touch stamps/stamp-build-shared stamps/stamp-build-debug: stamps/stamp-configure-debug dh_testdir # not building with $(NJOBS), see issue #4279 $(MAKE) -C $(buildd_debug) touch stamps/stamp-build-debug stamps/stamp-build-shared-debug: stamps/stamp-configure-shared-debug dh_testdir : # build the shared debug library # not building with $(NJOBS), see issue #4279 $(MAKE) -C $(buildd_shdebug) \ libpython$(VER)dmu.so touch stamps/stamp-build-shared-debug common_configure_args = \ --prefix=/usr \ --enable-ipv6 \ --enable-loadable-sqlite-extensions \ --with-dbmliborder=bdb \ --with-wide-unicode \ --with-computed-gotos \ --with-system-expat \ ifeq ($(DEB_HOST_ARCH), avr32) common_configure_args += --without-ffi else common_configure_args += --with-system-ffi endif ifeq ($(with_fpectl),yes) common_configure_args += \ --with-fpectl endif stamps/stamp-configure-shared: stamps/stamp-patch rm -rf $(buildd_shared) mkdir -p $(buildd_shared) cd $(buildd_shared) && \ CC="$(CC)" $(OPTSETTINGS) \ ../configure \ --enable-shared \ $(common_configure_args) egrep \ "^#($$(awk '$$2 ~ /^extension$$/ {print $$1}' debian/PVER-minimal.README.Debian.in | tr '\012' '|')XX)" \ Modules/Setup.dist \ | sed -e 's/^#//' -e 's/-Wl,-Bdynamic//;s/-Wl,-Bstatic//' \ >> $(buildd_shared)/Modules/Setup.local cd $(buildd_shared) && \ ../Modules/makesetup -c ../Modules/config.c.in -s Modules \ Modules/Setup.config Modules/Setup.local Modules/Setup mv $(buildd_shared)/config.c $(buildd_shared)/Modules/ @echo XXXXXXX pyconfig.h -cat $(buildd_shared)/pyconfig.h touch stamps/stamp-configure-shared stamps/stamp-configure-static: stamps/stamp-patch rm -rf $(buildd_static) mkdir -p $(buildd_static) cd $(buildd_static) && \ CC="$(CC)" $(OPTSETTINGS) \ ../configure \ $(common_configure_args) egrep \ "^#($$(awk '$$2 ~ /^extension$$/ {print $$1}' debian/PVER-minimal.README.Debian.in | tr '\012' '|')XX)" \ Modules/Setup.dist | sed 's/^#//' \ >> $(buildd_static)/Modules/Setup.local cd $(buildd_static) && \ ../Modules/makesetup -c ../Modules/config.c.in -s Modules \ Modules/Setup.config Modules/Setup.local Modules/Setup : # apply workaround for missing os.fsync sed 's/HAVE_SYNC/HAVE_FSYNC/g' $(buildd_static)/pyconfig.h \ > $(buildd_static)/pyconfig.h.new touch -r $(buildd_static)/pyconfig.h $(buildd_static)/pyconfig.h.new mv -f $(buildd_static)/pyconfig.h.new $(buildd_static)/pyconfig.h mv $(buildd_static)/config.c $(buildd_static)/Modules/ touch stamps/stamp-configure-static stamps/stamp-configure-debug: stamps/stamp-patch rm -rf $(buildd_debug) mkdir -p $(buildd_debug) cd $(buildd_debug) && \ CC="$(CC)" $(OPTDEBUGSETTINGS) CFLAGS="" CXXFLAGS="" \ ../configure \ $(common_configure_args) \ --with-pydebug egrep \ "^#($$(awk '$$2 ~ /^extension$$/ {print $$1}' debian/PVER-minimal.README.Debian.in | tr '\012' '|')XX)" \ Modules/Setup.dist | sed 's/^#//' \ >> $(buildd_debug)/Modules/Setup.local cd $(buildd_debug) && \ ../Modules/makesetup -c ../Modules/config.c.in -s Modules \ Modules/Setup.config Modules/Setup.local Modules/Setup mv $(buildd_debug)/config.c $(buildd_debug)/Modules/ : # apply workaround for missing os.fsync sed 's/HAVE_SYNC/HAVE_FSYNC/g' $(buildd_debug)/pyconfig.h \ > $(buildd_debug)/pyconfig.h.new touch -r $(buildd_debug)/pyconfig.h $(buildd_debug)/pyconfig.h.new mv -f $(buildd_debug)/pyconfig.h.new $(buildd_debug)/pyconfig.h touch stamps/stamp-configure-debug stamps/stamp-configure-shared-debug: stamps/stamp-patch rm -rf $(buildd_shdebug) mkdir -p $(buildd_shdebug) cd $(buildd_shdebug) && \ CC="$(CC)" $(OPTDEBUGSETTINGS) CFLAGS="" CXXFLAGS="" \ ../configure \ $(common_configure_args) \ --enable-shared \ --with-pydebug egrep \ "^#($$(awk '$$2 ~ /^extension$$/ {print $$1}' debian/PVER-minimal.README.Debian.in | tr '\012' '|')XX)" \ Modules/Setup.dist \ | sed -e 's/^#//' -e 's/-Wl,-Bdynamic//;s/-Wl,-Bstatic//' \ >> $(buildd_shdebug)/Modules/Setup.local cd $(buildd_shdebug) && \ ../Modules/makesetup -c ../Modules/config.c.in -s Modules \ Modules/Setup.config Modules/Setup.local Modules/Setup mv $(buildd_shdebug)/config.c $(buildd_shdebug)/Modules/ : # apply workaround for missing os.fsync sed 's/HAVE_SYNC/HAVE_FSYNC/g' $(buildd_shdebug)/pyconfig.h \ > $(buildd_shdebug)/pyconfig.h.new touch -r $(buildd_shdebug)/pyconfig.h $(buildd_shdebug)/pyconfig.h.new mv -f $(buildd_shdebug)/pyconfig.h.new $(buildd_shdebug)/pyconfig.h touch stamps/stamp-configure-shared-debug stamps/stamp-mincheck: stamps/stamp-build-static debian/PVER-minimal.README.Debian.in for m in $(MIN_MODS) $(MIN_PACKAGES) $(MIN_EXTS) $(MIN_BUILTINS); do \ echo "import $$m"; \ done > $(buildd_static)/minmods.py cd $(buildd_static) && ./python ../debian/pymindeps.py minmods.py \ > $(buildd_static)/mindeps.txt if [ -x /usr/bin/dot ]; then \ python debian/depgraph.py < $(buildd_static)/mindeps.txt \ > $(buildd_static)/mindeps.dot; \ dot -Tpng -o $(buildd_static)/mindeps.png \ $(buildd_static)/mindeps.dot; \ else true; fi cd $(buildd_static) && ./python ../debian/mincheck.py \ minmods.py mindeps.txt touch stamps/stamp-mincheck TEST_RESOURCES = all ifeq ($(on_buildd),yes) TEST_RESOURCES := $(TEST_RESOURCES),-network,-urlfetch endif TESTOPTS = $(NJOBS) -w -u$(TEST_RESOURCES) TEST_EXCLUDES = # profile.py and pstats.py removed from sources TEST_EXCLUDES += test_pstats test_profile test_cprofile ifeq ($(on_buildd),yes) TEST_EXCLUDES += test_tcl test_codecmaps_cn test_codecmaps_hk \ test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw \ test_normalization test_ossaudiodev endif ifeq (,$(wildcard /dev/dsp)) TEST_EXCLUDES += test_linuxaudiodev test_ossaudiodev endif ifneq (,$(filter $(DEB_HOST_ARCH), hppa)) TEST_EXCLUDES += test_fork1 test_multiprocessing test_socketserver test_threading test_wait3 test_wait4 test_gdb endif ifneq (,$(filter $(DEB_HOST_ARCH), arm avr32)) TEST_EXCLUDES += test_ctypes endif ifneq (,$(filter $(DEB_HOST_ARCH), arm armel avr32 m68k)) ifeq ($(on_buildd),yes) TEST_EXCLUDES += test_compiler endif endif ifneq (,$(filter $(DEB_HOST_ARCH), sparc sparc64)) TEST_EXCLUDES += test_gdb endif ifneq (,$(filter $(DEB_HOST_ARCH), hurd-i386)) TEST_EXCLUDES += test_imaplib test_io test_logging test_random test_signal test_socket test_socketserver test_ssl test_threading endif # issues with 3.2~a4 TEST_EXCLUDES += test_sysconfig ifneq (,$(TEST_EXCLUDES)) TESTOPTS += -x $(sort $(TEST_EXCLUDES)) endif ifneq (,$(wildcard /usr/bin/localedef)) SET_LOCPATH = LOCPATH=$(CURDIR)/locales endif stamps/stamp-check: ifeq ($(WITHOUT_CHECK),yes) echo "check run disabled for this build" > $(buildd_static)/test_results else : # build locales needed by the testsuite rm -rf locales mkdir locales if which localedef >/dev/null 2>&1; then \ sh debian/locale-gen; \ fi @echo ========== test environment ============ @env @echo ======================================== @echo "BEGIN test static" -time \ $(SET_LOCPATH) \ $(MAKE) -C $(buildd_static) test \ TESTOPTS="$(TESTOPTS)" 2>&1 \ | tee $(buildd_static)/test_results @echo "END test static" @echo "BEGIN test shared" -time \ $(SET_LOCPATH) \ $(MAKE) -C $(buildd_shared) test \ TESTOPTS="$(TESTOPTS)" 2>&1 \ | tee $(buildd_shared)/test_results @echo "END test shared" ifeq (,$(findstring $(DEB_HOST_ARCH), alpha)) @echo "BEGIN test debug" -time \ $(SET_LOCPATH) \ $(MAKE) -C $(buildd_debug) test \ TESTOPTS="$(TESTOPTS)" 2>&1 \ | tee $(buildd_debug)/test_results @echo "END test debug" endif endif cp -p $(buildd_static)/test_results debian/ touch stamps/stamp-check stamps/stamp-pystone: @echo "BEGIN pystone static" cd $(buildd_static) && ./python ../Lib/test/pystone.py cd $(buildd_static) && ./python ../Lib/test/pystone.py @echo "END pystone static" @echo "BEGIN pystone shared" cd $(buildd_shared) \ && LD_LIBRARY_PATH=. ./python ../Lib/test/pystone.py cd $(buildd_shared) \ && LD_LIBRARY_PATH=. ./python ../Lib/test/pystone.py @echo "END pystone shared" @echo "BEGIN pystone debug" cd $(buildd_debug) && ./python ../Lib/test/pystone.py cd $(buildd_debug) && ./python ../Lib/test/pystone.py @echo "END pystone debug" touch stamps/stamp-pystone stamps/stamp-pybench: echo "pybench run disabled for this build" > $(buildd_static)/pybench.log #ifeq (,$(filter $(DEB_HOST_ARCH), arm armel avr32 hppa mips mipsel m68k)) pybench_options = -C 2 -n 5 -w 4 #endif stamps/stamp-pybenchx: ifeq ($(WITHOUT_BENCH),yes) echo "pybench run disabled for this build" > $(buildd_static)/pybench.log else @echo "BEGIN pybench static" cd $(buildd_static) \ && time ./python ../Tools/pybench/pybench.py -f run1.pybench $(pybench_options) cd $(buildd_static) \ && ./python ../Tools/pybench/pybench.py -f run2.pybench -c run1.pybench $(pybench_options) @echo "END pybench static" @echo "BEGIN pybench shared" cd $(buildd_shared) \ && LD_LIBRARY_PATH=. ./python ../Tools/pybench/pybench.py -f run1.pybench $(pybench_options) cd $(buildd_shared) \ && LD_LIBRARY_PATH=. ./python ../Tools/pybench/pybench.py -f run2.pybench -c run1.pybench $(pybench_options) @echo "END pybench shared" @echo "BEGIN shared/static comparision" $(buildd_static)/python Tools/pybench/pybench.py \ -s $(buildd_static)/run2.pybench -c $(buildd_shared)/run2.pybench \ | tee $(buildd_static)/pybench.log @echo "END shared/static comparision" endif touch stamps/stamp-pybench minimal-test: rm -rf mintest mkdir -p mintest/lib mintest/dynlib mintest/testlib mintest/all-lib cp -p $(buildd_static)/python mintest/ cp -p $(foreach i,$(MIN_MODS),Lib/$(i).py) \ mintest/lib/ cp -a $(foreach i,$(MIN_PACKAGES),Lib/$(i)) \ mintest/lib/ # cp -p $(foreach i,$(MIN_EXTS),$(buildd_static)/build/lib*/$(i).so) \ # mintest/dynlib/ cp -p Lib/unittest.py mintest/lib/ cp -pr Lib/test mintest/lib/ cp -pr Lib mintest/all-lib cp -p $(buildd_static)/build/lib*/*.so mintest/all-lib/ ( \ echo "import sys"; \ echo "sys.path = ["; \ echo " '$(CURDIR)/mintest/lib',"; \ echo " '$(CURDIR)/mintest/dynlib',"; \ echo "]"; \ cat Lib/test/regrtest.py; \ ) > mintest/lib/test/mintest.py cd mintest && ./python -E -S lib/test/mintest.py \ -x test_codecencodings_cn test_codecencodings_hk \ test_codecencodings_jp test_codecencodings_kr \ test_codecencodings_tw test_codecs test_multibytecodec \ stamps/stamp-doc-html: dh_testdir $(MAKE) -C Doc html touch stamps/stamp-doc-html build-doc: stamps/stamp-patch stamps/stamp-build-doc stamps/stamp-build-doc: stamps/stamp-doc-html touch stamps/stamp-build-doc control-file: sed -e "s/@PVER@/$(PVER)/g" \ -e "s/@VER@/$(VER)/g" \ -e "s/@PYSTDDEP@/$(PYSTDDEP)/g" \ -e "s/@PRIO@/$(PY_PRIO)/g" \ -e "s/@MINPRIO@/$(PY_MINPRIO)/g" \ debian/control.in > debian/control.tmp ifeq ($(distribution),Ubuntu) ifneq (,$(findstring ubuntu, $(PKGVERSION))) m='Ubuntu Core Developers '; \ sed -i "/^Maintainer:/s/\(.*\)/Maintainer: $$m\nXSBC-Original-\1/" \ debian/control.tmp endif endif [ -e debian/control ] \ && cmp -s debian/control debian/control.tmp \ && rm -f debian/control.tmp && exit 0; \ mv debian/control.tmp debian/control clean: control-file dh_testdir dh_testroot $(MAKE) -f debian/rules unpatch rm -rf stamps .pc rm -f debian/test_results $(MAKE) -C Doc clean sed 's/^@/#/' Makefile.pre.in | $(MAKE) -f - srcdir=. distclean rm -rf $(buildd_static) $(buildd_shared) $(buildd_debug) $(buildd_shdebug) find -name '*.py[co]' | xargs -r rm -f rm -f Lib/lib2to3/*.pickle rm -rf locales rm -rf $(d)-dbg for f in debian/*.in; do \ f2=`echo $$f | sed "s,PVER,$(PVER),g;s/@VER@/$(VER)/g;s,\.in$$,,"`; \ if [ $$f2 != debian/control ] && [ $$f2 != debian/source.lintian-overrides ]; then \ rm -f $$f2; \ fi; \ done dh_clean stamps/stamp-control: : # We have to prepare the various control files for f in debian/*.in; do \ f2=`echo $$f | sed "s,PVER,$(PVER),g;s/@VER@/$(VER)/g;s,\.in$$,,"`; \ if [ $$f2 != debian/control ]; then \ sed -e "s/@PVER@/$(PVER)/g;s/@VER@/$(VER)/g;s/@SVER@/$(SVER)/g" \ -e "s/@PRIORITY@/$(PRIORITY)/g" \ -e "s,@SCRIPTDIR@,/$(scriptdir),g" \ -e "s,@INFO@,$(info_docs),g" \ <$$f >$$f2; \ fi; \ done install: $(build_target) stamps/stamp-install stamps/stamp-install: stamps/stamp-build control-file stamps/stamp-control dh_testdir dh_testroot dh_clean -k dh_installdirs : # make install into tmp and subsequently move the files into : # their packages' directories. install -d $(d)/usr ifeq ($(with_interp),static) $(MAKE) -C $(buildd_static) install prefix=$(CURDIR)/$(d)/usr else $(MAKE) -C $(buildd_shared) install prefix=$(CURDIR)/$(d)/usr endif -find $(d)/usr/lib/python$(VER) -name '*_failed*.so' find $(d)/usr/lib/python$(VER) -name '*_failed*.so' | xargs -r rm -f mkdir -p $(d)/usr/lib/python3 mv $(d)/usr/lib/python$(VER)/site-packages \ $(d)/usr/lib/python3/dist-packages rm -f $(d)/usr/lib/python3/dist-packages/README : # remove files, which are not packaged rm -rf $(d)/usr/lib/python$(VER)/ctypes/macholib : # fix some file permissions chmod a-x $(d)/$(scriptdir)/{runpy,fractions,lib2to3/refactor,tkinter/tix}.py # : # move manpages to new names # if [ -d $(d)/usr/man/man1 ]; then \ # mkdir -p $(d)/usr/share/man # mv $(d)/usr/man/man1/* $(d)/usr/share/man/man1/; \ # rm -rf $(d)/usr/man/; \ # fi mkdir -p $(d)/usr/share/man/man1 cp -p Misc/python.man $(d)/usr/share/man/man1/python$(VER).1 cp -p debian/pydoc.1 $(d)/usr/share/man/man1/pydoc$(VER).1 : # Symlinks to /usr/bin for some tools ln -sf ../lib/python$(VER)/pdb.py $(d)/usr/bin/pdb$(VER) cp -p debian/pdb.1 $(d)/usr/share/man/man1/pdb$(VER).1 : # versioned install only rm -f $(d)/usr/bin/{2to3,idle3,pydoc3,python3,python3-config} rm -f $(d)/usr/lib/pkgconfig/python3.pc : # Remove version information from the egg-info file mv $(d)/$(scriptdir)/lib-dynload/Python-3*.egg-info \ $(d)/$(scriptdir)/lib-dynload/Python.egg-info dh_installdirs -p$(p_lib) \ $(scriptdir)/config-$(VER)mu \ usr/share/doc : # install the shared library cp -p $(buildd_shared)/libpython$(VER)mu.so.1.0 $(d_lib)/usr/lib/ ln -sf libpython$(VER)mu.so.1.0 $(d_lib)/usr/lib/libpython$(VER)mu.so.1 ln -sf ../../libpython$(VER)mu.so \ $(d_lib)/$(scriptdir)/config-$(VER)mu/libpython$(VER)mu.so ln -sf libpython$(VER)mu.so \ $(d_lib)/$(scriptdir)/config-$(VER)mu/libpython$(VER).so ln -sf $(p_base) $(d_lib)/usr/share/doc/$(p_lib) ln -sf libpython$(VER)mu.so.1 $(d)/usr/lib/libpython$(VER)mu.so ifeq ($(with_interp),shared) : # install the statically linked runtime install -m755 $(buildd_static)/python $(d)/usr/bin/python$(VER)-static endif cp -p Tools/i18n/pygettext.py $(d)/usr/bin/pygettext$(VER) cp -p debian/pygettext.1 $(d)/usr/share/man/man1/pygettext$(VER).1 : # install the Makefile of the shared python build sed -e '/^OPT/s,-O3,-O2,' \ -e 's,^RUNSHARED *=.*,RUNSHARED=,' \ build-shared/Makefile > $(d)/$(scriptdir)/config-$(VER)mu/Makefile : # Move the binary and the minimal libraries into $(p_min). dh_installdirs -p$(p_min) \ etc/$(PVER) \ usr/bin \ usr/share/man/man1 \ $(scriptdir)/lib-dynload \ $(scriptdir)/config-$(VER)mu \ usr/include/python$(VER)mu DH_COMPAT=2 dh_movefiles -p$(p_min) --sourcedir=$(d) \ usr/bin/python$(VER) \ usr/bin/python$(VER)mu \ usr/share/man/man1/python$(VER).1 \ $(foreach i,$(MIN_MODS),$(scriptdir)/$(i).py) \ $(foreach i,$(MIN_PACKAGES),$(scriptdir)/$(i)) \ $(foreach i,$(MIN_ENCODINGS),$(scriptdir)/$(i)) \ $(scriptdir)/config-$(VER)mu/Makefile \ $(scriptdir)/site.py \ usr/include/python$(VER)mu/pyconfig.h # $(foreach i,$(MIN_EXTS),$(scriptdir)/lib-dynload/$(i).so) \ # usr/share/man/man1/python$(VER).1 \ ln -sf python$(VER)mu $(d_min)/usr/bin/python$(VER) : # symlinks for the "old" config directory name ln -sf config-$(VER)mu $(d_min)/$(scriptdir)/config rv=0; \ for i in $(MIN_EXTS); do \ if [ -f $(d)/$(scriptdir)/lib-dynload/$$i.so ]; then \ echo >&2 "extension $$i not mentioned in Setup.dist"; \ rv=1; \ fi; \ done; \ exit $$rv; : # Install sitecustomize.py. cp -p debian/sitecustomize.py $(d_min)/etc/$(PVER)/ dh_link -p$(p_min) /etc/$(PVER)/sitecustomize.py \ /$(scriptdir)/sitecustomize.py : # Move the static library and the header files into $(p_dev). # mv $(d)/usr/share/include/python$(VER)/* $(d)/usr/include/python$(VER)/. # rm -rf $(d)/usr/share/include dh_installdirs -p$(p_dev) \ usr/share/doc/python$(VER) \ $(scriptdir) \ $(scriptdir)/doc/html \ usr/include \ usr/lib cp -p Misc/HISTORY Misc/README.valgrind Misc/gdbinit \ debian/README.maintainers \ debian/test_results $(buildd_static)/pybench.log \ $(d_dev)/usr/share/doc/python$(VER)/ DH_COMPAT=2 dh_movefiles -p$(p_dev) --sourcedir=$(d) \ usr/lib/python$(VER)/config-$(VER)mu \ usr/include/python$(VER)mu \ usr/lib/libpython$(VER)mu.so \ usr/lib/pkgconfig/python-$(VER)*.pc \ usr/bin/python$(VER)*-config \ usr/lib/python$(VER)/distutils/command/wininst-*.exe cp -p $(buildd_shared)/libpython$(VER)mu-pic.a \ $(d_dev)/usr/lib/python$(VER)/config-$(VER)mu/ : # symlinks for the "old" include directory name ln -sf python$(VER)mu $(d_dev)/usr/include/python$(VER) ifeq ($(with_tk),yes) : # Move the Tkinter files into $(p_tk). dh_installdirs -p$(p_tk) \ $(scriptdir) \ usr/lib/python$(VER)/lib-dynload DH_COMPAT=2 dh_movefiles -p$(p_tk) --sourcedir=$(d) \ usr/lib/python$(VER)/lib-dynload/_tkinter*.so endif # : # The test framework into $(p_base), regression tests dropped DH_COMPAT=2 dh_movefiles -p$(p_base) --sourcedir=$(d) \ $(scriptdir)/test/{regrtest.py,support.py,__init__.py,pystone.py} rm -rf $(d)/$(scriptdir)/test rm -rf $(d)/$(scriptdir)/ctypes/test rm -rf $(d)/$(scriptdir)/bsddb/test rm -rf $(d)/$(scriptdir)/distutils/tests rm -rf $(d)/$(scriptdir)/email/test rm -rf $(d)/$(scriptdir)/importlib/test rm -rf $(d)/$(scriptdir)/json/tests rm -rf $(d)/$(scriptdir)/lib2to3/tests rm -rf $(d)/$(scriptdir)/sqlite3/test rm -rf $(d)/$(scriptdir)/distutils/tests rm -rf $(d)/$(scriptdir)/lib2to3/tests rm -rf $(d)/$(scriptdir)/tkinter/test rm -rf $(d)/$(scriptdir)/unittest/test : # IDLE mv $(d)/usr/bin/idle$(VER) $(d)/usr/bin/idle-python$(VER) rm -f $(d)/usr/lib/python$(VER)/idlelib/idle.bat dh_installdirs -p$(p_idle) \ usr/bin \ usr/share/man/man1 DH_COMPAT=2 dh_movefiles -p$(p_idle) \ usr/bin/idle-python$(VER) cp -p debian/idle-$(PVER).1 $(d_idle)/usr/share/man/man1/ : # Move the demos and tools into $(p_exam)'s doc directory dh_installdirs -p$(p_exam) \ usr/share/doc/python$(VER)/examples cp -rp Tools/* $(d_exam)/usr/share/doc/python$(VER)/examples/ rm -rf $(d_exam)/usr/share/doc/python$(VER)/examples/Tools/{buildbot,msi} : # XXX: We don't need rgb.txt, we'll use our own: rm -rf $(d_exam)/usr/share/doc/python$(VER)/examples/Tools/pynche/X : # Replace all '#!' calls to python with $(PY_INTERPRETER) : # and make them executable for i in `find debian -mindepth 3 -type f ! -name '*.dpatch'`; do \ sed '1s,#!.*python[^ ]*\(.*\),#! $(PY_INTERPRETER)\1,' \ $$i > $$i.temp; \ if cmp --quiet $$i $$i.temp; then \ rm -f $$i.temp; \ else \ mv -f $$i.temp $$i; \ chmod 755 $$i; \ echo "fixed interpreter: $$i"; \ fi; \ done : # Move the docs into $(p_base)'s /usr/share/doc/$(PVER) directory, : # all other packages only have a copyright file. dh_installdocs -p$(p_base) \ README Misc/NEWS Misc/ACKS ln -sf NEWS.gz $(d_base)/usr/share/doc/$(p_base)/changelog.gz dh_installdocs --all -N$(p_base) -N$(p_dev) -N$(p_dbg) -N$(p_lib) debian/README.Debian : # IDLE has its own changelogs, docs... dh_installchangelogs -p$(p_idle) Lib/idlelib/ChangeLog dh_installdocs -p$(p_idle) Lib/idlelib/{NEWS,README,TODO,extend}.txt mkdir -p $(d_idle)/usr/share/applications cp -p debian/idle.desktop \ $(d_idle)/usr/share/applications/idle-$(PVER).desktop : # those packages have own README.Debian's install -m 644 -p debian/README.$(p_base) \ $(d_base)/usr/share/doc/$(PVER)/README.Debian install -m 644 -p debian/README.$(p_idle) \ $(d_idle)/usr/share/doc/$(p_idle)/README.Debian ifeq ($(with_tk),yes) cp -p debian/README.Tk $(d_tk)/usr/share/doc/$(p_tk)/ endif : # The rest goes into $(p_base) mkdir -p $(d)/usr/lib/python3/dist-packages (cd $(d) && tar cf - .) | (cd $(d_base) && tar xpf -) rm -f $(d_base)/usr/bin/python : # Install menu icon dh_installdirs -p$(p_base) usr/share/pixmaps cp -p debian/pylogo.xpm $(d_base)/usr/share/pixmaps/$(PVER).xpm : # generate binfmt file mkdir -p $(d_min)/usr/share/binfmts $(buildd_static)/python debian/mkbinfmt.py $(PVER) \ > $(d_min)/usr/share/binfmts/$(PVER) : # desktop entry mkdir -p $(d_base)/usr/share/applications cp -p debian/$(PVER).desktop \ $(d_base)/usr/share/applications/$(PVER).desktop : # remove some things -find debian -name .cvsignore | xargs rm -f -find debian -name '*.py[co]' | xargs rm -f : # remove empty directories, when all components are in place -find debian ! -name lib-dynload ! -name dist-packages -type d -empty -delete : # install debug package rm -rf $(d)-dbg $(MAKE) -C $(buildd_debug) install DESTDIR=$(CURDIR)/$(d)-dbg dh_installdirs -p$(p_dbg) \ usr/bin \ usr/share/man/man1 \ $(scriptdir)/lib-dynload \ usr/include/$(PVER)dmu \ usr/lib/pkgconfig \ usr/share/doc/$(p_base) cp -p Misc/SpecialBuilds.txt $(d_dbg)/usr/share/doc/$(p_base)/ cp -p debian/$(PVER)-dbg.README.Debian \ $(d_dbg)/usr/share/doc/$(p_base)/README.debug cp -p $(buildd_debug)/python $(d_dbg)/usr/bin/$(PVER)dmu ln -sf python$(VER)dmu $(d_dbg)/usr/bin/$(PVER)-dbg sed '1s,#!.*python[^ ]*\(.*\),#! $(PY_INTERPRETER)-dbg\1,' \ $(d)-dbg/usr/bin/$(PVER)-config \ > $(d_dbg)/usr/bin/$(PVER)dmu-config chmod 755 $(d_dbg)/usr/bin/$(PVER)dmu-config ln -sf $(PVER)dmu-config $(d_dbg)/usr/bin/$(PVER)-dbg-config cp -p $(buildd_debug)/build/lib*/*.so \ $(d_dbg)/$(scriptdir)/lib-dynload/ cp -p $(buildd_shdebug)/libpython$(VER)dmu.so.1.0 $(d_dbg)/usr/lib/ ln -sf libpython$(VER)dmu.so.1.0 $(d_dbg)/usr/lib/libpython$(VER)dmu.so.1 ln -sf libpython$(VER)dmu.so.1 $(d_dbg)/usr/lib/libpython$(VER)dmu.so sed -e '/^Libs:/s,-lpython$(VER),-lpython$(VER)dmu,' \ -e '/^Cflags:/s,python$(VER),python$(VER)_d,' \ $(d)-dbg/usr/lib/pkgconfig/python-$(VER).pc \ > $(d_dbg)/usr/lib/pkgconfig/python-$(VER)-dbg.pc ifneq ($(with_tk),yes) rm -f $(d_dbg)/$(scriptdir)/lib-dynload/_tkinter*.so rm -f $(d_dbg)/usr/lib/debug/$(scriptdir)/lib-dynload/_tkinter*.so endif ifneq ($(with_gdbm),yes) rm -f $(d_dbg)/$(scriptdir)/lib-dynload/_gdbm*.so rm -f $(d_dbg)/usr/lib/debug/$(scriptdir)/lib-dynload/_gdbm*.so endif cp -a $(d)-dbg/$(scriptdir)/config-$(VER)dmu $(d_dbg)/$(scriptdir)/ ln -sf ../../libpython$(VER)dmu.so \ $(d_dbg)/$(scriptdir)/config-$(VER)dmu/libpython$(VER)dmu.so ln -sf libpython$(VER)dmu.so \ $(d_dbg)/$(scriptdir)/config-$(VER)dmu/libpython$(VER).so ln -sf libpython$(VER)dmu.a \ $(d_dbg)/$(scriptdir)/config-$(VER)dmu/libpython$(VER).a for i in $(d_dev)/usr/include/$(PVER)mu/*; do \ i=$$(basename $$i); \ case $$i in pyconfig.h) continue; esac; \ ln -sf ../$(PVER)mu/$$i $(d_dbg)/usr/include/$(PVER)dmu/$$i; \ done cp -p $(buildd_debug)/pyconfig.h $(d_dbg)/usr/include/$(PVER)dmu/ ln -sf $(PVER).1.gz $(d_dbg)/usr/share/man/man1/$(PVER)-dbg.1.gz : # symlinks for the "old" include / config directory names ln -sf python$(VER)dmu $(d_dbg)/usr/include/python$(VER)_d ln -sf config-$(VER)dmu $(d_dbg)/$(scriptdir)/config_d for i in debian/*.overrides; do \ b=$$(basename $$i .overrides); \ install -D -m 644 $$i debian/$$b/usr/share/lintian/overrides/$$b; \ done touch stamps/stamp-install # Build architecture-independent files here. binary-indep: $(install_target) $(build_target) stamps/stamp-build-doc stamps/stamp-control dh_testdir -i dh_testroot -i : # $(p_doc) package dh_installdirs -p$(p_doc) \ usr/share/doc/$(p_base) \ usr/share/doc/$(p_doc) dh_installdocs -p$(p_doc) cp -a Doc/build/html $(d_doc)/usr/share/doc/$(p_base)/ rm -f $(d_doc)/usr/share/doc/$(p_base)/html/_static/jquery.js dh_link -p$(p_doc) \ /usr/share/doc/$(p_base)/html /usr/share/doc/$(p_doc)/html \ /usr/share/javascript/jquery/jquery.js /usr/share/doc/$(p_base)/html/_static/jquery.js : # devhelp docs python debian/pyhtml2devhelp.py \ $(d_doc)/usr/share/doc/$(p_base)/html index.html $(VER) \ > $(d_doc)/usr/share/doc/$(p_base)/html/$(PVER).devhelp gzip -9v $(d_doc)/usr/share/doc/$(p_base)/html/$(PVER).devhelp dh_link -p$(p_doc) \ /usr/share/doc/$(p_base)/html /usr/share/devhelp/books/$(PVER) dh_installdebconf -i $(dh_args) dh_installexamples -i $(dh_args) dh_installmenu -i $(dh_args) -dh_icons -i $(dh_args) || dh_iconcache -i $(dh_args) dh_installchangelogs -i $(dh_args) dh_link -i $(dh_args) dh_compress -i $(dh_args) -X.py -X.cls -X.css -X.txt -X.json -X.js -Xobjects.inv -Xgdbinit dh_fixperms -i $(dh_args) : # make python scripts starting with '#!' executable for i in `find debian -mindepth 3 -type f ! -name '*.dpatch' ! -perm 755`; do \ if head -1 $$i | grep -q '^#!'; then \ chmod 755 $$i; \ echo "make executable: $$i"; \ fi; \ done -find $(d_doc) -name '*.txt' -perm 755 -exec chmod 644 {} \; dh_installdeb -i $(dh_args) dh_gencontrol -i $(dh_args) dh_md5sums -i $(dh_args) dh_builddeb -i $(dh_args) # Build architecture-dependent files here. binary-arch: build install dh_testdir -a dh_testroot -a # dh_installdebconf -a dh_installexamples -a dh_installmenu -a -dh_icons -a || dh_iconcache -a # dh_installmime -a dh_installchangelogs -a for i in $(p_dev) $(p_dbg) $(p_lib); do \ rm -rf debian/$$i/usr/share/doc/$$i; \ ln -s $(p_base) debian/$$i/usr/share/doc/$$i; \ done -find debian ! -perm -200 -print -exec chmod +w {} \; ifneq ($(with_tk),yes) rm -f $(d_base)/$(scriptdir)/lib-dynload/_tkinter*.so endif ifneq ($(with_gdbm),yes) rm -f $(d_base)/$(scriptdir)/lib-dynload/_gdbm*.so endif dh_strip -a -N$(p_dbg) -Xdebug -Xdbg --dbg-package=$(p_dbg) cp Tools/gdb/libpython.py $(d_dbg)/usr/lib/debug/usr/bin/$(PVER)mu-gdb.py ln -sf $(PVER)-gdb.py $(d_dbg)/usr/lib/debug/usr/bin/$(PVER)-dbg-gdb.py ln -sf ../bin/$(PVER)mu-gdb.py \ $(d_dbg)/usr/lib/debug/usr/lib/lib$(PVER)mu.so.1.0-gdb.py ln -sf ../bin/$(PVER)mu-gdb.py \ $(d_dbg)/usr/lib/lib$(PVER)dmu.so.1.0-gdb.py dh_link -a dh_compress -a -X.py dh_fixperms -a : # make python scripts starting with '#!' executable for i in `find debian -mindepth 3 -type f ! -name '*.dpatch' ! -perm 755`; do \ if head -1 $$i | grep -q '^#!'; then \ chmod 755 $$i; \ echo "make executable: $$i"; \ fi; \ done dh_makeshlibs -p$(p_lib) -V '$(p_lib)' dh_makeshlibs -p$(p_dbg) -V '$(p_dbg)' # don't include the following symbols, found in extensions # which either can be built as builtin or extension. sed -ri \ -e '/^ (PyInit_|_add_one_to_index|asdl_)/d' \ -e '/^ (PyExpat_XML_|PyExpat_Xml)/d' \ -e '/^ (ffi_type_|_ctypes_)/d' \ $(d_lib)/DEBIAN/symbols $(d_dbg)/DEBIAN/symbols dh_installdeb -a dh_shlibdeps -a dh_gencontrol -a dh_md5sums -a dh_builddeb -a # rules to patch the unpacked files in the source directory # --------------------------------------------------------------------------- # various rules to unpack addons and (un)apply patches. # - patch / apply-patches # - unpatch / reverse-patches patchdir = debian/patches glibc_version := $(shell dpkg -s locales | awk '/^Version:/ {print $$2}') broken_utimes := $(shell dpkg --compare-versions $(glibc_version) lt 2.3.5 && echo yes || echo no) $(patchdir)/series: $(patchdir)/series.in cpp -E \ -D$(distribution) \ $(if $(filter $(broken_utimes),yes),-DBROKEN_UTIMES) \ -Darch_os_$(DEB_HOST_ARCH_OS) -Darch_$(DEB_HOST_ARCH) \ -o - $(patchdir)/series.in \ | egrep -v '^(#.*|$$)' > $(patchdir)/series patch-stamp: stamps/stamp-patch patch: stamps/stamp-patch stamps/stamp-patch: $(patchdir)/series dh_testdir QUILT_PATCHES=$(patchdir) quilt push -a || test $$? = 2 rm -rf autom4te.cache configure autoconf mkdir -p stamps echo ""; echo "Patches applied in this version:" > stamps/pxx for i in $$(cat $(patchdir)/series); do \ echo ""; echo "$$i:"; \ sed -n 's/^# *DP: */ /p' $(patchdir)/$$i; \ done >> stamps/pxx mv stamps/pxx $@ reverse-patches: unpatch unpatch: QUILT_PATCHES=$(patchdir) quilt pop -a -R || test $$? = 2 rm -f stamps/stamp-patch $(patchdir)/series rm -rf configure autom4te.cache update-patches: $(patchdir)/series export QUILT_PATCHES=$(patchdir); \ export QUILT_REFRESH_ARGS="--no-timestamps --no-index -pab"; \ export QUILT_DIFF_ARGS="--no-timestamps --no-index -pab"; \ while quilt push; do quilt refresh; done binary: binary-indep binary-arch .PHONY: control-file configure build clean binary-indep binary-arch binary install # Local Variables: # mode: makefile # end: