diff options
Diffstat (limited to 'debian/config.debian')
-rw-r--r-- | debian/config.debian | 246 |
1 files changed, 246 insertions, 0 deletions
diff --git a/debian/config.debian b/debian/config.debian new file mode 100644 index 0000000..c425499 --- /dev/null +++ b/debian/config.debian @@ -0,0 +1,246 @@ +#!/bin/bash + +eval $(echo '#include "./patchlevel.h" +SETver=PERL_REVISION.PERL_VERSION; +SETsubver= PERL_SUBVERSION' | gcc -E -DPERL_PATCHLEVEL_H_IMPLICIT - \ + | sed -n '/^SET/{s///;s/ //gp;}') + +fullver="$ver.$subver" +nextver="$ver."$(($subver+1)) +ccflags=-DDEBIAN +ldflags= +host_arch=${DEB_HOST_ARCH:-$(dpkg-architecture -qDEB_HOST_ARCH)} +host_arch_cpu=${DEB_HOST_ARCH_CPU:-$(dpkg-architecture -qDEB_HOST_ARCH_CPU)} +host_gnu_type=${DEB_HOST_GNU_TYPE:-$(dpkg-architecture -qDEB_HOST_GNU_TYPE)} +build_gnu_type=${DEB_BUILD_GNU_TYPE:-$(dpkg-architecture -qDEB_BUILD_GNU_TYPE)} +optimize=-O2 +debugging=-g + +archtriplet=${DEB_HOST_MULTIARCH:-$(dpkg-architecture -qDEB_HOST_MULTIARCH)} + +# this goes in config.h to make perl -V output reproducible +PERL_BUILD_DATE=$(LC_ALL=C date '+%b %e %Y %T' --utc -d "$(dpkg-parsechangelog | sed -n -e 's/^Date: //p')") + +case "$1" in + --static) # static perl + build_type=static + opts="-Uuseshrplib -Dotherlibdirs=\"/usr/lib/$archtriplet/perl-base\"";; + + --debug) # debugperl + build_type=debug + debugging=both # add -DDEBUGGING + opts="-Uuseshrplib";; + + --shared) # shared library + build_type=shared + opts="-Duseshrplib -Dlibperl=libperl.so.$fullver";; + + --version) + exec echo $ver;; + + --full-version) + exec echo $fullver;; + + --next-version) + exec echo $nextver;; + + *) echo "$0: need --shared, --static, or --debug option" + exit 2;; +esac + +case "$host_arch_cpu:$build_type" in + sh4:*) # required to correctly handle floating point on sh4 + ccflags="$ccflags -mieee";; + + m68k:shared) # work around an optimiser bug + ccflags="$ccflags -fno-regmove";; +esac + +case ",$DEB_BUILD_OPTIONS," in + *[,\ ]noopt[,\ ]*) + optimize="$optimize${optimize:+ }-O0";; +esac + +cc=${CC:-${host_gnu_type}-gcc} +cpp=${CPP:-${host_gnu_type}-cpp} +ld=${LD:-${host_gnu_type}-gcc} + +if which dpkg-buildflags >/dev/null 2>&1; then + ccflags="$ccflags $(dpkg-buildflags --get CPPFLAGS)" + ccflags="$ccflags $(dpkg-buildflags --get CFLAGS)" + ldflags="$ldflags $(dpkg-buildflags --get LDFLAGS)" +fi + +mkdir build-$build_type +cd build-$build_type + +# post-configure tweaks +cp ../debian/config.over . + +if [ "$build_gnu_type" = "$host_gnu_type" ] +then + # native builds + # need bash when sourcing config.over + eval /bin/bash ../Configure \ + -Dmksymlinks \ + -Dusethreads \ + -Duselargefiles \ + -Dcc=$cc \ + -Dcpp=$cpp \ + -Dld=$ld \ + -Dccflags=\'$ccflags\' \ + -Dldflags=\'$ldflags\' \ + -Dlddlflags=\'-shared $ldflags\' \ + -Dcccdlflags=-fPIC \ + -Darchname=$host_gnu_type \ + -Dprefix=/usr \ + -Dprivlib=/usr/share/perl/$ver \ + -Darchlib=/usr/lib/$archtriplet/perl/$ver \ + -Dvendorprefix=/usr \ + -Dvendorlib=/usr/share/perl5 \ + -Dvendorarch=/usr/lib/$archtriplet/perl5/$ver \ + -Dsiteprefix=/usr/local \ + -Dsitelib=/usr/local/share/perl/$fullver \ + -Dsitearch=/usr/local/lib/$archtriplet/perl/$fullver \ + -Dman1dir=/usr/share/man/man1 \ + -Dman3dir=/usr/share/man/man3 \ + -Dsiteman1dir=/usr/local/man/man1 \ + -Dsiteman3dir=/usr/local/man/man3 \ + -Duse64bitint \ + -Dman1ext=1 \ + -Dman3ext=3perl \ + -Dpager=/usr/bin/sensible-pager \ + -Uafs \ + -Ud_csh \ + -Ud_ualarm \ + -Uusesfio \ + -Uusenm \ + -Ui_libutil \ + -Ui_xlocale \ + -Uversiononly \ + -DDEBUGGING=$debugging \ + -Doptimize=\"$optimize\" \ + $extra_path \ + -dEs $opts + + # note about the debian/cross files for the build log + crossconfig=../debian/cross/${host_arch}/config.sh.static + if [ "$build_type" = "static" ]; then + if [ -f $crossconfig ]; then + if ! diff --ignore-matching-lines="cf_time" \ + --ignore-matching-lines="Configuration time" \ + --ignore-matching-lines="Extracted from Debian package" \ + $crossconfig config.sh >/dev/null + then + echo "Note: source package config.sh for cross building differs from generated one" + echo "Note: consider refreshing with debian/cross/extract-config-sh after the build" + diff -u0 $crossconfig config.sh | head -100 + echo -------------------------------------------------- + else + echo "Note: source package config.sh for cross building is up to date with the generated one (good!)" + fi + else + echo "Note: no source package config.sh for cross building" + echo "Note: consider including it with debian/cross/extract-config-sh after the build" + fi + fi + + # for the Configure -S call below + crossargs= +else + # cross builds + + # find a ready made config.sh, currently in debian/cross/<arch> + basedir=../debian/cross/${host_arch} + baseconfig=${basedir}/config.sh.static + if [ ! -f $baseconfig ]; then + echo "need $baseconfig for cross build!" 1>&2 + exit 1 + fi + + # check for a new upstream version, invalidating old config.sh files + crossversion=$(sed -n "s/^version='\(.*\)'/\1/ p" $baseconfig) + if [ "$fullver" != "$crossversion" ]; then + echo "Fatal: need $baseconfig for cross build but it needs refreshing from $crossversion to $fullver!" 1>&2 + echo "To fix: make a native build and run debian/cross/extract-config-sh on the results" 1>&2 + echo " (or fix $baseconfig by hand)" 1>&2 + exit 1 + fi + + # arch-specific REFRESH files can be used to invalidate the old config.sh + # files regardless of the version + # there can be a comment inside the REFRESH file + # example use case: changed Configure parameters + if [ -e $basedir/REFRESH ]; then + echo "Fatal: need $baseconfig for cross build but it needs refreshing!" 1>&2 + cat $basedir/REFRESH 1>&2 + echo "To fix: make a native build and run debian/cross/extract-config-sh on the results" 1>&2 + echo " (or fix $baseconfig by hand)" 1>&2 + echo "Then remove $basedir/REFRESH" 1>&2 + exit 1 + fi + + # Next, ask Configure to compile a build system miniperl and + # generate_uudmap executable in host/ + # + # It's tempting to use the system perl for this, but that fails + # when building extensions because it tries to dynamically load + # XS modules from lib/, particularly as <*> uses File::Glob on + # full perls (but not miniperl) + if [ ! -x ../build-miniperl ]; then + echo "Cross build: making a native miniperl for the build process" + cd .. + ./Configure -dE -Dusecrosscompile + # host/ gets cleaned between builds by 'make distclean', so + # stash the results + cp host/miniperl build-miniperl + cp host/generate_uudmap build-generate_uudmap + cd build-$build_type + fi + + # create symlinks for build directory + # we can't seem to make Configure create these symlinks without probing + # so make a separate mksymlinks helper for now + sed '/^\?/d' ../regen-configure/U/perl/Mksymlinks.U > ../mksymlinks + src=$(pwd)/.. + mkdir UU + cd UU + src="$src" lns="ln -s" issymlink="test -h" bash ../../mksymlinks 4>&2 + cd .. + + # override configuration for cross building + + # Actually use the old config.sh files, + # removing the absolute build path in 'src' + sed 's/^src=.*/src=./' $baseconfig > ./config.sh + + if [ "$build_type" = "static" ]; then + # notes for the build log + echo "Cross build: recycling old probed configuration from $baseconfig" + grep '^cf_time' $baseconfig + md5sum $baseconfig + # debian/cross/extract-config-sh appends a comment so show that + grep "Extracted from Debian package version" $baseconfig + else + patchconfig=${basedir}/config.sh.$build_type.patch + if [ ! -f "$patchconfig" ]; then + echo "need $patchconfig for cross build!" 1>&2 + exit 1 + fi + patch config.sh < $patchconfig + echo "Cross build: recycling old probed configuration from $patchconfig" + md5sum $patchconfig + fi + + crossargs="-Dusecrosscompile \ + -Dhostgenerate=../build-generate_uudmap \ + -Dhostperl=../build-miniperl \ + -Dperl=/usr/bin/perl" +fi + +# now continue with extracting Makefile et al. +/bin/bash ./Configure -S $crossargs + +# append PERL_BUILD_DATE before the last #endif in config.h +# massive quoting problems prevent passing this to Configure +sed -i "\$i #define PERL_BUILD_DATE \"$PERL_BUILD_DATE\"" config.h |