diff options
84 files changed, 2287 insertions, 5157 deletions
@@ -28,6 +28,404 @@ example from http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/ Version v5.7.X Development release working toward v5.8 -------------- ____________________________________________________________________________ +[ 16432] By: jhi on 2002/05/06 13:29:22 + Log: Add a test for #16431, and document Dave's campaign + against localised hash element bugs. + Branch: perl + ! pod/perldelta.pod t/op/tie.t +____________________________________________________________________________ +[ 16431] By: jhi on 2002/05/06 13:13:00 + Log: Subject: [proposed PATCH] correctly unlocalise exists on tied/%ENV + From: Dave Mitchell <davem@fdgroup.com> + Date: Sat, 4 May 2002 00:34:18 +0100 + Message-ID: <20020504003418.F22026@fdgroup.com> + Branch: perl + ! pp_hot.c t/op/local.t +____________________________________________________________________________ +[ 16430] By: jhi on 2002/05/06 12:39:31 + Log: Regen uconfig.h. + Branch: perl + ! uconfig.h +____________________________________________________________________________ +[ 16429] By: jhi on 2002/05/06 12:18:23 + Log: Unfortunately AmigaOS has been broken since 11423 + and is unlikely to get fixed in time for 5.8.0. + Branch: perl + ! pod/perldelta.pod +____________________________________________________________________________ +[ 16428] By: jhi on 2002/05/06 12:12:59 + Log: Ultimate discouragement for the old tools, from Andreas. + Branch: perl + - Porting/p4d2p Porting/p4desc + ! MANIFEST Porting/repository.pod +____________________________________________________________________________ +[ 16427] By: jhi on 2002/05/06 12:01:36 + Log: Upgrade to Digest::MD5 2.20. + Branch: perl + ! ext/Digest/MD5/Changes ext/Digest/MD5/MD5.pm + ! ext/Digest/MD5/t/files.t ext/Digest/MD5/t/md5-aaa.t +____________________________________________________________________________ +[ 16426] By: ams on 2002/05/06 09:48:42 + Log: Subject: [Encode] 1.70 released + From: Dan Kogai <dankogai@dan.co.jp> + Date: Mon, 6 May 2002 19:36:15 +0900 + Message-Id: <17AB2CE6-60DD-11D6-9982-00039301D480@dan.co.jp> + Branch: perl + ! ext/Encode/Changes ext/Encode/Encode.pm ext/Encode/bin/enc2xs + ! ext/Encode/encoding.pm ext/Encode/lib/Encode/Encoding.pm + ! ext/Encode/t/Unicode.t ext/Encode/t/mime-header.t +____________________________________________________________________________ +[ 16425] By: ams on 2002/05/06 09:40:42 + Log: Subject: [PATCH] PerlIO::Via reference + From: Gisle Aas <gisle@ActiveState.com> + Date: 05 May 2002 22:50:23 -0700 + Message-Id: <lrd6w925b4.fsf_-_@caliper.activestate.com> + Branch: perl + ! pod/perliol.pod +____________________________________________________________________________ +[ 16424] By: ams on 2002/05/06 09:37:58 + Log: Subject: [PATCH] Term/Complete.pm: quote metachars + From: Brendan O'Dea <bod@debian.org> + Date: Mon, 6 May 2002 14:04:48 +1000 + Message-Id: <20020506040448.GA8241@londo.odea.dropbear.id.au> + Branch: perl + ! lib/Term/Complete.pm +____________________________________________________________________________ +[ 16423] By: gsar on 2002/05/06 05:25:59 + Log: p4genpatch: avoid stderr noise during adds + Branch: perl + ! Porting/p4genpatch +____________________________________________________________________________ +[ 16422] By: jhi on 2002/05/06 02:16:31 + Log: Subject: [PATCH] Fixup VOS builds of miniperl + From: Paul_GreenVOS@vos.stratus.com + Date: Sun, 5 May 02 23:11 edt + Message-Id: <200205060311.XAA12996@mailhub1.stratus.com> + Branch: perl + ! vos/build.cm vos/compile_perl.cm vos/perl.bind +____________________________________________________________________________ +[ 16421] By: jhi on 2002/05/06 01:09:24 + Log: Subject: Re: [ID 20020504.006] $s=`command` fails if $/=\integer + From: Radu Greab <radu@netsoft.ro> + Date: Mon, 6 May 2002 04:23:10 +0300 + Message-ID: <15573.56062.264379.981864@ix.netsoft.ro> + Branch: perl + ! pp_sys.c t/op/exec.t +____________________________________________________________________________ +[ 16420] By: jhi on 2002/05/05 22:35:58 + Log: Further comment tweak, to agree with perlxs.pod. + Branch: perl + ! perl.h +____________________________________________________________________________ +[ 16419] By: jhi on 2002/05/05 22:15:48 + Log: Subject: [PATCH] Update README.vos and release vos build macros + From: Paul_GreenVOS@vos.stratus.com + Date: Sun, 5 May 02 17:15 edt + Message-Id: <200205052114.RAA26329@mailhub2.stratus.com> + To: perl5-porters@perl.org + Branch: perl + + vos/compile_full_perl.cm vos/configure_full_perl.sh + + vos/make_full_perl.sh + ! MANIFEST README.vos vos/Changes +____________________________________________________________________________ +[ 16418] By: jhi on 2002/05/05 22:09:27 + Log: Retract MM_NW5.pm part of #16371, at the request + of Michael Schwern. + Branch: perl + ! lib/ExtUtils/MM_NW5.pm +____________________________________________________________________________ +[ 16417] By: jhi on 2002/05/05 17:57:04 + Log: Comment tweaks. + Branch: perl + ! perl.h +____________________________________________________________________________ +[ 16416] By: gsar on 2002/05/05 17:00:33 + Log: a few more p4genpatch fixes: + + don't assume previous revision exists, let p4 compute it from + the one-less-change number instead + + the time part in timestamps were always 00:00:00; fix by + fetching metadata via "p4 fsync" rather than "p4 filelog" + + quote all file names used in external commands to make them + them work when there are spaces in those file names + + looks production worthy now :) + Branch: perl + ! Porting/p4genpatch +____________________________________________________________________________ +[ 16415] By: jhi on 2002/05/05 15:51:01 + Log: The #16401 was far from enough, and mostly in a wrong direction. + The right thing to do would be to convert Storable into using + the new MY_CXT scheme (no static data, and memory management + using SVs). + Branch: perl + ! ext/Storable/Storable.xs +____________________________________________________________________________ +[ 16414] By: gsar on 2002/05/05 08:41:22 + Log: p4genpatch diffs against depot files from //depot/perl when called + with -b //depot/maint-5.6/perl + Branch: perl + ! Porting/p4genpatch +____________________________________________________________________________ +[ 16413] By: gsar on 2002/05/05 07:50:53 + Log: p4genpatch: current directory may not be writable, so don't + create temp files there + Branch: perl + ! Porting/p4genpatch +____________________________________________________________________________ +[ 16412] By: gsar on 2002/05/05 07:34:33 + Log: p4genpatch now works on windows + Branch: perl + ! Porting/p4genpatch +____________________________________________________________________________ +[ 16411] By: gsar on 2002/05/05 07:16:37 + Log: p4genpatch: tweak from Andreas to strip leading portion of + path specified in -b (so patch can be applied with "patch -p1") + Branch: perl + ! Porting/p4genpatch +____________________________________________________________________________ +[ 16410] By: jhi on 2002/05/05 03:04:56 + Log: Subject: [PATCH: perl@16307] add niscat (aka NIS 3, aka NIS +) to t/op/pwent + From: PPrymmer@factset.com + Date: Fri, 3 May 2002 14:52:12 -0400 + Message-ID: <OF365AB827.72878468-ON85256BAE.0066F730@55.25.11> + Branch: perl + ! t/op/pwent.t +____________________________________________________________________________ +[ 16409] By: jhi on 2002/05/05 01:53:24 + Log: Upgrade to Net::Ping 2.17. + Branch: perl + ! lib/Net/Ping.pm lib/Net/Ping/CHANGES lib/Net/Ping/README +____________________________________________________________________________ +[ 16408] By: jhi on 2002/05/05 01:38:39 + Log: Upgrade to Getopt::Long 2.31. + Branch: perl + ! lib/Getopt/Long.pm +____________________________________________________________________________ +[ 16407] By: jhi on 2002/05/05 01:05:17 + Log: Subject: Re: Cross-compiling as of WinCE + From: "Vadim Konovalov" <vkonovalov@peterstar.ru> + Date: Sat, 4 May 2002 03:49:11 +0400 + Message-ID: <00ca01c1f2fd$20a35fb0$cb5cc3d9@vad> + Branch: perl + + wince/compile.bat wince/win32io.c + - wince/perldll.def + ! MANIFEST configpm makedef.pl wince/Makefile.ce + ! wince/cecopy-lib.pl wince/comp.pl wince/config.ce + ! wince/config_h.PL wince/wince.c +____________________________________________________________________________ +[ 16406] By: jhi on 2002/05/05 00:23:16 + Log: The loclibpth is always set by Configure. + Branch: perl + ! hints/dec_osf.sh +____________________________________________________________________________ +[ 16405] By: jhi on 2002/05/05 00:13:04 + Log: Subject: Re: [Unicode::Collate] UCA Version number + From: SADAHIRO Tomoyuki <bqw10602@nifty.com> + Date: Sun, 05 May 2002 10:07:57 +0900 + Message-Id: <20020505095942.3BEF.BQW10602@nifty.com> + Branch: perl + ! lib/Unicode/Collate.pm lib/Unicode/Collate/Changes + ! lib/Unicode/Collate/README lib/Unicode/Collate/t/test.t +____________________________________________________________________________ +[ 16404] By: rgs on 2002/05/04 19:35:13 + Log: Subject: [PATCH sv.c] delete inaccurate comment + From: Dave Mitchell <davem@fdgroup.com> + Date: Fri, 3 May 2002 21:17:00 +0100 + Message-ID: <20020503211700.C22026@fdgroup.com> + Branch: perl + ! sv.c +____________________________________________________________________________ +[ 16403] By: jhi on 2002/05/04 19:02:56 + Log: Solaris: show what 'that' is. + Branch: perl + ! hints/solaris_2.sh +____________________________________________________________________________ +[ 16402] By: rgs on 2002/05/04 18:25:25 + Log: Syntax fix. + Branch: perl + ! t/op/arith.t +____________________________________________________________________________ +[ 16401] By: jhi on 2002/05/04 18:25:01 + Log: (retracted by #16415) Storable: try to free what we allocated. + Branch: perl + ! ext/Storable/Storable.xs +____________________________________________________________________________ +[ 16400] By: jhi on 2002/05/04 17:15:10 + Log: UNICOS: division is really sloppy. + Branch: perl + ! t/op/arith.t +____________________________________________________________________________ +[ 16399] By: jhi on 2002/05/04 17:00:58 + Log: Subject: fix t/io/fs.t for VOS + From: Paul_GreenVOS@vos.stratus.com + Date: Sat, 4 May 02 14:01 edt + Message-Id: <200205041801.OAA13071@mailhub1.stratus.com> + Branch: perl + ! t/io/fs.t +____________________________________________________________________________ +[ 16398] By: jhi on 2002/05/04 16:57:05 + Log: Subject: [Unicode::Collate] UCA Version number + From: SADAHIRO Tomoyuki <bqw10602@nifty.com> + Date: Sat, 04 May 2002 16:07:07 +0900 + Message-Id: <20020504160547.D7E0.BQW10602@nifty.com> + Branch: perl + ! lib/Unicode/Collate.pm lib/Unicode/Collate/t/test.t +____________________________________________________________________________ +[ 16397] By: jhi on 2002/05/04 16:54:40 + Log: Subject: [PATCH lib/overload.pm] "\"\"" + From: Michael G Schwern <schwern@pobox.com> + Date: Sat, 4 May 2002 13:17:44 -0400 + Message-ID: <20020504171743.GD640@blackrider> + Branch: perl + ! lib/overload.pm +____________________________________________________________________________ +[ 16396] By: jhi on 2002/05/04 16:32:45 + Log: Add the EBCDIC test data to downgrade.t. + Branch: perl + ! ext/Storable/t/downgrade.t +____________________________________________________________________________ +[ 16395] By: jhi on 2002/05/04 16:25:37 + Log: EBCDIC tweak. + Branch: perl + ! ext/Storable/t/utf8hash.t +____________________________________________________________________________ +[ 16394] By: jhi on 2002/05/04 16:09:15 + Log: Allow p4genpatch to use diff programs other than 'diff'. + Branch: perl + ! Porting/p4genpatch +____________________________________________________________________________ +[ 16393] By: jhi on 2002/05/04 16:03:56 + Log: Add p4genpatch from Andreas; obsoletes both + p4d2p and p4desc. + Branch: perl + + Porting/p4genpatch + ! MANIFEST Porting/makerel +____________________________________________________________________________ +[ 16392] By: jhi on 2002/05/04 15:58:53 + Log: Upgrade to Encode 1.69. + Branch: perl + ! ext/Encode/AUTHORS ext/Encode/Changes ext/Encode/Encode.pm + ! ext/Encode/Encode/Makefile_PL.e2x + ! ext/Encode/Unicode/Unicode.pm ext/Encode/lib/Encode/Alias.pm + ! ext/Encode/lib/Encode/Guess.pm + ! ext/Encode/lib/Encode/MIME/Header.pm + ! ext/Encode/t/mime-header.t +____________________________________________________________________________ +[ 16391] By: jhi on 2002/05/04 15:51:52 + Log: Subject: [PATCH INSTALL] - remove binary compatibility claims + From: Dave Mitchell <davem@fdgroup.com> + Date: Sat, 4 May 2002 16:09:26 +0100 + Message-ID: <20020504160926.A24990@fdgroup.com> + Branch: perl + ! INSTALL +____________________________________________________________________________ +[ 16390] By: jhi on 2002/05/04 15:47:49 + Log: Subject: [PATCH] Re: [PATCH] Re: Data::Dumper tests with -Mutf8 + From: Nicholas Clark <nick@unfortu.net> + Date: Sat, 4 May 2002 12:38:58 +0100 + Message-ID: <20020504113857.GC317@Bagpuss.unfortu.net> + Branch: perl + ! ext/Data/Dumper/Dumper.xs ext/Data/Dumper/t/dumper.t +____________________________________________________________________________ +[ 16389] By: jhi on 2002/05/04 15:40:26 + Log: Subject: [PATCH] Re: Data::Dumper tests with -Mutf8 + From: Nicholas Clark <nick@unfortu.net> + Date: Sat, 4 May 2002 00:30:43 +0100 + Message-ID: <20020503233042.GF294@Bagpuss.unfortu.net> + Branch: perl + ! ext/Data/Dumper/Dumper.xs ext/Data/Dumper/t/dumper.t +____________________________________________________________________________ +[ 16388] By: jhi on 2002/05/04 15:28:56 + Log: Doc tweak from Elizabeth Mattijsen. + Branch: perl + ! pod/perlunicode.pod +____________________________________________________________________________ +[ 16387] By: rgs on 2002/05/04 13:29:33 + Log: Subject: [PATCH] channames.pm doc tweaks + From: Tatsuhiko Miyagawa <miyagawa@edge.co.jp> + Date: Sat, 04 May 2002 11:45:18 +0900 + Message-ID: <86it64d41t.wl@mail.edge.co.jp> + Branch: perl + ! lib/charnames.pm +____________________________________________________________________________ +[ 16386] By: rgs on 2002/05/04 13:22:41 + Log: Subject: Re: [PATCH scope.c] Re: local($tied->{foo}) leaks + From: Dave Mitchell <davem@fdgroup.com> + Date: Fri, 3 May 2002 23:51:10 +0100 + Message-ID: <20020503235110.E22026@fdgroup.com> + Branch: perl + ! pp_hot.c scope.c +____________________________________________________________________________ +[ 16385] By: nick on 2002/05/04 09:29:41 + Log: Integrate mainline + Branch: perlio + !> (integrate 47 files) +____________________________________________________________________________ +[ 16384] By: jhi on 2002/05/03 21:00:27 + Log: Subject: Re: perl@16307 + From: Nicholas Clark <nick@unfortu.net> + Date: Fri, 3 May 2002 21:49:04 +0100 + Message-ID: <20020503204903.GC294@Bagpuss.unfortu.net> + + canonical #3 was failing under -Mutf8. + Branch: perl + ! ext/Storable/t/canonical.t +____________________________________________________________________________ +[ 16383] By: rgs on 2002/05/03 20:45:58 + Log: Subject: [PATCH scope.c] Re: local($tied->{foo}) leaks + From: Dave Mitchell <davem@fdgroup.com> + Date: Fri, 3 May 2002 21:12:10 +0100 + Message-ID: <20020503211210.B22026@fdgroup.com> + Branch: perl + ! scope.c +____________________________________________________________________________ +[ 16382] By: rgs on 2002/05/03 20:14:07 + Log: Subject: [PATCH] perl -i clobbers files on Cygwin + From: "Gerrit P. Haase" <gerrit@familiehaase.de> + Date: Fri, 3 May 2002 20:30:25 +0200 + Message-ID: <190109228332.20020503203025@familiehaase.de> + Branch: perl + ! doio.c +____________________________________________________________________________ +[ 16381] By: rgs on 2002/05/03 20:07:44 + Log: Subject: t/TestInit.pm - clean up comments + From: Paul_GreenVOS@vos.stratus.com + Date: Fri, 3 May 02 14:51 edt + Message-ID: <200205031850.OAA09104@mailhub2.stratus.com> + Branch: perl + ! t/TestInit.pm +____________________________________________________________________________ +[ 16380] By: jhi on 2002/05/03 15:47:38 + Log: Subject: [PATCH] enc2xs template -- searches script more sensibly + From: Dan Kogai <dankogai@dan.co.jp> + Date: Sat, 4 May 2002 01:46:35 +0900 + Message-Id: <544C1568-5EB5-11D6-8F1D-00039301D480@dan.co.jp> + Branch: perl + ! ext/Encode/Encode/Makefile_PL.e2x +____________________________________________________________________________ +[ 16379] By: jhi on 2002/05/03 15:43:47 + Log: Forgotten test arrangement. + Branch: perl + ! ext/Digest/MD5/t/files.t +____________________________________________________________________________ +[ 16378] By: jhi on 2002/05/03 14:54:19 + Log: Comedy of typing errors. + Branch: perl + ! hints/solaris_2.sh +____________________________________________________________________________ +[ 16377] By: jhi on 2002/05/03 14:45:26 + Log: Let's try the "no Net:: if no Socket" again. + Branch: perl + ! t/lib/1_compile.t +____________________________________________________________________________ +[ 16376] By: jhi on 2002/05/03 14:11:42 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h +____________________________________________________________________________ [ 16375] By: jhi on 2002/05/03 14:09:38 Log: Oops. Branch: perl @@ -88,8 +88,8 @@ that too. Additional information is in the Porting/ directory. =head1 WARNING: This version requires an extra step to build old extensions. 5.005_53 and later releases do not export unadorned -global symbols anymore. This means you may need to build older -extensions that have not been updated for the new naming convention +global symbols anymore. This means you may need to build rather old +extensions that have not been updated for the current naming convention with: perl Makefile.PL POLLUTE=1 @@ -101,17 +101,12 @@ building perl itself with: pod/perldelta.pod contains more details about this. -=head1 WARNING: This version may not be binary compatible with Perl 5.005. +=head1 WARNING: This version is not binary compatible with releases of +Perl prior to 5.8.0. -Using the default Configure options for building perl should get you -a perl that will be binary compatible with the 5.005 release. - -However, if you run Configure with any custom options, such as --Dusethreads, -Dusemultiplicity, -Dusemymalloc, etc., -the resulting perl will not be binary compatible. Under these -circumstances, if you have dynamically loaded extensions that were -built under perl 5.005, you will need to rebuild and reinstall all -those extensions to use them with 5.6. +If you have built extensions (ie modules that include C code) +using an earlier version of Perl, you will need to rebuild and reinstall +those extensions. Pure perl modules without XS or C code should continue to work fine without reinstallation. See the discussions below on @@ -2206,8 +2206,7 @@ Porting/fixvars Find undeclared variables with C compiler and fix em Porting/genlog Generate formatted changelogs by querying p4d Porting/Glossary Glossary of config.sh variables Porting/makerel Release making utility -Porting/p4d2p Generate standard patches from p4 diffs -Porting/p4desc Smarter 'p4 describe', outputs diffs for new files +Porting/p4genpatch Obsoletes both p4desc and p4d2p Porting/patching.pod How to report changes made to Perl Porting/patchls Flexible patch file listing utility Porting/pumpkin.pod Guidelines and hints for Perl maintainers @@ -2673,17 +2672,20 @@ vms/vmsish.h VMS-specific C header for Perl core vms/vmspipe.com VMS-specific piped command helper script vms/vms_yfix.pl convert Unix perly.[ch] to VMS perly_[ch].vms vms/writemain.pl Generate perlmain.c from miniperlmain.c+extensions -vos/build.cm VOS command macro to build Perl +vos/build.cm VOS command macro to build "mini" Perl vos/Changes Changes made to port Perl to the VOS operating system -vos/compile_perl.cm VOS command macro to build multiple version of Perl +vos/compile_full_perl.cm VOS command macro to build "full" Perl +vos/compile_perl.cm VOS command macro to build "mini" Perl vos/config.alpha.def definitions used by config.pl vos/config.alpha.h config.h for use with alpha VOS POSIX.1 support vos/config.ga.def definitions used by config.pl vos/config.ga.h config.h for use with generally-available VOS POSIX.1 support vos/config.pl script to convert a config_h.SH to a config.h -vos/configure_perl.cm VOS command macro to configure perl before building -vos/install_perl.cm VOS command macro to install perl after building +vos/configure_full_perl.sh VOS shell script to configure "full" perl before building +vos/configure_perl.cm VOS command macro to configure "mini" perl before building +vos/install_perl.cm VOS command macro to install "mini" perl after building vos/Makefile A helper for maintaining the config.*.* in UNIX +vos/make_full_perl.sh VOS shell script to build and test "full" perl vos/perl.bind VOS bind control file vos/test_vos_dummies.c Test program for "vos_dummies.c" vos/vos.c VOS emulations for missing POSIX functions @@ -2741,9 +2743,9 @@ wince/bin/pl2bat.pl WinCE port wince/bin/runperl.pl WinCE port wince/bin/search.pl WinCE port wince/cecopy-lib.pl WinCE port +wince/compile.bat WinCE port wince/comp.pl WinCE port wince/config.ce WinCE port -wince/config.h WinCE port wince/config_H.ce WinCE port wince/config_h.PL WinCE port wince/config_sh.PL WinCE port @@ -2761,7 +2763,6 @@ wince/include/time.h WinCE port wince/Makefile.ce WinCE port wince/makeico.pl WinCE port wince/perl.rc WinCE port -wince/perldll.def WinCE port wince/perllib.c WinCE port wince/perlmain.c WinCE port wince/README.compile WinCE port @@ -2773,6 +2774,7 @@ wince/win32.h WinCE port wince/win32iop.h WinCE port wince/win32thread.c WinCE port wince/win32thread.h WinCE port +wince/win32io.c WinCE port wince/wince.c WinCE port wince/wince.h WinCE port wince/wincesck.c WinCE port diff --git a/Porting/makerel b/Porting/makerel index d97143f176..ae43642201 100644 --- a/Porting/makerel +++ b/Porting/makerel @@ -101,6 +101,7 @@ my @exe = qw( Porting/makerel Porting/p4d2p Porting/p4desc + Porting/p4genpatch Porting/patchls Porting/*.pl mpeix/nm diff --git a/Porting/p4d2p b/Porting/p4d2p deleted file mode 100755 index f645ef807e..0000000000 --- a/Porting/p4d2p +++ /dev/null @@ -1,84 +0,0 @@ -#!/l/local/bin/perl -wspi.bak - -# -# reads a perforce style diff on stdin and outputs appropriate headers -# so the diff can be applied with the patch program -# -# Gurusamy Sarathy <gsar@activestate.com> -# - -BEGIN { - $0 =~ s|.*/||; - if ($h or $help) { - print STDERR <<USAGE; -Usage: $0 [-v] [-h] files - - -h print this help - -v output progress messages - -Does inplace edit of diff files output by the perforce commands -"p4 describe", "p4 diff", and "p4 diff2". The result is suitable -for feeding to the "patch" program. - -If no files are specified, reads from stdin and writes to stdout. - -WARNING: It only handles context or unified diffs. - -Example: p4 describe -du 123 | $0 > change-123.patch - -USAGE - exit(0); - } - unless (@ARGV) { @ARGV = '-'; undef $^I; } - use vars qw($thisfile $time $file $fnum $v $h $help); - $thisfile = ""; - $time = localtime(time); -} - -my ($cur, $match); -$cur = m<^==== //depot/(.+?)\#\d+.* ====$> ... m<^(\@\@.+\@\@|\*+)$>; - -$match = $1; - -if ($ARGV ne $thisfile) { - warn "processing patchfile [$ARGV]\n" unless $ARGV eq '-'; - $thisfile = $ARGV; -} - -# while we are within range -if ($cur) { - # set the file name after first line - if ($cur == 1) { - $file = $match; - $fnum++; - } - # emit the diff header when we hit last line - elsif ($cur =~ /E0$/) { - my $f = $file; - - # special hack for perl so we can always use "patch -p1" - $f =~ s<^.*?(perl.*?/)><$1>; - - # unified diff - if ($match =~ /^\@/) { - warn "emitting udiff header\n" if $v; - $_ = "Index: $f\n--- $f.~1~\t$time\n+++ $f\t$time\n$_"; - } - # context diff - elsif ($match =~ /^\*/) { - warn "emitting cdiff header\n" if $v; - $_ = "Index: $f\n*** $f.~1~\t$time\n--- $f\t$time\n$_"; - } - } - # see if we hit another patch (i.e. previous patch was empty) - elsif (m<^==== //depot/(.+?)\#\d+.* ====$>) { - $file = $match = $1; - } - # suppress all other lines in the header - else { - $_ = ""; - } - warn "file [$file] line [$cur] file# [$fnum]\n" if $v; -} - -$_ .= "End of Patch.\n" if eof; diff --git a/Porting/p4desc b/Porting/p4desc deleted file mode 100755 index 2d1c9d8219..0000000000 --- a/Porting/p4desc +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/perl -wpi.bak - -# -# Munge "p4 describe ..." output to include new files. -# -# Gurusamy Sarathy <gsar@activestate.com> -# - -use vars qw($thisfile $change $file $fnum $h $v $p4port @addfiles - $branches $skip); - -BEGIN { - $0 =~ s|^.*/||; - $p4port = $ENV{P4PORT} || 'localhost:1666'; - for (@ARGV) { - if ($p4port =~ /^\s+$/) { - $p4port = $_; - } - elsif (/^-p(.*)$/) { - $p4port = $1 || ' '; - } - elsif (/^-b(.*)$/) { - $branches = $1; - } - elsif (/^-v$/) { - $v++; - } - elsif (/^-h/) { - $h++; - } - else { - push @files, $_; - } - } - unless (@files) { @files = '-'; undef $^I; } - @ARGV = @files; - $branches = '//depot/perl/' unless defined $branches; - if ($h) { - print STDERR <<USAGE; -Usage: $0 [-p \$P4PORT] [-v] [-h] [files] - - -phost:port p4 port (e.g. myhost:1666) - -h print this help - -v output progress messages - -bbranch(es) which branches to include (regex) - (default: //depot/perl/) - -h show this help - -A smart 'cat'. When fed the spew from "p4 describe ..." on STDIN, -spits it right out on STDOUT, followed by patches for any new files -detected in the spew. Can also be used to edit insitu a bunch of -files containing said spew. - -WARNING 1: Currently only emits unified diffs (diff -u). - -WARNING 2: By default only the changes in the //depot/perl branch -are shown. To include all the branches, supply "-b." arguments -to $0. - -Examples: - p4 describe -du 123 | $0 > change-123.desc - p4 describe -du 123 | $0 | p4d2p > change-123.patch - -USAGE - exit(0); - } - $thisfile = ""; -} - - -if ($ARGV ne $thisfile) { - warn "processing patchfile [$ARGV]\n" unless $ARGV eq '-'; - $thisfile = $ARGV; -} - -my $cur = m|^Affected files| ... m|^Differences|; - -# while we are within range -if ($cur) { - if (m|^\.\.\. |) { - if (m|$branches|) { - if (m{^\.\.\. (//depot/.+?\#\d+) (add|branch)$}) { - my $newfile = $1; - push @addfiles, $newfile; - warn "$newfile add, revision != 1!\n" unless $newfile =~ /#1$/; - } - } else { - push @skipped, "# $_"; - $_ = ''; - } - } - warn "file [$file] line [$cur] file# [$fnum]\n" if $v; -} - -if (m|^==== //depot/|) { - $skip = !m|$branches|; - print "# Skipped because not under branches: $branches\n" if $skip; -} - -$_ = "# $_" if $skip; - -if (/^Change (\d+) by/) { - $_ = "\n\n" . $_ if $change; # start of a new change list - $change = $1; - my $new = newfiles(); - if ($new) { - $_ = $new . $_; - } -} - -if (eof) { - $_ .= newfiles(); - $_ .= join('', "\n", - "# Skipped because not under branches: $branches\n", - @skipped, "\n") if @skipped; -} - -sub newfiles { - my $addfile; - my $ret = ""; - for $addfile (@addfiles) { - my $type = `p4 -p $p4port files '$addfile'`; - if ($?) { - warn "$0: `p4 -p $p4port print '$addfile'` failed, status[$?]\n"; - next; - } - $type =~ m|^//.*\((.+)\)$| or next; - $type = $1; - unless ($type =~ /text/) { - $ret .= "\n==== $addfile ($type) ====\n\n"; - next; - } - my @new = `p4 -p $p4port print '$addfile'`; - if ($?) { - die "$0: `p4 -p $p4port print '$addfile'` failed, status[$?]\n"; - } - my $desc = shift @new; # discard initial description - $ret .= "\n==== $addfile ($type) ====\n\n"; - my $lines = "," . @new; - $lines = "" if @new < 2; - $ret .= "\@\@ -0,0 +1$lines \@\@\n"; - $ret .= join("+","",@new); - $ret .= "\n\\ No newline at end of file\n" if $ret !~ /\n$/; - } - @addfiles = (); - return $ret; -} diff --git a/Porting/p4genpatch b/Porting/p4genpatch new file mode 100644 index 0000000000..a283ceb12e --- /dev/null +++ b/Porting/p4genpatch @@ -0,0 +1,149 @@ +#!/usr/bin/perl -w + + +# p4genpatch - Generate a perl patch from the repository + +# Usage: $0 -h + +# andreas.koenig@anima.de + +use strict; +use File::Temp qw(tempdir); +use File::Compare; +use Time::Local; +use Getopt::Long; +use Cwd qw(cwd); + +sub correctmtime ($$$); +sub Usage (); + +$0 =~ s|^.*[\\/]||; +my $VERSION = '0.05'; +my $TOPDIR = cwd(); +my @P4opt; +our %OPT = ( "d" => "u", b => "//depot/perl", "D" => "diff" ); +Getopt::Long::Configure("no_ignore_case"); +GetOptions(\%OPT, "b=s", "p=s", "d=s", "D=s", "h", "v", "V") or die Usage; +print Usage and exit if $OPT{h}; +print "$VERSION\n" and exit if $OPT{V}; +die Usage unless @ARGV == 1 && $ARGV[0] =~ /^\d+$/; +my $CHANGE = shift; + +for my $p4opt (qw(p)) { + push @P4opt, "-$p4opt $OPT{$p4opt}" if $OPT{$p4opt}; +} + +my $system = "p4 @P4opt describe -s $CHANGE |"; +open my $p4, $system or die "Could not run $system"; +my @action; +while (<$p4>) { + print; + next unless m|($OPT{b})|; + my($prefix) = $1; + $prefix =~ s|/[^/]+$||; # up to the last "/" in the match is to be stripped + if (my($file,$action) = m|^\.\.\. (//depot.*)\s(\w+)$|) { + next if $action eq "delete"; + push @action, [$action, $file, $prefix]; + } +} +close $p4; + +my $tempdir; +print "Differences ...\n"; +for my $a (@action) { + $tempdir ||= tempdir( "tmp-XXXX", CLEANUP => 1, TMPDIR => 1 ); + my($action,$file,$prefix) = @$a; + my($path,$basename,$number) = $file =~ m|\Q$prefix\E/(.+/)?([^/]+)#(\d+)|; + my($depotfile) = $file =~ m|^(.+)#\d+\z|; + die "Panic: Could not parse file[$file]" unless $number; + $path = "" unless defined $path; + my($d1,$d2,$prev,$prevchange,$prevfile,$doadd); + $prev = $number-1; + $prevchange = $CHANGE-1; + # can't assume previous rev == $number-1 due to obliterated revisions + $prevfile = "$depotfile\@$prevchange"; + if ($number == 1 or $action =~ /^(add|branch)$/) { + $d1 = "/dev/null"; + ++$doadd; + } elsif ($action =~ /^(edit|integrate)$/) { + $d1 = "$path$basename-$prevchange"; + warn "==> $d1 <==\n" if $OPT{v}; + my $system = qq[p4 @P4opt print -o "$tempdir/$d1" "$prevfile"]; + my $status = `$system`; + if ($?) { + warn "$0: system[$system] failed, status[$?]\n"; + next; + } + chmod 0644, "$tempdir/$d1"; + if ($status =~ /\#(\d+) \s - \s \w+ \s change \s (\d+) \s /x) { + ($prev,$prevchange) = ($1,$2); + $prevfile = "$depotfile#$prev"; + my $oldd1 = $d1; + $d1 =~ s/-\d+$/#$prev~$prevchange~/; + rename "$tempdir/$oldd1", "$tempdir/$d1"; + } + } else { + die "Unknown action[$action]"; + } + $d2 = "$path$basename"; + warn "==> $d2#$number <==\n" if $OPT{v}; + my $system = qq[p4 @P4opt print -o "$tempdir/$d2" "$file"]; + # warn "system[$system]"; + my $type = `$system`; + if ($?) { + warn "$0: `$system` failed, status[$?]\n"; + next; + } + chmod 0644, "$tempdir/$d2"; + $type =~ m|^//.*\((.+)\)$| or next; + $type = $1; + if ($doadd or File::Compare::compare("$tempdir/$d1", "$tempdir/$d2")) { + print "\n==== $file ($type) ====\n"; + unless ($type =~ /text/) { + next; + } + print "Index: $path$basename\n"; + correctmtime($prevfile,$prev,"$tempdir/$d1") unless $doadd; + correctmtime($file,$number,"$tempdir/$d2"); + chdir $tempdir or warn "Could not chdir '$tempdir': $!"; + $system = qq[$OPT{D} -$OPT{d} "$d1" "$d2"]; + system($system); # no return check because diff doesn't always return 0 + chdir $TOPDIR or warn "Could not chdir '$TOPDIR': $!"; + } + for ("$tempdir/$d1","$tempdir/$d2") { + unlink or warn "Could not unlink $_: $!" if -f; + } +} +print "End of Patch.\n"; + +sub correctmtime ($$$) { + my($depotfile,$nr,$localfile) = @_; + my %fstat = map { /^\.\.\. (\w+) (.*)$/ } `p4 @P4opt fstat -s "$depotfile"`; + return unless exists($fstat{headRev}) and $fstat{headRev} == $nr; + utime $fstat{headTime}, $fstat{headTime}, $localfile; +} + +sub Usage () { + qq{Usage: $0 [OPTIONS] patchnumber + + -p host:port p4 port (e.g. myhost:1666) + -d diffopt option to pass to diff(1) + -D diff diff(1) to use + -b branch(es) which branches to include (regex); everything up + to the last slash of matched portion of path is + stripped on local copy (default: //depot/perl) + -v verbose + -h print this help and exit + -V print version number and exit + +Fetches all required files from the repository, puts them into a +temporary directory with sensible names and sensible modification +times and composes a patch to STDOUT using external diff command. +Requires repository access. + +Examples: + perl $0 12345 | gzip -c > 12345.gz + perl $0 -dc 12345 > change-12345.patch + perl $0 -b //depot/maint-5.6/perl -v 8571 > 8571 +}; +} diff --git a/Porting/repository.pod b/Porting/repository.pod index 5887e21199..d1667b79a0 100644 --- a/Porting/repository.pod +++ b/Porting/repository.pod @@ -328,9 +328,9 @@ back into the mainline, they do: Generating a patch for change#42 is done as follows: - % p4 describe -du 42 | p4desc | p4d2p > change-42.patch + % p4genpatch 42 > change-42.patch -F<p4desc> and F<>p4d2p> are to be found in //depot/perl/Porting/. +F<p4genpatch> is to be found in //depot/perl/Porting/. The usual routine to apply a patch is @@ -356,7 +356,7 @@ Other useful Perforce commands % p4 describe -du 12345 # show change 12345 Note: the output of "p4 describe" is not in proper diff format, use -the F<Porting/p4d2p> to convert. +the F<Porting/p4genpatch> to get a diff-compatible format. % p4 diff -se ./... # have I modified something but forgotten # to "p4 edit", easy faux pas with autogenerated @@ -26,9 +26,10 @@ PerlÀº 5.8.0ÆǺÎÅÍ À¯´ÏÄÚµå/ISO 10646¿¡ ´ëÇÑ ±¤¹üÀ§ÇÑ Áö¿øÀ» ÇÕ´Ï´Ù. Áö¿øÇÕ´Ï´Ù. À¯´ÏÄÚµå´Â Àü ¼¼°è¿¡¼ ¾²ÀÌ´Â ¸ðµç ¾ð¾î¸¦ À§ÇÑ Ç¥±â ü°è - À¯·´ÀÇ ¶óƾ ¾ËÆĺª, Å°¸± ¾ËÆĺª, ±×¸®½º ¾ËÆĺª, Àεµ¿Í µ¿³² ¾Æ½Ã¾ÆÀÇ ºê¶ó¹Ì °è¿ ½ºÅ©¸³Æ®, ¾Æ¶ø ¹®ÀÚ, È÷ºê¸® ¹®ÀÚ, ÇÑÁßÀÏÀÇ ÇÑÀÚ, Çѱ¹¾îÀÇ ÇѱÛ, -ÀϺ»¾îÀÇ °¡³ª, ºÏ¹Ì Àεð¾ÈÀÇ Ç¥±â ü°è µî- ¼ö¿ëÇÏ´Â °ÍÀ» ¸ñÇ¥·Î ÇÏ°í +ÀϺ»¾îÀÇ °¡³ª, ºÏ¹Ì Àεð¾ÈÀÇ Ç¥±â ü°è µî-¸¦ ¼ö¿ëÇÏ´Â °ÍÀ» ¸ñÇ¥·Î ÇÏ°í Àֱ⠶§¹®¿¡ ±âÁ¸¿¡ ¾²ÀÌ´ø °¢ ¾ð¾î ¹× ±¹°¡ ±×¸®°í ¿î¿µ ü°è¿¡ °íÀ¯ÇÑ -¹®ÀÚ ÁýÇÕ°ú ÀÎÄÚµùÀ» ¸ðµÎ Æ÷°ýÇÏ°í ÀÖ½À´Ï´Ù. +¹®ÀÚ ÁýÇÕ°ú ÀÎÄÚµù¿¡ ¾µ ¼ö ÀÖ´Â ¸ðµç ±ÛÀÚ´Â ¹°·ÐÀÌ°í ±âÁ¸ ¹®ÀÚ ÁýÇÕ¿¡¼ +Áö¿øÇÏ°í ÀÖÁö ¾Ê´ø ¾ÆÁÖ ¸¹Àº ±ÛÀÚ¸¦ Æ÷ÇÔÇÏ°í ÀÖ½À´Ï´Ù. PerlÀº ³»ºÎÀûÀ¸·Î À¯´ÏÄڵ带 ¹®ÀÚ Ç¥ÇöÀ» À§ÇØ »ç¿ëÇÕ´Ï´Ù. º¸´Ù ±¸Ã¼ÀûÀ¸·Î @@ -43,28 +44,43 @@ perlunicode ¸Å´º¾óÀ» Âü°íÇϽʽÿÀ.) À¯´ÏÄڵ尡 ³Î¸® º¸±ÞµÇ±â Àü¿¡ 'Encode'´Â ´ÙÀ½°ú °°Àº Çѱ¹¾î ÀÎÄÚµùÀ» Áö¿øÇÕ´Ï´Ù. - euc-kr : US-ASCII¿Í KS X 1001À» °°ÀÌ ¾²´Â ¸ÖƼ¹ÙÀÌÆ® ÀÎÄÚµù - (ÈçÈ÷ ¿Ï¼ºÇüÀ̶ó°í ºÒ¸².) KS X 2901°ú RFC 1557 Âü°í. - cp949 : MS-Windows 9x/ME¿¡¼ ¾²ÀÌ´Â È®Àå ¿Ï¼ºÇü. - euc-kr¿¡ 8,822ÀÚÀÇ ÇÑ±Û À½ÀýÀ» ´õÇÑ °ÍÀÓ. - alias´Â uhc, windows-949, x-windows-949, - ks_c_5601-1987. ¸Ç ¸¶Áö¸· À̸§Àº ÀûÀýÇÏÁö ¾ÊÀº - À̸§ÀÌÁö¸¸, Microsoft Á¦Ç°¿¡¼ CP949ÀÇ Àǹ̷Π- ¾²ÀÌ°í ÀÖÀ½. - johab : KS X 1001:1998 ºÎ·Ï 3¿¡¼ ±ÔÁ¤ÇÑ Á¶ÇÕÇü. - ¹®ÀÚ ·¹ÆÛÅ丮´Â cp949¿Í ¸¶Âù°¡Áö·Î US-ASCII, - KS X 1001¿¡ 8,822ÀÚÀÇ ÇÑ±Û À½ÀýÀ» ´õÇÑ °ÍÀÓ. - - iso-2022-kr : RFC 1557¿¡¼ ±ÔÁ¤ÇÑ Çѱ¹¾î ÀÎÅÍ³Ý ¸ÞÀÏ ±³È¯¿ë ÀÎÄÚµùÀ¸·Î - US-ASCII¿Í KS X 1001À» ·¹ÆÛÅ丮·Î ÇÏ´Â Á¡¿¡¼ - euc-kr°ú °°Áö¸¸ ÀÎÄÚµù ¹æ½ÄÀÌ ´Ù¸§. - 1997-8³â °æ±îÁö ¾²¿´À¸³ª ´õ ÀÌ»ó ¸ÞÀÏ ±³È¯¿¡ ¾²ÀÌÁö - ¾ÊÀ½. - ksc5601-raw : KS X 1001(KS C 5601)À» GL(Áï, MSB¸¦ 0À¸·Î ÇÑ °æ¿ì) - ¿¡ ³õ¾ÒÀ» ¶§ÀÇ ÀÎÄÚµù. US-ASCII¿Í °áÇÕÇÏÁö ¾Ê°í - ´Üµ¶À¸·Î ¾²ÀÌ´Â ÀÏÀº X11 µî¿¡¼ ±Û²Ã ÀÎÄÚµù - (ksc5601.1987-0. '0'Àº GLÀ» ÀǹÌÇÔ.)À¸·Î ¾²ÀÌ´Â °ÍÀ» - Á¦¿ÜÇÏ°í´Â °ÅÀÇ ¾øÀ½. +=over 4 + +=item euc-kr + + US-ASCII¿Í KS X 1001À» °°ÀÌ ¾²´Â ¸ÖƼ¹ÙÀÌÆ® ÀÎÄÚµù (ÈçÈ÷ ¿Ï¼ºÇüÀ̶ó°í + ºÒ¸².) KS X 2901°ú RFC 1557 Âü°í. + +=item cp949 + + MS-Windows 9x/ME¿¡¼ ¾²ÀÌ´Â È®Àå ¿Ï¼ºÇü. euc-kr¿¡ 8,822ÀÚÀÇ + ÇÑ±Û À½ÀýÀ» ´õÇÑ °ÍÀÓ. alias´Â uhc, windows-949, x-windows-949, + ks_c_5601-1987. ¸Ç ¸¶Áö¸· À̸§Àº ÀûÀýÇÏÁö ¾ÊÀº À̸§ÀÌÁö¸¸, Microsoft + Á¦Ç°¿¡¼ CP949ÀÇ Àǹ̷Π¾²ÀÌ°í ÀÖÀ½. + +=item johab + + KS X 1001:1998 ºÎ·Ï 3¿¡¼ ±ÔÁ¤ÇÑ Á¶ÇÕÇü. ¹®ÀÚ ·¹ÆÛÅ丮´Â cp949¿Í + ¸¶Âù°¡Áö·Î US-ASCII¿Í KS X 1001¿¡ 8,822ÀÚÀÇ ÇÑ±Û À½ÀýÀ» ´õÇÑ °ÍÀÓ. + ÀÎÄÚµù ¹æ½ÄÀº ÀüÇô ´Ù¸§. + +=item iso-2022-kr + + RFC 1557¿¡¼ ±ÔÁ¤ÇÑ Çѱ¹¾î ÀÎÅÍ³Ý ¸ÞÀÏ ±³È¯¿ë ÀÎÄÚµùÀ¸·Î US-ASCII¿Í + KS X 1001À» ·¹ÆÛÅ丮·Î ÇÏ´Â Á¡¿¡¼ euc-kr°ú °°Áö¸¸ ÀÎÄÚµù ¹æ½ÄÀÌ ´Ù¸§. + 1997-8³â °æ±îÁö ¾²¿´À¸³ª ´õ ÀÌ»ó ¸ÞÀÏ ±³È¯¿¡ ¾²ÀÌÁö ¾ÊÀ½. + +=item ksc5601-raw + + KS X 1001(KS C 5601)À» GL(Áï, MSB¸¦ 0À¸·Î ÇÑ °æ¿ì) ¿¡ ³õ¾ÒÀ» ¶§ÀÇ + ÀÎÄÚµù. US-ASCII¿Í °áÇÕÇÏÁö ¾Ê°í ´Üµ¶À¸·Î ¾²ÀÌ´Â ÀÏÀº X11 µî¿¡¼ ±Û²Ã + ÀÎÄÚµù (ksc5601.1987-0. '0'Àº GLÀ» ÀǹÌÇÔ.)À¸·Î ¾²ÀÌ´Â °ÍÀ» Á¦¿ÜÇÏ°í´Â + °ÅÀÇ ¾øÀ½. KS C 5601Àº 1997³â KS X 1001·Î À̸§À» ¹Ù²Ù¾úÀ½. 1998³â¿¡´Â µÎ + ±ÛÀÚ (À¯·ÎÈ ºÎÈ£¿Í µî·Ï »óÇ¥ ºÎÈ£)°¡ ´õÇØÁ³À½. + +=back + + ¸î °¡Áö »ç¿ë ¿¹Á¦¸¦ ¾Æ·¡¿¡ º¸ÀÔ´Ï´Ù. ¿¹¸¦ µé¾î, euc-kr ÀÎÄÚµùÀ¸·Î µÈ ÆÄÀÏÀ» UTF-8·Î º¯È¯ÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µË´Ï´Ù. @@ -76,7 +92,7 @@ perlunicode ¸Å´º¾óÀ» Âü°íÇϽʽÿÀ.) À¯´ÏÄڵ尡 ³Î¸® º¸±ÞµÇ±â Àü¿¡ perl -Mencoding=utf8,STDOUT,euc-kr -pe1 < file.utf8 > file.euckr -ÀÌ·± º¯È¯À» Á»´õ Æí¸®ÇÏ°Ô ÇÒ ¼ö ÀÖµµ·Ï Encode ¸ðµâÀ» ½á¼ + ÀÌ·± º¯È¯À» Á»´õ Æí¸®ÇÏ°Ô ÇÒ ¼ö ÀÖµµ·Ï Encode ¸ðµâÀ» ½á¼ ¼ø¼öÇÏ°Ô Perl·Î¸¸ ¾²ÀÎ piconv°¡ Perl¿¡ µé¾î ÀÖ½À´Ï´Ù. ±× À̸§¿¡¼ ¾Ë ¼ö ÀÖµíÀÌ piconv´Â Unix¿¡ ÀÖ´Â iconv¸¦ ¸ðµ¨·Î ÇÑ °ÍÀÔ´Ï´Ù. ±× »ç¿ë¹ýÀº ¾Æ·¡¿Í °°½À´Ï´Ù. @@ -84,10 +100,10 @@ perlunicode ¸Å´º¾óÀ» Âü°íÇϽʽÿÀ.) À¯´ÏÄڵ尡 ³Î¸® º¸±ÞµÇ±â Àü¿¡ piconv -f euc-kr -t utf8 < file.euckr > file.utf8 piconv -f utf8 -t euc-kr < file.utf8 > file.euckr -¶Ç, 'encoding' ¸ðµâÀ» ½á¼ Çѱ¹¾î ÀÎÄÚµùÀ» ¾²¸é¼ ±ÛÀÚ ´ÜÀ§ + ¶Ç, 'PerlIO::encoding' ¸ðµâÀ» ½á¼ Çѱ¹¾î ÀÎÄÚµùÀ» ¾²¸é¼ ±ÛÀÚ ´ÜÀ§ (¹ÙÀÌÆ® ´ÜÀ§°¡ ¾Æ´Ï¶ó) 󸮸¦ ½±°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù. - #!/usr/local/bin/perl + #!/path/to/perl use encoding 'euc-kr', STDIN => 'euc-kr', STDOUT-> 'euc-kr', STDERR=>'euc-kr'; @@ -101,15 +117,16 @@ perlunicode ¸Å´º¾óÀ» Âü°íÇϽʽÿÀ.) À¯´ÏÄڵ尡 ³Î¸® º¸±ÞµÇ±â Àü¿¡ =head2 ´õ ÀÚ¼¼È÷ ¾Ë°í ½ÍÀ¸¸é... -PerlÀ» ¼³Ä¡ÇÏ¸é ´ë´ÜÈ÷ ÀÚ¼¼ÇÑ ¹®¼°¡ °°ÀÌ µû¶ó ¿À¸ç, ÀÌ ¹®¼¸¦ ÅëÇØ + PerlÀ» ¼³Ä¡ÇÏ¸é ´ë´ÜÈ÷ ÀÚ¼¼ÇÑ ¹®¼°¡ °°ÀÌ µû¶ó ¿À¸ç, ÀÌ ¹®¼¸¦ ÅëÇØ Perl Àü¹Ý »Ó ¾Æ´Ï¶ó À¯´ÏÄÚµå Áö¿ø, EncodeÀÇ »ç¿ë¹ý µî¿¡ ¸¹Àº °ÍÀ» -¹è¿ï ¼ö ÀÖ½À´Ï´Ù. ºÒÇàÈ÷µµ ÀÌ ¹®¼´Â ÇöÀç ¸ðµÎ ¿µ¾î·Î ¾²¿© ÀÖ½À´Ï´Ù. -ÀÌ ¹®¼ ¿Ü¿¡µµ ´ÙÀ½°ú °°Àº ÀÚ·á°¡ ÀÖ½À´Ï´Ù. ÀÌ ¸ñ·ÏÀº °áÄÚ -¿ÏÀüÇÑ °ÍÀÌ ¾Æ´Ï°í ÀϺΠ´ëÇ¥ÀûÀÎ °Í¸¸ ¸ðÀº °ÍÀÔ´Ï´Ù. +¹è¿ï ¼ö ÀÖ½À´Ï´Ù. ¾ÆÁ÷ ÀÌ ¹®¼´Â ÇöÀç ¸ðµÎ ¿µ¾î·Î ¾²¿© ÀÖ½À´Ï´Ù. =head2 Perl °ü·Ã ÀÚ·á +À§¿¡¼ ¾ð±ÞÇÑ ¹®¼ ¿Ü¿¡µµ ´ÙÀ½°ú °°Àº ÀÚ·á°¡ ÀÖ½À´Ï´Ù. ÀÌ ¸ñ·ÏÀº °áÄÚ +¿ÏÀüÇÑ °ÍÀÌ ¾Æ´Ï°í ÀϺΠ´ëÇ¥ÀûÀÎ °Í¸¸ ¸ðÀº °ÍÀÔ´Ï´Ù. + =over 4 =item L<http://www.perl.com/> @@ -161,7 +178,7 @@ Perl Àü¹Ý »Ó ¾Æ´Ï¶ó À¯´ÏÄÚµå Áö¿ø, EncodeÀÇ »ç¿ë¹ý µî¿¡ ¸¹Àº °ÍÀ» =back -=head2 À¯´ÏÄÚµå °ü·Ã ÀÚ·á +=head2 À¯´ÏÄÚµå ¹× Çѱ¹¾î ÀÎÄÚµù °ü·Ã ÀÚ·á =over 4 @@ -174,6 +191,10 @@ Perl Àü¹Ý »Ó ¾Æ´Ï¶ó À¯´ÏÄÚµå Áö¿ø, EncodeÀÇ »ç¿ë¹ý µî¿¡ ¸¹Àº °ÍÀ» ±âº»ÀûÀ¸·Î Unicode¿Í °°Àº ISO Ç¥ÁØÀÎ ISO/IEC 10646 UCS(Universal Character Set)À» ¸¸µå´Â ISO/IEC JTC1/SC2/WG2ÀÇ À¥ ÆäÀÌÁö. +=item L<http://jshin.net/faq/qa8.html> + + Çѱ¹¾î ¹®ÀÚ ÁýÇÕ ¹× ÀÎÄÚµù¿¡ ´ëÇÑ ¾È³». + =item L<htp://www.cl.cam.ac.uk/~mgk25/unicode.html> À¯´Ð½º/¸®´ª½º¿¡¼ À¯´ÏÄÚµå¿Í UTF-8 »ç¿ë¿¡ ´ëÇÑ ¹®´äÁý(FAQ) @@ -184,9 +205,14 @@ Character Set)À» ¸¸µå´Â ISO/IEC JTC1/SC2/WG2ÀÇ À¥ ÆäÀÌÁö. =back +=head1 SEE ALSO + +L<Encode>, L<Encode::KR>, L<encoding>, L<perluniintro>, L<perlunicode> + + =head1 AUTHORS Jarkko Hietaniemi E<lt>jhi@iki.fiE<gt> -½ÅÁ¤½Ä E<lt>jshin@mailaps.org<gt> +½ÅÁ¤½Ä E<lt>jshin@mailaps.orgE<gt> =cut diff --git a/README.vos b/README.vos index 880790865c..624e77e2c1 100644 --- a/README.vos +++ b/README.vos @@ -44,7 +44,7 @@ using the VOS Standard C Cross-compiler. You must build perl on VOS Release 14.1.0 (or later) on an XA/R or Continuum platform. This version of perl is properly called "miniperl" because it -does not contain the full perl functionality. +does not contain the complete perl functionality. You must build perl with the compile_perl.cm command macro found in the vos subdirectory. @@ -58,7 +58,7 @@ perl on VOS Release 14.1.0 (or later) on an XA/R or Continuum platform. This version of perl is properly called "miniperl" because it -does not contain the full perl functionality. +does not contain the complete perl functionality. You must build perl with the compile_perl.cm command macro found in the vos subdirectory. @@ -73,7 +73,7 @@ on VOS Release 14.1.0 (or later) on an XA/R or Continuum platform. This version of perl is properly called "miniperl" because it -does not contain the full perl functionality. +does not contain the complete perl functionality. You must build perl with the compile_perl.cm command macro found in the vos subdirectory. @@ -81,14 +81,14 @@ in the vos subdirectory. =item 4 If you have a Stratus Continuum (PARISC-based) platform that is -running VOS Release 14.3.0 through VOS Release 14.4.0, you must +running VOS Release 14.3.0 through VOS Release 14.4.1, you must build perl using the generally-available version of VOS POSIX support, and using either the VOS Standard C compiler or the VOS GNU C compiler. You must build perl on VOS Release 14.3.0 (or later) on a Continuum platform. This version of perl is properly called "miniperl" because it -does not contain the full perl functionality. +does not contain the complete perl functionality. You must build perl with the compile_perl.cm command macro found in the vos subdirectory. @@ -96,17 +96,17 @@ in the vos subdirectory. =item 5 If you have a Stratus Continuum (PA-RISC-based) platform that is -running VOS Release 14.4.1 or later, you must build perl using -the generally-available version of VOS POSIX support. You must -use the VOS GNU C compiler and the VOS GNU Tools product. You -must build perl on VOS Release 14.4.1 (or later) on a Continuum -platform. - -This version of perl is properly called "full perl" because it -contains the full perl functionality. - -You must use the supplied Configure script and makefiles to build -perl. +running VOS Release 14.5.0 or later, you can either use the +previous method to build "miniperl" or you can build "full +perl", which contains the complete functionality of perl. I +strongly recommend that you build full perl. To build full +perl, you must use the generally-available version of VOS POSIX +support. You must use the VOS GNU C compiler and the VOS GNU +C/C++ and GNU Tools Release 2.0.1 product. You must build full +perl on VOS Release 14.5.0 (or later) on a Continuum platform. + +You must build full perl with the compile_full_perl.cm command +macro found in the vos subdirectory. =back @@ -223,20 +223,11 @@ execute on the PA7100, PA8000, PA8500 and PA8600 processors, and that code compiled for the pa8000 processor type can execute on the PA8000, PA8500 and PA8600 processors. -To build perl using the supplied Configure script and makefiles, -execute the following commands. - - !add_library_path command >system>gnu_library>bin -after '(current_dir)' - !bash - gzip -d perl-5.8.0.tar.gz - tar -xvf perl-5.8.0.tar - cd perl-5.8.0 - Configure -d - gmake - -If you wish to run the test cases, type: - - gmake test +To build full perl using the supplied Configure script and +makefiles, change to the "vos" subdirectory and type the command +"compile_full_perl" or "start_process compile_full_perl". This +will configure, build, and test perl. All of the test cases +that are executed should pass. =head2 Installing Perl 5 on VOS @@ -343,6 +334,6 @@ Paul Green (Paul.Green@stratus.com) =head1 LAST UPDATE -February 15, 2001 +May 5, 2002 =cut @@ -1,7 +1,36 @@ #!./miniperl -w -my $config_pm = $ARGV[0] || 'lib/Config.pm'; +# following options are recognized: +# --no-glossary - no glossary file inclusion, for compactness +# --cross=PALTFORM - crosscompiling for PLATFORM +my %opts = ( + # %known_opts enumerates allowed opts as well as specifies default and initial values + my %known_opts = ( + 'cross' => '', + 'glossary' => 1, + ), + # options itself + my %specified_opts = ( + (map {/^--([\-_\w]+)=(.*)$/} @ARGV), # --opt=smth + (map {/^no-?(.*)$/i?($1=>0):($_=>1)} map {/^--([\-_\w]+)$/} @ARGV), # --opt --no-opt --noopt + ), +); +die "option '$_' is not recognized" for grep {!exists $known_opts{$_}} keys %specified_opts; +@ARGV = grep {!/^--/} @ARGV; + +my $config_pm; my $glossary = $ARGV[1] || 'Porting/Glossary'; + +if ($opts{cross}) { + # creating cross-platform config file + mkdir "xlib"; + mkdir "xlib/$opts{cross}"; + $config_pm = $ARGV[0] || "xlib/$opts{cross}/Config.pm"; +} +else { + $config_pm = $ARGV[0] || 'lib/Config.pm'; +} + @ARGV = "./config.sh"; # list names to put first (and hence lookup fastest) @@ -414,7 +443,9 @@ in such cases. ENDOFTAIL -open(GLOS, "<$glossary") or die "Can't open $glossary: $!"; +if ($opts{glossary}) { + open(GLOS, "<$glossary") or die "Can't open $glossary: $!"; +} %seen = (); $text = 0; $/ = ''; @@ -468,10 +499,12 @@ EOF s/n[\0]t/n't/g; # undo can't, won't damage } -<GLOS>; # Skip the preamble -while (<GLOS>) { - process; - print CONFIG; +if ($opts{glossary}) { + <GLOS>; # Skip the preamble + while (<GLOS>) { + process; + print CONFIG; + } } print CONFIG <<'ENDOFTAIL'; @@ -491,6 +524,33 @@ ENDOFTAIL close(CONFIG); close(GLOS); +# Now create Cross.pm if needed +if ($opts{cross}) { + open CROSS, ">lib/Cross.pm" or die "Can not open >lib/Cross.pm: $!"; + my $cross = <<'EOS'; +# typical invocation: +# perl -MCross Makefile.PL +# perl -MCross=wince -V:cc +package Cross; + +sub import { + my ($package,$platform) = @_; + unless (defined $platform) { + # if $platform is not specified, then use last one when + # 'configpm; was invoked with --cross option + $platform = '***replace-marker***'; + } + @INC = map {/\blib\b/?(do{local $_=$_;s/\blib\b/xlib\/$platform/;$_},$_):($_)} @INC; +} + +1; +EOS + $cross =~ s/\*\*\*replace-marker\*\*\*/$opts{cross}/g; + print CROSS $cross; + close CROSS; +} + + # Now do some simple tests on the Config.pm file we have created unshift(@INC,'lib'); require $config_pm; diff --git a/ext/Data/Dumper/Dumper.xs b/ext/Data/Dumper/Dumper.xs index 383707a4e3..11a97d2465 100644 --- a/ext/Data/Dumper/Dumper.xs +++ b/ext/Data/Dumper/Dumper.xs @@ -574,10 +574,12 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, /* foreach (keys %hash) */ for (i = 0; 1; i++) { - char *nkey = NULL; + char *nkey; + char *nkey_buffer = NULL; I32 nticks = 0; SV* keysv; STRLEN keylen; + I32 nlen; bool do_utf8 = FALSE; if ((sortkeys && !(keys && (I32)i <= av_len(keys))) || @@ -592,7 +594,8 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, svp = av_fetch(keys, i, FALSE); keysv = svp ? *svp : sv_mortalcopy(&PL_sv_undef); key = SvPV(keysv, keylen); - svp = hv_fetch((HV*)ival, key, keylen, 0); + svp = hv_fetch((HV*)ival, key, + SvUTF8(keysv) ? -keylen : keylen, 0); hval = svp ? *svp : sv_mortalcopy(&PL_sv_undef); } else { @@ -604,22 +607,39 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, key = SvPV(keysv, keylen); klen = keylen; - if (do_utf8) { - char *okey = SvPVX(retval) + SvCUR(retval); - I32 nlen; + sv_catsv(retval, totpad); + sv_catsv(retval, ipad); + /* old logic was first to check utf8 flag, and if utf8 always + call esc_q_utf8. This caused test to break under -Mutf8, + because there even strings like 'c' have utf8 flag on. + Hence with quotekeys == 0 the XS code would still '' quote + them based on flags, whereas the perl code would not, + based on regexps. + The perl code is correct. + needs_quote() decides that anything that isn't a valid + perl identifier needs to be quoted, hence only correctly + formed strings with no characters outside [A-Za-z0-9_:] + won't need quoting. None of those characters are used in + the byte encoding of utf8, so anything with utf8 + encoded characters in will need quoting. Hence strings + with utf8 encoded characters in will end up inside do_utf8 + just like before, but now strings with utf8 flag set but + only ascii characters will end up in the unquoted section. - sv_catsv(retval, totpad); - sv_catsv(retval, ipad); - nlen = esc_q_utf8(aTHX_ retval, key, klen); - - sname = newSVsv(iname); - sv_catpvn(sname, okey, nlen); - sv_catpvn(sname, "}", 1); - } - else { - if (quotekeys || needs_quote(key)) { + There should also be less tests for the (probably currently) + more common doesn't need quoting case. + The code is also smaller (22044 vs 22260) because I've been + able to pull the comon logic out to both sides. */ + if (quotekeys || needs_quote(key)) { + if (do_utf8) { + STRLEN ocur = SvCUR(retval); + nlen = esc_q_utf8(aTHX_ retval, key, klen); + nkey = SvPVX(retval) + ocur; + } + else { nticks = num_q(key, klen); - New(0, nkey, klen+nticks+3, char); + New(0, nkey_buffer, klen+nticks+3, char); + nkey = nkey_buffer; nkey[0] = '\''; if (nticks) klen += esc_q(nkey+1, key, klen); @@ -627,20 +647,19 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, (void)Copy(key, nkey+1, klen, char); nkey[++klen] = '\''; nkey[++klen] = '\0'; + nlen = klen; + sv_catpvn(retval, nkey, klen); } - else { - New(0, nkey, klen, char); - (void)Copy(key, nkey, klen, char); - } - - sname = newSVsv(iname); - sv_catpvn(sname, nkey, klen); - sv_catpvn(sname, "}", 1); - - sv_catsv(retval, totpad); - sv_catsv(retval, ipad); - sv_catpvn(retval, nkey, klen); + } + else { + nkey = key; + nlen = klen; + sv_catpvn(retval, nkey, klen); } + sname = newSVsv(iname); + sv_catpvn(sname, nkey, nlen); + sv_catpvn(sname, "}", 1); + sv_catpvn(retval, " => ", 4); if (indent >= 2) { char *extra; @@ -661,7 +680,7 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, freezer, toaster, purity, deepcopy, quotekeys, bless, maxdepth, sortkeys); SvREFCNT_dec(sname); - Safefree(nkey); + Safefree(nkey_buffer); if (indent >= 2) SvREFCNT_dec(newapad); } diff --git a/ext/Data/Dumper/t/dumper.t b/ext/Data/Dumper/t/dumper.t index d33af74c76..9c7f0a6870 100755 --- a/ext/Data/Dumper/t/dumper.t +++ b/ext/Data/Dumper/t/dumper.t @@ -67,11 +67,11 @@ sub TEST { $Data::Dumper::Useperl = 1; if (defined &Data::Dumper::Dumpxs) { print "### XS extension loaded, will run XS tests\n"; - $TMAX = 339; $XS = 1; + $TMAX = 357; $XS = 1; } else { print "### XS extensions not loaded, will NOT run XS tests\n"; - $TMAX = 171; $XS = 0; + $TMAX = 180; $XS = 0; } print "1..$TMAX\n"; @@ -1310,3 +1310,46 @@ EOT TEST q(Data::Dumper->Dumpxs([$a])), "XS utf8 flag with '"; } } + +# Jarkko found that -Mutf8 caused some tests to fail. Turns out that there +# was an otherwise untested code path in the XS for utf8 hash keys with purity +# 1 + +{ + $WANT = <<'EOT'; +#$ping = \*::ping; +#*::ping = \5; +#*::ping = { +# "\x{decaf}\x{decaf}\x{decaf}\x{decaf}" => do{my $o} +#}; +#*::ping{HASH}->{"\x{decaf}\x{decaf}\x{decaf}\x{decaf}"} = *::ping{SCALAR}; +#%pong = %{*::ping{HASH}}; +EOT + local $Data::Dumper::Purity = 1; + local $Data::Dumper::Sortkeys; + $ping = 5; + %ping = (chr (0xDECAF) x 4 =>\$ping); + for $Data::Dumper::Sortkeys (0, 1) { + TEST q(Data::Dumper->Dump([\\*ping, \\%ping], ['*ping', '*pong'])); + TEST q(Data::Dumper->Dumpxs([\\*ping, \\%ping], ['*ping', '*pong'])) if $XS; + } +} + +# XS for quotekeys==0 was not being defensive enough against utf8 flagged +# scalars + +{ + $WANT = <<'EOT'; +#$VAR1 = { +# perl => 'rocks' +#}; +EOT + local $Data::Dumper::Quotekeys = 0; + my $k = 'perl' . chr 256; + chop $k; + %foo = ($k => 'rocks'); + + TEST q(Data::Dumper->Dump([\\%foo])), "quotekeys == 0 for utf8 flagged ASCII"; + TEST q(Data::Dumper->Dumpxs([\\%foo])), + "XS quotekeys == 0 for utf8 flagged ASCII" if $XS; +} diff --git a/ext/Digest/MD5/Changes b/ext/Digest/MD5/Changes index 896ff5ec2c..a100886e79 100644 --- a/ext/Digest/MD5/Changes +++ b/ext/Digest/MD5/Changes @@ -1,3 +1,16 @@ +2002-05-05 Gisle Aas <gisle@ActiveState.com> + + Release 2.20 + + More synchronization with tweaks Jarkko have done to the + bleadperl test suite. This time various EBCDIC hacks. + + Outside PERL_CORE the md5-aaa.t test loaded the wrong version of + the module (and would fail if no previous Digest::MD5 was installed). + Patch by Mike Stok <mike@stok.co.uk> + + + 2002-05-01 Gisle Aas <gisle@ActiveState.com> Release 2.19 diff --git a/ext/Digest/MD5/MD5.pm b/ext/Digest/MD5/MD5.pm index 18dc1f6598..372e007cb7 100644 --- a/ext/Digest/MD5/MD5.pm +++ b/ext/Digest/MD5/MD5.pm @@ -3,7 +3,7 @@ package Digest::MD5; use strict; use vars qw($VERSION @ISA @EXPORT_OK); -$VERSION = '2.19'; # $Date: 2002/05/02 02:40:12 $ +$VERSION = '2.20'; # $Date: 2002/05/06 05:15:09 $ require Exporter; *import = \&Exporter::import; diff --git a/ext/Digest/MD5/t/files.t b/ext/Digest/MD5/t/files.t index 5d25322f35..c020559eba 100644 --- a/ext/Digest/MD5/t/files.t +++ b/ext/Digest/MD5/t/files.t @@ -23,17 +23,17 @@ my $EXPECT; if (ord "A" == 193) { # EBCDIC $EXPECT = <<EOT; -a1ee2b18d1e05bdde3a93009e7f9dfda Changes -5a591a47e8c40fe4b78c744111511c45 README -c9c83e6dbad5f41722338e67d4428077 MD5.pm -4850753428db9422e8e5f97b401d5a13 MD5.xs -276da0aa4e9a08b7fe09430c9c5690aa rfc1321.txt +b362148b17a451f0d81e0ebb2487756e Changes +5a591a47e8c40fe4b78c744111511c45 README +3157e2d2e27dacddea7c54efddc32520 MD5.pm +4850753428db9422e8e5f97b401d5a13 MD5.xs +276da0aa4e9a08b7fe09430c9c5690aa rfc1321.txt EOT } else { $EXPECT = <<EOT; -3866f3543ef41421c6aed3f198e2e9f5 Changes +0106b67df0dbf9f4d65e9fc04907745b Changes 3519f3d02c7c91158f732f0f00064657 README -01cd8fd24bd46ce1db53074d2af6001a MD5.pm +88c35ca46c7e8069fb5ae00c091c98d6 MD5.pm 1be293491bba726810f8e87671ee0328 MD5.xs 754b9db19f79dbc4992f7166eb0f37ce rfc1321.txt EOT @@ -74,9 +74,9 @@ for (split /^/, $EXPECT) { next; } if ($ENV{EBCDIC_MD5SUM}) { - use Encode 'from_to'; + require Encode; my $data = cat_file($file); - from_to($data, 'latin1', 'cp1047'); + Encode::from_to($data, 'latin1', 'cp1047'); print md5_hex($data), " $base\n"; next; } diff --git a/ext/Digest/MD5/t/md5-aaa.t b/ext/Digest/MD5/t/md5-aaa.t index 3069a06089..1ccd59b749 100644 --- a/ext/Digest/MD5/t/md5-aaa.t +++ b/ext/Digest/MD5/t/md5-aaa.t @@ -1,6 +1,6 @@ BEGIN { - chdir 't' if -d 't'; if ($ENV{PERL_CORE}) { + chdir 't' if -d 't'; @INC = '../lib'; } } diff --git a/ext/Encode/AUTHORS b/ext/Encode/AUTHORS index a61622c341..0c7dda8e48 100644 --- a/ext/Encode/AUTHORS +++ b/ext/Encode/AUTHORS @@ -17,6 +17,7 @@ Craig A. Berry <craigberry@mac.com> Dan Kogai <dankogai@dan.co.jp> Elizabeth Mattijsen <liz@dijkmat.nl> Gerrit P. Haase <gp@familiehaase.de> +Graham Barr <gbarr@pobox.com> Gurusamy Sarathy <gsar@activestate.com> H.Merijn Brand <h.m.brand@hccnet.nl> Jarkko Hietaniemi <jhi@iki.fi> diff --git a/ext/Encode/Changes b/ext/Encode/Changes index 966a53efda..5cd481047e 100644 --- a/ext/Encode/Changes +++ b/ext/Encode/Changes @@ -1,9 +1,44 @@ # Revision history for Perl extension Encode. # -# $Id: Changes,v 1.68 2002/05/03 12:20:13 dankogai Exp $ +# $Id: Changes,v 1.70 2002/05/06 10:26:48 dankogai Exp dankogai $ # -$Revision: 1.68 $ $Date: 2002/05/03 12:20:13 $ +$Revision: 1.70 $ $Date: 2002/05/06 10:26:48 $ +! encoding.pm + Made more 'module-safe' with conjunction w/ 'no encoding'. + Message-Id: <EAB48C16-60DA-11D6-9982-00039301D480@dan.co.jp> +! lib/Encode/Encoding.pm + 'require Encode' because ->Define uses Encode::define_encoding(); + problem and solution addressed by Miyagawa-kun + Message-Id: <86znzdfvuh.wl@mail.edge.co.jp> +! t/Unicode.t + Cuts the frill to make djgpp happier, as suggested by Laszlo + Message-Id: <20020506105819.H17012@libra.eth.ericsson.se> +! bin/enc2xs + enc2xs no longer overwrites files w/ -M option, as suggested by Andreas + Message-Id: <m3bsbug48n.fsf@anima.de> + +1.69 2002/05/04 16:41:18 +! lib/Encode/MIME/Header + Floating-point coerced for UNICOS (in integer arithmetics it folds + line one character too early). Verification by Mark is pending. + Message-Id: <C670F60D-5F4F-11D6-A5CA-00039301D480@dan.co.jp> +! Unicode/Unicode.pm + more doc patch from Elizabeth + Message-Id: <4.2.0.58.20020503210946.02f4ed30@mickey.dijkmat.nl> +! Encode/Makefile_PL.e2x + More platform-independent patch from Benjamin + Message-Id: <3CD31BE0.69F79B06@earthlink.net> +! lib/Encode/Guess AUTHORS + split regex fix by Graham Barr. Adds him to AUTHORS. + Message-Id: <20020504085419.E95940@valueclick.com> +! Encode/Makefile_PL.e2x + enc2xs script discovery made smarter and more sensible, first cited + by Miyagawa-kun and further suggestions by Rafael and Andreas +! Encode.pm lib/Encode/Guess.pm t/fallback.t t/guess.t t/mime-header.t + "The EBCDIC remapping of the low 256 bites again" #16372 by jhi + +1.68 2002/05/03 12:20:13 ! lib/Encode/Alias.pm lib/Encode/Supported.pod t/Alias.t AUTHORS UCS-4 added to aliases of UTF-32 by Elizabeth Mattijsen. Alias.t and Supported.pod modified to reflect the change. Elizabeth added @@ -583,7 +618,7 @@ $Revision: 1.68 $ $Date: 2002/05/03 12:20:13 $ Typo fixes and improvements by jhi Message-Id: <200204010201.FAA03564@alpha.hut.fi>, et al. -1.11 $Date: 2002/05/03 12:20:13 $ +1.11 $Date: 2002/05/06 10:26:48 $ + t/encoding.t + t/jperl.t ! MANIFEST diff --git a/ext/Encode/Encode.pm b/ext/Encode/Encode.pm index b9febc9961..20bee0c04c 100644 --- a/ext/Encode/Encode.pm +++ b/ext/Encode/Encode.pm @@ -1,9 +1,9 @@ # -# $Id: Encode.pm,v 1.68 2002/05/03 12:20:31 dankogai Exp $ +# $Id: Encode.pm,v 1.70 2002/05/06 10:27:11 dankogai Exp dankogai $ # package Encode; use strict; -our $VERSION = do { my @r = (q$Revision: 1.68 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; +our $VERSION = do { my @r = (q$Revision: 1.70 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; our $DEBUG = 0; use XSLoader (); XSLoader::load(__PACKAGE__, $VERSION); diff --git a/ext/Encode/Encode/Makefile_PL.e2x b/ext/Encode/Encode/Makefile_PL.e2x index 78cf91b1e1..0e73823b42 100644 --- a/ext/Encode/Encode/Makefile_PL.e2x +++ b/ext/Encode/Encode/Makefile_PL.e2x @@ -18,8 +18,8 @@ my %tables = ( require File::Spec; my ($enc2xs, $encode_h) = (); PATHLOOP: -for my $d (@Config{qw/bin sitebin vendorbin/}, - (split /:/, $ENV{PATH})){ +for my $d (@Config{qw/bin sitebin vendorbin/}, + (split /$Config{path_sep}/o, $ENV{PATH})){ for my $f (qw/enc2xs enc2xs5.7.3/){ my $path = File::Spec->catfile($d, $f); -x $path and $enc2xs = $path and last PATHLOOP; diff --git a/ext/Encode/Unicode/Unicode.pm b/ext/Encode/Unicode/Unicode.pm index 67241af399..fa508ebb7b 100644 --- a/ext/Encode/Unicode/Unicode.pm +++ b/ext/Encode/Unicode/Unicode.pm @@ -3,7 +3,7 @@ package Encode::Unicode; use strict; use warnings; -our $VERSION = do { my @r = (q$Revision: 1.36 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; +our $VERSION = do { my @r = (q$Revision: 1.37 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; use XSLoader; XSLoader::load(__PACKAGE__,$VERSION); @@ -288,7 +288,8 @@ for UTF-8, which is a native format in perl). I<Character Encoding Scheme> A character encoding form plus byte serialization. There are seven character encoding schemes in Unicode: -UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE and UTF-32LE. +UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32 (UCS-4), UTF-32BE (UCS-4BE) and +UTF-32LE (UCS-4LE). =item Quick Reference @@ -330,7 +331,7 @@ form a character. Bogus surrogates result in death. When \x{10000} or above is encountered during encode(), it C<ensurrogate>s them and pushes the surrogate pair to the output stream. -UTF-32 is a fixed-length encoding with each character taking 32 bits. +UTF-32 (UCS-4) is a fixed-length encoding with each character taking 32 bits. Since it is 32-bit, there is no need for I<surrogate pairs>. =head2 by endianness @@ -434,10 +435,11 @@ every one of \x{0000_0000} up to \x{ffff_ffff} (*) is I<a character>. =head1 SEE ALSO L<Encode>, L<http://www.unicode.org/glossary/>, +L<http://www.unicode.org/unicode/faq/utf_bom.html>, RFC 2781 L<http://rfc.net/rfc2781.html>, -L<http://www.unicode.org/unicode/faq/utf_bom.html> +The whole Unicode standard L<http://www.unicode.org/unicode/uni2book/u2.html> Ch. 15, pp. 403 of C<Programming Perl (3rd Edition)> by Larry Wall, Tom Christiansen, Jon Orwant; diff --git a/ext/Encode/bin/enc2xs b/ext/Encode/bin/enc2xs index 554167ab42..f2287d4675 100644 --- a/ext/Encode/bin/enc2xs +++ b/ext/Encode/bin/enc2xs @@ -8,7 +8,7 @@ BEGIN { use strict; use Getopt::Std; my @orig_ARGV = @ARGV; -our $VERSION = do { my @r = (q$Revision: 1.25 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; +our $VERSION = do { my @r = (q$Revision: 1.26 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # These may get re-ordered. # RAW is a do_now as inserted by &enter @@ -888,15 +888,10 @@ sub make_makefile_pl $_Now = scalar localtime(); eval { require File::Spec; }; - warn "Generating Makefile.PL\n"; _print_expand(File::Spec->catfile($_E2X,"Makefile_PL.e2x"),"Makefile.PL"); - warn "Generating $_Name.pm\n"; _print_expand(File::Spec->catfile($_E2X,"_PM.e2x"), "$_Name.pm"); - warn "Generating t/$_Name.t\n"; _print_expand(File::Spec->catfile($_E2X,"_T.e2x"), "t/$_Name.t"); - warn "Generating README\n"; _print_expand(File::Spec->catfile($_E2X,"README.e2x"), "README"); - warn "Generating t/$_Name.t\n"; _print_expand(File::Spec->catfile($_E2X,"Changes.e2x"), "Changes"); exit; } @@ -943,9 +938,9 @@ sub make_configlocal_pm $_LocalVer = _mkversion(); $_E2X = find_e2x(); $_Inc = $INC{"Encode.pm"}; $_Inc =~ s/\.pm$//o; - warn "Writing ", File::Spec->catfile($_Inc,"ConfigLocal.pm"), "\n"; _print_expand(File::Spec->catfile($_E2X,"ConfigLocal_PM.e2x"), - File::Spec->catfile($_Inc,"ConfigLocal.pm")); + File::Spec->catfile($_Inc,"ConfigLocal.pm"), + 1); exit; } @@ -959,7 +954,12 @@ sub _print_expand{ eval { require File::Basename; }; $@ and die "File::Basename needed. Are you on miniperl?;\nerror: $@\n"; File::Basename->import(); - my ($src, $dst) = @_; + my ($src, $dst, $clobber) = @_; + if (!$clobber and -e $dst){ + warn "$dst exists. skipping\n"; + return; + } + warn "Generating $dst...\n"; open my $in, $src or die "$src : $!"; if ((my $d = dirname($dst)) ne '.'){ -d $d or mkdir $d, 0755 or die "mkdir $d : $!"; diff --git a/ext/Encode/encoding.pm b/ext/Encode/encoding.pm index efa5f3113b..0aa5f0f635 100644 --- a/ext/Encode/encoding.pm +++ b/ext/Encode/encoding.pm @@ -1,5 +1,5 @@ package encoding; -our $VERSION = do { my @r = (q$Revision: 1.34 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; +our $VERSION = do { my @r = (q$Revision: 1.35 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; use Encode; use strict; @@ -75,8 +75,13 @@ sub import { sub unimport{ no warnings; undef ${^ENCODING}; + if ($HAS_PERLIO){ + binmode(STDIN, ":raw"); + binmode(STDOUT, ":raw"); + }else{ binmode(STDIN); binmode(STDOUT); + } if ($INC{"Filter/Util/Call.pm"}){ eval { filter_del() }; } @@ -193,10 +198,16 @@ reset to ":raw" (the default unprocessed raw stream of bytes). =head2 NOT SCOPED The pragma is a per script, not a per block lexical. Only the last -C<use encoding> or C<no encoding> matters, and it affects B<the whole script>. -However, the <no encoding> pragma is supported and C<use encoding> can -appear as many times as you want in a given script. The multiple use -of this pragma is discouraged. +C<use encoding> or C<no encoding> matters, and it affects +B<the whole script>. However, the <no encoding> pragma is supported and +B<use encoding> can appear as many times as you want in a given script. +The multiple use of this pragma is discouraged. + +Because of this nature, the use of this pragma inside the module is +strongly discouraged (because the influence of this pragma lasts not +only for the module but the script that uses). But if you have to, +make sure you say C<no encoding> at the end of the module so you +contain the influence of the pragma within the module. =head2 DO NOT MIX MULTIPLE ENCODINGS diff --git a/ext/Encode/lib/Encode/Alias.pm b/ext/Encode/lib/Encode/Alias.pm index a6172ed3a9..1cc54bf7fa 100644 --- a/ext/Encode/lib/Encode/Alias.pm +++ b/ext/Encode/lib/Encode/Alias.pm @@ -128,13 +128,13 @@ sub init_aliases define_alias( qr/^(.*)$/ => '"\L$1"' ); # UTF/UCS stuff - define_alias( qr/^UCS-?2-?LE$/i => '"UCS-2LE"' ); - define_alias( qr/^UCS-?2-?(BE)?$/i => '"UCS-2BE"', + define_alias( qr/^UCS-?2-?LE$/i => '"UCS-2LE"' ); + define_alias( qr/^UCS-?2-?(BE)?$/i => '"UCS-2BE"', qr/^UCS-?4-?(BE|LE)?$/i => 'uc("UTF-32$1")', - qr/^iso-10646-1$/i => '"UCS-2BE"' ); - define_alias( qr/^UTF(16|32)-?BE$/i => '"UTF-$1BE"', - qr/^UTF(16|32)-?LE$/i => '"UTF-$1LE"', - qr/^UTF(16|32)$/i => '"UTF-$1"', + qr/^iso-10646-1$/i => '"UCS-2BE"' ); + define_alias( qr/^UTF(16|32)-?BE$/i => '"UTF-$1BE"', + qr/^UTF(16|32)-?LE$/i => '"UTF-$1LE"', + qr/^UTF(16|32)$/i => '"UTF-$1"', ); # ASCII define_alias(qr/^(?:US-?)ascii$/i => '"ascii"'); diff --git a/ext/Encode/lib/Encode/Encoding.pm b/ext/Encode/lib/Encode/Encoding.pm index 383e0f051c..1876cb73ad 100644 --- a/ext/Encode/lib/Encode/Encoding.pm +++ b/ext/Encode/lib/Encode/Encoding.pm @@ -1,7 +1,9 @@ package Encode::Encoding; # Base class for classes which implement encodings use strict; -our $VERSION = do { my @r = (q$Revision: 1.29 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; +our $VERSION = do { my @r = (q$Revision: 1.30 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; + +require Encode; sub Define { diff --git a/ext/Encode/lib/Encode/Guess.pm b/ext/Encode/lib/Encode/Guess.pm index b106a0457c..f4bfbfa664 100644 --- a/ext/Encode/lib/Encode/Guess.pm +++ b/ext/Encode/lib/Encode/Guess.pm @@ -2,7 +2,7 @@ package Encode::Guess; use strict; use Encode qw(:fallbacks find_encoding); -our $VERSION = do { my @r = (q$Revision: 1.5 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; +our $VERSION = do { my @r = (q$Revision: 1.6 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; my $Canon = 'Guess'; our $DEBUG = 0; @@ -87,7 +87,7 @@ sub guess { $DEBUG and warn "Added: ", $e->name; } my $nline = 1; - for my $line (split /\r|\n|\r\n/, $octet){ + for my $line (split /\r\n?|\n/, $octet){ # cheat 2 -- \e in the string if ($line =~ /\e/o){ my @keys = keys %try; diff --git a/ext/Encode/lib/Encode/MIME/Header.pm b/ext/Encode/lib/Encode/MIME/Header.pm index 683348a985..09dd55e0db 100644 --- a/ext/Encode/lib/Encode/MIME/Header.pm +++ b/ext/Encode/lib/Encode/MIME/Header.pm @@ -1,7 +1,7 @@ package Encode::MIME::Header; use strict; # use warnings; -our $VERSION = do { my @r = (q$Revision: 1.3 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; +our $VERSION = do { my @r = (q$Revision: 1.4 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; use Encode qw(find_encoding encode_utf8); use MIME::Base64; @@ -128,7 +128,9 @@ sub _encode{ my ($o, $str) = @_; my $enc = $o->{encode}; my $llen = ($o->{bpl} - length(HEAD) - 2 - length(TAIL)); - $llen *= $enc eq 'B' ? 3/4 : 1/3; + # to coerce a floating-point arithmetics, the following contains + # .0 in numbers -- dankogai + $llen *= $enc eq 'B' ? 3.0/4.0 : 1.0/3.0; my @result = (); my $chunk = ''; while(my $chr = substr($str, 0, 1, '')){ diff --git a/ext/Encode/t/Unicode.t b/ext/Encode/t/Unicode.t index bc15aaf216..798419791a 100644 --- a/ext/Encode/t/Unicode.t +++ b/ext/Encode/t/Unicode.t @@ -1,5 +1,5 @@ # -# $Id: Unicode.t,v 1.8 2002/04/16 23:35:00 dankogai Exp $ +# $Id: Unicode.t,v 1.9 2002/05/06 10:26:48 dankogai Exp dankogai $ # # This script is written entirely in ASCII, even though quoted literals # do include non-BMP unicode characters -- Are you happy, jhi? @@ -94,11 +94,10 @@ SKIP: { $j == 0 and (0xD800 <= $i && $i <= 0xDFFF) and next; $utf8 .= ord($j+$i); } - my $len = length($utf8); for my $major ('UTF-16', 'UTF-32'){ for my $minor ('BE', 'LE'){ my $enc = $major.$minor; - is(decode($enc, encode($enc, $utf8)), $utf8, "$enc RT ($len)"); + is(decode($enc, encode($enc, $utf8)), $utf8, "$enc RT"); } } } diff --git a/ext/Encode/t/mime-header.t b/ext/Encode/t/mime-header.t index 238be30a60..098b639df4 100644 --- a/ext/Encode/t/mime-header.t +++ b/ext/Encode/t/mime-header.t @@ -1,5 +1,5 @@ # -# $Id: mime-header.t,v 1.3 2002/04/26 03:07:59 dankogai Exp $ +# $Id: mime-header.t,v 1.4 2002/05/04 16:41:18 dankogai Exp $ # This script is written in utf8 # BEGIN { diff --git a/ext/Storable/Storable.pm b/ext/Storable/Storable.pm index ea6080b702..e6d526929b 100644 --- a/ext/Storable/Storable.pm +++ b/ext/Storable/Storable.pm @@ -102,6 +102,7 @@ sub retrieve_fd { &fd_retrieve } # Backward compatibility # By default restricted hashes are downgraded on earlier perls. $Storable::downgrade_restricted = 1; +$Storable::accept_future_minor = 1; bootstrap Storable; 1; __END__ @@ -590,6 +591,25 @@ placeholder keys and leaving the keys and all values unlocked. To make Storable C<croak()> instead, set C<$Storable::downgrade_restricted> to a false value. To restore the default set it back to some C<TRUE> value. +=item files from future versions of Storable + +Earlier versions of Storable would immediately croak if they encountered +a file with a higher internal version number than the reading Storable +knew about. Internal version numbers are increased each time new data +types (such as restricted hashes) are added to the vocabulary of the file +format. This meant that a newer Storable module had no way of writing a +file readable by an older Storable, even if writer didn't store newer +data types. + +This version of Storable will defer croaking until it encounters a data +type in the file that it does not recognize. This means that it will +continue to read files generated by newer Storable modules which are careful +in what they write out, making it easier to upgrade Storable modules in a +mixed environment. + +The old behaviour of immediate croaking can be re-instated by setting +C<$Storable::accept_future_minor> to false. + =back Both these variables have no effect on a newer Perl which supports the diff --git a/ext/Storable/Storable.xs b/ext/Storable/Storable.xs index 05705c0877..332ed700cd 100644 --- a/ext/Storable/Storable.xs +++ b/ext/Storable/Storable.xs @@ -59,7 +59,7 @@ #include <XSUB.h> #ifndef NETWARE -#if 1 +#if 0 #define DEBUGME /* Debug mode, turns assertions on as well */ #define DASSERT /* Assertion mode */ #endif @@ -339,6 +339,7 @@ typedef struct stcxt { #ifndef HAS_UTF8_ALL int use_bytes; /* whether to bytes-ify utf8 */ #endif + int accept_future_minor; /* croak immediately on future minor versions? */ int s_dirty; /* context is dirty due to CROAK() -- can be cleaned */ int membuf_ro; /* true means membuf is read-only and msaved is rw */ struct extendable keybuf; /* for hash key retrieval */ @@ -1204,6 +1205,9 @@ static void clean_store_context(stcxt_t *cxt) sv_free((SV *) hook_seen); } + cxt->forgive_me = -1; /* Fetched from perl if needed */ + cxt->canonical = -1; /* Idem */ + reset_context(cxt); } @@ -1249,6 +1253,7 @@ static void init_retrieve_context(stcxt_t *cxt, int optype, int is_tainted) #ifndef HAS_UTF8_ALL cxt->use_bytes = -1; /* Fetched from perl if needed */ #endif + cxt->accept_future_minor = -1; /* Fetched from perl if needed */ } /* @@ -1290,6 +1295,14 @@ static void clean_retrieve_context(stcxt_t *cxt) sv_free((SV *) hseen); /* optional HV, for backward compat. */ } +#ifndef HAS_RESTRICTED_HASHES + cxt->derestrict = -1; /* Fetched from perl if needed */ +#endif +#ifndef HAS_UTF8_ALL + cxt->use_bytes = -1; /* Fetched from perl if needed */ +#endif + cxt->accept_future_minor = -1; /* Fetched from perl if needed */ + reset_context(cxt); } @@ -4891,12 +4904,26 @@ magic_ok: (version_major == STORABLE_BIN_MAJOR && version_minor > STORABLE_BIN_MINOR) ) { - TRACEME(("but I am version is %d.%d", STORABLE_BIN_MAJOR, - STORABLE_BIN_MINOR)); - + int croak_now = 1; + TRACEME(("but I am version is %d.%d", STORABLE_BIN_MAJOR, + STORABLE_BIN_MINOR)); + + if (version_major == STORABLE_BIN_MAJOR) { + TRACEME(("cxt->accept_future_minor is %d", + cxt->accept_future_minor)); + if (cxt->accept_future_minor < 0) + cxt->accept_future_minor + = (SvTRUE(perl_get_sv("Storable::accept_future_minor", + TRUE)) + ? 1 : 0); + if (cxt->accept_future_minor == 1) + croak_now = 0; /* Don't croak yet. */ + } + if (croak_now) { CROAK(("Storable binary image v%d.%d more recent than I am (v%d.%d)", - version_major, version_minor, - STORABLE_BIN_MAJOR, STORABLE_BIN_MINOR)); + version_major, version_minor, + STORABLE_BIN_MAJOR, STORABLE_BIN_MINOR)); + } } /* @@ -5034,7 +5061,19 @@ static SV *retrieve(stcxt_t *cxt, char *cname) TRACEME(("had retrieved #%d at 0x%"UVxf, tag, PTR2UV(sv))); SvREFCNT_inc(sv); /* One more reference to this same sv */ return sv; /* The SV pointer where object was retrieved */ - } + } else if (type >= SX_ERROR && cxt->ver_minor > STORABLE_BIN_MINOR) { + if (cxt->accept_future_minor < 0) + cxt->accept_future_minor + = (SvTRUE(perl_get_sv("Storable::accept_future_minor", + TRUE)) + ? 1 : 0); + if (cxt->accept_future_minor == 1) { + CROAK(("Storable binary image v%d.%d contains data of type %d. " + "This Storable is v%d.%d and can only handle data types up to %d", + cxt->ver_major, cxt->ver_minor, type, + STORABLE_BIN_MAJOR, STORABLE_BIN_MINOR, SX_ERROR - 1)); + } + } first_time: /* Will disappear when support for old format is dropped */ diff --git a/ext/Storable/t/downgrade.t b/ext/Storable/t/downgrade.t index af5de4a62c..bbdf4dc74e 100644 --- a/ext/Storable/t/downgrade.t +++ b/ext/Storable/t/downgrade.t @@ -27,16 +27,6 @@ sub BEGIN { # require 'lib/st-dump.pl'; } -BEGIN { - if (ord 'A' != 65) { - die <<'EBCDIC'; -This test doesn't have EBCDIC data yet. Please run t/make_downgrade.pl using -perl 5.8 (or later) and append its output to the end of the test. -Please also mail the output to perlbug@perl.org so that the CPAN copy of -Storable can be updated. -EBCDIC - } -} use Test::More; use Storable 'thaw'; @@ -376,3 +366,127 @@ D96%U%P/EGXX``````^6?CA<'4V-H;&_#GP(````&4V-H;&_? end +begin 301 Locked hash +8!049`0````$*!9FDDX6B!`````27A9F3 + +end + +begin 301 Locked hash placeholder +C!049`0````(.%`````69I).%H@H%F:23A:(`````!)>%F9,` + +end + +begin 301 Locked keys +8!049`0````$*!9FDDX6B``````27A9F3 + +end + +begin 301 Locked keys placeholder +C!049`0````(.%`````69I).%H@H%F:23A:(`````!)>%F9,` + +end + +begin 301 Short 8 bit utf8 data +&!047`HMS + +end + +begin 301 Short 8 bit utf8 data as bytes +&!04*`HMS + +end + +begin 301 Long 8 bit utf8 data +M!04!```"`(MSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMS +MBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+ +M<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMS +MBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+ +M<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMS +MBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+ +M<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMS +MBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+ +M<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMS +MBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+ +M<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMS +8BW.+<XMSBW.+<XMSBW.+<XMSBW.+<XMS + +end + +begin 301 Short 24 bit utf8 data +*!047!OM30G-S50`` + +end + +begin 301 Short 24 bit utf8 data as bytes +*!04*!OM30G-S50`` + +end + +begin 301 Long 24 bit utf8 data +M!04!```&`/M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +M5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M3 +M0G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S5?M30G-S +-5?M30G-S5?M30G-S50`` + +end + +begin 301 Hash with utf8 flag but no utf8 keys +8!049``````$*!9FDDX6B``````27A9F3 + +end + +begin 301 Hash with utf8 keys +M!049``````0*!H.!HJ.3A0`````&@X&BHY.%%P3<9')5`0````3<9')5%P?B +F@XB3EHMS`@````;B@XB3EM\*!X.(Y:.%@:0`````!X.(Y:.%@:0` + +end + +begin 301 Locked hash with utf8 keys +M!049`0````0*!H.!HJ.3A00````&@X&BHY.%%P3<9')5!0````3<9')5%P?B +F@XB3EHMS!@````;B@XB3EM\*!X.(Y:.%@:0$````!X.(Y:.%@:0` + +end + +begin 301 Hash with utf8 keys for pre 5.6 +M!049``````0*!H.!HJ.3A0`````&@X&BHY.%"@>#B.6CA8&D``````>#B.6C +FA8&D"@?B@XB3EHMS`@````;B@XB3EM\*!-QD<E4`````!-QD<E4` + +end + +begin 301 Hash with utf8 keys for 5.6 +M!049``````0*!H.!HJ.3A0`````&@X&BHY.%"@>#B.6CA8&D``````>#B.6C +FA8&D%P?B@XB3EHMS`@````;B@XB3EM\7!-QD<E4`````!-QD<E4` + +end + diff --git a/ext/Storable/t/malice.t b/ext/Storable/t/malice.t index be55970de8..c8edc45937 100644 --- a/ext/Storable/t/malice.t +++ b/ext/Storable/t/malice.t @@ -48,7 +48,7 @@ BEGIN { # for network order, and 2 tests per byte on the 'pst0' "magic number" only # present in files, but not in things store()ed to memory $fancy = ($] > 5.007 ? 2 : 0); - plan tests => 334 + length($Config{byteorder}) * 4 + $fancy * 8; + plan tests => 378 + length($Config{byteorder}) * 4 + $fancy * 8; } use Storable qw (store retrieve freeze thaw nstore nfreeze); @@ -174,9 +174,17 @@ sub test_things { # ) my $minor4 = $header->{minor} + 4; substr ($copy, $file_magic + 1, 1) = chr $minor4; - test_corrupt ($copy, $sub, - "/^Storable binary image v$header->{major}\.$minor4 more recent than I am \\(v$header->{major}\.$minor\\)/", - "higher minor"); + { + # Now by default newer minor version numbers are not a pain. + $clone = &$sub($copy); + ok ($@, "", "by default no error on higher minor"); + test_hash ($clone); + + local $Storable::accept_future_minor = 0; + test_corrupt ($copy, $sub, + "/^Storable binary image v$header->{major}\.$minor4 more recent than I am \\(v$header->{major}\.$minor\\)/", + "higher minor"); + } $copy = $contents; my $major1 = $header->{major} + 1; @@ -224,6 +232,29 @@ sub test_things { test_corrupt ($copy, $sub, "/^Corrupted storable $what \\(binary v$header->{major}.$header->{minor}\\)/", "bogus tag"); + + # Now drop the minor version number + substr ($copy, $file_magic + 1, 1) = chr $minor1; + + test_corrupt ($copy, $sub, + "/^Corrupted storable $what \\(binary v$header->{major}.$minor1\\)/", + "bogus tag, minor less 1"); + # Now increase the minor version number + substr ($copy, $file_magic + 1, 1) = chr $minor4; + + # local $Storable::DEBUGME = 1; + # This is the delayed croak + test_corrupt ($copy, $sub, + "/^Storable binary image v$header->{major}.$minor4 contains data of type 255. This Storable is v$header->{major}.$header->{minor} and can only handle data types up to 25/", + "bogus tag, minor plus 4"); + # And check again that this croak is not delayed: + { + # local $Storable::DEBUGME = 1; + local $Storable::accept_future_minor = 0; + test_corrupt ($copy, $sub, + "/^Storable binary image v$header->{major}\.$minor4 more recent than I am \\(v$header->{major}\.$minor\\)/", + "higher minor"); + } } sub slurp { diff --git a/ext/Storable/t/utf8hash.t b/ext/Storable/t/utf8hash.t index 25d5307399..a545ac79bd 100644 --- a/ext/Storable/t/utf8hash.t +++ b/ext/Storable/t/utf8hash.t @@ -45,8 +45,12 @@ for $Storable::canonical (0, 1) { # first we generate a nasty hash which keys include both utf8 # on and off with identical PVs +no utf8; # we have a naked 8-bit byte below (in Latin 1, anyway) + +# In Latin 1 -ese the below ord() should end up 0xc0 (192), +# in EBCDIC 0x64 (100). Both should end up being UTF-8/UTF-EBCDIC. my @ords = ( - 0xc0, # LATIN CAPITAL LETTER A WITH GRAVE + ord("Á"), # LATIN CAPITAL LETTER A WITH GRAVE 0x3000, #IDEOGRAPHIC SPACE ); diff --git a/hints/dec_osf.sh b/hints/dec_osf.sh index c5889495cf..7706141ff2 100644 --- a/hints/dec_osf.sh +++ b/hints/dec_osf.sh @@ -354,38 +354,34 @@ case "`/usr/sbin/sizer -v`" in *[1-4].0*) d_modfl=undef ;; # must wait till 5.0 esac -case "$loclibpth" in -'') ;; -*) +# Keep those leading tabs. needusrshlib='' - case "$loclibpth" in - '') ;; - *) for p in $loclibpth - do - if test -n "`ls $p/libdb.so* 2>/dev/null`"; then - needusrshlib=yes - fi - if test -d $p; then - echo "Appending $p to LD_LIBRARY_PATH." >& 4 - case "$LD_LIBRARY_PATH" in - '') LD_LIBRARY_PATH=$p ;; - *) LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$p ;; - esac - fi - done - echo "LD_LIBRARY_PATH is now $LD_LIBRARY_PATH." >& 4 - ;; - esac - # This is evil but I can't think of a nice workaround: - # the /usr/shlib/libdb.so needs to be seen first, - # or running Configure will fail. - if test -n "$needusrshlib"; then - echo "Prepending /usr/shlib to loclibpth." >& 4 - loclibpth="/usr/shlib $loclibpth" - echo "loclibpth is now $loclibpth." >& 4 + old_LD_LIBRARY_PATH=$LD_LIBRARY_PATH +for p in $loclibpth +do + if test -n "`ls $p/libdb.so* 2>/dev/null`"; then + needusrshlib=yes fi - ;; + if test -d $p; then + echo "Appending $p to LD_LIBRARY_PATH." >& 4 + case "$LD_LIBRARY_PATH" in + '') LD_LIBRARY_PATH=$p ;; + *) LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$p ;; + esac + fi +done +case "$LD_LIBRARY_PATH" in +"$old_LD_LIBRARY_PATH") ;; +*) echo "LD_LIBRARY_PATH is now $LD_LIBRARY_PATH." >& 4 ;; esac +# This is evil but I can't think of a nice workaround: +# the /usr/shlib/libdb.so needs to be seen first, +# or running Configure will fail. +if test -n "$needusrshlib"; then + echo "Prepending /usr/shlib to loclibpth." >& 4 + loclibpth="/usr/shlib $loclibpth" + echo "loclibpth is now $loclibpth." >& 4 +fi # # Unset temporary variables no more needed. diff --git a/hints/solaris_2.sh b/hints/solaris_2.sh index 138be7b628..16c4e71aa0 100644 --- a/hints/solaris_2.sh +++ b/hints/solaris_2.sh @@ -96,14 +96,15 @@ EOCBU case "$cc" in '') if test -f /opt/SUNWspro/bin/cc; then + cc=/opt/SUNWspro/bin/cc cat <<EOF >&4 -You specified no cc but you seem to have the Workshop compiler installed, -using that. If you want something else, specify that in the command line, +You specified no cc but you seem to have the Workshop compiler +($cc) installed, using that. +If you want something else, specify that in the command line, e.g. Configure -Dcc=gcc EOF - cc=/opt/SUNWspro/bin/cc fi ;; esac diff --git a/lib/ExtUtils/MM_NW5.pm b/lib/ExtUtils/MM_NW5.pm index c70dc9979b..97cee2e92d 100644 --- a/lib/ExtUtils/MM_NW5.pm +++ b/lib/ExtUtils/MM_NW5.pm @@ -18,6 +18,7 @@ the semantics. =cut +use strict; use Config; use File::Basename; @@ -71,7 +72,7 @@ sub const_cccmd { return $self->{CONST_CCCMD} = <<'MAKE_FRAG'; CCCMD = $(CC) $(CCFLAGS) $(INC) $(OPTIMIZE) \ $(PERLTYPE) $(MPOLLUTE) -o $@ \ - -DVERSION=\"$(VERSION)\" -DXS_VERSION=\"$(XS_VERSION)\" + -DVERSION="$(VERSION)" -DXS_VERSION="$(XS_VERSION)" MAKE_FRAG } @@ -247,36 +248,43 @@ PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{ sub static_lib { my($self) = @_; -# Come to think of it, if there are subdirs with linkcode, we still have no INST_STATIC -# return '' unless $self->needs_linking(); #might be because of a subdir return '' unless $self->has_link_code; - my(@m); - push(@m, <<'END'); + my $m = <<'END'; $(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)\.exists $(RM_RF) $@ END # If this extension has it's own library (eg SDBM_File) # then copy that to $(INST_STATIC) and add $(OBJECT) into it. - push(@m, "\t$self->{CP} \$(MYEXTLIB) \$\@\n") if $self->{MYEXTLIB}; + $m .= <<'END' if $self->{MYEXTLIB}; + $self->{CP} $(MYEXTLIB) $\@ +END + + my $ar_arg; + if( $BORLAND ) { + $ar_arg = '$@ $(OBJECT:^"+")'; + } + elsif( $GCC ) { + $ar_arg = '-ru $@ $(OBJECT)'; + } + else { + $ar_arg = '-type library -o $@ $(OBJECT)'; + } - push @m, -q{ $(AR) }.($BORLAND ? '$@ $(OBJECT:^"+")' - : ($GCC ? '-ru $@ $(OBJECT)' - : '-type library -o $@ $(OBJECT)')).q{ - }.$self->{NOECHO}.q{echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)\extralibs.ld + $m .= sprintf <<'END', $ar_arg; + $(AR) %s + $(NOECHO)echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)\extralibs.ld $(CHMOD) 755 $@ -}; -# CW change ( -type library ... ) -# Old mechanism - still available: +END - push @m, "\t$self->{NOECHO}".q{echo "$(EXTRALIBS)" >> $(PERL_SRC)\ext.libs}."\n\n" - if $self->{PERL_SRC}; + $m .= <<'END' if $self->{PERL_SRC}; + $(NOECHO)echo "$(EXTRALIBS)" >> $(PERL_SRC)\ext.libs - push @m, $self->dir_target('$(INST_ARCHAUTODIR)'); - join('', "\n",@m); +END + + return $m; } diff --git a/lib/Getopt/Long.pm b/lib/Getopt/Long.pm index f038b8ba51..0ab862a25a 100644 --- a/lib/Getopt/Long.pm +++ b/lib/Getopt/Long.pm @@ -2,12 +2,12 @@ package Getopt::Long; -# RCS Status : $Id: GetoptLong.pm,v 2.56 2002-04-30 13:00:14+02 jv Exp $ +# RCS Status : $Id: GetoptLong.pm,v 2.57 2002-05-03 17:03:38+02 jv Exp $ # Author : Johan Vromans # Created On : Tue Sep 11 15:00:12 1990 # Last Modified By: Johan Vromans -# Last Modified On: Tue Apr 30 12:48:49 2002 -# Update Count : 1078 +# Last Modified On: Fri May 3 17:01:26 2002 +# Update Count : 1080 # Status : Released ################ Copyright ################ @@ -35,10 +35,10 @@ use 5.004; use strict; use vars qw($VERSION); -$VERSION = 2.30; +$VERSION = 2.31; # For testing versions only. use vars qw($VERSION_STRING); -$VERSION_STRING = "2.30"; +$VERSION_STRING = "2.31"; use Exporter; @@ -183,7 +183,7 @@ sub configure { my $save = Getopt::Long::Configure ($self->{settings}, @_); # Restore orig config and save the new config. - $self->{settings} = Configure ($save); + $self->{settings} = Getopt::Long::Configure ($save); } sub getoptions { @@ -260,7 +260,7 @@ sub GetOptions { $error = ''; print STDERR ("GetOpt::Long $Getopt::Long::VERSION (", - '$Revision: 2.56 $', ") ", + '$Revision: 2.57 $', ") ", "called from package \"$pkg\".", "\n ", "ARGV: (@ARGV)", diff --git a/lib/Net/Ping.pm b/lib/Net/Ping.pm index 6c61a47bf8..f689047ffb 100644 --- a/lib/Net/Ping.pm +++ b/lib/Net/Ping.pm @@ -1,6 +1,6 @@ package Net::Ping; -# $Id: Ping.pm,v 1.31 2002/04/11 16:45:06 rob Exp $ +# $Id: Ping.pm,v 1.33 2002/05/03 21:54:59 rob Exp $ require 5.002; require Exporter; @@ -12,11 +12,11 @@ use FileHandle; use Socket qw( SOCK_DGRAM SOCK_STREAM SOCK_RAW PF_INET inet_aton inet_ntoa sockaddr_in ); use Carp; -use Errno qw(ECONNREFUSED); +use POSIX qw(ECONNREFUSED); @ISA = qw(Exporter); @EXPORT = qw(pingecho); -$VERSION = "2.16"; +$VERSION = "2.17"; # Constants @@ -26,6 +26,12 @@ $max_datasize = 1024; # Maximum data bytes in a packet # The data we exchange with the server for the stream protocol $pingstring = "pingschwingping!\n"; +if ($^O =~ /Win32/i) { + # Hack to avoid this Win32 spewage: + # Your vendor has not defined POSIX macro ECONNREFUSED + *ECONNREFUSED = sub {10061;}; # "Unknown Error" Special Win32 Response? +}; + # Description: The pingecho() subroutine is provided for backward # compatibility with the original Net::Ping. It accepts a host # name/IP and an optional timeout in seconds. Create a tcp ping @@ -367,8 +373,7 @@ sub ping_tcp $@ = ""; $! = 0; $ret = $self -> tcp_connect( $ip, $timeout); - $ret = 1 if $! == ECONNREFUSED # Connection refused - || $@ =~ /Unknown Error/i; # Special Win32 response? + $ret = 1 if $! == ECONNREFUSED; # Connection refused $self->{"fh"}->close(); return $ret; } @@ -667,7 +672,7 @@ __END__ Net::Ping - check a remote host for reachability -$Id: Ping.pm,v 1.31 2002/04/11 16:45:06 rob Exp $ +$Id: Ping.pm,v 1.33 2002/05/03 21:54:59 rob Exp $ =head1 SYNOPSIS diff --git a/lib/Net/Ping/CHANGES b/lib/Net/Ping/CHANGES index 8bf3c91278..86060b6098 100644 --- a/lib/Net/Ping/CHANGES +++ b/lib/Net/Ping/CHANGES @@ -1,6 +1,12 @@ CHANGES ------- +2.17 May 03 18:00 2002 + - RPM spec generalizations. + michael.mclagan@linux.org (Michael McLagan) + - Win32 compatibility changes. + (Didn't compile on Win32 since v2.11.) + 2.16 Apr 11 14:00 2002 - Documentation changes. - Added INSTALL doc. diff --git a/lib/Net/Ping/README b/lib/Net/Ping/README index ff3973930e..2b18447d79 100644 --- a/lib/Net/Ping/README +++ b/lib/Net/Ping/README @@ -1,7 +1,7 @@ NAME Net::Ping - check a remote host for reachability - $Id: Ping.pm,v 1.31 2002/04/11 16:45:06 rob Exp $ + $Id: Ping.pm,v 1.33 2002/05/03 21:54:59 rob Exp $ SYNOPSIS use Net::Ping; diff --git a/lib/Term/Complete.pm b/lib/Term/Complete.pm index 308af049a5..e20b2a66ce 100644 --- a/lib/Term/Complete.pm +++ b/lib/Term/Complete.pm @@ -116,7 +116,7 @@ sub Complete { CASE: { # (TAB) attempt completion $_ eq "\t" && do { - @match = grep(/^$return/, @cmp_lst); + @match = grep(/^\Q$return/, @cmp_lst); unless ($#match < 0) { $l = length($test = shift(@match)); foreach $cmp (@match) { @@ -133,7 +133,7 @@ sub Complete { # (^D) completion list $_ eq $complete && do { - print(join("\r\n", '', grep(/^$return/, @cmp_lst)), "\r\n"); + print(join("\r\n", '', grep(/^\Q$return/, @cmp_lst)), "\r\n"); redo LOOP; }; diff --git a/lib/Unicode/Collate.pm b/lib/Unicode/Collate.pm index 6d6ed32439..676a3aadfe 100644 --- a/lib/Unicode/Collate.pm +++ b/lib/Unicode/Collate.pm @@ -13,7 +13,7 @@ use Carp; require Exporter; -our $VERSION = '0.11'; +our $VERSION = '0.12'; our $PACKAGE = __PACKAGE__; our @ISA = qw(Exporter); @@ -25,6 +25,26 @@ our @EXPORT = (); (our $Path = $INC{'Unicode/Collate.pm'}) =~ s/\.pm$//; our $KeyFile = "allkeys.txt"; +our $UNICODE_VERSION; + +eval { require Unicode::UCD }; + +unless ($@) { + $UNICODE_VERSION = Unicode::UCD::UnicodeVersion(); +} +else { # XXX, Perl 5.6.1 + my($f, $fh); + foreach my $d (@INC) { + use File::Spec; + $f = File::Spec->catfile($d, "unicode", "Unicode.301"); + if (open($fh, $f)) { + $UNICODE_VERSION = '3.0.1'; + close $fh; + last; + } + } +} + our $getCombinClass; # coderef for combining class from Unicode::Normalize use constant Min2 => 0x20; # minimum weight at level 2 @@ -33,6 +53,10 @@ use constant UNDEFINED => 0xFF80; # special value for undefined CE's our $DefaultRearrange = [ 0x0E40..0x0E44, 0x0EC0..0x0EC4 ]; +sub UCA_Version { "8.0" } + +sub Base_Unicode_Version { $UNICODE_VERSION || 'unknown' } + ## ## constructor ## @@ -809,7 +833,7 @@ these tags doesn't work validly. =back -=head2 Other methods +=head2 Methods for Collation =over 4 @@ -913,6 +937,22 @@ is primary equal to C<"m>E<252>C<ss">. =back +=head2 Other Methods + +=over 4 + +=item UCA_Version + +Returns the version number of Unicode Technical Standard 10 +this module consults. + +=item Base_Unicode_Version + +Returns the version number of the Unicode Standard +this module is based on. + +=back + =head2 EXPORT None by default. diff --git a/lib/Unicode/Collate/Changes b/lib/Unicode/Collate/Changes index bb207d86b0..997117c670 100644 --- a/lib/Unicode/Collate/Changes +++ b/lib/Unicode/Collate/Changes @@ -1,9 +1,14 @@ Revision history for Perl extension Unicode::Collate. +0.12 Sun May 05 09:43:10 2002 + - add new methods, ->UCA_Version and ->Base_Unicode_Version. + - test fix: removed the needless requirement of Unicode::Normalize. + [reported by David Hand] + 0.11 Fri May 03 02:28:10 2002 - fix: now derived collation elements can be used for Hangul Jamo when their weights are not defined. - [reported by andreas.koenig@anima.de] + [reported by Andreas J. Koenig] - fix: rearrangements had not worked. - mentioned pleblem on index() in BUGS. - more documents, more tests. diff --git a/lib/Unicode/Collate/README b/lib/Unicode/Collate/README index 68f7b80369..4d4f12ce97 100644 --- a/lib/Unicode/Collate/README +++ b/lib/Unicode/Collate/README @@ -1,4 +1,4 @@ -Unicode/Collate version 0.11 +Unicode/Collate version 0.12 =============================== Unicode::Collate - Unicode Collation Algorithm diff --git a/lib/Unicode/Collate/t/test.t b/lib/Unicode/Collate/t/test.t index 957bad1f61..f5a7012ea9 100644 --- a/lib/Unicode/Collate/t/test.t +++ b/lib/Unicode/Collate/t/test.t @@ -11,12 +11,17 @@ BEGIN { } use Test; -BEGIN { plan tests => 156 }; +BEGIN { plan tests => 160 }; use Unicode::Collate; ok(1); # If we made it this far, we're ok. ######################### +my $UCA_Version = "8.0"; + +ok(Unicode::Collate::UCA_Version, $UCA_Version); +ok(Unicode::Collate->UCA_Version, $UCA_Version); + my $Collator = Unicode::Collate->new( table => 'keys.txt', normalization => undef, @@ -24,6 +29,9 @@ my $Collator = Unicode::Collate->new( ok(ref $Collator, "Unicode::Collate"); +ok($Collator->UCA_Version, $UCA_Version); +ok($Collator->UCA_Version(), $UCA_Version); + ok( join(':', $Collator->sort( qw/ lib strict Carp ExtUtils CGI Time warnings Math overload Pod CPAN / @@ -180,6 +188,7 @@ ok($ignoreAE->eq("Perl","ePrl")); my $onlyABC = Unicode::Collate->new( table => undef, + normalization => undef, entry => << 'ENTRIES', 0061 ; [.0101.0020.0002.0061] # LATIN SMALL LETTER A 0041 ; [.0101.0020.0008.0041] # LATIN CAPITAL LETTER A @@ -585,8 +594,8 @@ ok($Collator ->lt("Ca\x{300}ca\x{302}", "ca\x{302}ca\x{300}")); ok($Collator ->lt("ca\x{300}ca\x{302}", "Ca\x{302}ca\x{300}")); -# HIRAGANA and KATAKANA are undefined via ignoreName. -# So they are after CJK Ideographs. +# HIRAGANA and KATAKANA are made undefined via undefName. +# So they are after CJK Unified Ideographs. ok($backLevel2->lt("\x{4E00}", $hiragana)); ok($backLevel2->lt("\x{4E03}", $katakana)); diff --git a/lib/charnames.pm b/lib/charnames.pm index d9cf7fa4e9..529508080c 100644 --- a/lib/charnames.pm +++ b/lib/charnames.pm @@ -268,11 +268,11 @@ charnames - define character names for C<\N{named}> string literal escapes Pragma C<use charnames> supports arguments C<:full>, C<:short> and script names. If C<:full> is present, for expansion of -C<\N{CHARNAME}}> string C<CHARNAME> is first looked in the list of +C<\N{CHARNAME}> string C<CHARNAME> is first looked in the list of standard Unicode names of chars. If C<:short> is present, and C<CHARNAME> has the form C<SCRIPT:CNAME>, then C<CNAME> is looked up as a letter in script C<SCRIPT>. If pragma C<use charnames> is used -with script name arguments, then for C<\N{CHARNAME}}> the name +with script name arguments, then for C<\N{CHARNAME}> the name C<CHARNAME> is looked up as a letter in the given scripts (in the specified order). diff --git a/lib/overload.pm b/lib/overload.pm index 838c91fcee..1cde64241e 100644 --- a/lib/overload.pm +++ b/lib/overload.pm @@ -333,9 +333,9 @@ The following symbols can be specified in C<use overload> directive: "**", "**=", "<<", "<<=", ">>", ">>=", "x", "x=", ".", ".=", For these operations a substituted non-assignment variant can be called if -the assignment variant is not available. Methods for operations "C<+>", -"C<->", "C<+=>", and "C<-=>" can be called to automatically generate -increment and decrement methods. The operation "C<->" can be used to +the assignment variant is not available. Methods for operations C<+>, +C<->, C<+=>, and C<-=> can be called to automatically generate +increment and decrement methods. The operation C<-> can be used to autogenerate missing methods for unary minus or C<abs>. See L<"MAGIC AUTOGENERATION">, L<"Calling Conventions for Mutators"> and @@ -355,10 +355,10 @@ arrays, C<cmp> is used to compare values subject to C<use overload>. "&", "^", "|", "neg", "!", "~", -"C<neg>" stands for unary minus. If the method for C<neg> is not +C<neg> stands for unary minus. If the method for C<neg> is not specified, it can be autogenerated using the method for -subtraction. If the method for "C<!>" is not specified, it can be -autogenerated using the methods for "C<bool>", or "C<\"\">", or "C<0+>". +subtraction. If the method for C<!> is not specified, it can be +autogenerated using the methods for C<bool>, or C<"">, or C<0+>. =item * I<Increment and decrement> @@ -382,11 +382,11 @@ C<0+>. =item * I<Boolean, string and numeric conversion> - "bool", "\"\"", "0+", + 'bool', '""', '0+', If one or two of these operations are not overloaded, the remaining ones can be used instead. C<bool> is used in the flow control operators -(like C<while>) and for the ternary "C<?:>" operation. These functions can +(like C<while>) and for the ternary C<?:> operation. These functions can return any arbitrary Perl value. If the corresponding operation for this value is overloaded too, that operation will be called again with this value. diff --git a/makedef.pl b/makedef.pl index 2ed95d1e72..ffe69b3028 100644 --- a/makedef.pl +++ b/makedef.pl @@ -17,12 +17,12 @@ while (@ARGV) { $define{$1} = $2 if ($flag =~ /^-D(\w+)=(.+)$/); $CCTYPE = $1 if ($flag =~ /^CCTYPE=(\w+)$/); $PLATFORM = $1 if ($flag =~ /^PLATFORM=(\w+)$/); - if ($PLATFORM eq 'netware') { - $FILETYPE = $1 if ($flag =~ /^FILETYPE=(\w+)$/); - } + if ($PLATFORM eq 'netware') { + $FILETYPE = $1 if ($flag =~ /^FILETYPE=(\w+)$/); + } } -my @PLATFORM = qw(aix win32 os2 MacOS netware); +my @PLATFORM = qw(aix win32 wince os2 MacOS netware); my %PLATFORM; @PLATFORM{@PLATFORM} = (); @@ -42,7 +42,7 @@ my $perlio_sym = "perlio.sym"; if ($PLATFORM eq 'aix') { # Nothing for now. } -elsif ($PLATFORM eq 'win32' || $PLATFORM eq 'netware') { +elsif ($PLATFORM =~ /^win(?:32|ce)$/ || $PLATFORM eq 'netware') { $CCTYPE = "MSVC" unless defined $CCTYPE; foreach ($thrdvar_h, $intrpvar_h, $perlvars_h, $global_sym, $pp_sym, $globvar_sym, $perlio_sym) { @@ -56,7 +56,7 @@ elsif ($PLATFORM eq 'MacOS') { } } -unless ($PLATFORM eq 'win32' || $PLATFORM eq 'MacOS' || $PLATFORM eq 'netware') { +unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'MacOS' || $PLATFORM eq 'netware') { open(CFG,$config_sh) || die "Cannot open $config_sh: $!\n"; while (<CFG>) { if (/^(?:ccflags|optimize)='(.+)'$/) { @@ -106,9 +106,10 @@ if ($define{USE_ITHREADS} && $PLATFORM ne 'win32' && $^O ne 'darwin') { my $sym_ord = 0; -if ($PLATFORM eq 'win32') { +if ($PLATFORM =~ /^win(?:32|ce)$/) { warn join(' ',keys %define)."\n"; - print "LIBRARY perl58\n"; + ($dll = ($define{PERL_DLL} || "perl58")) =~ s/\.dll$//i; + print "LIBRARY $dll\n"; print "DESCRIPTION 'Perl interpreter'\n"; print "EXPORTS\n"; if ($define{PERL_IMPLICIT_SYS}) { @@ -243,6 +244,77 @@ if ($PLATFORM eq 'win32') { Perl_my_popen )]; } +elsif ($PLATFORM eq 'wince') { + skip_symbols [qw( + PL_statusvalue_vms + PL_archpat_auto + PL_cryptseen + PL_DBcv + PL_generation + PL_lastgotoprobe + PL_linestart + PL_modcount + PL_pending_ident + PL_sortcxix + PL_sublex_info + PL_timesbuf + PL_collation_ix + PL_collation_name + PL_collation_standard + PL_collxfrm_base + PL_collxfrm_mult + PL_numeric_compat1 + PL_numeric_local + PL_numeric_name + PL_numeric_radix_sv + PL_numeric_standard + PL_vtbl_collxfrm + Perl_sv_collxfrm + setgid + setuid + win32_async_check + win32_free_childdir + win32_free_childenv + win32_get_childdir + win32_get_childenv + win32_spawnvp + main + Perl_ErrorNo + Perl_GetVars + Perl_do_exec3 + Perl_do_ipcctl + Perl_do_ipcget + Perl_do_msgrcv + Perl_do_msgsnd + Perl_do_semop + Perl_do_shmio + Perl_dump_fds + Perl_init_thread_intern + Perl_my_bzero + Perl_my_bcopy + Perl_my_htonl + Perl_my_ntohl + Perl_my_swap + Perl_my_chsize + Perl_same_dirent + Perl_setenv_getix + Perl_unlnk + Perl_watch + Perl_safexcalloc + Perl_safexmalloc + Perl_safexfree + Perl_safexrealloc + Perl_my_memcmp + Perl_my_memset + PL_cshlen + PL_cshname + PL_opsave + Perl_do_exec + Perl_getenv_len + Perl_my_pclose + Perl_my_popen + )]; +} elsif ($PLATFORM eq 'aix') { skip_symbols([qw( Perl_dump_fds @@ -880,7 +952,7 @@ while (<DATA>) { try_symbol($_); } -if ($PLATFORM eq 'win32') { +if ($PLATFORM =~ /^win(?:32|ce)$/) { foreach my $symbol (qw( setuid setgid @@ -1221,7 +1293,7 @@ sub emit_symbol { sub output_symbol { my $symbol = shift; - if ($PLATFORM eq 'win32') { + if ($PLATFORM =~ /^win(?:32|ce)$/) { $symbol = "_$symbol" if $CCTYPE eq 'BORLAND'; print "\t$symbol\n"; # XXX: binary compatibility between compilers is an exercise diff --git a/patchlevel.h b/patchlevel.h index 5c409be799..6b1627458a 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -79,7 +79,7 @@ #if !defined(PERL_PATCHLEVEL_H_IMPLICIT) && !defined(LOCAL_PATCH_COUNT) static char *local_patches[] = { NULL - ,"DEVEL16375" + ,"DEVEL16432" ,NULL }; @@ -3925,10 +3925,11 @@ typedef struct am_table_short AMTS; * Boilerplate macros for initializing and accessing interpreter-local * data from C. All statics in extensions should be reworked to use * this, if you want to make the extension thread-safe. See ext/re/re.xs - * for an example of the use of these macros. + * for an example of the use of these macros, and perlxs.pod for more. * * Code that uses these macros is responsible for the following: - * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts" + * 1. #define MY_CXT_KEY to a unique string, e.g. + * "DynaLoader::_guts" XS_VERSION * 2. Declare a typedef named my_cxt_t that is a structure that contains * all the data that needs to be interpreter-local. * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 8f04217aa1..52ffc244e1 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -544,6 +544,11 @@ errors so consider starting laundering now. =item * +Tied hash interfaces are now required to have the EXISTS and DELETE +methods (either own or inherited). + +=item * + If tr/// is just counting characters, it doesn't attempt to modify its target. @@ -1735,10 +1740,6 @@ long doubles support in AIX should be better now. See L<perlaix>. =item * -After a long pause, AmigaOS has been verified to be happy with Perl. - -=item * - AtheOS ( http://www.atheos.cx/ ) is a new platform. =item * @@ -1932,6 +1933,40 @@ Fixed numerous memory leaks, especially in eval "". =item * +Localised tied variables no more leak memory + + use Tie::Hash; + tie my %tied_hash => 'Tie::StdHash'; + + ... + + # Used to leak memory every time local() was called, + # in a loop this added up. + local($tied_hash{Foo}) = 1; + +=item * + +Localised hash elements (and %ENV) are correctly unlocalised to not to +exist, if that's what they were. + + + use Tie::Hash; + tie my %tied_hash => 'Tie::StdHash'; + + ... + + # Nothing has set the FOO element so far + + { local $tied_hash{FOO} = 'Bar' } + + # Here the FOO element would have been C<undef>, + # but no more so. + +As a side effect of this fix, tied hash interfaces B<must> define +the EXISTS and DELETE methods. + +=item * + mkdir() now ignores trailing slashes in the directory name, as mandated by POSIX. @@ -2705,6 +2740,14 @@ This is caused by the characters \xFF (y with diaeresis) and \xBE (Y with diaeresis) not behaving correctly when being matched case-insensitively. +=head2 Modifying $_ Inside for(..) + + for (1..5) { $_++ } + +works without complaint. It shouldn't. (You should be able to +modify only lvalue elements inside the loops.) You can see the +correct behaviour by replacing the 1..5 with 1, 2, 3, 4, 5. + =head2 mod_perl 1.26 Doesn't Build With Threaded Perl Use mod_perl 1.27 or higher. @@ -2713,7 +2756,7 @@ Use mod_perl 1.27 or higher. Don't panic. Read INSTALL 'make test' section instead. -=head2 HP-UX lib/posix Subtest 9 Fails When LP64-Configured +=head2 HP-UX lib/posix Subtest 9 Fails When LP64-Configured If perl is configured with -Duse64bitall, the successful result of the subtest 10 of lib/posix may arrive before the successful result of the @@ -2850,18 +2893,6 @@ some output may appear twice. Use XML::Parser 2.31 or later. -=head2 Localising a Tied Variable Leaks Memory - - use Tie::Hash; - tie my %tie_hash => 'Tie::StdHash'; - - ... - - local($tie_hash{Foo}) = 1; # leaks - -Code like the above is known to leak memory every time the local() -is executed. - =head2 z/OS (OS/390) z/OS has rather many test failures but the situation is actually diff --git a/pod/perliol.pod b/pod/perliol.pod index 1c346e0965..b4c8069723 100644 --- a/pod/perliol.pod +++ b/pod/perliol.pod @@ -754,10 +754,14 @@ of I<$scalar>, and writes change the value. In both cases the position in I<$scalar> starts as zero but can be altered via C<seek>, and determined via C<tell>. -=item ":Object" or ":Perl" +=item ":Via" -May be provided to allow layers to be implemented as perl code - -implementation is being investigated. +Provided to allow layers to be implemented as Perl code. For instance: + + use MIME::QuotedPrint; + open(my $fh, ">Via(MIME::QuotedPrint)", "qp"); + +See L<PerlIO::Via> for details. =back diff --git a/pod/perlunicode.pod b/pod/perlunicode.pod index 12296c019a..d2c48e26b5 100644 --- a/pod/perlunicode.pod +++ b/pod/perlunicode.pod @@ -916,8 +916,9 @@ needed. The BOM signatures will be 0x00 0x00 0xFE 0xFF for BE and UCS-2, UCS-4 Encodings defined by the ISO 10646 standard. UCS-2 is a 16-bit -encoding, UCS-4 is a 32-bit encoding. Unlike UTF-16, UCS-2 -is not extensible beyond 0xFFFF, because it does not use surrogates. +encoding. Unlike UTF-16, UCS-2 is not extensible beyond 0xFFFF, +because it does not use surrogates. UCS-4 is a 32-bit encoding, +functionally identical to UTF-32. =item * @@ -1644,7 +1644,12 @@ PP(pp_helem) if (SvTYPE(hv) == SVt_PVHV) { if (PL_op->op_private & OPpLVAL_INTRO) - preeminent = SvRMAGICAL(hv) ? 1 : hv_exists_ent(hv, keysv, 0); + preeminent = + ( SvRMAGICAL(hv) + && !mg_find((SV*)hv, PERL_MAGIC_tied) + && !mg_find((SV*)hv, PERL_MAGIC_env) + ) ? 1 : hv_exists_ent(hv, keysv, 0); + he = hv_fetch_ent(hv, keysv, lval && !defer, hash); svp = he ? &HeVAL(he) : 0; } @@ -1682,8 +1687,17 @@ PP(pp_helem) STRLEN keylen; char *key = SvPV(keysv, keylen); SAVEDELETE(hv, savepvn(key,keylen), keylen); - } else + } else { + SV *sv; save_helem(hv, keysv, svp); + sv = *svp; + /* If we're localizing a tied hash element, this new + * sv won't actually be stored in the hash - so it + * won't get reaped when the localize ends. Ensure it + * gets reaped by mortifying it instead. DAPM */ + if (SvTIED_mg(sv, PERL_MAGIC_tiedelem)) + sv_2mortal(sv); + } } } else if (PL_op->op_private & OPpDEREF) @@ -2938,8 +2952,17 @@ PP(pp_aelem) PUSHs(lv); RETURN; } - if (PL_op->op_private & OPpLVAL_INTRO) + if (PL_op->op_private & OPpLVAL_INTRO) { + SV *sv; save_aelem(av, elem, svp); + sv = *svp; + /* If we're localizing a tied array element, this new sv + * won't actually be stored in the array - so it won't get + * reaped when the localize ends. Ensure it gets reaped by + * mortifying it instead. DAPM */ + if (SvTIED_mg(sv, PERL_MAGIC_tiedelem)) + sv_2mortal(sv); + } else if (PL_op->op_private & OPpDEREF) vivify_ref(*svp, PL_op->op_private & OPpDEREF); } @@ -321,10 +321,13 @@ PP(pp_backtick) ; } else if (gimme == G_SCALAR) { + SV *oldrs = PL_rs; + PL_rs = &PL_sv_undef; sv_setpv(TARG, ""); /* note that this preserves previous buffer */ while (sv_gets(TARG, fp, SvCUR(TARG)) != Nullch) /*SUPPRESS 530*/ ; + PL_rs = oldrs; XPUSHs(TARG); SvTAINTED_on(TARG); } @@ -206,12 +206,6 @@ S_save_scalar_at(pTHX_ SV **sptr) PL_localizing = 1; SvSETMAGIC(sv); PL_localizing = 0; - /* If we're localizing a tied array/hash element, this new sv - * won't actually be stored in the array/hash - so it won't get - * reaped when the localize ends. Ensure it gets reaped by - * mortifying it instead. DAPM */ - if (SvTIED_mg(sv, PERL_MAGIC_tiedelem)) - sv_2mortal(sv); } return sv; } @@ -7296,9 +7296,6 @@ Perl_sv_bless(pTHX_ SV *sv, HV *stash) } /* Downgrades a PVGV to a PVMG. - * - * XXX This function doesn't actually appear to be used anywhere - * DAPM 15-Jun-01 */ STATIC void @@ -271,7 +271,7 @@ SKIP: { # Check truncating a closed file. eval { truncate "Iofs.tmp", 5; }; - skip("no truncate - $@", 10) if $@; + skip("no truncate - $@", 6) if $@; is(-s "Iofs.tmp", 5, "truncation to five bytes"); @@ -304,7 +304,7 @@ SKIP: { } if ($^O eq 'vos') { - skip ("# TODO - hit VOS bug posix-973 - cannot resize an open file below the current file pos.", 7); + skip ("# TODO - hit VOS bug posix-973 - cannot resize an open file below the current file pos.", 3); } is(-s "Iofs.tmp", 200, "fh resize to 200 working (filename check)"); diff --git a/t/op/arith.t b/t/op/arith.t index 55a5e48084..654ce3b857 100755 --- a/t/op/arith.t +++ b/t/op/arith.t @@ -22,7 +22,7 @@ sub tryeq_sloppy ($$$) { print "ok $_[0]\n"; } else { my $error = abs ($_[1] - $_[2]) / $_[1]; - if ($error < 1e-10) { + if ($error < 1e-9) { print "ok $_[0] # $_[1] is close to $_[2], \$^O eq $^O\n"; } else { print "not ok $_[0] # $_[1] != $_[2]\n"; @@ -242,7 +242,7 @@ tryeq 120, -0x80000000/1, -0x80000000; tryeq 121, -0x80000000/-1, 0x80000000; # The example for sloppy divide, rigged to avoid the peephole optimiser. -tryeq 122, "20." / "5.", 4; +tryeq_sloppy 122, "20." / "5.", 4; tryeq 123, 2.5 / 2, 1.25; tryeq 124, 3.5 / -2, -1.75; @@ -252,9 +252,9 @@ tryeq 126, -5.5 / -2, 2.75; # Bluuurg if your floating point can't accurately cope with powers of 2 # [I suspect this is parsing string->float problems, not actual arith] tryeq_sloppy 127, 18446744073709551616/1, 18446744073709551616; # Bluuurg -tryeq 128, 18446744073709551616/2, 9223372036854775808; -tryeq 129, 18446744073709551616/4294967296, 4294967296; -tryeq 130, 18446744073709551616/9223372036854775808, 2; +tryeq_sloppy 128, 18446744073709551616/2, 9223372036854775808; +tryeq_sloppy 129, 18446744073709551616/4294967296, 4294967296; +tryeq_sloppy 130, 18446744073709551616/9223372036854775808, 2; { # The peephole optimiser is wrong to think that it can substitute intops @@ -263,7 +263,7 @@ tryeq 130, 18446744073709551616/9223372036854775808, 2; my $n = 1127; my $float = ($n % 1000) * 167772160.0; - tryeq 131, $float, 21307064320; + tryeq_sloppy 131, $float, 21307064320; # On a 32 bit machine, if the i_multiply op is used, you will probably get # -167772160. It's actually undefined behaviour, so anything may happen. diff --git a/t/op/exec.t b/t/op/exec.t index 3edbc6ac62..5f110be32e 100755 --- a/t/op/exec.t +++ b/t/op/exec.t @@ -19,7 +19,7 @@ my $Is_Win32 = $^O eq 'MSWin32'; skip_all("Tests mostly usesless on MacOS") if $^O eq 'MacOS'; -plan(tests => 20); +plan(tests => 21); my $Perl = which_perl(); @@ -74,6 +74,12 @@ is( $echo_out, "ok\n", 'piped echo emulation'); is( scalar `$Perl -le "print 'ok'" | $Perl -e "print <STDIN>"`, "ok\n", 'extra newlines on outgoing pipes'); + + { + local($/) = \2; + $out = runperl(prog => 'print q{1234}'); + is($out, "1234", 'ignore $/ when capturing output in scalar context'); + } } diff --git a/t/op/local.t b/t/op/local.t index 9f977b2cd4..6da03912e9 100755 --- a/t/op/local.t +++ b/t/op/local.t @@ -1,6 +1,6 @@ #!./perl -print "1..71\n"; +print "1..75\n"; sub foo { local($a, $b) = @_; @@ -130,6 +130,7 @@ print +(!defined $a[0]) ? "" : "not ", "ok 41\n"; sub TIEHASH { bless {}, $_[0] } sub STORE { print "# STORE [@_]\n"; $_[0]->{$_[1]} = $_[2] } sub FETCH { my $v = $_[0]->{$_[1]}; print "# FETCH [@_=$v]\n"; $v } + sub EXISTS { print "# EXISTS [@_]\n"; exists $_[0]->{$_[1]}; } sub DELETE { print "# DELETE [@_]\n"; delete $_[0]->{$_[1]}; } sub CLEAR { print "# CLEAR [@_]\n"; %{$_[0]} = (); } } @@ -141,6 +142,8 @@ tie %h, 'TH'; { local($h{'a'}) = 'foo'; local($h{'b'}) = $h{'b'}; + local($h{'y'}); + local($h{'z'}) = 33; print +($h{'a'} eq 'foo') ? "" : "not ", "ok 42\n"; print +($h{'b'} == 2) ? "" : "not ", "ok 43\n"; local($h{'c'}); @@ -182,6 +185,8 @@ $ENV{_X_} = 'a'; $ENV{_Y_} = 'b'; $ENV{_Z_} = 'c'; { + local($ENV{_A_}); + local($ENV{_B_}) = 'foo'; local($ENV{_X_}) = 'foo'; local($ENV{_Y_}) = $ENV{_Y_}; print +($ENV{_X_} eq 'foo') ? "" : "not ", "ok 54\n"; @@ -243,3 +248,12 @@ while (/(o.+?),/gc) { print "not " if exists $x{c}; print "ok 71\n"; } + +# these tests should be physically located after tests 46 and 58, +# but are here instead to avoid renumbering everything. + +# local() should preserve the existenceness of tied hashes and %ENV +print "not " if exists $h{'y'}; print "ok 72\n"; +print "not " if exists $h{'z'}; print "ok 73\n"; +print "not " if exists $ENV{_A_}; print "ok 74\n"; +print "not " if exists $ENV{_B_}; print "ok 75\n"; diff --git a/t/op/pwent.t b/t/op/pwent.t index fc71f574ad..4d9de4490f 100755 --- a/t/op/pwent.t +++ b/t/op/pwent.t @@ -49,6 +49,18 @@ BEGIN { } } + if (not defined $where) { # Try NIS+ + foreach my $niscat (qw(/bin/niscat)) { + if (-x $niscat && + open(PW, "$niscat passwd.org_dir 2>/dev/null |") && + defined(<PW>)) { + $where = "NIS+ $niscat passwd.org_dir"; + undef $reason; + last; + } + } + } + if ($reason) { # Give up. print "1..0 # Skip: $reason\n"; exit 0; diff --git a/t/op/tie.t b/t/op/tie.t index 9a651555fc..f8f2322632 100755 --- a/t/op/tie.t +++ b/t/op/tie.t @@ -202,3 +202,12 @@ EXPECT tie FH, 'main'; EXPECT +######## +# correct unlocalisation of tied hashes (patch #16431) +use Tie::Hash ; +tie %tied, Tie::StdHash; +{ local $hash{'foo'} } print "exist1\n" if exists $hash{'foo'}; +{ local $tied{'foo'} } print "exist2\n" if exists $tied{'foo'}; +{ local $ENV{'foo'} } print "exist3\n" if exists $ENV{'foo'}; +EXPECT + @@ -3810,7 +3810,9 @@ * This symbol, if defined, indicates that you must access * character data through U32-aligned pointers. */ +#ifndef U32_ALIGNMENT_REQUIRED #define U32_ALIGNMENT_REQUIRED /**/ +#endif /* HAS_USLEEP_PROTO: * This symbol, if defined, indicates that the system provides diff --git a/vos/Changes b/vos/Changes index 407b258992..98bab9dbd8 100644 --- a/vos/Changes +++ b/vos/Changes @@ -6,6 +6,9 @@ For 5.8.0: "install_perl.cm" to use directory naming conventions that are closer to the perl standard directory names. + Added "compile_full_perl.cm", "configure_full_perl.sh" and + "make_full_perl.sh" for building full perl. + For the first time, full perl can now be built on VOS using its native Configure script and makefiles. See README.vos for details. diff --git a/vos/build.cm b/vos/build.cm index 991530f448..a07dad36b3 100644 --- a/vos/build.cm +++ b/vos/build.cm @@ -38,6 +38,12 @@ &return 1 &end & +&if &compiler& = gcc & &cpu& = pa8000 +&then &do + &display_line build: "-compiler gcc" is incompatible with "-processor pa8000" + &return 1 + &end +& & Set up the appropriate directory suffix for each architecture. & &if &cpu& = mc68020 @@ -206,6 +212,8 @@ &if (command_status) ^= 0 &then &return !&compiler& <<xsutils.c &diag& &cpu& &cflags& -o xsutils&s& &if (command_status) ^= 0 &then &return +!&compiler& <vos.c &diag& &cpu& &cflags& -o vos&s& +&if (command_status) ^= 0 &then &return &if &version& = alpha &then &do !&compiler& <vos_dummies.c &cpu& -O4 -o vos_dummies&s& @@ -214,11 +222,11 @@ & &if &compiler& = gcc &then &do - !delete_file perl.a + &if (exists -file perl.a) &then !delete_file perl.a !ar rc perl.a av.o deb.o doio.o doop.o dump.o globals.o gv.o hv.o locale.o &+ mg.o numeric.o op.o perl.o perlapi.o perlio.o perly.o pp.o pp_ctl.o &+ pp_hot.o pp_pack.o pp_sort.o pp_sys.o reentr.o regcomp.o regexec.o run.o &+ - scope.o sv.o taint.o toke.o universal.o utf8.o util.o xsutils.o + scope.o sv.o taint.o toke.o universal.o utf8.o util.o vos.o xsutils.o !delete_file *.o -no_ask -brief &end &else &do diff --git a/vos/compile_full_perl.cm b/vos/compile_full_perl.cm new file mode 100644 index 0000000000..9af1a87cde --- /dev/null +++ b/vos/compile_full_perl.cm @@ -0,0 +1,38 @@ +& This command macro builds and tests full perl using +& the native perl build scripts. The prerequsites for +& using this macro are a VOS Continuum system running +& VOS Release 14.5.0 and VOS GNU C/C++ and GNU Tools 2.0.1. +& +& Written 02-05-05 by Paul Green (Paul.Green@stratus.com) +& +&begin_parameters + debug_sw switch(-debug) +&end_parameters +&echo command_lines +& +!add_library_path command (master_disk)>system>gnu_library>bin &+ + -after '(current_dir)' +& +&if (process_type) = interactive +&then !set_terminal_parameters -pause_lines 0 +& +&set_string release (before (after (module_info system_release) 'VOS Release ') ' ') +&if &release& < '14.5' +&then &do + &display_line You must be running VOS Release 14.5.0 or later to use this macro. + &return e$wrong_version +&end +& +&if ^ (exists -directory (master_disk)>system>gnu_library>lib>perl5) +&then &do + &display_line You must have S877 - GNU C/C++ and GNU Tools Release 2.0.1 to use this macro. + &return e$wrong_version +&end +& +!change_current_dir < +& +&if &debug_sw& +&then !bash vos/configure_full_perl.sh -DDEBUGGING -Doptimize=-g +&else !bash vos/configure_full_perl.sh +& +!bash vos/make_full_perl.sh diff --git a/vos/compile_perl.cm b/vos/compile_perl.cm index 367b0797d5..c5c7c1e068 100644 --- a/vos/compile_perl.cm +++ b/vos/compile_perl.cm @@ -38,6 +38,21 @@ &display_line GCC is not supported by the alpha version of POSIX support. &return e$translation_failed &end +&if &cpu& = mc68020 & &version& = ga +&then &do + &display_line The mc68020 CPU is not supported by the GA version of POSIX support. + &return e$translation_failed +&end +&if &cpu& = i80860 & &version& = ga +&then &do + &display_line The i80860 CPU is not supported by the GA version of POSIX support. + &return e$translation_failed +&end +&if &cpu& = pa8000 & &compiler& = gcc +&then &do + &display_line The pa8000 CPU is not supported by the GNU GCC compiler. + &return e$translation_failed +&end &if ^ (exists obj&obj& -directory) &then !create_dir obj&obj& & diff --git a/vos/configure_full_perl.sh b/vos/configure_full_perl.sh new file mode 100644 index 0000000000..28eab52513 --- /dev/null +++ b/vos/configure_full_perl.sh @@ -0,0 +1,21 @@ +# Configure environment variables for perl build. +declare -x AWK="/system/gnu_library/bin/gawk.pm" +export AWK +declare -x CC="/system/gnu_library/bin/gcc.pm" +export CC +declare -x CPP="$CC $CPPFLAGS -E" +export CPP +declare -x CPPFLAGS="-D_POSIX_SOURCE=199506L -D_SYSV" +export CPPFLAGS +declare -x CONFIG_SHELL="bash" +export CONFIG_SHELL +declare -x LD="/system/gnu_library/bin/gcc.pm" +export LD +declare -x MAKE="/system/gnu_library/bin/gmake.pm" +export MAKE +declare -x RANLIB=":" +export RANLIB +declare -x SHELL="/system/gnu_library/bin/bash.pm" +export SHELL +# +bash Configure -Dusedevel -des diff --git a/vos/make_full_perl.sh b/vos/make_full_perl.sh new file mode 100644 index 0000000000..8abdafc78b --- /dev/null +++ b/vos/make_full_perl.sh @@ -0,0 +1,3 @@ +# This macro makes full perl and runs its test scripts +gmake +gmake test diff --git a/vos/perl.bind b/vos/perl.bind index 6531c05086..7206c363f9 100644 --- a/vos/perl.bind +++ b/vos/perl.bind @@ -26,6 +26,7 @@ modules: miniperlmain, pp_sort, pp_sys, reentr, + regcomp, regexec, run, scope, @@ -35,6 +36,7 @@ modules: miniperlmain, universal, utf8, util, + vos, xsutils; end; diff --git a/wince/Makefile.ce b/wince/Makefile.ce index a4b4bf4b66..1f94645248 100644 --- a/wince/Makefile.ce +++ b/wince/Makefile.ce @@ -6,19 +6,32 @@ SRCDIR = .. PV = 57 INST_VER = 5.7.3 +# INSTALL_ROOT specifies a path where this perl will be installed on CE device INSTALL_ROOT=/netzwerk/sprache/perl +INST_TOP=$(INSTALL_ROOT) +INST_VER= # PERLCEDIR shoud be set to current directory PERLCEDIR = H:\src\wince\perl\wince -WCEROOT = N:\Windows CE Tools +# WCEROOT is a directory where Windows CE Tools was installed WCEROOT = D:\Windows CE Tools -NTPERL = N:\Programme\perl\bin\perl.exe -NTPERL = D:\Programme\ActiveState\perl-5.6\bin\Perl.exe -CEPATH = N:\Programme\Microsoft eMbedded Tools\EVC\WCE211\BIN + +# HPERL stands for host perl, which is perl on local desktop machine +# which is usually ..\miniperl.exe +#HPERL = N:\Programme\perl\bin\perl.exe +HPERL = $(MAKEDIR)\..\miniperl.exe + CEPATH = D:\Programme\Microsoft eMbedded Tools\EVC\WCE211\BIN CELIBDLLDIR = h:\src\wince\celib-palm-3.0 CECONSOLEDIR = h:\src\wince\w32console + +# specify following options to build perl on local machine, by MSVC +MSVCDIR = D:\MSVStudio\VC98 +CCHOME = $(MSVCDIR) +CCINCDIR = $(CCHOME)\include +CCLIBDIR = $(CCHOME)\lib + # Only for WIN2000 #YES = /y COPY = copy $(YES) @@ -28,6 +41,15 @@ RCOPY = xcopy $(YES) /f /r /i /e /d # cecopy program. Make shure it is in your path, as well as cemkdir, cedel CECOPY = cecopy +# +# Comment out next assign to disable perl's I/O subsystem and use compiler's +# stdio for IO - depending on your compiler vendor and run time library you may +# then get a number of fails from make test i.e. bugs - complain to them not us ;-). +# You will also be unable to take full advantage of perl5.8's support for multiple +# encodings and may see lower IO performance. You have been warned. +USE_PERLIO = define + + NOOP = @echo # keep this untouched! NULL = @@ -377,6 +399,10 @@ USE_ITHREADS = undef USE_IMP_SYS = undef !ENDIF +!IF "$(USE_PERLIO)" == "" +USE_PERLIO = undef +!ENDIF + !IF "$(USE_PERLCRT)" == "" USE_PERLCRT = undef !ENDIF @@ -398,6 +424,14 @@ BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_CONTEXT BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_SYS !ENDIF +!IF "$(USE_PERLIO)" == "define" +BUILDOPT = $(BUILDOPT) -DUSE_PERLIO +!ENDIF + +!IF "$(CROSS_NAME)" == "" +CROSS_NAME = wince +!ENDIF + # new option - automatically defined in perl.h... #BUILDOPT = $(BUILDOPT) -DUSE_ENVIRON_ARRAY @@ -500,7 +534,7 @@ CFGH_TMPL = config_H.ce # # filenames given to xsubpp must have forward slashes (since it puts # full pathnames in #line strings) -XSUBPP = $(NTPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp \ +XSUBPP = $(HPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp \ -C++ -prototypes MICROCORE_SRC = \ @@ -713,6 +747,7 @@ CFG_VARS = \ "useithreads=$(USE_ITHREADS)" \ "usethreads=$(USE_5005THREADS)" \ "usemultiplicity=$(USE_MULTI)" \ + "useperlio=$(USE_PERLIO)" \ "LINK_FLAGS=$(LDLIBPATH) $(LINK_FLAGS) $(SUBSYS)" \ "optimize=$(OPTIMIZE)" @@ -720,24 +755,25 @@ CFG_VARS = \ # Top targets # -all: $(MINIMOD) $(CONFIGPM) $(PERLEXE) +all: hostminiperl $(MINIMOD) $(CONFIGPM) $(PERLEXE) $(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c $(CONFIGPM): config.h ..\config.sh ..\minimod.pl - cd .. && $(NTPERL) configpm + cd .. && $(HPERL) configpm + cd .. && $(HPERL) configpm --cross=$(CROSS_NAME) --no-glossary -mkdir $(COREDIR) $(XCOPY) ..\*.h $(COREDIR)\*.* $(XCOPY) *.h $(COREDIR)\*.* $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.* $(RCOPY) include $(COREDIR)\*.* - $(NTPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)" + $(HPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)" ..\config.sh config.h: config.ce config_sh.PL - $(NTPERL) -I..\lib config_sh.PL $(CFG_VARS) config.ce > ..\config.sh + $(HPERL) -I..\lib config_sh.PL $(CFG_VARS) config.ce > ..\config.sh $(MINIMOD) : ..\minimod.pl - cd .. && $(NTPERL) minimod.pl > lib\ExtUtils\Miniperl.pm + cd .. && $(HPERL) minimod.pl > lib\ExtUtils\Miniperl.pm perlmain.c : runperl.c $(COPY) runperl.c perlmain.c @@ -745,8 +781,8 @@ perlmain.c : runperl.c $(DYNALOADER).c: $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM) if not exist $(AUTODIR) mkdir $(AUTODIR) cd $(EXTDIR)\$(*B) - $(NTPERL) -I..\..\lib $(*B)_pm.PL - $(NTPERL) -I..\..\lib XSLoader_pm.PL + $(HPERL) -I..\..\lib $(*B)_pm.PL + $(HPERL) -I..\..\lib XSLoader_pm.PL cd ..\..\wince $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL) $(XCOPY) $(EXTDIR)\$(*B)\XSLoader.pm $(LIBDIR)\$(NULL) @@ -759,103 +795,103 @@ $(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs $(DUMPER_DLL): $(PERLEXE) $(DUMPER).xs cd $(EXTDIR)\Data\$(*B) - $(NTPERL) -I..\..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\..\wince $(DPROF_DLL): $(PERLEXE) $(DPROF).xs cd $(EXTDIR)\Devel\$(*B) - $(NTPERL) -I..\..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\..\wince $(GLOB_DLL): $(PERLEXE) $(GLOB).xs cd $(EXTDIR)\File\$(*B) - $(NTPERL) -I..\..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\..\wince $(PEEK_DLL): $(PERLEXE) $(PEEK).xs cd $(EXTDIR)\Devel\$(*B) - $(NTPERL) -I..\..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\..\wince $(RE_DLL): $(PERLEXE) $(RE).xs cd $(EXTDIR)\$(*B) - $(NTPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\wince $(B_DLL): $(PERLEXE) $(B).xs cd $(EXTDIR)\$(*B) - $(NTPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\wince $(THREAD_DLL): $(PERLEXE) $(THREAD).xs cd $(EXTDIR)\$(*B) - $(NTPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\wince $(ATTRS_DLL): $(PERLEXE) $(ATTRS).xs cd $(EXTDIR)\$(*B) - $(NTPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\wince $(POSIX_DLL): $(PERLEXE) $(POSIX).xs cd $(EXTDIR)\$(*B) - $(NTPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\wince $(IO_DLL): $(PERLEXE) $(IO).xs cd $(EXTDIR)\$(*B) - $(NTPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\wince $(SDBM_FILE_DLL) : $(PERLEXE) $(SDBM_FILE).xs cd $(EXTDIR)\$(*B) - $(NTPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\wince $(FCNTL_DLL): $(PERLEXE) $(FCNTL).xs cd $(EXTDIR)\$(*B) - $(NTPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\wince $(OPCODE_DLL): $(PERLEXE) $(OPCODE).xs cd $(EXTDIR)\$(*B) - $(NTPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\wince $(SOCKET_DLL): $(PERLEXE) $(SOCKET).xs cd $(EXTDIR)\$(*B) - $(NTPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\wince $(HOSTNAME_DLL): $(PERLEXE) $(HOSTNAME).xs cd $(EXTDIR)\Sys\$(*B) - $(NTPERL) -I..\..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\..\wince $(BYTELOADER_DLL): $(PERLEXE) $(BYTELOADER).xs cd $(EXTDIR)\$(*B) - $(NTPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\wince $(ERRNO_PM): $(PERLEXE) $(ERRNO)_pm.PL cd $(EXTDIR)\$(*B) - $(NTPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl + $(HPERL) -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl $(MAKE) cd ..\..\wince @@ -875,7 +911,7 @@ clean: install_perlexe: $(PERLEXE) cedel /speicherkarte2/bin/perl.exe - $(CECOPY) pc:../perl.exe ce:/speicherkarte2/bin + $(CECOPY) pc:../perl.exe ce:$(INSTALL_ROOT)/bin install_perldll: $(PERLDLL) cedel /speicherkarte2/bin/perl$(PV).dll @@ -888,17 +924,17 @@ test_perl: ceexec /speicherkarte2/bin/perl.exe /speicherkarte2/bin/test.pl install_lib: ../lib/Config.pm - $(CECOPY) pc:../lib/Config.pm ce:/speicherkarte2/usr/lib/perl5 + $(CECOPY) pc:../lib/Config.pm ce:$(INSTALL_ROOT)/lib !ELSEIF "$(MACHINE)" == "wince-arm-hpc" install_perlexe: $(PERLEXE) -cedel /speicherkarte/bin/perl.exe - $(CECOPY) pc:$(MACHINE)/perl.exe ce:/speicherkarte/bin + $(CECOPY) pc:$(MACHINE)/perl.exe ce:$(INSTALL_ROOT)/bin install_perldll: $(PERLDLL) -cedel /speicherkarte/bin/perl$(PV).dll - $(CECOPY) pc:$(MACHINE)/perl$(PV).dll ce:/speicherkarte/bin + $(CECOPY) pc:$(MACHINE)/perl$(PV).dll ce:$(INSTALL_ROOT)/bin install_perl: install_perlexe install_perldll @@ -907,7 +943,7 @@ test_perl: ceexec /speicherkarte/bin/perl.exe /speicherkarte/bin/test.pl install_lib: ../lib/Config.pm - $(CECOPY) pc:../lib/Config.pm ce:/speicherkarte/usr/lib/perl5 + $(CECOPY) pc:../lib/Config.pm ce:$(INSTALL_ROOT)/lib !ELSEIF "$(MACHINE)" == "wince-mips-hpc" @@ -924,7 +960,7 @@ test_perl: ceexec /netzwerk/compaq/bin/perl.exe $(INSTALL_ROOT)/test.pl install_lib: ../lib/Config.pm - $(CECOPY) pc:../lib/Config.pm ce:/netzwerk/compaq/usr/lib/perl5 + $(CECOPY) pc:../lib/Config.pm ce:$(INSTALL_ROOT)/lib !ELSEIF "$(MACHINE)" == "wince-x86em-pocket" @@ -934,10 +970,10 @@ install_lib: ftpcopy ../lib/Exporter/Heavy.pm ftp!ftp@localhost:/perl/lib/Exporter install_perlexe: $(PERLEXE) - $(CECOPY) pc:../perl.exe ce:/netzwerk/compaq/bin + $(CECOPY) pc:../perl.exe ce:$(INSTALL_ROOT)/bin install_perldll: $(PERLDLL) - $(CECOPY) pc:../perl$(PV).dll ce:/netzwerk/compaq/bin + $(CECOPY) pc:../perl$(PV).dll ce:$(INSTALL_ROOT)/bin install_perl: install_perlexe install_perldll @@ -994,6 +1030,10 @@ $(DLLDIR)\DynaLoader.obj {$(SRCDIR)/wince}.c{$(DLLDIR)}.obj: $(CC) -c $(CFLAGS) -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ $< +perldll.def : $(HPERL) $(CONFIGPM) ..\global.sym ..\pp.sym ..\makedef.pl + $(HPERL) -w ..\makedef.pl PLATFORM=wince $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \ + CCTYPE=$(CCTYPE) -DPERL_DLL=$(PERLDLL) > perldll.def + $(PERLDLL) : $(DLLDIR) perldll.def $(XDLLOBJS) $(PERLDLL_RES) $(LINK32) -dll -def:perldll.def -out:$@ \ $(SUBSYS) $(LDLIBPATH) \ @@ -1049,43 +1089,33 @@ makedist: all dlls !if "$(MACHINE)" == "wince-arm-hpc-wce300" install: all - $(CECOPY) pc:$(MACHINE)/perl.exe ce:/speicherkarte/bin - $(CECOPY) pc:$(MACHINE)/perl$(PV).dll ce:/speicherkarte/bin + $(CECOPY) pc:$(MACHINE)/perl.exe ce:$(INSTALL_ROOT)/bin + $(CECOPY) pc:$(MACHINE)/perl$(PV).dll ce:$(INSTALL_ROOT)/bin install_dlls: dlls - $(CECOPY) pc:../lib/auto/IO/io.dll ce:/speicherkarte/usr/lib/perl5/auto/IO/io.dll + $(CECOPY) pc:../lib/auto/IO/io.dll ce:$(INSTALL_ROOT)/lib/auto/IO/io.dll !else install: all -cemkdir "$(INSTALL_ROOT)" -cemkdir "$(INSTALL_ROOT)\bin" -cemkdir "$(INSTALL_ROOT)\lib" $(CECOPY) "pc:$(MACHINE)/perl.exe" "ce:$(INSTALL_ROOT)/bin" - $(CECOPY) "pc:$(MACHINE)/perl.dll" "ce:$(INSTALL_ROOT)/bin" - $(CECOPY) "pc:../lib/Config.pm" "ce:$(INSTALL_ROOT)/lib" + $(CECOPY) "pc:$(MACHINE)/perl$(PV).dll" "ce:$(INSTALL_ROOT)/bin" + $(CECOPY) "pc:../xlib/wince/Config.pm" "ce:$(INSTALL_ROOT)/lib" !endif -!if "$(MACHINE)" == "wince-arm-hpc-wce211" -install: all - $(CECOPY) pc:$(MACHINE)/perl.exe ce:/speicherkarte/bin - $(CECOPY) pc:$(MACHINE)/perl$(PV).dll ce:/speicherkarte/bin -!endif - -!if "$(MACHINE)" == "wince-mips-hpc-wce211" -install: - $(CECOPY) pc:$(MACHINE)/perl.exe ce:/bin - $(CECOPY) pc:$(MACHINE)/perl$(PV).dll ce:/bin -!endif +perl.ico: + $(HPERL) makeico.pl -!if "$(MACHINE)" == "wince-mips-hpc-wce200" -install: - $(CECOPY) pc:$(MACHINE)/perl.exe ce:/bin - $(CECOPY) pc:$(MACHINE)/perl$(PV).dll ce:/bin -!endif +hostminiperl: ..\miniperl.exe -!if "$(MACHINE)" == "wince-sh3-hpc-wce211" -install: - $(CECOPY) pc:$(MACHINE)/perl.exe ce:$(INSTALL_ROOT)/bin - $(CECOPY) pc:$(MACHINE)/perl$(PV).dll ce:$(INSTALL_ROOT)/bin -!endif +..\miniperl.exe: + cd ../win32 + set PATH=$(CCHOME)\bin;$(PATH) + $(MAKE) -f Makefile "CCHOME=$(MSVCDIR)" "CCINCDIR=$(CCHOME)\include" "CCLIBDIR=$(CCHOME)\lib" "INCLUDE=$(CCHOME)\include" "LIB=$(CCHOME)\lib" "LINK_FLAGS=" .\config.h ..\miniperl.exe + cd ../wince -perl.ico: - perl makeico.pl +host-install: + perl -MConfig -MExtUtils::Install -we "install({'../lib/CORE', qq#$$Config{installprefixexp}/xlib/$(CROSS_NAME)/CORE#},1)" + perl -MConfig -MExtUtils::Install -we "install({'../xlib/$(CROSS_NAME)', qq#$$Config{installprefixexp}/xlib/$(CROSS_NAME)#},1)" + perl -MConfig -MFile::Copy -we "copy qq#./$(MACHINE)/perl$(PV).lib#, qq#$$Config{installprefixexp}/xlib/$(CROSS_NAME)/CORE#" + perl -MConfig -MFile::Copy -we "copy qq#../lib/Cross.pm#, qq#$$Config{installprefixexp}/lib#" diff --git a/wince/README.compile b/wince/README.compile index 30c3d479aa..3325402414 100644 --- a/wince/README.compile +++ b/wince/README.compile @@ -11,6 +11,34 @@ Socket and IO dlls compiled. Seem to work. The sequence for building a new target is: -make clean # clean up -make all # build for target +make -f Makefile.ce clean # clean up +make -f Makefile.ce all # build for target +CROSS_NAME macro is provided to name your current cross compilation. +It is "wince" by default, but may be any other identifier to +differentiate and co-exist miscellaneous configurations. +So your command often will be + +make -f Makefile.ce all CROSS_NAME=[my-cross-name] + +It is implemented an easy way to build most of module extensions. +First, you need to do + + nmake host-install CROSS_NAME=[my-cross-name] + +This command will install a set of files into your perl directory. +That will allow you to do cross-compiling for your CE device. +Those files are C libraries, h-files, Cross.pm, Config.pm. Note +that it will use first found perl in your path. You should think about +your PATH variable and change it at your will before copying such files. + +After that to do cross-compiling you need to invoke + + perl -MCross Makefile.PL + +or + + perl -MCross=[my-cross-name] Makefile.PL + +to prepare Makefile, and then nmake, nmake install, as usually you do. +'test' tartget is still not ready. diff --git a/wince/cecopy-lib.pl b/wince/cecopy-lib.pl index 8281b0c20c..f194ffd55a 100644 --- a/wince/cecopy-lib.pl +++ b/wince/cecopy-lib.pl @@ -12,8 +12,8 @@ sub mk { $r=~/^(.*)\/[^\/]*?$/; mk($1); } - system("$^X comp.pl --do cemkdir [p]\\lib\\$r"); - print STDERR "$^X comp.pl --do cemkpath [p]\\lib\\$r\n"; + print STDERR "..\\miniperl.exe comp.pl --do cemkdir [p]\\lib\\$r\n"; + system("..\\miniperl.exe -I..\\lib comp.pl --do cemkdir [p]\\lib\\$r"); $dirs{$r}++; } for (@files) { @@ -22,7 +22,7 @@ for (@files) { mk($1); } # currently no stripping POD - system("$^X comp.pl --do cecopy pc:..\\lib\\$_ ce:[p]\\lib\\$_"); + system("..\\miniperl.exe -I..\\lib comp.pl --copy pc:..\\lib\\$_ ce:[p]\\lib\\$_"); } sub BEGIN { diff --git a/wince/comp.pl b/wince/comp.pl index 8ecc95855d..ea061ee280 100644 --- a/wince/comp.pl +++ b/wince/comp.pl @@ -2,21 +2,12 @@ helper script to make life for PerlCE easier. -You need edit values for @defs array to reflect your changes and then do - - perl comp.pl [any-additional-options] - -This will call - nmake -f Makefile.ce -with most parameters overrided as you specified and additional options -(such as build target) will also be prepended to command line to execute. - -There are also additional different modes for running this script: +There are different modes for running this script: perl comp.pl --run [any-command-line-arguments] and perl comp.pl --do [any-command-line-arguments] and - perl comp.pl --copy-pm pc:[pc-location] ce:[ce-location] + perl comp.pl --copy pc:[pc-location] ce:[ce-location] --run executes this build of perl on CE device with arguments provided --run=test will display a predefined messagebox that say everything is ok. @@ -37,32 +28,16 @@ and =cut -use Cwd; use strict; +use Cross; +use Config; # edit value of $inst_root variable to reflect your desired location of # built perl -my $inst_root = "\\Storage Card\\perl-tests\\perl\@16225"; -my @defs = ( - "\"PV=\"", - "\"INST_VER=\"", - "\"INSTALL_ROOT=$inst_root\"", - "\"WCEROOT=$ENV{SDKROOT}\"", - "NTPERL=$^X", #todo: check version: this must be (almost?) current version - "\"CEPATH=$ENV{WCEROOT}\"", - "CELIBDLLDIR=d:\\personal\\pocketPC\\celib-palm-3.0", - "CECONSOLEDIR=d:\\personal\\pocketPC\\w32console", - "YES=/y", - "CFG=RELEASE", - "MACHINE=wince-mips-pocket-wce300", - "PERLCEDIR=".cwd, - #NIY "\"CECOPY=\$(NTPERL) \$(PERLCEDIR)\\$0 --copy=compact\"", - "\"CECOPY=\$(NTPERL) \$(PERLCEDIR)\\$0 --copy\"", -); +my $inst_root = $Config{prefix}; my %opts = ( - # %known_opts enumerates allowed opts as well as specifies default - # and initial values + # %known_opts enumerates allowed opts as well as specifies default and initial values my %known_opts = ( 'do' => '', 'run' => '', @@ -98,9 +73,7 @@ elsif ($opts{'copy'}) { system("cecopy",@ARGV); } else { - my $cmd = "nmake -f Makefile.ce @defs @ARGV"; - print $cmd; - system($cmd); + # todo } diff --git a/wince/compile.bat b/wince/compile.bat new file mode 100644 index 0000000000..582d422e81 --- /dev/null +++ b/wince/compile.bat @@ -0,0 +1,25 @@ +@echo off +rem +rem edit ARG-xxx variable to reflect your system and run +rem compile.bat [target] [additional parameters for nmake] +rem + +set ARG-1=PV= +set ARG-2=INST_VER= +set ARG-3=INSTALL_ROOT=\Storage Card\perl-tests\perl@16376 +set ARG-4=WCEROOT=%SDKROOT% +set ARG-5=CEPATH=%WCEROOT% +set ARG-6=CELIBDLLDIR=d:\personal\pocketPC\celib-palm-3.0 +set ARG-7=CECONSOLEDIR=d:\personal\pocketPC\w32console + +rem Only for WIN2000 +set ARG-8=YES=/y + +set ARG-9=CFG=RELEASE +set ARG-10=MACHINE=wince-mips-pocket-wce300 +set ARG-11=PERLCEDIR=$(MAKEDIR) +set ARG-12=MSVCDIR=D:\MSVStudio\VC98 +set ARG-13=CECOPY=$(HPERL) -I$(PERLCEDIR)\lib $(PERLCEDIR)\comp.pl --copy +set ARG-14=USE_PERLIO=undef + +nmake -f Makefile.ce "%ARG-1%" "%ARG-2%" "%ARG-3%" "%ARG-4%" "%ARG-5%" "%ARG-6%" "%ARG-7%" "%ARG-8%" "%ARG-9%" "%ARG-10%" "%ARG-11%" "%ARG-12%" "%ARG-13%" "%ARG-14%" %1 %2 %3 %4 %5 %6 %7 %8 %9 diff --git a/wince/config.ce b/wince/config.ce index 9e42882296..07eed645f3 100644 --- a/wince/config.ce +++ b/wince/config.ce @@ -43,7 +43,7 @@ byteorder='1234' c='' castflags='0' cat='type' -cc='cl' +cc='~CC~' cccdlflags=' ' ccdlflags=' ' ccflags='-DWIN32' @@ -61,14 +61,14 @@ compress='' contains='grep' cp='copy' cpio='' -cpp='cl -nologo -E' +cpp='~CC~ -nologo -E' cpp_stuff='42' cppccsymbols='' cppflags='-DWIN32' cpplast='' cppminus='' -cpprun='cl -nologo -E' -cppstdin='cl -nologo -E' +cpprun='~CC~ -nologo -E' +cppstdin='~CC~ -nologo -E' cppsymbols='' crosscompile='undef' crypt_r_proto='0' @@ -331,7 +331,7 @@ d_setgrps='undef' d_sethent='undef' d_sethostent_r='undef' d_setlinebuf='undef' -d_setlocale='undef' +d_setlocale='define' d_setlocale_r='undef' d_setnent='undef' d_setnetent_r='undef' @@ -379,7 +379,7 @@ d_stdio_stream_array='undef' d_stdiobase='undef' d_stdstdio='undef' d_strchr='define' -d_strcoll='undef' +d_strcoll='define' d_strctcpy='define' d_strerrm='strerror(e)' d_strerror='define' @@ -529,6 +529,7 @@ i_gdbm='undef' i_grp='undef' i_ieeefp='undef' i_inttypes='undef' +i_langinfo='undef' i_limits='define' i_locale='undef' i_machcthr='undef' @@ -542,6 +543,7 @@ i_neterrno='undef' i_netinettcp='undef' i_niin='undef' i_poll='undef' +i_prot='undef' i_pthread='undef' i_pwd='undef' i_rpcsvcdbm='define' @@ -701,6 +703,7 @@ optimize='-O' orderlib='false' osname='MSWin32' osvers='4.0' +otherlibdirs='' package='perl5' pager='more /e' passcat='' @@ -852,7 +855,7 @@ use5005threads='undef' use64bitall='undef' use64bitint='undef' usedl='define' -useithreads='undef' +useithreads='~USE_ITHREADS~' uselargefiles='undef' uselongdouble='undef' usemorebits='undef' @@ -860,7 +863,7 @@ usemultiplicity='undef' usemymalloc='n' usenm='false' useopcode='true' -useperlio='define' +useperlio='~USE_PERLIO~' useposix='true' usesfio='false' useshrplib='yes' diff --git a/wince/config.h b/wince/config.h deleted file mode 100644 index 53ed69c65d..0000000000 --- a/wince/config.h +++ /dev/null @@ -1,3430 +0,0 @@ -/* - * This file was produced by running the config_h.SH script, which - * gets its values from undef, which is generally produced by - * running Configure. - * - * Feel free to modify any of this as the need arises. Note, however, - * that running config_h.SH again will wipe out any changes you've made. - * For a more permanent change edit undef and rerun config_h.SH. - * - * $Id: Config_h.U,v 3.0.1.5 1997/02/28 14:57:43 ram Exp $ - */ - -/* - * Package name : perl5 - * Source directory : - * Configuration time: Wed Aug 1 21:35:14 2001 - * Configured by : Rainer Keuchel - * Target system : - */ - -#ifndef _config_h_ -#define _config_h_ - -/* LOC_SED: - * This symbol holds the complete pathname to the sed program. - */ -#define LOC_SED "" /**/ - -/* HAS_ALARM: - * This symbol, if defined, indicates that the alarm routine is - * available. - */ -/*#define HAS_ALARM /**/ - -/* HASATTRIBUTE: - * This symbol indicates the C compiler can check for function attributes, - * such as printf formats. This is normally only supported by GNU cc. - */ -/*#define HASATTRIBUTE /**/ -#ifndef HASATTRIBUTE -#define __attribute__(_arg_) -#endif - -/* HAS_BCMP: - * This symbol is defined if the bcmp() routine is available to - * compare blocks of memory. - */ -/*#define HAS_BCMP /**/ - -/* HAS_BCOPY: - * This symbol is defined if the bcopy() routine is available to - * copy blocks of memory. - */ -/*#define HAS_BCOPY /**/ - -/* HAS_BZERO: - * This symbol is defined if the bzero() routine is available to - * set a memory block to 0. - */ -/*#define HAS_BZERO /**/ - -/* HAS_CHOWN: - * This symbol, if defined, indicates that the chown routine is - * available. - */ -/*#define HAS_CHOWN /**/ - -/* HAS_CHROOT: - * This symbol, if defined, indicates that the chroot routine is - * available. - */ -/*#define HAS_CHROOT /**/ - -/* HAS_CHSIZE: - * This symbol, if defined, indicates that the chsize routine is available - * to truncate files. You might need a -lx to get this routine. - */ -#define HAS_CHSIZE /**/ - -/* HASCONST: - * This symbol, if defined, indicates that this C compiler knows about - * the const type. There is no need to actually test for that symbol - * within your programs. The mere use of the "const" keyword will - * trigger the necessary tests. - */ -#define HASCONST /**/ -#ifndef HASCONST -#define const -#endif - -/* HAS_CRYPT: - * This symbol, if defined, indicates that the crypt routine is available - * to encrypt passwords and the like. - */ -/*#define HAS_CRYPT /**/ - -/* HAS_CUSERID: - * This symbol, if defined, indicates that the cuserid routine is - * available to get character login names. - */ -/*#define HAS_CUSERID /**/ - -/* HAS_DBL_DIG: - * This symbol, if defined, indicates that this system's <float.h> - * or <limits.h> defines the symbol DBL_DIG, which is the number - * of significant digits in a double precision number. If this - * symbol is not defined, a guess of 15 is usually pretty good. - */ -#define HAS_DBL_DIG /**/ - -/* HAS_DIFFTIME: - * This symbol, if defined, indicates that the difftime routine is - * available. - */ -#define HAS_DIFFTIME /**/ - -/* HAS_DLERROR: - * This symbol, if defined, indicates that the dlerror routine is - * available to return a string describing the last error that - * occurred from a call to dlopen(), dlclose() or dlsym(). - */ -#define HAS_DLERROR /**/ - -/* HAS_DUP2: - * This symbol, if defined, indicates that the dup2 routine is - * available to duplicate file descriptors. - */ -#define HAS_DUP2 /**/ - -/* HAS_FCHMOD: - * This symbol, if defined, indicates that the fchmod routine is available - * to change mode of opened files. If unavailable, use chmod(). - */ -/*#define HAS_FCHMOD /**/ - -/* HAS_FCHOWN: - * This symbol, if defined, indicates that the fchown routine is available - * to change ownership of opened files. If unavailable, use chown(). - */ -/*#define HAS_FCHOWN /**/ - -/* HAS_FCNTL: - * This symbol, if defined, indicates to the C program that - * the fcntl() function exists. - */ -/*#define HAS_FCNTL /**/ - -/* HAS_FGETPOS: - * This symbol, if defined, indicates that the fgetpos routine is - * available to get the file position indicator, similar to ftell(). - */ -#define HAS_FGETPOS /**/ - -/* HAS_FLOCK: - * This symbol, if defined, indicates that the flock routine is - * available to do file locking. - */ -/*#define HAS_FLOCK /**/ - -/* HAS_FORK: - * This symbol, if defined, indicates that the fork routine is - * available. - */ -/*#define HAS_FORK /**/ - -/* HAS_FSETPOS: - * This symbol, if defined, indicates that the fsetpos routine is - * available to set the file position indicator, similar to fseek(). - */ -#define HAS_FSETPOS /**/ - -/* HAS_GETTIMEOFDAY: - * This symbol, if defined, indicates that the gettimeofday() system - * call is available for a sub-second accuracy clock. Usually, the file - * <sys/resource.h> needs to be included (see I_SYS_RESOURCE). - * The type "Timeval" should be used to refer to "struct timeval". - */ -/*#define HAS_GETTIMEOFDAY /**/ -#ifdef HAS_GETTIMEOFDAY -#define Timeval struct timeval /* Structure used by gettimeofday() */ -#endif - -/* HAS_GETGROUPS: - * This symbol, if defined, indicates that the getgroups() routine is - * available to get the list of process groups. If unavailable, multiple - * groups are probably not supported. - */ -/*#define HAS_GETGROUPS /**/ - -/* HAS_GETLOGIN: - * This symbol, if defined, indicates that the getlogin routine is - * available to get the login name. - */ -#define HAS_GETLOGIN /**/ - -/* HAS_GETPGID: - * This symbol, if defined, indicates to the C program that - * the getpgid(pid) function is available to get the - * process group id. - */ -/*#define HAS_GETPGID /**/ - -/* HAS_GETPGRP2: - * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX) - * routine is available to get the current process group. - */ -/*#define HAS_GETPGRP2 /**/ - -/* HAS_GETPPID: - * This symbol, if defined, indicates that the getppid routine is - * available to get the parent process ID. - */ -/*#define HAS_GETPPID /**/ - -/* HAS_GETPRIORITY: - * This symbol, if defined, indicates that the getpriority routine is - * available to get a process's priority. - */ -/*#define HAS_GETPRIORITY /**/ - -/* HAS_INET_ATON: - * This symbol, if defined, indicates to the C program that the - * inet_aton() function is available to parse IP address "dotted-quad" - * strings. - */ -/*#define HAS_INET_ATON /**/ - -/* HAS_KILLPG: - * This symbol, if defined, indicates that the killpg routine is available - * to kill process groups. If unavailable, you probably should use kill - * with a negative process number. - */ -/*#define HAS_KILLPG /**/ - -/* HAS_LINK: - * This symbol, if defined, indicates that the link routine is - * available to create hard links. - */ -#define HAS_LINK /**/ - -/* HAS_LOCALECONV: - * This symbol, if defined, indicates that the localeconv routine is - * available for numeric and monetary formatting conventions. - */ -#define HAS_LOCALECONV /**/ - -/* HAS_LOCKF: - * This symbol, if defined, indicates that the lockf routine is - * available to do file locking. - */ -/*#define HAS_LOCKF /**/ - -/* HAS_LSTAT: - * This symbol, if defined, indicates that the lstat routine is - * available to do file stats on symbolic links. - */ -/*#define HAS_LSTAT /**/ - -/* HAS_MBLEN: - * This symbol, if defined, indicates that the mblen routine is available - * to find the number of bytes in a multibye character. - */ -#define HAS_MBLEN /**/ - -/* HAS_MBSTOWCS: - * This symbol, if defined, indicates that the mbstowcs routine is - * available to covert a multibyte string into a wide character string. - */ -#define HAS_MBSTOWCS /**/ - -/* HAS_MBTOWC: - * This symbol, if defined, indicates that the mbtowc routine is available - * to covert a multibyte to a wide character. - */ -#define HAS_MBTOWC /**/ - -/* HAS_MEMCMP: - * This symbol, if defined, indicates that the memcmp routine is available - * to compare blocks of memory. - */ -#define HAS_MEMCMP /**/ - -/* HAS_MEMCPY: - * This symbol, if defined, indicates that the memcpy routine is available - * to copy blocks of memory. - */ -#define HAS_MEMCPY /**/ - -/* HAS_MEMMOVE: - * This symbol, if defined, indicates that the memmove routine is available - * to copy potentially overlapping blocks of memory. This should be used - * only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your - * own version. - */ -#define HAS_MEMMOVE /**/ - -/* HAS_MEMSET: - * This symbol, if defined, indicates that the memset routine is available - * to set blocks of memory. - */ -#define HAS_MEMSET /**/ - -/* HAS_MKDIR: - * This symbol, if defined, indicates that the mkdir routine is available - * to create directories. Otherwise you should fork off a new process to - * exec /bin/mkdir. - */ -#define HAS_MKDIR /**/ - -/* HAS_MKFIFO: - * This symbol, if defined, indicates that the mkfifo routine is - * available to create FIFOs. Otherwise, mknod should be able to - * do it for you. However, if mkfifo is there, mknod might require - * super-user privileges which mkfifo will not. - */ -/*#define HAS_MKFIFO /**/ - -/* HAS_MKTIME: - * This symbol, if defined, indicates that the mktime routine is - * available. - */ -#define HAS_MKTIME /**/ - -/* HAS_MSYNC: - * This symbol, if defined, indicates that the msync system call is - * available to synchronize a mapped file. - */ -/*#define HAS_MSYNC /**/ - -/* HAS_MUNMAP: - * This symbol, if defined, indicates that the munmap system call is - * available to unmap a region, usually mapped by mmap(). - */ -/*#define HAS_MUNMAP /**/ - -/* HAS_NICE: - * This symbol, if defined, indicates that the nice routine is - * available. - */ -/*#define HAS_NICE /**/ - -/* HAS_PATHCONF: - * This symbol, if defined, indicates that pathconf() is available - * to determine file-system related limits and options associated - * with a given filename. - */ -/* HAS_FPATHCONF: - * This symbol, if defined, indicates that pathconf() is available - * to determine file-system related limits and options associated - * with a given open file descriptor. - */ -/*#define HAS_PATHCONF /**/ -/*#define HAS_FPATHCONF /**/ - -/* HAS_PAUSE: - * This symbol, if defined, indicates that the pause routine is - * available to suspend a process until a signal is received. - */ -#define HAS_PAUSE /**/ - -/* HAS_PIPE: - * This symbol, if defined, indicates that the pipe routine is - * available to create an inter-process channel. - */ -/*#define HAS_PIPE /**/ - -/* HAS_POLL: - * This symbol, if defined, indicates that the poll routine is - * available to poll active file descriptors. You may safely - * include <poll.h> when this symbol is defined. - */ -/*#define HAS_POLL /**/ - -/* HAS_READDIR: - * This symbol, if defined, indicates that the readdir routine is - * available to read directory entries. You may have to include - * <dirent.h>. See I_DIRENT. - */ -#define HAS_READDIR /**/ - -/* HAS_SEEKDIR: - * This symbol, if defined, indicates that the seekdir routine is - * available. You may have to include <dirent.h>. See I_DIRENT. - */ -#define HAS_SEEKDIR /**/ - -/* HAS_TELLDIR: - * This symbol, if defined, indicates that the telldir routine is - * available. You may have to include <dirent.h>. See I_DIRENT. - */ -#define HAS_TELLDIR /**/ - -/* HAS_REWINDDIR: - * This symbol, if defined, indicates that the rewinddir routine is - * available. You may have to include <dirent.h>. See I_DIRENT. - */ -#define HAS_REWINDDIR /**/ - -/* HAS_READLINK: - * This symbol, if defined, indicates that the readlink routine is - * available to read the value of a symbolic link. - */ -/*#define HAS_READLINK /**/ - -/* HAS_RENAME: - * This symbol, if defined, indicates that the rename routine is available - * to rename files. Otherwise you should do the unlink(), link(), unlink() - * trick. - */ -#define HAS_RENAME /**/ - -/* HAS_RMDIR: - * This symbol, if defined, indicates that the rmdir routine is - * available to remove directories. Otherwise you should fork off a - * new process to exec /bin/rmdir. - */ -#define HAS_RMDIR /**/ - -/* HAS_SELECT: - * This symbol, if defined, indicates that the select routine is - * available to select active file descriptors. If the timeout field - * is used, <sys/time.h> may need to be included. - */ -#define HAS_SELECT /**/ - -/* HAS_SETEGID: - * This symbol, if defined, indicates that the setegid routine is available - * to change the effective gid of the current program. - */ -/*#define HAS_SETEGID /**/ - -/* HAS_SETEUID: - * This symbol, if defined, indicates that the seteuid routine is available - * to change the effective uid of the current program. - */ -/*#define HAS_SETEUID /**/ - -/* HAS_SETLINEBUF: - * This symbol, if defined, indicates that the setlinebuf routine is - * available to change stderr or stdout from block-buffered or unbuffered - * to a line-buffered mode. - */ -/*#define HAS_SETLINEBUF /**/ - -/* HAS_SETLOCALE: - * This symbol, if defined, indicates that the setlocale routine is - * available to handle locale-specific ctype implementations. - */ -/*#define HAS_SETLOCALE /**/ - -/* HAS_SETPGID: - * This symbol, if defined, indicates that the setpgid(pid, gpid) - * routine is available to set process group ID. - */ -/*#define HAS_SETPGID /**/ - -/* HAS_SETPGRP2: - * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX) - * routine is available to set the current process group. - */ -/*#define HAS_SETPGRP2 /**/ - -/* HAS_SETPRIORITY: - * This symbol, if defined, indicates that the setpriority routine is - * available to set a process's priority. - */ -/*#define HAS_SETPRIORITY /**/ - -/* HAS_SETREGID: - * This symbol, if defined, indicates that the setregid routine is - * available to change the real and effective gid of the current - * process. - */ -/* HAS_SETRESGID: - * This symbol, if defined, indicates that the setresgid routine is - * available to change the real, effective and saved gid of the current - * process. - */ -/*#define HAS_SETREGID /**/ -/*#define HAS_SETRESGID /**/ - -/* HAS_SETREUID: - * This symbol, if defined, indicates that the setreuid routine is - * available to change the real and effective uid of the current - * process. - */ -/* HAS_SETRESUID: - * This symbol, if defined, indicates that the setresuid routine is - * available to change the real, effective and saved uid of the current - * process. - */ -/*#define HAS_SETREUID /**/ -/*#define HAS_SETRESUID /**/ - -/* HAS_SETRGID: - * This symbol, if defined, indicates that the setrgid routine is available - * to change the real gid of the current program. - */ -/*#define HAS_SETRGID /**/ - -/* HAS_SETRUID: - * This symbol, if defined, indicates that the setruid routine is available - * to change the real uid of the current program. - */ -/*#define HAS_SETRUID /**/ - -/* HAS_SETSID: - * This symbol, if defined, indicates that the setsid routine is - * available to set the process group ID. - */ -/*#define HAS_SETSID /**/ - -/* Shmat_t: - * This symbol holds the return type of the shmat() system call. - * Usually set to 'void *' or 'char *'. - */ -/* HAS_SHMAT_PROTOTYPE: - * This symbol, if defined, indicates that the sys/shm.h includes - * a prototype for shmat(). Otherwise, it is up to the program to - * guess one. Shmat_t shmat(int, Shmat_t, int) is a good guess, - * but not always right so it should be emitted by the program only - * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs. - */ -#define Shmat_t void * /**/ -/*#define HAS_SHMAT_PROTOTYPE /**/ - -/* HAS_STRCHR: - * This symbol is defined to indicate that the strchr()/strrchr() - * functions are available for string searching. If not, try the - * index()/rindex() pair. - */ -/* HAS_INDEX: - * This symbol is defined to indicate that the index()/rindex() - * functions are available for string searching. - */ -#define HAS_STRCHR /**/ -/*#define HAS_INDEX /**/ - -/* HAS_STRCOLL: - * This symbol, if defined, indicates that the strcoll routine is - * available to compare strings using collating information. - */ -/*#define HAS_STRCOLL /**/ - -/* USE_STRUCT_COPY: - * This symbol, if defined, indicates that this C compiler knows how - * to copy structures. If undefined, you'll need to use a block copy - * routine of some sort instead. - */ -#define USE_STRUCT_COPY /**/ - -/* HAS_STRTOD: - * This symbol, if defined, indicates that the strtod routine is - * available to provide better numeric string conversion than atof(). - */ -#define HAS_STRTOD /**/ - -/* HAS_STRTOL: - * This symbol, if defined, indicates that the strtol routine is available - * to provide better numeric string conversion than atoi() and friends. - */ -#define HAS_STRTOL /**/ - -/* HAS_STRXFRM: - * This symbol, if defined, indicates that the strxfrm() routine is - * available to transform strings. - */ -/*#define HAS_STRXFRM /**/ - -/* HAS_SYMLINK: - * This symbol, if defined, indicates that the symlink routine is available - * to create symbolic links. - */ -/*#define HAS_SYMLINK /**/ - -/* HAS_SYSCALL: - * This symbol, if defined, indicates that the syscall routine is - * available to call arbitrary system calls. If undefined, that's tough. - */ -/*#define HAS_SYSCALL /**/ - -/* HAS_SYSCONF: - * This symbol, if defined, indicates that sysconf() is available - * to determine system related limits and options. - */ -/*#define HAS_SYSCONF /**/ - -/* HAS_SYSTEM: - * This symbol, if defined, indicates that the system routine is - * available to issue a shell command. - */ -#define HAS_SYSTEM /**/ - -/* HAS_TCGETPGRP: - * This symbol, if defined, indicates that the tcgetpgrp routine is - * available to get foreground process group ID. - */ -/*#define HAS_TCGETPGRP /**/ - -/* HAS_TCSETPGRP: - * This symbol, if defined, indicates that the tcsetpgrp routine is - * available to set foreground process group ID. - */ -/*#define HAS_TCSETPGRP /**/ - -/* HAS_TRUNCATE: - * This symbol, if defined, indicates that the truncate routine is - * available to truncate files. - */ -/*#define HAS_TRUNCATE /**/ - -/* HAS_TZNAME: - * This symbol, if defined, indicates that the tzname[] array is - * available to access timezone names. - */ -#define HAS_TZNAME /**/ - -/* HAS_UMASK: - * This symbol, if defined, indicates that the umask routine is - * available to set and get the value of the file creation mask. - */ -#define HAS_UMASK /**/ - -/* HAS_USLEEP: - * This symbol, if defined, indicates that the usleep routine is - * available to let the process sleep on a sub-second accuracy. - */ -/*#define HAS_USLEEP /**/ - -/* HASVOLATILE: - * This symbol, if defined, indicates that this C compiler knows about - * the volatile declaration. - */ -#define HASVOLATILE /**/ -#ifndef HASVOLATILE -#define volatile -#endif - -/* HAS_WAIT4: - * This symbol, if defined, indicates that wait4() exists. - */ -/*#define HAS_WAIT4 /**/ - -/* HAS_WAITPID: - * This symbol, if defined, indicates that the waitpid routine is - * available to wait for child process. - */ -#define HAS_WAITPID /**/ - -/* HAS_WCSTOMBS: - * This symbol, if defined, indicates that the wcstombs routine is - * available to convert wide character strings to multibyte strings. - */ -#define HAS_WCSTOMBS /**/ - -/* HAS_WCTOMB: - * This symbol, if defined, indicates that the wctomb routine is available - * to covert a wide character to a multibyte. - */ -#define HAS_WCTOMB /**/ - -/* I_ARPA_INET: - * This symbol, if defined, indicates to the C program that it should - * include <arpa/inet.h> to get inet_addr and friends declarations. - */ -#define I_ARPA_INET /**/ - -/* I_DBM: - * This symbol, if defined, indicates that <dbm.h> exists and should - * be included. - */ -/* I_RPCSVC_DBM: - * This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and - * should be included. - */ -/*#define I_DBM /**/ -#define I_RPCSVC_DBM /**/ - -/* I_DIRENT: - * This symbol, if defined, indicates to the C program that it should - * include <dirent.h>. Using this symbol also triggers the definition - * of the Direntry_t define which ends up being 'struct dirent' or - * 'struct direct' depending on the availability of <dirent.h>. - */ -/* DIRNAMLEN: - * This symbol, if defined, indicates to the C program that the length - * of directory entry names is provided by a d_namlen field. Otherwise - * you need to do strlen() on the d_name field. - */ -/* Direntry_t: - * This symbol is set to 'struct direct' or 'struct dirent' depending on - * whether dirent is available or not. You should use this pseudo type to - * portably declare your directory entries. - */ -#define I_DIRENT /**/ -#define DIRNAMLEN /**/ -#define Direntry_t struct direct - -/* I_DLFCN: - * This symbol, if defined, indicates that <dlfcn.h> exists and should - * be included. - */ -#define I_DLFCN /**/ - -/* I_FCNTL: - * This manifest constant tells the C program to include <fcntl.h>. - */ -#define I_FCNTL /**/ - -/* I_FLOAT: - * This symbol, if defined, indicates to the C program that it should - * include <float.h> to get definition of symbols like DBL_MAX or - * DBL_MIN, i.e. machine dependent floating point values. - */ -#define I_FLOAT /**/ - -/* I_LIMITS: - * This symbol, if defined, indicates to the C program that it should - * include <limits.h> to get definition of symbols like WORD_BIT or - * LONG_MAX, i.e. machine dependant limitations. - */ -#define I_LIMITS /**/ - -/* I_LOCALE: - * This symbol, if defined, indicates to the C program that it should - * include <locale.h>. - */ -/*#define I_LOCALE /**/ - -/* I_MATH: - * This symbol, if defined, indicates to the C program that it should - * include <math.h>. - */ -#define I_MATH /**/ - -/* I_MEMORY: - * This symbol, if defined, indicates to the C program that it should - * include <memory.h>. - */ -/*#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 <net/errno.h> exists and - * should be included. - */ -/*#define I_NET_ERRNO /**/ - -/* I_NETINET_IN: - * This symbol, if defined, indicates to the C program that it should - * include <netinet/in.h>. Otherwise, you may try <sys/in.h>. - */ -/*#define I_NETINET_IN /**/ - -/* I_SFIO: - * This symbol, if defined, indicates to the C program that it should - * include <sfio.h>. - */ -/*#define I_SFIO /**/ - -/* I_STDDEF: - * This symbol, if defined, indicates that <stddef.h> exists and should - * be included. - */ -#define I_STDDEF /**/ - -/* I_STDLIB: - * This symbol, if defined, indicates that <stdlib.h> exists and should - * be included. - */ -#define I_STDLIB /**/ - -/* I_STRING: - * This symbol, if defined, indicates to the C program that it should - * include <string.h> (USG systems) instead of <strings.h> (BSD systems). - */ -#define I_STRING /**/ - -/* I_SYS_DIR: - * This symbol, if defined, indicates to the C program that it should - * include <sys/dir.h>. - */ -/*#define I_SYS_DIR /**/ - -/* I_SYS_FILE: - * This symbol, if defined, indicates to the C program that it should - * include <sys/file.h> to get definition of R_OK and friends. - */ -/*#define I_SYS_FILE /**/ - -/* I_SYS_IOCTL: - * This symbol, if defined, indicates that <sys/ioctl.h> exists and should - * be included. Otherwise, include <sgtty.h> or <termio.h>. - */ -/* I_SYS_SOCKIO: - * This symbol, if defined, indicates the <sys/sockio.h> should be included - * to get socket ioctl options, like SIOCATMARK. - */ -/*#define I_SYS_IOCTL /**/ -/*#define I_SYS_SOCKIO /**/ - -/* I_SYS_NDIR: - * This symbol, if defined, indicates to the C program that it should - * include <sys/ndir.h>. - */ -/*#define I_SYS_NDIR /**/ - -/* I_SYS_PARAM: - * This symbol, if defined, indicates to the C program that it should - * include <sys/param.h>. - */ -/*#define I_SYS_PARAM /**/ - -/* I_SYS_RESOURCE: - * This symbol, if defined, indicates to the C program that it should - * include <sys/resource.h>. - */ -/*#define I_SYS_RESOURCE /**/ - -/* I_SYS_SELECT: - * This symbol, if defined, indicates to the C program that it should - * include <sys/select.h> in order to get definition of struct timeval. - */ -/*#define I_SYS_SELECT /**/ - -/* I_SYS_STAT: - * This symbol, if defined, indicates to the C program that it should - * include <sys/stat.h>. - */ -#define I_SYS_STAT /**/ - -/* I_SYS_TIMES: - * This symbol, if defined, indicates to the C program that it should - * include <sys/times.h>. - */ -/*#define I_SYS_TIMES /**/ - -/* I_SYS_TYPES: - * This symbol, if defined, indicates to the C program that it should - * include <sys/types.h>. - */ -/*#define I_SYS_TYPES /**/ - -/* I_SYS_UN: - * This symbol, if defined, indicates to the C program that it should - * include <sys/un.h> to get UNIX domain socket definitions. - */ -/*#define I_SYS_UN /**/ - -/* I_SYS_WAIT: - * This symbol, if defined, indicates to the C program that it should - * include <sys/wait.h>. - */ -/*#define I_SYS_WAIT /**/ - -/* I_TERMIO: - * This symbol, if defined, indicates that the program should include - * <termio.h> rather than <sgtty.h>. There are also differences in - * the ioctl() calls that depend on the value of this symbol. - */ -/* I_TERMIOS: - * This symbol, if defined, indicates that the program should include - * the POSIX termios.h rather than sgtty.h or termio.h. - * There are also differences in the ioctl() calls that depend on the - * value of this symbol. - */ -/* I_SGTTY: - * This symbol, if defined, indicates that the program should include - * <sgtty.h> rather than <termio.h>. There are also differences in - * the ioctl() calls that depend on the value of this symbol. - */ -/*#define I_TERMIO /**/ -/*#define I_TERMIOS /**/ -/*#define I_SGTTY /**/ - -/* I_UNISTD: - * This symbol, if defined, indicates to the C program that it should - * include <unistd.h>. - */ -/*#define I_UNISTD /**/ - -/* I_UTIME: - * This symbol, if defined, indicates to the C program that it should - * include <utime.h>. - */ -#define I_UTIME /**/ - -/* I_VALUES: - * This symbol, if defined, indicates to the C program that it should - * include <values.h> to get definition of symbols like MINFLOAT or - * MAXLONG, i.e. machine dependant limitations. Probably, you - * should use <limits.h> instead, if it is available. - */ -/*#define I_VALUES /**/ - -/* I_VFORK: - * This symbol, if defined, indicates to the C program that it should - * include vfork.h. - */ -/*#define I_VFORK /**/ - -/* CAN_PROTOTYPE: - * If defined, this macro indicates that the C compiler can handle - * function prototypes. - */ -#define CAN_PROTOTYPE /**/ - -/* SH_PATH: - * This symbol contains the full pathname to the shell used on this - * on this system to execute Bourne shell scripts. Usually, this will be - * /bin/sh, though it's possible that some systems will have /bin/ksh, - * /bin/pdksh, /bin/ash, /bin/bash, or even something such as - * D:/bin/sh.exe. - */ -#define SH_PATH "cmd /x /c" /**/ - -/* INTSIZE: - * This symbol contains the value of sizeof(int) so that the C - * preprocessor can make decisions based on it. - */ -/* LONGSIZE: - * This symbol contains the value of sizeof(long) so that the C - * preprocessor can make decisions based on it. - */ -/* SHORTSIZE: - * This symbol contains the value of sizeof(short) so that the C - * preprocessor can make decisions based on it. - */ -#define INTSIZE 4 /**/ -#define LONGSIZE 4 /**/ -#define SHORTSIZE 2 /**/ - -/* MULTIARCH: - * This symbol, if defined, signifies that the build - * process will produce some binary files that are going to be - * used in a cross-platform environment. This is the case for - * example with the NeXT "fat" binaries that contain executables - * for several CPUs. - */ -/*#define MULTIARCH /**/ - -/* HAS_QUAD: - * This symbol, if defined, tells that there's a 64-bit integer type, - * Quad_t, and its unsigned counterpar, Uquad_t. QUADKIND will be one - * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, or QUAD_IS_INT64_T. - */ -/*#define HAS_QUAD /**/ -#ifdef HAS_QUAD -# define Quad_t __int64 /**/ -# define Uquad_t unsigned __int64 /**/ -# define QUADKIND 5 /**/ -# define QUAD_IS_INT 1 -# define QUAD_IS_LONG 2 -# define QUAD_IS_LONG_LONG 3 -# define QUAD_IS_INT64_T 4 -#endif - -/* HAS_ACCESSX: - * This symbol, if defined, indicates that the accessx routine is - * available to do extended access checks. - */ -/*#define HAS_ACCESSX /**/ - -/* HAS_EACCESS: - * This symbol, if defined, indicates that the eaccess routine is - * available to do extended access checks. - */ -/*#define HAS_EACCESS /**/ - -/* I_SYS_ACCESS: - * This symbol, if defined, indicates to the C program that it should - * include <sys/access.h>. - */ -/*#define I_SYS_ACCESS /**/ - -/* I_SYS_SECURITY: - * This symbol, if defined, indicates to the C program that it should - * include <sys/security.h>. - */ -/*#define I_SYS_SECURITY /**/ - -/* OSNAME: - * This symbol contains the name of the operating system, as determined - * by Configure. You shouldn't rely on it too much; the specific - * feature tests from Configure are generally more reliable. - */ -/* OSVERS: - * This symbol contains the version of the operating system, as determined - * by Configure. You shouldn't rely on it too much; the specific - * feature tests from Configure are generally more reliable. - */ -#define OSNAME "MSWin32" /**/ -#define OSVERS "4.0" /**/ - -/* MEM_ALIGNBYTES: - * This symbol contains the number of bytes required to align a - * double, or a long double when applicable. Usual values are 2, - * 4 and 8. The default is eight, for safety. - */ -#if defined(USE_CROSS_COMPILE) || defined(MULTIARCH) -# define MEM_ALIGNBYTES 8 -#else -#define MEM_ALIGNBYTES 8 -#endif - -/* ARCHLIB: - * This variable, if defined, holds the name of the directory in - * which the user wants to put architecture-dependent public - * library files for perl5. It is most often a local directory - * such as /usr/local/lib. Programs using this variable must be - * prepared to deal with filename expansion. If ARCHLIB is the - * same as PRIVLIB, it is not defined, since presumably the - * program already searches PRIVLIB. - */ -/* ARCHLIB_EXP: - * This symbol contains the ~name expanded version of ARCHLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -#define ARCHLIB "5.7.3\\lib" /**/ -/*#define ARCHLIB_EXP "" /**/ - -/* ARCHNAME: - * This symbol holds a string representing the architecture name. - * It may be used to construct an architecture-dependant pathname - * where library files may be held under a private library, for - * instance. - */ -#define ARCHNAME "HPC2000-WCE300-ARM" /**/ - -/* HAS_ATOLF: - * This symbol, if defined, indicates that the atolf routine is - * available to convert strings into long doubles. - */ -/*#define HAS_ATOLF /**/ - -/* HAS_ATOLL: - * This symbol, if defined, indicates that the atoll routine is - * available to convert strings into long longs. - */ -/*#define HAS_ATOLL /**/ - -/* BIN: - * This symbol holds the path of the bin directory where the package will - * be installed. Program must be prepared to deal with ~name substitution. - */ -/* BIN_EXP: - * This symbol is the filename expanded version of the BIN symbol, for - * programs that do not want to deal with that at run-time. - */ -#define BIN "5.7.3\\bin" /**/ -#define BIN_EXP "5.7.3\\bin" /**/ - -/* BYTEORDER: - * This symbol holds the hexadecimal constant defined in byteorder, - * i.e. 0x1234 or 0x4321, etc... - * If the compiler supports cross-compiling or multiple-architecture - * binaries (eg. on NeXT systems), use compiler-defined macros to - * determine the byte order. - * On NeXT 3.2 (and greater), you can build "Fat" Multiple Architecture - * Binaries (MAB) on either big endian or little endian machines. - * The endian-ness is available at compile-time. This only matters - * for perl, where the config.h can be generated and installed on - * one system, and used by a different architecture to build an - * extension. Older versions of NeXT that might not have - * defined either *_ENDIAN__ were all on Motorola 680x0 series, - * so the default case (for NeXT) is big endian to catch them. - * This might matter for NeXT 3.0. - */ -#if defined(USE_CROSS_COMPILE) || defined(MULTIARCH) -# ifdef __LITTLE_ENDIAN__ -# if LONGSIZE == 4 -# define BYTEORDER 0x1234 -# else -# if LONGSIZE == 8 -# define BYTEORDER 0x12345678 -# endif -# endif -# else -# ifdef __BIG_ENDIAN__ -# if LONGSIZE == 4 -# define BYTEORDER 0x4321 -# else -# if LONGSIZE == 8 -# define BYTEORDER 0x87654321 -# endif -# endif -# endif -# endif -# if !defined(BYTEORDER) && (defined(NeXT) || defined(__NeXT__)) -# define BYTEORDER 0x4321 -# endif -#else -#define BYTEORDER 0x1234 /* large digits for MSB */ -#endif /* NeXT */ - -/* CAT2: - * This macro catenates 2 tokens together. - */ -/* STRINGIFY: - * This macro surrounds its token with double quotes. - */ -#if 42 == 1 -#define CAT2(a,b) a/**/b -#define STRINGIFY(a) "a" - /* If you can get stringification with catify, tell me how! */ -#endif -#if 42 == 42 -#define PeRl_CaTiFy(a, b) a ## b -#define PeRl_StGiFy(a) #a -/* the additional level of indirection enables these macros to be - * used as arguments to other macros. See K&R 2nd ed., page 231. */ -#define CAT2(a,b) PeRl_CaTiFy(a,b) -#define StGiFy(a) PeRl_StGiFy(a) -#define STRINGIFY(a) PeRl_StGiFy(a) -#endif -#if 42 != 1 && 42 != 42 -# include "Bletch: How does this C preprocessor catenate tokens?" -#endif - -/* CPPSTDIN: - * This symbol contains the first part of the string which will invoke - * the C preprocessor on the standard input and produce to standard - * output. Typical value of "cc -E" or "/lib/cpp", but it can also - * call a wrapper. See CPPRUN. - */ -/* CPPMINUS: - * This symbol contains the second part of the string which will invoke - * the C preprocessor on the standard input and produce to standard - * output. This symbol will have the value "-" if CPPSTDIN needs a minus - * to specify standard input, otherwise the value is "". - */ -/* CPPRUN: - * This symbol contains the string which will invoke a C preprocessor on - * the standard input and produce to standard output. It needs to end - * with CPPLAST, after all other preprocessor flags have been specified. - * The main difference with CPPSTDIN is that this program will never be a - * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is - * available directly to the user. Note that it may well be different from - * the preprocessor used to compile the C program. - */ -/* CPPLAST: - * This symbol is intended to be used along with CPPRUN in the same manner - * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "". - */ -#define CPPSTDIN "cl -nologo -E" -#define CPPMINUS "" -#define CPPRUN "cl -nologo -E" -#define CPPLAST "" - -/* HAS__FWALK: - * This symbol, if defined, indicates that the _fwalk system call is - * available to apply a function to all the file handles. - */ -/*#define HAS__FWALK /**/ - -/* HAS_ACCESS: - * This manifest constant lets the C program know that the access() - * system call is available to check for accessibility using real UID/GID. - * (always present on UNIX.) - */ -#define HAS_ACCESS /**/ - -/* CASTI32: - * This symbol is defined if the C compiler can cast negative - * or large floating point numbers to 32-bit ints. - */ -/*#define CASTI32 /**/ - -/* CASTNEGFLOAT: - * This symbol is defined if the C compiler can cast negative - * numbers to unsigned longs, ints and shorts. - */ -/* CASTFLAGS: - * This symbol contains flags that say what difficulties the compiler - * has casting odd floating values to unsigned long: - * 0 = ok - * 1 = couldn't cast < 0 - * 2 = couldn't cast >= 0x80000000 - * 4 = couldn't cast in argument expression list - */ -#define CASTNEGFLOAT /**/ -#define CASTFLAGS 0 /**/ - -/* VOID_CLOSEDIR: - * This symbol, if defined, indicates that the closedir() routine - * does not return a value. - */ -/*#define VOID_CLOSEDIR /**/ - -/* HAS_STRUCT_CMSGHDR: - * This symbol, if defined, indicates that the struct cmsghdr - * is supported. - */ -/*#define HAS_STRUCT_CMSGHDR /**/ - -/* HAS_CSH: - * This symbol, if defined, indicates that the C-shell exists. - */ -/* CSH: - * This symbol, if defined, contains the full pathname of csh. - */ -/*#define HAS_CSH /**/ -#ifdef HAS_CSH -#define CSH "" /**/ -#endif - -/* DLSYM_NEEDS_UNDERSCORE: - * This symbol, if defined, indicates that we need to prepend an - * underscore to the symbol name before calling dlsym(). This only - * makes sense if you *have* dlsym, which we will presume is the - * case if you're using dl_dlopen.xs. - */ -/*#define DLSYM_NEEDS_UNDERSCORE /**/ - -/* HAS_DRAND48_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the drand48() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern double drand48(void); - */ -/*#define HAS_DRAND48_PROTO /**/ - -/* HAS_ENDGRENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for finalizing sequential access of the group database. - */ -/*#define HAS_ENDGRENT /**/ - -/* HAS_ENDHOSTENT: - * This symbol, if defined, indicates that the endhostent() routine is - * available to close whatever was being used for host queries. - */ -/*#define HAS_ENDHOSTENT /**/ - -/* HAS_ENDNETENT: - * This symbol, if defined, indicates that the endnetent() routine is - * available to close whatever was being used for network queries. - */ -/*#define HAS_ENDNETENT /**/ - -/* HAS_ENDPROTOENT: - * This symbol, if defined, indicates that the endprotoent() routine is - * available to close whatever was being used for protocol queries. - */ -/*#define HAS_ENDPROTOENT /**/ - -/* HAS_ENDPWENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for finalizing sequential access of the passwd database. - */ -/*#define HAS_ENDPWENT /**/ - -/* HAS_ENDSERVENT: - * This symbol, if defined, indicates that the endservent() routine is - * available to close whatever was being used for service queries. - */ -/*#define HAS_ENDSERVENT /**/ - -/* HAS_FCHDIR: - * This symbol, if defined, indicates that the fchdir routine is - * available to change directory using a file descriptor. - */ -/*#define HAS_FCHDIR /**/ - -/* FCNTL_CAN_LOCK: - * This symbol, if defined, indicates that fcntl() can be used - * for file locking. Normally on Unix systems this is defined. - * It may be undefined on VMS. - */ -/*#define FCNTL_CAN_LOCK /**/ - -/* HAS_FD_SET: - * This symbol, when defined, indicates presence of the fd_set typedef - * in <sys/types.h> - */ -#define HAS_FD_SET /**/ - -/* FLEXFILENAMES: - * This symbol, if defined, indicates that the system supports filenames - * longer than 14 characters. - */ -#define FLEXFILENAMES /**/ - -/* HAS_FPOS64_T: - * This symbol will be defined if the C compiler supports fpos64_t. - */ -/*#define HAS_FPOS64_T /**/ - -/* HAS_FREXPL: - * This symbol, if defined, indicates that the frexpl routine is - * available to break a long double floating-point number into - * a normalized fraction and an integral power of 2. - */ -/*#define HAS_FREXPL /**/ - -/* HAS_STRUCT_FS_DATA: - * This symbol, if defined, indicates that the struct fs_data - * to do statfs() is supported. - */ -/*#define HAS_STRUCT_FS_DATA /**/ - -/* HAS_FSEEKO: - * This symbol, if defined, indicates that the fseeko routine is - * available to fseek beyond 32 bits (useful for ILP32 hosts). - */ -/*#define HAS_FSEEKO /**/ - -/* HAS_FSTATFS: - * This symbol, if defined, indicates that the fstatfs routine is - * available to stat filesystems by file descriptors. - */ -/*#define HAS_FSTATFS /**/ - -/* HAS_FSYNC: - * This symbol, if defined, indicates that the fsync routine is - * available to write a file's modified data and attributes to - * permanent storage. - */ -/*#define HAS_FSYNC /**/ - -/* HAS_FTELLO: - * This symbol, if defined, indicates that the ftello routine is - * available to ftell beyond 32 bits (useful for ILP32 hosts). - */ -/*#define HAS_FTELLO /**/ - -/* Gconvert: - * This preprocessor macro is defined to convert a floating point - * number to a string without a trailing decimal point. This - * emulates the behavior of sprintf("%g"), but is sometimes much more - * efficient. If gconvert() is not available, but gcvt() drops the - * trailing decimal point, then gcvt() is used. If all else fails, - * a macro using sprintf("%g") is used. Arguments for the Gconvert - * macro are: value, number of digits, whether trailing zeros should - * be retained, and the output buffer. - * Possible values are: - * d_Gconvert='gconvert((x),(n),(t),(b))' - * d_Gconvert='gcvt((x),(n),(b))' - * d_Gconvert='sprintf((b),"%.*g",(n),(x))' - * The last two assume trailing zeros should not be kept. - */ -#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x)) - -/* HAS_GETCWD: - * This symbol, if defined, indicates that the getcwd routine is - * available to get the current working directory. - */ -/*#define HAS_GETCWD /**/ - -/* HAS_GETESPWNAM: - * This symbol, if defined, indicates that the getespwnam system call is - * available to retrieve enchanced (shadow) password entries by name. - */ -/*#define HAS_GETESPWNAM /**/ - -/* HAS_GETFSSTAT: - * This symbol, if defined, indicates that the getfsstat routine is - * available to stat filesystems in bulk. - */ -/*#define HAS_GETFSSTAT /**/ - -/* HAS_GETGRENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for sequential access of the group database. - */ -/*#define HAS_GETGRENT /**/ - -/* HAS_GETHOSTBYADDR: - * This symbol, if defined, indicates that the gethostbyaddr() routine is - * available to look up hosts by their IP addresses. - */ -#define HAS_GETHOSTBYADDR /**/ - -/* HAS_GETHOSTBYNAME: - * This symbol, if defined, indicates that the gethostbyname() routine is - * available to look up host names in some data base or other. - */ -#define HAS_GETHOSTBYNAME /**/ - -/* HAS_GETHOSTENT: - * This symbol, if defined, indicates that the gethostent() routine is - * available to look up host names in some data base or another. - */ -/*#define HAS_GETHOSTENT /**/ - -/* HAS_GETHOSTNAME: - * This symbol, if defined, indicates that the C program may use the - * gethostname() routine to derive the host name. See also HAS_UNAME - * and PHOSTNAME. - */ -/* HAS_UNAME: - * This symbol, if defined, indicates that the C program may use the - * uname() routine to derive the host name. See also HAS_GETHOSTNAME - * and PHOSTNAME. - */ -/* PHOSTNAME: - * This symbol, if defined, indicates the command to feed to the - * popen() routine to derive the host name. See also HAS_GETHOSTNAME - * and HAS_UNAME. Note that the command uses a fully qualified path, - * so that it is safe even if used by a process with super-user - * privileges. - */ -/* HAS_PHOSTNAME: - * This symbol, if defined, indicates that the C program may use the - * contents of PHOSTNAME as a command to feed to the popen() routine - * to derive the host name. - */ -#define HAS_GETHOSTNAME /**/ -#define HAS_UNAME /**/ -/*#define HAS_PHOSTNAME /**/ -#ifdef HAS_PHOSTNAME -#define PHOSTNAME "" /* How to get the host name */ -#endif - -/* HAS_GETHOST_PROTOS: - * This symbol, if defined, indicates that <netdb.h> includes - * prototypes for gethostent(), gethostbyname(), and - * gethostbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -#define HAS_GETHOST_PROTOS /**/ - -/* HAS_GETITIMER: - * This symbol, if defined, indicates that the getitimer routine is - * available to return interval timers. - */ -/*#define HAS_GETITIMER /**/ - -/* HAS_GETMNT: - * This symbol, if defined, indicates that the getmnt routine is - * available to get filesystem mount info by filename. - */ -/*#define HAS_GETMNT /**/ - -/* HAS_GETMNTENT: - * This symbol, if defined, indicates that the getmntent routine is - * available to iterate through mounted file systems to get their info. - */ -/*#define HAS_GETMNTENT /**/ - -/* HAS_GETNETBYADDR: - * This symbol, if defined, indicates that the getnetbyaddr() routine is - * available to look up networks by their IP addresses. - */ -/*#define HAS_GETNETBYADDR /**/ - -/* HAS_GETNETBYNAME: - * This symbol, if defined, indicates that the getnetbyname() routine is - * available to look up networks by their names. - */ -/*#define HAS_GETNETBYNAME /**/ - -/* HAS_GETNETENT: - * This symbol, if defined, indicates that the getnetent() routine is - * available to look up network names in some data base or another. - */ -/*#define HAS_GETNETENT /**/ - -/* HAS_GETNET_PROTOS: - * This symbol, if defined, indicates that <netdb.h> includes - * prototypes for getnetent(), getnetbyname(), and - * getnetbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -/*#define HAS_GETNET_PROTOS /**/ - -/* HAS_GETPAGESIZE: - * This symbol, if defined, indicates that the getpagesize system call - * is available to get system page size, which is the granularity of - * many memory management calls. - */ -/*#define HAS_GETPAGESIZE /**/ - -/* HAS_GETPROTOENT: - * This symbol, if defined, indicates that the getprotoent() routine is - * available to look up protocols in some data base or another. - */ -/*#define HAS_GETPROTOENT /**/ - -/* HAS_GETPGRP: - * This symbol, if defined, indicates that the getpgrp routine is - * available to get the current process group. - */ -/* USE_BSD_GETPGRP: - * This symbol, if defined, indicates that getpgrp needs one - * arguments whereas USG one needs none. - */ -/*#define HAS_GETPGRP /**/ -/*#define USE_BSD_GETPGRP /**/ - -/* HAS_GETPROTOBYNAME: - * This symbol, if defined, indicates that the getprotobyname() - * routine is available to look up protocols by their name. - */ -/* HAS_GETPROTOBYNUMBER: - * This symbol, if defined, indicates that the getprotobynumber() - * routine is available to look up protocols by their number. - */ -#define HAS_GETPROTOBYNAME /**/ -#define HAS_GETPROTOBYNUMBER /**/ - -/* HAS_GETPROTO_PROTOS: - * This symbol, if defined, indicates that <netdb.h> includes - * prototypes for getprotoent(), getprotobyname(), and - * getprotobyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -#define HAS_GETPROTO_PROTOS /**/ - -/* HAS_GETPRPWNAM: - * This symbol, if defined, indicates that the getprpwnam system call is - * available to retrieve protected (shadow) password entries by name. - */ -/*#define HAS_GETPRPWNAM /**/ - -/* HAS_GETPWENT: - * This symbol, if defined, indicates that the getpwent routine is - * available for sequential access of the passwd database. - * If this is not available, the older getpw() function may be available. - */ -/*#define HAS_GETPWENT /**/ - -/* HAS_GETSERVENT: - * This symbol, if defined, indicates that the getservent() routine is - * available to look up network services in some data base or another. - */ -/*#define HAS_GETSERVENT /**/ - -/* HAS_GETSERV_PROTOS: - * This symbol, if defined, indicates that <netdb.h> includes - * prototypes for getservent(), getservbyname(), and - * getservbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -#define HAS_GETSERV_PROTOS /**/ - -/* HAS_GETSPNAM: - * This symbol, if defined, indicates that the getspnam system call is - * available to retrieve SysV shadow password entries by name. - */ -/*#define HAS_GETSPNAM /**/ - -/* HAS_GETSERVBYNAME: - * This symbol, if defined, indicates that the getservbyname() - * routine is available to look up services by their name. - */ -/* HAS_GETSERVBYPORT: - * This symbol, if defined, indicates that the getservbyport() - * routine is available to look up services by their port. - */ -#define HAS_GETSERVBYNAME /**/ -#define HAS_GETSERVBYPORT /**/ - -/* HAS_GNULIBC: - * This symbol, if defined, indicates to the C program that - * the GNU C library is being used. - */ -/*#define HAS_GNULIBC /**/ -#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE) -# define _GNU_SOURCE -#endif -/* HAS_HASMNTOPT: - * This symbol, if defined, indicates that the hasmntopt routine is - * available to query the mount options of file systems. - */ -/*#define HAS_HASMNTOPT /**/ - -/* HAS_HTONL: - * This symbol, if defined, indicates that the htonl() routine (and - * friends htons() ntohl() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_HTONS: - * This symbol, if defined, indicates that the htons() routine (and - * friends htonl() ntohl() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_NTOHL: - * This symbol, if defined, indicates that the ntohl() routine (and - * friends htonl() htons() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_NTOHS: - * This symbol, if defined, indicates that the ntohs() routine (and - * friends htonl() htons() ntohl()) are available to do network - * order byte swapping. - */ -#define HAS_HTONL /**/ -#define HAS_HTONS /**/ -#define HAS_NTOHL /**/ -#define HAS_NTOHS /**/ - -/* HAS_INT64_T: - * This symbol will defined if the C compiler supports int64_t. - * Usually the <inttypes.h> needs to be included, but sometimes - * <sys/types.h> is enough. - */ -/*#define HAS_INT64_T /**/ - -/* HAS_ISASCII: - * This manifest constant lets the C program know that isascii - * is available. - */ -#define HAS_ISASCII /**/ - -/* HAS_ISNAN: - * This symbol, if defined, indicates that the isnan routine is - * available to check whether a double is a NaN. - */ -/*#define HAS_ISNAN /**/ - -/* HAS_ISNANL: - * This symbol, if defined, indicates that the isnanl routine is - * available to check whether a long double is a NaN. - */ -/*#define HAS_ISNANL /**/ - -/* HAS_LCHOWN: - * This symbol, if defined, indicates that the lchown routine is - * available to operate on a symbolic link (instead of following the - * link). - */ -/*#define HAS_LCHOWN /**/ - -/* HAS_LDBL_DIG: - * This symbol, if defined, indicates that this system's <float.h> - * or <limits.h> defines the symbol LDBL_DIG, which is the number - * of significant digits in a long double precision number. Unlike - * for DBL_DIG, there's no good guess for LDBL_DIG if it is undefined. - */ -#define HAS_LDBL_DIG /**/ - -/* HAS_LONG_DOUBLE: - * This symbol will be defined if the C compiler supports long - * doubles. - */ -/* LONG_DOUBLESIZE: - * This symbol contains the size of a long double, so that the - * C preprocessor can make decisions based on it. It is only - * defined if the system supports long doubles. - */ -/*#define HAS_LONG_DOUBLE /**/ -#ifdef HAS_LONG_DOUBLE -#define LONG_DOUBLESIZE 10 /**/ -#endif - -/* HAS_LONG_LONG: - * This symbol will be defined if the C compiler supports long long. - */ -/* LONGLONGSIZE: - * This symbol contains the size of a long long, so that the - * C preprocessor can make decisions based on it. It is only - * defined if the system supports long long. - */ -/*#define HAS_LONG_LONG /**/ -#ifdef HAS_LONG_LONG -#define LONGLONGSIZE 8 /**/ -#endif - -/* HAS_LSEEK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the lseek() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern off_t lseek(int, off_t, int); - */ -#define HAS_LSEEK_PROTO /**/ - -/* HAS_MADVISE: - * This symbol, if defined, indicates that the madvise system call is - * available to map a file into memory. - */ -/*#define HAS_MADVISE /**/ - -/* HAS_MEMCHR: - * This symbol, if defined, indicates that the memchr routine is available - * to locate characters within a C string. - */ -#define HAS_MEMCHR /**/ - -/* HAS_MKDTEMP: - * This symbol, if defined, indicates that the mkdtemp routine is - * available to exclusively create a uniquely named temporary directory. - */ -/*#define HAS_MKDTEMP /**/ - -/* HAS_MKSTEMP: - * This symbol, if defined, indicates that the mkstemp routine is - * available to exclusively create and open a uniquely named - * temporary file. - */ -/*#define HAS_MKSTEMP /**/ - -/* HAS_MKSTEMPS: - * This symbol, if defined, indicates that the mkstemps routine is - * available to excluslvely create and open a uniquely named - * (with a suffix) temporary file. - */ -/*#define HAS_MKSTEMPS /**/ - -/* HAS_MMAP: - * This symbol, if defined, indicates that the mmap system call is - * available to map a file into memory. - */ -/* Mmap_t: - * This symbol holds the return type of the mmap() system call - * (and simultaneously the type of the first argument). - * Usually set to 'void *' or 'cadd_t'. - */ -/*#define HAS_MMAP /**/ -#define Mmap_t void * /**/ - -/* HAS_MODFL: - * This symbol, if defined, indicates that the modfl routine is - * available to split a long double x into a fractional part f and - * an integer part i such that |f| < 1.0 and (f + i) = x. - */ -/* HAS_MODFL_POW32_BUG: - * This symbol, if defined, indicates that the modfl routine is - * broken for long doubles >= pow(2, 32). - * For example from 4294967303.150000 one would get 4294967302.000000 - * and 1.150000. The bug has been seen in certain versions of glibc, - * release 2.2.2 is known to be okay. - */ -/*#define HAS_MODFL /**/ -/*#define HAS_MODFL_POW32_BUG /**/ - -/* HAS_MPROTECT: - * This symbol, if defined, indicates that the mprotect system call is - * available to modify the access protection of a memory mapped file. - */ -/*#define HAS_MPROTECT /**/ - -/* HAS_MSG: - * This symbol, if defined, indicates that the entire msg*(2) library is - * supported (IPC mechanism based on message queues). - */ -/*#define HAS_MSG /**/ - -/* HAS_STRUCT_MSGHDR: - * This symbol, if defined, indicates that the struct msghdr - * is supported. - */ -/*#define HAS_STRUCT_MSGHDR /**/ - -/* HAS_OFF64_T: - * This symbol will be defined if the C compiler supports off64_t. - */ -/*#define HAS_OFF64_T /**/ - -/* HAS_OPEN3: - * This manifest constant lets the C program know that the three - * argument form of open(2) is available. - */ -/*#define HAS_OPEN3 /**/ - -/* OLD_PTHREAD_CREATE_JOINABLE: - * This symbol, if defined, indicates how to create pthread - * in joinable (aka undetached) state. NOTE: not defined - * if pthread.h already has defined PTHREAD_CREATE_JOINABLE - * (the new version of the constant). - * If defined, known values are PTHREAD_CREATE_UNDETACHED - * and __UNDETACHED. - */ -/*#define OLD_PTHREAD_CREATE_JOINABLE /**/ - -/* HAS_PTHREAD_YIELD: - * This symbol, if defined, indicates that the pthread_yield - * routine is available to yield the execution of the current - * thread. sched_yield is preferable to pthread_yield. - */ -/* SCHED_YIELD: - * This symbol defines the way to yield the execution of - * the current thread. Known ways are sched_yield, - * pthread_yield, and pthread_yield with NULL. - */ -/* HAS_SCHED_YIELD: - * This symbol, if defined, indicates that the sched_yield - * routine is available to yield the execution of the current - * thread. sched_yield is preferable to pthread_yield. - */ -/*#define HAS_PTHREAD_YIELD /**/ -#define SCHED_YIELD /**/ -/*#define HAS_SCHED_YIELD /**/ - -/* HAS_READV: - * This symbol, if defined, indicates that the readv routine is - * available to do gather reads. You will also need <sys/uio.h> - * and there I_SYSUIO. - */ -/*#define HAS_READV /**/ - -/* HAS_RECVMSG: - * This symbol, if defined, indicates that the recvmsg routine is - * available to send structured socket messages. - */ -/*#define HAS_RECVMSG /**/ - -/* HAS_SAFE_BCOPY: - * This symbol, if defined, indicates that the bcopy routine is available - * to copy potentially overlapping memory blocks. Normally, you should - * probably use memmove() or memcpy(). If neither is defined, roll your - * own version. - */ -/*#define HAS_SAFE_BCOPY /**/ - -/* HAS_SAFE_MEMCPY: - * This symbol, if defined, indicates that the memcpy routine is available - * to copy potentially overlapping memory blocks. If you need to - * copy overlapping memory blocks, you should check HAS_MEMMOVE and - * use memmove() instead, if available. - */ -/*#define HAS_SAFE_MEMCPY /**/ - -/* HAS_SANE_MEMCMP: - * This symbol, if defined, indicates that the memcmp routine is available - * and can be used to compare relative magnitudes of chars with their high - * bits set. If it is not defined, roll your own version. - */ -#define HAS_SANE_MEMCMP /**/ - -/* HAS_SBRK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the sbrk() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern void* sbrk(int); - * extern void* sbrk(size_t); - */ -/*#define HAS_SBRK_PROTO /**/ - -/* HAS_SEM: - * This symbol, if defined, indicates that the entire sem*(2) library is - * supported. - */ -/*#define HAS_SEM /**/ - -/* HAS_SENDMSG: - * This symbol, if defined, indicates that the sendmsg routine is - * available to send structured socket messages. - */ -/*#define HAS_SENDMSG /**/ - -/* HAS_SETGRENT: - * This symbol, if defined, indicates that the setgrent routine is - * available for initializing sequential access of the group database. - */ -/*#define HAS_SETGRENT /**/ - -/* HAS_SETGROUPS: - * This symbol, if defined, indicates that the setgroups() routine is - * available to set the list of process groups. If unavailable, multiple - * groups are probably not supported. - */ -/*#define HAS_SETGROUPS /**/ - -/* HAS_SETHOSTENT: - * This symbol, if defined, indicates that the sethostent() routine is - * available. - */ -/*#define HAS_SETHOSTENT /**/ - -/* HAS_SETITIMER: - * This symbol, if defined, indicates that the setitimer routine is - * available to set interval timers. - */ -/*#define HAS_SETITIMER /**/ - -/* HAS_SETNETENT: - * This symbol, if defined, indicates that the setnetent() routine is - * available. - */ -/*#define HAS_SETNETENT /**/ - -/* HAS_SETPROTOENT: - * This symbol, if defined, indicates that the setprotoent() routine is - * available. - */ -/*#define HAS_SETPROTOENT /**/ - -/* HAS_SETPGRP: - * This symbol, if defined, indicates that the setpgrp routine is - * available to set the current process group. - */ -/* USE_BSD_SETPGRP: - * This symbol, if defined, indicates that setpgrp needs two - * arguments whereas USG one needs none. See also HAS_SETPGID - * for a POSIX interface. - */ -/*#define HAS_SETPGRP /**/ -/*#define USE_BSD_SETPGRP /**/ - -/* HAS_SETPROCTITLE: - * This symbol, if defined, indicates that the setproctitle routine is - * available to set process title. - */ -/*#define HAS_SETPROCTITLE /**/ - -/* HAS_SETPWENT: - * This symbol, if defined, indicates that the setpwent routine is - * available for initializing sequential access of the passwd database. - */ -/*#define HAS_SETPWENT /**/ - -/* HAS_SETSERVENT: - * This symbol, if defined, indicates that the setservent() routine is - * available. - */ -/*#define HAS_SETSERVENT /**/ - -/* HAS_SETVBUF: - * This symbol, if defined, indicates that the setvbuf routine is - * available to change buffering on an open stdio stream. - * to a line-buffered mode. - */ -/*#define HAS_SETVBUF /**/ - -/* USE_SFIO: - * This symbol, if defined, indicates that sfio should - * be used. - */ -/*#define USE_SFIO /**/ - -/* HAS_SHM: - * This symbol, if defined, indicates that the entire shm*(2) library is - * supported. - */ -/*#define HAS_SHM /**/ - -/* HAS_SIGACTION: - * This symbol, if defined, indicates that Vr4's sigaction() routine - * is available. - */ -/*#define HAS_SIGACTION /**/ - -/* HAS_SIGSETJMP: - * This variable indicates to the C program that the sigsetjmp() - * routine is available to save the calling process's registers - * and stack environment for later use by siglongjmp(), and - * to optionally save the process's signal mask. See - * Sigjmp_buf, Sigsetjmp, and Siglongjmp. - */ -/* Sigjmp_buf: - * This is the buffer type to be used with Sigsetjmp and Siglongjmp. - */ -/* Sigsetjmp: - * This macro is used in the same way as sigsetjmp(), but will invoke - * traditional setjmp() if sigsetjmp isn't available. - * See HAS_SIGSETJMP. - */ -/* Siglongjmp: - * This macro is used in the same way as siglongjmp(), but will invoke - * traditional longjmp() if siglongjmp isn't available. - * See HAS_SIGSETJMP. - */ -/*#define HAS_SIGSETJMP /**/ -#ifdef HAS_SIGSETJMP -#define Sigjmp_buf sigjmp_buf -#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask)) -#define Siglongjmp(buf,retval) siglongjmp((buf),(retval)) -#else -#define Sigjmp_buf jmp_buf -#define Sigsetjmp(buf,save_mask) setjmp((buf)) -#define Siglongjmp(buf,retval) longjmp((buf),(retval)) -#endif - -/* HAS_SOCKET: - * This symbol, if defined, indicates that the BSD socket interface is - * supported. - */ -/* HAS_SOCKETPAIR: - * This symbol, if defined, indicates that the BSD socketpair() call is - * supported. - */ -/* HAS_MSG_CTRUNC: - * This symbol, if defined, indicates that the MSG_CTRUNC is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_DONTROUTE: - * This symbol, if defined, indicates that the MSG_DONTROUTE is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_OOB: - * This symbol, if defined, indicates that the MSG_OOB is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_PEEK: - * This symbol, if defined, indicates that the MSG_PEEK is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_PROXY: - * This symbol, if defined, indicates that the MSG_PROXY is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_SCM_RIGHTS: - * This symbol, if defined, indicates that the SCM_RIGHTS is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -#define HAS_SOCKET /**/ -/*#define HAS_SOCKETPAIR /**/ -/*#define HAS_MSG_CTRUNC /**/ -/*#define HAS_MSG_DONTROUTE /**/ -/*#define HAS_MSG_OOB /**/ -/*#define HAS_MSG_PEEK /**/ -/*#define HAS_MSG_PROXY /**/ -/*#define HAS_SCM_RIGHTS /**/ - -/* HAS_SOCKS5_INIT: - * This symbol, if defined, indicates that the socks5_init routine is - * available to initialize SOCKS 5. - */ -/*#define HAS_SOCKS5_INIT /**/ - -/* HAS_SQRTL: - * This symbol, if defined, indicates that the sqrtl routine is - * available to do long double square roots. - */ -/*#define HAS_SQRTL /**/ - -/* USE_STAT_BLOCKS: - * This symbol is defined if this system has a stat structure declaring - * st_blksize and st_blocks. - */ -#ifndef USE_STAT_BLOCKS -/*#define USE_STAT_BLOCKS /**/ -#endif - -/* HAS_STRUCT_STATFS_F_FLAGS: - * This symbol, if defined, indicates that the struct statfs - * does have the f_flags member containing the mount flags of - * the filesystem containing the file. - * This kind of struct statfs is coming from <sys/mount.h> (BSD 4.3), - * not from <sys/statfs.h> (SYSV). Older BSDs (like Ultrix) do not - * have statfs() and struct statfs, they have ustat() and getmnt() - * with struct ustat and struct fs_data. - */ -/*#define HAS_STRUCT_STATFS_F_FLAGS /**/ - -/* HAS_STRUCT_STATFS: - * This symbol, if defined, indicates that the struct statfs - * to do statfs() is supported. - */ -/*#define HAS_STRUCT_STATFS /**/ - -/* HAS_FSTATVFS: - * This symbol, if defined, indicates that the fstatvfs routine is - * available to stat filesystems by file descriptors. - */ -/*#define HAS_FSTATVFS /**/ - -/* USE_STDIO_PTR: - * This symbol is defined if the _ptr and _cnt fields (or similar) - * of the stdio FILE structure can be used to access the stdio buffer - * for a file handle. If this is defined, then the FILE_ptr(fp) - * and FILE_cnt(fp) macros will also be defined and should be used - * to access these fields. - */ -/* FILE_ptr: - * This macro is used to access the _ptr field (or equivalent) of the - * FILE structure pointed to by its argument. This macro will always be - * defined if USE_STDIO_PTR is defined. - */ -/* STDIO_PTR_LVALUE: - * This symbol is defined if the FILE_ptr macro can be used as an - * lvalue. - */ -/* FILE_cnt: - * This macro is used to access the _cnt field (or equivalent) of the - * FILE structure pointed to by its argument. This macro will always be - * defined if USE_STDIO_PTR is defined. - */ -/* STDIO_CNT_LVALUE: - * This symbol is defined if the FILE_cnt macro can be used as an - * lvalue. - */ -/* STDIO_PTR_LVAL_SETS_CNT: - * This symbol is defined if using the FILE_ptr macro as an lvalue - * to increase the pointer by n has the side effect of decreasing the - * value of File_cnt(fp) by n. - */ -/* STDIO_PTR_LVAL_NOCHANGE_CNT: - * This symbol is defined if using the FILE_ptr macro as an lvalue - * to increase the pointer by n leaves File_cnt(fp) unchanged. - */ -/*#define USE_STDIO_PTR /**/ -#ifdef USE_STDIO_PTR -#define FILE_ptr(fp) -/*#define STDIO_PTR_LVALUE /**/ -#define FILE_cnt(fp) -/*#define STDIO_CNT_LVALUE /**/ -/*#define STDIO_PTR_LVAL_SETS_CNT /**/ -/*#define STDIO_PTR_LVAL_NOCHANGE_CNT /**/ -#endif - -/* USE_STDIO_BASE: - * This symbol is defined if the _base field (or similar) of the - * stdio FILE structure can be used to access the stdio buffer for - * a file handle. If this is defined, then the FILE_base(fp) macro - * will also be defined and should be used to access this field. - * Also, the FILE_bufsiz(fp) macro will be defined and should be used - * to determine the number of bytes in the buffer. USE_STDIO_BASE - * will never be defined unless USE_STDIO_PTR is. - */ -/* FILE_base: - * This macro is used to access the _base field (or equivalent) of the - * FILE structure pointed to by its argument. This macro will always be - * defined if USE_STDIO_BASE is defined. - */ -/* FILE_bufsiz: - * This macro is used to determine the number of bytes in the I/O - * buffer pointed to by _base field (or equivalent) of the FILE - * structure pointed to its argument. This macro will always be defined - * if USE_STDIO_BASE is defined. - */ -/*#define USE_STDIO_BASE /**/ -#ifdef USE_STDIO_BASE -#define FILE_base(fp) -#define FILE_bufsiz(fp) -#endif - -/* HAS_STRERROR: - * This symbol, if defined, indicates that the strerror routine is - * available to translate error numbers to strings. See the writeup - * of Strerror() in this file before you try to define your own. - */ -/* HAS_SYS_ERRLIST: - * This symbol, if defined, indicates that the sys_errlist array is - * available to translate error numbers to strings. The extern int - * sys_nerr gives the size of that table. - */ -/* Strerror: - * This preprocessor symbol is defined as a macro if strerror() is - * not available to translate error numbers to strings but sys_errlist[] - * array is there. - */ -#define HAS_STRERROR /**/ -#define HAS_SYS_ERRLIST /**/ -#define Strerror(e) strerror(e) - -/* HAS_STRTOLD: - * This symbol, if defined, indicates that the strtold routine is - * available to convert strings to long doubles. - */ -/*#define HAS_STRTOLD /**/ - -/* HAS_STRTOLL: - * This symbol, if defined, indicates that the strtoll routine is - * available to convert strings to long longs. - */ -/*#define HAS_STRTOLL /**/ - -/* HAS_STRTOQ: - * This symbol, if defined, indicates that the strtoq routine is - * available to convert strings to long longs (quads). - */ -/*#define HAS_STRTOQ /**/ - -/* HAS_STRTOUL: - * This symbol, if defined, indicates that the strtoul routine is - * available to provide conversion of strings to unsigned long. - */ -#define HAS_STRTOUL /**/ - -/* HAS_STRTOULL: - * This symbol, if defined, indicates that the strtoull routine is - * available to convert strings to unsigned long longs. - */ -/*#define HAS_STRTOULL /**/ - -/* HAS_STRTOUQ: - * This symbol, if defined, indicates that the strtouq routine is - * available to convert strings to unsigned long longs (quads). - */ -/*#define HAS_STRTOUQ /**/ - -/* HAS_TELLDIR_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the telldir() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern long telldir(DIR*); - */ -#define HAS_TELLDIR_PROTO /**/ - -/* Time_t: - * This symbol holds the type returned by time(). It can be long, - * or time_t on BSD sites (in which case <sys/types.h> should be - * included). - */ -#define Time_t time_t /* Time type */ - -/* HAS_TIMES: - * This symbol, if defined, indicates that the times() routine exists. - * Note that this became obsolete on some systems (SUNOS), which now - * use getrusage(). It may be necessary to include <sys/times.h>. - */ -#define HAS_TIMES /**/ - -/* HAS_UALARM: - * This symbol, if defined, indicates that the ualarm routine is - * available to do alarms with microsecond granularity. - */ -/*#define HAS_UALARM /**/ - -/* HAS_UNION_SEMUN: - * This symbol, if defined, indicates that the union semun is - * defined by including <sys/sem.h>. If not, the user code - * probably needs to define it as: - * union semun { - * int val; - * struct semid_ds *buf; - * unsigned short *array; - * } - */ -/* USE_SEMCTL_SEMUN: - * This symbol, if defined, indicates that union semun is - * used for semctl IPC_STAT. - */ -/* USE_SEMCTL_SEMID_DS: - * This symbol, if defined, indicates that struct semid_ds * is - * used for semctl IPC_STAT. - */ -#define HAS_UNION_SEMUN /**/ -/*#define USE_SEMCTL_SEMUN /**/ -/*#define USE_SEMCTL_SEMID_DS /**/ - -/* HAS_USTAT: - * This symbol, if defined, indicates that the ustat system call is - * available to query file system statistics by dev_t. - */ -/*#define HAS_USTAT /**/ - -/* HAS_VFORK: - * This symbol, if defined, indicates that vfork() exists. - */ -/*#define HAS_VFORK /**/ - -/* Signal_t: - * This symbol's value is either "void" or "int", corresponding to the - * appropriate return type of a signal handler. Thus, you can declare - * a signal handler using "Signal_t (*handler)()", and define the - * handler using "Signal_t handler(sig)". - */ -#define Signal_t void /* Signal handler's return type */ - -/* HAS_VPRINTF: - * This symbol, if defined, indicates that the vprintf routine is available - * to printf with a pointer to an argument list. If unavailable, you - * may need to write your own, probably in terms of _doprnt(). - */ -/* USE_CHAR_VSPRINTF: - * This symbol is defined if this system has vsprintf() returning type - * (char*). The trend seems to be to declare it as "int vsprintf()". It - * is up to the package author to declare vsprintf correctly based on the - * symbol. - */ -#define HAS_VPRINTF /**/ -/*#define USE_CHAR_VSPRINTF /**/ - -/* HAS_WRITEV: - * This symbol, if defined, indicates that the writev routine is - * available to do scatter writes. - */ -/*#define HAS_WRITEV /**/ - -/* USE_DYNAMIC_LOADING: - * This symbol, if defined, indicates that dynamic loading of - * some sort is available. - */ -#define USE_DYNAMIC_LOADING /**/ - -/* DOUBLESIZE: - * This symbol contains the size of a double, so that the C preprocessor - * can make decisions based on it. - */ -#define DOUBLESIZE 8 /**/ - -/* EBCDIC: - * This symbol, if defined, indicates that this system uses - * EBCDIC encoding. - */ -/*#define EBCDIC /**/ - -/* FFLUSH_NULL: - * This symbol, if defined, tells that fflush(NULL) does flush - * all pending stdio output. - */ -/* FFLUSH_ALL: - * This symbol, if defined, tells that to flush - * all pending stdio output one must loop through all - * the stdio file handles stored in an array and fflush them. - * Note that if fflushNULL is defined, fflushall will not - * even be probed for and will be left undefined. - */ -#define FFLUSH_NULL /**/ -/*#define FFLUSH_ALL /**/ - -/* Fpos_t: - * This symbol holds the type used to declare file positions in libc. - * It can be fpos_t, long, uint, etc... It may be necessary to include - * <sys/types.h> to get any typedef'ed information. - */ -#define Fpos_t fpos_t /* File position type */ - -/* Gid_t_f: - * This symbol defines the format string used for printing a Gid_t. - */ -#define Gid_t_f "ld" /**/ - -/* Gid_t_sign: - * This symbol holds the signedess of a Gid_t. - * 1 for unsigned, -1 for signed. - */ -#define Gid_t_sign -1 /* GID sign */ - -/* Gid_t_size: - * This symbol holds the size of a Gid_t in bytes. - */ -#define Gid_t_size 4 /* GID size */ - -/* Gid_t: - * This symbol holds the return type of getgid() and the type of - * argument to setrgid() and related functions. Typically, - * it is the type of group ids in the kernel. It can be int, ushort, - * gid_t, etc... It may be necessary to include <sys/types.h> to get - * any typedef'ed information. - */ -#define Gid_t gid_t /* Type for getgid(), etc... */ - -/* Groups_t: - * This symbol holds the type used for the second argument to - * getgroups() and setgroups(). Usually, this is the same as - * gidtype (gid_t) , but sometimes it isn't. - * It can be int, ushort, gid_t, etc... - * It may be necessary to include <sys/types.h> to get any - * typedef'ed information. This is only required if you have - * getgroups() or setgroups().. - */ -#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS) -#define Groups_t gid_t /* Type for 2nd arg to [sg]etgroups() */ -#endif - -/* DB_Prefix_t: - * This symbol contains the type of the prefix structure element - * in the <db.h> 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 <db.h> header file. In older versions of DB, it was - * int, while in newer ones it is size_t. - */ -/* DB_VERSION_MAJOR_CFG: - * This symbol, if defined, defines the major version number of - * Berkeley DB found in the <db.h> header when Perl was configured. - */ -/* DB_VERSION_MINOR_CFG: - * This symbol, if defined, defines the minor version number of - * Berkeley DB found in the <db.h> header when Perl was configured. - * For DB version 1 this is always 0. - */ -/* DB_VERSION_PATCH_CFG: - * This symbol, if defined, defines the patch version number of - * Berkeley DB found in the <db.h> header when Perl was configured. - * For DB version 1 this is always 0. - */ -#define DB_Hash_t int /**/ -#define DB_Prefix_t int /**/ -#define DB_VERSION_MAJOR_CFG undef /**/ -#define DB_VERSION_MINOR_CFG undef /**/ -#define DB_VERSION_PATCH_CFG undef /**/ - -/* I_GRP: - * This symbol, if defined, indicates to the C program that it should - * include <grp.h>. - */ -/* GRPASSWD: - * This symbol, if defined, indicates to the C program that struct group - * in <grp.h> contains gr_passwd. - */ -/*#define I_GRP /**/ -/*#define GRPASSWD /**/ - -/* I_IEEEFP: - * This symbol, if defined, indicates that <ieeefp.h> exists and - * should be included. - */ -/*#define I_IEEEFP /**/ - -/* I_INTTYPES: - * This symbol, if defined, indicates to the C program that it should - * include <inttypes.h>. - */ -/*#define I_INTTYPES /**/ - -/* I_LIBUTIL: - * This symbol, if defined, indicates that <libutil.h> exists and - * should be included. - */ -/*#define I_LIBUTIL /**/ - -/* I_MACH_CTHREADS: - * This symbol, if defined, indicates to the C program that it should - * include <mach/cthreads.h>. - */ -/*#define I_MACH_CTHREADS /**/ - -/* I_MNTENT: - * This symbol, if defined, indicates that <mntent.h> exists and - * should be included. - */ -/*#define I_MNTENT /**/ - -/* I_NETDB: - * This symbol, if defined, indicates that <netdb.h> exists and - * should be included. - */ -/*#define I_NETDB /**/ - -/* I_NETINET_TCP: - * This symbol, if defined, indicates to the C program that it should - * include <netinet/tcp.h>. - */ -/*#define I_NETINET_TCP /**/ - -/* I_POLL: - * This symbol, if defined, indicates that <poll.h> exists and - * should be included. - */ -/*#define I_POLL /**/ - -/* I_PROT: - * This symbol, if defined, indicates that <prot.h> exists and - * should be included. - */ -/*#define I_PROT /**/ - -/* I_PTHREAD: - * This symbol, if defined, indicates to the C program that it should - * include <pthread.h>. - */ -/*#define I_PTHREAD /**/ - -/* I_PWD: - * This symbol, if defined, indicates to the C program that it should - * include <pwd.h>. - */ -/* PWQUOTA: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_quota. - */ -/* PWAGE: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_age. - */ -/* PWCHANGE: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_change. - */ -/* PWCLASS: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_class. - */ -/* PWEXPIRE: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_expire. - */ -/* PWCOMMENT: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_comment. - */ -/* PWGECOS: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_gecos. - */ -/* PWPASSWD: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_passwd. - */ -/*#define I_PWD /**/ -/*#define PWQUOTA /**/ -/*#define PWAGE /**/ -/*#define PWCHANGE /**/ -/*#define PWCLASS /**/ -/*#define PWEXPIRE /**/ -/*#define PWCOMMENT /**/ -/*#define PWGECOS /**/ -/*#define PWPASSWD /**/ - -/* I_SHADOW: - * This symbol, if defined, indicates that <shadow.h> exists and - * should be included. - */ -/*#define I_SHADOW /**/ - -/* I_SOCKS: - * This symbol, if defined, indicates that <socks.h> exists and - * should be included. - */ -/*#define I_SOCKS /**/ - -/* I_SUNMATH: - * This symbol, if defined, indicates that <sunmath.h> exists and - * should be included. - */ -/*#define I_SUNMATH /**/ - -/* I_SYSLOG: - * This symbol, if defined, indicates that <syslog.h> exists and - * should be included. - */ -/*#define I_SYSLOG /**/ - -/* I_SYSMODE: - * This symbol, if defined, indicates that <sys/mode.h> exists and - * should be included. - */ -/*#define I_SYSMODE /**/ - -/* I_SYS_MOUNT: - * This symbol, if defined, indicates that <sys/mount.h> exists and - * should be included. - */ -/*#define I_SYS_MOUNT /**/ - -/* I_SYS_STATFS: - * This symbol, if defined, indicates that <sys/statfs.h> exists. - */ -/*#define I_SYS_STATFS /**/ - -/* I_SYS_STATVFS: - * This symbol, if defined, indicates that <sys/statvfs.h> exists and - * should be included. - */ -/*#define I_SYS_STATVFS /**/ - -/* I_SYSUIO: - * This symbol, if defined, indicates that <sys/uio.h> exists and - * should be included. - */ -/*#define I_SYSUIO /**/ - -/* I_SYSUTSNAME: - * This symbol, if defined, indicates that <sys/utsname.h> exists and - * should be included. - */ -/*#define I_SYSUTSNAME /**/ - -/* I_SYS_VFS: - * This symbol, if defined, indicates that <sys/vfs.h> exists and - * should be included. - */ -/*#define I_SYS_VFS /**/ - -/* I_TIME: - * This symbol, if defined, indicates to the C program that it should - * include <time.h>. - */ -/* I_SYS_TIME: - * This symbol, if defined, indicates to the C program that it should - * include <sys/time.h>. - */ -/* I_SYS_TIME_KERNEL: - * This symbol, if defined, indicates to the C program that it should - * include <sys/time.h> with KERNEL defined. - */ -/*#define I_TIME /**/ -/*#define I_SYS_TIME /**/ -/*#define I_SYS_TIME_KERNEL /**/ - -/* I_USTAT: - * This symbol, if defined, indicates that <ustat.h> exists and - * should be included. - */ -/*#define I_USTAT /**/ - -/* PERL_INC_VERSION_LIST: - * This variable specifies the list of subdirectories in over - * which perl.c:incpush() and lib/lib.pm will automatically - * search when adding directories to @INC, in a format suitable - * for a C initialization string. See the inc_version_list entry - * in Porting/Glossary for more details. - */ -#define PERL_INC_VERSION_LIST 0 /**/ - -/* INSTALL_USR_BIN_PERL: - * This symbol, if defined, indicates that Perl is to be installed - * also as /usr/bin/perl. - */ -/*#define INSTALL_USR_BIN_PERL /**/ - -/* PERL_PRIfldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'f') for output. - */ -/* PERL_PRIgldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'g') for output. - */ -/* PERL_PRIeldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'e') for output. - */ -/* PERL_SCNfldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'f') for input. - */ -/*#define PERL_PRIfldbl "f" /**/ -/*#define PERL_PRIgldbl "g" /**/ -/*#define PERL_PRIeldbl "e" /**/ -/*#define PERL_SCNfldbl undef /**/ - -/* Off_t: - * This symbol holds the type used to declare offsets in the kernel. - * It can be int, long, off_t, etc... It may be necessary to include - * <sys/types.h> to get any typedef'ed information. - */ -/* LSEEKSIZE: - * This symbol holds the number of bytes used by the Off_t. - */ -/* Off_t_size: - * This symbol holds the number of bytes used by the Off_t. - */ -#define Off_t long /* <offset> type */ -#define LSEEKSIZE 4 /* <offset> size */ -#define Off_t_size 4 /* <offset> size */ - -/* Free_t: - * This variable contains the return type of free(). It is usually - * void, but occasionally int. - */ -/* Malloc_t: - * This symbol is the type of pointer returned by malloc and realloc. - */ -#define Malloc_t void * /**/ -#define Free_t void /**/ - -/* MYMALLOC: - * This symbol, if defined, indicates that we're using our own malloc. - */ -/*#define MYMALLOC /**/ - -/* Mode_t: - * This symbol holds the type used to declare file modes - * for systems calls. It is usually mode_t, but may be - * int or unsigned short. It may be necessary to include <sys/types.h> - * to get any typedef'ed information. - */ -#define Mode_t mode_t /* file mode parameter for system calls */ - -/* VAL_O_NONBLOCK: - * This symbol is to be used during open() or fcntl(F_SETFL) to turn on - * non-blocking I/O for the file descriptor. Note that there is no way - * back, i.e. you cannot turn it blocking again this way. If you wish to - * alternatively switch between blocking and non-blocking, use the - * ioctl(FIOSNBIO) call instead, but that is not supported by all devices. - */ -/* VAL_EAGAIN: - * This symbol holds the errno error code set by read() when no data was - * present on the non-blocking file descriptor. - */ -/* RD_NODATA: - * This symbol holds the return code from read() when no data is present - * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is - * not defined, then you can't distinguish between no data and EOF by - * issuing a read(). You'll have to find another way to tell for sure! - */ -/* EOF_NONBLOCK: - * This symbol, if defined, indicates to the C program that a read() on - * a non-blocking file descriptor will return 0 on EOF, and not the value - * held in RD_NODATA (-1 usually, in that case!). - */ -#define VAL_O_NONBLOCK O_NONBLOCK -#define VAL_EAGAIN EAGAIN -#define RD_NODATA -1 -#define EOF_NONBLOCK - -/* NEED_VA_COPY: - * This symbol, if defined, indicates that the system stores - * the variable argument list datatype, va_list, in a format - * that cannot be copied by simple assignment, so that some - * other means must be used when copying is required. - * As such systems vary in their provision (or non-provision) - * of copying mechanisms, handy.h defines a platform- - * independent macro, Perl_va_copy(src, dst), to do the job. - */ -/*#define NEED_VA_COPY /**/ - -/* Netdb_host_t: - * This symbol holds the type used for the 1st argument - * to gethostbyaddr(). - */ -/* Netdb_hlen_t: - * This symbol holds the type used for the 2nd argument - * to gethostbyaddr(). - */ -/* Netdb_name_t: - * This symbol holds the type used for the argument to - * gethostbyname(). - */ -/* Netdb_net_t: - * This symbol holds the type used for the 1st argument to - * getnetbyaddr(). - */ -#define Netdb_host_t char * /**/ -#define Netdb_hlen_t int /**/ -#define Netdb_name_t char * /**/ -#define Netdb_net_t long /**/ - -/* PERL_OTHERLIBDIRS: - * This variable contains a colon-separated set of paths for the perl - * binary to search for additional library files or modules. - * These directories will be tacked to the end of @INC. - * Perl will automatically search below each path for version- - * and architecture-specific directories. See PERL_INC_VERSION_LIST - * for more details. - */ -/*#define PERL_OTHERLIBDIRS "undef" /**/ - -/* IVTYPE: - * This symbol defines the C type used for Perl's IV. - */ -/* UVTYPE: - * This symbol defines the C type used for Perl's UV. - */ -/* I8TYPE: - * This symbol defines the C type used for Perl's I8. - */ -/* U8TYPE: - * This symbol defines the C type used for Perl's U8. - */ -/* I16TYPE: - * This symbol defines the C type used for Perl's I16. - */ -/* U16TYPE: - * This symbol defines the C type used for Perl's U16. - */ -/* I32TYPE: - * This symbol defines the C type used for Perl's I32. - */ -/* U32TYPE: - * This symbol defines the C type used for Perl's U32. - */ -/* I64TYPE: - * This symbol defines the C type used for Perl's I64. - */ -/* U64TYPE: - * This symbol defines the C type used for Perl's U64. - */ -/* NVTYPE: - * This symbol defines the C type used for Perl's NV. - */ -/* IVSIZE: - * This symbol contains the sizeof(IV). - */ -/* UVSIZE: - * This symbol contains the sizeof(UV). - */ -/* I8SIZE: - * This symbol contains the sizeof(I8). - */ -/* U8SIZE: - * This symbol contains the sizeof(U8). - */ -/* I16SIZE: - * This symbol contains the sizeof(I16). - */ -/* U16SIZE: - * This symbol contains the sizeof(U16). - */ -/* I32SIZE: - * This symbol contains the sizeof(I32). - */ -/* U32SIZE: - * This symbol contains the sizeof(U32). - */ -/* I64SIZE: - * This symbol contains the sizeof(I64). - */ -/* U64SIZE: - * This symbol contains the sizeof(U64). - */ -/* NVSIZE: - * This symbol contains the sizeof(NV). - */ -/* NV_PRESERVES_UV: - * This symbol, if defined, indicates that a variable of type NVTYPE - * can preserve all the bits of a variable of type UVTYPE. - */ -/* NV_PRESERVES_UV_BITS: - * This symbol contains the number of bits a variable of type NVTYPE - * can preserve of a variable of type UVTYPE. - */ -#define IVTYPE long /**/ -#define UVTYPE unsigned long /**/ -#define I8TYPE char /**/ -#define U8TYPE unsigned char /**/ -#define I16TYPE short /**/ -#define U16TYPE unsigned short /**/ -#define I32TYPE long /**/ -#define U32TYPE unsigned long /**/ -#ifdef HAS_QUAD -#define I64TYPE __int64 /**/ -#define U64TYPE unsigned __int64 /**/ -#endif -#define NVTYPE double /**/ -#define IVSIZE 4 /**/ -#define UVSIZE 4 /**/ -#define I8SIZE 1 /**/ -#define U8SIZE 1 /**/ -#define I16SIZE 2 /**/ -#define U16SIZE 2 /**/ -#define I32SIZE 4 /**/ -#define U32SIZE 4 /**/ -#ifdef HAS_QUAD -#define I64SIZE 8 /**/ -#define U64SIZE 8 /**/ -#endif -#define NVSIZE 8 /**/ -#define NV_PRESERVES_UV -#define NV_PRESERVES_UV_BITS undef - -/* IVdf: - * This symbol defines the format string used for printing a Perl IV - * as a signed decimal integer. - */ -/* UVuf: - * This symbol defines the format string used for printing a Perl UV - * as an unsigned decimal integer. - */ -/* UVof: - * This symbol defines the format string used for printing a Perl UV - * as an unsigned octal integer. - */ -/* UVxf: - * This symbol defines the format string used for printing a Perl UV - * as an unsigned hexadecimal integer in lowercase abcdef. - */ -/* UVXf: - * This symbol defines the format string used for printing a Perl UV - * as an unsigned hexadecimal integer in uppercase ABCDEF. - */ -/* NVef: - * This symbol defines the format string used for printing a Perl NV - * using %e-ish floating point format. - */ -/* NVff: - * This symbol defines the format string used for printing a Perl NV - * using %f-ish floating point format. - */ -/* NVgf: - * This symbol defines the format string used for printing a Perl NV - * using %g-ish floating point format. - */ -#define IVdf "ld" /**/ -#define UVuf "lu" /**/ -#define UVof "lo" /**/ -#define UVxf "lx" /**/ -#define UVXf undef /**/ -#define NVef "e" /**/ -#define NVff "f" /**/ -#define NVgf "g" /**/ - -/* Pid_t: - * This symbol holds the type used to declare process ids in the kernel. - * It can be int, uint, pid_t, etc... It may be necessary to include - * <sys/types.h> to get any typedef'ed information. - */ -#define Pid_t int /* PID type */ - -/* PRIVLIB: - * This symbol contains the name of the private library for this package. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. The program - * should be prepared to do ~ expansion. - */ -/* PRIVLIB_EXP: - * This symbol contains the ~name expanded version of PRIVLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -#define PRIVLIB "5.7.3\\lib" /**/ -#define PRIVLIB_EXP (win32_get_privlib("5.7.3")) /**/ - -/* PTRSIZE: - * This symbol contains the size of a pointer, so that the C preprocessor - * can make decisions based on it. It will be sizeof(void *) if - * the compiler supports (void *); otherwise it will be - * sizeof(char *). - */ -#define PTRSIZE 4 /**/ - -/* Drand01: - * This macro is to be used to generate uniformly distributed - * random numbers over the range [0., 1.[. You may have to supply - * an 'extern double drand48();' in your program since SunOS 4.1.3 - * doesn't provide you with anything relevant in its headers. - * See HAS_DRAND48_PROTO. - */ -/* Rand_seed_t: - * This symbol defines the type of the argument of the - * random seed function. - */ -/* seedDrand01: - * This symbol defines the macro to be used in seeding the - * random number generator (see Drand01). - */ -/* RANDBITS: - * This symbol indicates how many bits are produced by the - * function used to generate normalized random numbers. - * Values include 15, 16, 31, and 48. - */ -#define Drand01() (rand()/(double)((unsigned)1<<RANDBITS)) /**/ -#define Rand_seed_t unsigned /**/ -#define seedDrand01(x) srand((Rand_seed_t)x) /**/ -#define RANDBITS 15 /**/ - -/* SELECT_MIN_BITS: - * This symbol holds the minimum number of bits operated by select. - * That is, if you do select(n, ...), how many bits at least will be - * cleared in the masks if some activity is detected. Usually this - * is either n or 32*ceil(n/32), especially many little-endians do - * the latter. This is only useful if you have select(), naturally. - */ -#define SELECT_MIN_BITS 32 /**/ - -/* Select_fd_set_t: - * This symbol holds the type used for the 2nd, 3rd, and 4th - * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET - * is defined, and 'int *' otherwise. This is only useful if you - * have select(), of course. - */ -#define Select_fd_set_t Perl_fd_set * /**/ - -/* SIG_NAME: - * This symbol contains a list of signal names in order of - * signal number. This is intended - * to be used as a static array initialization, like this: - * char *sig_name[] = { SIG_NAME }; - * The signals in the list are separated with commas, and each signal - * is surrounded by double quotes. There is no leading SIG in the signal - * name, i.e. SIGQUIT is known as "QUIT". - * Gaps in the signal numbers (up to NSIG) are filled in with NUMnn, - * etc., where nn is the actual signal number (e.g. NUM37). - * The signal number for sig_name[i] is stored in sig_num[i]. - * The last element is 0 to terminate the list with a NULL. This - * corresponds to the 0 at the end of the sig_num list. - */ -/* SIG_NUM: - * This symbol contains a list of signal numbers, in the same order as the - * SIG_NAME list. It is suitable for static array initialization, as in: - * int sig_num[] = { SIG_NUM }; - * The signals in the list are separated with commas, and the indices - * within that list and the SIG_NAME list match, so it's easy to compute - * the signal name from a number or vice versa at the price of a small - * dynamic linear lookup. - * Duplicates are allowed, but are moved to the end of the list. - * The signal number corresponding to sig_name[i] is sig_number[i]. - * if (i < NSIG) then sig_number[i] == i. - * The last element is 0, corresponding to the 0 at the end of - * the sig_name list. - */ -/* SIG_SIZE: - * This variable contains the number of elements of the sig_name - * and sig_num arrays, excluding the final NULL entry. - */ -#define SIG_NAME "ZERO", "NUM01", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0 /**/ -#define 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, 20, 0 /**/ -#define SIG_SIZE 0 /**/ - -/* SITEARCH: - * This symbol contains the name of the private library for this package. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. The program - * should be prepared to do ~ expansion. - * The standard distribution will put nothing in this directory. - * After perl has been installed, users may install their own local - * architecture-dependent modules in this directory with - * MakeMaker Makefile.PL - * or equivalent. See INSTALL for details. - */ -/* SITEARCH_EXP: - * This symbol contains the ~name expanded version of SITEARCH, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -#define SITEARCH "\\site5.7.3\\lib" /**/ -/*#define SITEARCH_EXP "" /**/ - -/* SITELIB: - * This symbol contains the name of the private library for this package. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. The program - * should be prepared to do ~ expansion. - * The standard distribution will put nothing in this directory. - * After perl has been installed, users may install their own local - * architecture-independent modules in this directory with - * MakeMaker Makefile.PL - * or equivalent. See INSTALL for details. - */ -/* SITELIB_EXP: - * This symbol contains the ~name expanded version of SITELIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/* SITELIB_STEM: - * This define is SITELIB_EXP with any trailing version-specific component - * removed. The elements in inc_version_list (inc_version_list.U) can - * be tacked onto this variable to generate a list of directories to search. - */ -#define SITELIB "\\site5.7.3\\lib" /**/ -#define SITELIB_EXP (win32_get_sitelib("5.7.3")) /**/ -#define SITELIB_STEM "" /**/ - -/* Size_t_size: - * This symbol holds the size of a Size_t in bytes. - */ -#define Size_t_size 4 /**/ - -/* Size_t: - * This symbol holds the type used to declare length parameters - * for string functions. It is usually size_t, but may be - * unsigned long, int, etc. It may be necessary to include - * <sys/types.h> to get any typedef'ed information. - */ -#define Size_t size_t /* length paramater for string functions */ - -/* Sock_size_t: - * This symbol holds the type used for the size argument of - * various socket calls (just the base type, not the pointer-to). - */ -#define Sock_size_t int /**/ - -/* SSize_t: - * This symbol holds the type used by functions that return - * a count of bytes or an error condition. It must be a signed type. - * It is usually ssize_t, but may be long or int, etc. - * It may be necessary to include <sys/types.h> or <unistd.h> - * to get any typedef'ed information. - * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). - */ -#define SSize_t int /* signed count of bytes */ - -/* STARTPERL: - * This variable contains the string to put in front of a perl - * script to make sure (one hopes) that it runs with perl and not - * some shell. - */ -#define STARTPERL "#!perl" /**/ - -/* STDCHAR: - * This symbol is defined to be the type of char used in stdio.h. - * It has the values "unsigned char" or "char". - */ -#define STDCHAR char /**/ - -/* HAS_STDIO_STREAM_ARRAY: - * This symbol, if defined, tells that there is an array - * holding the stdio streams. - */ -/* STDIO_STREAM_ARRAY: - * This symbol tells the name of the array holding the stdio streams. - * Usual values include _iob, __iob, and __sF. - */ -/*#define HAS_STDIO_STREAM_ARRAY /**/ -#define STDIO_STREAM_ARRAY - -/* Uid_t_f: - * This symbol defines the format string used for printing a Uid_t. - */ -#define Uid_t_f "ld" /**/ - -/* Uid_t_sign: - * This symbol holds the signedess of a Uid_t. - * 1 for unsigned, -1 for signed. - */ -#define Uid_t_sign -1 /* UID sign */ - -/* Uid_t_size: - * This symbol holds the size of a Uid_t in bytes. - */ -#define Uid_t_size 4 /* UID size */ - -/* Uid_t: - * This symbol holds the type used to declare user ids in the kernel. - * It can be int, ushort, uid_t, etc... It may be necessary to include - * <sys/types.h> to get any typedef'ed information. - */ -#define Uid_t uid_t /* UID type */ - -/* USE_64_BIT_INT: - * This symbol, if defined, indicates that 64-bit integers should - * be used when available. If not defined, the native integers - * will be employed (be they 32 or 64 bits). The minimal possible - * 64-bitness is used, just enough to get 64-bit integers into Perl. - * This may mean using for example "long longs", while your memory - * may still be limited to 2 gigabytes. - */ -/* USE_64_BIT_ALL: - * This symbol, if defined, indicates that 64-bit integers should - * be used when available. If not defined, the native integers - * will be used (be they 32 or 64 bits). The maximal possible - * 64-bitness is employed: LP64 or ILP64, meaning that you will - * be able to use more than 2 gigabytes of memory. This mode is - * even more binary incompatible than USE_64_BIT_INT. You may not - * be able to run the resulting executable in a 32-bit CPU at all or - * you may need at least to reboot your OS to 64-bit mode. - */ -#ifndef USE_64_BIT_INT -/*#define USE_64_BIT_INT /**/ -#endif - -#ifndef USE_64_BIT_ALL -/*#define USE_64_BIT_ALL /**/ -#endif - -/* USE_LARGE_FILES: - * This symbol, if defined, indicates that large file support - * should be used when available. - */ -#ifndef USE_LARGE_FILES -/*#define USE_LARGE_FILES /**/ -#endif - -/* USE_LONG_DOUBLE: - * This symbol, if defined, indicates that long doubles should - * be used when available. - */ -#ifndef USE_LONG_DOUBLE -/*#define USE_LONG_DOUBLE /**/ -#endif - -/* USE_MORE_BITS: - * This symbol, if defined, indicates that 64-bit interfaces and - * long doubles should be used when available. - */ -#ifndef USE_MORE_BITS -/*#define USE_MORE_BITS /**/ -#endif - -/* MULTIPLICITY: - * This symbol, if defined, indicates that Perl should - * be built to use multiplicity. - */ -#ifndef MULTIPLICITY -/*#define MULTIPLICITY /**/ -#endif - -/* USE_PERLIO: - * This symbol, if defined, indicates that the PerlIO abstraction should - * be used throughout. If not defined, stdio should be - * used in a fully backward compatible manner. - */ -#ifndef USE_PERLIO -#define USE_PERLIO /**/ -#endif - -/* USE_SOCKS: - * This symbol, if defined, indicates that Perl should - * be built to use socks. - */ -#ifndef USE_SOCKS -/*#define USE_SOCKS /**/ -#endif - -/* USE_ITHREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the interpreter-based threading implementation. - */ -/* USE_5005THREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the 5.005-based threading implementation. - */ -/* OLD_PTHREADS_API: - * This symbol, if defined, indicates that Perl should - * be built to use the old draft POSIX threads API. - */ -/* USE_REENTRANT_API: - * This symbol, if defined, indicates that Perl should - * try to use the various _r versions of library functions. - * This is extremely experimental. - */ -/*#define USE_5005THREADS /**/ -/*#define USE_ITHREADS /**/ -#if defined(USE_5005THREADS) && !defined(USE_ITHREADS) -#define USE_5005THREADS /* until src is revised*/ -#endif -/*#define OLD_PTHREADS_API /**/ -/*#define USE_REENTRANT_API /**/ - -/* PERL_VENDORARCH: - * If defined, this symbol contains the name of a private library. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. - * It may have a ~ on the front. - * The standard distribution will put nothing in this directory. - * Vendors who distribute perl may wish to place their own - * architecture-dependent modules and extensions in this directory with - * MakeMaker Makefile.PL INSTALLDIRS=vendor - * or equivalent. See INSTALL for details. - */ -/* PERL_VENDORARCH_EXP: - * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/*#define PERL_VENDORARCH "" /**/ -/*#define PERL_VENDORARCH_EXP "" /**/ - -/* PERL_VENDORLIB_EXP: - * This symbol contains the ~name expanded version of VENDORLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/* PERL_VENDORLIB_STEM: - * This define is PERL_VENDORLIB_EXP with any trailing version-specific component - * removed. The elements in inc_version_list (inc_version_list.U) can - * be tacked onto this variable to generate a list of directories to search. - */ -/*#define PERL_VENDORLIB_EXP "" /**/ -/*#define PERL_VENDORLIB_STEM "" /**/ - -/* VOIDFLAGS: - * This symbol indicates how much support of the void type is given by this - * compiler. What various bits mean: - * - * 1 = supports declaration of void - * 2 = supports arrays of pointers to functions returning void - * 4 = supports comparisons between pointers to void functions and - * addresses of void functions - * 8 = suports declaration of generic void pointers - * - * The package designer should define VOIDUSED to indicate the requirements - * of the package. This can be done either by #defining VOIDUSED before - * including config.h, or by defining defvoidused in Myinit.U. If the - * latter approach is taken, only those flags will be tested. If the - * level of void support necessary is not present, defines void to int. - */ -#ifndef VOIDUSED -#define VOIDUSED 15 -#endif -#define VOIDFLAGS 15 -#if (VOIDFLAGS & VOIDUSED) != VOIDUSED -#define void int /* is void to be avoided? */ -#define M_VOID /* Xenix strikes again */ -#endif - -/* PERL_XS_APIVERSION: - * This variable contains the version of the oldest perl binary - * compatible with the present perl. perl.c:incpush() and - * lib/lib.pm will automatically search in \\site5.7.3\\lib for older - * directories across major versions back to xs_apiversion. - * This is only useful if you have a perl library directory tree - * structured like the default one. - * See INSTALL for how this works. - * The versioned site_perl directory was introduced in 5.005, - * so that is the lowest possible value. - * Since this can depend on compile time options - * it is set by Configure. Other non-default sources - * of potential incompatibility, such as multiplicity, threads, - * debugging, 64bits, sfio, etc., are not checked for currently, - * though in principle we could go snooping around in old - * Config.pm files. - */ -/* PERL_PM_APIVERSION: - * This variable contains the version of the oldest perl - * compatible with the present perl. (That is, pure perl modules - * written for pm_apiversion will still work for the current - * version). perl.c:incpush() and lib/lib.pm will automatically - * search in \\site5.7.3\\lib for older directories across major versions - * back to pm_apiversion. This is only useful if you have a perl - * library directory tree structured like the default one. The - * versioned site_perl library was introduced in 5.005, so that's - * the default setting for this variable. It's hard to imagine - * it changing before Perl6. It is included here for symmetry - * with xs_apiveprsion -- the searching algorithms will - * (presumably) be similar. - * See the INSTALL file for how this works. - */ -#define PERL_XS_APIVERSION "5.6.0" -#define PERL_PM_APIVERSION "5.005" - -/* SETUID_SCRIPTS_ARE_SECURE_NOW: - * This symbol, if defined, indicates that the bug that prevents - * setuid scripts from being secure is not present in this kernel. - */ -/* DOSUID: - * This symbol, if defined, indicates that the C program should - * check the script that it is executing for setuid/setgid bits, and - * attempt to emulate setuid/setgid on systems that have disabled - * setuid #! scripts because the kernel can't do it securely. - * It is up to the package designer to make sure that this emulation - * is done securely. Among other things, it should do an fstat on - * the script it just opened to make sure it really is a setuid/setgid - * script, it should make sure the arguments passed correspond exactly - * to the argument on the #! line, and it should not trust any - * subprocesses to which it must pass the filename rather than the - * file descriptor of the script to be executed. - */ -/*#define SETUID_SCRIPTS_ARE_SECURE_NOW /**/ -/*#define DOSUID /**/ - -/* I_STDARG: - * This symbol, if defined, indicates that <stdarg.h> exists and should - * be included. - */ -/* I_VARARGS: - * This symbol, if defined, indicates to the C program that it should - * include <varargs.h>. - */ -#define I_STDARG /**/ -/*#define I_VARARGS /**/ - -/* USE_CROSS_COMPILE: - * This symbol, if defined, indicates that Perl is being cross-compiled. - */ -/* PERL_TARGETARCH: - * This symbol, if defined, indicates the target architecture - * Perl has been cross-compiled to. Undefined if not a cross-compile. - */ -#ifndef USE_CROSS_COMPILE -/*#define USE_CROSS_COMPILE /**/ -#define PERL_TARGETARCH "undef" /**/ -#endif - -/* HAS_DBMINIT_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the dbminit() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern int dbminit(char *); - */ -/*#define HAS_DBMINIT_PROTO /**/ - -/* HAS_FLOCK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the flock() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern int flock(int, int); - */ -/*#define HAS_FLOCK_PROTO /**/ - -/* HAS_NL_LANGINFO: - * This symbol, if defined, indicates that the nl_langinfo routine is - * available to return local data. You will also need <langinfo.h> - * and therefore I_LANGINFO. - */ -/*#define HAS_NL_LANGINFO /**/ - -/* HAS_SIGPROCMASK: - * This symbol, if defined, indicates that the sigprocmask - * system call is available to examine or change the signal mask - * of the calling process. - */ -/*#define HAS_SIGPROCMASK /**/ - -/* HAS_SOCKATMARK: - * This symbol, if defined, indicates that the sockatmark routine is - * available to test whether a socket is at the out-of-band mark. - */ -/*#define HAS_SOCKATMARK /**/ - -/* HAS_SOCKATMARK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the sockatmark() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern int sockatmark(int); - */ -/*#define HAS_SOCKATMARK_PROTO /**/ - -/* HAS_SETRESGID_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the setresgid() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern int setresgid(uid_t ruid, uid_t euid, uid_t suid); - */ -/*#define HAS_SETRESGID_PROTO /**/ - -/* HAS_SETRESUID_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the setresuid() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern int setresuid(uid_t ruid, uid_t euid, uid_t suid); - */ -/*#define HAS_SETRESUID_PROTO /**/ - -/* HAS_STRFTIME: - * This symbol, if defined, indicates that the strftime routine is - * available to do time formatting. - */ -/*#define HAS_STRFTIME /**/ - -/* HAS_SYSCALL_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the syscall() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern int syscall(int, ...); - * extern int syscall(long, ...); - */ -/*#define HAS_SYSCALL_PROTO /**/ - -/* U32_ALIGNMENT_REQUIRED: - * This symbol, if defined, indicates that you must access - * character data through U32-aligned pointers. - */ -/*#define U32_ALIGNMENT_REQUIRED /**/ - -/* HAS_USLEEP_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the usleep() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern int usleep(useconds_t); - */ -/*#define HAS_USLEEP_PROTO /**/ - -/* I_LANGINFO: - * This symbol, if defined, indicates that <langinfo.h> exists and - * should be included. - */ -/*#define I_LANGINFO /**/ - -/* HAS_PTHREAD_ATFORK: - * This symbol, if defined, indicates that the pthread_atfork routine - * is available setup fork handlers. - */ -/*#define HAS_PTHREAD_ATFORK /**/ - -#endif diff --git a/wince/config_h.PL b/wince/config_h.PL index d78a62ea59..957966c59f 100644 --- a/wince/config_h.PL +++ b/wince/config_h.PL @@ -1,5 +1,11 @@ # -use Config; +BEGIN { warn "Running ".__FILE__."\n" }; +BEGIN + { + require "../lib/Config.pm"; + die "../Config.pm:$@" if $@; + Config::->import; + } use File::Compare qw(compare); use File::Copy qw(copy); my $name = $0; @@ -13,6 +19,8 @@ while (@ARGV && $ARGV[0] =~ /^([\w_]+)=(.*)$/) $opt{CONFIG_H} ||= 'config.h'; +warn "Writing $opt{CONFIG_H}\n"; + my $patchlevel = $opt{INST_VER}; $patchlevel =~ s|^[\\/]||; $patchlevel =~ s|~VERSION~|$Config{version}|g; @@ -68,9 +76,9 @@ close(H); close(SH); -chmod(0666,"config.h"); -copy("$file.new","config.h") || die "Cannot copy:$!"; -chmod(0444,"config.h"); +chmod(0666,"../lib/CORE/config.h"); +copy("$file.new","../lib/CORE/config.h") || die "Cannot copy:$!"; +chmod(0444,"../lib/CORE/config.h"); if (compare("$file.new",$file)) { diff --git a/wince/perldll.def b/wince/perldll.def deleted file mode 100644 index c95e33a2a0..0000000000 --- a/wince/perldll.def +++ /dev/null @@ -1,1040 +0,0 @@ -LIBRARY Perl - -EXPORTS - PL_AMG_names - PL_Argv - PL_Cmd - PL_DBgv - PL_DBline - PL_DBsignal - PL_DBsingle - PL_DBsub - PL_DBtrace - PL_No - PL_Sv - PL_Xpv - PL_Yes - PL_amagic_generation - PL_an - PL_argvgv - PL_argvout_stack - PL_argvoutgv - PL_av_fetch_sv - PL_basetime - PL_beginav - PL_bitcount - PL_bodytarget - PL_bostr - PL_bufend - PL_bufptr - PL_check - PL_checkav - PL_chopset - PL_colors - PL_colorset - PL_compcv - PL_compiling - PL_comppad - PL_comppad_name - PL_comppad_name_fill - PL_comppad_name_floor - PL_cop_seqmax - PL_copline - PL_curcop - PL_curcopdb - PL_curinterp - PL_curpad - PL_curpm - PL_curstack - PL_curstackinfo - PL_curstash - PL_curstname - PL_dbargs - PL_debstash - PL_debug - PL_defgv - PL_defoutgv - PL_defstash - PL_delaymagic - PL_diehook - PL_dirty - PL_do_undump - PL_doextract - PL_doswitches - PL_dowarn - PL_dumpindent - PL_e_script - PL_efloatbuf - PL_efloatsize - PL_egid - PL_endav - PL_envgv - PL_errgv - PL_error_count - PL_errors - PL_euid - PL_eval_root - PL_eval_start - PL_evalseq - PL_exit_flags - PL_exitlist - PL_exitlistlen - PL_expect - PL_extralen - PL_fdpid - PL_filemode - PL_firstgv - PL_fold - PL_fold_locale - PL_forkprocess - PL_formfeed - PL_formtarget - PL_freq - PL_gensym - PL_gid - PL_glob_index - PL_globalstash - PL_he_root - PL_hexdigit - PL_hintgv - PL_hints - PL_hv_fetch_ent_mh - PL_hv_fetch_sv - PL_in_clean_all - PL_in_clean_objs - PL_in_eval - PL_in_my - PL_in_my_stash - PL_incgv - PL_initav - PL_inplace - PL_last_in_gv - PL_last_lop - PL_last_lop_op - PL_last_swash_hv - PL_last_swash_key - PL_last_swash_klen - PL_last_swash_slen - PL_last_swash_tmps - PL_last_uni - PL_lastfd - PL_lastscream - PL_laststatval - PL_laststype - PL_lex_brackets - PL_lex_brackstack - PL_lex_casemods - PL_lex_casestack - PL_lex_defer - PL_lex_dojoin - PL_lex_expect - PL_lex_formbrack - PL_lex_inpat - PL_lex_inwhat - PL_lex_op - PL_lex_repl - PL_lex_starts - PL_lex_state - PL_lex_stuff - PL_lineary - PL_linestr - PL_localizing - PL_localpatches - PL_main_cv - PL_main_root - PL_main_start - PL_mainstack - PL_markstack - PL_markstack_max - PL_markstack_ptr - PL_max_intro_pending - PL_maxo - PL_maxscream - PL_maxsysfd - PL_mess_sv - PL_min_intro_pending - PL_minus_F - PL_minus_a - PL_minus_c - PL_minus_l - PL_minus_n - PL_minus_p - PL_modglobal - PL_multi_close - PL_multi_end - PL_multi_open - PL_multi_start - PL_multiline - PL_na - PL_nexttoke - PL_nexttype - PL_nextval - PL_nice_chunk - PL_nice_chunk_size - PL_no_aelem - PL_no_dir_func - PL_no_func - PL_no_helem - PL_no_mem - PL_no_modify - PL_no_myglob - PL_no_security - PL_no_sock_func - PL_no_symref - PL_no_usym - PL_no_wrongref - PL_nomemok - PL_nrs - PL_ofmt - PL_oldbufptr - PL_oldname - PL_oldoldbufptr - PL_op - PL_op_desc - PL_op_mask - PL_op_name - PL_op_seqmax - PL_opargs - PL_origalen - PL_origargc - PL_origargv - PL_origenviron - PL_origfilename - PL_osname - PL_pad_reset_pending - PL_padix - PL_padix_floor - PL_patchlevel - PL_patleave - PL_perl_destruct_level - PL_perldb - PL_pidstatus - PL_ppaddr - PL_preambleav - PL_preambled - PL_preprocess - PL_profiledata - PL_psig_name - PL_psig_ptr - PL_reg_call_cc - PL_reg_curpm - PL_reg_eval_set - PL_reg_flags - PL_reg_ganch - PL_reg_leftiter - PL_reg_magic - PL_reg_maxiter - PL_reg_oldcurpm - PL_reg_oldpos - PL_reg_oldsaved - PL_reg_oldsavedlen - PL_reg_poscache - PL_reg_poscache_size - PL_reg_re - PL_reg_start_tmp - PL_reg_start_tmpl - PL_reg_starttry - PL_reg_sv - PL_reg_whilem_seen - PL_regbol - PL_regcc - PL_regcode - PL_regcomp_parse - PL_regcomp_rx - PL_regcompp - PL_regdata - PL_regdummy - PL_regendp - PL_regeol - PL_regexecp - PL_regflags - PL_regfree - PL_regindent - PL_reginput - PL_regint_start - PL_regint_string - PL_reginterp_cnt - PL_regkind - PL_reglastparen - PL_regnarrate - PL_regnaughty - PL_regnpar - PL_regprecomp - PL_regprogram - PL_regsawback - PL_regseen - PL_regsize - PL_regstartp - PL_regtill - PL_regxend - PL_replgv - PL_restartop - PL_retstack - PL_retstack_ix - PL_retstack_max - PL_rs - PL_rsfp - PL_rsfp_filters - PL_runops - PL_savestack - PL_savestack_ix - PL_savestack_max - PL_sawampersand - PL_scopestack - PL_scopestack_ix - PL_scopestack_max - PL_screamfirst - PL_screamnext - PL_secondgv - PL_seen_evals - PL_seen_zerolen - PL_sh_path - PL_sig_name - PL_sig_num - PL_sighandlerp - PL_simple - PL_sortcop - PL_sortstash - PL_splitstr - PL_srand_called - PL_stack_base - PL_stack_max - PL_stack_sp - PL_start_env - PL_statbuf - PL_statcache - PL_statgv - PL_statname - PL_statusvalue - PL_stderrgv - PL_stdingv - PL_strtab - PL_sub_generation - PL_subline - PL_subname - PL_sv_arenaroot - PL_sv_count - PL_sv_no - PL_sv_objcount - PL_sv_root - PL_sv_undef - PL_sv_yes - PL_sys_intern - PL_tainted - PL_tainting - PL_tmps_floor - PL_tmps_ix - PL_tmps_max - PL_tmps_stack - PL_tokenbuf - PL_top_env - PL_toptarget - PL_uid - PL_unsafe - PL_utf8_alnum - PL_utf8_alnumc - PL_utf8_alpha - PL_utf8_ascii - PL_utf8_cntrl - PL_utf8_digit - PL_utf8_graph - PL_utf8_lower - PL_utf8_mark - PL_utf8_print - PL_utf8_punct - PL_utf8_space - PL_utf8_tolower - PL_utf8_totitle - PL_utf8_toupper - PL_utf8_upper - PL_utf8_xdigit - PL_utf8skip - PL_uudmap - PL_uuemap - PL_varies - PL_vtbl_amagic - PL_vtbl_amagicelem - PL_vtbl_arylen - PL_vtbl_bm - PL_vtbl_dbline - PL_vtbl_defelem - PL_vtbl_env - PL_vtbl_envelem - PL_vtbl_fm - PL_vtbl_glob - PL_vtbl_isa - PL_vtbl_isaelem - PL_vtbl_mglob - PL_vtbl_nkeys - PL_vtbl_pack - PL_vtbl_packelem - PL_vtbl_pos - PL_vtbl_regdata - PL_vtbl_regdatum - PL_vtbl_regexp - PL_vtbl_sig - PL_vtbl_sigelem - PL_vtbl_substr - PL_vtbl_sv - PL_vtbl_taint - PL_vtbl_uvar - PL_vtbl_vec - PL_warn_nl - PL_warn_nosemi - PL_warn_reserved - PL_warn_uninit - PL_warnhook - PL_widesyscalls - PL_xiv_arenaroot - PL_xiv_root - PL_xnv_root - PL_xpv_root - PL_xpvav_root - PL_xpvbm_root - PL_xpvcv_root - PL_xpvhv_root - PL_xpviv_root - PL_xpvlv_root - PL_xpvmg_root - PL_xpvnv_root - PL_xrv_root - PL_yychar - PL_yydebug - PL_yyerrflag - PL_yylval - PL_yynerrs - PL_yyval - PerlIO_canset_cnt - PerlIO_exportFILE - PerlIO_fast_gets - PerlIO_fdopen - PerlIO_findFILE - PerlIO_getc - PerlIO_getname - PerlIO_getpos - PerlIO_has_base - PerlIO_has_cntptr - PerlIO_importFILE - PerlIO_init - PerlIO_open - PerlIO_printf - PerlIO_putc - PerlIO_puts - PerlIO_releaseFILE - PerlIO_reopen - PerlIO_rewind - PerlIO_setpos - PerlIO_sprintf - PerlIO_stdoutf - PerlIO_tmpfile - PerlIO_ungetc - PerlIO_vprintf - PerlIO_vsprintf - Perl_Gv_AMupdate - Perl_amagic_call - Perl_av_clear - Perl_av_delete - Perl_av_exists - Perl_av_extend - Perl_av_fake - Perl_av_fetch - Perl_av_fill - Perl_av_len - Perl_av_make - Perl_av_pop - Perl_av_push - Perl_av_reify - Perl_av_shift - Perl_av_store - Perl_av_undef - Perl_av_unshift - Perl_avhv_delete_ent - Perl_avhv_exists_ent - Perl_avhv_fetch_ent - Perl_avhv_iternext - Perl_avhv_iterval - Perl_avhv_keys - Perl_avhv_store_ent - Perl_block_gimme - Perl_call_argv - Perl_call_atexit - Perl_call_list - Perl_call_method - Perl_call_pv - Perl_call_sv - Perl_cast_i32 - Perl_cast_iv - Perl_cast_ulong - Perl_cast_uv - Perl_croak - Perl_cv_const_sv - Perl_cv_undef - Perl_cx_dump - Perl_delimcpy - Perl_die - Perl_do_binmode - Perl_do_close - Perl_do_gv_dump - Perl_do_gvgv_dump - Perl_do_hv_dump - Perl_do_magic_dump - Perl_do_op_dump - Perl_do_open - Perl_do_open9 - Perl_do_pmop_dump - Perl_do_sv_dump - Perl_dounwind - Perl_dowantarray - Perl_dump_all - Perl_dump_eval - Perl_dump_form - Perl_dump_indent - Perl_dump_packsubs - Perl_dump_sub - Perl_dump_vindent - Perl_eval_pv - Perl_eval_sv - Perl_fbm_compile - Perl_fbm_instr - Perl_filter_add - Perl_filter_del - Perl_filter_read - Perl_form - Perl_fprintf_nocontext - Perl_free_tmps - Perl_get_av - Perl_get_context - Perl_get_cv - Perl_get_hv - Perl_get_op_descs - Perl_get_op_names - Perl_get_ppaddr - Perl_get_sv - Perl_get_vtbl - Perl_gp_free - Perl_gp_ref - Perl_gv_AVadd - Perl_gv_HVadd - Perl_gv_IOadd - Perl_gv_autoload4 - Perl_gv_check - Perl_gv_dump - Perl_gv_efullname - Perl_gv_efullname3 - Perl_gv_fetchfile - Perl_gv_fetchmeth - Perl_gv_fetchmethod - Perl_gv_fetchmethod_autoload - Perl_gv_fetchpv - Perl_gv_fullname - Perl_gv_fullname3 - Perl_gv_init - Perl_gv_stashpv - Perl_gv_stashpvn - Perl_gv_stashsv - Perl_hv_clear - Perl_hv_delayfree_ent - Perl_hv_delete - Perl_hv_delete_ent - Perl_hv_exists - Perl_hv_exists_ent - Perl_hv_fetch - Perl_hv_fetch_ent - Perl_hv_free_ent - Perl_hv_iterinit - Perl_hv_iterkey - Perl_hv_iterkeysv - Perl_hv_iternext - Perl_hv_iternextsv - Perl_hv_iterval - Perl_hv_ksplit - Perl_hv_magic - Perl_hv_store - Perl_hv_store_ent - Perl_hv_undef - Perl_ibcmp - Perl_ibcmp_locale - Perl_init_i18nl10n - Perl_init_i18nl14n - Perl_init_os_extras - Perl_init_stacks - Perl_instr - Perl_is_uni_alnum - Perl_is_uni_alnum_lc - Perl_is_uni_alnumc - Perl_is_uni_alnumc_lc - Perl_is_uni_alpha - Perl_is_uni_alpha_lc - Perl_is_uni_ascii - Perl_is_uni_ascii_lc - Perl_is_uni_cntrl - Perl_is_uni_cntrl_lc - Perl_is_uni_digit - Perl_is_uni_digit_lc - Perl_is_uni_graph - Perl_is_uni_graph_lc - Perl_is_uni_idfirst - Perl_is_uni_idfirst_lc - Perl_is_uni_lower - Perl_is_uni_lower_lc - Perl_is_uni_print - Perl_is_uni_print_lc - Perl_is_uni_punct - Perl_is_uni_punct_lc - Perl_is_uni_space - Perl_is_uni_space_lc - Perl_is_uni_upper - Perl_is_uni_upper_lc - Perl_is_uni_xdigit - Perl_is_uni_xdigit_lc - Perl_is_utf8_alnum - Perl_is_utf8_alnumc - Perl_is_utf8_alpha - Perl_is_utf8_ascii - Perl_is_utf8_char - Perl_is_utf8_cntrl - Perl_is_utf8_digit - Perl_is_utf8_graph - Perl_is_utf8_idfirst - Perl_is_utf8_lower - Perl_is_utf8_mark - Perl_is_utf8_print - Perl_is_utf8_punct - Perl_is_utf8_space - Perl_is_utf8_upper - Perl_is_utf8_xdigit - Perl_leave_scope - Perl_load_module - Perl_looks_like_number - Perl_magic_dump - Perl_markstack_grow - Perl_mess - Perl_mg_clear - Perl_mg_copy - Perl_mg_find - Perl_mg_free - Perl_mg_get - Perl_mg_length - Perl_mg_magical - Perl_mg_set - Perl_mg_size - Perl_moreswitches - Perl_my_atof - Perl_my_exit - Perl_my_failure_exit - Perl_my_fflush_all - Perl_my_lstat - Perl_my_setenv - Perl_my_stat - Perl_newANONATTRSUB - Perl_newANONHASH - Perl_newANONLIST - Perl_newANONSUB - Perl_newASSIGNOP - Perl_newATTRSUB - Perl_newAV - Perl_newAVREF - Perl_newBINOP - Perl_newCONDOP - Perl_newCONSTSUB - Perl_newCVREF - Perl_newFORM - Perl_newFOROP - Perl_newGVOP - Perl_newGVREF - Perl_newGVgen - Perl_newHV - Perl_newHVREF - Perl_newHVhv - Perl_newIO - Perl_newLISTOP - Perl_newLOGOP - Perl_newLOOPEX - Perl_newLOOPOP - Perl_newMYSUB - Perl_newNULLLIST - Perl_newOP - Perl_newPADOP - Perl_newPMOP - Perl_newPROG - Perl_newPVOP - Perl_newRANGE - Perl_newRV - Perl_newRV_noinc - Perl_newSLICEOP - Perl_newSTATEOP - Perl_newSUB - Perl_newSV - Perl_newSVOP - Perl_newSVREF - Perl_newSViv - Perl_newSVnv - Perl_newSVpv - Perl_newSVpvf - Perl_newSVpvn - Perl_newSVrv - Perl_newSVsv - Perl_newSVuv - Perl_newUNOP - Perl_newWHILEOP - Perl_newXS - Perl_new_collate - Perl_new_ctype - Perl_new_numeric - Perl_new_stackinfo - Perl_ninstr - Perl_op_dump - Perl_op_free - Perl_pad_sv - Perl_pmflag - Perl_pmop_dump - Perl_pop_scope - Perl_pregcomp - Perl_pregexec - Perl_pregfree - Perl_push_scope - Perl_re_intuit_start - Perl_re_intuit_string - Perl_regdump - Perl_regexec_flags - Perl_reginitcolors - Perl_regnext - Perl_repeatcpy - Perl_require_pv - Perl_rninstr - Perl_runops_standard - Perl_safesyscalloc - Perl_safesysfree - Perl_safesysmalloc - Perl_safesysrealloc - Perl_save_I16 - Perl_save_I32 - Perl_save_I8 - Perl_save_aelem - Perl_save_alloc - Perl_save_aptr - Perl_save_ary - Perl_save_clearsv - Perl_save_delete - Perl_save_destructor - Perl_save_destructor_x - Perl_save_freepv - Perl_save_freesv - Perl_save_generic_svref - Perl_save_gp - Perl_save_hash - Perl_save_helem - Perl_save_hints - Perl_save_hptr - Perl_save_int - Perl_save_item - Perl_save_iv - Perl_save_list - Perl_save_long - Perl_save_nogv - Perl_save_pptr - Perl_save_re_context - Perl_save_scalar - Perl_save_sptr - Perl_save_svref - Perl_save_threadsv - Perl_save_vptr - Perl_savepv - Perl_savepvn - Perl_savestack_grow - Perl_scan_bin - Perl_scan_hex - Perl_scan_num - Perl_scan_oct - Perl_screaminstr - Perl_set_context - Perl_set_numeric_local - Perl_set_numeric_radix - Perl_set_numeric_standard - Perl_stack_grow - Perl_start_subparse - Perl_str_to_version - Perl_sv_2bool - Perl_sv_2cv - Perl_sv_2io - Perl_sv_2iv - Perl_sv_2mortal - Perl_sv_2nv - Perl_sv_2pv - Perl_sv_2pv_nolen - Perl_sv_2pvbyte - Perl_sv_2pvbyte_nolen - Perl_sv_2pvutf8 - Perl_sv_2pvutf8_nolen - Perl_sv_2uv - Perl_sv_backoff - Perl_sv_bless - Perl_sv_catpv - Perl_sv_catpv_mg - Perl_sv_catpvf - Perl_sv_catpvf_mg - Perl_sv_catpvn - Perl_sv_catpvn_mg - Perl_sv_catsv - Perl_sv_catsv_mg - Perl_sv_chop - Perl_sv_clear - Perl_sv_cmp - Perl_sv_cmp_locale - Perl_sv_compile_2op - Perl_sv_dec - Perl_sv_derived_from - Perl_sv_dump - Perl_sv_eq - Perl_sv_force_normal - Perl_sv_free - Perl_sv_gets - Perl_sv_grow - Perl_sv_inc - Perl_sv_insert - Perl_sv_isa - Perl_sv_isobject - Perl_sv_iv - Perl_sv_len - Perl_sv_len_utf8 - Perl_sv_magic - Perl_sv_mortalcopy - Perl_sv_newmortal - Perl_sv_newref - Perl_sv_nv - Perl_sv_pos_b2u - Perl_sv_pos_u2b - Perl_sv_pv - Perl_sv_pvbyte - Perl_sv_pvbyten - Perl_sv_pvbyten_force - Perl_sv_pvn - Perl_sv_pvn_force - Perl_sv_pvutf8 - Perl_sv_pvutf8n - Perl_sv_pvutf8n_force - Perl_sv_reftype - Perl_sv_replace - Perl_sv_report_used - Perl_sv_reset - Perl_sv_rvweaken - Perl_sv_setiv - Perl_sv_setiv_mg - Perl_sv_setnv - Perl_sv_setnv_mg - Perl_sv_setpv - Perl_sv_setpv_mg - Perl_sv_setpvf - Perl_sv_setpvf_mg - Perl_sv_setpviv - Perl_sv_setpviv_mg - Perl_sv_setpvn - Perl_sv_setpvn_mg - Perl_sv_setref_iv - Perl_sv_setref_nv - Perl_sv_setref_pv - Perl_sv_setref_pvn - Perl_sv_setsv - Perl_sv_setsv_mg - Perl_sv_setuv - Perl_sv_setuv_mg - Perl_sv_taint - Perl_sv_tainted - Perl_sv_true - Perl_sv_unmagic - Perl_sv_unref - Perl_sv_untaint - Perl_sv_upgrade - Perl_sv_usepvn - Perl_sv_usepvn_mg - Perl_sv_utf8_decode - Perl_sv_utf8_downgrade - Perl_sv_utf8_encode - Perl_sv_utf8_upgrade - Perl_sv_uv - Perl_sv_vcatpvf - Perl_sv_vcatpvf_mg - Perl_sv_vcatpvfn - Perl_sv_vsetpvf - Perl_sv_vsetpvf_mg - Perl_sv_vsetpvfn - Perl_swash_fetch - Perl_swash_init - Perl_taint_env - Perl_taint_proper - Perl_tmps_grow - Perl_to_uni_lower - Perl_to_uni_title - Perl_to_uni_upper - Perl_to_utf8_lower - Perl_to_utf8_title - Perl_to_utf8_upper - Perl_unsharepvn - Perl_utf16_to_utf8 - Perl_utf16_to_utf8_reversed - Perl_utf8_distance - Perl_utf8_hop - Perl_utf8_to_uvchr - Perl_uvchr_to_utf8 - Perl_vcroak - Perl_vdeb - Perl_vform - Perl_vload_module - Perl_vmess - Perl_vnewSVpvf - Perl_vwarn - Perl_vwarner - Perl_warn - Perl_warner - Perl_win32_init - RunPerl - boot_DynaLoader - perl_alloc - perl_construct - perl_destruct - perl_free - perl_parse - perl_run - win32_abort - win32_accept - win32_access - win32_alarm - win32_bind - win32_calloc - win32_chdir - win32_chmod - win32_clearerr - win32_close - win32_closedir - win32_closesocket - win32_connect - win32_crypt - win32_dup - win32_dup2 - win32_dynaload - win32_endhostent - win32_endnetent - win32_endprotoent - win32_endservent - win32_environ - win32_eof - win32_errno - win32_execv - win32_execvp - win32_fclose - win32_fcloseall - win32_fdopen - win32_feof - win32_ferror - win32_fflush - win32_fgetc - win32_fgetpos - win32_fgets - win32_fileno - win32_flock - win32_flushall - win32_fopen - win32_fprintf - win32_fputc - win32_fputs - win32_fread - win32_free - win32_freopen - win32_fseek - win32_fsetpos - win32_fstat - win32_ftell - win32_fwrite - win32_getc - win32_getchar - win32_getenv - win32_gethostbyaddr - win32_gethostbyname - win32_gethostname - win32_getnetbyaddr - win32_getnetbyname - win32_getnetent - win32_getpeername - win32_getpid - win32_getprotobyname - win32_getprotobynumber - win32_getprotoent - win32_gets - win32_getservbyname - win32_getservbyport - win32_getservent - win32_getsockname - win32_getsockopt - win32_htonl - win32_htons - win32_inet_addr - win32_inet_ntoa - win32_ioctl - win32_ioctlsocket - win32_kill - win32_link - win32_listen - win32_longpath - win32_lseek - win32_malloc - win32_mkdir - win32_ntohl - win32_ntohs - win32_open - win32_opendir - win32_os_id - win32_perror - win32_pipe - win32_printf - win32_putc - win32_putchar - win32_putenv - win32_puts - win32_read - win32_readdir - win32_realloc - win32_recv - win32_recvfrom - win32_rename - win32_rewind - win32_rewinddir - win32_rmdir - win32_seekdir - win32_select - win32_send - win32_sendto - win32_setbuf - win32_sethostent - win32_setmode - win32_setnetent - win32_setprotoent - win32_setservent - win32_setsockopt - win32_setvbuf - win32_shutdown - win32_sleep - win32_socket - win32_stat - win32_stderr - win32_stdin - win32_stdout - win32_str_os_error - win32_strerror - win32_tell - win32_telldir - win32_times - win32_tmpfile - win32_uname - win32_ungetc - win32_unlink - win32_utime - win32_vfprintf - win32_vprintf - win32_waitpid - win32_write - Perl_pp_pack - Perl_pp_unpack - Perl_sv_2pv_flags - Perl_sv_catpvn_flags - Perl_sv_catsv_flags - Perl_sv_setsv_flags diff --git a/wince/win32io.c b/wince/win32io.c new file mode 100644 index 0000000000..3683490ac4 --- /dev/null +++ b/wince/win32io.c @@ -0,0 +1,370 @@ +#define PERL_NO_GET_CONTEXT +#define WIN32_LEAN_AND_MEAN +#define WIN32IO_IS_STDIO +#include <tchar.h> +#ifdef __GNUC__ +#define Win32_Winsock +#endif +#include <windows.h> +#include <cewin32.h> + +#include <sys/stat.h> +#include "EXTERN.h" +#include "perl.h" + +#ifdef PERLIO_LAYERS + +#include "perliol.h" + +#define NO_XSLOCKS +#include "XSUB.h" + + +/* Bottom-most level for Win32 case */ + +typedef struct +{ + struct _PerlIO base; /* The generic part */ + HANDLE h; /* OS level handle */ + IV refcnt; /* REFCNT for the "fd" this represents */ + int fd; /* UNIX like file descriptor - index into fdtable */ +} PerlIOWin32; + +PerlIOWin32 *fdtable[256]; +IV max_open_fd = -1; + +IV +PerlIOWin32_popped(pTHX_ PerlIO *f) +{ + PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32); + if (--s->refcnt > 0) + { + *f = PerlIOBase(f)->next; + return 1; + } + fdtable[s->fd] = NULL; + return 0; +} + +IV +PerlIOWin32_fileno(pTHX_ PerlIO *f) +{ + return PerlIOSelf(f,PerlIOWin32)->fd; +} + +IV +PerlIOWin32_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg) +{ + IV code = PerlIOBase_pushed(aTHX_ f,mode,arg); + if (*PerlIONext(f)) + { + PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32); + s->fd = PerlIO_fileno(PerlIONext(f)); + } + PerlIOBase(f)->flags |= PERLIO_F_OPEN; + return code; +} + +PerlIO * +PerlIOWin32_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, IV n, const char *mode, int fd, int imode, int perm, PerlIO *f, int narg, SV **args) +{ + const char *tmode = mode; + HANDLE h = INVALID_HANDLE_VALUE; + if (f) + { + /* Close if already open */ + if (PerlIOBase(f)->flags & PERLIO_F_OPEN) + (*PerlIOBase(f)->tab->Close)(aTHX_ f); + } + if (narg > 0) + { + char *path = SvPV_nolen(*args); + DWORD access = 0; + DWORD share = 0; + DWORD create = -1; + DWORD attr = FILE_ATTRIBUTE_NORMAL; + if (*mode == '#') + { + /* sysopen - imode is UNIX-like O_RDONLY etc. + - do_open has converted that back to string form in mode as well + - perm is UNIX like permissions + */ + mode++; + } + else + { + /* Normal open - decode mode string */ + } + switch(*mode) + { + case 'r': + access = GENERIC_READ; + create = OPEN_EXISTING; + if (*++mode == '+') + { + access |= GENERIC_WRITE; + create = OPEN_ALWAYS; + mode++; + } + break; + + case 'w': + access = GENERIC_WRITE; + create = TRUNCATE_EXISTING; + if (*++mode == '+') + { + access |= GENERIC_READ; + mode++; + } + break; + + case 'a': + access = GENERIC_WRITE; + create = OPEN_ALWAYS; + if (*++mode == '+') + { + access |= GENERIC_READ; + mode++; + } + break; + } + if (*mode == 'b') + { + mode++; + } + else if (*mode == 't') + { + mode++; + } + if (*mode || create == -1) + { + //FIX-ME: SETERRNO(EINVAL,LIB$_INVARG); + XCEMessageBoxA(NULL, "NEED TO IMPLEMENT a place in ../wince/win32io.c", "Perl(developer)", 0); + return NULL; + } + if (!(access & GENERIC_WRITE)) + share = FILE_SHARE_READ; + h = CreateFileW(path,access,share,NULL,create,attr,NULL); + if (h == INVALID_HANDLE_VALUE) + { + if (create == TRUNCATE_EXISTING) + h = CreateFileW(path,access,share,NULL,(create = OPEN_ALWAYS),attr,NULL); + } + } + else + { + /* fd open */ + h = INVALID_HANDLE_VALUE; + if (fd >= 0 && fd <= max_open_fd) + { + PerlIOWin32 *s = fdtable[fd]; + if (s) + { + s->refcnt++; + if (!f) + f = PerlIO_allocate(aTHX); + *f = &s->base; + return f; + } + } + if (*mode == 'I') + { + mode++; + switch(fd) + { + case 0: + h = XCEGetStdHandle(STD_INPUT_HANDLE); + break; + case 1: + h = XCEGetStdHandle(STD_OUTPUT_HANDLE); + break; + case 2: + h = XCEGetStdHandle(STD_ERROR_HANDLE); + break; + } + } + } + if (h != INVALID_HANDLE_VALUE) + fd = win32_open_osfhandle((intptr_t) h, PerlIOUnix_oflags(tmode)); + if (fd >= 0) + { + PerlIOWin32 *s; + if (!f) + f = PerlIO_allocate(aTHX); + s = PerlIOSelf(PerlIO_push(aTHX_ f,self,tmode,PerlIOArg),PerlIOWin32); + s->h = h; + s->fd = fd; + s->refcnt = 1; + if (fd >= 0) + { + fdtable[fd] = s; + if (fd > max_open_fd) + max_open_fd = fd; + } + return f; + } + if (f) + { + /* FIXME: pop layers ??? */ + } + return NULL; +} + +SSize_t +PerlIOWin32_read(pTHX_ PerlIO *f, void *vbuf, Size_t count) +{ + PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32); + DWORD len; + if (!(PerlIOBase(f)->flags & PERLIO_F_CANREAD)) + return 0; + if (ReadFile(s->h,vbuf,count,&len,NULL)) + { + return len; + } + else + { + if (GetLastError() != NO_ERROR) + { + PerlIOBase(f)->flags |= PERLIO_F_ERROR; + return -1; + } + else + { + if (count != 0) + PerlIOBase(f)->flags |= PERLIO_F_EOF; + return 0; + } + } +} + +SSize_t +PerlIOWin32_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count) +{ + PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32); + DWORD len; + if (WriteFile(s->h,vbuf,count,&len,NULL)) + { + return len; + } + else + { + PerlIOBase(f)->flags |= PERLIO_F_ERROR; + return -1; + } +} + +IV +PerlIOWin32_seek(pTHX_ PerlIO *f, Off_t offset, int whence) +{ + static const DWORD where[3] = { FILE_BEGIN, FILE_CURRENT, FILE_END }; + PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32); + DWORD high = (sizeof(offset) > sizeof(DWORD)) ? (DWORD)(offset >> 32) : 0; + DWORD low = (DWORD) offset; + DWORD res = SetFilePointer(s->h,low,&high,where[whence]); + if (res != 0xFFFFFFFF || GetLastError() != NO_ERROR) + { + return 0; + } + else + { + return -1; + } +} + +Off_t +PerlIOWin32_tell(pTHX_ PerlIO *f) +{ + PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32); + DWORD high = 0; + DWORD res = SetFilePointer(s->h,0,&high,FILE_CURRENT); + if (res != 0xFFFFFFFF || GetLastError() != NO_ERROR) + { + return ((Off_t) high << 32) | res; + } + return (Off_t) -1; +} + +IV +PerlIOWin32_close(pTHX_ PerlIO *f) +{ + PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32); + if (s->refcnt == 1) + { + if (CloseHandle(s->h)) + { + s->h = INVALID_HANDLE_VALUE; + return -1; + } + } + PerlIOBase(f)->flags &= ~PERLIO_F_OPEN; + return 0; +} + +PerlIO * +PerlIOWin32_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *params, int flags) +{ + PerlIOWin32 *os = PerlIOSelf(f,PerlIOWin32); + HANDLE proc = GetCurrentProcess(); + HANDLE new; +//vvv todo if (DuplicateHandle(proc, os->h, proc, &new, 0, FALSE, DUPLICATE_SAME_ACCESS)) + if (0) + { + char mode[8]; + int fd = win32_open_osfhandle((intptr_t) new, PerlIOUnix_oflags(PerlIO_modestr(o,mode))); + if (fd >= 0) + { + f = PerlIOBase_dup(aTHX_ f, o, params, flags); + if (f) + { + PerlIOWin32 *fs = PerlIOSelf(f,PerlIOWin32); + fs->h = new; + fs->fd = fd; + fs->refcnt = 1; + fdtable[fd] = fs; + if (fd > max_open_fd) + max_open_fd = fd; + } + else + { + win32_close(fd); + } + } + else + { + CloseHandle(new); + } + } + return f; +} + +PerlIO_funcs PerlIO_win32 = { + "win32", + sizeof(PerlIOWin32), + PERLIO_K_RAW, + PerlIOWin32_pushed, + PerlIOWin32_popped, + PerlIOWin32_open, + NULL, /* getarg */ + PerlIOWin32_fileno, + PerlIOWin32_dup, + PerlIOWin32_read, + PerlIOBase_unread, + PerlIOWin32_write, + PerlIOWin32_seek, + PerlIOWin32_tell, + PerlIOWin32_close, + PerlIOBase_noop_ok, /* flush */ + PerlIOBase_noop_fail, /* fill */ + PerlIOBase_eof, + PerlIOBase_error, + PerlIOBase_clearerr, + PerlIOBase_setlinebuf, + NULL, /* get_base */ + NULL, /* get_bufsiz */ + NULL, /* get_ptr */ + NULL, /* get_cnt */ + NULL, /* set_ptrcnt */ +}; + + +#endif diff --git a/wince/wince.c b/wince/wince.c index 7aabdd7dc5..8a4eb05f59 100644 --- a/wince/wince.c +++ b/wince/wince.c @@ -1632,7 +1632,115 @@ win32_open_osfhandle(intptr_t osfhandle, int flags) int fh; char fileflags=0; /* _osfile flags */ - XCEMessageBoxA(NULL, "NEED TO IMPLEMENT a place in ../wince/wince.c(win32_open_osfhandle)", "Perl(developer)", 0); + XCEMessageBoxA(NULL, "NEED TO IMPLEMENT in wince/wince.c(win32_open_osfhandle)", "error", 0); Perl_croak_nocontext("win32_open_osfhandle() TBD on this platform"); return 0; } + +int +win32_get_osfhandle(intptr_t osfhandle, int flags) +{ + int fh; + char fileflags=0; /* _osfile flags */ + + XCEMessageBoxA(NULL, "NEED TO IMPLEMENT in wince/wince.c(win32_get_osfhandle)", "error", 0); + Perl_croak_nocontext("win32_get_osfhandle() TBD on this platform"); + return 0; +} + +/* + * a popen() clone that respects PERL5SHELL + * + * changed to return PerlIO* rather than FILE * by BKS, 11-11-2000 + */ + +DllExport PerlIO* +win32_popen(const char *command, const char *mode) +{ + XCEMessageBoxA(NULL, "NEED TO IMPLEMENT in wince/wince.c(win32_popen)", "error", 0); + Perl_croak_nocontext("win32_popen() TBD on this platform"); +} + +/* + * pclose() clone + */ + +DllExport int +win32_pclose(PerlIO *pf) +{ +#ifdef USE_RTL_POPEN + return _pclose(pf); +#else + dTHX; + int childpid, status; + SV *sv; + + LOCK_FDPID_MUTEX; + sv = *av_fetch(w32_fdpid, PerlIO_fileno(pf), TRUE); + + if (SvIOK(sv)) + childpid = SvIVX(sv); + else + childpid = 0; + + if (!childpid) { + errno = EBADF; + return -1; + } + +#ifdef USE_PERLIO + PerlIO_close(pf); +#else + fclose(pf); +#endif + SvIVX(sv) = 0; + UNLOCK_FDPID_MUTEX; + + if (win32_waitpid(childpid, &status, 0) == -1) + return -1; + + return status; + +#endif /* USE_RTL_POPEN */ +} + +FILE * +win32_fdupopen(FILE *pf) +{ + FILE* pfdup; + fpos_t pos; + char mode[3]; + int fileno = win32_dup(win32_fileno(pf)); + + XCEMessageBoxA(NULL, "NEED TO IMPLEMENT a place in .../wince/wince.c(win32_fdupopen)", "Perl(developer)", 0); + Perl_croak_nocontext("win32_fdupopen() TBD on this platform"); + +#if 0 + /* open the file in the same mode */ + if((pf)->_flag & _IOREAD) { + mode[0] = 'r'; + mode[1] = 0; + } + else if((pf)->_flag & _IOWRT) { + mode[0] = 'a'; + mode[1] = 0; + } + else if((pf)->_flag & _IORW) { + mode[0] = 'r'; + mode[1] = '+'; + mode[2] = 0; + } + + /* it appears that the binmode is attached to the + * file descriptor so binmode files will be handled + * correctly + */ + pfdup = win32_fdopen(fileno, mode); + + /* move the file pointer to the same position */ + if (!fgetpos(pf, &pos)) { + fsetpos(pfdup, &pos); + } +#endif + return pfdup; +} |