summaryrefslogtreecommitdiff
path: root/debian/config.debian
diff options
context:
space:
mode:
Diffstat (limited to 'debian/config.debian')
-rw-r--r--debian/config.debian246
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