From 232e078e289220085e912e3d740ae77767611478 Mon Sep 17 00:00:00 2001 From: Andy Dougherty Date: Thu, 6 Apr 1995 20:20:47 +0000 Subject: [PATCH] perl5.001 patch.1c Configure Updated to dist PL53. Fix overlapping memcpy test. Add check for ld. Use $cc instead, if on an ELF system. With -d, don't reuse config.sh unless $myuname matches. Warn more explicitly about changing compilers before reloading old config.sh. Detect Linux ELF format in nm scan. Better detection of d_castneg. (ISC 4.1 was passing the test, but couldn't cast in an argument list.) Suggest -fpic for dynamic loading if you're using GNU CC under any name. No longer test for byacc, fmod, or drem, since they are not used. Makefile.SH Use $ld, not ld (only matters for SVR4) Silence some byacc-related harmless error messages. README Suggest using -Dcc=gcc (or whatever). Warn about reusing old config.sh. (The warning was already there in 5.001; I've just expanded it a little.) Warn against using GNU as and GNU ld on SunOS & Solaris. config.H config_h.SH Updated to match Configure. doio.c Add socket includes. ext/Fcntl/Fcntl.xs Fix typo: s/SETFL/F_SETFL/; handy.h Check _G_HAVE_BOOL, not just if it's defined. hints/dynix.sh hints/hpux_9.sh hints/linux.sh hints/netbsd.sh hints/titanos.sh Updated. ELF on linux should probably work. installperl Install pod2html, pod2latex, and pod2man. lib/ExtUtils/MakeMaker.pm Updated to 4.091. (4.09 + a small writedoc() patch.) myconfig Now includes 'ld' command. perl.c Revised an #elif clause since Pyramid's cpp doesn't understand #elif. perl.h Fix U_L, I_V, and I_32 cast macros to ensure that the cast_ulong(), cast_iv(), and cast_i32() functions (if used) are passed a double. In particular, the FIXSTATUS macros were handing int's to U_L(). Remove unnecessary HAS_FMOD testing (See util.c). proto.h Remove my_fmod() prototype. (See util.c) sv.h Fix GV/CV typo. util.c Simplified cast_i32() and cast_iv() to mimic what *actually* happens on a SPARC running SunOS 4.1.3. (Previously, they did some complicated fmod() calculation. I've since discovered that's not what happens on the SPARC.) With this change, fmod() is no longer necessary. Hence my_fmod is removed. This also means the HAS_FMOD and HAS_DREM tests are no longer needed in Configure, so they are gone too. vms/config.vms Remove unnecessary HAS_FMOD and HAS_DREM defines. x2p/Makefile.SH Silence byacc-related things. --- Configure | 157 ++++++++++++++++++----------- Makefile.SH | 10 +- README | 17 +++- config.H | 59 +++++------ config_h.SH | 53 ++++------ doio.c | 10 ++ ext/Fcntl/Fcntl.xs | 6 +- handy.h | 8 +- hints/dynix.sh | 1 + hints/hpux_9.sh | 4 +- hints/linux.sh | 94 ++++++++++++++---- hints/netbsd.sh | 15 ++- hints/titanos.sh | 20 +++- installperl | 3 +- lib/ExtUtils/MakeMaker.pm | 246 ++++++++++++++++++++++++++++++++++------------ myconfig | 2 +- perl.c | 6 +- perl.h | 20 +--- proto.h | 3 - sv.h | 2 +- util.c | 37 ++----- vms/config.vms | 13 --- x2p/Makefile.SH | 4 +- 23 files changed, 491 insertions(+), 299 deletions(-) diff --git a/Configure b/Configure index cd728d2..590f816 100755 --- a/Configure +++ b/Configure @@ -18,9 +18,9 @@ # archive site. Check with Archie if you don't know where that can be.) # -# $Id: Head.U,v 3.0.1.6 1994/10/29 15:54:19 ram Exp $ +# $Id: Head.U,v 3.0.1.7 1995/03/21 08:46:15 ram Exp $ # -# Generated on Fri Mar 10 09:48:55 EST 1995 [metaconfig 3.0 PL51] +# Generated on Thu Apr 6 11:09:32 EDT 1995 [metaconfig 3.0 PL53] cat >/tmp/c1$$ <&2 + -V) echo "$me generated by metaconfig 3.0 PL53." >&2 exit 0;; --) break;; -*) echo "$me: unknown option $1" >&2; shift; error=true;; @@ -1425,9 +1422,7 @@ myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \ ./tr '[A-Z]' '[a-z]' | tr '\012' ' '` newmyuname="$myuname" dflt=n -if test "$fastread" = yes; then - dflt=y -elif test -f ../config.sh; then +if test -f ../config.sh; then if $contains myuname= ../config.sh >/dev/null 2>&1; then eval "`grep myuname= ../config.sh`" fi @@ -1441,8 +1436,11 @@ fi hint=default cd .. if test -f config.sh; then - echo " " - rp="I see a config.sh file. Shall I use it to set the defaults?" + $cat < libc.ptf xscan='eval "libc.list"; $echo $n ".$c" >&4' xrun='eval "libc.list"; echo "done" >&4' -if com="$sed -n -e 's/__IO//' -e 's/^.* [ADTSI] *_[_.]*//p' -e 's/^.* [ADTSI] //p'";\ +if com="$sed -n -e 's/__IO//' -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\ eval $xscan;\ $contains '^fprintf$' libc.list >/dev/null 2>&1; then eval $xrun @@ -3130,7 +3128,7 @@ elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\ eval $xrun else nm -p $* 2>/dev/null >libc.tmp - com="$sed -n -e 's/^.* [ADTSI] *_[_.]*//p' -e 's/^.* [ADTSI] //p'";\ + com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\ eval "libc.list" if $contains '^fprintf$' libc.list >/dev/null 2>&1; then nm_opt='-p' @@ -3701,14 +3699,6 @@ set d_bsdpgrp eval $setvar $rm -f set set.c -: Check if we really have byacc -case "$byacc" in -''|'byacc') val="$undef" ;; -*) val="$define" ;; -esac -set d_byacc -eval $setvar - : see if bzero exists set bzero d_bzero eval $inlibc @@ -3832,10 +3822,14 @@ echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4 $cat >try.c < #include -$signal_t blech() { exit(3); } +$signal_t blech() { exit(7); } +$signal_t blech_in_list() { exit(4); } +unsigned long dummy_long(p) unsigned long p; { return p; } +unsigned int dummy_int(p) unsigned int p; { return p; } +unsigned short dummy_short(p) unsigned short p; { return p; } main() { - double f = -123; + double f = -123.; unsigned long along; unsigned int aint; unsigned short ashort; @@ -3867,6 +3861,19 @@ main() along = (unsigned long)f; if (along != 0x80000001) result |= 2; + if (result) + exit(result); + signal(SIGFPE, blech_in_list); + f = 123.; + along = dummy_long((unsigned long)f); + aint = dummy_int((unsigned int)f); + ashort = dummy_short((unsigned short)f); + if (along != (unsigned long)123) + result |= 4; + if (aint != (unsigned int)123) + result |= 4; + if (ashort != (unsigned short)123) + result |= 4; exit(result); } @@ -3876,7 +3883,7 @@ if $cc -o try $ccflags try.c >/dev/null 2>&1; then castflags=$? else echo "(I can't seem to compile the test program--assuming it can't)" - castflags=3 + castflags=7 fi case "$castflags" in 0) val="$define" @@ -4209,6 +4216,7 @@ y*) usedl="$define" usedl="$define" : emulate basename dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'` + $cat << EOM Some systems may require passing special flags to $cc -c to @@ -4217,9 +4225,8 @@ To use no flags, say "none". EOM case "$cccdlflags" in - ''|' ') case "$cc" in - *gcc*) dflt='-fpic' ;; - *) case "$osname" in + '') case "$gccversion" in + '') case "$osname" in hpux) dflt='+z' ;; next) dflt='none' ;; solaris) dflt='-K pic' ;; @@ -4227,8 +4234,9 @@ EOM svr4*|esix*) dflt='-Kpic' ;; *) dflt='none' ;; esac ;; + *) dflt='-fpic' ;; esac ;; - *) dflt="$cccdlflags" ;; + *) dflt="$cccdlflags" ;; esac rp="Any special flags to pass to $cc -c to compile shared library modules?" . ./myread @@ -4237,9 +4245,50 @@ EOM *) cccdlflags="$ans" ;; esac - cat << 'EOM' + cat << EOM + +Some systems use ld to create libraries that can be dynamically loaded, +while other systems (such as those using ELF) use $cc. + +EOM + case "$ld" in + '') $cat >try.c <<'EOM' +/* Test for whether ELF binaries are produced */ +#include +#include +main() { + char b[4]; + int i = open("a.out",O_RDONLY); + if(i == -1) + exit(1); /* fail */ + if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F') + exit(0); /* succeed (yes, it's ELF) */ + else + exit(1); /* fail */ +} +EOM + if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then + cat < /dev/null 2>&1 && - ld $lddlflags -o dyna.$dlext dyna.o > /dev/null 2>&1 && + $ld $lddlflags -o dyna.$dlext dyna.o > /dev/null 2>&1 && $cc $ccflags $ldflags $cccdlflags $ccdlflags fred.c -o fred $libs > /dev/null 2>&1; then xxx=`./fred` case $xxx in @@ -4552,10 +4604,6 @@ esac set d_dosuid eval $setvar -: see if drem exists -set drem d_drem -eval $inlibc - : see if dup2 exists set dup2 d_dup2 eval $inlibc @@ -4623,10 +4671,6 @@ $rm -rf /tmp/cf$$ 123456789abcde* set flock d_flock eval $inlibc -: see if fmod exists -set fmod d_fmod -eval $inlibc - : see if fork exists set fork d_fork eval $inlibc @@ -5204,10 +5248,10 @@ memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36); for (align = 7; align >= 0; align--) { for (len = 36; len; len--) { b = buf+align; - memcpy(abc, b, len); + memcpy(b, abc, len); for (off = 1; off <= len; off++) { - memcpy(b, b+off, len); memcpy(b+off, b, len); + memcpy(b, b+off, len); if (memcmp(b, abc, len)) exit(1); } @@ -5626,7 +5670,10 @@ if $test -d /usr/etc/yp || $test -d /etc/yp; then . ./myread case "$ans" in y*) hostcat='nidump hosts .';; - *) ;; + *) case "$hostcat" in + nidump*) hostcat='';; + esac + ;; esac fi case "$hostcat" in @@ -6097,7 +6144,7 @@ case "$i_db" in define) : Check the return type needed for hash echo "Checking return type needed for hash for Berkeley DB ..." >&4 - cat >try.c <<'EOCP' + $cat >try.c <<'EOCP' #include #include u_int32_t @@ -6122,7 +6169,7 @@ EOCP echo "I can't seem to compile the test program." >&4 db_hashtype=int fi - $rm -f try.[co] + $rm -f try.* echo "Your version of Berkeley DB uses $db_hashtype for hash." ;; *) db_hashtype=int @@ -6158,7 +6205,7 @@ EOCP echo "I can't seem to compile the test program." >&4 db_prefixtype='int' fi - $rm -f try.[co] + $rm -f try.* echo "Your version of Berkeley DB uses $db_prefixtype for prefix." ;; *) db_prefixtype='int' @@ -7702,7 +7749,6 @@ d_bcmp='$d_bcmp' d_bcopy='$d_bcopy' d_bsd='$d_bsd' d_bsdpgrp='$d_bsdpgrp' -d_byacc='$d_byacc' d_bzero='$d_bzero' d_casti32='$d_casti32' d_castneg='$d_castneg' @@ -7722,7 +7768,6 @@ d_dlerror='$d_dlerror' d_dlopen='$d_dlopen' d_dlsymun='$d_dlsymun' d_dosuid='$d_dosuid' -d_drem='$d_drem' d_dup2='$d_dup2' d_eunice='$d_eunice' d_fchmod='$d_fchmod' @@ -7734,7 +7779,6 @@ d_fds_bits='$d_fds_bits' d_fgetpos='$d_fgetpos' d_flexfnam='$d_flexfnam' d_flock='$d_flock' -d_fmod='$d_fmod' d_fork='$d_fork' d_fpathconf='$d_fpathconf' d_fsetpos='$d_fsetpos' @@ -7945,6 +7989,7 @@ intsize='$intsize' known_extensions='$known_extensions' ksh='$ksh' large='$large' +ld='$ld' lddlflags='$lddlflags' ldflags='$ldflags' less='$less' diff --git a/Makefile.SH b/Makefile.SH index 3613c46..77b3893 100644 --- a/Makefile.SH +++ b/Makefile.SH @@ -77,6 +77,7 @@ $spitshell >>Makefile <>Makefile <<'!NO!SUBS!' - ld $(LDDLFLAGS) -o $@ perl.o $(obj) + $(LD) $(LDDLFLAGS) -o $@ perl.o $(obj) !NO!SUBS! ;; *) @@ -281,7 +282,7 @@ install: all # to run with precisely the same version of byacc as I use. You # normally shouldn't remake perly.[ch]. -run_byacc: +run_byacc: FORCE @ echo 'Expect' 109 shift/reduce and 1 reduce/reduce conflict $(BYACC) -d perly.y sh $(shellflags) ./perly.fixer y.tab.c perly.c @@ -292,10 +293,10 @@ run_byacc: # appear out-of-date after a patch is applied or a new distribution is # made. perly.c: perly.y - - touch perly.c + -@touch perly.c perly.h: perly.y - - touch perly.h + -@touch perly.h # Extensions: # Names added to $(dynamic_ext) or $(static_ext) will automatically @@ -337,6 +338,7 @@ realclean: clean rm -f config.h makefile makefile.old rm -f $(private) rm -rf lib/auto + rm -f lib/.exists rm -f h2ph h2ph.man c2ph pstruct h2xs makeaperl rm -rf .config @echo "Note that make realclean does not delete config.sh" diff --git a/README b/README index 9b5318f..7ad35b7 100644 --- a/README +++ b/README @@ -73,9 +73,13 @@ Installation Configure supports a number of useful options. Run Configure -h to get a listing. To compile with gcc, for example, you can run - Configure -Dcc=gcc, or answer 'gcc' at the cc prompt. If you - change compilers or make other significant changes, you should - probably _not_ re-use your old config.sh. + Configure -Dcc=gcc, or answer 'gcc' at the cc prompt. This is the + preferred way to invoke an alternate compiler, since the hints + files can then set appropriate defaults. + + If you change compilers or make other significant changes, you should + probably _not_ re-use your old config.sh. Simply remove it or + rename it, e.g. mv config.sh config.sh.old. By default, perl will be installed in /usr/local/{bin, lib, man}. You can specify a different prefix for the default installation @@ -152,6 +156,10 @@ Installation If you get varags problems with gcc, be sure that gcc is installed correctly. When using gcc, you should probably have i_stdarg='define' and i_varags='undef' in config.sh. + If you wish to use dynamic loading on SunOS or Solaris, and you + have GNU as and GNU ld installed, you may need to add -B/bin/ to + your $ccflags and $ldflags so that the system's versions of as + and ld are used. 5) make test @@ -184,6 +192,9 @@ Installation s2p sed-to-perl translator find2perl find-to-perl translator h2xs Converts C .h header files to Perl extensions. + pod2html, Converters from perl's pod documentation format + pod2latex, and to other useful formats. + pod2man library files in $privlib and $archlib specified to Configure, usually under /usr/local/lib/perl5/. diff --git a/config.H b/config.H index 9f6cb26..2d2515c 100644 --- a/config.H +++ b/config.H @@ -14,7 +14,7 @@ * $Id: Config_h.U,v 3.0.1.3 1995/01/30 14:25:39 ram Exp $ */ -/* Configuration time: Mon Feb 27 17:21:15 EST 1995 +/* Configuration time: Wed Apr 5 14:50:33 EDT 1995 * Configured by: andy * Target system: crystal crystal 3.2 2 i386 */ @@ -140,9 +140,10 @@ * 0 = ok * 1 = couldn't cast < 0 * 2 = couldn't cast >= 0x80000000 + * 4 = couldn't cast in argument expression list */ /*#define CASTNEGFLOAT /**/ -#define CASTFLAGS 3 /**/ +#define CASTFLAGS 7 /**/ /* HAS_CHOWN: * This symbol, if defined, indicates that the chown routine is @@ -232,14 +233,6 @@ /*#define SETUID_SCRIPTS_ARE_SECURE_NOW /**/ /*#define DOSUID /**/ -/* HAS_DREM: - * This symbol, if defined, indicates that the drem routine is - * available. This routine is roughly the same as fmod, i.e. it - * computes the remainder r=x-n*y, where n=rint(x/y), whereas fmod - * uses n=trunc(x/y). - */ -/*#define HAS_DREM /**/ - /* HAS_DUP2: * This symbol, if defined, indicates that the dup2 routine is * available to duplicate file descriptors. @@ -282,12 +275,6 @@ */ /*#define HAS_FLOCK /**/ -/* HAS_FMOD: - * This symbol, if defined, indicates that the fmod routine is - * available to compute the remainder r=x-n*y where n=trunc(x/y). - */ -#define HAS_FMOD /**/ - /* HAS_FORK: * This symbol, if defined, indicates that the fork routine is * available. @@ -597,7 +584,7 @@ * probably use memmove() or memcpy(). If neither is defined, roll your * own version. */ -#define HAS_SAFE_MEMCPY /**/ +/*#define HAS_SAFE_MEMCPY /**/ /* HAS_SELECT: * This symbol, if defined, indicates that the select routine is @@ -959,6 +946,19 @@ #define Groups_t gid_t /* Type for 2nd arg to getgroups() */ #endif +/* DB_Prefix_t: + * This symbol contains the type of the prefix structure element + * in the header file. In older versions of DB, it was + * int, while in newer ones it is u_int32_t. + */ +/* DB_Hash_t: + * This symbol contains the type of the prefix structure element + * in the header file. In older versions of DB, it was + * int, while in newer ones it is size_t. + */ +#define DB_Hash_t int /**/ +#define DB_Prefix_t int /**/ + /* I_DIRENT: * This symbol, if defined, indicates to the C program that it should * include . Using this symbol also triggers the definition @@ -1022,6 +1022,12 @@ */ /*#define I_MEMORY /**/ +/* I_NDBM: + * This symbol, if defined, indicates that ndbm.h exists and should + * be included. + */ +#define I_NDBM /**/ + /* I_NET_ERRNO: * This symbol, if defined, indicates that exists and * should be included. @@ -1373,25 +1379,6 @@ */ /*#define USE_DYNAMIC_LOADING /**/ -/* DB_Prefix_t: - * This symbol contains the type of the prefix structure element - * in the header file. In older versions of DB, it was - * int, while in newer ones it is u_int32_t. - */ -/* DB_Hash_t: - * This symbol contains the type of the prefix structure element - * in the header file. In older versions of DB, it was - * int, while in newer ones it is size_t. - */ -#define DB_Hash_t int /**/ -#define DB_Prefix_t int /**/ - -/* I_NDBM: - * This symbol, if defined, indicates that ndbm.h exists and should - * be included. - */ -#define I_NDBM /**/ - /* I_SYS_STAT: * This symbol, if defined, indicates to the C program that it should * include . diff --git a/config_h.SH b/config_h.SH index ac53373..f915d65 100755 --- a/config_h.SH +++ b/config_h.SH @@ -154,6 +154,7 @@ sed <config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!' * 0 = ok * 1 = couldn't cast < 0 * 2 = couldn't cast >= 0x80000000 + * 4 = couldn't cast in argument expression list */ #$d_castneg CASTNEGFLOAT /**/ #define CASTFLAGS $castflags /**/ @@ -246,14 +247,6 @@ sed <config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!' #$d_suidsafe SETUID_SCRIPTS_ARE_SECURE_NOW /**/ #$d_dosuid DOSUID /**/ -/* HAS_DREM: - * This symbol, if defined, indicates that the drem routine is - * available. This routine is roughly the same as fmod, i.e. it - * computes the remainder r=x-n*y, where n=rint(x/y), whereas fmod - * uses n=trunc(x/y). - */ -#$d_drem HAS_DREM /**/ - /* HAS_DUP2: * This symbol, if defined, indicates that the dup2 routine is * available to duplicate file descriptors. @@ -296,12 +289,6 @@ sed <config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!' */ #$d_flock HAS_FLOCK /**/ -/* HAS_FMOD: - * This symbol, if defined, indicates that the fmod routine is - * available to compute the remainder r=x-n*y where n=trunc(x/y). - */ -#$d_fmod HAS_FMOD /**/ - /* HAS_FORK: * This symbol, if defined, indicates that the fork routine is * available. @@ -973,6 +960,19 @@ sed <config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!' #define Groups_t $groupstype /* Type for 2nd arg to getgroups() */ #endif +/* DB_Prefix_t: + * This symbol contains the type of the prefix structure element + * in the header file. In older versions of DB, it was + * int, while in newer ones it is u_int32_t. + */ +/* DB_Hash_t: + * This symbol contains the type of the prefix structure element + * in the header file. In older versions of DB, it was + * int, while in newer ones it is size_t. + */ +#define DB_Hash_t $db_hashtype /**/ +#define DB_Prefix_t $db_prefixtype /**/ + /* I_DIRENT: * This symbol, if defined, indicates to the C program that it should * include . Using this symbol also triggers the definition @@ -1036,6 +1036,12 @@ sed <config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!' */ #$i_memory I_MEMORY /**/ +/* I_NDBM: + * This symbol, if defined, indicates that ndbm.h exists and should + * be included. + */ +#$i_ndbm I_NDBM /**/ + /* I_NET_ERRNO: * This symbol, if defined, indicates that exists and * should be included. @@ -1387,25 +1393,6 @@ sed <config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!' */ #$usedl USE_DYNAMIC_LOADING /**/ -/* DB_Prefix_t: - * This symbol contains the type of the prefix structure element - * in the header file. In older versions of DB, it was - * int, while in newer ones it is u_int32_t. - */ -/* DB_Hash_t: - * This symbol contains the type of the prefix structure element - * in the header file. In older versions of DB, it was - * int, while in newer ones it is size_t. - */ -#define DB_Hash_t $db_hashtype /**/ -#define DB_Prefix_t $db_prefixtype /**/ - -/* I_NDBM: - * This symbol, if defined, indicates that ndbm.h exists and should - * be included. - */ -#$i_ndbm I_NDBM /**/ - /* I_SYS_STAT: * This symbol, if defined, indicates to the C program that it should * include . diff --git a/doio.c b/doio.c index e8cac8d..9f5a74a 100644 --- a/doio.c +++ b/doio.c @@ -43,6 +43,16 @@ #include #endif +#if defined(HAS_SOCKET) && !defined(VMS) /* VMS handles sockets via vmsish.h */ +# include +# include +# ifndef ENOTSOCK +# ifdef I_NET_ERRNO +# include +# endif +# endif +#endif + bool do_open(gv,name,len,supplied_fp) GV *gv; diff --git a/ext/Fcntl/Fcntl.xs b/ext/Fcntl/Fcntl.xs index 2a36095..308e9dd 100644 --- a/ext/Fcntl/Fcntl.xs +++ b/ext/Fcntl/Fcntl.xs @@ -51,9 +51,9 @@ int arg; #else goto not_there; #endif - if (strEQ(name, "SETFL")) -#ifdef SETFL - return SETFL; + if (strEQ(name, "F_SETFL")) +#ifdef F_SETFL + return F_SETFL; #else goto not_there; #endif diff --git a/handy.h b/handy.h index d95c3da..9d87378 100644 --- a/handy.h +++ b/handy.h @@ -23,14 +23,16 @@ #define Nullfp Null(FILE*) #define Nullsv Null(SV*) -/* bool is built-in for g++-2.6.3, which might be used for an extension. */ -#if !defined(HAS_BOOL) && !defined(_G_HAVE_BOOL) +/* bool is built-in for g++-2.6.3, which might be used for an extension. + gcc-2.6.2 under Linux defines _G_HAVE_BOOL to 0, and does not + define bool. */ +#if !defined(HAS_BOOL) && !(_G_HAVE_BOOL) #ifdef UTS #define bool int #else #define bool char #endif -#endif /* !defined(HAS_BOOL) && !defined(_G_HAVE_BOOL) */ +#endif /* !defined(HAS_BOOL) && !(_G_HAVE_BOOL) */ #ifdef TRUE #undef TRUE diff --git a/hints/dynix.sh b/hints/dynix.sh index 51eae90..3b759cb 100644 --- a/hints/dynix.sh +++ b/hints/dynix.sh @@ -1,2 +1,3 @@ +# If this doesn't work, try specifying 'none' for hints. d_castneg=undef libswanted=`echo $libswanted | sed -e 's/socket /socket seq /'` diff --git a/hints/hpux_9.sh b/hints/hpux_9.sh index 8e326e2..fe5c2c7 100644 --- a/hints/hpux_9.sh +++ b/hints/hpux_9.sh @@ -14,8 +14,8 @@ case "$cc" in ;; esac libswanted='m dld' -# ldflags="-Wl,-E -Wl,-a,shared" # Force all shared? -ldflags="-Wl,-E" +# ccdlflags="-Wl,-E -Wl,-a,shared $ccdlflags" # Force all shared? +ccdlflags="-Wl,-E $ccdlflags" usemymalloc='y' alignbytes=8 selecttype='int *' diff --git a/hints/linux.sh b/hints/linux.sh index 97be1d7..71afccd 100644 --- a/hints/linux.sh +++ b/hints/linux.sh @@ -2,20 +2,38 @@ # Original version by rsanders # Additional support by Kenneth Albanowski # -# First pass at ELF support by Andy Dougherty -# Fri Feb 3 14:05:00 EST 1995 -# Use sh Configure -Dcc=gcc-elf to try using gcc-elf. It might work. +# ELF support by H.J. Lu +# Additional info from Nigel Head +# and Kenneth Albanowski # -# Last updated Mon Mar 6 10:18:10 EST 1995 +# Consolidated by Andy Dougherty # +# Last updated Thu Apr 6 12:22:03 EDT 1995 +# + +# perl goes into the /usr tree. See the Filesystem Standard +# available via anonymous FTP at tsx-11.mit.edu in +# /pub/linux/docs/linux-standards/fsstnd. +# This used to be +# bin='/usr/bin' +# but it doesn't seem sensible to put the binary in /usr and all the +# rest of the support stuff (lib, man pages) into /usr/local. +# However, allow a command line override, e.g. Configure -Dprefix=/foo/bar +case "$prefix" in +'') prefix='/usr' ;; +esac -# Why is this needed? -bin='/usr/bin' +# Perl expects BSD style signal handling. +ccflags="-D__USE_BSD_SIGNAL $ccflags" -# Apparently some versions of gcc 2.6.2 are picking up _G_HAVE_BOOL -# from somewhere (_G_config.h maybe?) but not actually defining bool. -# Anyone really know what's going on? -ccflags='-Dbool=char -DHAS_BOOL' +# The following functions are gcc built-ins, but the Configure test +# may fail because it doesn't supply a proper prototype. +d_memcmp=define +d_memcpy=define + +# Configure may fail to find lstat() since it's a static/inline +# function in . +d_lstat=define d_dosuid='define' @@ -26,26 +44,60 @@ case "$optimize" in '') optimize='-O2' ;; esac -case "$cc" in -*cc-elf*) +# Are we using ELF? Thanks to Kenneth Albanowski +# for this test. +cat >try.c <<'EOM' +/* Test for whether ELF binaries are produced */ +#include +#include +main() { + char buffer[4]; + int i=open("a.out",O_RDONLY); + if(i==-1) + exit(1); /* fail */ + if(read(i,&buffer[0],4)<4) + exit(1); /* fail */ + if(buffer[0] != 127 || buffer[1] != 'E' || + buffer[2] != 'L' || buffer[3] != 'F') + exit(1); /* fail */ + exit(0); /* succeed (yes, it's ELF) */ +} +EOM +if gcc try.c >/dev/null 2>&1 && ./a.out; then + cat <<'EOM' + +You appear to have ELF support. I'll try to use it for dynamic loading. +EOM + # Be careful not to overwrite lddlflags, since the user might + # have specified some -L/path options on the Configure command line. + lddlflags="-shared $lddlflags" + ccdlflags='-rdynamic' so='so' dlext='so' - # Configure might not understand nm output for ELF. - usenm=false - ;; -*) - lddlflags='-r' + ld=gcc +else + echo "You don't have an ELF gcc, using dld if available." + # We might possibly have a version of DLD around. + lddlflags="-r $lddlflags" so='sa' dlext='o' ## If you are using DLD 3.2.4 which does not support shared libs, ## uncomment the next two lines: #ldflags="-static" #so='none' - ;; -esac +fi +rm -rf try.c a.out -cat < Aug 27 1994 # NOTE: You should run Configure with tcsh (yes, tcsh). +# Comments by Andy Dougherty 28 Mar 1995 alignbytes="8" byteorder="4321" castflags='0' @@ -14,9 +15,24 @@ malloctype='void *' models='none' ccflags="$ccflags -I/usr/include/net -DDEBUGGING -DSTANDARD_C" cppflags="$cppflags -I/usr/include/net -DDEBUGGING -DSTANDARD_C" -libs='-lnsl -ldbm -lPW -lmalloc -lm' stdchar='unsigned char' -static_ext='DynaLoader NDBM_File Socket' +# +# Apparently there are some harmful libs in Configure's $libswanted. +# Perl5.000 had: libs='-lnsl -ldbm -lPW -lmalloc -lm' +# Unfortunately, this line prevents users from including things like +# -lgdbm and -ldb, which they may or may not have or want. +# We should probably fiddle with libswanted instead of libs. +# And even there, we should only bother to delete harmful libraries. +# However, I don't know what they are or why they should be deleted, +# so this will have to do for now. --AD 28 Mar 1995 +libswanted='nsl dbm gdbm db PW malloc m' +# +# Extensions: This system can not compile POSIX. We'll let Configure +# figure out the others. Certainly Fcntl, Socket, and at least one *DB* +# extension should be included. +# perl5.000 had: static_ext='DynaLoader NDBM_File Socket' +useposix='n' +# uidtype='ushort' voidflags='7' inclwanted='/usr/include /usr/include/net' diff --git a/installperl b/installperl index da6f739..4348411 100755 --- a/installperl +++ b/installperl @@ -12,7 +12,8 @@ while (@ARGV) { umask 022; -@scripts = ('cppstdin', 'c2ph', 'h2xs', 'pstruct', 'x2p/s2p', 'x2p/find2perl'); +@scripts = ('cppstdin', 'c2ph', 'h2xs', 'pstruct', 'x2p/s2p', 'x2p/find2perl', + 'pod/pod2man', 'pod/pod2html', 'pod/pod2latex' ); @manpages = (, 'x2p/a2p.man', 'x2p/s2p.man'); # Read in the config file. diff --git a/lib/ExtUtils/MakeMaker.pm b/lib/ExtUtils/MakeMaker.pm index e09b438..73ad1dd 100644 --- a/lib/ExtUtils/MakeMaker.pm +++ b/lib/ExtUtils/MakeMaker.pm @@ -1,6 +1,6 @@ package ExtUtils::MakeMaker; -$Version = 4.086; # Last edited 9 Mar 1995 by Andy Dougherty +$Version = 4.091; # Last edited 31 Mar 1995 by Andreas Koenig use Config; check_hints(); @@ -9,10 +9,10 @@ use Cwd; require Exporter; @ISA = qw(Exporter); -@EXPORT = qw(&WriteMakefile &mkbootstrap &mksymlists $Verbose); +@EXPORT = qw(&WriteMakefile $Verbose); @EXPORT_OK = qw($Version %att %skip %Recognized_Att_Keys @MM_Sections %MM_Sections - &help &lsdir &neatvalue); + &help &lsdir &neatvalue &mkbootstrap &mksymlists); $Is_VMS = $Config{'osname'} eq 'VMS'; require ExtUtils::MM_VMS if $Is_VMS; @@ -23,7 +23,6 @@ $Version = $Version;# avoid typo warning $Verbose = 0; $^W=1; - =head1 NAME ExtUtils::MakeMaker - create an extension Makefile @@ -73,7 +72,7 @@ done by specifying perl Makefile.PL INST_LIB=~/myperllib INST_EXE=~/bin Note, that in this example MakeMaker does the tilde expansion for you -and INST_ARCHLIB is set to either C if +and INST_ARCHLIB is set to either C if that directory exists and otherwise to INST_LIB. Other interesting targets in the generated Makefile are @@ -392,6 +391,12 @@ $Attrib_Help = <<'END'; H: Ref to array of *.h file names. Similar to C: above. + PL_FILES: Ref to hash of files to be processed as perl programs. MakeMaker + will default to any found C<*.PL> file (except C) being + keys and the basename of the file being the value. E.g. + C<{ 'foobar.PL' => 'foobar' }>. The C<*.PL> files are expected to + produce output to the target files themselves. + EXE_FILES: Ref to array of executable files. The files will be copied to the INST_EXE directory. The installed files will be deleted by a make realclean. @@ -455,6 +460,7 @@ sub help {print $Attrib_Help;} 'tool_xsubpp' => {}, 'tools_other' => {}, 'post_constants' => {}, + 'pasthru' => {}, 'c_o' => {}, 'xs_c' => {}, 'xs_o' => {}, @@ -467,6 +473,7 @@ sub help {print $Attrib_Help;} 'static' => {}, 'static_lib' => {}, 'installpm' => {}, + 'processPL' => {}, 'installbin' => {}, 'subdirs' => {}, 'clean' => {}, @@ -527,6 +534,7 @@ sub WriteMakefile { parse_args(\%att, @ARGV); my(%initial_att) = %att; # record initial attributes + my($key); MY->init_main(); @@ -553,6 +561,7 @@ sub WriteMakefile { # build hash for SKIP to make testing easy %skip = map( ($_,1), @{$att{'SKIP'} || []}); + my $section; foreach $section ( @MM_Sections ){ print "Processing Makefile '$section' section" if ($Verbose >= 2); my($skipit) = skipcheck($section); @@ -658,7 +667,6 @@ sub neatvalue{ return "{ ".join(', ',@m)." }"; } - # ------ Define the MakeMaker default methods in package MM_Unix ------ package MM_Unix; @@ -687,8 +695,8 @@ sub init_main { # --- Initialize PERL_LIB, INST_LIB, PERL_SRC # *Real* information: where did we get these two from? ... - $inc_config_dir = dirname($INC{'Config.pm'}); - $inc_carp_dir = dirname($INC{'Carp.pm'}); + my $inc_config_dir = dirname($INC{'Config.pm'}); + my $inc_carp_dir = dirname($INC{'Carp.pm'}); # Typically PERL_* and INST_* will be identical but that need # not be the case (e.g., installing into project libraries etc). @@ -704,7 +712,10 @@ sub init_main { unless ($att{PERL_SRC}){ foreach(qw(../.. ../../.. ../../../..)){ - ($att{PERL_SRC}=$_, last) if -f "$_/config.sh"; + if ( -f "$_/config.sh" && -f "$_/perl.h" && -f "$_/lib/Exporter.pm") { + $att{PERL_SRC}=$_ ; + last; + } } } unless ($att{PERL_SRC}){ @@ -719,6 +730,19 @@ sub init_main { $att{PERL_LIB} = "$att{PERL_SRC}/lib" unless $att{PERL_LIB}; $att{PERL_ARCHLIB} = $att{PERL_LIB}; $att{PERL_INC} = $att{PERL_SRC}; + # catch an situation that has occurred a few times in the past: + warn < "$pwd/blib", # our private build lib + "./blib" => "./blib", # our private build lib $att{PERL_LIB} => $att{PERL_ARCHLIB}, $Config{'privlib'} => $Config{'archlib'}, $Config{'installprivlib'} => $Config{'installarchlib'}, @@ -810,7 +834,7 @@ sub init_main { sub init_dirscan { # --- File and Directory Lists (.xs .pm etc) - my($name, %dir, %xs, %c, %h, %ignore); + my($name, %dir, %xs, %c, %h, %ignore, %pl_files); local(%pm); #the sub in find() has to see this hash $ignore{'test.pl'} = 1; $ignore{'makefile.pl'} = 1 if $Is_VMS; @@ -828,6 +852,8 @@ sub init_dirscan { # --- File and Directory Lists (.xs .pm etc) $h{$name} = 1; } elsif ($name =~ /\.p[ml]$/){ $pm{$name} = "\$(INST_LIBDIR)/$name"; + } elsif ($name =~ /\.PL$/ && $name ne "Makefile.PL") { + ($pl_files{$name} = $name) =~ s/\.PL$// ; } } @@ -890,6 +916,7 @@ sub init_dirscan { # --- File and Directory Lists (.xs .pm etc) my($sufx) = $Is_VMS ? '.obj' : '.o'; $att{O_FILES} = [grep s/\.c$/$sufx/, @o_files] ; $att{H} = [sort keys %h] unless $att{H}; + $att{PL_FILES} = \%pl_files unless $att{PL_FILES}; } @@ -899,7 +926,7 @@ sub libscan { } sub init_others { # --- Initialize Other Attributes - + my($key); for $key (keys(%Recognized_Att_Keys), keys(%Other_Att_Keys)){ # avoid warnings for uninitialized vars next if exists $att{$key}; @@ -1107,6 +1134,7 @@ INST_PM = '.join(" \\\n\t", sort values %{$att{PM}}).' join('',@m); } +$Const_cccmd=0; # package global sub const_cccmd{ my($self,$libperl)=@_; @@ -1115,11 +1143,16 @@ sub const_cccmd{ # e.g., do both and compare results during the transition period. my($cc,$ccflags,$optimize,$large,$split, $shflags) = @Config{qw(cc ccflags optimize large split shellflags)}; + my($optdebug)=""; + $shflags = '' unless $shflags; my($prog, $old, $uc, $perltype); - chop($old = `cd $att{PERL_SRC}; sh $shflags ./cflags $libperl $att{BASEEXT}.c 2>/dev/null`) - if $att{PERL_SRC}; + unless ($Const_cccmd++){ + chop($old = `cd $att{PERL_SRC}; sh $shflags ./cflags $libperl $att{BASEEXT}.c`) + if $att{PERL_SRC}; + $Const_cccmd++; # shut up typo warning + } my(%map) = ( D => '-DDEBUGGING', @@ -1162,7 +1195,7 @@ sub const_cccmd{ echo large=\$large echo split=\$split `; - my(%cflags); + my(%cflags,$line); foreach $line (@o){ chomp $line; if ($line =~ /(.*?)=\s*(.*)\s*$/){ @@ -1298,6 +1331,19 @@ sub post_constants{ ""; } +sub pasthru { + my(@m,@pasthru,$key); + # It has to be considered carefully, which variables are apt to be passed through, e.g. PERL_SRC + # is not suited for subdirectories, as it might be relativ to the parent directory. + # Probably we need a PASTHRU2 variable. PASTHRU1 is a conservative approach, that hardly changes + # MakeMaker between version 4.086 and 4.09. + push @m, "\nPASTHRU1 = "; + foreach $key (qw(INST_ARCHLIB INST_EXE INST_LIB LIBPERL_A LINKTYPE)){ + push @pasthru, "$key=\"\$($key)\""; + } + push @m, join "\\\n\t", @pasthru; + join "", @m; +} # --- Translation Sections --- @@ -1334,10 +1380,11 @@ sub top_targets{ all :: config linkext $(INST_PM) '.$att{NOOP}.' -config :: '.$att{MAKEFILE}.' - @ $(MKPATH) $(INST_LIBDIR) $(INST_ARCHAUTODIR) +config :: '.$att{MAKEFILE}.' $(INST_LIBDIR)/.exists $(INST_ARCHAUTODIR)/.exists '; + push @m, MM->dir_target('$(INST_LIBDIR)', '$(INST_ARCHAUTODIR)'); + push @m, ' $(O_FILES): $(H_FILES) ' if @{$att{O_FILES} || []} && @{$att{H} || []}; @@ -1375,8 +1422,8 @@ static :: $att{BASEEXT}.exp push(@m," $att{BASEEXT}.exp: Makefile.PL -",' $(PERL) $(I_PERL_LIBS) -e \'use ExtUtils::MakeMaker; \\ - mksymlists(DL_FUNCS => ', +",' $(PERL) $(I_PERL_LIBS) -e \'use ExtUtils::MakeMaker qw(&mksymlists); \\ + &mksymlists(DL_FUNCS => ', %$funcs ? neatvalue($funcs) : '""',', DL_VARS => ', @$vars ? neatvalue($vars) : '""', ", NAME => \"$att{NAME}\")' "); @@ -1406,7 +1453,7 @@ BOOTSTRAP = '."$att{BASEEXT}.bs".' $(BOOTSTRAP): '."$att{MAKEFILE} $att{BOOTDEP}".' @ echo "Running mkbootstrap for $(NAME) ($(BSLOADLIBS))" @ $(PERL) $(I_PERL_LIBS) \ - -e \'use ExtUtils::MakeMaker; &mkbootstrap("$(BSLOADLIBS)");\' \ + -e \'use ExtUtils::MakeMaker qw(&mkbootstrap); &mkbootstrap("$(BSLOADLIBS)");\' \ INST_LIB=$(INST_LIB) INST_ARCHLIB=$(INST_ARCHLIB) PERL_SRC=$(PERL_SRC) NAME=$(NAME) @ $(TOUCH) $(BOOTSTRAP) @@ -1431,8 +1478,7 @@ sub dynamic_lib { ARMAYBE = '.$armaybe.' OTHERLDFLAGS = '.$otherldflags.' -$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) - @ $(MKPATH) $(INST_ARCHAUTODIR) +$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists '); if ($armaybe ne ':'){ $ldfrom = "tmp.a"; @@ -1442,6 +1488,8 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $ldfrom = "-all $ldfrom -none" if ($osname eq 'dec_osf'); push(@m,' $(LD) -o $@ $(LDDLFLAGS) '.$ldfrom. ' $(OTHERLDFLAGS) $(MYEXTLIB) $(LDLOADLIBS)'."\n"); + + push @m, MM->dir_target('$(INST_ARCHAUTODIR)'); join('',@m); } @@ -1460,8 +1508,7 @@ static :: '.$att{MAKEFILE}.' $(INST_STATIC) $(INST_PM) sub static_lib{ my(@m); push(@m, <<'END'); -$(INST_STATIC): $(OBJECT) $(MYEXTLIB) - @ $(MKPATH) $(INST_ARCHAUTODIR) +$(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)/.exists END # If this extension has it's own library (eg SDBM_File) # then copy that to $(INST_STATIC) and add $(OBJECT) into it. @@ -1477,6 +1524,7 @@ END push(@m, <<'END') if $att{PERL_SRC}; @ echo "$(EXTRALIBS)" >> $(PERL_SRC)/ext.libs END + push @m, MM->dir_target('$(INST_ARCHAUTODIR)'); join('', "\n",@m); } @@ -1506,16 +1554,31 @@ sub installpm_x { # called by installpm per file my($instdir) = $inst =~ m|(.*)/|; my(@m); push(@m," -$inst: $dist Makefile +$inst: $dist Makefile $instdir/.exists ".' @ '.$att{RM_F}.' $@ - @ $(MKPATH) '.$instdir.' '."$att{CP} $dist".' $@ '); push(@m, "\t\@\$(AUTOSPLITFILE) \$@ $splitlib/auto\n") if ($splitlib and $inst =~ m/\.pm$/); + + push @m, MM->dir_target($instdir); join('', @m); } +sub processPL { + return "" unless $att{PL_FILES}; + my(@m, $plfile); + foreach $plfile (sort keys %{$att{PL_FILES}}) { + push @m, " +all :: $att{PL_FILES}->{$plfile} + +$att{PL_FILES}->{$plfile} :: $plfile + \$(PERL) -I\$(INST_ARCHLIB) -I\$(INST_LIB) -I\$(PERL_ARCHLIB) -I\$(PERL_LIB) $plfile +"; + } + join "", @m; +} + sub installbin { return "" unless $att{EXE_FILES} && ref $att{EXE_FILES} eq "ARRAY"; my(@m, $from, $to, %fromto, @to); @@ -1589,20 +1652,18 @@ sub subdir_x { # MY::subdir_x() method to override this one. qq{ config :: $subdir/$att{MAKEFILE} - cd $subdir ; \$(MAKE) config INST_LIB=\$(INST_LIB) INST_ARCHLIB=\$(INST_ARCHLIB) \\ - INST_EXE=\$(INST_EXE) LINKTYPE=\$(LINKTYPE) LIBPERL_A=\$(LIBPERL_A) \$(SUBDIR_MAKEFILE_PL_ARGS) + cd $subdir && \$(MAKE) config \$(PASTHRU1) \$(SUBDIR_MAKEFILE_PL_ARGS) $subdir/$att{MAKEFILE}: $subdir/Makefile.PL \$(CONFIGDEP) }.' @echo "Rebuilding $@ ..." $(PERL) $(I_PERL_LIBS) \\ -e "use ExtUtils::MakeMaker; MM->runsubdirpl(qw('.$subdir.'))" \\ - INST_LIB=$(INST_LIB) INST_ARCHLIB=$(INST_ARCHLIB) \\ - INST_EXE=$(INST_EXE) LINKTYPE=\$(LINKTYPE) LIBPERL_A=$(LIBPERL_A) $(SUBDIR_MAKEFILE_PL_ARGS) + $(PASTHRU1) $(SUBDIR_MAKEFILE_PL_ARGS) @echo "Rebuild of $@ complete." '.qq{ subdirs :: - cd $subdir ; \$(MAKE) all LINKTYPE=\$(LINKTYPE) + cd $subdir && \$(MAKE) all \$(PASTHRU1) }; } @@ -1640,7 +1701,7 @@ sub realclean { realclean purge :: clean '); # realclean subdirectories first (already cleaned) - $sub = "\t-cd %s && test -f %s && \$(MAKE) %s realclean\n"; + my $sub = "\t-cd %s && test -f %s && \$(MAKE) %s realclean\n"; foreach(@{$att{DIR}}){ push(@m, sprintf($sub,$_,"$att{MAKEFILE}.old","-f $att{MAKEFILE}.old")); push(@m, sprintf($sub,$_,"$att{MAKEFILE}",'')); @@ -1670,8 +1731,8 @@ sub distclean { distclean: clean $preop $att{RM_F} $mkfiles - cd ..; tar $tarflags $tarname.tar \$(BASEEXT) - cd ..; $compress $tarname.tar + cd .. && tar $tarflags $tarname.tar \$(BASEEXT) + cd .. && $compress $tarname.tar $postop "; } @@ -1694,7 +1755,7 @@ END push(@m, <<'END') if -f "test.pl"; $(FULLPERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) test.pl END - push(@m, map("\tcd $_ && test -f $att{MAKEFILE} && \$(MAKE) test LINKTYPE=\$(LINKTYPE)\n", + push(@m, map("\tcd $_ && test -f $att{MAKEFILE} && \$(MAKE) test \$(PASTHRU)\n", @{$att{DIR}})); push(@m, "\t\@echo 'No tests defined for \$(NAME) extension.'\n") unless @m > 1; join("", @m); @@ -1707,8 +1768,8 @@ sub install { push @m, q{ doc_install :: @ $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \\ - -e 'use ExtUtils::MakeMaker; MM->writedoc("Module", "$(NAME)", \\ - "LINKTYPE=$(LINKTYPE)", "VERSION=$(VERSION)", "EXE_FILES=$(EXE_FILES)")' + -e "use ExtUtils::MakeMaker; MM->writedoc('Module', '$(NAME)', \\ + 'LINKTYPE=$(LINKTYPE)', 'VERSION=$(VERSION)', 'EXE_FILES=$(EXE_FILES)')" }; push(@m, " @@ -1761,7 +1822,7 @@ $(PERL_INC)/config.h: $(PERL_SRC)/config.sh $(PERL_ARCHLIB)/Config.pm: $(PERL_SRC)/config.sh @echo "Warning: $(PERL_ARCHLIB)/Config.pm may be out of date with $(PERL_SRC)/config.sh" - cd $(PERL_SRC); $(MAKE) lib/Config.pm + cd $(PERL_SRC) && $(MAKE) lib/Config.pm ') if $att{PERL_SRC}; push(@m, join(" ", values %{$att{XS}})." : \$(XSUBPPDEPS)\n") @@ -1784,16 +1845,39 @@ $(OBJECT) : '.$att{MAKEFILE}.' @echo "Cleaning current config before rebuilding Makefile..." -@mv '."$att{MAKEFILE} $att{MAKEFILE}.old".' -$(MAKE) -f '.$att{MAKEFILE}.'.old clean >/dev/null 2>&1 || true - $(PERL) $(I_PERL_LIBS) Makefile.PL + $(PERL) $(I_PERL_LIBS) Makefile.PL '."@ARGV".' @echo "Now you must rerun make."; false '; } - sub postamble{ ""; } +# --- Make-Directories section (internal method) --- +# dir_target(@array) returns a Makefile entry for the file .exists in each +# named directory. Returns nothing, if the entry has already been processed. +# We're helpless though, if the same directory comes as $(FOO) _and_ as "bar". +# Both of them get an entry, that's why we use "::". I chose '$(PERL)' as the +# prerequisite, because there has to be one, something that doesn't change +# too often :) +%Dir_Target = (); # package global + +sub dir_target { + my($self,@dirs)=@_; + my(@m,$dir); + foreach $dir (@dirs) { + next if $Dir_Target{$dir}; + push @m, " +$dir/.exists :: \$(PERL) + \@ \$(MKPATH) $dir + \@ \$(TOUCH) $dir/.exists +"; + $Dir_Target{$dir}++; + } + join "", @m; +} + # --- Make-A-Perl section --- sub staticmake { @@ -1838,6 +1922,8 @@ sub makeaperl { File::Find::find(sub { return unless m/\.a$/; return if m/^libperl/; + # don't include the installed version of this extension + return if $File::Find::name =~ m:auto/$att{FULLEXT}/$att{BASEEXT}.a$:; $static{fastcwd() . "/" . $_}++; }, grep( -d $_, @{$searchdirs || []}) ); @@ -1868,19 +1954,14 @@ join(" ", sort keys %static), " MAP_EXTRA = @{$extra} MAP_PRELIBS = $Config{'libs'} $Config{'cryptlib'} "; - if ($libperl) { - unless (-f $libperl || -f ($libperl = "$Config{'installarchlib'}/CORE/$libperl")){ - print STDOUT "Warning: $libperl not found"; - undef $libperl; - } - } - unless ($libperl) { - if (defined $att{PERL_SRC}) { - $libperl = "$att{PERL_SRC}/libperl.a"; - } elsif ( -f ( $libperl = "$Config{'installarchlib'}/CORE/libperl.a" )) { - } else { - print STDOUT "Warning: $libperl not found"; - } + + unless ($libperl && -f $libperl) { + my $dir = (defined $att{PERL_SRC}) ? $att{PERL_SRC} + : "$Config{'installarchlib'}/CORE"; + $libperl = "libperl.a" unless $libperl; + $libperl = "$dir/$libperl"; + print STDOUT "Warning: $libperl not found" + unless (-f $libperl || defined($att{PERL_SRC})); } push @m, " @@ -1910,9 +1991,9 @@ $tmp/perlmain.c: $makefilename}, q{ # We write MAP_EXTRA outside the perl program to have it eval'd by the shell push @m, q{ doc_inst_perl: - @ $(FULLPERL) -e 'use ExtUtils::MakeMaker; MM->writedoc("Perl binary", \\ - "$(MAP_TARGET)", "MAP_STATIC=$(MAP_STATIC)", \\ - "MAP_EXTRA=@ARGV", "MAP_LIBPERL=$(MAP_LIBPERL)")' -- $(MAP_EXTRA) + @ $(FULLPERL) -e 'use ExtUtils::MakeMaker; MM->writedoc("Perl binary",' \\ + -e '"$(MAP_TARGET)", "MAP_STATIC=$(MAP_STATIC)",' \\ + -e '"MAP_EXTRA=@ARGV", "MAP_LIBPERL=$(MAP_LIBPERL)")' -- $(MAP_EXTRA) }; push @m, qq{ @@ -2140,6 +2221,7 @@ generated C<*.bs> file. sub mksymlists { my($self) = shift; + my($pkg); # only AIX requires a symbol list at this point # (so does VMS, but that's handled by the MM_VMS package) @@ -2157,6 +2239,7 @@ sub mksymlists { print EXP join("\n",@{$att{DL_VARS}}) if $att{DL_VARS}; foreach $pkg (keys %{$att{DL_FUNCS}}) { (my($prefix) = $pkg) =~ s/\W/_/g; + my $func; foreach $func (@{$att{DL_FUNCS}->{$pkg}}) { $func = "XS_${prefix}_$func" unless $func =~ /^boot_/; print EXP "$func\n"; @@ -2199,6 +2282,7 @@ perllocal - locally installed modules and perl binaries close POD; } + =head1 AUTHORS Andy Dougherty Fdoughera@lafcol.lafayette.eduE>, Andreas @@ -2229,13 +2313,7 @@ v4.03 January 30th 1995 By Andreas Koenig v4.04 Februeary 5th 1995 By Andreas Koenig v4.05 February 8th 1995 By Andreas Koenig v4.06 February 10th 1995 By Andreas Koenig - -Cleaning up the new interface. Suggestion to freeze now until 5.001. - v4.061 February 12th 1995 By Andreas Koenig - -Fixes of some my() declarations and of @extra computing in makeaperl(). - v4.08 - 4.085 February 14th-21st 1995 by Andreas Koenig Introduces EXE_FILES and INST_EXE for installing executable scripts @@ -2273,6 +2351,48 @@ v4.086 March 9 1995 by Andy Dougherty Fixed some AIX buglets. Fixed DLD support for Linux with gcc 2.6.2. +v4.09 March 31 1995 by Andreas Koenig + +Patches from Tim (/usr/local/lib/perl5/hpux/CORE/libperl.a not found +message eliminated, and a small makeaperl patch). + +blib now is a relative directory (./blib). + +Documentation bug fixed. + +Chdir in the Makefile always followed by "&&", not by ";". + +The output of cflags is no longer directed to /dev/null, but the shell +version of cflags is now only called once. + +The result of MakeMaker's cflags takes precedence over +shell-cflags. + +Introduced a $(PASTHRU) variable, that doesn't have much effect yet, +but now it's easier to add variables that have to be passed to +recursive makes. + +'make config' will now always reapply the original arguments to the +'perl Makefile.PL'. + +MKPATH will be called only once for any directory (should speed up Tk +building and installation considerably). + +"Subroutine mkbootstrap redefined" message eliminated. It was +necessary to move &mkbootstrap and &mksymlists from @EXPORT to +@EXPORT_OK. + +C<*.PL> files will be processed by C<$(PERL)>. + +Turned some globals into my() variables, where it was obvious to be an +oversight. + +Changed some continuation lines so that they work on Solaris and Unicos. + +v4.091 April 3 1995 by Andy Dougherty + +Another attempt to fix writedoc() from Dean Roehrich. + =head1 NOTES MakeMaker development work still to be done: diff --git a/myconfig b/myconfig index be8b407..3f079f0 100755 --- a/myconfig +++ b/myconfig @@ -22,7 +22,7 @@ Summary of my $package (patchlevel $PATCHLEVEL) configuration: uname='$myuname' hint=$hint Compiler: - cc='$cc', optimize='$optimize' + cc='$cc', optimize='$optimize', ld='$ld' cppflags='$cppflags' ccflags ='$ccflags' ldflags ='$ldflags' diff --git a/perl.c b/perl.c index 0f80659..94b329b 100644 --- a/perl.c +++ b/perl.c @@ -833,10 +833,12 @@ I32 namlen; #if defined(DOSISH) # define PERLLIB_SEP ';' -#elif defined(VMS) -# define PERLLIB_SEP '|' #else +# if defined(VMS) +# define PERLLIB_SEP '|' +# else # define PERLLIB_SEP ':' +# endif #endif static void diff --git a/perl.h b/perl.h index 0d81d76..e6fad07 100644 --- a/perl.h +++ b/perl.h @@ -639,9 +639,9 @@ union any { #define U_L(what) ((U32)(what)) #else U32 cast_ulong _((double)); -#define U_S(what) ((U16)cast_ulong(what)) -#define U_I(what) ((unsigned int)cast_ulong(what)) -#define U_L(what) (cast_ulong(what)) +#define U_S(what) ((U16)cast_ulong((double)(what))) +#define U_I(what) ((unsigned int)cast_ulong((double)(what))) +#define U_L(what) (cast_ulong((double)(what))) #endif #ifdef CASTI32 @@ -649,9 +649,9 @@ U32 cast_ulong _((double)); #define I_V(what) ((IV)(what)) #else I32 cast_i32 _((double)); -#define I_32(what) (cast_i32(what)) +#define I_32(what) (cast_i32((double)(what))) IV cast_iv _((double)); -#define I_V(what) (cast_iv(what)) +#define I_V(what) (cast_iv((double)(what))) #endif struct Outrec { @@ -758,7 +758,6 @@ char *strcpy(), *strcat(); extern "C" { # endif double exp _((double)); - double fmod _((double,double)); double log _((double)); double sqrt _((double)); double modf _((double,double*)); @@ -771,15 +770,6 @@ char *strcpy(), *strcat(); # endif #endif -#ifndef HAS_FMOD -# ifdef HAS_DREM -# define fmod(x,y) drem((x),(y)) -# else -# define USE_MY_FMOD -# define fmod(x,y) my_fmod(x,y) -# endif -#endif - #ifndef __cplusplus char *crypt _((const char*, const char*)); char *getenv _((const char*)); diff --git a/proto.h b/proto.h index b132a01..8002cd1 100644 --- a/proto.h +++ b/proto.h @@ -211,9 +211,6 @@ char* my_bcopy _((char* from, char* to, I32 len)); char* my_bzero _((char* loc, I32 len)); #endif void my_exit _((U32 status)) __attribute__((noreturn)); -#ifdef USE_MY_FMOD -double my_fmod _((double x, double y)); -#endif I32 my_lstat _((void)); #ifndef HAS_MEMCMP I32 my_memcmp _((unsigned char* s1, unsigned char* s2, I32 len)); diff --git a/sv.h b/sv.h index 0bf897c..2a0393d 100644 --- a/sv.h +++ b/sv.h @@ -45,7 +45,7 @@ struct gv { }; struct cv { - XPVGV* sv_any; /* pointer to something */ + XPVCV* sv_any; /* pointer to something */ U32 sv_refcnt; /* how many references to us */ U32 sv_flags; /* what we are */ }; diff --git a/util.c b/util.c index f2bf077..4a45c5e 100644 --- a/util.c +++ b/util.c @@ -1579,12 +1579,12 @@ I32 cast_i32(f) double f; { -# define BIGDOUBLE 2147483648.0 /* Assume 32 bit int's ! */ +# define BIGDOUBLE 2147483647.0 /* Assume 32 bit int's ! */ # define BIGNEGDOUBLE (-2147483648.0) if (f >= BIGDOUBLE) - return (I32)fmod(f, BIGDOUBLE); + return (I32) BIGDOUBLE; if (f <= BIGNEGDOUBLE) - return (I32)fmod(f, BIGNEGDOUBLE); + return (I32) BIGNEGDOUBLE; return (I32) f; } # undef BIGDOUBLE @@ -1595,12 +1595,12 @@ cast_iv(f) double f; { /* XXX This should be fixed. It assumes 32 bit IV's. */ -# define BIGDOUBLE 2147483648.0 /* Assume 32 bit IV's ! */ +# define BIGDOUBLE 2147483647.0 /* Assume 32 bit IV's ! */ # define BIGNEGDOUBLE (-2147483648.0) if (f >= BIGDOUBLE) - return (IV)fmod(f, BIGDOUBLE); + return (IV) BIGDOUBLE; if (f <= BIGNEGDOUBLE) - return (IV)fmod(f, BIGNEGDOUBLE); + return (IV) BIGNEGDOUBLE; return (IV) f; } # undef BIGDOUBLE @@ -1687,28 +1687,3 @@ I32 *retlen; *retlen = s - start; return retval; } - -/* Amazingly enough, some systems (e.g. Dynix 3) don't have fmod. - This is a slow, stupid, but working emulation. (AD) -*/ -#ifdef USE_MY_FMOD -double -my_fmod(x, y) -double x, y; -{ - double i = 0.0; /* Can't use int because it can overflow */ - if ((x == 0) || (y == 0)) - return 0; - /* The sign of fmod is the same as the sign of x. */ - if ( (x < 0 && y > 0) || (x > 0 && y < 0) ) - y = -y; - if (x > 0) { - while (x - i*y > y) - i++; - } else { - while (x - i*y < y) - i++; - } - return x - i * y; -} -#endif diff --git a/vms/config.vms b/vms/config.vms index 74afb23..001ce21 100644 --- a/vms/config.vms +++ b/vms/config.vms @@ -1311,19 +1311,6 @@ #undef SETUID_SCRIPTS_ARE_SECURE_NOW /**/ #undef DOSUID /**/ -/* HAS_DREM: - * This symbol, if defined, indicates that the drem routine is - * available. This is a Pyramid routine that is the same as - * fmod. - */ -#undef HAS_DREM /**/ - -/* HAS_FMOD: - * This symbol, if defined, indicates that the fmod routine is - * available. - */ -#define HAS_FMOD /**/ - /* Gconvert: * This preprocessor macro is defined to convert a floating point * number to a string without a trailing decimal point. This diff --git a/x2p/Makefile.SH b/x2p/Makefile.SH index 19d4205..725d92e 100755 --- a/x2p/Makefile.SH +++ b/x2p/Makefile.SH @@ -76,7 +76,7 @@ a2p: $(obj) a2p.o # used only if you force byacc to run by saying # make run_byacc -run_byacc: +run_byacc: FORCE @ echo Expect many shift/reduce and reduce/reduce conflicts $(BYACC) a2p.y mv y.tab.c a2p.c @@ -84,7 +84,7 @@ run_byacc: # We don't want to regenerate a2p.c, but it might appear out-of-date # after a patch is applied or a new distribution is made. a2p.c: a2p.y - - touch a2p.c + -@touch a2p.c a2p.o: a2p.c a2py.c a2p.h EXTERN.h util.h INTERN.h handy.h ../config.h str.h hash.h $(CCCMD) $(LARGE) a2p.c -- 2.7.4