From: Vadim Konovalov Date: Mon, 28 May 2007 01:23:46 +0000 (+0400) Subject: linux arm cross-compilation X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=8ed6d636bbf576aca711d971b9e9893460c96ecc;p=p5sagit%2Fp5-mst-13.2.git linux arm cross-compilation Message-ID: <4659F6E2.3090805@vkonovalov.ru> with adjustments to the MANIFEST p4raw-id: //depot/perl@31287 --- diff --git a/Cross/Makefile-cross.SH b/Cross/Makefile-cross.SH new file mode 100755 index 0000000..c910a9b --- /dev/null +++ b/Cross/Makefile-cross.SH @@ -0,0 +1,1412 @@ +#! /bin/sh + +# This file is used to create generic Makefile for cross-compile +# (borrowed from Makefile.SH) +# (now only small changes are done to establish cross-compilation) +# miniperl removed from here, as this is built on HOST + +Makefile=Makefile-cross-$CROSS_NAME + +. Cross/config-${CROSS_NAME}.sh + +# H.Merijn Brand [17 Feb 2004] +# This comment is just to ensure that Configure will find variables that +# are removed/replaced in patches on blead, but are still needed in the +# 5.8.x, 5.6.x and 5.005.x maintainance tracks. +# metaconfig -m will scan all .SH files on this level (not deeper), and +# not in x2p and other subfolders. This file is as good as any .SH +# patch references +# #22227 $baserev +# #22302 $yacc $byacc + +# H.Merijn Brand [30 Oct 2004] +# Mentioned for the same reason for future reference +# #23434 $d_strlcat $d_strlcpy + +: This forces SH files to create target in same directory as SH file. +: This is so that make depend always knows where to find SH derivatives. +case "$0" in +*/*) cd `expr X$0 : 'X\(.*\)/'` ;; +esac + +case "$d_dosuid" in +*define*) suidperl='suidperl' ;; +*) suidperl='';; +esac + +linklibperl='$(LIBPERL)' +shrpldflags='$(LDDLFLAGS)' +ldlibpth='' +DPERL_EXTERNAL_GLOB='-DPERL_EXTERNAL_GLOB' +case "$useshrplib" in +true) + # Prefix all runs of 'miniperl' and 'perl' with + # $ldlibpth so that ./perl finds *this* shared libperl. + case "$LD_LIBRARY_PATH" in + '') + ldlibpth="LD_LIBRARY_PATH=`pwd`";; + *) + ldlibpth="LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}";; + esac + + pldlflags="$cccdlflags" + static_target='static_pic' + case "${osname}${osvers}" in + next4*) + ld=libtool + lddlflags="-dynamic -undefined warning -framework System \ + -compatibility_version 1 -current_version $patchlevel \ + -prebind -seg1addr 0x27000000 -install_name \$(shrpdir)/\$@" + ;; + rhapsody*|darwin*) + shrpldflags="${ldflags} -dynamiclib \ + -compatibility_version \ + ${api_revision}.${api_version}.${api_subversion} \ + -current_version \ + ${revision}.${patchlevel}.${subversion} \ + -install_name \$(shrpdir)/\$@" + ;; + cygwin*) + linklibperl="-lperl" + ;; + sunos*) + linklibperl="-lperl" + ;; + netbsd*|freebsd[234]*|openbsd*|dragonfly*) + linklibperl="-L. -lperl" + ;; + interix*) + linklibperl="-L. -lperl" + shrpldflags="$shrpldflags -Wl,--image-base,0x57000000" + ;; + linux*) + shrpldflags="$shrpldflags $ldflags $perllibs $cryptlib" + ;; + aix*) + shrpldflags="-H512 -T512 -bhalt:4 -bM:SRE -bE:perl.exp" + case "$osvers" in + 3*) shrpldflags="$shrpldflags -e _nostart" + ;; + *) shrpldflags="$shrpldflags -b noentry" + ;; + esac + shrpldflags="$shrpldflags $ldflags $perllibs $cryptlib" + linklibperl="-L $archlibexp/CORE -L `pwd | sed 's/\/UU$//'` -lperl" + ;; + hpux*) + linklibperl="-L `pwd | sed 's/\/UU$//'` -Wl,+s -Wl,+b$archlibexp/CORE -lperl" + ;; + os390*) + shrpldflags='-W l,XPLINK,dll' + linklibperl='libperl.x' + DPERL_EXTERNAL_GLOB='' + ;; + esac + case "$ldlibpthname" in + '') ;; + *) + case "$osname" in + os2) + ldlibpth='' + ;; + *) + eval "ldlibpth=\"$ldlibpthname=`pwd`:\$$ldlibpthname\"" + ;; + esac + # Strip off any trailing :'s + ldlibpth=`echo $ldlibpth | sed 's/:*$//'` + ;; + esac + + case "$ldlibpth" in + # Protect any spaces + *" "*) ldlibpth=`echo $ldlibpth|sed 's/ /\\\\ /g'` ;; + esac + + case "$osname" in + linux) + # If there is a pre-existing $libperl from a previous + # installation, Linux needs to use LD_PRELOAD to + # override the LD_LIBRARY_PATH setting. See the + # INSTALL file, under "Building a shared perl library". + # If there is no pre-existing $libperl, we don't need + # to do anything further. + if test -f $archlib/CORE/$libperl; then + rm -f preload + cat <<'EOT' > preload +#! /bin/sh +lib=$1 +shift +test -r $lib && export LD_PRELOAD="$lib $LD_PRELOAD" +exec "$@" +EOT + chmod 755 preload + ldlibpth="$ldlibpth `pwd`/preload `pwd`/$libperl" + fi + ;; + os390) test -f /bin/env && ldlibpth="/bin/env $ldlibpth" + ;; + esac + + ;; + +*) pldlflags='' + static_target='static' + ;; +esac + +: Prepare dependency lists for Makefile. +dynamic_list=' ' +extra_dep='' +for f in $dynamic_ext; do + : the dependency named here will never exist + base=`echo "$f" | sed 's/.*\///'` + this_target="lib/auto/$f/$base.$dlext" + dynamic_list="$dynamic_list $this_target" + + : Parallel makes reveal that we have some interdependencies + case $f in + Math/BigInt/FastCalc) extra_dep="$extra_dep +$this_target: lib/auto/List/Util/Util.$dlext" ;; + Unicode/Normalize) extra_dep="$extra_dep +$this_target: uni.data" ;; + esac +done + +static_list=' ' +for f in $static_ext; do + base=`echo "$f" | sed 's/.*\///'` + static_list="$static_list lib/auto/$f/$base\$(LIB_EXT)" +done + +nonxs_list=' ' +for f in $nonxs_ext; do + base=`echo "$f" | sed 's/.*\///'` + nonxs_list="$nonxs_list ext/$f/pm_to_blib" +done + +echo "Extracting $Makefile (with variable substitutions)" +$spitshell >$Makefile <>$Makefile <>$Makefile <>$Makefile <<'!NO!SUBS!' + +XCOREDIR = ./xlib/$(CROSS_NAME)/CORE + +CONFIGPM = xlib/$(CROSS_NAME)/Config.pm xlib/$(CROSS_NAME)/Config_heavy.pl + +private = preplibrary $(CONFIGPM) $(CROSS_LIB)/Config.pod + +shextract = Makefile cflags config.h makeaperl makedepend \ + makedir myconfig writemain pod/Makefile + +# Files to be built with variable substitution after miniperl is +# available. Dependencies handled manually below (for now). + +pl = pod/pod2html.PL pod/pod2latex.PL pod/pod2man.PL pod/pod2text.PL \ + pod/pod2usage.PL pod/podchecker.PL pod/podselect.PL + +# lib/lib.pm is not listed here because it has a rule of its own. +plextract = pod/pod2html pod/pod2latex pod/pod2man pod/pod2text \ + pod/pod2usage pod/podchecker pod/podselect + +addedbyconf = UU $(shextract) $(plextract) lib/lib.pm pstruct + +# Unicode data files generated by mktables +unidatafiles = lib/unicore/Canonical.pl lib/unicore/Exact.pl \ + lib/unicore/Properties lib/unicore/Decomposition.pl \ + lib/unicore/CombiningClass.pl lib/unicore/Name.pl lib/unicore/PVA.pl + +# Directories of Unicode data files generated by mktables +unidatadirs = lib/unicore/To lib/unicore/lib + +h1 = EXTERN.h INTERN.h XSUB.h av.h xconfig.h cop.h cv.h dosish.h +h2 = embed.h form.h gv.h handy.h hv.h keywords.h mg.h op.h opcode.h +h3 = pad.h patchlevel.h perl.h perlapi.h perly.h pp.h proto.h regcomp.h +h4 = regexp.h scope.h sv.h unixish.h util.h iperlsys.h thread.h +h5 = utf8.h warnings.h +h = $(h1) $(h2) $(h3) $(h4) $(h5) + +c1 = av.c scope.c op.c doop.c doio.c dump.c gv.c hv.c mg.c reentr.c mro.c perl.c +c2 = perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c sv.c +c3 = taint.c toke.c util.c deb.c run.c universal.c xsutils.c pad.c globals.c +c4 = perlio.c perlapi.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c +c5 = $(madlysrc) $(mallocsrc) + +c = $(c1) $(c2) $(c3) $(c4) $(c5) miniperlmain.c perlmain.c opmini.c + +obj1 = $(madlyobj) $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro$(OBJ_EXT) +obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) perl$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT) +obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) xsutils$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT) + +obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS) + +lintflags = \ + -b \ + -n \ + -p \ + -Ncheck=%all \ + -Nlevel=4 \ + -errchk=parentheses \ + -errhdr=%all \ + -errfmt=src \ + -errtags \ + -erroff=E_ASSIGN_NARROW_CONV \ + -erroff=E_BAD_PTR_CAST \ + -erroff=E_BAD_PTR_CAST_ALIGN \ + -erroff=E_BAD_PTR_INT_COMBINATION \ + -erroff=E_BAD_SIGN_EXTEND \ + -erroff=E_BLOCK_DECL_UNUSED \ + -erroff=E_CASE_FALLTHRU \ + -erroff=E_CONST_EXPR \ + -erroff=E_CONSTANT_CONDITION \ + -erroff=E_END_OF_LOOP_CODE_NOT_REACHED \ + -erroff=E_EQUALITY_NOT_ASSIGNMENT \ + -erroff=E_EXPR_NULL_EFFECT \ + -erroff=E_FALSE_LOGICAL_EXPR \ + -erroff=E_INCL_NUSD \ + -erroff=E_LOOP_EMPTY \ + -erroff=E_MAIN_PARAM \ + -erroff=E_POINTER_TO_OBJECT \ + -erroff=E_PTRDIFF_OVERFLOW \ + -erroff=E_SHIFT_CNT_NEG_TOO_BIG_L \ + -erroff=E_STATIC_UNUSED \ + -erroff=E_TRUE_LOGICAL_EXPR + +splintflags = \ + -I/usr/lib/gcc/i486-linux-gnu/4.0.2/include/ \ + -D__builtin_va_list=va_list \ + -Dsigjmp_buf=jmp_buf \ + -warnposix \ + \ + +boolint \ + +charintliteral \ + -fixedformalarray \ + -mustfreefresh \ + -nestedextern \ + -predboolint \ + -predboolothers \ + -preproc \ + -boolops \ + -shadow \ + -nullstate \ + +longintegral \ + +matchanyintegral \ + -type \ + \ + +line-len 999 \ + +weak + +splintfiles = $(c1) + +.c$(OBJ_EXT): + $(CCCMD) -I$(CROSS_LIB) $(PLDLFLAGS) $*.c + +.c.i: + $(CCCMDSRC) -E $*.c > $*.i + +.c.s: + $(CCCMDSRC) -S $*.c + +all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT) extra.pods $(private) $(unidatafiles) $(public) $(dynamic_ext) $(nonxs_ext) extras.make + @echo " "; + @echo " Everything is up to date. Type '$(MAKE) test' to run test suite." + +.PHONY: all + + +# This is now done by installman only if you actually want the man pages. +# @echo " "; echo " Making docs"; cd pod; $(MAKE) all; + +# Phony target to force checking subdirectories. +# Apparently some makes require an action for the FORCE target. +.PHONY: FORCE +FORCE: + @sh -c true +!NO!SUBS! +$spitshell >>$Makefile <>$Makefile <<'!NO!SUBS!' +miniperlmain$(OBJ_EXT): miniperlmain.c patchlevel.h + $(CCCMD) $(PLDLFLAGS) $*.c + +perlmain.c: miniperlmain.c config.sh $(FIRSTMAKEFILE) + sh writemain $(DYNALOADER) $(static_ext) > perlmain.c + +!NO!SUBS! +case "$osname" in +cygwin) + ;; # Let cygwin/Makefile.SHs do its work. +*) + $spitshell >>$Makefile <<'!NO!SUBS!' +perlmain$(OBJ_EXT): perlmain.c + $(CCCMD) $(PLDLFLAGS) $*.c + +!NO!SUBS! + ;; +esac +$spitshell >>$Makefile <<'!NO!SUBS!' +# The file ext.libs is a list of libraries that must be linked in +# for static extensions, e.g. -lm -lgdbm, etc. The individual +# static extension Makefile's add to it. +ext.libs: $(static_ext) + -@test -f ext.libs || touch ext.libs + +!NO!SUBS! + +# How to build libperl. This is still rather convoluted. +# Load up custom Makefile.SH fragment for shared loading and executables: +case "$osname" in +*) + Makefile_s="$osname/Makefile.SHs" + ;; +esac + +case "$osname" in +aix) + $spitshell >>$Makefile <>$Makefile <<'!NO!SUBS!' + +LIBPERL_NONSHR = libperl_nonshr$(LIB_EXT) +MINIPERL_NONSHR = miniperl_nonshr$(EXE_EXT) + +$(LIBPERL_NONSHR): $(obj) + $(RMS) $(LIBPERL_NONSHR) + $(AR) rcu $(LIBPERL_NONSHR) $(obj) + +$(MINIPERL_NONSHR): $(LIBPERL_NONSHR) miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) + $(CC) $(LDFLAGS) -o $(MINIPERL_NONSHR) miniperlmain$(OBJ_EXT) \ + opmini$(OBJ_EXT) $(LIBPERL_NONSHR) $(LIBS) + +MINIPERLEXP = $(MINIPERL_NONSHR) + +LIBPERLEXPORT = perl.exp + +!NO!SUBS! + + ;; + *) + $spitshell >>$Makefile <<'!NO!SUBS!' +MINIPERLEXP = miniperl$(EXE_EXT) + +PERLEXPORT = perl.exp + +!NO!SUBS! + ;; + esac + $spitshell >>$Makefile <<'!NO!SUBS!' +perl.exp: $(MINIPERLEXP) makedef.pl config.sh $(SYM) $(SYMH) + ./$(MINIPERLEXP) makedef.pl PLATFORM=aix CC_FLAGS="$(OPTIMIZE)" | sort -u | sort -f > perl.exp + +!NO!SUBS! + ;; +os2) + $spitshell >>$Makefile <<'!NO!SUBS!' +MINIPERLEXP = miniperl + +perl5.def: $(MINIPERLEXP) makedef.pl config.sh $(SYM) $(SYMH) miniperl.map + ./$(MINIPERLEXP) makedef.pl PLATFORM=os2 -DPERL_DLL=$(PERL_DLL) CC_FLAGS="$(OPTIMIZE)" > perl5.def + +!NO!SUBS! + ;; +esac + +if test -r $Makefile_s ; then + . $Makefile_s + $spitshell >>$Makefile <>$Makefile <<'!NO!SUBS!' +$(LIBPERL): $& $(obj) $(DYNALOADER) $(LIBPERLEXPORT) +!NO!SUBS! + case "$useshrplib" in + true) + $spitshell >>$Makefile <<'!NO!SUBS!' + rm -f $@ + $(LD) -o $@ $(SHRPLDFLAGS) $(obj) $(DYNALOADER) $(libs) +!NO!SUBS! + case "$osname" in + aix) + $spitshell >>$Makefile <<'!NO!SUBS!' + rm -f libperl$(OBJ_EXT) + mv $@ libperl$(OBJ_EXT) + $(AR) qv $(LIBPERL) libperl$(OBJ_EXT) +!NO!SUBS! + ;; + esac + ;; + *) + $spitshell >>$Makefile <<'!NO!SUBS!' + rm -f $(LIBPERL) + $(AR) rcu $(LIBPERL) $(obj) $(DYNALOADER) + @$(ranlib) $(LIBPERL) +!NO!SUBS! + ;; + esac + $spitshell >>$Makefile <<'!NO!SUBS!' + +# How to build executables. + +# The $& notation tells Sequent machines that it can do a parallel make, +# and is harmless otherwise. +# The miniperl -w -MExporter line is a basic cheap test to catch errors +# before make goes on to run preplibrary and then MakeMaker on extensions. +# This is very handy because later errors are often caused by miniperl +# build problems but that's not obvious to the novice. +# The Module used here must not depend on Config or any extensions. + +!NO!SUBS! + + + $spitshell >>$Makefile <<'!NO!SUBS!' + +perl$(EXE_EXT): $& perlmain$(OBJ_EXT) $(LIBPERL) $(static_ext) ext.libs $(PERLEXPORT) + -@rm -f miniperl.xok + $(SHRPENV) $(LDLIBPTH) $(CC) -o perl$(PERL_SUFFIX)dyn$(EXE_EXT) $(PERL_PROFILE_LDFLAGS) $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) + $(SHRPENV) $(LDLIBPTH) $(CC) -o perl$(PERL_SUFFIX)$(EXE_EXT) $(PERL_PROFILE_LDFLAGS) $(CLDFLAGS) perlmain$(OBJ_EXT) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) + +# Purify/Quantify Perls. + +pureperl$(EXE_EXT): $& perlmain$(OBJ_EXT) $(LIBPERL) $(static_ext) ext.libs $(PERLEXPORT) + $(SHRPENV) $(LDLIBPTH) purify $(CC) -o pureperl $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) + +purecovperl$(EXE_EXT): $& perlmain$(OBJ_EXT) $(LIBPERL) $(static_ext) ext.libs $(PERLEXPORT) + $(SHRPENV) $(LDLIBPTH) purecov $(CC) -o purecovperl $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) + +quantperl$(EXE_EXT): $& perlmain$(OBJ_EXT) $(LIBPERL) $(static_ext) ext.libs $(PERLEXPORT) + $(SHRPENV) $(LDLIBPTH) quantify $(CC) -o quantperl $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) + +# Valgrind perl (currently Linux only) + +perl.valgrind.config: config.sh + @echo "To build perl.valgrind you must Configure -Doptimize=-g -Uusemymalloc, checking..." + @$(MAKE) perl.config.dashg + @echo "Checking usemymalloc='n' in config.sh..." + @grep "^usemymalloc=" config.sh + @grep "^usemymalloc='n'" config.sh >/dev/null || exit 1 + @echo "And of course you have to have valgrind..." + $(VALGRIND) ./perl -e 1 2>/dev/null || exit 1 + +# Third Degree Perl (Tru64 only) + +perl.config.dashg: + @echo "Checking optimize='-g' in config.sh..." + @grep "^optimize=" config.sh + @egrep "^optimize='(.*-g.*)'" config.sh >/dev/null || exit 1 + +perl.third.config: config.sh + @echo "To build perl.third you must Configure -Doptimize=-g -Uusemymalloc, checking..." + @$(MAKE) perl.config.dashg + @echo "Checking usemymalloc='n' in config.sh..." + @grep "^usemymalloc=" config.sh + @grep "^usemymalloc='n'" config.sh >/dev/null || exit 1 + +perl.third: /usr/bin/atom perl.third.config perl + atom -tool third -L. -all -gp -toolargs="-invalid -uninit heap+stack+copy -min 0" perl + @echo "Now you may run perl.third and then study perl.3log." + +# Pixie Perls (Tru64 and IRIX only) + +perl.pixie.config: config.sh + @echo "To build perl.pixie you must Configure -Doptimize=-g, checking..." + @$(MAKE) perl.config.dashg + +perl.pixie.atom: /usr/bin/atom perl + atom -tool pixie -L. -all -toolargs="-quiet" perl + +perl.pixie.irix: perl + pixie perl + +perl.pixie: /usr/bin/pixie perl.pixie.config perl + if test -x /usr/bin/atom; then \ + $(MAKE) perl.pixie.atom; \ + else \ + $(MAKE) perl.pixie.irix; \ + fi + @echo "Now you may run perl.pixie and then run pixie." + +# Gprof Perl + +perl.config.dashpg: + @echo "Checking optimize='-pg' in config.sh..." + @grep "^optimize=" config.sh + @grep "^optimize='.*-pg.*'" config.sh >/dev/null || exit 1 + +perl.gprof.config: config.sh + @echo "To build perl.gprof you must Configure -Doptimize=-pg, checking..." + @$(MAKE) perl.config.dashpg + +perl.gprof: /usr/bin/gprof perl.gprof.config + @-rm -f perl + $(MAKE) PERL_SUFFIX=.gprof PERL_PROFILE_LDFLAGS=-pg perl + @echo "Now you may run perl.gprof and then run gprof perl.gprof." + +# Gcov Perl + +perl.config.gcov: + @echo "To build perl.gcov you must use gcc 3.0 or newer, checking..." + @echo "Checking gccversion in config.sh..." + @grep "^gccversion=" config.sh + @grep "^gccversion='[3-9]\." config.sh >/dev/null || exit 1 + @echo "To build perl.gcov you must Configure -Dccflags=-fprofile-arcs -ftest-coverage, checking..." + @echo "Checking ccflags='-fprofile-arcs -ftest-coverage' in config.sh..." + @grep "^ccflags=" config.sh + @grep "^ccflags='.*-fprofile-arcs -ftest-coverage.*'" config.sh >/dev/null || exit 1 + +perl.gcov: perl.config.gcov + @-rm -f perl + $(MAKE) PERL_SUFFIX=.gcov PERL_PROFILE_LDFLAGS='' perl + @echo "Now you may run perl.gcov and then run gcov some.c." + +# Microperl. This is just a convenience thing if one happens to +# build also the full Perl and therefore the real big Makefile: +# usually one should manually explicitly issue the below command. + +.PHONY: microperl +microperl: + $(MAKE) -f Makefile.micro + +# This version, if specified in Configure, does ONLY those scripts which need +# set-id emulation. Suidperl must be setuid root. It contains the "taint" +# checks as well as the special code to validate that the script in question +# has been invoked correctly. + +suidperl$(EXE_EXT): $& sperl$(OBJ_EXT) perlmain$(OBJ_EXT) $(LIBPERL) $(static_ext) ext.libs $(PERLEXPORT) + $(SHRPENV) $(LDLIBPTH) $(CC) -o suidperl $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) sperl$(OBJ_EXT) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) + +!NO!SUBS! + +fi + +$spitshell >>$Makefile <<'!NO!SUBS!' + +sperl$(OBJ_EXT): perl.c $(h) + $(RMS) sperl.c + $(LNS) perl.c sperl.c + $(CCCMD) -DIAMSUID sperl.c + $(RMS) sperl.c + +# We have to call our ./makedir because Ultrix 4.3 make can't handle the line +# test -d lib/auto || mkdir lib/auto +# We need to autosplit in two steps because VOS can't handle so many args +# +.PHONY: preplibrary +preplibrary: miniperl $(CONFIGPM) lib/lib.pm $(PREPLIBRARY_LIBPERL) + @sh ./makedir lib/auto + @echo " AutoSplitting perl library" + $(LDLIBPTH) ./miniperl -Ilib -MCross -e 'use AutoSplit; \ + autosplit_lib_modules(@ARGV)' lib/*.pm + $(LDLIBPTH) ./miniperl -Ilib -MCross -e 'use AutoSplit; \ + autosplit_lib_modules(@ARGV)' lib/*/*.pm + $(MAKE) lib/re.pm + +.PHONY: makeppport +makeppport: miniperl$(EXE_EXT) $(CONFIGPM) + $(LDLIBPTH) ./miniperl$(EXE_EXT) -Ilib mkppport + +$(CROSS_LIB)/Config.pod: config.sh miniperl configpm Porting/Glossary + $(LDLIBPTH) ./miniperl -Ilib configpm --cross=$(CROSS_NAME) --heavy=$(CROSS_LIB)/Config_heavy.pl + #TODO $(XCOPY) ..\*.h $(XCOREDIR)\*.* + #TODO $(XCOPY) ..\*.inc $(XCOREDIR)\*.* + #TODO $(XCOPY) *.h $(XCOREDIR)\*.* + #TODO $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.* + #TODO $(RCOPY) include $(XCOREDIR)\*.* + #TODO $(LDLIBPTH) ./miniperl -Ilib -MCross=$(CROSS_NAME) config_h.PL "INST_VER=$(INST_VER)" "CORE_DIR=$(XCOREDIR)" "CONFIG_H=xconfig.h" + #TODO cp xconfig.h $(CROSS_LIB)/config.h + #TODO cp xconfig.h $(CROSS_LIB)/xconfig.h + +$(CONFIGPM): $(CROSS_LIB)/Config.pod + +lib/re.pm: ext/re/re.pm + @-rm -f $@ + cp ext/re/re.pm lib/re.pm + +$(plextract): miniperl $(CONFIGPM) x2p/s2p + @-rm -f $@ + $(LDLIBPTH) ./miniperl -I`pwd`/lib $@.PL + +lib/lib.pm: miniperl $(CONFIGPM) + @-rm -f $@ + $(LDLIBPTH) ./miniperl -Ilib -MCross lib/lib_pm.PL + +unidatafiles $(unidatafiles): uni.data + +uni.data: miniperl$(EXE_EXT) $(CONFIGPM) lib/unicore/mktables + cd lib/unicore && $(LDLIBPTH) ../../miniperl -I../../lib mktables -w + touch uni.data + +extra.pods: miniperl + -@test ! -f extra.pods || rm -f `cat extra.pods` + -@rm -f extra.pods + -@for x in `grep -l '^=[a-z]' README.* | grep -v README.vms` ; do \ + nx=`echo $$x | sed -e "s/README\.//"`; \ + cd pod ; $(LNS) ../$$x "perl"$$nx".pod" ; cd .. ; \ + echo "pod/perl"$$nx".pod" >> extra.pods ; \ + done + -@rm -f pod/perlvms.pod + -@test -f vms/perlvms.pod && cd pod && $(LNS) ../vms/perlvms.pod perlvms.pod && cd .. && echo "pod/perlvms.pod" >> extra.pods + -@rm -f pod/perldelta.pod + -@test -f pod/perl595delta.pod && cd pod && $(LNS) perl595delta.pod perldelta.pod && cd .. && echo "pod/perldelta.pod" >> extra.pods # See buildtoc + +extras.make: perl$(EXE_EXT) + -@test ! -s extras.lst || PATH="`pwd`:${PATH}" PERL5LIB="`pwd`/lib" $(LDLIBPTH) ./perl -Ilib -MCPAN -e '@ARGV&&make(@ARGV)' `cat extras.lst` + +extras.test: perl$(EXE_EXT) + -@test ! -s extras.lst || PATH="`pwd`:${PATH}" PERL5LIB="`pwd`/lib" $(LDLIBPTH) ./perl -Ilib -MCPAN -e '@ARGV&&test(@ARGV)' `cat extras.lst` + +extras.install: perl$(EXE_EXT) + -@test ! -s extras.lst || PATH="`pwd`:${PATH}" PERL5LIB="`pwd`/lib" $(LDLIBPTH) ./perl -Ilib -MCPAN -e '@ARGV&&install(@ARGV)' `cat extras.lst` + +.PHONY: install install-strip install-all install-verbose install-silent \ + no-install install.perl install.man install.html + +META.yml: Porting/makemeta Porting/Maintainers.pl Porting/Maintainers.pm + $(LDLIBPTH) ./miniperl -Ilib Porting/makemeta + +install-strip: + $(MAKE) STRIPFLAGS=-s install DESTDIR="$(DESTDIR)" + +install install-all: + $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) DESTDIR="$(DESTDIR)" + +install-verbose: + $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) INSTALLFLAGS=-V DESTDIR="$(DESTDIR)" + +install-silent: + $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) INSTALLFLAGS=-S DESTDIR="$(DESTDIR)" + +no-install: + $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) INSTALLFLAGS=-n DESTDIR="$(DESTDIR)" + +# Set this to an empty string to avoid an attempt of rebuild before install +INSTALL_DEPENDENCE = all + +install.perl: $(INSTALL_DEPENDENCE) installperl + $(LDLIBPTH) ./perl installperl --destdir=$(DESTDIR) $(INSTALLFLAGS) $(STRIPFLAGS) + -@test ! -s extras.lst || $(MAKE) extras.install + +install.man: all installman + $(LDLIBPTH) ./perl installman --destdir=$(DESTDIR) $(INSTALLFLAGS) + +# XXX Experimental. Hardwired values, but useful for testing. +# Eventually Configure could ask for some of these values. +install.html: all installhtml + -@test -f README.vms && cd vms && $(LNS) ../README.vms README_vms.pod && cd .. + $(LDLIBPTH) ./perl installhtml \ + --podroot=. --podpath=. --recurse \ + --htmldir=$(privlib)/html \ + --htmlroot=$(privlib)/html \ + --splithead=pod/perlipc \ + --splititem=pod/perlfunc \ + --libpods=perlfunc:perlguts:perlvar:perlrun:perlop \ + --ignore=Porting/Maintainers.pm,Porting/patching.pod,Porting/pumpkin.pod,Porting/repository.pod \ + --verbose + + +# I now supply perly.c with the kits, so the following section is +# used only if you force bison to run by saying +# make regen_perly +# You normally shouldn't remake perly.[ch]. + +.PHONY: regen_perly + +run_byacc: + @echo "run_byacc is obsolete; try 'make regen_perly' instead" + +# this outputs perly.h, perly.act and perly.tab +regen_perly: + perl regen_perly.pl + +# We don't want to regenerate perly.c and perly.h, but they might +# appear out-of-date after a patch is applied or a new distribution is +# made. +perly.c: perly.y + -@sh -c true + +perly.h: perly.y + -@sh -c true + +# No compat3.sym here since and including the 5.004_50. +# No interp.sym since 5.005_03. +SYM = global.sym globvar.sym perlio.sym pp.sym + +SYMH = perlvars.h intrpvar.h + +CHMOD_W = chmod +w + +# The following files are generated automatically +# autodoc.pl: pod/perlapi.pod pod/perlintern.pod +# embed.pl: proto.h embed.h embedvar.h global.sym +# perlapi.h perlapi.c +# [* embed.pl needs pp.sym generated by opcode.pl! *] +# keywords.pl: keywords.h +# opcode.pl: opcode.h opnames.h pp_proto.h pp.sym +# regcomp.pl: regnodes.h +# warnings.pl: warnings.h lib/warnings.pm +# The correct versions should be already supplied with the perl kit, +# in case you don't have perl available. +# To force them to be regenerated, run +# perl regen.pl +# with your existing copy of perl +# (make regen_headers is kept for backwards compatibility) + +AUTOGEN_FILES = keywords.h opcode.h opnames.h pp_proto.h pp.sym proto.h \ + embed.h embedvar.h global.sym \ + pod/perlintern.pod pod/perlapi.pod \ + perlapi.h perlapi.c regnodes.h \ + warnings.h lib/warnings.pm + +.PHONY: regen_headers regen_pods regen_all + +regen regen_headers: FORCE + -perl regen.pl + +regen_pods: FORCE + -cd pod; $(LDLIBPTH) $(MAKE) regen_pods + +regen_all: regen regen_pods + +.PHONY: manisort manicheck + +manisort: FORCE + LC_ALL=C sort -fdc MANIFEST || (echo "WARNING: re-sorting MANIFEST"; \ + LC_ALL=C sort -fdo MANIFEST MANIFEST) + +manicheck: FORCE + perl Porting/manicheck + +# Extensions: +# Names added to $(dynamic_ext) or $(static_ext) or $(nonxs_ext) will +# automatically get built. There should ordinarily be no need to change +# any of this part of makefile. +# +# The dummy dependency is a place holder in case $(dynamic_ext) or +# $(static_ext) is empty. +# +# DynaLoader may be needed for extensions that use Makefile.PL. + +###$(DYNALOADER).c: $(EXTDIR)/DynaLoader/dl_dld.xs $(CONFIGPM) +### if not exist $(AUTODIR) mkdir $(AUTODIR) +### cd $(EXTDIR)\$(*B) +### $(HPERL) -I..\..\lib -MCross=$(CROSS_NAME) $(*B)_pm.PL +### $(HPERL) -I..\..\lib -MCross=$(CROSS_NAME) XSLoader_pm.PL +### cd ..\..\win32 +### $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL) +### $(XCOPY) $(EXTDIR)\$(*B)\XSLoader.pm $(LIBDIR)\$(NULL) +### cd $(EXTDIR)\$(*B) +### $(XSUBPP) dl_win32.xs > $(*B).c +### cd ..\..\win32 +### +###$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs +### $(COPY) dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs + + + +$(DYNALOADER): preplibrary FORCE + @$(LDLIBPTH) sh ext/util/make_ext_cross $(STATIC) $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) + +d_dummy $(dynamic_ext): miniperl$(EXE_EXT) preplibrary makeppport $(DYNALOADER) FORCE + @$(LDLIBPTH) sh ext/util/make_ext_cross dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) + +s_dummy $(static_ext): miniperl$(EXE_EXT) preplibrary makeppport $(DYNALOADER) FORCE + @$(LDLIBPTH) sh ext/util/make_ext_cross $(STATIC) $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) + +n_dummy $(nonxs_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE + @$(LDLIBPTH) sh ext/util/make_ext_cross nonxs $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) +!NO!SUBS! + +$spitshell >>$Makefile <>$Makefile <<'!NO!SUBS!' + +.PHONY: printconfig +printconfig: + @eval `$(LDLIBPTH) ./perl -Ilib -V:$(CONFIGVAR)`; echo $$$(CONFIGVAR) + +.PHONY: clean _tidy _mopup _cleaner1 _cleaner2 \ + realclean _realcleaner clobber _clobber \ + distclean veryclean _verycleaner \ + cleanup_unpacked_files unpack_files + +clean: cleanup_unpacked_files _tidy _mopup + +realclean: cleanup_unpacked_files _realcleaner _mopup + @echo "Note that '$(MAKE) realclean' does not delete config.sh or Policy.sh" + +_clobber: + -@rm -f Cross/run-* Cross/to-* Cross/from-* + rm -f config.sh cppstdin Policy.sh extras.lst + +clobber: cleanup_unpacked_files _realcleaner _mopup _clobber + +distclean: clobber + +# Like distclean but also removes emacs backups and *.orig. +veryclean: _verycleaner _mopup _clobber + -@rm -f Obsolete Wanted + +# Do not 'make _mopup' directly. +_mopup: + rm -f *$(OBJ_EXT) *$(LIB_EXT) all perlmain.c opmini.c uudmap.h generate_uudmap$(EXE_EXT) + -rmdir .depending + -@test -f extra.pods && rm -f `cat extra.pods` + -@test -f vms/README_vms.pod && rm -f vms/README_vms.pod + -rm -f perl.exp ext.libs extra.pods uni.data opmini.o + -rm -f perl.export perl.dll perl.libexp perl.map perl.def + -rm -f perl.loadmap miniperl.loadmap perl.prelmap miniperl.prelmap + -rm -f perl.third lib*.so.perl.third perl.3log t/perl.third t/perl.3log + -rm -f perl.pixie lib*.so.perl.pixie lib*.so.Addrs + -rm -f perl.Addrs perl.Counts t/perl.Addrs t/perl.Counts *perl.xok + -rm -f perlld cygwin.c ld2 libperl*.def libperl*.dll cygperl*.dll *.exe.stackdump + -rm -f perl$(EXE_EXT) suidperl$(EXE_EXT) miniperl$(EXE_EXT) $(LIBPERL) libperl.* microperl + -rm -f opcode.h-old opnames.h-old pp.sym-old pp_proto.h-old + -rm -f config.over + +# Do not 'make _tidy' directly. +_tidy: + -cd pod; $(LDLIBPTH) $(MAKE) clean + -cd utils; $(LDLIBPTH) $(MAKE) clean + -cd x2p; $(LDLIBPTH) $(MAKE) clean + -@for x in $(DYNALOADER) $(dynamic_ext) $(static_ext) $(nonxs_ext) ; do \ + $(LDLIBPTH) sh ext/util/make_ext clean $$x MAKE=$(MAKE) ; \ + done + +_cleaner1: + -cd os2; rm -f Makefile + -cd pod; $(LDLIBPTH) $(MAKE) $(CLEAN) + -cd utils; $(LDLIBPTH) $(MAKE) $(CLEAN) + -cd x2p; $(LDLIBPTH) $(MAKE) $(CLEAN) + -@for x in $(DYNALOADER) $(dynamic_ext) $(static_ext) $(nonxs_ext) ; do \ + $(LDLIBPTH) sh ext/util/make_ext $(CLEAN) $$x MAKE=$(MAKE) ; \ + done + -@test ! -f ./miniperl$(EXE_EXT) || $(LDLIBPTH) ./miniperl$(EXE_EXT) -Ilib mkppport --clean + +# Some systems do not support "?", so keep these files separate. +_cleaner2: + -rm -f core.*perl.*.? t/core.perl.*.? .?*.c + rm -f core *perl.core t/core t/*perl.core core.* t/core.* + rm -f t/misctmp* t/forktmp* t/tmp* t/c t/perl$(EXE_EXT) t/rantests + rm -f so_locations $(LIBPERL_NONSHR) $(MINIPERL_NONSHR) + rm -rf $(addedbyconf) + rm -f $(FIRSTMAKEFILE) $(FIRSTMAKEFILE).old makefile.old + rm -f $(private) + rm -rf $(unidatafiles) $(unidatadirs) + rm -rf lib/auto + rm -f lib/.exists lib/*/.exists lib/*/*/.exists + rm -f h2ph.man pstruct + rm -rf .config + rm -f preload + rm -rf lib/Encode lib/Compress lib/Hash lib/re + rm -rf lib/IO/Compress lib/IO/Uncompress + rm -f lib/ExtUtils/ParseXS/t/XSTest.c + rm -f lib/ExtUtils/ParseXS/t/XSTest$(OBJ_EXT) + rm -f lib/ExtUtils/ParseXS/t/XSTest$(DLSUFFIX) + -rmdir lib/B lib/Data + -rmdir lib/Filter/Util lib/IO/Socket + -rmdir lib/List lib/MIME lib/Scalar lib/Sys + -rmdir lib/threads lib/XS + +_realcleaner: + @$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=realclean + @$(LDLIBPTH) $(MAKE) _cleaner2 + +_verycleaner: + @$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=veryclean + @$(LDLIBPTH) $(MAKE) _cleaner2 + -rm -f *~ *.orig */*~ */*.orig */*/*~ */*/*.orig + +.PHONY: lint +lint: $(c) + rm -f *.ln + lint $(lintflags) -DPERL_CORE -D_REENTRANT -DDEBUGGING -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(c) + +.PHONY: splint +splint: $(c) + splint $(splintflags) -DPERL_CORE -D_REENTRANT -DDEBUGGING -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(splintfiles) + +# Need to unset during recursion to go out of loop. +# The README below ensures that the dependency list is never empty and +# that when MAKEDEPEND is empty $(FIRSTMAKEFILE) doesn't need rebuilding. + +MAKEDEPEND = Makefile makedepend + +$(FIRSTMAKEFILE): README $(MAKEDEPEND) + $(MAKE) depend MAKEDEPEND= + +config.h: config_h.SH config.sh + $(SHELL) config_h.SH + # TODO - improve following line + cp config.h $(CROSS_LIB)/ + +xconfig.h: config_h.SH Cross/config-$(CROSS_NAME).sh + CONFIG_SH=Cross/config-$(CROSS_NAME).sh CONFIG_H=xconfig.h $(SHELL) config_h.SH + cp xconfig.h $(CROSS_LIB)/ + +# When done, touch perlmain.c so that it doesn't get remade each time. +.PHONY: depend +depend: makedepend + sh ./makedepend MAKE=$(MAKE) + - test -s perlmain.c && touch perlmain.c + cd x2p; $(MAKE) depend + +# Cannot postpone this until $firstmakefile is ready ;-) +makedepend: makedepend.SH config.sh + sh ./makedepend.SH + +.PHONY: test check test_prep test_prep_nodll test_prep_pre _test_prep \ + test_tty test-tty _test_tty test_notty test-notty _test_notty \ + utest ucheck test.utf8 check.utf8 test.torture torturetest \ + test.utf16 check.utf16 utest.utf16 ucheck.utf16 \ + test.third check.third utest.third ucheck.third test_notty.third \ + test.deparse test_notty.deparse test_harness test_harness_notty \ + minitest coretest test.taintwarn + +# Cannot delegate rebuilding of t/perl to make +# to allow interlaced test and minitest + +TESTFILE=TEST + +_test_prep: unpack_files + cd t && (rm -f $(PERL)$(EXE_EXT); $(LNS) ../$(PERL)$(EXE_EXT) $(PERL)$(EXE_EXT)) + +# Architecture-neutral stuff: + +test_prep_pre: preplibrary utilities $(nonxs_ext) + +test_prep: test_prep_pre miniperl$(EXE_EXT) $(unidatafiles) perl$(EXE_EXT) $(dynamic_ext) $(TEST_PERL_DLL) + PERL=./perl $(MAKE) _test_prep + +_test_tty: + cd t && $(PERL_DEBUG) $(LDLIBPTH) $(PERL) $(TESTFILE) $(TEST_ARGS) /dev/null 2>&1; then \ + $(MAKE) TEST_ARGS=$(TEST_ARGS) TESTFILE=$(TESTFILE) _test_tty ; \ + else \ + $(MAKE) TEST_ARGS=$(TEST_ARGS) TESTFILE=$(TESTFILE) _test_notty ; \ + fi + @echo "Ran tests" > t/rantests + +test check: test_prep + PERL=./perl $(MAKE) _test + +test_tty: test_prep + PERL=./perl $(MAKE) _test_tty + +test_notty: test_prep + PERL=./perl $(MAKE) _test_notty + +utest ucheck test.utf8 check.utf8: test_prep + PERL=./perl TEST_ARGS=-utf8 $(MAKE) _test + +coretest: test_prep + PERL=./perl TEST_ARGS=-core $(MAKE) _test + +test-prep: test_prep + +test-tty: test_tty + +test-notty: test_notty + +# Torture testing + +test.torture torturetest: test_prep + PERL=./perl TEST_ARGS=-torture $(MAKE) _test + +# Targets for UTF16 testing: + +minitest.utf16: minitest.prep + - cd t && (rm -f perl$(EXE_EXT); $(LNS) ../miniperl$(EXE_EXT) perl$(EXE_EXT)) \ + && $(LDLIBPTH) ./perl TEST -minitest -utf16 base/*.t comp/*.t cmd/*.t run/*.t io/*.t op/*.t uni/*.t .clist + +hlist: $(h) + echo $(h) | tr ' ' $(TRNL) >.hlist + +shlist: $(sh) + echo $(sh) | tr ' ' $(TRNL) >.shlist + +pllist: $(pl) + echo $(pl) | tr ' ' $(TRNL) >.pllist + +Makefile: Makefile.SH ./config.sh + $(SHELL) Makefile.SH + +.PHONY: distcheck +distcheck: FORCE + perl '-MExtUtils::Manifest=&fullcheck' -e 'fullcheck()' + +.PHONY: elc +elc: emacs/cperl-mode.elc + +emacs/cperl-mode.elc: emacs/cperl-mode.el + -cd emacs; emacs -batch -q -no-site-file -f batch-byte-compile cperl-mode.el + +.PHONY: etags ctags tags + +etags: TAGS + +TAGS: emacs/cperl-mode.elc + sh emacs/ptags + +# Let's hope make will not go into an infinite loop on case-unsensitive systems +# This may also fail if . is in the head of the path, since perl will +# require -Ilib +tags: TAGS + perl emacs/e2ctags.pl TAGS > tags + +ctags: + ctags -f Tags -N --totals --languages=c --langmap=c:+.h --exclude=opmini.c *.c *.h + +# AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE +# If this runs make out of memory, delete /usr/include lines. +!NO!SUBS! + +$eunicefix $Makefile +case `pwd` in +*SH) + $rm -f ../$Makefile + $ln $Makefile ../$Makefile + ;; +esac +$rm -f $firstmakefile + +# Now do any special processing required before building. + +case "$ebcdic" in +define) + xxx='' + echo "This is an EBCDIC system, checking if any parser files need regenerating." >&2 +case "$osname" in +os390|posix-bc) + if cd x2p + then + rm -f y.tab.c y.tab.h + case "$osname" in + posix-bc) + # we are using two different yaccs in BS2000 Posix! + byacc a2p.y >/dev/null 2>&1 + ;; + *) # e.g. os390 + yacc a2p.y >/dev/null 2>&1 + ;; + esac + if cmp -s y.tab.c a2p.c + then + rm -f y.tab.c + else + echo "a2p.y -> a2p.c" >&2 + mv -f y.tab.c a2p.c + chmod u+w a2p.c + sed -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \ + -e 's|^static void __YY_YACC_MAIN.*BS2000.*|/*static main deleted*/|' \ + -e 's/y\.tab/a2p/g' a2p.c >a2p.tmp && mv a2p.tmp a2p.c + xxx="$xxx a2p.c" + fi + # In case somebody yacc -d:ed the a2p.y. + if test -f y.tab.h + then + if cmp -s y.tab.h a2p.h + then + rm -f y.tab.h + else + echo "a2p.h -> a2p.h" >&2 + mv -f y.tab.h a2p.h + xxx="$xxx a2p.h" + fi + fi + cd .. + fi + ;; +vmesa) + # Do nothing in VM/ESA. + ;; +*) + echo "'$osname' is an EBCDIC system I don't know that well." >&4 + ;; +esac + case "$xxx" in + '') echo "No parser files were regenerated. That's okay." >&2 ;; + esac + ;; +esac + +# ex: set ts=8 sts=4 sw=4 noet: diff --git a/Cross/build-arm-n770.sh b/Cross/build-arm-n770.sh new file mode 100755 index 0000000..a43236e --- /dev/null +++ b/Cross/build-arm-n770.sh @@ -0,0 +1,75 @@ +# this is a build script for ARM-linux cross-compiling. +# it builds miniperl on HOST and then perl for TARGET +# this approach is like Perl-CE cross-compiling, and allows +# for full TARGET perl (as opposed to renamed miniperl) + +# some trick is different, however - the file extension for objects files +# are choosen to be .${CROSS_NAME}, .armo in our case + +# note how invoked Makefile.PL for cross-compilation: +# miniperl -MCross Makefile.PL + +# steps are: +# - run HOST configure +# - build HOST miniperl +# given freshly-created HOST makefile and existing miniperl fix makefile +# to use + +CROSS_NAME=arm + +# suppose compiler is in /opt/arm-2006q3 +CCPATH=/opt/arm-2006q3 +PATH=$CCPATH/bin:$PATH +CCPREF=arm-none-linux-gnueabi- + +CROSSCC=${CCPREF}gcc +export CROSSCC +export CROSS_NAME + +cp config.sh-arm-linux-n770 config-${CROSS_NAME}.sh + +# following should be done better: +cd .. + +if false +then +# do miniperl on HOST +./Configure -des -D prefix=./dummy -Dusedevel +make miniperl +make uudmap.h +# fake uudmap, which should be on HOST +# TODO - all host utilities should be clearly stated and not built for TARGET +cp generate_uudmap generate_uudmap.${CROSS_NAME} +fi + +#?? cd Cross + +# do the rest for TARGET +$CROSSCC --version + +# call make thusly so it will crosscompile... +XCOREDIR=xlib/$CROSS_NAME/CORE +PERL_CONFIG_SH=Cross/config-${CROSS_NAME}.sh + +#?? . $PERL_CONFIG_SH + +# make cflags do cross-compile work (now its hackish, will be improved!) +rm cflags-cross-$CROSS_NAME +cp Cross/cflags-cross-$CROSS_NAME . +rm Makefile-cross-$CROSS_NAME +sh Cross/Makefile-cross.SH +cp Cross/Makefile-cross-$CROSS_NAME . +# makefile hack-patching TODO generation from Makefile.SH +#./miniperl -pi.bak -w0777ne "s{^(CCCMD.*?)cflags}{\$1cflags-cross-$CROSS_NAME}gm" Makefile-cross-$CROSS_NAME + +mkdir xlib +mkdir xlib/$CROSS_NAME +mkdir ${XCOREDIR} + +#??OBJ_EXT=.${CROSS_NAME}o +# TODO these -- AR=${CCPREF}ar LD=${CCPREF}ld +make -f Makefile-cross-$CROSS_NAME xconfig.h +make -f Makefile-cross-$CROSS_NAME libperl.${CROSS_NAME}a OBJ_EXT=.${CROSS_NAME}o EXE_EXT=.$CROSS_NAME LIB_EXT=.${CROSS_NAME}a AR=${CCPREF}ar LD=${CCPREF}ld +make -f Makefile-cross-$CROSS_NAME DynaLoader.${CROSS_NAME}o OBJ_EXT=.${CROSS_NAME}o EXE_EXT=.$CROSS_NAME LIB_EXT=.${CROSS_NAME}a AR=${CCPREF}ar LD=${CCPREF}ld +make -f Makefile-cross-$CROSS_NAME perl.${CROSS_NAME} + diff --git a/Cross/cflags-cross-arm b/Cross/cflags-cross-arm new file mode 100755 index 0000000..9241d01 --- /dev/null +++ b/Cross/cflags-cross-arm @@ -0,0 +1,157 @@ +#!/bin/sh + +# Extra warnings, used e.g. for gcc. +warn="-Wall -ansi -W -Wextra -Wdeclaration-after-statement -Wendif-labels -Wc++-compat" +# Extra standardness. +stdflags=" -std=c89" +# Extra extra. +extra="" + +# TODO - remove this Cross-config-xxx stuff + +case $PERL_CONFIG_SH in +'') + if test -f Cross/config-arm.sh; then TOP=.; + elif test -f ../Cross/config-arm.sh; then TOP=..; + elif test -f ../../Cross/config-arm.sh; then TOP=../..; + elif test -f ../../../Cross/config-arm.sh; then TOP=../../..; + elif test -f ../../../../Cross/config-arm.sh; then TOP=../../../..; + else + echo "Can't find config-arm.sh."; exit 1 + fi + . $TOP/Cross/config-arm.sh + ;; +esac + +: syntax: cflags [optimize=XXX] [file[.suffix]] +: displays the compiler command line for file + +case "X$1" in +Xoptimize=*|X"optimize=*") + eval "$1" + shift + ;; +esac + +also=': ' +case $# in +1) also='echo 1>&2 " CCCMD = "' +esac + +case $# in +0) set *.c; echo "The current C flags are:" ;; +esac + +set `echo "$* " | sed -e 's/\.[oc] / /g' -e "s/\.${CROSS_NAME}o / /g" -e 's/\.obj / /g' -e "s/\\$obj_ext / /g"` + +for file do + + case "$#" in + 1) extra="-o $file.${CROSS_NAME}o $extra";; + *) echo $n " $file.c $c" ;; + esac + + : allow variables like toke_cflags to be evaluated + + if echo $file | grep -v / >/dev/null + then + eval 'eval ${'"${file}_cflags"'-""}' + fi + + : or customize here + + case "$file" in + DB_File) ;; + GDBM_File) ;; + NDBM_File) ;; + ODBM_File) ;; + POSIX) ;; + SDBM_File) ;; + av) ;; + byterun) ;; + deb) ;; + dl) ;; + doio) ;; + doop) ;; + dump) ;; + globals) ;; + gv) ;; + hv) ;; + locale) ;; + madly) ;; + main) ;; + malloc) ;; + mg) ;; + miniperlmain) ;; + numeric) ;; + op) ;; + opmini) ;; + pad) ;; + perl) ;; + perlapi) ;; + perlmain) ;; + perly) ;; + pp) ;; + pp_ctl) ;; + pp_hot) ;; + pp_pack) ;; + pp_sort) ;; + pp_sys) ;; + regcomp) ;; + regexec) ;; + run) ;; + scope) ;; + sv) ;; + taint) ;; + toke) ;; + universal) ;; + usersub) ;; + utf8) ;; + util) ;; + xsutils) ;; + *) ;; + esac + +case "$cc" in +*g++*) + # Extra paranoia in case people have bad canned ccflags: + # bad in the sense that the flags are accepted by g++, + # but then whined about. + for f in -Wdeclaration-after-statement -std=c89 + do + ccflags=`echo $ccflags|sed 's/$f/ /'` + done + ;; +esac + +case "$cc" in +*g++*) + # Without -Wno-unused-variable g++ 4.x compiles are rather unwatchable + # because of all the warnings about Perl___notused, and g++ doesn't do + # __attribute__((unused)) (and even if at some stage it may, people do + # have older gcc installations), and ((void)x) isn't enough to silence + # the noises about XS functions not using their cv parameter, so we need + # the -Wno-unused-parameter too. + # Yes, we lose some valid warnings, but hopefully other compilers + # (like gcc) will still pick up those warnings. + for o in -Wno-unused-variable -Wno-unused-parameter + do + case "$warn" in + *$o*) ;; + *) warn="$warn $o" ;; + esac + done + ;; +esac + +if test -f .patch; then + ccflags="-DPERL_PATCHNUM=`cat .patch` $ccflags" +fi + + : Can we perhaps use $ansi2knr here + echo "$CROSSCC -c -DPERL_CORE $ccflags $stdflags $optimize $warn $extra" + eval "$also "'"$CROSSCC -DUSE_CROSS_COMPILE -DPERL_CORE -c $ccflags $stdflags $optimize $warn $extra"' + + . $TOP/Cross/config-arm.sh + +done diff --git a/Cross/config.sh-arm-linux-n770 b/Cross/config.sh-arm-linux-n770 new file mode 100644 index 0000000..f4aa6ec --- /dev/null +++ b/Cross/config.sh-arm-linux-n770 @@ -0,0 +1,1057 @@ +#!/bin/sh +# +# This file was produced by running the Configure script. It holds all the +# definitions figured out by Configure. Should you modify one of these values, +# do not forget to propagate your changes by running "Configure -der". You may +# instead choose to run each of the .SH files by yourself, or "Configure -S". +# + +# Package name : perl5 +# Source directory : . +# Configuration time: Wed Sep 3 22:24:58 EDT 2003 +# Configured by : vadrer +# Target system : linux nokia770 armv5teji1 + +Author='' +Date='$Date' +Header='' +Id='$Id' +Locker='' +Log='$Log' +Mcc='Mcc' +RCSfile='$RCSfile' +Revision='$Revision' +Source='' +State='' +_a='.arma' +_exe='.arm' +_o='.armo' +afs='false' +afsroot='/afs' +alignbytes='4' +ansi2knr='' +aphostname='/bin/hostname' +api_revision='5' +api_subversion='0' +api_version='9' +api_versionstring='5.9.5' +ar='ar' +archlib='/usr/lib/perl5/5.9.5/armv4l-linux' +archlibexp='/usr/lib/perl5/5.9.5/armv4l-linux' +archname64='' +archname='armv4l-linux' +archobjs='' +asctime_r_proto='0' +awk='awk' +baserev='5.0' +bash='' +bin='/usr/bin' +binexp='/usr/bin' +bison='bison' +byacc='byacc' +byteorder='1234' +c='' +castflags='0' +cat='cat' +cc='arm-none-linux-gnueabi-gcc' +cccdlflags='-fpic' +ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.9.5/armv4l-linux/CORE' +ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' +ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' +ccname='arm-linux-gcc' +ccsymbols='__APCS_32__=1 __ARM_ARCH_3__=1 __CHAR_UNSIGNED__=1 __GNUC_MINOR__=95 __arm__=1 __linux=1 __linux__=1 __unix=1 __unix__=1 cpu=arm machine=arm system=posix system=unix' +ccversion='' +cf_by='red' +cf_email='red@criticalintegration.com' +cf_time='Wed Sep 3 22:24:58 EDT 2003' +charsize='1' +chgrp='' +chmod='chmod' +chown='' +clocktype='clock_t' +comm='comm' +compress='' +contains='grep' +cp='cp' +cpio='' +cpp='cpp' +cpp_stuff='42' +cppccsymbols='__ELF__=1 __GNUC__=2 linux=1 unix=1' +cppflags='-fno-strict-aliasing -I/usr/local/include' +cpplast='-' +cppminus='-' +cpprun='arm-none-linux-gnueabi-gcc -E' +cppstdin='arm-none-linux-gnueabi-gcc -E' +cppsymbols='_FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=2 __GNUC_MINOR__=95 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 __linux=1 __linux__=1 __unix=1 __unix__=1' +crypt_r_proto='0' +cryptlib='' +csh='csh' +ctermid_r_proto='0' +ctime_r_proto='0' +d_Gconvert='gcvt((x),(n),(b))' +d_PRIEUldbl='define' +d_PRIFUldbl='define' +d_PRIGUldbl='define' +d_PRIXU64='define' +d_PRId64='define' +d_PRIeldbl='define' +d_PRIfldbl='define' +d_PRIgldbl='define' +d_PRIi64='define' +d_PRIo64='define' +d_PRIu64='define' +d_PRIx64='define' +d_SCNfldbl='define' +d__fwalk='undef' +d_access='define' +d_accessx='undef' +d_aintl='undef' +d_alarm='define' +d_archlib='define' +d_asctime_r='undef' +d_atolf='undef' +d_atoll='define' +d_attribute_format='undef' +d_attribute_malloc='undef' +d_attribute_nonnull='undef' +d_attribute_noreturn='undef' +d_attribute_pure='undef' +d_attribute_unused='undef' +d_attribute_warn_unused_result='undef' +d_bcmp='define' +d_bcopy='define' +d_bsd='undef' +d_bsdgetpgrp='undef' +d_bsdsetpgrp='undef' +d_builtin_choose_expr='define' +d_builtin_expect='define' +d_bzero='define' +d_c99_variadic_macros='undef' +d_casti32='define' +d_castneg='define' +d_charvspr='undef' +d_chown='define' +d_chroot='define' +d_chsize='undef' +d_class='undef' +d_clearenv='define' +d_closedir='define' +d_cmsghdr_s='define' +d_const='define' +d_copysignl='define' +d_cplusplus='undef' +d_crypt='define' +d_crypt_r='undef' +d_csh='define' +d_ctermid='undef' +d_ctermid_r='undef' +d_ctime_r='undef' +d_cuserid='define' +d_dbl_dig='define' +d_dbminitproto='undef' +d_difftime='define' +d_dir_dd_fd='undef' +d_dirfd='define' +d_dirnamlen='undef' +d_dlerror='define' +d_dlopen='define' +d_dlsymun='undef' +d_dosuid='undef' +d_drand48_r='undef' +d_drand48proto='define' +d_dup2='define' +d_eaccess='undef' +d_endgrent='define' +d_endgrent_r='undef' +d_endhent='define' +d_endhostent_r='undef' +d_endnent='define' +d_endnetent_r='undef' +d_endpent='define' +d_endprotoent_r='undef' +d_endpwent='define' +d_endpwent_r='undef' +d_endsent='define' +d_endservent_r='undef' +d_eofnblk='define' +d_eunice='undef' +d_faststdio='define' +d_fchdir='define' +d_fchmod='define' +d_fchown='define' +d_fcntl='define' +d_fcntl_can_lock='define' +d_fd_macros='define' +d_fd_set='define' +d_fds_bits='undef' +d_fgetpos='define' +d_finite='define' +d_finitel='define' +d_flexfnam='define' +d_flock='define' +d_flockproto='define' +d_fork='define' +d_fp_class='undef' +d_fpathconf='define' +d_fpclass='undef' +d_fpclassify='undef' +d_fpclassl='undef' +d_fpos64_t='undef' +d_frexpl='define' +d_fs_data_s='undef' +d_fseeko='define' +d_fsetpos='define' +d_fstatfs='define' +d_fstatvfs='define' +d_fsync='define' +d_ftello='define' +d_ftime='undef' +d_futimes='undef' +d_getcwd='define' +d_getespwnam='undef' +d_getfsstat='undef' +d_getgrent='define' +d_getgrent_r='undef' +d_getgrgid_r='undef' +d_getgrnam_r='undef' +d_getgrps='define' +d_gethbyaddr='define' +d_gethbyname='define' +d_gethent='define' +d_gethname='define' +d_gethostbyaddr_r='undef' +d_gethostbyname_r='undef' +d_gethostent_r='undef' +d_gethostprotos='define' +d_getitimer='define' +d_getlogin='define' +d_getlogin_r='undef' +d_getmnt='undef' +d_getmntent='define' +d_getnbyaddr='define' +d_getnbyname='define' +d_getnent='define' +d_getnetbyaddr_r='undef' +d_getnetbyname_r='undef' +d_getnetent_r='undef' +d_getnetprotos='define' +d_getpagsz='define' +d_getpbyname='define' +d_getpbynumber='define' +d_getpent='define' +d_getpgid='define' +d_getpgrp2='undef' +d_getpgrp='define' +d_getppid='define' +d_getprior='define' +d_getprotobyname_r='undef' +d_getprotobynumber_r='undef' +d_getprotoent_r='undef' +d_getprotoprotos='define' +d_getprpwnam='undef' +d_getpwent='define' +d_getpwent_r='undef' +d_getpwnam_r='undef' +d_getpwuid_r='undef' +d_getsbyname='define' +d_getsbyport='define' +d_getsent='define' +d_getservbyname_r='undef' +d_getservbyport_r='undef' +d_getservent_r='undef' +d_getservprotos='define' +d_getspnam='define' +d_getspnam_r='undef' +d_gettimeod='define' +d_gmtime_r='undef' +d_gnulibc='define' +d_grpasswd='define' +d_hasmntopt='define' +d_htonl='define' +d_ilogbl='define' +d_inc_version_list='define' +d_index='undef' +d_inetaton='define' +d_int64_t='define' +d_isascii='define' +d_isfinite='undef' +d_isinf='define' +d_isnan='define' +d_isnanl='define' +d_killpg='define' +d_lchown='define' +d_ldbl_dig='define' +d_libm_lib_version='define' +d_link='define' +d_localtime_r='undef' +d_localtime_r_needs_tzset='undef' +d_locconv='define' +d_lockf='define' +d_longdbl='define' +d_longlong='define' +d_lseekproto='define' +d_lstat='define' +d_madvise='define' +d_malloc_good_size='undef' +d_malloc_size='undef' +d_mblen='define' +d_mbstowcs='define' +d_mbtowc='define' +d_memchr='define' +d_memcmp='define' +d_memcpy='define' +d_memmove='define' +d_memset='define' +d_mkdir='define' +d_mkdtemp='define' +d_mkfifo='define' +d_mkstemp='define' +d_mkstemps='undef' +d_mktime='define' +d_mmap='define' +d_modfl='define' +d_modfl_pow32_bug='undef' +d_modflproto='undef' +d_mprotect='define' +d_msg='define' +d_msg_ctrunc='define' +d_msg_dontroute='define' +d_msg_oob='define' +d_msg_peek='define' +d_msg_proxy='define' +d_msgctl='define' +d_msgget='define' +d_msghdr_s='define' +d_msgrcv='define' +d_msgsnd='define' +d_msync='define' +d_munmap='define' +d_mymalloc='undef' +d_nice='define' +d_nl_langinfo='define' +d_nv_preserves_uv='define' +d_nv_zero_is_allbits_zero='undef' +d_off64_t='undef' +d_old_pthread_create_joinable='undef' +d_oldpthreads='undef' +d_oldsock='undef' +d_open3='define' +d_pathconf='define' +d_pause='define' +d_perl_otherlibdirs='undef' +d_phostname='undef' +d_pipe='define' +d_poll='define' +d_portable='define' +d_printf_format_null='undef' +d_procselfexe='define' +d_pseudofork='undef' +d_pthread_atfork='undef' +d_pthread_attr_setscope='define' +d_pthread_yield='undef' +d_pwage='undef' +d_pwchange='undef' +d_pwclass='undef' +d_pwcomment='undef' +d_pwexpire='undef' +d_pwgecos='define' +d_pwpasswd='define' +d_pwquota='undef' +d_qgcvt='define' +d_quad='define' +d_random_r='undef' +d_readdir64_r='undef' +d_readdir='define' +d_readdir_r='undef' +d_readlink='define' +d_readv='define' +d_recvmsg='define' +d_rename='define' +d_rewinddir='define' +d_rmdir='define' +d_safebcpy='undef' +d_safemcpy='undef' +d_sanemcmp='define' +d_sbrkproto='define' +d_scalbnl='define' +d_sched_yield='define' +d_scm_rights='define' +d_seekdir='define' +d_select='define' +d_sem='define' +d_semctl='define' +d_semctl_semid_ds='define' +d_semctl_semun='define' +d_semget='define' +d_semop='define' +d_sendmsg='define' +d_setegid='define' +d_seteuid='define' +d_setgrent='define' +d_setgrent_r='undef' +d_setgrps='define' +d_sethent='define' +d_sethostent_r='undef' +d_setitimer='define' +d_setlinebuf='define' +d_setlocale='define' +d_setlocale_r='undef' +d_setnent='define' +d_setnetent_r='undef' +d_setpent='define' +d_setpgid='define' +d_setpgrp2='undef' +d_setpgrp='define' +d_setprior='define' +d_setproctitle='undef' +d_setprotoent_r='undef' +d_setpwent='define' +d_setpwent_r='undef' +d_setregid='define' +d_setresgid='define' +d_setresuid='define' +d_setreuid='define' +d_setrgid='undef' +d_setruid='undef' +d_setsent='define' +d_setservent_r='undef' +d_setsid='define' +d_setvbuf='define' +d_sfio='undef' +d_shm='define' +d_shmat='define' +d_shmatprototype='define' +d_shmctl='define' +d_shmdt='define' +d_shmget='define' +d_sigaction='define' +d_signbit='define' +d_sigprocmask='define' +d_sigsetjmp='define' +d_sitearch='define' +d_snprintf='undef' +d_sockatmark='undef' +d_sockatmarkproto='undef' +d_socket='define' +d_socklen_t='define' +d_sockpair='define' +d_socks5_init='undef' +d_sprintf_returns_strlen='define' +d_sqrtl='define' +d_srand48_r='undef' +d_srandom_r='undef' +d_sresgproto='undef' +d_sresuproto='undef' +d_statblks='define' +d_statfs_f_flags='undef' +d_statfs_s='define' +d_statvfs='define' +d_stdio_cnt_lval='undef' +d_stdio_ptr_lval='define' +d_stdio_ptr_lval_nochange_cnt='undef' +d_stdio_ptr_lval_sets_cnt='define' +d_stdio_stream_array='undef' +d_stdiobase='define' +d_stdstdio='define' +d_strchr='define' +d_strcoll='define' +d_strctcpy='define' +d_strerrm='strerror(e)' +d_strerror='define' +d_strerror_r='undef' +d_strftime='define' +d_strlcat='undef' +d_strlcpy='undef' +d_strtod='define' +d_strtol='define' +d_strtold='define' +d_strtoll='define' +d_strtoq='define' +d_strtoul='define' +d_strtoull='define' +d_strtouq='define' +d_strxfrm='define' +d_suidsafe='undef' +d_symlink='define' +d_syscall='define' +d_syscallproto='define' +d_sysconf='define' +d_sysernlst='' +d_syserrlst='define' +d_system='define' +d_tcgetpgrp='define' +d_tcsetpgrp='define' +d_telldir='define' +d_telldirproto='define' +d_time='define' +d_times='define' +d_tm_tm_gmtoff='define' +d_tm_tm_zone='define' +d_tmpnam_r='undef' +d_truncate='define' +d_ttyname_r='undef' +d_tzname='define' +d_u32align='undef' +d_ualarm='define' +d_umask='define' +d_uname='define' +d_union_semun='undef' +d_unordered='undef' +d_unsetenv='define' +d_usleep='define' +d_usleepproto='define' +d_ustat='define' +d_vendorarch='undef' +d_vendorbin='undef' +d_vendorlib='undef' +d_vendorscript='undef' +d_vfork='undef' +d_void_closedir='undef' +d_voidsig='define' +d_voidtty='' +d_volatile='define' +d_vprintf='define' +d_vsnprintf='define' +d_wait4='define' +d_waitpid='define' +d_wcstombs='define' +d_wctomb='define' +d_writev='define' +d_xenix='undef' +date='date' +db_hashtype='u_int32_t' +db_prefixtype='size_t' +db_version_major='' +db_version_minor='' +db_version_patch='' +defvoidused='15' +direntrytype='struct dirent' +dlext='so' +dlsrc='dl_dlopen.xs' +doublesize='8' +drand01='drand48()' +drand48_r_proto='0' +dynamic_ext='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared' +eagain='EAGAIN' +ebcdic='undef' +echo='echo' +egrep='egrep' +emacs='' +endgrent_r_proto='0' +endhostent_r_proto='0' +endnetent_r_proto='0' +endprotoent_r_proto='0' +endpwent_r_proto='0' +endservent_r_proto='0' +eunicefix=':' +exe_ext='' +expr='expr' +extensions='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared Errno' +extras='' +fflushNULL='define' +fflushall='undef' +find='' +firstmakefile='makefile' +flex='' +fpossize='16' +fpostype='fpos_t' +freetype='void' +from=':' +full_ar='/usr/bin/ar' +full_csh='/bin/csh' +full_sed='/bin/sed' +gccansipedantic='' +gccosandvers='' +gccversion='2.95.3 20010125 (prerelease)' +getgrent_r_proto='0' +getgrgid_r_proto='0' +getgrnam_r_proto='0' +gethostbyaddr_r_proto='0' +gethostbyname_r_proto='0' +gethostent_r_proto='0' +getlogin_r_proto='0' +getnetbyaddr_r_proto='0' +getnetbyname_r_proto='0' +getnetent_r_proto='0' +getprotobyname_r_proto='0' +getprotobynumber_r_proto='0' +getprotoent_r_proto='0' +getpwent_r_proto='0' +getpwnam_r_proto='0' +getpwuid_r_proto='0' +getservbyname_r_proto='0' +getservbyport_r_proto='0' +getservent_r_proto='0' +getspnam_r_proto='0' +gidformat='"lu"' +gidsign='1' +gidsize='4' +gidtype='gid_t' +glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib ' +gmake='gmake' +gmtime_r_proto='0' +gnulibc_version='2.2.2' +grep='grep' +groupcat='cat /etc/group' +groupstype='gid_t' +gzip='gzip' +h_fcntl='false' +h_sysfile='true' +hint='recommended' +hostcat='cat /etc/hosts' +html1dir=' ' +html1direxp='' +html3dir=' ' +html3direxp='' +i16size='2' +i16type='short' +i32size='4' +i32type='long' +i64size='8' +i64type='long long' +i8size='1' +i8type='char' +i_arpainet='define' +i_bsdioctl='' +i_crypt='define' +i_db='undef' +i_dbm='undef' +i_dirent='define' +i_dld='undef' +i_dlfcn='define' +i_fcntl='undef' +i_float='define' +i_fp='undef' +i_fp_class='undef' +i_gdbm='undef' +i_grp='define' +i_ieeefp='undef' +i_inttypes='define' +i_langinfo='define' +i_libutil='undef' +i_limits='define' +i_locale='define' +i_machcthr='undef' +i_malloc='define' +i_math='define' +i_memory='undef' +i_mntent='define' +i_ndbm='undef' +i_netdb='define' +i_neterrno='undef' +i_netinettcp='define' +i_niin='define' +i_poll='define' +i_prot='undef' +i_pthread='define' +i_pwd='define' +i_rpcsvcdbm='undef' +i_sfio='undef' +i_sgtty='undef' +i_shadow='define' +i_socks='undef' +i_stdarg='define' +i_stddef='define' +i_stdlib='define' +i_string='define' +i_sunmath='undef' +i_sysaccess='undef' +i_sysdir='define' +i_sysfile='define' +i_sysfilio='undef' +i_sysin='undef' +i_sysioctl='define' +i_syslog='define' +i_sysmman='define' +i_sysmode='undef' +i_sysmount='define' +i_sysndir='undef' +i_sysparam='define' +i_sysresrc='define' +i_syssecrt='undef' +i_sysselct='define' +i_syssockio='undef' +i_sysstat='define' +i_sysstatfs='define' +i_sysstatvfs='define' +i_systime='define' +i_systimek='undef' +i_systimes='define' +i_systypes='define' +i_sysuio='define' +i_sysun='define' +i_sysutsname='define' +i_sysvfs='define' +i_syswait='define' +i_termio='undef' +i_termios='define' +i_time='define' +i_unistd='define' +i_ustat='define' +i_utime='define' +i_values='define' +i_varargs='undef' +i_varhdr='stdarg.h' +i_vfork='undef' +ignore_versioned_solibs='y' +inc_version_list=' ' +inc_version_list_init='0' +incpath='' +inews='' +installarchlib='./install_me_here/usr/lib/perl5/5.9.5/armv4l-linux' +installbin='./install_me_here/usr/bin' +installhtml1dir='' +installhtml3dir='' +installman1dir='./install_me_here/usr/share/man/man1' +installman3dir='./install_me_here/usr/share/man/man3' +installprefix='./install_me_here/usr' +installprefixexp='./install_me_here/usr' +installprivlib='./install_me_here/usr/lib/perl5/5.9.5' +installscript='./install_me_here/usr/bin' +installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.9.5/armv4l-linux' +installsitebin='./install_me_here/usr/bin' +installsitehtml1dir='' +installsitehtml3dir='' +installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.9.5' +installsiteman1dir='./install_me_here/usr/share/man/man1' +installsiteman3dir='./install_me_here/usr/share/man/man3' +installsitescript='./install_me_here/usr/bin' +installstyle='./install_me_herelib/perl5' +installusrbinperl='undef' +installvendorarch='' +installvendorbin='' +installvendorhtml1dir='' +installvendorhtml3dir='' +installvendorlib='' +installvendorman1dir='' +installvendorman3dir='' +installvendorscript='' +intsize='4' +issymlink='/usr/bin/test -h' +ivdformat='"ld"' +ivsize='4' +ivtype='long' +known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared' +ksh='' +ld='arm-none-linux-gnueabi-gcc' +lddlflags='-shared -L/usr/local/lib' +ldflags=' -L/usr/local/lib' +ldflags_uselargefiles='' +ldlibpthname='LD_LIBRARY_PATH' +less='less' +lib_ext='.arma' +libc='/lib/libc-2.2.2.so' +libperl='libperl.arma' +libpth='/usr/local/lib /lib /usr/lib' +libs='-lnsl -ldl -lm -lcrypt -lutil -lc' +libsdirs=' /usr/lib' +libsfiles=' libnsl.so libdl.so libm.so libcrypt.so libutil.so libc.so' +libsfound=' /usr/lib/libnsl.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libcrypt.so /usr/lib/libutil.so /usr/lib/libc.so' +libspath=' /usr/local/lib /lib /usr/lib' +libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util c cposix posix ucb BSD' +libswanted_uselargefiles='' +line='' +lint='' +lkflags='' +ln='ln' +lns='/bin/ln -s' +localtime_r_proto='0' +locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include' +loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib' +longdblsize='8' +longlongsize='8' +longsize='4' +lp='' +lpr='' +ls='ls' +lseeksize='8' +lseektype='off_t' +mad='undef' +mail='' +mailx='' +make='make' +make_set_make='#' +mallocobj='' +mallocsrc='' +malloctype='void *' +man1dir='/usr/share/man/man1' +man1direxp='/usr/share/man/man1' +man1ext='1' +man3dir='/usr/share/man/man3' +man3direxp='/usr/share/man/man3' +man3ext='3' +mips_type='' +mistrustnm='' +mkdir='mkdir' +mmaptype='void *' +modetype='mode_t' +more='more' +multiarch='undef' +mv='' +myarchname='armv4l-linux' +mydomain='.criticalintegration.com' +myhostname='openzaurus' +myuname='linux openzaurus.criticalintegration.com 2.4.6-rmk1-np2-embedix #15 Wed Aug 6 07:49:44 UTC 2003 armv4l unknown ' +n='-n' +need_va_copy='undef' +netdb_hlen_type='size_t' +netdb_host_type='const void *' +netdb_name_type='const char *' +netdb_net_type='in_addr_t' +nm='nm' +nm_opt='' +nm_so_opt='--dynamic' +nonxs_ext='Errno' +nroff='nroff' +nvEUformat='"E"' +nvFUformat='"F"' +nvGUformat='"G"' +nv_preserves_uv_bits='32' +nveformat='"e"' +nvfformat='"f"' +nvgformat='"g"' +nvsize='8' +nvtype='double' +o_nonblock='O_NONBLOCK' +obj_ext='.armo' +old_pthread_create_joinable='' +optimize='-O2' +orderlib='false' +osname='linux' +osvers='2.6' +otherlibdirs=' ' +package='perl5' +pager='/usr/bin/less' +passcat='cat /etc/passwd' +patchlevel='9' +path_sep=':' +perl5='/usr/bin/perl' +perl='' +perl_patchlevel='' +perladmin='red@criticalintegration.com' +perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc' +perlpath='/usr/bin/perl' +pg='pg' +phostname='hostname' +pidtype='pid_t' +plibpth='' +pmake='' +pr='' +prefix='/usr' +prefixexp='/usr' +privlib='/usr/lib/perl5/5.9.5' +privlibexp='/usr/lib/perl5/5.9.5' +procselfexe='"/proc/self/exe"' +prototype='define' +ptrsize='4' +quadkind='3' +quadtype='long long' +randbits='48' +randfunc='drand48' +random_r_proto='0' +randseedtype='long' +ranlib=':' +rd_nodata='-1' +readdir64_r_proto='0' +readdir_r_proto='0' +revision='5' +rm='rm' +rmail='' +run='' +runnm='false' +sPRIEUldbl='"E"' +sPRIFUldbl='"F"' +sPRIGUldbl='"G"' +sPRIXU64='"LX"' +sPRId64='"Ld"' +sPRIeldbl='"e"' +sPRIfldbl='"f"' +sPRIgldbl='"g"' +sPRIi64='"Li"' +sPRIo64='"Lo"' +sPRIu64='"Lu"' +sPRIx64='"Lx"' +sSCNfldbl='"f"' +sched_yield='sched_yield()' +scriptdir='/usr/bin' +scriptdirexp='/usr/bin' +sed='sed' +seedfunc='srand48' +selectminbits='32' +selecttype='fd_set *' +sendmail='' +setgrent_r_proto='0' +sethostent_r_proto='0' +setlocale_r_proto='0' +setnetent_r_proto='0' +setprotoent_r_proto='0' +setpwent_r_proto='0' +setservent_r_proto='0' +sh='/bin/sh' +shar='' +sharpbang='#!' +shmattype='void *' +shortsize='2' +shrpenv='' +shsharp='true' +sig_count='64' +sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS RTMIN NUM33 NUM34 NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 RTMAX IOT CLD POLL UNUSED ' +sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "RTMIN", "NUM33", "NUM34", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0' +sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 6 17 29 31 ' +sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0' +sig_size='68' +signal_t='void' +sitearch='/usr/lib/perl5/site_perl/5.9.5/armv4l-linux' +sitearchexp='/usr/lib/perl5/site_perl/5.9.5/armv4l-linux' +sitebin='/usr/bin' +sitebinexp='/usr/bin' +sitehtml1dir='' +sitehtml1direxp='' +sitehtml3dir='' +sitehtml3direxp='' +sitelib='/usr/lib/perl5/site_perl/5.9.5' +sitelib_stem='/usr/lib/perl5/site_perl' +sitelibexp='/usr/lib/perl5/site_perl/5.9.5' +siteman1dir='/usr/share/man/man1' +siteman1direxp='/usr/share/man/man1' +siteman3dir='/usr/share/man/man3' +siteman3direxp='/usr/share/man/man3' +siteprefix='/usr' +siteprefixexp='/usr' +sitescript='/usr/bin' +sitescriptexp='/usr/bin' +sizesize='4' +sizetype='size_t' +sleep='' +smail='' +so='so' +sockethdr='' +socketlib='' +socksizetype='socklen_t' +sort='sort' +spackage='Perl5' +spitshell='cat' +srand48_r_proto='0' +srandom_r_proto='0' +src='.' +ssizetype='ssize_t' +startperl='#!/usr/bin/perl' +startsh='#!/bin/sh' +static_ext='DynaLoader ' +stdchar='char' +stdio_base='((fp)->_IO_read_base)' +stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)' +stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)' +stdio_filbuf='' +stdio_ptr='((fp)->_IO_read_ptr)' +stdio_stream_array='' +strerror_r_proto='0' +strings='/usr/include/string.h' +submit='' +subversion='3' +sysman='/usr/share/man/man1' +tail='' +tar='' +targetarch='' +tbl='' +tee='' +test='test' +timeincl='/usr/include/sys/time.h /usr/include/time.h ' +timetype='time_t' +tmpnam_r_proto='0' +to=':' +touch='touch' +tr='tr' +trnl='\n' +troff='' +ttyname_r_proto='0' +u16size='2' +u16type='unsigned short' +u32size='4' +u32type='unsigned long' +u64size='8' +u64type='unsigned long long' +u8size='1' +u8type='unsigned char' +uidformat='"lu"' +uidsign='1' +uidsize='4' +uidtype='uid_t' +uname='uname' +uniq='uniq' +uquadtype='unsigned long long' +use5005threads='undef' +use64bitall='undef' +use64bitint='undef' +usecrosscompile='undef' +usedl='define' +usefaststdio='define' +useithreads='undef' +uselargefiles='define' +uselongdouble='undef' +usemallocwrap='define' +usemorebits='undef' +usemultiplicity='undef' +usemymalloc='n' +usenm='false' +useopcode='true' +useperlio='define' +useposix='true' +usereentrant='undef' +userelocatableinc='undef' +usesfio='false' +useshrplib='true' +usesitecustomize='undef' +usesocks='undef' +usethreads='undef' +usevendorprefix='undef' +usevfork='false' +usrinc='/usr/include' +uuname='' +uvXUformat='"lX"' +uvoformat='"lo"' +uvsize='4' +uvtype='unsigned long' +uvuformat='"lu"' +uvxformat='"lx"' +vendorarch='' +vendorarchexp='' +vendorbin='' +vendorbinexp='' +vendorhtml1dir=' ' +vendorhtml1direxp='' +vendorhtml3dir=' ' +vendorhtml3direxp='' +vendorlib='' +vendorlib_stem='' +vendorlibexp='' +vendorman1dir=' ' +vendorman1direxp='' +vendorman3dir=' ' +vendorman3direxp='' +vendorprefix='' +vendorprefixexp='' +vendorscript='' +vendorscriptexp='' +version='5.9.5' +version_patchlevel_string='version 9 subversion 4' +versiononly='undef' +vi='' +voidflags='15' +xlibpth='/usr/lib/386 /lib/386' +yacc='yacc' +yaccflags='' +zcat='' +zip='zip' +# Configure command line arguments. +config_arg0='Configure' +config_args='' +config_argc=0 +PERL_REVISION=5 +PERL_VERSION=9 +PERL_SUBVERSION=4 +PERL_API_REVISION=5 +PERL_API_VERSION=9 +PERL_API_SUBVERSION=0 +PERL_PATCHLEVEL= +PERL_CONFIG_SH=true diff --git a/MANIFEST b/MANIFEST index a481c6b..89f1a70 100644 --- a/MANIFEST +++ b/MANIFEST @@ -27,10 +27,14 @@ cop.h Control operator header Copying The GNU General Public License Cross/config Cross-compilation Cross/config.sh-arm-linux Cross-compilation +Cross/config.sh-arm-linux-n770 Cross-compilation +Cross/build-arm-n770.sh Cross-compilation Cross/generate_config_sh Cross-compilation Cross/installperl.patch Cross-compilation Cross/Makefile Cross-compilation Cross/Makefile.SH.patch Cross-compilation +Cross/Makefile-cross.SH Cross-compilation +Cross/cflags-cross-arm Cross-compilation Cross/README Cross-compilation Cross/TODO Cross-compilation Cross/warp Cross-compilation @@ -1190,6 +1194,7 @@ ext/Unicode/Normalize/t/split.t Unicode::Normalize ext/Unicode/Normalize/t/test.t Unicode::Normalize ext/Unicode/Normalize/t/tie.t Unicode::Normalize ext/util/make_ext Used by Makefile to execute extension Makefiles +ext/util/make_ext_cross Cross-compilation ext/Win32API/File/buffers.h Win32API::File extension ext/Win32API/File/cFile.h Win32API::File extension ext/Win32API/File/cFile.pc Win32API::File extension diff --git a/configpm b/configpm index cb6122c..ced0ad7 100755 --- a/configpm +++ b/configpm @@ -2,8 +2,8 @@ # # configpm # -# Copyright (C) 1994, 1995, 1996 1997, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Larry Wall and others. +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007 Larry Wall and others. # # # Regenerate the files @@ -13,6 +13,7 @@ # lib/Config.pod # lib/Cross.pm (optionally) # +# # from the contents of the static files # # Porting/Glossary @@ -22,6 +23,8 @@ # # config.sh # +# Note that output directory is xlib/[cross-name]/ for cross-compiling +# # It will only update Config.pm and Config_heavy.pl if the contents of # either file would be different. Note that *both* files are updated in # this case, since for example an extension makefile that has a dependency @@ -86,7 +89,7 @@ sub opts { my %Opts = opts(); -my ($Config_PM, $Config_heavy); +my ($Config_SH, $Config_PM, $Config_heavy, $Config_POD); my $Glossary = $ARGV[1] || 'Porting/Glossary'; if ($Opts{cross}) { @@ -94,9 +97,13 @@ if ($Opts{cross}) { mkdir "xlib"; mkdir "xlib/$Opts{cross}"; $Config_PM = $ARGV[0] || "xlib/$Opts{cross}/Config.pm"; + $Config_POD = "xlib/$Opts{cross}/Config.pod"; + $Config_SH = "Cross/config-$Opts{cross}.sh"; } else { $Config_PM = $ARGV[0] || 'lib/Config.pm'; + $Config_POD = "lib/Config.pod"; + $Config_SH = "config.sh"; } if ($Opts{heavy}) { $Config_heavy = $Opts{heavy}; @@ -184,7 +191,7 @@ my %Data = (); my %seen_quotes; { my ($name, $val); - open(CONFIG_SH, 'config.sh') || die "Can't open config.sh: $!"; + open(CONFIG_SH, $Config_SH) || die "Can't open $Config_SH: $!"; while () { next if m:^#!/bin/sh:; @@ -717,7 +724,7 @@ tie %%Config, 'Config', { ENDOFTIE -open(CONFIG_POD, ">lib/Config.pod") or die "Can't open lib/Config.pod: $!"; +open(CONFIG_POD, ">$Config_POD") or die "Can't open $Config_POD: $!"; print CONFIG_POD <<'ENDOFTAIL'; =head1 NAME @@ -917,7 +924,7 @@ ENDOFTAIL close(GLOS) if $Opts{glossary}; close(CONFIG_POD); -print "written lib/Config.pod\n"; +print "written $Config_POD\n"; my $orig_config_txt = ""; my $orig_heavy_txt = ""; diff --git a/ext/util/make_ext_cross b/ext/util/make_ext_cross new file mode 100644 index 0000000..4bbfae3 --- /dev/null +++ b/ext/util/make_ext_cross @@ -0,0 +1,141 @@ +#!/bin/sh + +# This script acts as a simple interface for building extensions. +# (borrowed from make_ext; but it will be deleted in future versions) +# It primarily used by the perl Makefile: +# +# d_dummy $(dynamic_ext): miniperl preplibrary FORCE +# @sh ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) +# +# It may be deleted in a later release of perl so try to +# avoid using it for other purposes. + +target=$1; shift +extspec=$1; shift +makecmd=$1; shift # Should be something like MAKE=make +passthru="$*" # allow extra macro=value to be passed through +echo "" + +# Previously, $make was taken from config.sh. However, the user might +# instead be running a possibly incompatible make. This might happen if +# the user types "gmake" instead of a plain "make", for example. The +# correct current value of MAKE will come through from the main perl +# makefile as MAKE=/whatever/make in $makecmd. We'll be cautious in +# case third party users of this script (are there any?) don't have the +# MAKE=$(MAKE) argument, which was added after 5.004_03. +case "$makecmd" in +MAKE=*) + eval $makecmd + ;; +*) echo 'ext/util/make_ext: WARNING: Please include MAKE=$(MAKE)' + echo ' in your call to make_ext. See ext/util/make_ext for details.' + exit 1 + ;; +esac + + +case $CONFIG in +'') + if test -f config.sh; then TOP=.; + elif test -f ../config.sh; then TOP=..; + elif test -f ../../config.sh; then TOP=../..; + elif test -f ../../../config.sh; then TOP=../../..; + elif test -f ../../../../config.sh; then TOP=../../../..; + else + echo "Can't find config.sh generated by Configure"; exit 1 + fi + . $TOP/config.sh + ;; +esac + +if test "X$extspec" = X; then + echo "make_ext: no extension specified" + exit 1; +fi + +# The Perl Makefile.SH will expand all extensions to +# lib/auto/X/X.a (or lib/auto/X/Y/Y.a if nested) +# A user wishing to run make_ext might use +# X (or X/Y or X::Y if nested) + +# canonise into X/Y form (pname) +case "$extspec" in +lib*) # Remove lib/auto prefix and /*.* suffix + pname=`echo "$extspec" | sed -e 's:^lib/auto/::' -e 's:/[^/]*\.[^/]*$::' ` ;; +ext*) # Remove ext/ prefix and /pm_to_blib suffix + pname=`echo "$extspec" | sed -e 's:^ext/::' -e 's:/pm_to_blib$::' ` ;; +*::*) # Convert :: to / + pname=`echo "$extspec" | sed -e 's/::/\//g' ` ;; +*.*o) pname=`echo "$extspec" | sed -e 's/\..*o//'` ;; +*) pname="$extspec" ;; +esac +# echo "Converted $extspec to $pname" + +mname=`echo "$pname" | sed -e 's!/!::!g'` +depth=`echo "$pname" | sed -e 's![^/][^/]*!..!g'` +makefile=Makefile +makeargs='' +makeopts='' + +if test ! -d "ext/$pname"; then + echo " Skipping $extspec (directory does not exist)" + exit 0 # not an error ? +fi + + +echo " Making $mname ($target)" + +cd ext/$pname + +# check link type and do any preliminaries. Valid link types are +# 'dynamic', 'static', and 'static_pic' (the last one respects +# CCCDLFLAGS such as -fPIC -- see static_target in the main Makefile.SH) +case "$target" in +dynamic) makeargs="LINKTYPE=dynamic"; + target=all + ;; +static) makeargs="LINKTYPE=static CCCDLFLAGS=" + target=all + ;; +static_pic) makeargs="LINKTYPE=static" + target=all + ;; +nonxs) makeargs=""; + target=all + ;; + +*clean) # If Makefile has been moved to Makefile.old by a make clean + # then use Makefile.old for realclean rather than rebuild it + if test ! -f $makefile -a -f Makefile.old; then + makefile=Makefile.old + makeopts="-f $makefile" + echo "Note: Using Makefile.old" + fi + ;; + +*) # for the time being we are strict about what make_ext is used for + echo "make_ext: unknown make target '$target'"; exit 1 + ;; +'') echo "make_ext: no make target specified (eg static or dynamic)"; exit 1 + ;; +esac + +if test ! -f $makefile ; then + test -f Makefile.PL && ../$depth/miniperl -I../$depth/lib -MCross Makefile.PL INSTALLDIRS=perl PERL_CORE=1 $passthru +fi +if test ! -f $makefile ; then + echo "Warning: No Makefile!" +fi + +case "$target" in +clean) ;; +realclean) ;; +*) # Give makefile an opportunity to rewrite itself. + # reassure users that life goes on... + $MAKE config MAKE=$MAKE $passthru || echo "$MAKE config failed, continuing anyway..." + ;; +esac + +$MAKE $makeopts $target MAKE=$MAKE $makeargs $passthru || exit + +exit $?