First steps of making builds outside the source
Jarkko Hietaniemi [Sun, 25 Jul 1999 12:27:20 +0000 (12:27 +0000)]
directory possible.  These should get us as far
as miniperl, then building DynaLoader falls into
tiny twinkling pieces as MakeMaker knows nothing
of VPATH mindset.

p4raw-id: //depot/cfgperl@3735

17 files changed:
Configure
Makefile.SH
cflags.SH
configpm
ext/util/make_ext
lib/AutoSplit.pm
makedepend.SH
pod/pod2html.PL
pod/pod2latex.PL
pod/pod2man.PL
pod/pod2text.PL
pod/pod2usage.PL
pod/podchecker.PL
pod/podselect.PL
writemain.SH
x2p/Makefile.SH
x2p/cflags.SH

index 240154f..654312f 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,7 +20,7 @@
 
 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
-# Generated on Sun Jul 25 13:48:34 EET DST 1999 [metaconfig 3.0 PL70]
+# Generated on Sun Jul 25 14:54:07 EET DST 1999 [metaconfig 3.0 PL70]
 # (with additional metaconfig patches by perlbug@perl.com)
 
 cat >/tmp/c1$$ <<EOF
@@ -1296,7 +1296,12 @@ esac
 : Find the path to the source tree
 case "$src" in
 '') case "$0" in
-    */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
+    */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
+         case "$src" in
+        /*)    ;;
+         *)    src=`cd ../$src && pwd` ;;
+        esac
+         ;;
     *)   src='.';;
     esac;;
 esac
@@ -2784,6 +2789,9 @@ exp_file=''
 nopath_ok=''
 orig_rp="$rp"
 orig_dflt="$dflt"
+case "$gfpth" in
+'') gfpth='.' ;;
+esac
 
 case "$fn" in
 *\(*)
@@ -2910,18 +2918,38 @@ while test "$type"; do
                '')
                        case "$type" in
                        File)
-                               if test -f "$ansexp"; then
-                                       type=''
-                               elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
-                               then
-                                       echo "($value is not a plain file, but that's ok.)"
-                                       type=''
-                               fi
+                               for fp in $gfpth; do
+                                       if test "X$fp" = X.; then
+                                           pf="$ansexp"
+                                       else    
+                                           pf="$fp/$ansexp"
+                                       fi
+                                       if test -f "$pf"; then
+                                               type=''
+                                       elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
+                                       then
+                                               echo "($value is not a plain file, but that's ok.)"
+                                               type=''
+                                       fi
+                                       if test X"$type" = X; then
+                                           value="$pf"
+                                           break
+                                       fi
+                               done
                                ;;
                        Directory)
-                               if test -d "$ansexp"; then
-                                       type=''
-                               fi
+                               for fp in $gfpth; do
+                                       if test "X$fp" = X.; then
+                                           pf="$ansexp"
+                                       else    
+                                           pf="$fp/$ansexp"
+                                       fi
+                                       if test -d "$pf"; then
+                                               type=''
+                                               value="$pf"
+                                               break
+                                       fi
+                               done
                                ;;
                        Locate)
                                if test -d "$ansexp"; then
@@ -2975,6 +3003,7 @@ ans="$value"
 rp="$orig_rp"
 dflt="$orig_dflt"
 rm -f getfile.ok
+test "X$gfpthkeep" != Xy && gfpth=""
 EOSC
 
 : determine root of directory hierarchy where package will be installed.
@@ -5169,8 +5198,7 @@ y*) usedl="$define"
        tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
        rp="Source file to use for dynamic loading"
        fn="fne"
-       # XXX This getfile call will fail the existence check if you try 
-       # building away from $src (this is not supported yet).
+       gfpth="$src"
        . ./getfile
        usedl="$define"
        : emulate basename
index 79953c7..8afaae4 100644 (file)
@@ -194,7 +194,22 @@ SHELL = $sh
 # how to tr(anslate) newlines
 TRNL = '$trnl'
 
+# this is where the sources are
+src = $src
+# this is src quoted for use in regexen
+srcqre = `echo $src|sed -e 's@^\.$@\\\.@' -e 's@^\./$@\\\./@' -e 's@^\.\./@\\\.\\\./@g`
+
+# nice makes grok this
+!GROK!THIS!
+if $test X. != X$src; then
+$spitshell >>Makefile <<!GROK!THIS!
+VPATH = .:$src
+!GROK!THIS!
+else
+$spitshell >>Makefile <<!GROK!THIS!
+VPATH = .
 !GROK!THIS!
+fi
 
 ## In the following dollars and backticks do not need the extra backslash.
 $spitshell >>Makefile <<'!NO!SUBS!'
@@ -281,12 +296,12 @@ utilities:        miniperl lib/Config.pm FORCE
 FORCE:
        @sh -c true
 
-miniperlmain$(OBJ_EXT): miniperlmain.c
+miniperlmain$(OBJ_EXT): $(src)/miniperlmain.c
        $(CCCMD) $(PLDLFLAGS) $*.c
 
-perlmain.c: miniperlmain.c config.sh $(FIRSTMAKEFILE)
+perlmain.c: $(src)/miniperlmain.c config.sh $(FIRSTMAKEFILE)
        sh writemain $(DYNALOADER) $(static_ext) > writemain.tmp
-       sh mv-if-diff writemain.tmp perlmain.c
+       sh $(src)/mv-if-diff writemain.tmp perlmain.c
 
 perlmain$(OBJ_EXT): perlmain.c
        $(CCCMD) $(PLDLFLAGS) $*.c
@@ -406,7 +421,7 @@ $(LIBPERL): $& perl$(OBJ_EXT) $(obj) $(LIBPERLEXPORT)
 
 miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL)
        $(LDLIBPTH) $(CC) $(LARGE) $(CLDFLAGS) -o miniperl miniperlmain$(OBJ_EXT) $(LLIBPERL) $(libs)
-       $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e 0 || $(MAKE) minitest
+       $(LDLIBPTH) ./miniperl -w -Ilib -I$(src)/lib -MExporter -e 0 || $(MAKE) minitest
 
 perl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT)
        $(SHRPENV) $(LDLIBPTH) $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
@@ -440,32 +455,41 @@ sperl$(OBJ_EXT): perl.c perly.h patchlevel.h $(h)
        $(CCCMD) -DIAMSUID sperl.c
        $(RMS) sperl.c
 
+lib:
+       @sh ./makedir lib
+
 # We have to call our ./makedir because Ultrix 4.3 make can't handle the line
 #      test -d lib/auto || mkdir lib/auto
 #
 preplibrary: miniperl lib/Config.pm $(plextract)
        @sh ./makedir lib/auto
        @echo " AutoSplitting perl library"
-       $(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \
-               autosplit_lib_modules(@ARGV)' lib/*.pm lib/*/*.pm
+       $(LDLIBPTH) ./miniperl -Ilib -I$(src)/lib -e 'use AutoSplit; \
+               autosplit_lib_modules(@ARGV)' $(src)/lib/*.pm $(src)/lib/*/*.pm
 
 # Take care to avoid modifying lib/Config.pm without reason
 # (If trying to create a new port and having problems with the configpm script, 
 # try 'make minitest' and/or commenting out the tests at the end of configpm.)
-lib/Config.pm: config.sh miniperl configpm
+lib/Config.pm: lib config.sh miniperl configpm
        $(LDLIBPTH) ./miniperl configpm configpm.tmp
-       sh mv-if-diff configpm.tmp $@
+       sh $(src)/mv-if-diff configpm.tmp $@
+
+lib/ExtUtils: lib
+       @sh ./makedir lib/ExtUtils
 
-lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl minimod.pl lib/Config.pm
+lib/ExtUtils/Miniperl.pm: lib/ExtUtils miniperlmain.c miniperl minimod.pl lib/Config.pm
        $(LDLIBPTH) ./miniperl minimod.pl > minimod.tmp
-       sh mv-if-diff minimod.tmp $@
+       sh $(src)/mv-if-diff minimod.tmp $@
 
-lib/re.pm: ext/re/re.pm
+lib/re.pm: lib $(src)/ext/re/re.pm
        rm -f $@
-       cat ext/re/re.pm > $@
+       cat $(src)/ext/re/re.pm > $@
 
-$(plextract):  miniperl lib/Config.pm lib/re.pm
-       $(LDLIBPTH) ./miniperl -Ilib $@.PL
+pod:
+       @sh ./makedir pod
+
+$(plextract):  pod miniperl lib/Config.pm lib/re.pm
+       $(LDLIBPTH) ./miniperl -Ilib -I$(src)/lib $(src)/$@.PL
        
 install: all install.perl install.man
 
@@ -514,13 +538,23 @@ run_byacc:        FORCE
        chmod 664 vms/perly_c.vms vms/perly_h.vms
        perl vms/vms_yfix.pl perly.c perly.h vms/perly_c.vms vms/perly_h.vms
 
+perly$(OBJ_EXT): $(src)/perly.c
+       $(CCCMD) $(PLDLFLAGS) $(src)/perly.c
+
 # 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
+perly.c: $(src)/perly.y
+       -@sh -c true
+
+perly.h: $(src)/perly.y
+       -@sh -c true
+
+# Both the above and below are needed for an out-of-source experience.
+$(src)/perly.c: $(src)/perly.y
        -@sh -c true
 
-perly.h: perly.y
+$(src)/perly.h: $(src)/perly.y
        -@sh -c true
 
 # No compat3.sym here since and including the 5.004_50.
@@ -564,16 +598,16 @@ regen_headers:    FORCE
 # DynaLoader may be needed for extensions that use Makefile.PL.
 
 $(DYNALOADER): miniperl preplibrary FORCE
-       @$(LDLIBPTH) sh ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
+       @$(LDLIBPTH) sh $(src)/ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
 
 d_dummy $(dynamic_ext):        miniperl preplibrary $(DYNALOADER) FORCE
-       @$(LDLIBPTH) sh ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
+       @$(LDLIBPTH) sh $(src)/ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
 
 s_dummy $(static_ext): miniperl preplibrary $(DYNALOADER) FORCE
-       @$(LDLIBPTH) sh ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
+       @$(LDLIBPTH) sh $(src)/ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
 
 n_dummy $(nonxs_ext):  miniperl preplibrary $(DYNALOADER) FORCE
-       @$(LDLIBPTH) sh ext/util/make_ext nonxs $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
+       @$(LDLIBPTH) sh $(src)/ext/util/make_ext nonxs $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
 
 clean:         _tidy _mopup
 
@@ -650,8 +684,8 @@ depend: makedepend
        cd x2p; $(MAKE) depend
 
 # Cannot postpone this until $firstmakefile is ready ;-)
-makedepend: makedepend.SH config.sh
-       sh ./makedepend.SH
+makedepend: $(src)/makedepend.SH config.sh
+       sh $(src)/makedepend.SH
 
 # Cannot delegate rebuilding of t/perl to make to allow interlaced
 # test and minitest
@@ -691,25 +725,25 @@ minitest: miniperl lib/re.pm
 # Please *don't* use this unless all tests pass.
 # If you want to report test failures, use "make nok" instead.
 ok:    utilities
-       $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)'
+       $(LDLIBPTH) ./perl -Ilib -I$(src)/lib utils/perlbug -ok -s '(UNINSTALLED)'
 
 okfile:        utilities
-       $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)' -F perl.ok
+       $(LDLIBPTH) ./perl -Ilib -I$(src)/lib utils/perlbug -ok -s '(UNINSTALLED)' -F perl.ok
 
 nok:   utilities
-       $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)'
+       $(LDLIBPTH) ./perl -Ilib -I$(src)/lib utils/perlbug -nok -s '(UNINSTALLED)'
 
 clist: $(c)
-       echo $(c) | tr ' ' $(TRNL) >.clist
+       echo $(c) | tr ' ' $(TRNL) | sed -e "s@^$(srcqre)/@@" >.clist
 
 hlist:  $(h)
-       echo $(h) | tr ' ' $(TRNL) >.hlist
+       echo $(h) | tr ' ' $(TRNL) | sed -e "s@^$(srcqre)/@@" >.hlist
 
 shlist: $(sh)
-       echo $(sh) | tr ' ' $(TRNL) >.shlist
+       echo $(sh) | tr ' ' $(TRNL) | sed -e "s@^$(srcqre)/@@" >.shlist
 
 pllist: $(pl)
-       echo $(pl) | tr ' ' $(TRNL) >.pllist
+       echo $(pl) | tr ' ' $(TRNL) | sed -e "s@^$(srcqre)/@@" >.pllist
 
 Makefile: Makefile.SH ./config.sh
        $(SHELL) Makefile.SH
index 715680e..2aed681 100755 (executable)
--- a/cflags.SH
+++ b/cflags.SH
@@ -24,6 +24,7 @@ echo "Extracting cflags (with variable substitutions)"
 rm -f cflags
 $spitshell >cflags <<!GROK!THIS!
 $startsh
+src=$src
 !GROK!THIS!
 
 : In the following dollars and backticks do not need the extra backslash.
@@ -74,6 +75,12 @@ for file do
     *) echo $n "    $file.c    $c" ;;
     esac
 
+    : allow for out-of-source experience
+
+    if test "X$src" != X.; then
+        ccflags="$ccflags -I$src -I."
+    fi
+
     : allow variables like toke_cflags to be evaluated
 
     if echo $file | grep -v / >/dev/null
index dd9e858..ac7f3aa 100755 (executable)
--- a/configpm
+++ b/configpm
@@ -1,7 +1,15 @@
 #!./miniperl -w
 
+# File::Spec?
 my $config_pm = $ARGV[0] || 'lib/Config.pm';
-my $glossary = $ARGV[1] || 'Porting/Glossary';
+my $src = '.';
+# File::Dirname?  File::Spec?
+if ($0 =~ m!^(?:(.+)/)configpm$!) {
+  $src = $1;
+  unshift @INC, "$1/lib";
+}
+# File::Spec?
+my $glossary = $ARGV[1] || "$src/Porting/Glossary";
 @ARGV = "./config.sh";
 
 # list names to put first (and hence lookup fastest)
@@ -85,7 +93,11 @@ print CONFIG "\n",
 
 print CONFIG "my \$summary = <<'!END!';\n";
 
-open(MYCONFIG,"<myconfig.SH") || die "open myconfig.SH failed: $!";
+# File::Spec?
+my $myconfigdotSH =
+       $src eq "." ? "myconfig.SH" : "$src/myconfig.SH";
+
+open(MYCONFIG,"<$myconfigdotSH") || die "open $myconfigdotSH failed: $!";
 1 while defined($_ = <MYCONFIG>) && !/^Summary of/;
 do { print CONFIG $_ } until !defined($_ = <MYCONFIG>) || /^\s*$/;
 close(MYCONFIG);
index 54caf7d..9afbbcc 100644 (file)
@@ -75,7 +75,7 @@ makefile=Makefile
 makeargs=''
 makeopts=''
 
-if test ! -d "ext/$pname"; then
+if test ! -d "$src/ext/$pname"; then
     echo "     Skipping $extspec (directory does not exist)"
     exit 0 # not an error ?
 fi
@@ -83,6 +83,11 @@ fi
 
 echo " Making $mname ($target)"
 
+mkdir ext        2>/dev/null
+mkdir ext/$pname 2>/dev/null
+if test ! -f ext/$pname/Makefile.PL; then
+  cat $src/ext/$pname/Makefile.PL > ext/$pname/Makefile.PL
+fi
 cd ext/$pname
 
 # check link type and do any preliminaries
@@ -116,7 +121,7 @@ nonxs)      makeargs="";
 esac
 
 if test ! -f $makefile ; then
-       test -f Makefile.PL && ../$depth/miniperl -I../$depth/lib Makefile.PL INSTALLDIRS=perl $passthru
+       test -f Makefile.PL && ../$depth/miniperl -I../$depth/lib -I$src/lib Makefile.PL INSTALLDIRS=perl $passthru
 fi
 if test ! -f $makefile ; then
        if test -f Makefile.SH; then
index 33c0b9a..eaa0691 100644 (file)
@@ -176,7 +176,7 @@ sub autosplit_lib_modules{
            $dir =~ s#[\.\]]#/#g;
            $_ = $dir . $name;
        }
-       autosplit_file("lib/$_", "lib/auto",
+        autosplit_file("$_", "lib/auto",
                       $Keep, $CheckForAutoloader, $CheckModTime);
     }
     0;
index e1c2846..e26c50e 100755 (executable)
@@ -26,13 +26,14 @@ $startsh
 #
 MAKE=$make
 trnl='$trnl'
+src=$src
 !GROK!THIS!
 $spitshell >>makedepend <<'!NO!SUBS!'
 
 # This script should be called with 
-#     sh ./makedepend MAKE=$(MAKE)
+#     sh ./makedepend MAKE=$(MAKE) [src=$(src)]
 case "$1" in 
-       MAKE=*) eval $1 ;;
+       MAKE=*) eval $1 ; shift ;;
 esac
 
 export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh \$0; kill \$\$)
@@ -51,6 +52,10 @@ case $CONFIGDOTSH in
        ;;
 esac
 
+case "$1" in 
+       src=*) eval $1 ; shift ;;
+esac
+
 # We need .. when we are in the x2p directory if we are using the
 # cppstdin wrapper script.
 # Put .. and . first so that we pick up the present cppstdin, not
@@ -95,9 +100,18 @@ esac
 : might be identical
 $test -d UU || mkdir UU
 
-$MAKE clist || ($echo "Searching for .c files..."; \
-       $echo *.c | $tr ' ' $trnl | $egrep -v '\*' >.clist)
-for file in `$cat .clist`; do
+$MAKE clist || (cd $src; $echo "Searching for .c files..."; \
+       $echo *.c | $tr ' ' $trnl | $egrep -v '\*') >.clist
+for base in `$cat .clist`; do
+    case "$src" in
+    .) file="$base" ;;
+    *) if test -f "$base"; then
+           file="$base"
+       elif test -f "$src/$base"; then
+           file="$src/$base"
+       fi
+       ;;
+    esac
 # for file in `cat /dev/null`; do
        if [ "$osname" = uwin ]; then
                uwinfix="-e s,\\\\\\\\,/,g -e s,\\([a-zA-Z]\\):/,/\\1/,g"
@@ -113,14 +127,15 @@ for file in `$cat .clist`; do
                fi
        fi
     case "$file" in
-    *.c) filebase=`basename $file .c` ;;
-    *.y) filebase=`basename $file .y` ;;
-    esac
-    case "$file" in
     */*) finc="-I`echo $file | sed 's#/[^/]*$##`" ;;
     *)   finc= ;;
     esac
-    $echo "Finding dependencies for $filebase$_o."
+    case "$src" in
+    '') ;;
+    *)  finc="-I$src" ;;
+    esac
+    basebase=`basename $base .c`
+    $echo "Finding dependencies for $basebase$_o."
     ( $echo "#line 1 \"$file\""; \
       $sed -n <$file \
        -e "/^${filebase}_init(/q" \
@@ -129,16 +144,16 @@ for file in `$cat .clist`; do
        -e 's|/\*.*$||' \
        -e 's|\\$||' \
        -e p \
-       -e '}' ) >UU/$file.c
-    $cppstdin $finc -I. $cppflags $cppminus <UU/$file.c |
+       -e '}' ) >UU/$base.c
+    $cppstdin $finc -I. $cppflags $cppminus <UU/$base.c |
     $sed \
        -e '/^#.*<stdin>/d' \
        -e '/^#.*"-"/d' \
        -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
        -e 's/^[         ]*#[    ]*line/#/' \
        -e '/^# *[0-9][0-9]* *[".\/]/!d' \
-       -e 's/^.*"\(.*\)".*$/'$filebase'\$(OBJ_EXT): \1/' \
-       -e 's/^# *[0-9][0-9]* \(.*\)$/'$filebase'\$(OBJ_EXT): \1/' \
+       -e 's/^.*"\(.*\)".*$/'$base'\$(OBJ_EXT): \1/' \
+       -e 's/^# *[0-9][0-9]* \(.*\)$/'$base'\$(OBJ_EXT): \1/' \
        -e 's|: \./|: |' \
        -e 's|\.c\.c|.c|' $uwinfix | \
     $uniq | $sort | $uniq >> .deptmp
@@ -146,8 +161,8 @@ done
 
 $sed <$mf >$mf.new -e '1,/^# AUTOMATICALLY/!d'
 
-$MAKE shlist || ($echo "Searching for .SH files..."; \
-       $echo *.SH | $tr ' ' $trnl | $egrep -v '\*' >.shlist)
+$MAKE shlist || (cd $src; $echo "Searching for .SH files..."; \
+       $echo *.SH | $tr ' ' $trnl | $egrep -v '\*') >.shlist
 
 # Now extract the dependencies on makedepend.SH and Makefile.SH
 # (they should reside in the main Makefile):
@@ -176,8 +191,8 @@ if $test -s .deptmp; then
     $sed 's|^\(.*\$(OBJ_EXT):\) *\(.*/.*\.c\) *$|\1 \2; '"$defrule \2|" .deptmp \
        >>$mf.new
 else
-    $MAKE hlist || ($echo "Searching for .h files..."; \
-       $echo *.h | $tr ' ' $trnl | $egrep -v '\*' >.hlist)
+    $MAKE hlist || (cd $src; $echo "Searching for .h files..."; \
+       $echo *.h | $tr ' ' $trnl | $egrep -v '\*') >.hlist
     $echo "You don't seem to have a proper C preprocessor.  Using grep instead."
     $egrep '^#include ' `cat .clist` `cat .hlist`  >.deptmp
     $echo "Updating $mf..."
index 366dc16..746e101 100644 (file)
@@ -2,7 +2,6 @@
 
 use Config;
 use File::Basename qw(&basename &dirname);
-use Cwd;
 
 # List explicitly here the variables you want Configure to
 # generate.  Metaconfig only looks for shell variables, so you
@@ -11,13 +10,11 @@ use Cwd;
 #  $startperl
 # to ensure Configure will look for $Config{startperl}.
 
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
+$file = basename($0);
+$file =~ s/\.PL$//i;
 $file .= '.com' if $^O eq 'VMS';
 
+chdir("pod") or die "Can't chdir to pod: $!";
 open OUT,">$file" or die "Can't create $file: $!";
 
 print "Extracting $file (with variable substitutions)\n";
@@ -180,4 +177,4 @@ pod2html @ARGV;
 close OUT or die "Can't close $file: $!";
 chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
 exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
+
index feed98e..01cdf1b 100644 (file)
@@ -2,7 +2,6 @@
 
 use Config;
 use File::Basename qw(&basename &dirname);
-use Cwd;
 
 # List explicitly here the variables you want Configure to
 # generate.  Metaconfig only looks for shell variables, so you
@@ -11,13 +10,11 @@ use Cwd;
 #  $startperl
 # to ensure Configure will look for $Config{startperl}.
 
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
+$file = basename($0);
+$file =~ s/\.PL$//i;
 $file .= '.com' if $^O eq 'VMS';
 
+chdir("pod") or die "Can't chdir to pod: $!";
 open OUT,">$file" or die "Can't create $file: $!";
 
 print "Extracting $file (with variable substitutions)\n";
@@ -705,4 +702,3 @@ BEGIN {
 close OUT or die "Can't close $file: $!";
 chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
 exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
index 20610a8..37557bf 100644 (file)
@@ -2,7 +2,6 @@
 
 use Config;
 use File::Basename qw(&basename &dirname);
-use Cwd;
 
 # List explicitly here the variables you want Configure to
 # generate.  Metaconfig only looks for shell variables, so you
@@ -12,13 +11,11 @@ use Cwd;
 #  $man3ext
 # to ensure Configure will look for $Config{startperl}.
 
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
+$file = basename($0);
+$file =~ s/\.PL$//i;
 $file .= '.com' if $^O eq 'VMS';
 
+chdir("pod") or die "Can't chdir to pod: $!";
 open OUT,">$file" or die "Can't create $file: $!";
 
 print "Extracting $file (with variable substitutions)\n";
@@ -1234,4 +1231,3 @@ BEGIN {
 close OUT or die "Can't close $file: $!";
 chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
 exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
index 94516c3..a1a3875 100644 (file)
@@ -2,7 +2,6 @@
 
 use Config;
 use File::Basename qw(&basename &dirname);
-use Cwd;
 
 # List explicitly here the variables you want Configure to
 # generate.  Metaconfig only looks for shell variables, so you
@@ -11,13 +10,11 @@ use Cwd;
 #  $startperl
 # to ensure Configure will look for $Config{startperl}.
 
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
+$file = basename($0);
 $file = basename($0, '.PL');
 $file .= '.com' if $^O eq 'VMS';
 
+chdir("pod") or die "Can't chdir to pod: $!";
 open OUT,">$file" or die "Can't create $file: $!";
 
 print "Extracting $file (with variable substitutions)\n";
@@ -48,4 +45,3 @@ if(@ARGV) {
 close OUT or die "Can't close $file: $!";
 chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
 exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
index fdaa955..f534252 100644 (file)
@@ -10,13 +10,11 @@ use File::Basename qw(&basename &dirname);
 #  $startperl
 # to ensure Configure will look for $Config{startperl}.
 
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-        if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+$file = basename($0);
+$file =~ s/\.PL$//i;
+$file .= '.com' if $^O eq 'VMS';
 
+chdir("pod") or die "Can't chdir to pod: $!";
 open OUT,">$file" or die "Can't create $file: $!";
 
 print "Extracting $file (with variable substitutions)\n";
index 1ca0d79..24dcfb8 100644 (file)
@@ -10,13 +10,11 @@ use File::Basename qw(&basename &dirname);
 #  $startperl
 # to ensure Configure will look for $Config{startperl}.
 
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-        if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+$file = basename($0);
+$file =~ s/\.PL$//i;
+$file .= '.com' if $^O eq 'VMS';
 
+chdir("pod") or die "Can't chdir to pod: $!";
 open OUT,">$file" or die "Can't create $file: $!";
 
 print "Extracting $file (with variable substitutions)\n";
index 0df8304..7cff691 100644 (file)
@@ -10,13 +10,11 @@ use File::Basename qw(&basename &dirname);
 #  $startperl
 # to ensure Configure will look for $Config{startperl}.
 
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-        if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+$file = basename($0);
+$file =~ s/\.PL$//i;
+$file .= '.com' if $^O eq 'VMS';
 
+chdir("pod") or die "Can't chdir to pod: $!";
 open OUT,">$file" or die "Can't create $file: $!";
 
 print "Extracting $file (with variable substitutions)\n";
index 18544c1..6c53602 100644 (file)
@@ -24,6 +24,7 @@ echo "Extracting writemain (with variable substitutions)"
 rm -f writemain
 $spitshell >writemain <<!GROK!THIS!
 $startsh
+src=$src
 !GROK!THIS!
 
 : In the following dollars and backticks do not need the extra backslash.
@@ -55,7 +56,7 @@ for file in $orig ; do
 done
 
 
-sed '/Do not delete this line--writemain depends on it/q' miniperlmain.c
+sed '/Do not delete this line--writemain depends on it/q' $src/miniperlmain.c
 
 
 if test X"$args" != "X" ; then
index 9c004cc..6a17958 100755 (executable)
@@ -1,4 +1,4 @@
-case $CONFIG in
+case $CONFIGDOTSH in
 '')
        if test -f config.sh; then TOP=.;
        elif test -f ../config.sh; then TOP=..;
@@ -63,6 +63,12 @@ TRNL = '$trnl'
 
 .SUFFIXES: .c \$(OBJ_EXT)
 
+# this is where the sources are
+src    = $src
+
+# nice makes grok this
+VPATH = .:$src
+
 !GROK!THIS!
 
 cat >>Makefile <<'!NO!SUBS!'
@@ -89,9 +95,9 @@ plm   = a2p.loadmap
 
 addedbyconf = $(shextract) $(plextract)
 
-h = EXTERN.h INTERN.h ../config.h ../handy.h hash.h a2p.h str.h util.h
+h = EXTERN.h INTERN.h ../config.h handy.h hash.h a2p.h str.h util.h
 
-c = hash.c $(mallocsrc) str.c util.c walk.c
+c = hash.c str.c util.c walk.c
 
 obj = hash$(OBJ_EXT) $(mallocobj) str$(OBJ_EXT) util$(OBJ_EXT) walk$(OBJ_EXT)
 
@@ -147,7 +153,7 @@ lint:
        lint $(lintflags) $(defs) $(c) > a2p.fuzz
 
 depend: $(mallocsrc) ../makedepend
-       sh ../makedepend MAKE=$(MAKE)
+       sh ../makedepend MAKE=$(MAKE) src=$(src)/x2p
 
 clist:
        echo $(c) | tr ' ' $(TRNL) >.clist
index a58d7d5..b5ef917 100755 (executable)
@@ -1,4 +1,4 @@
-case $CONFIG in
+case $CONFIGDOTSH in
 '')
        if test -f config.sh; then TOP=.;
        elif test -f ../config.sh; then TOP=..;