perl/debian/config.debian

247 lines
7.9 KiB
Bash

#!/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