#!/bin/sh ## ## mod_perl.config.sh -- mod_perl configuration transformation script ## Written by Ralf S. Engelschall ## DIFS=' ' # defaults config_file='mod_perl.config' build_type='OBJ' display_prefix='' tmpfile1=".tmp.$$.1" tmpfile2=".tmp.$$.2" # # parse argument line # prev='' OIFS="$IFS" IFS="$DIFS" for option do if [ ".$prev" != . ]; then eval "$prev=\$option" prev="" continue fi case "$option" in -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg='' ;; esac case "$option" in --config-file=*) config_file="$optarg" ;; --config-override=*) config_override="$optarg" ;; --build-type=*) build_type="$optarg" ;; --display-prefix=*) display_prefix="$optarg" ;; * ) echo "$0:Error: invalid option '$option'" 1>&2; exit 1 ;; esac done IFS="$OIFS" if [ ".$prev" != . ]; then echo "$0:Error: missing argument to --`echo $prev | sed 's/_/-/g'`" 1>&2 exit 1 fi # # import parameters from config file into # own namespace to avoid conflicts with src/Configure # (cat $config_file; echo "$config_override" | sed -e 's:,[ ]*:,:' | tr "," "\n") >$tmpfile1 vars="`egrep '^[A-Z0-9_]*[ ]*=' $tmpfile1 | sed -e 's:^\([A-Z0-9_]*\).*:\1:'`" OIFS="$IFS" IFS="$DIFS" for var in $vars; do egrep "^${var}[ ]*=" $tmpfile1 | tail -1 >$tmpfile2 val="`sed -e 's:^[A-Z0-9_]*[ ]*=[ ]*::' <$tmpfile2`" eval "param_${var}=\"${val}\"" done IFS="$OIFS" # # verbose message # echo "$display_prefix id: mod_perl/$param_MOD_PERL_VERSION" 1>&2 # # determine Perl interpreter and version # libperl="$param_LIBPERL" if [ ".$libperl" = .DEFAULT ]; then perl_libperl="" else perl_libperl=" -- $libperl" fi perl_interp="$param_PERL" if [ ".$perl_interp" = .DEFAULT ]; then if [ ".$PERL" != . ]; then perl_interp="$PERL" else perl_interp="" fi fi if [ ".$perl_interp" = . ]; then OIFS=$IFS IFS=':' for my_dir in $PATH; do for my_exe in perl5 perl; do if test -f "$my_dir/$my_exe"; then if test -x "$my_dir/$my_exe"; then perl_interp="$my_dir/$my_exe" break 2 fi fi done done IFS="$OIFS" perl_interp="`echo $perl_interp | sed -e 's://:/:'`" fi perl_version="`$perl_interp -e '$^V ? printf("v%vd", $^V) : print($]);'`" os_version="`$perl_interp -e 'print $^O;'`" # # verbose message # echo "$display_prefix id: Perl/$perl_version ($os_version) [$perl_interp]" 1>&2 # # determine build tools and flags # if test -f './modules/perl/perl_config'; then perl_config='./modules/perl/perl_config' else perl_config='./perl_config' fi perl_cc="`$perl_config 'cc'`" perl_ccflags="`$perl_config 'ccflags'`" perl_optimize="`$perl_config 'optimize'`" perl_cccdlflags="`$perl_config 'cccdlflags'`" perl_ld="`$perl_config 'ld'`" perl_ldflags="`$perl_config 'ldflags'`" perl_lddlflags="`$perl_config 'lddlflags'`" perl_dlext="`$perl_config 'dlext'`" case "$os_version" in aix*) case "$perl_cc" in *gcc*) XLINKER="-Xlinker " ;; esac perl_lddlflags="$perl_lddlflags $XLINKER-bI:\$(APACHELIBEXEC)/httpd.exp" ;; darwin*) # OS X has .bundle's, .so's and .dylib's, but we need to normalize # to .so, so keep it simple, and blindly normalize perl_dlext="`echo $perl_dlext | sed -e's/bundle/so/' | sed -e's/dylib/so/'`" ;; cygwin*) perl_ld="gcc -shared" ;; * ) ;; esac cat >$tmpfile2 <<'EOT' use Config; #my $embed_pm = '-MApache::ExtUtils=ldopts'; my $embed_pm = '-MExtUtils::Embed'; my $ldopts = `$^X $embed_pm -e ldopts -- -std @ARGV`; # can't pass ccdlflags to ld, which is what happens in this context. however # we still need the libraries themselves. I think this should be correct for # other systems, but it bites us on BSD/OS 4.x $ldopts =~ s@$Config{ccdlflags}@@ if ($^O eq 'bsdos'); $ldopts =~ s,(-bE:)(perl\.exp),$1$Config{archlibexp}/CORE/$2, if($^O eq "aix"); #replace -Wl args meant for cc with args for ld if ($ARGV[0] eq "DSO" and $^O eq "hpux" and $Config{ld} =~ /ld$/) { while ($ldopts =~ s/-Wl,(\S+)/$1/) { my $cp = $1; (my $repl = $cp) =~ s/,/ /g; $ldopts =~ s/\Q$cp/$repl/; } } # add httpd.dll for cygwin if($ARGV[0] eq 'DSO' && $^O eq cygwin) { chomp $ldopts; $ldopts .= join (' ', '', '-Wl,--out-implib=libperl.dll.a', '-Wl,--export-all-symbols', '-Wl,--enable-auto-import', '-Wl,--stack,8388608', '-Wl,--enable-auto-image-base', '-lhttpd'); } print $ldopts; EOT perl_libs="`$perl_interp $tmpfile2 $build_type`" if test $build_type = OBJ then case "$os_version" in aix*) perl_libs="$perl_libs $XLINKER-bE:\$(SRCDIR)/modules/perl/mod_perl.exp" ;; * ) ;; esac fi perl_inc="`$perl_interp -MConfig -e 'print "$Config{archlibexp}/CORE"'`" perl_privlibexp="`$perl_interp -MConfig -e 'print $Config{privlibexp}'`" perl_archlibexp="`$perl_interp -MConfig -e 'print $Config{archlibexp}'`" perl_xsinit="$perl_interp -MExtUtils::Embed -e xsinit" perl_xsubpp="$perl_interp ${perl_privlibexp}/ExtUtils/xsubpp -nolinenumbers -typemap ${perl_privlibexp}/ExtUtils/typemap" perl_ar="`$perl_interp -MConfig -e 'print $Config{ar}'`" perl_ranlib=`$perl_interp -MConfig -e 'print $Config{ranlib}'` # # determine static objects # perl_static_exts="$param_PERL_STATIC_EXTS" perl_static_ar="$param_PERL_STATIC_AR" perl_static_srcs="$param_PERL_STATIC_SRCS" perl_static_objs="`echo $param_PERL_STATIC_SRCS | sed -e 's:\.c:.o:g'`" perl_static_objs_pic="`echo $param_PERL_STATIC_SRCS | sed -e 's:\.c:.lo:g'`" # # determine defines # perl_defs='' perl_defs="$perl_defs -DMOD_PERL_VERSION=\\\"$param_MOD_PERL_VERSION\\\"" perl_defs="$perl_defs -DMOD_PERL_STRING_VERSION=\\\"mod_perl/$param_MOD_PERL_VERSION\\\"" if [ ".$param_MOD_PERL_PREFIX" != . ]; then perl_defs="$perl_defs -DMOD_PERL_PREFIX=\\\"$param_MOD_PERL_PREFIX\\\"" fi perl_defs="$perl_defs" OIFS="$IFS" IFS="$DIFS" for hook in \ DISPATCH CHILD_INIT CHILD_EXIT POST_READ_REQUEST TRANS HEADER_PARSER \ ACCESS AUTHEN AUTHZ TYPE FIXUP HANDLER LOG INIT CLEANUP STACKED_HANDLERS \ METHOD_HANDLERS DIRECTIVE_HANDLERS SECTIONS RESTART SSI TRACE THREADS; do eval "val=\$param_PERL_${hook}" case $hook in TRACE|THREADS ) if [ ".$val" = .yes ]; then perl_defs="$perl_defs -DPERL_${hook}=1" fi ;; * ) if [ ".$val" = .no ]; then perl_defs="$perl_defs -DNO_PERL_${hook}=1" fi ;; esac done IFS="$OIFS" # # output information as Makefile parameters # echo "PERL=$perl_interp" echo "PERL_CC=$perl_cc" echo "PERL_OPTIMIZE=$perl_optimize" echo "PERL_CCFLAGS=$perl_ccflags" echo "PERL_CCCDLFLAGS=$perl_cccdlflags" echo "PERL_DEFS=$perl_defs" echo "PERL_INC=$perl_inc" echo "PERL_LD=$perl_ld" echo "PERL_LDFLAGS=$perl_ldflags" echo "PERL_LDDLFLAGS=$perl_lddlflags" echo "PERL_DLEXT=$perl_dlext" echo "PERL_LIBS=$perl_libs $perl_static_ar" echo "PERL_XSINIT=$perl_xsinit" echo "PERL_XSUBPP=$perl_xsubpp" echo "PERL_AR=$perl_ar" echo "PERL_RANLIB=$perl_ranlib" echo "PERL_STATIC_EXTS=$perl_static_exts" echo "PERL_STATIC_AR=$perl_static_ar" echo "PERL_STATIC_SRCS=$perl_static_srcs" echo "PERL_STATIC_OBJS=$perl_static_objs" echo "PERL_STATIC_OBJS_PIC=$perl_static_objs_pic" echo "PERL_SSI=$param_PERL_SSI" # # cleanup # rm -f $tmpfile1 $tmpfile2