diff options
-rw-r--r-- | MANIFEST | 6 | ||||
-rw-r--r-- | Porting/config.sh | 16 | ||||
-rw-r--r-- | djgpp/config.over | 1 | ||||
-rw-r--r-- | epoc/config.sh | 2 | ||||
-rw-r--r-- | ext/POSIX/POSIX.pod | 2 | ||||
-rw-r--r-- | ext/Time/Piece/Makefile.PL | 7 | ||||
-rw-r--r-- | ext/Time/Piece/Piece.pm | 1326 | ||||
-rw-r--r-- | ext/Time/Piece/Piece.t | 330 | ||||
-rw-r--r-- | ext/Time/Piece/Piece.xs | 43 | ||||
-rw-r--r-- | ext/Time/Piece/README | 111 | ||||
-rw-r--r-- | ext/Time/Piece/Seconds.pm | 217 | ||||
-rw-r--r-- | hints/vmesa.sh | 2 | ||||
-rw-r--r-- | pod/perlfaq4.pod | 39 | ||||
-rw-r--r-- | pod/perllocale.pod | 2 | ||||
-rw-r--r-- | pod/perltoc.pod | 140 | ||||
-rw-r--r-- | t/lib/1_compile.t | 1 | ||||
-rw-r--r-- | win32/Makefile | 2285 | ||||
-rw-r--r-- | win32/makefile.mk | 2543 |
18 files changed, 2453 insertions, 4620 deletions
@@ -559,12 +559,6 @@ ext/Time/HiRes/HiRes.pm Time::HiRes extension ext/Time/HiRes/HiRes.t Test for Time::HiRes ext/Time/HiRes/HiRes.xs Time::HiRes extension ext/Time/HiRes/Makefile.PL Time::HiRes extension -ext/Time/Piece/Makefile.PL Time::Piece extension -ext/Time/Piece/Piece.pm Time::Piece extension -ext/Time/Piece/Piece.t Test for Time::Piece -ext/Time/Piece/Piece.xs Time::Piece extension -ext/Time/Piece/README Time::Piece extension -ext/Time/Piece/Seconds.pm Time::Piece extension ext/util/make_ext Used by Makefile to execute extension Makefiles ext/XS/Typemap/Makefile.PL XS::Typemap extension ext/XS/Typemap/README XS::Typemap extension diff --git a/Porting/config.sh b/Porting/config.sh index 17fca1c4df..2a0bafeda1 100644 --- a/Porting/config.sh +++ b/Porting/config.sh @@ -8,7 +8,7 @@ # Package name : perl5 # Source directory : . -# Configuration time: Thu Aug 9 16:48:44 EET DST 2001 +# Configuration time: Sat Aug 11 03:31:31 EET DST 2001 # Configured by : jhi # Target system : osf1 alpha.hut.fi v4.0 878 alpha @@ -63,7 +63,7 @@ ccsymbols='__alpha=1 __LANGUAGE_C__=1 __osf__=1 __unix__=1 _LONGLONG=1 _SYSTYPE_ ccversion='V5.6-082' cf_by='jhi' cf_email='yourname@yourhost.yourplace.com' -cf_time='Thu Aug 9 16:48:44 EET DST 2001' +cf_time='Sat Aug 11 03:31:31 EET DST 2001' charsize='1' chgrp='' chmod='chmod' @@ -440,7 +440,7 @@ dlext='so' dlsrc='dl_dlopen.xs' doublesize='8' drand01='drand48()' -dynamic_ext='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Time/Piece XS/Typemap attrs re' +dynamic_ext='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes XS/Typemap attrs re' eagain='EAGAIN' ebcdic='undef' echo='echo' @@ -449,7 +449,7 @@ emacs='' eunicefix=':' exe_ext='' expr='expr' -extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Time/Piece XS/Typemap attrs re Errno' +extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes XS/Typemap attrs re Errno' extras='' fflushNULL='define' fflushall='undef' @@ -594,7 +594,7 @@ issymlink='test -h' ivdformat='"ld"' ivsize='8' ivtype='long' -known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Time/Piece XS/Typemap attrs re' +known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes XS/Typemap attrs re' ksh='' ld='ld' lddlflags='-shared -expect_unresolved "*" -msym -std -s' @@ -686,7 +686,7 @@ patchlevel='7' path_sep=':' perl5='perl' perl='' -perl_patchlevel='11596' +perl_patchlevel='11625' perladmin='yourname@yourhost.yourplace.com' perllibs='-lm -liconv -lutil' perlpath='/opt/perl/bin/perl' @@ -854,7 +854,7 @@ vendorlibexp='' vendorprefix='' vendorprefixexp='' version='5.7.2' -version_patchlevel_string='version 7 subversion 2 patch 11596' +version_patchlevel_string='version 7 subversion 2 patch 11625' versiononly='define' vi='' voidflags='15' @@ -884,7 +884,7 @@ PERL_SUBVERSION=2 PERL_API_REVISION=5 PERL_API_VERSION=5 PERL_API_SUBVERSION=0 -PERL_PATCHLEVEL=11596 +PERL_PATCHLEVEL=11625 PERL_CONFIG_SH=true # Variables propagated from previous config.sh file. pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"' diff --git a/djgpp/config.over b/djgpp/config.over index 123c03b012..811d8f30bb 100644 --- a/djgpp/config.over +++ b/djgpp/config.over @@ -43,7 +43,6 @@ repair() -e 's=mime/base64=MIME/Base64=' \ -e 's=time/hires=Time/HiRes=' \ -e 's=list/util=List/Util=' \ - -e 's=time/piece=Time/Piece=' \ -e 's=cwd=Cwd=' \ -e 's=perlio/via=PerlIO/Via=' \ -e 's=xs/typemap=XS/Typemap=' diff --git a/epoc/config.sh b/epoc/config.sh index 115587c595..6e3566924c 100644 --- a/epoc/config.sh +++ b/epoc/config.sh @@ -427,7 +427,7 @@ emacs='' eunicefix=':' exe_ext='' expr='expr' -extensions='Data/Dumper Digest/MD5 Errno Fcntl File/Glob Filter/Util/Call IO List/Util MIME/Base64 Opcode PerlIO/Scalar Socket Storable Sys/Hostname Time/Piece attrs re' +extensions='Data/Dumper Digest/MD5 Errno Fcntl File/Glob Filter/Util/Call IO List/Util MIME/Base64 Opcode PerlIO/Scalar Socket Storable Sys/Hostname attrs re' fflushNULL='undef' fflushall='define' find='' diff --git a/ext/POSIX/POSIX.pod b/ext/POSIX/POSIX.pod index 350f897abc..bbd0cbe5af 100644 --- a/ext/POSIX/POSIX.pod +++ b/ext/POSIX/POSIX.pod @@ -1233,8 +1233,6 @@ The string for Tuesday, December 12, 1995. $str = POSIX::strftime( "%A, %B %d, %Y", 0, 0, 0, 12, 11, 95, 2 ); print "$str\n"; -See also L<Time::Piece>. - =item strlen strlen() is C-specific, use C<length()> instead, see L<perlfunc/length>. diff --git a/ext/Time/Piece/Makefile.PL b/ext/Time/Piece/Makefile.PL deleted file mode 100644 index 6682c8d911..0000000000 --- a/ext/Time/Piece/Makefile.PL +++ /dev/null @@ -1,7 +0,0 @@ -use ExtUtils::MakeMaker; - -WriteMakefile( - 'NAME' => 'Time::Piece', - MAN3PODS => {}, # Pods will be built by installman. - 'VERSION_FROM' => 'Piece.pm', -); diff --git a/ext/Time/Piece/Piece.pm b/ext/Time/Piece/Piece.pm deleted file mode 100644 index 4a3fb09bc0..0000000000 --- a/ext/Time/Piece/Piece.pm +++ /dev/null @@ -1,1326 +0,0 @@ -package Time::Piece; - -use strict; -use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); - -require Exporter; -require DynaLoader; -use Time::Seconds; -use Carp; - -@ISA = qw(Exporter DynaLoader); - -@EXPORT = qw( - localtime - gmtime -); - -@EXPORT_OK = qw( - strptime -); - -%EXPORT_TAGS = ( - ':override' => 'internal', - ); - -$VERSION = '0.13'; - -bootstrap Time::Piece $VERSION; - -my $DATE_SEP = '-'; -my $TIME_SEP = ':'; -my @MON_NAMES = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); -my @WDAY_NAMES = qw(Sun Mon Tue Wed Thu Fri Sat); -my @MONTH_NAMES = qw(January February March April May June - July August September October Novemeber December); -my @WEEKDAY_NAMES = qw(Sunday Monday Tuesday Wednesday - Thursday Friday Saturday); - -use constant 'c_sec' => 0; -use constant 'c_min' => 1; -use constant 'c_hour' => 2; -use constant 'c_mday' => 3; -use constant 'c_mon' => 4; -use constant 'c_year' => 5; -use constant 'c_wday' => 6; -use constant 'c_yday' => 7; -use constant 'c_isdst' => 8; -use constant 'c_epoch' => 9; -use constant 'c_islocal' => 10; - -sub localtime { - my $time = shift; - $time = time if (!defined $time); - _mktime($time, 1); -} - -sub gmtime { - my $time = shift; - $time = time if (!defined $time); - _mktime($time, 0); -} - -sub new { - my $proto = shift; - my $class = ref($proto) || $proto; - my $time = shift; - - my $self; - - if (defined($time)) { - $self = &localtime($time); - } - elsif (ref($proto) && $proto->isa('Time::Piece')) { - $self = _mktime($proto->[c_epoch], $proto->[c_islocal]); - } - else { - $self = &localtime(); - } - - return bless $self, $class; -} - -sub _mktime { - my ($time, $islocal) = @_; - my @time = $islocal ? - CORE::localtime($time) - : - CORE::gmtime($time); - wantarray ? @time : bless [@time, $time, $islocal], 'Time::Piece'; -} - -sub import { - # replace CORE::GLOBAL localtime and gmtime if required - my $class = shift; - my %params; - map($params{$_}++,@_,@EXPORT); - if (delete $params{':override'}) { - $class->export('CORE::GLOBAL', keys %params); - } - else { - $class->export((caller)[0], keys %params); - } -} - -## Methods ## - -sub s { - my $time = shift; - $time->[c_sec]; -} - -*sec = \&s; -*second = \&s; - -sub min { - my $time = shift; - $time->[c_min]; -} - -*minute = \&min; - -sub h { - my $time = shift; - $time->[c_hour]; -} - -*hour = \&h; - -sub d { - my $time = shift; - $time->[c_mday]; -} - -*mday = \&d; -*day_of_month = \&d; - -sub mon { - my $time = shift; - $time->[c_mon] + 1; -} - -sub _mon { - my $time = shift; - $time->[c_mon]; -} - -sub has_mon_names { - my $time = shift; - return 0; -} - -sub monname { - my $time = shift; - if (@_) { - return $_[$time->[c_mon]]; - } - elsif ($time->has_mon_names) { - return $time->mon_name($time->[c_mon]); - } - return $MON_NAMES[$time->[c_mon]]; -} - -sub has_month_names { - my $time = shift; - return 0; -} - -sub monthname { - my $time = shift; - if (@_) { - return $_[$time->[c_mon]]; - } - elsif ($time->has_month_names) { - return $time->month_name($time->[c_mon]); - } - return $MONTH_NAMES[$time->[c_mon]]; -} - -*month = \&monthname; - -sub y { - my $time = shift; - $time->[c_year] + 1900; -} - -*year = \&y; - -sub _year { - my $time = shift; - $time->[c_year]; -} - -sub wday { - my $time = shift; - $time->[c_wday] + 1; -} - -sub _wday { - my $time = shift; - $time->[c_wday]; -} - -*day_of_week = \&_wday; - -sub has_wday_names { - my $time = shift; - return 0; -} - -sub wdayname { - my $time = shift; - if (@_) { - return $_[$time->[c_wday]]; - } - elsif ($time->has_wday_names) { - return $time->wday_name($time->[c_mon]); - } - return $WDAY_NAMES[$time->[c_wday]]; -} - -sub has_weekday_names { - my $time = shift; - return 0; -} - -sub weekdayname { - my $time = shift; - if (@_) { - return $_[$time->[c_wday]]; - } - elsif ($time->has_weekday_names) { - return $time->weekday_name($time->[c_mon]); - } - return $WEEKDAY_NAMES[$time->[c_wday]]; -} - -*weekdayname = \&weekdayname; -*weekday = \&weekdayname; - -sub yday { - my $time = shift; - $time->[c_yday]; -} - -*day_of_year = \&yday; - -sub isdst { - my $time = shift; - $time->[c_isdst]; -} - -*daylight_savings = \&isdst; - -# Thanks to Tony Olekshy <olekshy@cs.ualberta.ca> for this algorithm -sub tzoffset { - my $time = shift; - - my $epoch = $time->[c_epoch]; - - my $j = sub { # Tweaked Julian day number algorithm. - - my ($s,$n,$h,$d,$m,$y) = @_; $m += 1; $y += 1900; - - # Standard Julian day number algorithm without constant. - # - my $y1 = $m > 2 ? $y : $y - 1; - - my $m1 = $m > 2 ? $m + 1 : $m + 13; - - my $day = int(365.25 * $y1) + int(30.6001 * $m1) + $d; - - # Modify to include hours/mins/secs in floating portion. - # - return $day + ($h + ($n + $s / 60) / 60) / 24; - }; - - # Compute floating offset in hours. - # - my $delta = 24 * (&$j(CORE::localtime $epoch) - &$j(CORE::gmtime $epoch)); - - # Return value in seconds rounded to nearest minute. - return Time::Seconds->new( int($delta * 60 + ($delta >= 0 ? 0.5 : -0.5)) * 60); -} - -sub epoch { - my $time = shift; - $time->[c_epoch]; -} - -sub hms { - my $time = shift; - my $sep = @_ ? shift(@_) : $TIME_SEP; - sprintf("%02d$sep%02d$sep%02d", $time->[c_hour], $time->[c_min], $time->[c_sec]); -} - -*time = \&hms; - -sub ymd { - my $time = shift; - my $sep = @_ ? shift(@_) : $DATE_SEP; - sprintf("%d$sep%02d$sep%02d", $time->year, $time->mon, $time->[c_mday]); -} - -*date = \&ymd; - -sub mdy { - my $time = shift; - my $sep = @_ ? shift(@_) : $DATE_SEP; - sprintf("%02d$sep%02d$sep%d", $time->mon, $time->[c_mday], $time->year); -} - -sub dmy { - my $time = shift; - my $sep = @_ ? shift(@_) : $DATE_SEP; - sprintf("%02d$sep%02d$sep%d", $time->[c_mday], $time->mon, $time->year); -} - -sub datetime { - my $time = shift; - my %seps = (date => $DATE_SEP, T => 'T', time => $TIME_SEP, @_); - return join($seps{T}, $time->date($seps{date}), $time->time($seps{time})); -} - -# taken from Time::JulianDay -sub julian_day { - my $time = shift; - my ($year, $month, $day) = ($time->year, $time->mon, $time->mday); - my ($tmp, $secs); - - $tmp = $day - 32075 - + 1461 * ( $year + 4800 - ( 14 - $month ) / 12 )/4 - + 367 * ( $month - 2 + ( ( 14 - $month ) / 12 ) * 12 ) / 12 - - 3 * ( ( $year + 4900 - ( 14 - $month ) / 12 ) / 100 ) / 4 - ; - - return $tmp; -} - -# Hi Mark-Jason! -sub mjd { - return shift->julian_day - 2_400_000.5; -} - -sub week { - # taken from the Calendar FAQ - use integer; - my $J = shift->julian_day; - my $d4 = ((($J + 31741 - ($J % 7)) % 146097) % 36524) % 1461; - my $L = $d4 / 1460; - my $d1 = (($d4 - $L) % 365) + $L; - return $d1 / 7 + 1; -} - -sub _is_leap_year { - my $year = shift; - return (($year %4 == 0) && !($year % 100 == 0)) || ($year % 400 == 0) - ? 1 : 0; -} - -sub is_leap_year { - my $time = shift; - my $year = $time->year; - return _is_leap_year($year); -} - -my @MON_LAST = qw(31 28 31 30 31 30 31 31 30 31 30 31); - -sub month_last_day { - my $time = shift; - my $year = $time->year; - my $_mon = $time->_mon; - return $MON_LAST[$_mon] + ($_mon == 1 ? _is_leap_year($year) : 0); -} - -use vars qw($_ftime); - -$_ftime = -{ - '%' => sub { - return "%"; - }, - 'a' => sub { - my ($format, $time) = @_; - $time->wdayname(); - }, - 'A' => sub { - my ($format, $time) = @_; - $time->weekdayname(); - }, - 'b' => sub { - my ($format, $time) = @_; - $time->monname(); - }, - 'B' => sub { - my ($format, $time) = @_; - $time->monthname(); - }, - 'c' => sub { - my ($format, $time) = @_; - $time->cdate(); - }, - 'C' => sub { - my ($format, $time) = @_; - sprintf("%02d", int($time->y() / 100)); - }, - 'd' => sub { - my ($format, $time) = @_; - sprintf("%02d", $time->d()); - }, - 'D' => sub { - my ($format, $time) = @_; - join("/", - $_ftime->{'m'}->('m', $time), - $_ftime->{'d'}->('d', $time), - $_ftime->{'y'}->('y', $time)); - }, - 'e' => sub { - my ($format, $time) = @_; - sprintf("%2d", $time->d()); - }, - 'h' => sub { - my ($format, $time, @rest) = @_; - $time->monname(@rest); - }, - 'H' => sub { - my ($format, $time) = @_; - sprintf("%02d", $time->h()); - }, - 'I' => sub { - my ($format, $time) = @_; - my $h = $time->h(); - sprintf("%02d", $h == 0 ? 12 : ($h < 13 ? $h : $h % 12)); - }, - 'j' => sub { - my ($format, $time) = @_; - sprintf("%03d", $time->yday()); - }, - 'm' => sub { - my ($format, $time) = @_; - sprintf("%02d", $time->mon()); - }, - 'M' => sub { - my ($format, $time) = @_; - sprintf("%02d", $time->min()); - }, - 'n' => sub { - return "\n"; - }, - 'p' => sub { - my ($format, $time) = @_; - my $h = $time->h(); - $h == 0 ? 'pm' : ($h < 13 ? 'am' : 'pm'); - }, - 'r' => sub { - my ($format, $time) = @_; - join(":", - $_ftime->{'I'}->('I', $time), - $_ftime->{'M'}->('M', $time), - $_ftime->{'S'}->('S', $time)) . - " " . $_ftime->{'p'}->('p', $time); - }, - 'R' => sub { - my ($format, $time) = @_; - join(":", - $_ftime->{'H'}->('H', $time), - $_ftime->{'M'}->('M', $time)); - }, - 'S' => sub { - my ($format, $time) = @_; - sprintf("%02d", $time->s()); - }, - 't' => sub { - return "\t"; - }, - 'T' => sub { - my ($format, $time) = @_; - join(":", - $_ftime->{'H'}->('H', $time), - $_ftime->{'M'}->('M', $time), - $_ftime->{'S'}->('S', $time)); - }, - 'u' => sub { - my ($format, $time) = @_; - ($time->wday() + 5) % 7 + 1; - }, - # U taken care by libc - 'V' => sub { - my ($format, $time) = @_; - sprintf("%02d", $time->week()); - }, - 'w' => sub { - my ($format, $time) = @_; - $time->_wday(); - }, - # W taken care by libc - 'x' => sub { - my ($format, $time) = @_; - join("/", - $_ftime->{'m'}->('m', $time), - $_ftime->{'d'}->('d', $time), - $_ftime->{'y'}->('y', $time)); - }, - 'y' => sub { - my ($format, $time) = @_; - sprintf("%02d", $time->y() % 100); - }, - 'Y' => sub { - my ($format, $time) = @_; - sprintf("%4d", $time->y()); - }, - # Z taken care by libc -}; - -sub has_ftime { - my ($format) = @_; - exists $_ftime->{$format}; -} - -sub has_ftimes { - keys %$_ftime; -} - -sub delete_ftime { - delete $_ftime->{@_}; -} - -sub ftime { - my ($format) = $_[0]; - if (@_ == 1) { - return $_ftime->{$format}; - } elsif (@_ == 2) { - if (ref $_[0] eq 'CODE') { - $_ftime->{$format} = $_[1]; - } else { - require Carp; - Carp::croak "ftime: second argument not a code ref"; - } - } else { - require Carp; - Carp::croak "ftime: want one or two arguments"; - } -} - -sub _ftime { - my ($format, $time, @rest) = @_; - if (has_ftime($format)) { - # We are passing format to the anonsubs so that - # one can share the same sub among several formats. - return $_ftime->{$format}->($format, $time, @rest); - } - # If we don't know it, pass it down to the libc layer. - # (In other words, cheat.) - # This pays for for '%Z', though, and for all the - # locale-specific %Ex and %Oy formats. - return $time->_strftime("%$format"); -} - -sub strftime { - my $time = shift; - my $format = @_ ? shift(@_) : "%a, %d %b %Y %H:%M:%S %Z"; - $format =~ s/%(.)/_ftime($1, $time, @_)/ge; - return $format; -} - -sub _strftime { - my $time = shift; - my $format = @_ ? shift(@_) : "%a, %d %b %Y %H:%M:%S %Z"; - return __strftime($format, (@$time)[c_sec..c_isdst]); -} - -use vars qw($_ptime); - -$_ptime = -{ - '%' => sub { - $_[1] =~ s/^%// && $1; - }, - # a unimplemented - # A unimplemented - # b unimplemented - # B unimplemented - # c unimplemented - 'C' => sub { - $_[1] =~ s/^(0[0-9])// && $1; - }, - 'd' => sub { - $_[1] =~ s/^(0[1-9]|2[0-9]|3[01])// && $1; - }, - 'D' => sub { - my %D; - my $D; - if (defined ($D = $_ptime->{'m'}->($_[0], $_[1]))) { - $D{m} = $D; - } else { - return; - } - $_[1] =~ s:^/:: || return; - if (defined ($D = $_ptime->{'d'}->($_[0], $_[1]))) { - $D{d} = $D; - } else { - return; - } - $_[1] =~ s:^/:: || return; - if (defined ($D = $_ptime->{'y'}->($_[0], $_[1]))) { - $D{y} = $D; - } else { - return; - } - return { %D }; - }, - 'e' => sub { - $_[1] =~ s/^( [1-9]|2[0-9]|3[01])// && $1; - }, - # h unimplemented - 'H' => sub { - $_[1] =~ s/^([0-1][0-9]|2[0-3])// && $1; - }, - 'I' => sub { - $_[1] =~ s/^(0[1-9]|1[012])// && $1; - }, - 'j' => sub { - $_[1] =~ s/^([0-9][0-9][0-9])// && $1 >= 1 && $1 <= 366 && $1; - }, - 'm' => sub { - $_[1] =~ s/^(0[1-9]|1[012])// && $1; - }, - 'M' => sub { - $_[1] =~ s/^([0-5][0-9])// && $1; - }, - 't' => sub { - $_[1] =~ s/^\n// && $1; - }, - 'p' => sub { - $_[1] =~ s/^(am|pm)// && $1; - }, - 'r' => sub { - my %r; - my $r; - if (defined ($r = $_ptime->{'I'}->($_[0], $_[1]))) { - $r{I} = $r; - } else { - return; - } - $_[1] =~ s/^:// || return; - if (defined ($r = $_ptime->{'M'}->($_[0], $_[1]))) { - $r{M} = $r; - } else { - return; - } - $_[1] =~ s/^:// || return; - if (defined ($r = $_ptime->{'S'}->($_[0], $_[1]))) { - $r{S} = $r; - } else { - return; - } - $_[1] =~ s/^ // || return; - if (defined ($r = $_ptime->{'p'}->($_[0], $_[1]))) { - $r{p} = $r; - } else { - return; - } - return { %r }; - }, - 'R' => sub { - my %R; - my $R; - if (defined ($R = $_ptime->{'H'}->($_[0], $_[1]))) { - $R{H} = $R; - } else { - return; - } - $_[1] =~ s/^:// || return; - if (defined ($R = $_ptime->{'M'}->($_[0], $_[1]))) { - $R{M} = $R; - } else { - return; - } - return { %R }; - }, - 'S' => sub { - $_[1] =~ s/^([0-5][0-9])// && $1; - }, - 't' => sub { - $_[1] =~ s/^\t// && $1; - }, - 'T' => sub { - my %T; - my $T; - if (defined ($T = $_ptime->{'H'}->($_[0], $_[1]))) { - $T{H} = $T; - } else { - return; - } - $_[1] =~ s/^:// || return; - if (defined ($T = $_ptime->{'M'}->($_[0], $_[1]))) { - $T{M} = $T; - } else { - return; - } - $_[1] =~ s/^:// || return; - if (defined ($T = $_ptime->{'S'}->($_[0], $_[1]))) { - $T{S} = $T; - } else { - return; - } - return { %T }; - }, - # u unimplemented - # U unimplemented - # w unimplemented - # W unimplemented - 'x' => sub { - my %x; - my $x; - if (defined ($x = $_ptime->{'m'}->($_[0], $_[1]))) { - $x{m} = $x; - } else { - return; - } - $_[1] =~ s:^/:: || return; - if (defined ($x = $_ptime->{'d'}->($_[0], $_[1]))) { - $x{d} = $x; - } else { - return; - } - $_[1] =~ s:^/:: || return; - if (defined ($x = $_ptime->{'y'}->($_[0], $_[1]))) { - $x{y} = $x; - } else { - return; - } - return { %x }; - }, - 'y' => sub { - $_[1] =~ s/^([0-9][0-9])// && $1; - }, - 'Y' => sub { - $_[1] =~ s/^([1-9][0-9][0-9][0-9])// && $1; - }, - # Z too unportable -}; - -sub has_ptime { - my ($format) = @_; - exists $_ptime->{$format}; -} - -sub has_ptimes { - keys %$_ptime; -} - -sub delete_ptime { - delete $_ptime->{@_}; -} - -sub ptime { - my ($format) = $_[0]; - if (@_ == 1) { - return $_ptime->{$format}; - } elsif (@_ == 2) { - if (ref $_[0] eq 'CODE') { - $_ptime->{$format} = $_[1]; - } else { - require Carp; - Carp::croak "ptime: second argument not a code ref"; - } - } else { - require Carp; - Carp::croak "ptime: want one or two arguments"; - } -} - -sub _ptime { - my ($format, $stime) = @_; - if (has_ptime($format)) { - # We are passing format to the anonsubs so that - # one can share the same sub among several formats. - return $_ptime->{$format}->($format, $_[1]); - } - die "strptime: unknown format %$format (time '$stime')\n"; -} - -sub strptime { - my $format = shift; - my $stime = shift; - my %ptime; - - while ($format ne '') { - if ($format =~ s/^([^%]+)//) { - my $skip = $1; - last unless $stime =~ s/^\Q$skip//; - } - while ($format =~ s/^%(.)//) { - my $f = $1; - my $t = _ptime($f, $stime); - if (defined $t) { - if (ref $t eq 'HASH') { - @ptime{keys %$t} = values %$t; - } else { - $ptime{$f} = $t; - } - } - } - } - - return %ptime; -} - -sub wday_names { - shift if ref($_[0]) && $_[0]->isa(__PACKAGE__); # strip first if called as a method - my @old = @WDAY_NAMES; - if (@_) { - @WDAY_NAMES = @_; - } - return @old; -} - -sub weekday_names { - shift if ref($_[0]) && $_[0]->isa(__PACKAGE__); # strip first if called as a method - my @old = @WEEKDAY_NAMES; - if (@_) { - @WEEKDAY_NAMES = @_; - } - return @old; -} - -sub mon_names { - shift if ref($_[0]) && $_[0]->isa(__PACKAGE__); # strip first if called as a method - my @old = @MON_NAMES; - if (@_) { - @MON_NAMES = @_; - } - return @old; -} - -sub month_names { - shift if ref($_[0]) && $_[0]->isa(__PACKAGE__); # strip first if called as a method - my @old = @MONTH_NAMES; - if (@_) { - @MONTH_NAMES = @_; - } - return @old; -} - -sub time_separator { - shift if ref($_[0]) && $_[0]->isa(__PACKAGE__); - my $old = $TIME_SEP; - if (@_) { - $TIME_SEP = $_[0]; - } - return $old; -} - -sub date_separator { - shift if ref($_[0]) && $_[0]->isa(__PACKAGE__); - my $old = $DATE_SEP; - if (@_) { - $DATE_SEP = $_[0]; - } - return $old; -} - -use overload '""' => \&cdate; - -sub cdate { - my $time = shift; - if ($time->[c_islocal]) { - return scalar(CORE::localtime($time->[c_epoch])); - } - else { - return scalar(CORE::gmtime($time->[c_epoch])); - } -} - -use overload - '-' => \&subtract, - '+' => \&add; - -sub subtract { - my $time = shift; - my $rhs = shift; - die "Can't subtract a date from something!" if shift; - - if (ref($rhs) && $rhs->isa('Time::Piece')) { - return Time::Seconds->new($time->[c_epoch] - $rhs->epoch); - } - else { - # rhs is seconds. - return _mktime(($time->[c_epoch] - $rhs), $time->[c_islocal]); - } -} - -sub add { - warn "add\n"; - my $time = shift; - my $rhs = shift; - croak "Invalid rhs of addition: $rhs" if ref($rhs); - - return _mktime(($time->[c_epoch] + $rhs), $time->[c_islocal]); -} - -use overload - '<=>' => \&compare; - -sub get_epochs { - my ($time, $rhs, $reverse) = @_; - $time = $time->epoch; - if (UNIVERSAL::isa($rhs, 'Time::Piece')) { - $rhs = $rhs->epoch; - } - if ($reverse) { - return $rhs, $time; - } - return $time, $rhs; -} - -sub compare { - my ($lhs, $rhs) = get_epochs(@_); - return $lhs <=> $rhs; -} - -1; -__END__ - -=head1 NAME - -Time::Piece - Object Oriented time objects - -=head1 SYNOPSIS - - use Time::Piece; - - my $t = localtime; - print "Time is $t\n"; - print "Year is ", $t->year, "\n"; - -=head1 DESCRIPTION - -This module replaces the standard localtime and gmtime functions with -implementations that return objects. It does so in a backwards -compatible manner, so that using localtime/gmtime in the way documented -in perlfunc will still return what you expect. - -The module actually implements most of an interface described by -Larry Wall on the perl5-porters mailing list here: -http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2000-01/msg00241.html - -=head1 USAGE - -After importing this module, when you use localtime(0 or gmtime() in -scalar context, rather than getting an ordinary scalar string -representing the date and time, you get a Time::Piece object, whose -stringification happens to produce the same effect as the localtime() -and gmtime(0 functions. - -There is also a new() constructor provided, which is the same as -localtime(), except when passed a Time::Piece object, in which case -it's a copy constructor. - -The following methods are available on the object: - - $t->s # 0..61 - # 60 and 61: leap second and double leap second - $t->sec # same as $t->s - $t->second # same as $t->s - $t->min # 0..59 - $t->h # 0..24 - $t->hour # same as $t->h - $t->d # 1..31 - $t->mday # same as $t->d - $t->mon # 1 = January - $t->_mon # 0 = January - $t->monname # Feb - $t->monthname # February - $t->month # same as $t->monthname - $t->y # based at 0 (year 0 AD is, of course 1 BC) - $t->year # same as $t->y - $t->_year # year minus 1900 - $t->wday # 1 = Sunday - $t->day_of_week # 0 = Sunday - $t->_wday # 0 = Sunday - $t->wdayname # Tue - $t->weekdayname # Tuesday - $t->weekday # same as weekdayname - $t->yday # also available as $t->day_of_year, 0 = Jan 01 - $t->isdst # also available as $t->daylight_savings - $t->daylight_savings # same as $t->isdst - - $t->hms # 12:34:56 - $t->hms(".") # 12.34.56 - $t->time # same as $t->hms - - $t->ymd # 2000-02-29 - $t->date # same as $t->ymd - $t->mdy # 02-29-2000 - $t->mdy("/") # 02/29/2000 - $t->dmy # 29-02-2000 - $t->dmy(".") # 29.02.2000 - $t->datetime # 2000-02-29T12:34:56 (ISO 8601) - $t->cdate # Tue Feb 29 12:34:56 2000 - "$t" # same as $t->cdate - - $t->epoch # seconds since the epoch - $t->tzoffset # timezone offset in a Time::Seconds object - - $t->julian_day # number of days since Julian period began - $t->mjd # modified Julian day - - $t->week # week number (ISO 8601) - - $t->is_leap_year # true if it its - Time::Piece::_is_leap_year($year) # true if it its - $t->month_last_day # 28..31 - - $t->time_separator($s) # set the default separator (default ":") - $t->date_separator($s) # set the default separator (default "-") - $t->wday_names(@days) # set the default weekday names, abbreviated - $t->weekday_names(@days) # set the default weekday names - $t->mon_names(@days) # set the default month names, abbreviated - $t->month_names(@days) # set the default month names - - $t->strftime($format) # date and time formatting - $t->strftime() # "Tue, 29 Feb 2000 12:34:56 GMT" - - $t->_strftime($format) # same as POSIX::strftime (without the - # overhead of the full POSIX extension), - # calls the operating system libraries, - # as opposed to $t->strftime() - - use Time::Piece 'strptime'; # date parsing - my %p = strptime("%H:%M", "12:34"); # $p{H} and ${M} will be set - -=head2 Local Locales - -Both wdayname (day) and monname (month) allow passing in a list to use -to index the name of the days against. This can be useful if you need -to implement some form of localisation without actually installing or -using the locales provided by the operating system. - - my @weekdays = qw( Dimanche Lundi Merdi Mercredi Jeudi Vendredi Samedi ); - - my $french_day = localtime->day(@weekdays); - -These settings can be overriden globally too: - - Time::Piece::weekday_names(@weekdays); - Time::Piece::wday_names(@wdays); - -Or for months: - - Time::Piece::month_names(@months); - Time::Piece::mon_names(@mon); - -And locally for months: - - print localtime->month(@months); - -=head2 Date Calculations - -It's possible to use simple addition and subtraction of objects: - - use Time::Seconds; - - my $seconds = $t1 - $t2; - $t1 += ONE_DAY; # add 1 day (constant from Time::Seconds) - -The following are valid ($t1 and $t2 are Time::Piece objects): - - $t1 - $t2; # returns Time::Seconds object - $t1 - 42; # returns Time::Piece object - $t1 + 533; # returns Time::Piece object - -However adding a Time::Piece object to another Time::Piece object -will cause a runtime error. - -Note that the first of the above returns a Time::Seconds object, so -while examining the object will print the number of seconds (because -of the overloading), you can also get the number of minutes, hours, -days, weeks and years in that delta, using the Time::Seconds API. - -=head2 Date Comparisons - -Date comparisons are also possible, using the full suite of "<", ">", -"<=", ">=", "<=>", "==" and "!=". - -=head2 YYYY-MM-DDThh:mm:ss - -The ISO 8601 standard defines the date format to be YYYY-MM-DD, and -the time format to be hh:mm:ss (24 hour clock), and if combined, they -should be concatenated with the date first and with a capital 'T' in -front of the time. - -=head2 Week Number - -The I<week number> may be an unknown concept to some readers. The ISO -8601 standard defines that weeks begin on a Monday and week 1 of the -year is the week that includes both January the 4th and the first -Thursday of the year. In other words, if the first Monday of January -is the 2nd, 3rd, or 4th, the preceding days of the January are part of -the last week of the preceding year. Week numbers range from 1 to 53. - -=head2 strftime method - -The strftime() method can be used to format Time::Piece objects for output. -The argument to strftime() is the format string to be used, for example: - - $t->strftime("%H:%M"); - -will output the hours and minutes concatenated with a colon. The -available format characters are as in the standard strftime() function -(unless otherwise indicated the implementation is in pure Perl, -no operating system strftime() is invoked): - -=over 4 - -=item %% - -The percentage character "%". - -=item %a - -The abbreviated weekday name, e.g. 'Tue'. Note that the abbreviations -are not necessarily three characters wide in all languages. - -=item %A - -The weekday name, e.g. 'Tuesday'. - -=item %b - -The abbreviated month name, e.g. 'Feb'. Note that the abbreviations -are not necessarily three characters wide in all languages. - -=item %B - -The month name, e.g. 'February'. - -=item %c - -The ctime format, or the localtime()/gmtime() format: C<%a %b %m %H:%M:%S %Y>. - -(Should be avoided: use $t->timedate instead.) - -=item %C - -The 'centuries' number, e.g. 19 for the year 1999 and 20 for the year 2000. - -=item %d - -The zero-filled right-aligned day of the month, e.g. '09' or '10'. - -=item %D - -C<%m/%d/%d>. - -(Should be avoided: use $t->date instead.) - -=item %e - -The space-filled right-aligned day of the month, e.g. ' 9' or '10'. - -=item %h - -Same as C<%b>, the abbreviated monthname. - -=item %H - -The zero-filled right-aligned hours in 24 hour clock, e.g. '09' or '10'. - -=item %I - -The zero-filled right-aligned hours in 12 hour clock, e.g. '09' or '10'. - -=item %j - -The zero-filled right-aligned day of the year, e.g. '001' or '365'. - -=item %m - -The zero-filled right-aligned month number, e.g. '09' or '10'. - -=item %M - -The zero-filled right-aligned minutes, e.g. '09' or '10'. - -=item %n - -The newline character "\n". - -=item %p - -Notice that this is somewhat meaningless in 24 hour clocks. - -=item %r - -C<%I:%M:%S %p>. - -(Should be avoided: use $t->time instead.) - -=item %R - -C<%H:%M>. - -=item %S - -The zero-filled right-aligned seconds, e.g. '09' or '10'. - -=item %t - -The tabulator character "\t". - -=item %T - -C<%H:%M%S> - -(Should be avoided: use $t->time instead.) - -=item %u - -The day of the week with Monday as 1 (one) and Sunday as 7. - -=item %U - -The zero-filled right-aligned week number of the year, Sunday as the -first day of the week, from '00' to '53'. - -(Currently taken care by the operating system strftime().) - -=item %V - -The zero-filled right-aligned week of the year, e.g. '01' or '53'. -(ISO 8601) - -=item %w - -The day of the week with Sunday as 0 (zero) and Monday as 1 (one). - -=item %W - -The zero-filled right-aligned week number of the year, Monday as the -first day of the week, from '00' to '53'. - -(Currently taken care by the operating system strftime().) - -=item %x - -C<%m/%d/%y>. - -(Should be avoided: use $t->date instead.) - -=item %y - -The zero-filled right-aligned last two numbers of the year, e.g. 99 -for 1999 and 01 for 2001. - -(Should be avoided: this is the Y2K bug alive and well.) - -=item %Y - -The year, e.g. 1999 or 2001. - -=item %Z - -The timezone name, for example "GMT" or "EET". - -(Taken care by the operating system strftime().) - -=back - -The format C<Z> and any of the C<O*> and C<E*> formats are handled by -the operating system, not by Time::Piece, because those formats are -usually rather unportable and non-standard. (For example 'MST' can -mean almost anything: 'Mountain Standard Time' or 'Moscow Standard Time'.) - -=head2 strptime function - -You can export the strptime() function and use it to parse date and -time strings back to numbers. For example the following will return -the hours, minutes, and seconds as $parse{H}, $parse{M}, and $parse{S}. - - use Time::Piece 'strptime'; - my %parse = strptime('%H:%M:S', '12:34:56'); - -For 'compound' formats like for example 'T' strptime() will return -the 'components'. - -strptime() does not perform overly strict checks on the dates and -times, it will be perfectly happy with the 31st day of February, -for example. Stricter validation should be performed by other means. - -=head2 Global Overriding - -Finally, it's possible to override localtime and gmtime everywhere, by -including the ':override' tag in the import list: - - use Time::Piece ':override'; - -=head1 SEE ALSO - -The excellent Calendar FAQ at L<http://www.tondering.dk/claus/calendar.html> - -If you just want an object-oriented interface to the usual time -functions see L<Time::localtime> and L<Time::gmtime> which are part -of the standard distribution. Beware, though, that their fields are as -in the C library: the I<year> is I<year-1900> (like $t->_year in Time::Piece) -and I<months> begin from zero (like $t->_mon). - -L<strftime(3)>, L<strftime(3)> - -=head1 AUTHOR - -Matt Sergeant, matt@sergeant.org - -This module is based on Time::Object, with changes suggested by Jarkko -Hietaniemi before including in core perl. - -=head2 License - -This module is free software, you may distribute it under the same terms -as Perl. - -=head2 Bugs - -The test harness leaves much to be desired. Patches welcome. - -=cut diff --git a/ext/Time/Piece/Piece.t b/ext/Time/Piece/Piece.t deleted file mode 100644 index f20069679e..0000000000 --- a/ext/Time/Piece/Piece.t +++ /dev/null @@ -1,330 +0,0 @@ -BEGIN { - chdir 't' if -d 't'; - @INC = '../lib'; -} - -BEGIN { - require Config; import Config; - - if ($Config{extensions} !~ m!\bTime/Piece\b!) { - print "1..0 # Time::Piece not built\n"; - exit 0; - } -} - -print "1..86\n"; - -use Time::Piece; - -print "ok 1\n"; - -my $t = gmtime(951827696); # 2001-02-29T12:34:56 - -print "not " unless $t->sec == 56; -print "ok 2\n"; - -print "not " unless $t->second == 56; -print "ok 3\n"; - -print "not " unless $t->min == 34; -print "ok 4\n"; - -print "not " unless $t->minute == 34; -print "ok 5\n"; - -print "not " unless $t->hour == 12; -print "ok 6\n"; - -print "not " unless $t->mday == 29; -print "ok 7\n"; - -print "not " unless $t->day_of_month == 29; -print "ok 8\n"; - -print "not " unless $t->mon == 2; -print "ok 9\n"; - -print "not " unless $t->_mon == 1; -print "ok 10\n"; - -print "not " unless $t->monname eq 'Feb'; -print "ok 11\n"; - -print "not " unless $t->month eq 'February'; -print "ok 12\n"; - -print "not " unless $t->year == 2000; -print "ok 13\n"; - -print "not " unless $t->_year == 100; -print "ok 14\n"; - -print "not " unless $t->wday == 3; -print "ok 15\n"; - -print "not " unless $t->_wday == 2; -print "ok 16\n"; - -print "not " unless $t->day_of_week == 2; -print "ok 17\n"; - -print "not " unless $t->wdayname eq 'Tue'; -print "ok 18\n"; - -print "not " unless $t->weekday eq 'Tuesday'; -print "ok 19\n"; - -print "not " unless $t->yday == 59; -print "ok 20\n"; - -print "not " unless $t->day_of_year == 59; -print "ok 21\n"; - -# In GMT there should be no daylight savings ever. - -my $dst = 0; -my $dst_mess = ''; -if ($^O eq 'os2') { - # OS/2 EMX bug - $dst = (CORE::gmtime(0))[8]; - $dst_mess = ' # skipped: gmtime(0) thinks DST gmtime 0 == -1'; -} -print "not " unless $t->isdst == $dst; -print "ok 22$dst_mess\n"; - -print "not " unless $t->daylight_savings == $dst; -print "ok 23$dst_mess\n"; - -print "not " unless $t->hms eq '12:34:56'; -print "ok 24\n"; - -print "not " unless $t->time eq '12:34:56'; -print "ok 25\n"; - -print "not " unless $t->ymd eq '2000-02-29'; -print "ok 26\n"; - -print "not " unless $t->date eq '2000-02-29'; -print "ok 27\n"; - -print "not " unless $t->mdy eq '02-29-2000'; -print "ok 28\n"; - -print "not " unless $t->dmy eq '29-02-2000'; -print "ok 29\n"; - -print "not " unless $t->cdate eq 'Tue Feb 29 12:34:56 2000'; -print "ok 30\n"; - -print "not " unless "$t" eq 'Tue Feb 29 12:34:56 2000'; -print "ok 31\n"; - -print "not " unless $t->datetime eq '2000-02-29T12:34:56'; -print "ok 32\n"; - -print "not " unless $t->epoch == 951827696; -print "ok 33\n"; - -# ->tzoffset? - -print "not " unless ($t->julian_day / 2451604.0075) - 1 < 0.001; -print "ok 34\n"; - -print "not " unless ($t->mjd / 51603.5075) - 1 < 0.001; -print "ok 35\n"; - -print "not " unless $t->week == 9; -print "ok 36\n"; - -if ($Config{d_strftime}) { - - print "not " unless $t->strftime('%a') eq 'Tue'; - print "ok 37\n"; - - print "not " unless $t->strftime('%A') eq 'Tuesday'; - print "ok 38\n"; - - print "not " unless $t->strftime('%b') eq 'Feb'; - print "ok 39\n"; - - print "not " unless $t->strftime('%B') eq 'February'; - print "ok 40\n"; - - print "not " unless $t->strftime('%c') eq 'Tue Feb 29 12:34:56 2000'; - print "ok 41\n"; - - print "not " unless $t->strftime('%C') == 20; - print "ok 42\n"; - - print "not " unless $t->strftime('%d') == 29; - print "ok 43\n"; - - print "not " unless $t->strftime('%D') eq '02/29/00'; # Yech! - print "ok 44\n"; - - print "not " unless $t->strftime('%e') eq '29'; # should test with < 10 - print "ok 45\n"; - - print "not " unless $t->strftime('%H') eq '12'; # should test with < 10 - print "ok 46\n"; - - print "not " unless $t->strftime('%b') eq 'Feb'; - print "ok 47\n"; - - print "not " unless $t->strftime('%I') eq '12'; # should test with < 10 - print "ok 48\n"; - - print "not " unless $t->strftime('%j') eq '059'; - print "ok 49\n"; - - print "not " unless $t->strftime('%M') eq '34'; # should test with < 10 - print "ok 50\n"; - - print "not " unless $t->strftime('%p') eq 'am'; - print "ok 51\n"; - - print "not " unless $t->strftime('%r') eq '12:34:56 am'; - print "ok 52\n"; - - print "not " unless $t->strftime('%R') eq '12:34'; # should test with > 12 - print "ok 53\n"; - - print "not " unless $t->strftime('%S') eq '56'; # should test with < 10 - print "ok 54\n"; - - print "not " unless $t->strftime('%T') eq '12:34:56'; # < 12 and > 12 - print "ok 55\n"; - - print "not " unless $t->strftime('%u') == 2; - print "ok 56\n"; - - print "not " unless $t->strftime('%U') eq '09'; # Sun cmp Mon - print "ok 57\n"; - - print "not " unless $t->strftime('%V') eq '09'; # Sun cmp Mon - print "ok 58\n"; - - print "not " unless $t->strftime('%w') == 2; - print "ok 59\n"; - - print "not " unless $t->strftime('%W') eq '09'; # Sun cmp Mon - print "ok 60\n"; - - print "not " unless $t->strftime('%x') eq '02/29/00'; # Yech! - print "ok 61\n"; - - print "not " unless $t->strftime('%y') == 0; # should test with 1999 - print "ok 62\n"; - - print "not " unless $t->strftime('%Y') eq '2000'; - print "ok 63\n"; - - # %Z can't be tested, too unportable - -} else { - for (38...63) { - print "ok $_ # Skip: no strftime\n"; - } -} - -print "not " unless $t->ymd("") eq '20000229'; -print "ok 64\n"; - -print "not " unless $t->mdy("/") eq '02/29/2000'; -print "ok 65\n"; - -print "not " unless $t->dmy(".") eq '29.02.2000'; -print "ok 66\n"; - -print "not " unless $t->date_separator() eq '-'; -print "ok 67\n"; - -$t->date_separator("/"); - -print "not " unless $t->ymd eq '2000/02/29'; -print "ok 68\n"; - -print "not " unless $t->date_separator() eq '/'; -print "ok 69\n"; - -$t->date_separator("-"); - -print "not " unless $t->hms(".") eq '12.34.56'; -print "ok 70\n"; - -print "not " unless $t->time_separator() eq ':'; -print "ok 71\n"; - -$t->time_separator("."); - -print "not " unless $t->hms eq '12.34.56'; -print "ok 72\n"; - -print "not " unless $t->time_separator() eq '.'; -print "ok 73\n"; - -$t->time_separator(":"); - -my @fidays = qw( sunnuntai maanantai tiistai keskiviikko torstai - perjantai lauantai ); -my @frdays = qw( Dimanche Lundi Merdi Mercredi Jeudi Vendredi Samedi ); - -print "not " unless $t->weekday(@fidays) eq "tiistai"; -print "ok 74\n"; - -my @days = $t->weekday_names(); - -Time::Piece::weekday_names(@frdays); - -print "not " unless $t->weekday eq "Merdi"; -print "ok 75\n"; - -Time::Piece::weekday_names(@days); - -print "not " unless $t->weekday eq "Tuesday"; -print "ok 76\n"; - -my @months = $t->mon_names(); - -my @dumonths = qw(januari februari maart april mei juni - juli augustus september oktober november december); - -print "not " unless $t->month(@dumonths) eq "februari"; -print "ok 77\n"; - -Time::Piece::month_names(@dumonths); - -print "not " unless $t->month eq "februari"; -print "ok 78\n"; - -Time::Piece::mon_names(@months); - -print "not " unless $t->monname eq "Feb"; -print "ok 79\n"; - -print "not " unless - $t->datetime(date => '/', T => ' ', time => '-') eq "2000/02/29 12-34-56"; -print "ok 80\n"; - -print "not " unless $t->is_leap_year; -print "ok 81\n"; - -print "not " unless $t->month_last_day == 29; # test more -print "ok 82\n"; - -print "not " if Time::Piece::_is_leap_year(1900); -print "ok 83\n"; - -print "not " if Time::Piece::_is_leap_year(1901); -print "ok 84\n"; - -print "not " unless Time::Piece::_is_leap_year(1904); -print "ok 85\n"; - -use Time::Piece 'strptime'; - -my %T = strptime("%T", "12:34:56"); - -print "not " unless keys %T == 3 && $T{H} == 12 && $T{M} == 34 && $T{S} == 56; -print "ok 86\n"; - diff --git a/ext/Time/Piece/Piece.xs b/ext/Time/Piece/Piece.xs deleted file mode 100644 index d888588dcb..0000000000 --- a/ext/Time/Piece/Piece.xs +++ /dev/null @@ -1,43 +0,0 @@ -#ifdef __cplusplus -#extern "C" { -#endif -#include "EXTERN.h" -#include "perl.h" -#include "XSUB.h" -#include <time.h> -#ifdef __cplusplus -} -#endif - -MODULE = Time::Piece PACKAGE = Time::Piece - -PROTOTYPES: ENABLE - -char * -__strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) - char * fmt - int sec - int min - int hour - int mday - int mon - int year - int wday - int yday - int isdst - - PREINIT: - char *buf = NULL; - - CODE: - #XXX: an sv_strftime() that can make use of the TARG would faster - buf = my_strftime(fmt, sec, min, hour, mday, mon, year, wday, yday, isdst); - RETVAL = buf; - - OUTPUT: - RETVAL - - CLEANUP: - if (buf) { - Safefree(buf); - } diff --git a/ext/Time/Piece/README b/ext/Time/Piece/README deleted file mode 100644 index a9ef44c18f..0000000000 --- a/ext/Time/Piece/README +++ /dev/null @@ -1,111 +0,0 @@ -NAME - Time::Object - Object Oriented time objects - -SYNOPSIS - use Time::Object; - - my $t = localtime; - print "Time is $t\n"; - print "Year is ", $t->year, "\n"; - -DESCRIPTION - This module replaces the standard localtime and gmtime functions - with implementations that return objects. It does so in a - backwards compatible manner, so that using localtime/gmtime in - the way documented in perlfunc will still return what you - expect. - - The module actually implements most of an interface described by - Larry Wall on the perl5-porters mailing list here: - http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2000- - 01/msg00241.html - -USAGE - After importing this module, when you use localtime or gmtime in - a scalar context, rather than getting an ordinary scalar string - representing the date and time, you get a Time::Object object, - whose stringification happens to produce the same effect as the - localtime and gmtime functions. There is also a new() - constructor provided, which is the same as localtime(), except - when passed a Time::Object object, in which case it's a copy - constructor. The following methods are available on the object: - - $t->sec # also available as $t->second - $t->min # also available as $t->minute - $t->hour - $t->mday # also available as $t->day_of_month - $t->mon # based at 1 - $t->_mon # based at 0 - $t->monname # February - $t->month # same as $t->monname - $t->year # based at 0 (year 0 AD is, of course 1 BC). - $t->_year # year minus 1900 - $t->yr # 2 digit year - $t->wday # based at 1 = Sunday - $t->_wday # based at 0 = Sunday - $t->day_of_week # based at 0 = Sunday - $t->wdayname # Tuesday - $t->day # same as wdayname - $t->yday # also available as $t->day_of_year - $t->isdst # also available as $t->daylight_savings - $t->hms # 01:23:45 - $t->ymd # 2000/02/29 - $t->mdy # 02/29/2000 - $t->dmy # 29/02/2000 - $t->date # Tue Feb 29 01:23:45 2000 - "$t" # same as $t->date - $t->epoch # seconds since the epoch - $t->tzoffset # timezone offset in a Time::Seconds object - $t->strftime(FORMAT) # same as POSIX::strftime (without POSIX.pm) - - Date Calculations - - It's possible to use simple addition and subtraction of objects: - - use Time::Seconds; - - my $seconds = $t1 - $t2; - $t1 += ONE_DAY; # add 1 day (constant from Time::Seconds) - - The following are valid ($t1 and $t2 are Time::Object objects): - - $t1 - $t2; # returns Time::Seconds object - $t1 - 42; # returns Time::Object object - $t1 + 533; # returns Time::Object object - - However adding a Time::Object object to another Time::Object - object will cause a runtime error. - - Note that the first of the above returns a Time::Seconds object, - so while examining the object will print the number of seconds - (because of the overloading), you can also get the number of - minutes, hours, days, weeks and years in that delta, using the - Time::Seconds API. - - Date Comparisons - - Date comparisons are also possible, using the full suite of "<", - ">", "<=", ">=", "<=>", "==" and "!=". - - Global Overriding - - Finally, it's possible to override localtime and gmtime - everywhere, by including the 'overrideGlobally' tag in the - import list: - - use Time::Object 'overrideGlobally'; - - I'm not too keen on this name yet - suggestions welcome... - -AUTHOR - Matt Sergeant, matt@sergeant.org - - License - - This module is free software, you may distribute it under the - same terms as Perl. - - Bugs - - The test harness leaves much to be desired. Patches welcome. - diff --git a/ext/Time/Piece/Seconds.pm b/ext/Time/Piece/Seconds.pm deleted file mode 100644 index 7544915dfa..0000000000 --- a/ext/Time/Piece/Seconds.pm +++ /dev/null @@ -1,217 +0,0 @@ -package Time::Seconds; -use strict; -use vars qw/@EXPORT @ISA/; - -@ISA = 'Exporter'; - -@EXPORT = qw( - ONE_MINUTE - ONE_HOUR - ONE_DAY - ONE_WEEK - ONE_MONTH - ONE_YEAR - ONE_FINANCIAL_MONTH - LEAP_YEAR - NON_LEAP_YEAR - ); - -use constant ONE_MINUTE => 60; -use constant ONE_HOUR => 3_600; -use constant ONE_DAY => 86_400; -use constant ONE_WEEK => 604_800; -use constant ONE_MONTH => 2_629_744; # ONE_YEAR / 12 -use constant ONE_YEAR => 31_556_930; # 365.24225 days -use constant ONE_FINANCIAL_MONTH => 2_592_000; # 30 days -use constant LEAP_YEAR => 31_622_400; # 366 * ONE_DAY -use constant NON_LEAP_YEAR => 31_536_000; # 365 * ONE_DAY - -use overload - '0+' => \&seconds, - '""' => \&seconds, - '<=>' => \&compare, - '+' => \&add, - '-' => \&subtract, - '-=' => \&subtract_from, - '+=' => \&add_to, - '=' => \© - -sub new { - my $class = shift; - my ($val) = @_; - $val = 0 unless defined $val; - bless \$val, $class; -} - -sub _get_ovlvals { - my ($lhs, $rhs, $reverse) = @_; - $lhs = $lhs->seconds; - - if (UNIVERSAL::isa($rhs, 'Time::Seconds')) { - $rhs = $rhs->seconds; - } - elsif (ref($rhs)) { - die "Can't use non Seconds object in operator overload"; - } - - if ($reverse) { - return $rhs, $lhs; - } - - return $lhs, $rhs; -} - -sub compare { - my ($lhs, $rhs) = _get_ovlvals(@_); - return $lhs <=> $rhs; -} - -sub add { - my ($lhs, $rhs) = _get_ovlvals(@_); - return Time::Seconds->new($lhs + $rhs); -} - -sub add_to { - my $lhs = shift; - my $rhs = shift; - $rhs = $rhs->seconds if UNIVERSAL::isa($rhs, 'Time::Seconds'); - $$lhs += $rhs; - return $lhs; -} - -sub subtract { - my ($lhs, $rhs) = _get_ovlvals(@_); - return Time::Seconds->new($lhs - $rhs); -} - -sub subtract_from { - my $lhs = shift; - my $rhs = shift; - $rhs = $rhs->seconds if UNIVERSAL::isa($rhs, 'Time::Seconds'); - $$lhs -= $rhs; - return $lhs; -} - -sub copy { - Time::Seconds->new(${$_[0]}); -} - -sub seconds { - my $s = shift; - $$s; -} - -sub minutes { - my $s = shift; - $$s / 60; -} - -sub hours { - my $s = shift; - $s->minutes / 60; -} - -sub days { - my $s = shift; - $s->hours / 24; -} - -sub weeks { - my $s = shift; - $s->days / 7; -} - -sub months { - my $s = shift; - $s->days / 30.4368541; -} - -sub financial_months { - my $s = shift; - $s->days / 30; -} - -*f_months = \&financial_months; - -sub years { - my $s = shift; - $s->days / 365.24225; -} - -1; -__END__ - -=head1 NAME - -Time::Seconds - a simple API to convert seconds to other date values - -=head1 SYNOPSIS - - use Time::Piece; - use Time::Seconds; - - my $t = localtime; - $t += ONE_DAY; - - my $t2 = localtime; - my $s = $t - $t2; - - print "Difference is: ", $s->days, "\n"; - -=head1 DESCRIPTION - -This module is part of the Time::Piece distribution. It allows the user -to find out the number of minutes, hours, days, weeks or years in a given -number of seconds. It is returned by Time::Piece when you delta two -Time::Piece objects. - -Time::Seconds also exports the following constants: - - ONE_DAY - ONE_WEEK - ONE_HOUR - ONE_MINUTE - ONE_MONTH - ONE_YEAR - ONE_FINANCIAL_MONTH - LEAP_YEAR - NON_LEAP_YEAR - -Since perl does not (yet?) support constant objects, these constants -are in seconds only, so you cannot, for example, do this: C<print -ONE_WEEK-E<gt>minutes;> - -=head1 METHODS - -The following methods are available: - - my $val = Time::Seconds->new(SECONDS) - $val->seconds; - $val->minutes; - $val->hours; - $val->days; - $val->weeks; - $val->months; - $val->financial_months; # 30 days - $val->years; - -The methods make the assumption that there are 24 hours in a day, 7 days in -a week, 365.24225 days in a year and 12 months in a year. -(from The Calendar FAQ at http://www.tondering.dk/claus/calendar.html) - -=head1 AUTHOR - -Matt Sergeant, matt@sergeant.org - -Tobias Brox, tobiasb@tobiasb.funcom.com - -=head1 LICENSE - -Please see Time::Piece for the license. - -=head1 Bugs - -Currently the methods aren't as efficient as they could be, for reasons of -clarity. This is probably a bad idea. - -=cut diff --git a/hints/vmesa.sh b/hints/vmesa.sh index a36babdf8e..20502c1e6c 100644 --- a/hints/vmesa.sh +++ b/hints/vmesa.sh @@ -218,7 +218,7 @@ dynamic_ext='' eagain='EAGAIN' ebcdic='define' exe_ext='' -extensions='Data/Dumper Digest/MD5 Errno Fcntl Filter/Util/Call GDBM_File IO IPC/SysV List/Util MIME/Base64 NDBM_File Opcode PerlIO/Scalar POSIX Socket Storable Time/HiRes Time/Piece Thread attrs re' +extensions='Data/Dumper Digest/MD5 Errno Fcntl Filter/Util/Call GDBM_File IO IPC/SysV List/Util MIME/Base64 NDBM_File Opcode PerlIO/Scalar POSIX Socket Storable Time/HiRes Thread attrs re' fpostype='fpos_t' freetype='void' groupstype='gid_t' diff --git a/pod/perlfaq4.pod b/pod/perlfaq4.pod index dfd6374378..08f23f0b7c 100644 --- a/pod/perlfaq4.pod +++ b/pod/perlfaq4.pod @@ -249,23 +249,6 @@ L<perlfunc/"localtime">): $day_of_year = (localtime(time()))[7]; -or more legibly (in 5.7.1 or higher): - - use Time::Piece; - $day_of_year = localtime->day_of_year(); - -You can find the week of the year by using Time::Piece's strftime(): - - $week_of_year = localtime->strftime("%U"); - $iso_week = localtime->strftime("%V"); - -The difference between %U and %V is that %U assumes that the first day -of week 1 is the first Sunday of the year, whereas ISO 8601:1988 uses -the first week that has at least 4 days in the current year, and with -Monday as the first day of the week. You can also use %W, which will -return the week of the year with Monday as the first day of week 1. See -your strftime(3) man page for more details. - =head2 How do I find the current century or millennium? Use the following simple functions: @@ -295,10 +278,6 @@ your dates, then you should probably use either of the Date::Manip and Date::Calc modules from CPAN before you go hacking up your own parsing routine to handle arbitrary date formats. -Also note that the core module Time::Piece overloads the addition and -subtraction operators to provide date calculation options. See -L<Time::Piece/Date Calculations>. - =head2 How can I take a string and turn it into epoch seconds? If it's a regular enough string that it always has the same format, @@ -308,19 +287,15 @@ and Date::Manip modules from CPAN. =head2 How can I find the Julian Day? -Use Time::Piece as follows: - - use Time::Piece; - my $julian_day = localtime->julian_day; - my $mjd = localtime->mjd; # modified julian day +Use the Time::JulianDay module (part of the Time-modules bundle +available from CPAN.) Before you immerse yourself too deeply in this, be sure to verify that it is the I<Julian> Day you really want. Are you interested in a way of getting serial days so that you just can tell how many days they are apart or so that you can do also other date arithmetic? If you are interested in performing date arithmetic, this can be done using -Time::Piece (standard module since Perl 5.8), or by modules -Date::Manip or Date::Calc. +modules Date::Manip or Date::Calc. There is too many details and much confusion on this issue to cover in this FAQ, but the term is applied (correctly) to a calendar now @@ -343,14 +318,6 @@ epoch. Take twenty-four hours off that: Then you can pass this to C<localtime()> and get the individual year, month, day, hour, minute, seconds values. -Alternatively, you can use Time::Piece to subtract a day from the value -returned from C<localtime()>: - - use Time::Piece; - use Time::Seconds; # imports seconds constants, like ONE_DAY - my $today = localtime(); - my $yesterday = $today - ONE_DAY; - Note very carefully that the code above assumes that your days are twenty-four hours each. For most people, there are two days a year when they aren't: the switch to and from summer time throws this off. diff --git a/pod/perllocale.pod b/pod/perllocale.pod index bedac38b14..7864addc3e 100644 --- a/pod/perllocale.pod +++ b/pod/perllocale.pod @@ -636,7 +636,7 @@ exists only to generate locale-dependent results, strftime() always obeys the current C<LC_TIME> locale. See also L<I18N::Langinfo> and C<ABDAY_1>..C<ABDAY_7>, C<DAY_1>..C<DAY_7>, -C<ABMON_1>..C<ABMON_12>, and C<ABMON_1>..C<ABMON_12>; and L<Time::Piece>. +C<ABMON_1>..C<ABMON_12>, and C<ABMON_1>..C<ABMON_12>. =head2 Other categories diff --git a/pod/perltoc.pod b/pod/perltoc.pod index 3f86e677e5..a250c6191d 100644 --- a/pod/perltoc.pod +++ b/pod/perltoc.pod @@ -884,32 +884,32 @@ listing $ARG, $_, $a, $b, $<I<digits>>, $MATCH, $&, $PREMATCH, $`, $POSTMATCH, $', $LAST_PAREN_MATCH, $+, $^N, @LAST_MATCH_END, @+, $MULTILINE_MATCHING, $*, input_line_number HANDLE EXPR, $INPUT_LINE_NUMBER, $NR, $, -input_record_separator HANDLE EXPR, $INPUT_RECORD_SEPARATOR, $RS, $/, -autoflush HANDLE EXPR, $OUTPUT_AUTOFLUSH, $|, output_field_separator HANDLE -EXPR, $OUTPUT_FIELD_SEPARATOR, $OFS, $,, output_record_separator HANDLE -EXPR, $OUTPUT_RECORD_SEPARATOR, $ORS, $\, $LIST_SEPARATOR, $", -$SUBSCRIPT_SEPARATOR, $SUBSEP, $;, $OFMT, $#, format_page_number HANDLE -EXPR, $FORMAT_PAGE_NUMBER, $%, format_lines_per_page HANDLE EXPR, -$FORMAT_LINES_PER_PAGE, $=, format_lines_left HANDLE EXPR, -$FORMAT_LINES_LEFT, $-, @LAST_MATCH_START, @-, C<$`> is the same as -C<substr($var, 0, $-[0])>, C<$&> is the same as C<substr($var, $-[0], $+[0] -- $-[0])>, C<$'> is the same as C<substr($var, $+[0])>, C<$1> is the same -as C<substr($var, $-[1], $+[1] - $-[1])>, C<$2> is the same as -C<substr($var, $-[2], $+[2] - $-[2])>, C<$3> is the same as C<substr $var, -$-[3], $+[3] - $-[3])>, format_name HANDLE EXPR, $FORMAT_NAME, $~, -format_top_name HANDLE EXPR, $FORMAT_TOP_NAME, $^, -format_line_break_characters HANDLE EXPR, $FORMAT_LINE_BREAK_CHARACTERS, -$:, format_formfeed HANDLE EXPR, $FORMAT_FORMFEED, $^L, $ACCUMULATOR, $^A, -$CHILD_ERROR, $?, $OS_ERROR, $ERRNO, $!, $EXTENDED_OS_ERROR, $^E, -$EVAL_ERROR, $@, $PROCESS_ID, $PID, $$, $REAL_USER_ID, $UID, $<, -$EFFECTIVE_USER_ID, $EUID, $>, $REAL_GROUP_ID, $GID, $(, -$EFFECTIVE_GROUP_ID, $EGID, $), $PROGRAM_NAME, $0, $[, $], $COMPILING, $^C, -$DEBUGGING, $^D, $SYSTEM_FD_MAX, $^F, $^H, %^H, $INPLACE_EDIT, $^I, $^M, -$OSNAME, $^O, $PERLDB, $^P, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, -0x100, 0x200, $LAST_REGEXP_CODE_RESULT, $^R, $EXCEPTIONS_BEING_CAUGHT, $^S, -$BASETIME, $^T, $PERL_VERSION, $^V, $WARNING, $^W, ${^WARNING_BITS}, -${^WIDE_SYSTEM_CALLS}, $EXECUTABLE_NAME, $^X, $ARGV, @ARGV, @F, @INC, @_, -%INC, %ENV, $ENV{expr}, %SIG, $SIG{expr} +IO::Handle->input_record_separator EXPR, $INPUT_RECORD_SEPARATOR, $RS, $/, +autoflush HANDLE EXPR, $OUTPUT_AUTOFLUSH, $|, +IO::Handle->output_field_separator EXPR, $OUTPUT_FIELD_SEPARATOR, $OFS, $,, +IO::Handle->output_record_separator EXPR, $OUTPUT_RECORD_SEPARATOR, $ORS, +$\, $LIST_SEPARATOR, $", $SUBSCRIPT_SEPARATOR, $SUBSEP, $;, $OFMT, $#, +format_page_number HANDLE EXPR, $FORMAT_PAGE_NUMBER, $%, +format_lines_per_page HANDLE EXPR, $FORMAT_LINES_PER_PAGE, $=, +format_lines_left HANDLE EXPR, $FORMAT_LINES_LEFT, $-, @LAST_MATCH_START, +@-, C<$`> is the same as C<substr($var, 0, $-[0])>, C<$&> is the same as +C<substr($var, $-[0], $+[0] - $-[0])>, C<$'> is the same as C<substr($var, +$+[0])>, C<$1> is the same as C<substr($var, $-[1], $+[1] - $-[1])>, C<$2> +is the same as C<substr($var, $-[2], $+[2] - $-[2])>, C<$3> is the same as +C<substr $var, $-[3], $+[3] - $-[3])>, format_name HANDLE EXPR, +$FORMAT_NAME, $~, format_top_name HANDLE EXPR, $FORMAT_TOP_NAME, $^, +IO::Handle->format_line_break_characters EXPR, +$FORMAT_LINE_BREAK_CHARACTERS, $:, IO::Handle->format_formfeed EXPR, +$FORMAT_FORMFEED, $^L, $ACCUMULATOR, $^A, $CHILD_ERROR, $?, $OS_ERROR, +$ERRNO, $!, $EXTENDED_OS_ERROR, $^E, $EVAL_ERROR, $@, $PROCESS_ID, $PID, +$$, $REAL_USER_ID, $UID, $<, $EFFECTIVE_USER_ID, $EUID, $>, $REAL_GROUP_ID, +$GID, $(, $EFFECTIVE_GROUP_ID, $EGID, $), $PROGRAM_NAME, $0, $[, $], +$COMPILING, $^C, $DEBUGGING, $^D, $SYSTEM_FD_MAX, $^F, $^H, %^H, +$INPLACE_EDIT, $^I, $^M, $OSNAME, $^O, $PERLDB, $^P, 0x01, 0x02, 0x04, +0x08, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200, $LAST_REGEXP_CODE_RESULT, $^R, +$EXCEPTIONS_BEING_CAUGHT, $^S, $BASETIME, $^T, $PERL_VERSION, $^V, +$WARNING, $^W, ${^WARNING_BITS}, ${^WIDE_SYSTEM_CALLS}, $EXECUTABLE_NAME, +$^X, $ARGV, @ARGV, @F, @INC, @_, %INC, %ENV, $ENV{expr}, %SIG, $SIG{expr} =item Error Indicators @@ -15659,90 +15659,6 @@ getitimer ( $which ) =back -=head2 Time::Piece - Object Oriented time objects - -=over 4 - -=item SYNOPSIS - -=item DESCRIPTION - -=item USAGE - -=over 4 - -=item Local Locales - -=item Date Calculations - -=item Date Comparisons - -=item YYYY-MM-DDThh:mm:ss - -=item Week Number - -=item strftime method - -%%, %a, %A, %b, %B, %c, %C, %d, %D, %e, %h, %H, %I, %j, %m, %M, %n, %p, %r, -%R, %S, %t, %T, %u, %U, %V, %w, %W, %x, %y, %Y, %Z - -=item strptime function - -=item Global Overriding - -=back - -=item SEE ALSO - -=item AUTHOR - -=over 4 - -=item License - -=item Bugs - -=back - -=back - -=head2 Time::Piece::Seconds, Time::Seconds - a simple API to convert -seconds to other date values - -=over 4 - -=item SYNOPSIS - -=item DESCRIPTION - -=item METHODS - -=item AUTHOR - -=item LICENSE - -=item Bugs - -=back - -=head2 Time::Seconds - a simple API to convert seconds to other date values - -=over 4 - -=item SYNOPSIS - -=item DESCRIPTION - -=item METHODS - -=item AUTHOR - -=item LICENSE - -=item Bugs - -=back - =head2 Time::gmtime - by-name interface to Perl's built-in gmtime() function @@ -15798,7 +15714,7 @@ VAL, TYPE ), UNIVERSAL::can ( VAL, METHOD ) =back -=head2 UnicodeCD - Unicode character database +=head2 Unicode::UCD - Unicode character database =over 4 @@ -15870,7 +15786,7 @@ VAL, TYPE ), UNIVERSAL::can ( VAL, METHOD ) =over 4 -=item UnicodeCD::UnicodeVersion +=item Unicode::UCD::UnicodeVersion =back diff --git a/t/lib/1_compile.t b/t/lib/1_compile.t index 81c6f416c0..4cf599bc31 100644 --- a/t/lib/1_compile.t +++ b/t/lib/1_compile.t @@ -257,7 +257,6 @@ Tie::Scalar Tie::SubstrHash Time::HiRes Time::Local -Time::Piece Time::gmtime Time::localtime Time::tm diff --git a/win32/Makefile b/win32/Makefile index b17a698495..663fa8a8c8 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -1,1145 +1,1140 @@ -# -# Makefile to build perl on Windows NT using Microsoft NMAKE. -# Supported compilers: -# Visual C++ 5.x (possibly other versions) -# -# This is set up to build a perl.exe that runs off a shared library -# (perl57.dll). Also makes individual DLLs for the XS extensions. -# - -## -## Make sure you read README.win32 *before* you mess with anything here! -## - -## -## Build configuration. Edit the values below to suit your needs. -## - -# -# Set these to wherever you want "nmake install" to put your -# newly built perl. -# -INST_DRV = c: -INST_TOP = $(INST_DRV)\perl - -# -# Comment this out if you DON'T want your perl installation to be versioned. -# This means that the new installation will overwrite any files from the -# old installation at the same INST_TOP location. Leaving it enabled is -# the safest route, as perl adds the extra version directory to all the -# locations it installs files to. If you disable it, an alternative -# versioned installation can be obtained by setting INST_TOP above to a -# path that includes an arbitrary version string. -# -#INST_VER = \5.7.2 - -# -# Comment this out if you DON'T want your perl installation to have -# architecture specific components. This means that architecture- -# specific files will be installed along with the architecture-neutral -# files. Leaving it enabled is safer and more flexible, in case you -# want to build multiple flavors of perl and install them together in -# the same location. Commenting it out gives you a simpler -# installation that is easier to understand for beginners. -# -#INST_ARCH = \$(ARCHNAME) - -# -# uncomment to enable multiple interpreters. This is need for fork() -# emulation. -# -USE_MULTI = define - -# -# Beginnings of interpreter cloning/threads; still very incomplete. -# This should be enabled to get the fork() emulation. This needs -# USE_MULTI as well. -# -USE_ITHREADS = define - -# -# uncomment to enable the implicit "host" layer for all system calls -# made by perl. This needs USE_MULTI above. This is also needed to -# get fork(). -# -USE_IMP_SYS = define - -# -# uncomment to enable the experimental PerlIO I/O subsystem. -USE_PERLIO = define - -# -# WARNING! This option is deprecated and will eventually go away (enable -# USE_ITHREADS instead). -# -# uncomment to enable threads-capabilities. This is incompatible with -# USE_ITHREADS, and is only here for people who may have come to rely -# on the experimental Thread support that was in 5.005. -# -#USE_5005THREADS = define - -# -# WARNING! This option is deprecated and will eventually go away (enable -# USE_MULTI instead). -# -# uncomment next line if you want to use the PERL_OBJECT build option. -# DO NOT ENABLE unless you have legacy code that relies on the C++ -# CPerlObj class that was available in 5.005. This cannot be enabled -# if you ask for USE_5005THREADS above. -# -#USE_OBJECT = define - -# -# uncomment one of the following lines if you are using either -# Visual C++ 2.x or Visual C++ 6.x (aka Visual Studio 98) -# -#CCTYPE = MSVC20 -#CCTYPE = MSVC60 - -# -# uncomment next line if you want debug version of perl (big,slow) -# -#CFG = Debug - -# -# uncomment to enable use of PerlCRT.DLL when using the Visual C compiler. -# It has patches that fix known bugs in older versions of MSVCRT.DLL. -# This currently requires VC 5.0 with Service Pack 3 or later. -# Get it from CPAN at http://www.perl.com/CPAN/authors/id/D/DO/DOUGL/ -# and follow the directions in the package to install. -# -# Not recommended if you have VC 6.x and you're not running Windows 9x. -# -#USE_PERLCRT = define - -# -# uncomment to enable linking with setargv.obj under the Visual C -# compiler. Setting this options enables perl to expand wildcards in -# arguments, but it may be harder to use alternate methods like -# File::DosGlob that are more powerful. This option is supported only with -# Visual C. -# -#USE_SETARGV = define - -# -# if you have the source for des_fcrypt(), uncomment this and make sure the -# file exists (see README.win32). File should be located in the same -# directory as this file. -# -#CRYPT_SRC = fcrypt.c - -# -# if you didn't set CRYPT_SRC and if you have des_fcrypt() available in a -# library, uncomment this, and make sure the library exists (see README.win32) -# Specify the full pathname of the library. -# -#CRYPT_LIB = fcrypt.lib - -# -# set this if you wish to use perl's malloc -# WARNING: Turning this on/off WILL break binary compatibility with extensions -# you may have compiled with/without it. Be prepared to recompile all -# extensions if you change the default. Currently, this cannot be enabled -# if you ask for USE_IMP_SYS above. -# -#PERL_MALLOC = define - -# -# set the install locations of the compiler include/libraries -# Running VCVARS32.BAT is *required* when using Visual C. -# Some versions of Visual C don't define MSVCDIR in the environment, -# so you may have to set CCHOME explicitly (spaces in the path name should -# not be quoted) -# -#CCHOME = f:\msvc20 -CCHOME = $(MSVCDIR) -CCINCDIR = $(CCHOME)\include -CCLIBDIR = $(CCHOME)\lib - -# -# Additional compiler flags can be specified here. -# - -# -# This should normally be disabled. Adding -DPERL_POLLUTE enables support -# for old symbols by default, at the expense of extreme pollution. You most -# probably just want to build modules that won't compile with -# perl Makefile.PL POLLUTE=1 -# instead of enabling this. Please report such modules to the respective -# authors. -# -#BUILDOPT = $(BUILDOPT) -DPERL_POLLUTE - -# -# This should normally be disabled. Enabling it will disable the File::Glob -# implementation of CORE::glob. -# -#BUILDOPT = $(BUILDOPT) -DPERL_EXTERNAL_GLOB - -# -# This should normally be disabled. Enabling it causes perl to read scripts -# in text mode (which is the 5.005 behavior) and will break ByteLoader. -#BUILDOPT = $(BUILDOPT) -DPERL_TEXTMODE_SCRIPTS - -# -# specify semicolon-separated list of extra directories that modules will -# look for libraries (spaces in path names need not be quoted) -# -EXTRALIBDIRS = - -# -# set this to your email address (perl will guess a value from -# from your loginname and your hostname, which may not be right) -# -#EMAIL = - -## -## Build configuration ends. -## - -##################### CHANGE THESE ONLY IF YOU MUST ##################### - -!IF "$(CRYPT_SRC)$(CRYPT_LIB)" == "" -D_CRYPT = undef -!ELSE -D_CRYPT = define -CRYPT_FLAG = -DHAVE_DES_FCRYPT -!ENDIF - -!IF "$(USE_OBJECT)" == "define" -PERL_MALLOC = undef -USE_5005THREADS = undef -USE_MULTI = undef -USE_IMP_SYS = define -!ENDIF - -!IF "$(PERL_MALLOC)" == "" -PERL_MALLOC = undef -!ENDIF - -!IF "$(USE_5005THREADS)" == "" -USE_5005THREADS = undef -!ENDIF - -!IF "$(USE_5005THREADS)" == "define" -USE_ITHREADS = undef -!ENDIF - -!IF "$(USE_IMP_SYS)" == "define" -PERL_MALLOC = undef -!ENDIF - -!IF "$(USE_MULTI)" == "" -USE_MULTI = undef -!ENDIF - -!IF "$(USE_OBJECT)" == "" -USE_OBJECT = undef -!ENDIF - -!IF "$(USE_ITHREADS)" == "" -USE_ITHREADS = undef -!ENDIF - -!IF "$(USE_IMP_SYS)" == "" -USE_IMP_SYS = undef -!ENDIF - -!IF "$(USE_PERLIO)" == "" -USE_PERLIO = undef -!ENDIF - -!IF "$(USE_PERLCRT)" == "" -USE_PERLCRT = undef -!ENDIF - -!IF "$(USE_IMP_SYS)$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" == "defineundefundefundef" -USE_MULTI = define -!ENDIF - -!IF "$(USE_ITHREADS)$(USE_MULTI)$(USE_OBJECT)" == "defineundefundef" -USE_MULTI = define -USE_5005THREADS = undef -!ENDIF - -!IF "$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" != "undefundefundef" -BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_CONTEXT -!ENDIF - -!IF "$(USE_IMP_SYS)" != "undef" -BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_SYS -!ENDIF - -!IF "$(PROCESSOR_ARCHITECTURE)" == "" -PROCESSOR_ARCHITECTURE = x86 -!ENDIF - -!IF "$(USE_OBJECT)" == "define" -ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-object -!ELSE -!IF "$(USE_5005THREADS)" == "define" -ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-thread -!ELSE -!IF "$(USE_MULTI)" == "define" -ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-multi -!ELSE -!IF "$(USE_PERLIO)" == "define" -ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-perlio -!ELSE -ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE) -!ENDIF -!ENDIF -!ENDIF -!ENDIF - -!IF "$(USE_PERLIO)" == "define" -BUILDOPT = $(BUILDOPT) -DUSE_PERLIO -!ENDIF - -!IF "$(USE_ITHREADS)" == "define" -ARCHNAME = $(ARCHNAME)-thread -!ENDIF - -# Visual Studio 98 specific -!IF "$(CCTYPE)" == "MSVC60" - -# VC 6.0 can load the socket dll on demand. Makes the test suite -# run in about 10% less time. -DELAYLOAD = -DELAYLOAD:wsock32.dll -DELAYLOAD:shell32.dll delayimp.lib -!ENDIF - -ARCHDIR = ..\lib\$(ARCHNAME) -COREDIR = ..\lib\CORE -AUTODIR = ..\lib\auto -LIBDIR = ..\lib -EXTDIR = ..\ext -PODDIR = ..\pod -EXTUTILSDIR = $(LIBDIR)\ExtUtils - -# -INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin -INST_BIN = $(INST_SCRIPT)$(INST_ARCH) -INST_LIB = $(INST_TOP)$(INST_VER)\lib -INST_ARCHLIB = $(INST_LIB)$(INST_ARCH) -INST_COREDIR = $(INST_ARCHLIB)\CORE -INST_POD = $(INST_LIB)\pod -INST_HTML = $(INST_TOP)$(INST_VER)\html - -# -# Programs to compile, build .lib files and link -# - -CC = cl -LINK32 = link -LIB32 = $(LINK32) -lib -RSC = rc - -# -# Options -# - -INCLUDES = -I$(COREDIR) -I.\include -I. -I.. -#PCHFLAGS = -Fpc:\temp\vcmoduls.pch -YX -DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG) -LOCDEFS = -DPERLDLL -DPERL_CORE -SUBSYS = console -CXX_FLAG = -TP -GX - -!IF "$(USE_PERLCRT)" != "define" -LIBC = msvcrt.lib -!ELSE -LIBC = PerlCRT.lib -!ENDIF - -PERLEXE_RES = -PERLDLL_RES = - -!IF "$(CFG)" == "Debug" -! IF "$(CCTYPE)" == "MSVC20" -OPTIMIZE = -Od -MD -Z7 -DDEBUGGING -! ELSE -OPTIMIZE = -Od -MD -Zi -DDEBUGGING -! ENDIF -LINK_DBG = -debug -pdb:none -!ELSE -# -O1 yields smaller code, which turns out to be faster than -O2 -#OPTIMIZE = -O2 -MD -DNDEBUG -OPTIMIZE = -O1 -MD -DNDEBUG -LINK_DBG = -release -!ENDIF - -!IF "$(USE_OBJECT)" == "define" -OPTIMIZE = $(OPTIMIZE) $(CXX_FLAG) -BUILDOPT = $(BUILDOPT) -DPERL_OBJECT -!ENDIF - -!IF "$(USE_PERLCRT)" != "define" -BUILDOPT = $(BUILDOPT) -DPERL_MSVCRT_READFIX -!ENDIF - -LIBBASEFILES = $(CRYPT_LIB) \ - oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \ - comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \ - netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib \ - version.lib odbc32.lib odbccp32.lib - -# we add LIBC here, since we may be using PerlCRT.dll -LIBFILES = $(LIBBASEFILES) $(LIBC) - -CFLAGS = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \ - $(PCHFLAGS) $(OPTIMIZE) -LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \ - -libpath:"$(INST_COREDIR)" \ - -machine:$(PROCESSOR_ARCHITECTURE) -OBJOUT_FLAG = -Fo -EXEOUT_FLAG = -Fe - -CFLAGS_O = $(CFLAGS) $(BUILDOPT) - -#################### do not edit below this line ####################### -############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ############## - -o = .obj - -# -# Rules -# - -.SUFFIXES : .c $(o) .dll .lib .exe .rc .res - -.c$(o): - $(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $< - -.y.c: - $(NOOP) - -$(o).dll: - $(LINK32) -dll -subsystem:windows -implib:$(*B).lib -def:$(*B).def \ - -out:$@ $(LINK_FLAGS) $(LIBFILES) $< $(LIBPERL) - -.rc.res: - $(RSC) -i.. $< - -# -# various targets - -# makedef.pl must be updated if this changes, and this should normally -# only change when there is an incompatible revision of the public API. -# XXX so why did we change it from perl56 to perl57? -PERLIMPLIB = ..\perl57.lib -PERLDLL = ..\perl57.dll - -MINIPERL = ..\miniperl.exe -MINIDIR = .\mini -PERLEXE = ..\perl.exe -WPERLEXE = ..\wperl.exe -GLOBEXE = ..\perlglob.exe -CONFIGPM = ..\lib\Config.pm -MINIMOD = ..\lib\ExtUtils\Miniperl.pm -X2P = ..\x2p\a2p.exe - -# Nominate a target which causes extensions to be re-built -# This used to be $(PERLEXE), but at worst it is the .dll that they depend -# on and really only the interface - i.e. the .def file used to export symbols -# from the .dll -PERLDEP = perldll.def - -PL2BAT = bin\pl2bat.pl -GLOBBAT = bin\perlglob.bat - -UTILS = \ - ..\utils\h2ph \ - ..\utils\splain \ - ..\utils\dprofpp \ - ..\utils\perlbug \ - ..\utils\pl2pm \ - ..\utils\c2ph \ - ..\utils\h2xs \ - ..\utils\perldoc \ - ..\utils\perlcc \ - ..\utils\perlivp \ - ..\utils\libnetcfg \ - ..\pod\checkpods \ - ..\pod\pod2html \ - ..\pod\pod2latex \ - ..\pod\pod2man \ - ..\pod\pod2text \ - ..\pod\pod2usage \ - ..\pod\podchecker \ - ..\pod\podselect \ - ..\x2p\find2perl \ - ..\x2p\s2p \ - ..\lib\ExtUtils\xsubpp \ - bin\exetype.pl \ - bin\runperl.pl \ - bin\pl2bat.pl \ - bin\perlglob.pl \ - bin\search.pl - -MAKE = nmake -nologo -MAKE_BARE = nmake - -CFGSH_TMPL = config.vc -CFGH_TMPL = config_H.vc - -XCOPY = xcopy /f /r /i /d -RCOPY = xcopy /f /r /i /e /d -NOOP = @echo -NULL = - -DEL = del - -# -# filenames given to xsubpp must have forward slashes (since it puts -# full pathnames in #line strings) -XSUBPP = ..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp \ - -C++ -prototypes - -MICROCORE_SRC = \ - ..\av.c \ - ..\deb.c \ - ..\doio.c \ - ..\doop.c \ - ..\dump.c \ - ..\globals.c \ - ..\gv.c \ - ..\hv.c \ - ..\locale.c \ - ..\mg.c \ - ..\numeric.c \ - ..\op.c \ - ..\perl.c \ - ..\perlapi.c \ - ..\perly.c \ - ..\pp.c \ - ..\pp_ctl.c \ - ..\pp_hot.c \ - ..\pp_pack.c \ - ..\pp_sys.c \ - ..\regcomp.c \ - ..\regexec.c \ - ..\run.c \ - ..\scope.c \ - ..\sv.c \ - ..\taint.c \ - ..\toke.c \ - ..\universal.c \ - ..\utf8.c \ - ..\util.c \ - ..\xsutils.c - -EXTRACORE_SRC = $(EXTRACORE_SRC) perllib.c - -!IF "$(PERL_MALLOC)" == "define" -EXTRACORE_SRC = $(EXTRACORE_SRC) ..\malloc.c -!ENDIF - -!IF "$(USE_OBJECT)" != "define" -EXTRACORE_SRC = $(EXTRACORE_SRC) ..\perlio.c -!ENDIF - -WIN32_SRC = \ - .\win32.c \ - .\win32io.c \ - .\win32sck.c \ - .\win32thread.c - -!IF "$(CRYPT_SRC)" != "" -WIN32_SRC = $(WIN32_SRC) .\$(CRYPT_SRC) -!ENDIF - -DLL_SRC = $(DYNALOADER).c - -X2P_SRC = \ - ..\x2p\a2p.c \ - ..\x2p\hash.c \ - ..\x2p\str.c \ - ..\x2p\util.c \ - ..\x2p\walk.c - -CORE_NOCFG_H = \ - ..\av.h \ - ..\cop.h \ - ..\cv.h \ - ..\dosish.h \ - ..\embed.h \ - ..\form.h \ - ..\gv.h \ - ..\handy.h \ - ..\hv.h \ - ..\iperlsys.h \ - ..\mg.h \ - ..\nostdio.h \ - ..\op.h \ - ..\opcode.h \ - ..\perl.h \ - ..\perlapi.h \ - ..\perlsdio.h \ - ..\perlsfio.h \ - ..\perly.h \ - ..\pp.h \ - ..\proto.h \ - ..\regexp.h \ - ..\scope.h \ - ..\sv.h \ - ..\thread.h \ - ..\unixish.h \ - ..\utf8.h \ - ..\util.h \ - ..\warnings.h \ - ..\XSUB.h \ - ..\EXTERN.h \ - ..\perlvars.h \ - ..\intrpvar.h \ - ..\thrdvar.h \ - .\include\dirent.h \ - .\include\netdb.h \ - .\include\sys\socket.h \ - .\win32.h - -CORE_H = $(CORE_NOCFG_H) .\config.h - -MICROCORE_OBJ = $(MICROCORE_SRC:.c=.obj) -CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=.obj) -WIN32_OBJ = $(WIN32_SRC:.c=.obj) -MINICORE_OBJ = $(MICROCORE_OBJ:..\=.\mini\) \ - $(MINIDIR)\miniperlmain$(o) \ - $(MINIDIR)\perlio$(o) -MINIWIN32_OBJ = $(WIN32_OBJ:.\=.\mini\) -MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ) -DLL_OBJ = $(DLL_SRC:.c=.obj) -X2P_OBJ = $(X2P_SRC:.c=.obj) - -PERLDLL_OBJ = $(CORE_OBJ) -PERLEXE_OBJ = perlmain$(o) - -PERLDLL_OBJ = $(PERLDLL_OBJ) $(WIN32_OBJ) $(DLL_OBJ) -#PERLEXE_OBJ = $(PERLEXE_OBJ) $(WIN32_OBJ) $(DLL_OBJ) - -!IF "$(USE_SETARGV)" != "" -SETARGV_OBJ = setargv$(o) -!ENDIF - -DYNALOADER = $(EXTDIR)\DynaLoader\DynaLoader -SOCKET = $(EXTDIR)\Socket\Socket -FCNTL = $(EXTDIR)\Fcntl\Fcntl -OPCODE = $(EXTDIR)\Opcode\Opcode -SDBM_FILE = $(EXTDIR)\SDBM_File\SDBM_File -IO = $(EXTDIR)\IO\IO -POSIX = $(EXTDIR)\POSIX\POSIX -ATTRS = $(EXTDIR)\attrs\attrs -THREAD = $(EXTDIR)\Thread\Thread -B = $(EXTDIR)\B\B -RE = $(EXTDIR)\re\re -DUMPER = $(EXTDIR)\Data\Dumper\Dumper -ERRNO = $(EXTDIR)\Errno\Errno -PEEK = $(EXTDIR)\Devel\Peek\Peek -BYTELOADER = $(EXTDIR)\ByteLoader\ByteLoader -DPROF = $(EXTDIR)\Devel\DProf\DProf -GLOB = $(EXTDIR)\File\Glob\Glob -HOSTNAME = $(EXTDIR)\Sys\Hostname\Hostname -STORABLE = $(EXTDIR)\Storable\Storable -FILTER = $(EXTDIR)\Filter\Util\Call\Call -ENCODE = $(EXTDIR)\Encode\Encode -MD5 = $(EXTDIR)\Digest\MD5\MD5 -PERLIOSCALAR = $(EXTDIR)\PerlIO\Scalar\Scalar -MIMEBASE64 = $(EXTDIR)\MIME\Base64\Base64 -TIMEHIRES = $(EXTDIR)\Time\HiRes\HiRes -TIMEPIECE = $(EXTDIR)\Time\Piece\Piece -CWD = $(EXTDIR)\Cwd\Cwd -LISTUTIL = $(EXTDIR)\List\Util\Util -PERLIOVIA = $(EXTDIR)\PerlIO\Via\Via -XSTYPEMAP = $(EXTDIR)\XS\Typemap\Typemap - -SOCKET_DLL = $(AUTODIR)\Socket\Socket.dll -FCNTL_DLL = $(AUTODIR)\Fcntl\Fcntl.dll -OPCODE_DLL = $(AUTODIR)\Opcode\Opcode.dll -SDBM_FILE_DLL = $(AUTODIR)\SDBM_File\SDBM_File.dll -IO_DLL = $(AUTODIR)\IO\IO.dll -POSIX_DLL = $(AUTODIR)\POSIX\POSIX.dll -ATTRS_DLL = $(AUTODIR)\attrs\attrs.dll -THREAD_DLL = $(AUTODIR)\Thread\Thread.dll -B_DLL = $(AUTODIR)\B\B.dll -DUMPER_DLL = $(AUTODIR)\Data\Dumper\Dumper.dll -PEEK_DLL = $(AUTODIR)\Devel\Peek\Peek.dll -RE_DLL = $(AUTODIR)\re\re.dll -BYTELOADER_DLL = $(AUTODIR)\ByteLoader\ByteLoader.dll -DPROF_DLL = $(AUTODIR)\Devel\DProf\DProf.dll -GLOB_DLL = $(AUTODIR)\File\Glob\Glob.dll -HOSTNAME_DLL = $(AUTODIR)\Sys\Hostname\Hostname.dll -STORABLE_DLL = $(AUTODIR)\Storable\Storable.dll -FILTER_DLL = $(AUTODIR)\Filter\Util\Call\Call.dll -ENCODE_DLL = $(AUTODIR)\Encode\Encode.dll -MD5_DLL = $(AUTODIR)\Digest\MD5\MD5.dll -PERLIOSCALAR_DLL= $(AUTODIR)\PerlIO\Scalar\Scalar.dll -MIMEBASE64_DLL = $(AUTODIR)\MIME\Base64\Base64.dll -TIMEHIRES_DLL = $(AUTODIR)\Time\HiRes\HiRes.dll -TIMEPIECE_DLL = $(AUTODIR)\Time\Piece\Piece.dll -CWD_DLL = $(AUTODIR)\Cwd\Cwd.dll -LISTUTIL_DLL = $(AUTODIR)\List\Util\Util.dll -PERLIOVIA_DLL = $(AUTODIR)\PerlIO\Via\Via.dll -XSTYPEMAP_DLL = $(AUTODIR)\XS\Typemap\Typemap.dll - -EXTENSION_C = \ - $(SOCKET).c \ - $(FCNTL).c \ - $(OPCODE).c \ - $(SDBM_FILE).c \ - $(IO).c \ - $(POSIX).c \ - $(ATTRS).c \ - $(THREAD).c \ - $(RE).c \ - $(DUMPER).c \ - $(PEEK).c \ - $(B).c \ - $(BYTELOADER).c \ - $(DPROF).c \ - $(GLOB).c \ - $(HOSTNAME).c \ - $(STORABLE).c \ - $(FILTER).c \ - $(ENCODE).c \ - $(MD5).c \ - $(PERLIOSCALAR).c \ - $(MIMEBASE64).c \ - $(TIMEHIRES).c \ - $(TIMEPIECE).c \ - $(CWD).c \ - $(LISTUTIL).c \ - $(PERLIOVIA).c \ - $(XSTYPEMAP).c - -EXTENSION_DLL = \ - $(SOCKET_DLL) \ - $(FCNTL_DLL) \ - $(OPCODE_DLL) \ - $(SDBM_FILE_DLL)\ - $(IO_DLL) \ - $(POSIX_DLL) \ - $(ATTRS_DLL) \ - $(DUMPER_DLL) \ - $(PEEK_DLL) \ - $(B_DLL) \ - $(RE_DLL) \ - $(THREAD_DLL) \ - $(BYTELOADER_DLL) \ - $(DPROF_DLL) \ - $(GLOB_DLL) \ - $(HOSTNAME_DLL) \ - $(STORABLE_DLL) \ - $(FILTER_DLL) \ - $(ENCODE_DLL) \ - $(MD5_DLL) \ - $(PERLIOSCALAR_DLL) \ - $(MIMEBASE64_DLL) \ - $(TIMEHIRES_DLL) \ - $(TIMEPIECE_DLL) \ - $(CWD_DLL) \ - $(LISTUTIL_DLL) \ - $(PERLIOVIA_DLL) \ - $(XSTYPEMAP_DLL) - -POD2HTML = $(PODDIR)\pod2html -POD2MAN = $(PODDIR)\pod2man -POD2LATEX = $(PODDIR)\pod2latex -POD2TEXT = $(PODDIR)\pod2text - -CFG_VARS = \ - "INST_DRV=$(INST_DRV)" \ - "INST_TOP=$(INST_TOP)" \ - "INST_VER=$(INST_VER)" \ - "INST_ARCH=$(INST_ARCH)" \ - "archname=$(ARCHNAME)" \ - "cc=$(CC)" \ - "ld=$(LINK32)" \ - "ccflags=-nologo -Gf -W3 $(OPTIMIZE:"=\") $(DEFINES) $(BUILDOPT)" \ - "cf_email=$(EMAIL)" \ - "d_crypt=$(D_CRYPT)" \ - "d_mymalloc=$(PERL_MALLOC)" \ - "libs=$(LIBFILES)" \ - "incpath=$(CCINCDIR:"=\")" \ - "libperl=$(PERLIMPLIB:..\=)" \ - "libpth=$(CCLIBDIR:"=\");$(EXTRALIBDIRS:"=\")" \ - "libc=$(LIBC)" \ - "make=$(MAKE_BARE)" \ - "use5005threads=$(USE_5005THREADS)" \ - "useithreads=$(USE_ITHREADS)" \ - "usethreads=$(USE_5005THREADS)" \ - "usemultiplicity=$(USE_MULTI)" \ - "useperlio=$(USE_PERLIO)" \ - "LINK_FLAGS=$(LINK_FLAGS:"=\")" \ - "optimize=$(OPTIMIZE:"=\")" - -# -# Top targets -# - -all : .\config.h $(GLOBEXE) $(MINIMOD) $(CONFIGPM) $(PERLEXE) \ - $(X2P) Extensions - @echo Everything is up to date. '$(MAKE_BARE) test' to run test suite. - -$(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c - -#------------------------------------------------------------ - -$(GLOBEXE) : perlglob$(o) - $(LINK32) $(LINK_FLAGS) $(LIBFILES) -out:$@ -subsystem:$(SUBSYS) \ - perlglob$(o) setargv$(o) - -perlglob$(o) : perlglob.c - -config.w32 : $(CFGSH_TMPL) - copy $(CFGSH_TMPL) config.w32 - -.\config.h : $(CFGH_TMPL) - -del /f config.h - copy $(CFGH_TMPL) config.h - -..\config.sh : config.w32 $(MINIPERL) config_sh.PL - $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) config.w32 > ..\config.sh - -# this target is for when changes to the main config.sh happen -# edit config.{b,v,g}c and make this target once for each supported -# compiler (e.g. `nmake CCTYPE=BORLAND regen_config_h`) -regen_config_h: - perl config_sh.PL $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh - cd .. - -del /f perl.exe - perl configpm - cd win32 - -del /f $(CFGH_TMPL) - -mkdir $(COREDIR) - -perl -I..\lib config_h.PL "INST_VER=$(INST_VER)" - rename config.h $(CFGH_TMPL) - -$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl - cd .. - miniperl configpm - cd win32 - if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL) - $(XCOPY) ..\*.h $(COREDIR)\*.* - $(XCOPY) *.h $(COREDIR)\*.* - $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.* - $(RCOPY) include $(COREDIR)\*.* - -$(MINIPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)" - if errorlevel 1 $(MAKE) /$(MAKEFLAGS) $(CONFIGPM) - -$(MINIPERL) : $(MINIDIR) $(MINI_OBJ) - $(LINK32) -subsystem:console -out:$@ @<< - $(LINK_FLAGS) $(LIBFILES) $(MINI_OBJ) -<< - -$(MINIDIR) : - if not exist "$(MINIDIR)" mkdir "$(MINIDIR)" - -$(MINICORE_OBJ) : $(CORE_NOCFG_H) - $(CC) -c $(CFLAGS) -DPERL_EXTERNAL_GLOB $(OBJOUT_FLAG)$@ ..\$(*F).c - -$(MINIWIN32_OBJ) : $(CORE_NOCFG_H) - $(CC) -c $(CFLAGS) $(OBJOUT_FLAG)$@ $(*F).c - -# -DPERL_IMPLICIT_SYS needs C++ for perllib.c -# This is the only file that depends on perlhost.h, vmem.h, and vdir.h -!IF "$(USE_IMP_SYS)$(USE_OBJECT)" == "defineundef" -perllib$(o) : perllib.c .\perlhost.h .\vdir.h .\vmem.h - $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c -!ENDIF - -# 1. we don't want to rebuild miniperl.exe when config.h changes -# 2. we don't want to rebuild miniperl.exe with non-default config.h -$(MINI_OBJ) : $(CORE_NOCFG_H) - -$(WIN32_OBJ) : $(CORE_H) -$(CORE_OBJ) : $(CORE_H) -$(DLL_OBJ) : $(CORE_H) -$(X2P_OBJ) : $(CORE_H) - -perldll.def : $(MINIPERL) $(CONFIGPM) ..\global.sym ..\pp.sym ..\makedef.pl - $(MINIPERL) -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \ - CCTYPE=$(CCTYPE) > perldll.def - -$(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES) - $(LINK32) -dll -def:perldll.def -base:0x28000000 -out:$@ @<< - $(LINK_FLAGS) $(DELAYLOAD) $(LIBFILES) $(PERLDLL_OBJ) $(PERLDLL_RES) -<< - $(XCOPY) $(PERLIMPLIB) $(COREDIR) - -$(MINIMOD) : $(MINIPERL) ..\minimod.pl - cd .. - miniperl minimod.pl > lib\ExtUtils\Miniperl.pm - cd win32 - -..\x2p\a2p$(o) : ..\x2p\a2p.c - $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\a2p.c - -..\x2p\hash$(o) : ..\x2p\hash.c - $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\hash.c - -..\x2p\str$(o) : ..\x2p\str.c - $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\str.c - -..\x2p\util$(o) : ..\x2p\util.c - $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\util.c - -..\x2p\walk$(o) : ..\x2p\walk.c - $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\walk.c - -$(X2P) : $(MINIPERL) $(X2P_OBJ) - $(MINIPERL) ..\x2p\find2perl.PL - $(MINIPERL) ..\x2p\s2p.PL - $(LINK32) -subsystem:console -out:$@ @<< - $(LINK_FLAGS) $(LIBFILES) $(X2P_OBJ) -<< - -perlmain.c : runperl.c - copy runperl.c perlmain.c - -perlmain$(o) : perlmain.c - $(CC) $(CFLAGS_O) -UPERLDLL $(OBJOUT_FLAG)$@ -c perlmain.c - -$(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES) - $(LINK32) -subsystem:console -out:$@ -stack:0x1000000 $(LINK_FLAGS) \ - $(LIBFILES) $(PERLEXE_OBJ) $(SETARGV_OBJ) $(PERLIMPLIB) $(PERLEXE_RES) - copy $(PERLEXE) $(WPERLEXE) - $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS - copy splittree.pl .. - $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR) - -$(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM) - if not exist $(AUTODIR) mkdir $(AUTODIR) - cd $(EXTDIR)\$(*B) - ..\$(MINIPERL) -I..\..\lib $(*B)_pm.PL - ..\$(MINIPERL) -I..\..\lib XSLoader_pm.PL - cd ..\..\win32 - $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL) - $(XCOPY) $(EXTDIR)\$(*B)\XSLoader.pm $(LIBDIR)\$(NULL) - cd $(EXTDIR)\$(*B) - $(XSUBPP) dl_win32.xs > $(*B).c - cd ..\..\win32 - -$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs - copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs - -#---------------------------------------------------------------------------------- -Extensions: buildext.pl $(PERLDEP) $(CONFIGPM) - $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) - -Extensions_clean: - -if exist $(MINIPERL) $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) clean - -#---------------------------------------------------------------------------------- - -doc: $(PERLEXE) - $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=./html \ - --podpath=pod:lib:ext:utils --htmlroot="file://$(INST_HTML::=|)" \ - --libpod=perlfunc:perlguts:perlvar:perlrun:perlop --recurse - -utils: $(PERLEXE) $(X2P) - cd ..\utils - $(MAKE) PERL=$(MINIPERL) - cd ..\pod - copy ..\README.aix .\perlaix.pod - copy ..\README.amiga .\perlamiga.pod - copy ..\README.apollo .\perlapollo.pod - copy ..\README.beos .\perlbeos.pod - copy ..\README.bs2000 .\perlbs2000.pod - copy ..\README.ce .\perlce.pod - copy ..\README.cygwin .\perlcygwin.pod - copy ..\README.dgux .\perldgux.pod - copy ..\README.dos .\perldos.pod - copy ..\README.epoc .\perlepoc.pod - copy ..\README.hurd .\perlhurd.pod - copy ..\README.hpux .\perlhpux.pod - copy ..\README.machten .\perlmachten.pod - copy ..\README.macos .\perlmacos.pod - copy ..\README.mint .\perlmint.pod - copy ..\README.mpeix .\perlmpeix.pod - copy ..\README.netware .\perlnetware.pod - copy ..\README.os2 .\perlos2.pod - copy ..\README.os390 .\perlos390.pod - copy ..\README.plan9 .\perlplan9.pod - copy ..\README.qnx .\perlqnx.pod - copy ..\README.solaris .\perlsolaris.pod - copy ..\README.tru64 .\perltru64.pod - copy ..\README.uts .\perluts.pod - copy ..\README.vmesa .\perlvmesa.pod - copy ..\vms\perlvms.pod .\perlvms.pod - copy ..\README.vos .\perlvos.pod - copy ..\README.win32 .\perlwin32.pod - $(MAKE) -f ..\win32\pod.mak converters - cd ..\lib - $(PERLEXE) lib_pm.PL - cd ..\win32 - $(PERLEXE) $(PL2BAT) $(UTILS) - -distclean: clean - -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \ - $(PERLIMPLIB) ..\miniperl.lib $(MINIMOD) - -del /f *.def *.map - -del /f $(EXTENSION_DLL) - -del /f $(EXTENSION_C) $(DYNALOADER).c $(ERRNO).pm - -del /f $(EXTDIR)\DynaLoader\dl_win32.xs - -del /f $(LIBDIR)\.exists $(LIBDIR)\attrs.pm $(LIBDIR)\DynaLoader.pm - -del /f $(LIBDIR)\XSLoader.pm - -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm - -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm $(LIBDIR)\Thread.pm - -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm - -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm - -del /f $(LIBDIR)\Data\Dumper.pm $(LIBDIR)\ByteLoader.pm - -del /f $(LIBDIR)\Devel\Peek.pm $(LIBDIR)\Devel\DProf.pm - -del /f $(LIBDIR)\File\Glob.pm - -del /f $(LIBDIR)\Storable.pm - -del /f $(LIBDIR)\Filter\Util\Call.pm - -del /f $(LIBDIR)\Digest\MD5.pm - -del /f $(LIBDIR)\PerlIO\Scalar.pm - -del /f $(LIBDIR)\PerlIO\Via.pm - -del /f $(LIBDIR)\MIME\Base64.pm - -del /f $(LIBDIR)\MIME\QuotedPrint.pm - -del /f $(LIBDIR)\List\Util.pm - -del /f $(LIBDIR)\Scalar\Util.pm - -del /f $(LIBDIR)\Time\HiRes.pm - -del /f $(LIBDIR)\Time\Piece.pm - -del /f $(LIBDIR)\XS\Typemap.pm - -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO - -rmdir /s $(LIBDIR)\IO - -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread - -rmdir /s $(LIBDIR)\Thread - -if exist $(LIBDIR)\B rmdir /s /q $(LIBDIR)\B - -rmdir /s $(LIBDIR)\B - -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data - -rmdir /s $(LIBDIR)\Data - -if exist $(LIBDIR)\Filter\Util rmdir /s /q $(LIBDIR)\Filter\Util - -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest - -rmdir /s $(LIBDIR)\Digest - -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME - -rmdir /s $(LIBDIR)\MIME - -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List - -rmdir /s $(LIBDIR)\List - -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar - -rmdir /s $(LIBDIR)\Scalar - -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS - -rmdir /s $(LIBDIR)\XS - cd $(PODDIR) - -del /f *.html *.bat checkpods \ - perlaix.pod perlamiga.pod perlapollo.pod perlbeos.pod \ - perlbs2000.pod perlce.pod perlcygwin.pod perldgux.pod \ - perldos.pod perlepoc.pod perlhurd.pod \ - perlhpux.pod perlmachten.pod \ - perlmacos.pod perlmint.pod perlmpeix.pod perlnetware.pod \ - perlos2.pod perlos390.pod perlplan9.pod perlqnx.pod \ - perlsolaris.pod perltru64.pod perluts.pod \ - perlvmesa.pod perlvms.pod perlvos.pod \ - perlwin32.pod pod2html pod2latex pod2man pod2text pod2usage \ - podchecker podselect - cd ..\utils - -del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc perlivp dprofpp - -del /f *.bat - cd ..\win32 - cd ..\x2p - -del /f find2perl s2p - -del /f *.bat - cd ..\win32 - -del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c config.h.new - -del /f $(CONFIGPM) - -del /f bin\*.bat - cd $(EXTDIR) - -del /s *.lib *.def *.map *.pdb *.bs Makefile *$(o) pm_to_blib - cd ..\win32 - -if exist $(AUTODIR) rmdir /s /q $(AUTODIR) - -rmdir /s $(AUTODIR) - -if exist $(COREDIR) rmdir /s /q $(COREDIR) - -rmdir /s $(COREDIR) - -install : all installbare installhtml - -installbare : utils - $(PERLEXE) ..\installperl - if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\*.* - $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.* - $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.* - -installhtml : doc - $(RCOPY) html\*.* $(INST_HTML)\*.* - -inst_lib : $(CONFIGPM) - copy splittree.pl .. - $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR) - $(RCOPY) ..\lib $(INST_LIB)\*.* - -minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) utils - $(XCOPY) $(MINIPERL) ..\t\perl.exe - $(XCOPY) $(GLOBEXE) ..\t\$(NULL) - attrib -r ..\t\*.* - copy test ..\t - cd ..\t - $(MINIPERL) -I..\lib test base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t - cd ..\win32 - -test-prep : all utils - $(XCOPY) $(PERLEXE) ..\t\$(NULL) - $(XCOPY) $(PERLDLL) ..\t\$(NULL) - $(XCOPY) $(GLOBEXE) ..\t\$(NULL) - -test : test-prep - cd ..\t - $(PERLEXE) -I..\lib harness - cd ..\win32 - -test-notty : test-prep - set PERL_SKIP_TTY_TEST=1 - cd ..\t - $(PERLEXE) -I..\lib harness - cd ..\win32 - -test-wide : test-prep - set HARNESS_PERL_SWITCHES=-C - cd ..\t - $(PERLEXE) -I..\lib harness - cd ..\win32 - -test-wide-notty : test-prep - set PERL_SKIP_TTY_TEST=1 - set HARNESS_PERL_SWITCHES=-C - cd ..\t - $(PERLEXE) -I..\lib harness - cd ..\win32 - -clean : Extensions_clean - -@$(DEL) miniperlmain$(o) - -@$(DEL) $(MINIPERL) - -@$(DEL) perlglob$(o) - -@$(DEL) perlmain$(o) - -@$(DEL) config.w32 - -@$(DEL) config.h - -@$(DEL) $(GLOBEXE) - -@$(DEL) $(PERLEXE) - -@$(DEL) $(WPERLEXE) - -@$(DEL) $(PERLDLL) - -@$(DEL) $(CORE_OBJ) - -if exist $(MINIDIR) rmdir /s /q $(MINIDIR) - -rmdir /s $(MINIDIR) - -@$(DEL) $(WIN32_OBJ) - -@$(DEL) $(DLL_OBJ) - -@$(DEL) $(X2P_OBJ) - -@$(DEL) ..\*$(o) ..\*.lib ..\*.exp *$(o) *.lib *.exp *.res - -@$(DEL) ..\t\*.exe ..\t\*.dll ..\t\*.bat - -@$(DEL) ..\x2p\*.exe ..\x2p\*.bat - -@$(DEL) *.ilk - -@$(DEL) *.pdb - -# Handy way to run perlbug -ok without having to install and run the -# installed perlbug. We don't re-run the tests here - we trust the user. -# Please *don't* use this unless all tests pass. -# If you want to report test failures, use "nmake nok" instead. -ok: utils - $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)" - -okfile: utils - $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok - -nok: utils - $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)" - -nokfile: utils - $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok +#
+# Makefile to build perl on Windows NT using Microsoft NMAKE.
+# Supported compilers:
+# Visual C++ 5.x (possibly other versions)
+#
+# This is set up to build a perl.exe that runs off a shared library
+# (perl57.dll). Also makes individual DLLs for the XS extensions.
+#
+
+##
+## Make sure you read README.win32 *before* you mess with anything here!
+##
+
+##
+## Build configuration. Edit the values below to suit your needs.
+##
+
+#
+# Set these to wherever you want "nmake install" to put your
+# newly built perl.
+#
+INST_DRV = c:
+INST_TOP = $(INST_DRV)\perl
+
+#
+# Comment this out if you DON'T want your perl installation to be versioned.
+# This means that the new installation will overwrite any files from the
+# old installation at the same INST_TOP location. Leaving it enabled is
+# the safest route, as perl adds the extra version directory to all the
+# locations it installs files to. If you disable it, an alternative
+# versioned installation can be obtained by setting INST_TOP above to a
+# path that includes an arbitrary version string.
+#
+#INST_VER = \5.7.2
+
+#
+# Comment this out if you DON'T want your perl installation to have
+# architecture specific components. This means that architecture-
+# specific files will be installed along with the architecture-neutral
+# files. Leaving it enabled is safer and more flexible, in case you
+# want to build multiple flavors of perl and install them together in
+# the same location. Commenting it out gives you a simpler
+# installation that is easier to understand for beginners.
+#
+#INST_ARCH = \$(ARCHNAME)
+
+#
+# uncomment to enable multiple interpreters. This is need for fork()
+# emulation.
+#
+USE_MULTI = define
+
+#
+# Beginnings of interpreter cloning/threads; still very incomplete.
+# This should be enabled to get the fork() emulation. This needs
+# USE_MULTI as well.
+#
+USE_ITHREADS = define
+
+#
+# uncomment to enable the implicit "host" layer for all system calls
+# made by perl. This needs USE_MULTI above. This is also needed to
+# get fork().
+#
+USE_IMP_SYS = define
+
+#
+# uncomment to enable the experimental PerlIO I/O subsystem.
+USE_PERLIO = define
+
+#
+# WARNING! This option is deprecated and will eventually go away (enable
+# USE_ITHREADS instead).
+#
+# uncomment to enable threads-capabilities. This is incompatible with
+# USE_ITHREADS, and is only here for people who may have come to rely
+# on the experimental Thread support that was in 5.005.
+#
+#USE_5005THREADS = define
+
+#
+# WARNING! This option is deprecated and will eventually go away (enable
+# USE_MULTI instead).
+#
+# uncomment next line if you want to use the PERL_OBJECT build option.
+# DO NOT ENABLE unless you have legacy code that relies on the C++
+# CPerlObj class that was available in 5.005. This cannot be enabled
+# if you ask for USE_5005THREADS above.
+#
+#USE_OBJECT = define
+
+#
+# uncomment one of the following lines if you are using either
+# Visual C++ 2.x or Visual C++ 6.x (aka Visual Studio 98)
+#
+#CCTYPE = MSVC20
+#CCTYPE = MSVC60
+
+#
+# uncomment next line if you want debug version of perl (big,slow)
+#
+#CFG = Debug
+
+#
+# uncomment to enable use of PerlCRT.DLL when using the Visual C compiler.
+# It has patches that fix known bugs in older versions of MSVCRT.DLL.
+# This currently requires VC 5.0 with Service Pack 3 or later.
+# Get it from CPAN at http://www.perl.com/CPAN/authors/id/D/DO/DOUGL/
+# and follow the directions in the package to install.
+#
+# Not recommended if you have VC 6.x and you're not running Windows 9x.
+#
+#USE_PERLCRT = define
+
+#
+# uncomment to enable linking with setargv.obj under the Visual C
+# compiler. Setting this options enables perl to expand wildcards in
+# arguments, but it may be harder to use alternate methods like
+# File::DosGlob that are more powerful. This option is supported only with
+# Visual C.
+#
+#USE_SETARGV = define
+
+#
+# if you have the source for des_fcrypt(), uncomment this and make sure the
+# file exists (see README.win32). File should be located in the same
+# directory as this file.
+#
+#CRYPT_SRC = fcrypt.c
+
+#
+# if you didn't set CRYPT_SRC and if you have des_fcrypt() available in a
+# library, uncomment this, and make sure the library exists (see README.win32)
+# Specify the full pathname of the library.
+#
+#CRYPT_LIB = fcrypt.lib
+
+#
+# set this if you wish to use perl's malloc
+# WARNING: Turning this on/off WILL break binary compatibility with extensions
+# you may have compiled with/without it. Be prepared to recompile all
+# extensions if you change the default. Currently, this cannot be enabled
+# if you ask for USE_IMP_SYS above.
+#
+#PERL_MALLOC = define
+
+#
+# set the install locations of the compiler include/libraries
+# Running VCVARS32.BAT is *required* when using Visual C.
+# Some versions of Visual C don't define MSVCDIR in the environment,
+# so you may have to set CCHOME explicitly (spaces in the path name should
+# not be quoted)
+#
+#CCHOME = f:\msvc20
+CCHOME = $(MSVCDIR)
+CCINCDIR = $(CCHOME)\include
+CCLIBDIR = $(CCHOME)\lib
+
+#
+# Additional compiler flags can be specified here.
+#
+
+#
+# This should normally be disabled. Adding -DPERL_POLLUTE enables support
+# for old symbols by default, at the expense of extreme pollution. You most
+# probably just want to build modules that won't compile with
+# perl Makefile.PL POLLUTE=1
+# instead of enabling this. Please report such modules to the respective
+# authors.
+#
+#BUILDOPT = $(BUILDOPT) -DPERL_POLLUTE
+
+#
+# This should normally be disabled. Enabling it will disable the File::Glob
+# implementation of CORE::glob.
+#
+#BUILDOPT = $(BUILDOPT) -DPERL_EXTERNAL_GLOB
+
+#
+# This should normally be disabled. Enabling it causes perl to read scripts
+# in text mode (which is the 5.005 behavior) and will break ByteLoader.
+#BUILDOPT = $(BUILDOPT) -DPERL_TEXTMODE_SCRIPTS
+
+#
+# specify semicolon-separated list of extra directories that modules will
+# look for libraries (spaces in path names need not be quoted)
+#
+EXTRALIBDIRS =
+
+#
+# set this to your email address (perl will guess a value from
+# from your loginname and your hostname, which may not be right)
+#
+#EMAIL =
+
+##
+## Build configuration ends.
+##
+
+##################### CHANGE THESE ONLY IF YOU MUST #####################
+
+!IF "$(CRYPT_SRC)$(CRYPT_LIB)" == ""
+D_CRYPT = undef
+!ELSE
+D_CRYPT = define
+CRYPT_FLAG = -DHAVE_DES_FCRYPT
+!ENDIF
+
+!IF "$(USE_OBJECT)" == "define"
+PERL_MALLOC = undef
+USE_5005THREADS = undef
+USE_MULTI = undef
+USE_IMP_SYS = define
+!ENDIF
+
+!IF "$(PERL_MALLOC)" == ""
+PERL_MALLOC = undef
+!ENDIF
+
+!IF "$(USE_5005THREADS)" == ""
+USE_5005THREADS = undef
+!ENDIF
+
+!IF "$(USE_5005THREADS)" == "define"
+USE_ITHREADS = undef
+!ENDIF
+
+!IF "$(USE_IMP_SYS)" == "define"
+PERL_MALLOC = undef
+!ENDIF
+
+!IF "$(USE_MULTI)" == ""
+USE_MULTI = undef
+!ENDIF
+
+!IF "$(USE_OBJECT)" == ""
+USE_OBJECT = undef
+!ENDIF
+
+!IF "$(USE_ITHREADS)" == ""
+USE_ITHREADS = undef
+!ENDIF
+
+!IF "$(USE_IMP_SYS)" == ""
+USE_IMP_SYS = undef
+!ENDIF
+
+!IF "$(USE_PERLIO)" == ""
+USE_PERLIO = undef
+!ENDIF
+
+!IF "$(USE_PERLCRT)" == ""
+USE_PERLCRT = undef
+!ENDIF
+
+!IF "$(USE_IMP_SYS)$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" == "defineundefundefundef"
+USE_MULTI = define
+!ENDIF
+
+!IF "$(USE_ITHREADS)$(USE_MULTI)$(USE_OBJECT)" == "defineundefundef"
+USE_MULTI = define
+USE_5005THREADS = undef
+!ENDIF
+
+!IF "$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" != "undefundefundef"
+BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_CONTEXT
+!ENDIF
+
+!IF "$(USE_IMP_SYS)" != "undef"
+BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_SYS
+!ENDIF
+
+!IF "$(PROCESSOR_ARCHITECTURE)" == ""
+PROCESSOR_ARCHITECTURE = x86
+!ENDIF
+
+!IF "$(USE_OBJECT)" == "define"
+ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-object
+!ELSE
+!IF "$(USE_5005THREADS)" == "define"
+ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-thread
+!ELSE
+!IF "$(USE_MULTI)" == "define"
+ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-multi
+!ELSE
+!IF "$(USE_PERLIO)" == "define"
+ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-perlio
+!ELSE
+ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)
+!ENDIF
+!ENDIF
+!ENDIF
+!ENDIF
+
+!IF "$(USE_PERLIO)" == "define"
+BUILDOPT = $(BUILDOPT) -DUSE_PERLIO
+!ENDIF
+
+!IF "$(USE_ITHREADS)" == "define"
+ARCHNAME = $(ARCHNAME)-thread
+!ENDIF
+
+# Visual Studio 98 specific
+!IF "$(CCTYPE)" == "MSVC60"
+
+# VC 6.0 can load the socket dll on demand. Makes the test suite
+# run in about 10% less time.
+DELAYLOAD = -DELAYLOAD:wsock32.dll -DELAYLOAD:shell32.dll delayimp.lib
+!ENDIF
+
+ARCHDIR = ..\lib\$(ARCHNAME)
+COREDIR = ..\lib\CORE
+AUTODIR = ..\lib\auto
+LIBDIR = ..\lib
+EXTDIR = ..\ext
+PODDIR = ..\pod
+EXTUTILSDIR = $(LIBDIR)\ExtUtils
+
+#
+INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin
+INST_BIN = $(INST_SCRIPT)$(INST_ARCH)
+INST_LIB = $(INST_TOP)$(INST_VER)\lib
+INST_ARCHLIB = $(INST_LIB)$(INST_ARCH)
+INST_COREDIR = $(INST_ARCHLIB)\CORE
+INST_POD = $(INST_LIB)\pod
+INST_HTML = $(INST_TOP)$(INST_VER)\html
+
+#
+# Programs to compile, build .lib files and link
+#
+
+CC = cl
+LINK32 = link
+LIB32 = $(LINK32) -lib
+RSC = rc
+
+#
+# Options
+#
+
+INCLUDES = -I$(COREDIR) -I.\include -I. -I..
+#PCHFLAGS = -Fpc:\temp\vcmoduls.pch -YX
+DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG)
+LOCDEFS = -DPERLDLL -DPERL_CORE
+SUBSYS = console
+CXX_FLAG = -TP -GX
+
+!IF "$(USE_PERLCRT)" != "define"
+LIBC = msvcrt.lib
+!ELSE
+LIBC = PerlCRT.lib
+!ENDIF
+
+PERLEXE_RES =
+PERLDLL_RES =
+
+!IF "$(CFG)" == "Debug"
+! IF "$(CCTYPE)" == "MSVC20"
+OPTIMIZE = -Od -MD -Z7 -DDEBUGGING
+! ELSE
+OPTIMIZE = -Od -MD -Zi -DDEBUGGING
+! ENDIF
+LINK_DBG = -debug -pdb:none
+!ELSE
+# -O1 yields smaller code, which turns out to be faster than -O2
+#OPTIMIZE = -O2 -MD -DNDEBUG
+OPTIMIZE = -O1 -MD -DNDEBUG
+LINK_DBG = -release
+!ENDIF
+
+!IF "$(USE_OBJECT)" == "define"
+OPTIMIZE = $(OPTIMIZE) $(CXX_FLAG)
+BUILDOPT = $(BUILDOPT) -DPERL_OBJECT
+!ENDIF
+
+!IF "$(USE_PERLCRT)" != "define"
+BUILDOPT = $(BUILDOPT) -DPERL_MSVCRT_READFIX
+!ENDIF
+
+LIBBASEFILES = $(CRYPT_LIB) \
+ oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \
+ comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \
+ netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib \
+ version.lib odbc32.lib odbccp32.lib
+
+# we add LIBC here, since we may be using PerlCRT.dll
+LIBFILES = $(LIBBASEFILES) $(LIBC)
+
+CFLAGS = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \
+ $(PCHFLAGS) $(OPTIMIZE)
+LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \
+ -libpath:"$(INST_COREDIR)" \
+ -machine:$(PROCESSOR_ARCHITECTURE)
+OBJOUT_FLAG = -Fo
+EXEOUT_FLAG = -Fe
+
+CFLAGS_O = $(CFLAGS) $(BUILDOPT)
+
+#################### do not edit below this line #######################
+############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
+
+o = .obj
+
+#
+# Rules
+#
+
+.SUFFIXES : .c $(o) .dll .lib .exe .rc .res
+
+.c$(o):
+ $(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<
+
+.y.c:
+ $(NOOP)
+
+$(o).dll:
+ $(LINK32) -dll -subsystem:windows -implib:$(*B).lib -def:$(*B).def \
+ -out:$@ $(LINK_FLAGS) $(LIBFILES) $< $(LIBPERL)
+
+.rc.res:
+ $(RSC) -i.. $<
+
+#
+# various targets
+
+# makedef.pl must be updated if this changes, and this should normally
+# only change when there is an incompatible revision of the public API.
+# XXX so why did we change it from perl56 to perl57?
+PERLIMPLIB = ..\perl57.lib
+PERLDLL = ..\perl57.dll
+
+MINIPERL = ..\miniperl.exe
+MINIDIR = .\mini
+PERLEXE = ..\perl.exe
+WPERLEXE = ..\wperl.exe
+GLOBEXE = ..\perlglob.exe
+CONFIGPM = ..\lib\Config.pm
+MINIMOD = ..\lib\ExtUtils\Miniperl.pm
+X2P = ..\x2p\a2p.exe
+
+# Nominate a target which causes extensions to be re-built
+# This used to be $(PERLEXE), but at worst it is the .dll that they depend
+# on and really only the interface - i.e. the .def file used to export symbols
+# from the .dll
+PERLDEP = perldll.def
+
+PL2BAT = bin\pl2bat.pl
+GLOBBAT = bin\perlglob.bat
+
+UTILS = \
+ ..\utils\h2ph \
+ ..\utils\splain \
+ ..\utils\dprofpp \
+ ..\utils\perlbug \
+ ..\utils\pl2pm \
+ ..\utils\c2ph \
+ ..\utils\h2xs \
+ ..\utils\perldoc \
+ ..\utils\perlcc \
+ ..\utils\perlivp \
+ ..\utils\libnetcfg \
+ ..\pod\checkpods \
+ ..\pod\pod2html \
+ ..\pod\pod2latex \
+ ..\pod\pod2man \
+ ..\pod\pod2text \
+ ..\pod\pod2usage \
+ ..\pod\podchecker \
+ ..\pod\podselect \
+ ..\x2p\find2perl \
+ ..\x2p\s2p \
+ ..\lib\ExtUtils\xsubpp \
+ bin\exetype.pl \
+ bin\runperl.pl \
+ bin\pl2bat.pl \
+ bin\perlglob.pl \
+ bin\search.pl
+
+MAKE = nmake -nologo
+MAKE_BARE = nmake
+
+CFGSH_TMPL = config.vc
+CFGH_TMPL = config_H.vc
+
+XCOPY = xcopy /f /r /i /d
+RCOPY = xcopy /f /r /i /e /d
+NOOP = @echo
+NULL =
+
+DEL = del
+
+#
+# filenames given to xsubpp must have forward slashes (since it puts
+# full pathnames in #line strings)
+XSUBPP = ..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp \
+ -C++ -prototypes
+
+MICROCORE_SRC = \
+ ..\av.c \
+ ..\deb.c \
+ ..\doio.c \
+ ..\doop.c \
+ ..\dump.c \
+ ..\globals.c \
+ ..\gv.c \
+ ..\hv.c \
+ ..\locale.c \
+ ..\mg.c \
+ ..\numeric.c \
+ ..\op.c \
+ ..\perl.c \
+ ..\perlapi.c \
+ ..\perly.c \
+ ..\pp.c \
+ ..\pp_ctl.c \
+ ..\pp_hot.c \
+ ..\pp_pack.c \
+ ..\pp_sys.c \
+ ..\regcomp.c \
+ ..\regexec.c \
+ ..\run.c \
+ ..\scope.c \
+ ..\sv.c \
+ ..\taint.c \
+ ..\toke.c \
+ ..\universal.c \
+ ..\utf8.c \
+ ..\util.c \
+ ..\xsutils.c
+
+EXTRACORE_SRC = $(EXTRACORE_SRC) perllib.c
+
+!IF "$(PERL_MALLOC)" == "define"
+EXTRACORE_SRC = $(EXTRACORE_SRC) ..\malloc.c
+!ENDIF
+
+!IF "$(USE_OBJECT)" != "define"
+EXTRACORE_SRC = $(EXTRACORE_SRC) ..\perlio.c
+!ENDIF
+
+WIN32_SRC = \
+ .\win32.c \
+ .\win32io.c \
+ .\win32sck.c \
+ .\win32thread.c
+
+!IF "$(CRYPT_SRC)" != ""
+WIN32_SRC = $(WIN32_SRC) .\$(CRYPT_SRC)
+!ENDIF
+
+DLL_SRC = $(DYNALOADER).c
+
+X2P_SRC = \
+ ..\x2p\a2p.c \
+ ..\x2p\hash.c \
+ ..\x2p\str.c \
+ ..\x2p\util.c \
+ ..\x2p\walk.c
+
+CORE_NOCFG_H = \
+ ..\av.h \
+ ..\cop.h \
+ ..\cv.h \
+ ..\dosish.h \
+ ..\embed.h \
+ ..\form.h \
+ ..\gv.h \
+ ..\handy.h \
+ ..\hv.h \
+ ..\iperlsys.h \
+ ..\mg.h \
+ ..\nostdio.h \
+ ..\op.h \
+ ..\opcode.h \
+ ..\perl.h \
+ ..\perlapi.h \
+ ..\perlsdio.h \
+ ..\perlsfio.h \
+ ..\perly.h \
+ ..\pp.h \
+ ..\proto.h \
+ ..\regexp.h \
+ ..\scope.h \
+ ..\sv.h \
+ ..\thread.h \
+ ..\unixish.h \
+ ..\utf8.h \
+ ..\util.h \
+ ..\warnings.h \
+ ..\XSUB.h \
+ ..\EXTERN.h \
+ ..\perlvars.h \
+ ..\intrpvar.h \
+ ..\thrdvar.h \
+ .\include\dirent.h \
+ .\include\netdb.h \
+ .\include\sys\socket.h \
+ .\win32.h
+
+CORE_H = $(CORE_NOCFG_H) .\config.h
+
+MICROCORE_OBJ = $(MICROCORE_SRC:.c=.obj)
+CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=.obj)
+WIN32_OBJ = $(WIN32_SRC:.c=.obj)
+MINICORE_OBJ = $(MICROCORE_OBJ:..\=.\mini\) \
+ $(MINIDIR)\miniperlmain$(o) \
+ $(MINIDIR)\perlio$(o)
+MINIWIN32_OBJ = $(WIN32_OBJ:.\=.\mini\)
+MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
+DLL_OBJ = $(DLL_SRC:.c=.obj)
+X2P_OBJ = $(X2P_SRC:.c=.obj)
+
+PERLDLL_OBJ = $(CORE_OBJ)
+PERLEXE_OBJ = perlmain$(o)
+
+PERLDLL_OBJ = $(PERLDLL_OBJ) $(WIN32_OBJ) $(DLL_OBJ)
+#PERLEXE_OBJ = $(PERLEXE_OBJ) $(WIN32_OBJ) $(DLL_OBJ)
+
+!IF "$(USE_SETARGV)" != ""
+SETARGV_OBJ = setargv$(o)
+!ENDIF
+
+DYNALOADER = $(EXTDIR)\DynaLoader\DynaLoader
+SOCKET = $(EXTDIR)\Socket\Socket
+FCNTL = $(EXTDIR)\Fcntl\Fcntl
+OPCODE = $(EXTDIR)\Opcode\Opcode
+SDBM_FILE = $(EXTDIR)\SDBM_File\SDBM_File
+IO = $(EXTDIR)\IO\IO
+POSIX = $(EXTDIR)\POSIX\POSIX
+ATTRS = $(EXTDIR)\attrs\attrs
+THREAD = $(EXTDIR)\Thread\Thread
+B = $(EXTDIR)\B\B
+RE = $(EXTDIR)\re\re
+DUMPER = $(EXTDIR)\Data\Dumper\Dumper
+ERRNO = $(EXTDIR)\Errno\Errno
+PEEK = $(EXTDIR)\Devel\Peek\Peek
+BYTELOADER = $(EXTDIR)\ByteLoader\ByteLoader
+DPROF = $(EXTDIR)\Devel\DProf\DProf
+GLOB = $(EXTDIR)\File\Glob\Glob
+HOSTNAME = $(EXTDIR)\Sys\Hostname\Hostname
+STORABLE = $(EXTDIR)\Storable\Storable
+FILTER = $(EXTDIR)\Filter\Util\Call\Call
+ENCODE = $(EXTDIR)\Encode\Encode
+MD5 = $(EXTDIR)\Digest\MD5\MD5
+PERLIOSCALAR = $(EXTDIR)\PerlIO\Scalar\Scalar
+MIMEBASE64 = $(EXTDIR)\MIME\Base64\Base64
+TIMEHIRES = $(EXTDIR)\Time\HiRes\HiRes
+CWD = $(EXTDIR)\Cwd\Cwd
+LISTUTIL = $(EXTDIR)\List\Util\Util
+PERLIOVIA = $(EXTDIR)\PerlIO\Via\Via
+XSTYPEMAP = $(EXTDIR)\XS\Typemap\Typemap
+
+SOCKET_DLL = $(AUTODIR)\Socket\Socket.dll
+FCNTL_DLL = $(AUTODIR)\Fcntl\Fcntl.dll
+OPCODE_DLL = $(AUTODIR)\Opcode\Opcode.dll
+SDBM_FILE_DLL = $(AUTODIR)\SDBM_File\SDBM_File.dll
+IO_DLL = $(AUTODIR)\IO\IO.dll
+POSIX_DLL = $(AUTODIR)\POSIX\POSIX.dll
+ATTRS_DLL = $(AUTODIR)\attrs\attrs.dll
+THREAD_DLL = $(AUTODIR)\Thread\Thread.dll
+B_DLL = $(AUTODIR)\B\B.dll
+DUMPER_DLL = $(AUTODIR)\Data\Dumper\Dumper.dll
+PEEK_DLL = $(AUTODIR)\Devel\Peek\Peek.dll
+RE_DLL = $(AUTODIR)\re\re.dll
+BYTELOADER_DLL = $(AUTODIR)\ByteLoader\ByteLoader.dll
+DPROF_DLL = $(AUTODIR)\Devel\DProf\DProf.dll
+GLOB_DLL = $(AUTODIR)\File\Glob\Glob.dll
+HOSTNAME_DLL = $(AUTODIR)\Sys\Hostname\Hostname.dll
+STORABLE_DLL = $(AUTODIR)\Storable\Storable.dll
+FILTER_DLL = $(AUTODIR)\Filter\Util\Call\Call.dll
+ENCODE_DLL = $(AUTODIR)\Encode\Encode.dll
+MD5_DLL = $(AUTODIR)\Digest\MD5\MD5.dll
+PERLIOSCALAR_DLL= $(AUTODIR)\PerlIO\Scalar\Scalar.dll
+MIMEBASE64_DLL = $(AUTODIR)\MIME\Base64\Base64.dll
+TIMEHIRES_DLL = $(AUTODIR)\Time\HiRes\HiRes.dll
+CWD_DLL = $(AUTODIR)\Cwd\Cwd.dll
+LISTUTIL_DLL = $(AUTODIR)\List\Util\Util.dll
+PERLIOVIA_DLL = $(AUTODIR)\PerlIO\Via\Via.dll
+XSTYPEMAP_DLL = $(AUTODIR)\XS\Typemap\Typemap.dll
+
+EXTENSION_C = \
+ $(SOCKET).c \
+ $(FCNTL).c \
+ $(OPCODE).c \
+ $(SDBM_FILE).c \
+ $(IO).c \
+ $(POSIX).c \
+ $(ATTRS).c \
+ $(THREAD).c \
+ $(RE).c \
+ $(DUMPER).c \
+ $(PEEK).c \
+ $(B).c \
+ $(BYTELOADER).c \
+ $(DPROF).c \
+ $(GLOB).c \
+ $(HOSTNAME).c \
+ $(STORABLE).c \
+ $(FILTER).c \
+ $(ENCODE).c \
+ $(MD5).c \
+ $(PERLIOSCALAR).c \
+ $(MIMEBASE64).c \
+ $(TIMEHIRES).c \
+ $(CWD).c \
+ $(LISTUTIL).c \
+ $(PERLIOVIA).c \
+ $(XSTYPEMAP).c
+
+EXTENSION_DLL = \
+ $(SOCKET_DLL) \
+ $(FCNTL_DLL) \
+ $(OPCODE_DLL) \
+ $(SDBM_FILE_DLL)\
+ $(IO_DLL) \
+ $(POSIX_DLL) \
+ $(ATTRS_DLL) \
+ $(DUMPER_DLL) \
+ $(PEEK_DLL) \
+ $(B_DLL) \
+ $(RE_DLL) \
+ $(THREAD_DLL) \
+ $(BYTELOADER_DLL) \
+ $(DPROF_DLL) \
+ $(GLOB_DLL) \
+ $(HOSTNAME_DLL) \
+ $(STORABLE_DLL) \
+ $(FILTER_DLL) \
+ $(ENCODE_DLL) \
+ $(MD5_DLL) \
+ $(PERLIOSCALAR_DLL) \
+ $(MIMEBASE64_DLL) \
+ $(TIMEHIRES_DLL) \
+ $(CWD_DLL) \
+ $(LISTUTIL_DLL) \
+ $(PERLIOVIA_DLL) \
+ $(XSTYPEMAP_DLL)
+
+POD2HTML = $(PODDIR)\pod2html
+POD2MAN = $(PODDIR)\pod2man
+POD2LATEX = $(PODDIR)\pod2latex
+POD2TEXT = $(PODDIR)\pod2text
+
+CFG_VARS = \
+ "INST_DRV=$(INST_DRV)" \
+ "INST_TOP=$(INST_TOP)" \
+ "INST_VER=$(INST_VER)" \
+ "INST_ARCH=$(INST_ARCH)" \
+ "archname=$(ARCHNAME)" \
+ "cc=$(CC)" \
+ "ld=$(LINK32)" \
+ "ccflags=-nologo -Gf -W3 $(OPTIMIZE:"=\") $(DEFINES) $(BUILDOPT)" \
+ "cf_email=$(EMAIL)" \
+ "d_crypt=$(D_CRYPT)" \
+ "d_mymalloc=$(PERL_MALLOC)" \
+ "libs=$(LIBFILES)" \
+ "incpath=$(CCINCDIR:"=\")" \
+ "libperl=$(PERLIMPLIB:..\=)" \
+ "libpth=$(CCLIBDIR:"=\");$(EXTRALIBDIRS:"=\")" \
+ "libc=$(LIBC)" \
+ "make=$(MAKE_BARE)" \
+ "use5005threads=$(USE_5005THREADS)" \
+ "useithreads=$(USE_ITHREADS)" \
+ "usethreads=$(USE_5005THREADS)" \
+ "usemultiplicity=$(USE_MULTI)" \
+ "useperlio=$(USE_PERLIO)" \
+ "LINK_FLAGS=$(LINK_FLAGS:"=\")" \
+ "optimize=$(OPTIMIZE:"=\")"
+
+#
+# Top targets
+#
+
+all : .\config.h $(GLOBEXE) $(MINIMOD) $(CONFIGPM) $(PERLEXE) \
+ $(X2P) Extensions
+ @echo Everything is up to date. '$(MAKE_BARE) test' to run test suite.
+
+$(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c
+
+#------------------------------------------------------------
+
+$(GLOBEXE) : perlglob$(o)
+ $(LINK32) $(LINK_FLAGS) $(LIBFILES) -out:$@ -subsystem:$(SUBSYS) \
+ perlglob$(o) setargv$(o)
+
+perlglob$(o) : perlglob.c
+
+config.w32 : $(CFGSH_TMPL)
+ copy $(CFGSH_TMPL) config.w32
+
+.\config.h : $(CFGH_TMPL)
+ -del /f config.h
+ copy $(CFGH_TMPL) config.h
+
+..\config.sh : config.w32 $(MINIPERL) config_sh.PL
+ $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) config.w32 > ..\config.sh
+
+# this target is for when changes to the main config.sh happen
+# edit config.{b,v,g}c and make this target once for each supported
+# compiler (e.g. `nmake CCTYPE=BORLAND regen_config_h`)
+regen_config_h:
+ perl config_sh.PL $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh
+ cd ..
+ -del /f perl.exe
+ perl configpm
+ cd win32
+ -del /f $(CFGH_TMPL)
+ -mkdir $(COREDIR)
+ -perl -I..\lib config_h.PL "INST_VER=$(INST_VER)"
+ rename config.h $(CFGH_TMPL)
+
+$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl
+ cd ..
+ miniperl configpm
+ cd win32
+ if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL)
+ $(XCOPY) ..\*.h $(COREDIR)\*.*
+ $(XCOPY) *.h $(COREDIR)\*.*
+ $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.*
+ $(RCOPY) include $(COREDIR)\*.*
+ -$(MINIPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)"
+ if errorlevel 1 $(MAKE) /$(MAKEFLAGS) $(CONFIGPM)
+
+$(MINIPERL) : $(MINIDIR) $(MINI_OBJ)
+ $(LINK32) -subsystem:console -out:$@ @<<
+ $(LINK_FLAGS) $(LIBFILES) $(MINI_OBJ)
+<<
+
+$(MINIDIR) :
+ if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"
+
+$(MINICORE_OBJ) : $(CORE_NOCFG_H)
+ $(CC) -c $(CFLAGS) -DPERL_EXTERNAL_GLOB $(OBJOUT_FLAG)$@ ..\$(*F).c
+
+$(MINIWIN32_OBJ) : $(CORE_NOCFG_H)
+ $(CC) -c $(CFLAGS) $(OBJOUT_FLAG)$@ $(*F).c
+
+# -DPERL_IMPLICIT_SYS needs C++ for perllib.c
+# This is the only file that depends on perlhost.h, vmem.h, and vdir.h
+!IF "$(USE_IMP_SYS)$(USE_OBJECT)" == "defineundef"
+perllib$(o) : perllib.c .\perlhost.h .\vdir.h .\vmem.h
+ $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c
+!ENDIF
+
+# 1. we don't want to rebuild miniperl.exe when config.h changes
+# 2. we don't want to rebuild miniperl.exe with non-default config.h
+$(MINI_OBJ) : $(CORE_NOCFG_H)
+
+$(WIN32_OBJ) : $(CORE_H)
+$(CORE_OBJ) : $(CORE_H)
+$(DLL_OBJ) : $(CORE_H)
+$(X2P_OBJ) : $(CORE_H)
+
+perldll.def : $(MINIPERL) $(CONFIGPM) ..\global.sym ..\pp.sym ..\makedef.pl
+ $(MINIPERL) -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \
+ CCTYPE=$(CCTYPE) > perldll.def
+
+$(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES)
+ $(LINK32) -dll -def:perldll.def -base:0x28000000 -out:$@ @<<
+ $(LINK_FLAGS) $(DELAYLOAD) $(LIBFILES) $(PERLDLL_OBJ) $(PERLDLL_RES)
+<<
+ $(XCOPY) $(PERLIMPLIB) $(COREDIR)
+
+$(MINIMOD) : $(MINIPERL) ..\minimod.pl
+ cd ..
+ miniperl minimod.pl > lib\ExtUtils\Miniperl.pm
+ cd win32
+
+..\x2p\a2p$(o) : ..\x2p\a2p.c
+ $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\a2p.c
+
+..\x2p\hash$(o) : ..\x2p\hash.c
+ $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\hash.c
+
+..\x2p\str$(o) : ..\x2p\str.c
+ $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\str.c
+
+..\x2p\util$(o) : ..\x2p\util.c
+ $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\util.c
+
+..\x2p\walk$(o) : ..\x2p\walk.c
+ $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\walk.c
+
+$(X2P) : $(MINIPERL) $(X2P_OBJ)
+ $(MINIPERL) ..\x2p\find2perl.PL
+ $(MINIPERL) ..\x2p\s2p.PL
+ $(LINK32) -subsystem:console -out:$@ @<<
+ $(LINK_FLAGS) $(LIBFILES) $(X2P_OBJ)
+<<
+
+perlmain.c : runperl.c
+ copy runperl.c perlmain.c
+
+perlmain$(o) : perlmain.c
+ $(CC) $(CFLAGS_O) -UPERLDLL $(OBJOUT_FLAG)$@ -c perlmain.c
+
+$(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES)
+ $(LINK32) -subsystem:console -out:$@ -stack:0x1000000 $(LINK_FLAGS) \
+ $(LIBFILES) $(PERLEXE_OBJ) $(SETARGV_OBJ) $(PERLIMPLIB) $(PERLEXE_RES)
+ copy $(PERLEXE) $(WPERLEXE)
+ $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS
+ copy splittree.pl ..
+ $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR)
+
+$(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)
+ if not exist $(AUTODIR) mkdir $(AUTODIR)
+ cd $(EXTDIR)\$(*B)
+ ..\$(MINIPERL) -I..\..\lib $(*B)_pm.PL
+ ..\$(MINIPERL) -I..\..\lib XSLoader_pm.PL
+ cd ..\..\win32
+ $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL)
+ $(XCOPY) $(EXTDIR)\$(*B)\XSLoader.pm $(LIBDIR)\$(NULL)
+ cd $(EXTDIR)\$(*B)
+ $(XSUBPP) dl_win32.xs > $(*B).c
+ cd ..\..\win32
+
+$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
+ copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
+
+#----------------------------------------------------------------------------------
+Extensions: buildext.pl $(PERLDEP) $(CONFIGPM)
+ $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR)
+
+Extensions_clean:
+ -if exist $(MINIPERL) $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) clean
+
+#----------------------------------------------------------------------------------
+
+doc: $(PERLEXE)
+ $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=./html \
+ --podpath=pod:lib:ext:utils --htmlroot="file://$(INST_HTML::=|)" \
+ --libpod=perlfunc:perlguts:perlvar:perlrun:perlop --recurse
+
+utils: $(PERLEXE) $(X2P)
+ cd ..\utils
+ $(MAKE) PERL=$(MINIPERL)
+ cd ..\pod
+ copy ..\README.aix .\perlaix.pod
+ copy ..\README.amiga .\perlamiga.pod
+ copy ..\README.apollo .\perlapollo.pod
+ copy ..\README.beos .\perlbeos.pod
+ copy ..\README.bs2000 .\perlbs2000.pod
+ copy ..\README.ce .\perlce.pod
+ copy ..\README.cygwin .\perlcygwin.pod
+ copy ..\README.dgux .\perldgux.pod
+ copy ..\README.dos .\perldos.pod
+ copy ..\README.epoc .\perlepoc.pod
+ copy ..\README.hurd .\perlhurd.pod
+ copy ..\README.hpux .\perlhpux.pod
+ copy ..\README.machten .\perlmachten.pod
+ copy ..\README.macos .\perlmacos.pod
+ copy ..\README.mint .\perlmint.pod
+ copy ..\README.mpeix .\perlmpeix.pod
+ copy ..\README.netware .\perlnetware.pod
+ copy ..\README.os2 .\perlos2.pod
+ copy ..\README.os390 .\perlos390.pod
+ copy ..\README.plan9 .\perlplan9.pod
+ copy ..\README.qnx .\perlqnx.pod
+ copy ..\README.solaris .\perlsolaris.pod
+ copy ..\README.tru64 .\perltru64.pod
+ copy ..\README.uts .\perluts.pod
+ copy ..\README.vmesa .\perlvmesa.pod
+ copy ..\vms\perlvms.pod .\perlvms.pod
+ copy ..\README.vos .\perlvos.pod
+ copy ..\README.win32 .\perlwin32.pod
+ $(MAKE) -f ..\win32\pod.mak converters
+ cd ..\lib
+ $(PERLEXE) lib_pm.PL
+ cd ..\win32
+ $(PERLEXE) $(PL2BAT) $(UTILS)
+
+distclean: clean
+ -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
+ $(PERLIMPLIB) ..\miniperl.lib $(MINIMOD)
+ -del /f *.def *.map
+ -del /f $(EXTENSION_DLL)
+ -del /f $(EXTENSION_C) $(DYNALOADER).c $(ERRNO).pm
+ -del /f $(EXTDIR)\DynaLoader\dl_win32.xs
+ -del /f $(LIBDIR)\.exists $(LIBDIR)\attrs.pm $(LIBDIR)\DynaLoader.pm
+ -del /f $(LIBDIR)\XSLoader.pm
+ -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm
+ -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm $(LIBDIR)\Thread.pm
+ -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm
+ -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm
+ -del /f $(LIBDIR)\Data\Dumper.pm $(LIBDIR)\ByteLoader.pm
+ -del /f $(LIBDIR)\Devel\Peek.pm $(LIBDIR)\Devel\DProf.pm
+ -del /f $(LIBDIR)\File\Glob.pm
+ -del /f $(LIBDIR)\Storable.pm
+ -del /f $(LIBDIR)\Filter\Util\Call.pm
+ -del /f $(LIBDIR)\Digest\MD5.pm
+ -del /f $(LIBDIR)\PerlIO\Scalar.pm
+ -del /f $(LIBDIR)\PerlIO\Via.pm
+ -del /f $(LIBDIR)\MIME\Base64.pm
+ -del /f $(LIBDIR)\MIME\QuotedPrint.pm
+ -del /f $(LIBDIR)\List\Util.pm
+ -del /f $(LIBDIR)\Scalar\Util.pm
+ -del /f $(LIBDIR)\Time\HiRes.pm
+ -del /f $(LIBDIR)\XS\Typemap.pm
+ -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO
+ -rmdir /s $(LIBDIR)\IO
+ -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread
+ -rmdir /s $(LIBDIR)\Thread
+ -if exist $(LIBDIR)\B rmdir /s /q $(LIBDIR)\B
+ -rmdir /s $(LIBDIR)\B
+ -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data
+ -rmdir /s $(LIBDIR)\Data
+ -if exist $(LIBDIR)\Filter\Util rmdir /s /q $(LIBDIR)\Filter\Util
+ -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest
+ -rmdir /s $(LIBDIR)\Digest
+ -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME
+ -rmdir /s $(LIBDIR)\MIME
+ -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List
+ -rmdir /s $(LIBDIR)\List
+ -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar
+ -rmdir /s $(LIBDIR)\Scalar
+ -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
+ -rmdir /s $(LIBDIR)\XS
+ cd $(PODDIR)
+ -del /f *.html *.bat checkpods \
+ perlaix.pod perlamiga.pod perlapollo.pod perlbeos.pod \
+ perlbs2000.pod perlce.pod perlcygwin.pod perldgux.pod \
+ perldos.pod perlepoc.pod perlhurd.pod \
+ perlhpux.pod perlmachten.pod \
+ perlmacos.pod perlmint.pod perlmpeix.pod perlnetware.pod \
+ perlos2.pod perlos390.pod perlplan9.pod perlqnx.pod \
+ perlsolaris.pod perltru64.pod perluts.pod \
+ perlvmesa.pod perlvms.pod perlvos.pod \
+ perlwin32.pod pod2html pod2latex pod2man pod2text pod2usage \
+ podchecker podselect
+ cd ..\utils
+ -del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc perlivp dprofpp
+ -del /f *.bat
+ cd ..\win32
+ cd ..\x2p
+ -del /f find2perl s2p
+ -del /f *.bat
+ cd ..\win32
+ -del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c config.h.new
+ -del /f $(CONFIGPM)
+ -del /f bin\*.bat
+ cd $(EXTDIR)
+ -del /s *.lib *.def *.map *.pdb *.bs Makefile *$(o) pm_to_blib
+ cd ..\win32
+ -if exist $(AUTODIR) rmdir /s /q $(AUTODIR)
+ -rmdir /s $(AUTODIR)
+ -if exist $(COREDIR) rmdir /s /q $(COREDIR)
+ -rmdir /s $(COREDIR)
+
+install : all installbare installhtml
+
+installbare : utils
+ $(PERLEXE) ..\installperl
+ if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\*.*
+ $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.*
+ $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.*
+
+installhtml : doc
+ $(RCOPY) html\*.* $(INST_HTML)\*.*
+
+inst_lib : $(CONFIGPM)
+ copy splittree.pl ..
+ $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR)
+ $(RCOPY) ..\lib $(INST_LIB)\*.*
+
+minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) utils
+ $(XCOPY) $(MINIPERL) ..\t\perl.exe
+ $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
+ attrib -r ..\t\*.*
+ copy test ..\t
+ cd ..\t
+ $(MINIPERL) -I..\lib test base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t
+ cd ..\win32
+
+test-prep : all utils
+ $(XCOPY) $(PERLEXE) ..\t\$(NULL)
+ $(XCOPY) $(PERLDLL) ..\t\$(NULL)
+ $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
+
+test : test-prep
+ cd ..\t
+ $(PERLEXE) -I..\lib harness
+ cd ..\win32
+
+test-notty : test-prep
+ set PERL_SKIP_TTY_TEST=1
+ cd ..\t
+ $(PERLEXE) -I..\lib harness
+ cd ..\win32
+
+test-wide : test-prep
+ set HARNESS_PERL_SWITCHES=-C
+ cd ..\t
+ $(PERLEXE) -I..\lib harness
+ cd ..\win32
+
+test-wide-notty : test-prep
+ set PERL_SKIP_TTY_TEST=1
+ set HARNESS_PERL_SWITCHES=-C
+ cd ..\t
+ $(PERLEXE) -I..\lib harness
+ cd ..\win32
+
+clean : Extensions_clean
+ -@$(DEL) miniperlmain$(o)
+ -@$(DEL) $(MINIPERL)
+ -@$(DEL) perlglob$(o)
+ -@$(DEL) perlmain$(o)
+ -@$(DEL) config.w32
+ -@$(DEL) config.h
+ -@$(DEL) $(GLOBEXE)
+ -@$(DEL) $(PERLEXE)
+ -@$(DEL) $(WPERLEXE)
+ -@$(DEL) $(PERLDLL)
+ -@$(DEL) $(CORE_OBJ)
+ -if exist $(MINIDIR) rmdir /s /q $(MINIDIR)
+ -rmdir /s $(MINIDIR)
+ -@$(DEL) $(WIN32_OBJ)
+ -@$(DEL) $(DLL_OBJ)
+ -@$(DEL) $(X2P_OBJ)
+ -@$(DEL) ..\*$(o) ..\*.lib ..\*.exp *$(o) *.lib *.exp *.res
+ -@$(DEL) ..\t\*.exe ..\t\*.dll ..\t\*.bat
+ -@$(DEL) ..\x2p\*.exe ..\x2p\*.bat
+ -@$(DEL) *.ilk
+ -@$(DEL) *.pdb
+
+# Handy way to run perlbug -ok without having to install and run the
+# installed perlbug. We don't re-run the tests here - we trust the user.
+# Please *don't* use this unless all tests pass.
+# If you want to report test failures, use "nmake nok" instead.
+ok: utils
+ $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)"
+
+okfile: utils
+ $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok
+
+nok: utils
+ $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)"
+
+nokfile: utils
+ $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok
diff --git a/win32/makefile.mk b/win32/makefile.mk index f784a4f37f..449dc895fb 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -1,1272 +1,1271 @@ -# -# Makefile to build perl on Windows NT using DMAKE. -# Supported compilers: -# Visual C++ 2.0 thro 6.0 -# Borland C++ 5.02 -# Mingw32 with gcc-2.95.2 or better **experimental** -# -# This is set up to build a perl.exe that runs off a shared library -# (perl57.dll). Also makes individual DLLs for the XS extensions. -# - -## -## Make sure you read README.win32 *before* you mess with anything here! -## - -## -## Build configuration. Edit the values below to suit your needs. -## - -# -# Set these to wherever you want "dmake install" to put your -# newly built perl. -# -INST_DRV *= c: -INST_TOP *= $(INST_DRV)\perl - -# -# Comment this out if you DON'T want your perl installation to be versioned. -# This means that the new installation will overwrite any files from the -# old installation at the same INST_TOP location. Leaving it enabled is -# the safest route, as perl adds the extra version directory to all the -# locations it installs files to. If you disable it, an alternative -# versioned installation can be obtained by setting INST_TOP above to a -# path that includes an arbitrary version string. -# -INST_VER *= \5.7.2 - -# -# Comment this out if you DON'T want your perl installation to have -# architecture specific components. This means that architecture- -# specific files will be installed along with the architecture-neutral -# files. Leaving it enabled is safer and more flexible, in case you -# want to build multiple flavors of perl and install them together in -# the same location. Commenting it out gives you a simpler -# installation that is easier to understand for beginners. -# -INST_ARCH *= \$(ARCHNAME) - -# -# uncomment to enable multiple interpreters. This is need for fork() -# emulation. -# -USE_MULTI *= define - -# -# Beginnings of interpreter cloning/threads; still very incomplete. -# This should be enabled to get the fork() emulation. This needs -# USE_MULTI as well. -# -USE_ITHREADS *= define - -# -# uncomment to enable the implicit "host" layer for all system calls -# made by perl. This needs USE_MULTI above. This is also needed to -# get fork(). -# -USE_IMP_SYS *= define - -# -# uncomment to enable the experimental PerlIO I/O subsystem. -USE_PERLIO = define - -# -# WARNING! This option is deprecated and will eventually go away (enable -# USE_ITHREADS instead). -# -# uncomment to enable threads-capabilities. This is incompatible with -# USE_ITHREADS, and is only here for people who may have come to rely -# on the experimental Thread support that was in 5.005. -# -#USE_5005THREADS *= define - -# -# WARNING! This option is deprecated and will eventually go away (enable -# USE_MULTI instead). -# -# uncomment next line if you want to use the PERL_OBJECT build option. -# DO NOT ENABLE unless you have legacy code that relies on the C++ -# CPerlObj class that was available in 5.005. This cannot be enabled -# if you ask for USE_5005THREADS above. -# -#USE_OBJECT *= define - -# -# uncomment exactly one of the following -# -# Visual C++ 2.x -#CCTYPE *= MSVC20 -# Visual C++ > 2.x and < 6.x -#CCTYPE *= MSVC -# Visual C++ >= 6.x -CCTYPE *= MSVC60 -# Borland 5.02 or later -#CCTYPE *= BORLAND -# mingw32+gcc-2.95.2 or better -#CCTYPE *= GCC - -# -# uncomment this if your Borland compiler is older than v5.4. -BCCOLD = define -# -# uncomment this if you want to use Borland's VCL as your CRT -#BCCVCL = define - -# -# uncomment this if you are compiling under Windows 95/98 and command.com -# (not needed if you're running under 4DOS/NT 6.01 or later) -#IS_WIN95 *= define - -# -# uncomment next line if you want debug version of perl (big,slow) -# If not enabled, we automatically try to use maximum optimization -# with all compilers that are known to have a working optimizer. -# -CFG *= Debug - -# -# uncomment to enable use of PerlCRT.DLL when using the Visual C compiler. -# It has patches that fix known bugs in older versions of MSVCRT.DLL. -# This currently requires VC 5.0 with Service Pack 3 or later. -# Get it from CPAN at http://www.perl.com/CPAN/authors/id/D/DO/DOUGL/ -# and follow the directions in the package to install. -# -# Not recommended if you have VC 6.x and you're not running Windows 9x. -# -#USE_PERLCRT *= define - -# -# uncomment to enable linking with setargv.obj under the Visual C -# compiler. Setting this options enables perl to expand wildcards in -# arguments, but it may be harder to use alternate methods like -# File::DosGlob that are more powerful. This option is supported only with -# Visual C. -# -#USE_SETARGV *= define - -# -# if you have the source for des_fcrypt(), uncomment this and make sure the -# file exists (see README.win32). File should be located in the same -# directory as this file. -# -#CRYPT_SRC *= fcrypt.c - -# -# if you didn't set CRYPT_SRC and if you have des_fcrypt() available in a -# library, uncomment this, and make sure the library exists (see README.win32) -# Specify the full pathname of the library. -# -#CRYPT_LIB *= fcrypt.lib - -# -# set this if you wish to use perl's malloc -# WARNING: Turning this on/off WILL break binary compatibility with extensions -# you may have compiled with/without it. Be prepared to recompile all -# extensions if you change the default. Currently, this cannot be enabled -# if you ask for USE_IMP_SYS above. -# -#PERL_MALLOC *= define - -# -# set the install locations of the compiler include/libraries -# Running VCVARS32.BAT is *required* when using Visual C. -# Some versions of Visual C don't define MSVCDIR in the environment, -# so you may have to set CCHOME explicitly (spaces in the path name should -# not be quoted) -# -#CCHOME *= F:\borland\bc5 -CCHOME *= $(MSVCDIR) -#CCHOME *= c:\gcc-2.95.2 -CCINCDIR *= $(CCHOME)\include -CCLIBDIR *= $(CCHOME)\lib - -# -# Additional compiler flags can be specified here. -# - -# -# This should normally be disabled. Adding -DPERL_POLLUTE enables support -# for old symbols by default, at the expense of extreme pollution. You most -# probably just want to build modules that won't compile with -# perl Makefile.PL POLLUTE=1 -# instead of enabling this. Please report such modules to the respective -# authors. -# -#BUILDOPT += -DPERL_POLLUTE - -# -# This should normally be disabled. Enabling it will disable the File::Glob -# implementation of CORE::glob. -# -#BUILDOPT += -DPERL_EXTERNAL_GLOB - -# -# This should normally be disabled. Enabling it causes perl to read scripts -# in text mode (which is the 5.005 behavior) and will break ByteLoader. -#BUILDOPT += -DPERL_TEXTMODE_SCRIPTS - -# -# specify semicolon-separated list of extra directories that modules will -# look for libraries (spaces in path names need not be quoted) -# -EXTRALIBDIRS *= - -# -# set this to point to cmd.exe (only needed if you use some -# alternate shell that doesn't grok cmd.exe style commands) -# -#SHELL *= g:\winnt\system32\cmd.exe - -# -# set this to your email address (perl will guess a value from -# from your loginname and your hostname, which may not be right) -# -#EMAIL *= - -## -## Build configuration ends. -## - -##################### CHANGE THESE ONLY IF YOU MUST ##################### - -.IF "$(CRYPT_SRC)$(CRYPT_LIB)" == "" -D_CRYPT = undef -.ELSE -D_CRYPT = define -CRYPT_FLAG = -DHAVE_DES_FCRYPT -.ENDIF - -.IF "$(USE_OBJECT)" == "define" -PERL_MALLOC != undef -USE_5005THREADS != undef -USE_MULTI != undef -USE_IMP_SYS != define -.ENDIF - -PERL_MALLOC *= undef - -USE_5005THREADS *= undef - -.IF "$(USE_5005THREADS)" == "define" -USE_ITHREADS != undef -.ENDIF - -.IF "$(USE_IMP_SYS)" == "define" -PERL_MALLOC != undef -.ENDIF - -USE_MULTI *= undef -USE_OBJECT *= undef -USE_ITHREADS *= undef -USE_IMP_SYS *= undef -USE_PERLIO *= undef -USE_PERLCRT *= undef - -.IF "$(USE_IMP_SYS)$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" == "defineundefundefundef" -USE_MULTI != define -.ENDIF - -.IF "$(USE_ITHREADS)$(USE_MULTI)$(USE_OBJECT)" == "defineundefundef" -USE_MULTI != define -USE_5005THREADS != undef -.ENDIF - -.IF "$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" != "undefundefundef" -BUILDOPT += -DPERL_IMPLICIT_CONTEXT -.ENDIF - -.IF "$(USE_IMP_SYS)" != "undef" -BUILDOPT += -DPERL_IMPLICIT_SYS -.ENDIF - -.IMPORT .IGNORE : PROCESSOR_ARCHITECTURE - -PROCESSOR_ARCHITECTURE *= x86 - -.IF "$(USE_OBJECT)" == "define" -ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-object -.ELIF "$(USE_5005THREADS)" == "define" -ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-thread -.ELIF "$(USE_MULTI)" == "define" -ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-multi -.ELSE -.IF "$(USE_PERLIO)" == "define" -ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-perlio -.ELSE -ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE) -.ENDIF -ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE) -.ENDIF - -.IF "$(USE_ITHREADS)" == "define" -ARCHNAME !:= $(ARCHNAME)-thread -.ENDIF - -# Visual Studio 98 specific -.IF "$(CCTYPE)" == "MSVC60" - -# VC 6.0 can load the socket dll on demand. Makes the test suite -# run in about 10% less time. -DELAYLOAD *= -DELAYLOAD:wsock32.dll -DELAYLOAD:shell32.dll delayimp.lib - -.IF "$(CFG)" == "Debug" -.ELSE -# VC 6.0 seems capable of compiling perl correctly with optimizations -# enabled. Anything earlier fails tests. -CFG *= Optimize -.ENDIF -.ENDIF - -ARCHDIR = ..\lib\$(ARCHNAME) -COREDIR = ..\lib\CORE -AUTODIR = ..\lib\auto -LIBDIR = ..\lib -EXTDIR = ..\ext -PODDIR = ..\pod -EXTUTILSDIR = $(LIBDIR)\ExtUtils - -# -INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin -INST_BIN = $(INST_SCRIPT)$(INST_ARCH) -INST_LIB = $(INST_TOP)$(INST_VER)\lib -INST_ARCHLIB = $(INST_LIB)$(INST_ARCH) -INST_COREDIR = $(INST_ARCHLIB)\CORE -INST_POD = $(INST_LIB)\pod -INST_HTML = $(INST_TOP)$(INST_VER)\html - -# -# Programs to compile, build .lib files and link -# - -.USESHELL : - -.IF "$(CCTYPE)" == "BORLAND" - -CC = bcc32 -.IF "$(BCCOLD)" != "define" -LINK32 = ilink32 -.ELSE -LINK32 = tlink32 -.ENDIF -LIB32 = tlib /P128 -IMPLIB = implib -c -RSC = rc - -# -# Options -# -INCLUDES = -I$(COREDIR) -I.\include -I. -I.. -I"$(CCINCDIR)" -#PCHFLAGS = -H -Hc -H=c:\temp\bcmoduls.pch -DEFINES = -DWIN32 $(CRYPT_FLAG) -LOCDEFS = -DPERLDLL -DPERL_CORE -SUBSYS = console -CXX_FLAG = -P - -LIBC = cw32mti.lib -LIBFILES = $(CRYPT_LIB) import32.lib $(LIBC) - -.IF "$(CFG)" == "Debug" -OPTIMIZE = -v -D_RTLDLL -DDEBUGGING -LINK_DBG = -v -.ELSE -OPTIMIZE = -O2 -D_RTLDLL -LINK_DBG = -.ENDIF - -CFLAGS = -w -g0 -tWM -tWD $(INCLUDES) $(DEFINES) $(LOCDEFS) \ - $(PCHFLAGS) $(OPTIMIZE) -LINK_FLAGS = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(CCLIBDIR)" -OBJOUT_FLAG = -o -EXEOUT_FLAG = -e -LIBOUT_FLAG = -.IF "$(BCCOLD)" != "define" -LINK_FLAGS += -Gn -DEFINES += -D_MT -D__USELOCALES__ -D_WIN32_WINNT=0x0410 -.END -.IF "$(BCCVCL)" == "define" -LIBC = cp32mti.lib vcl.lib vcl50.lib vclx50.lib vcle50.lib -LINK_FLAGS += -L"$(CCLIBDIR)\Release" -.END - - -.ELIF "$(CCTYPE)" == "GCC" - -CC = gcc -LINK32 = gcc -LIB32 = ar rc -IMPLIB = dlltool -RSC = rc - -i = .i -o = .o -a = .a - -# -# Options -# - -INCLUDES = -I.\include -I. -I.. -I$(COREDIR) -DEFINES = -DWIN32 $(CRYPT_FLAG) -LOCDEFS = -DPERLDLL -DPERL_CORE -SUBSYS = console -CXX_FLAG = -xc++ - -LIBC = -lmsvcrt - -# same libs as MSVC -LIBFILES = $(CRYPT_LIB) $(LIBC) \ - -lmoldname -lkernel32 -luser32 -lgdi32 \ - -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 \ - -loleaut32 -lnetapi32 -luuid -lwsock32 -lmpr \ - -lwinmm -lversion -lodbc32 - -.IF "$(CFG)" == "Debug" -OPTIMIZE = -g -O2 -DDEBUGGING -LINK_DBG = -g -.ELSE -OPTIMIZE = -g -O2 -LINK_DBG = -g -.ENDIF - -CFLAGS = $(INCLUDES) $(DEFINES) $(LOCDEFS) $(OPTIMIZE) -LINK_FLAGS = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(CCLIBDIR)" -OBJOUT_FLAG = -o -EXEOUT_FLAG = -o -LIBOUT_FLAG = - -# NOTE: we assume that GCC uses MSVCRT.DLL -BUILDOPT += -fno-strict-aliasing -DPERL_MSVCRT_READFIX - -.ELSE - -CC = cl -LINK32 = link -LIB32 = $(LINK32) -lib -RSC = rc - -# -# Options -# - -INCLUDES = -I$(COREDIR) -I.\include -I. -I.. -#PCHFLAGS = -Fpc:\temp\vcmoduls.pch -YX -DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG) -LOCDEFS = -DPERLDLL -DPERL_CORE -SUBSYS = console -CXX_FLAG = -TP -GX - -.IF "$(USE_PERLCRT)" != "define" -LIBC = msvcrt.lib -.ELSE -LIBC = PerlCRT.lib -.ENDIF - -PERLEXE_RES = -PERLDLL_RES = - -.IF "$(CFG)" == "Debug" -.IF "$(CCTYPE)" == "MSVC20" -OPTIMIZE = -Od -MD -Z7 -DDEBUGGING -LINK_DBG = -debug -pdb:none -.ELSE -# -Zi requires .pdb file(s) -#OPTIMIZE = -Od -MD -Zi -DDEBUGGING -#LINK_DBG = -debug -OPTIMIZE = -O1 -MD -Z7 -DDEBUGGING -LINK_DBG = -debug -debugtype:both -pdb:none -.ENDIF -.ELSE -.IF "$(CFG)" == "Optimize" -# -O1 yields smaller code, which turns out to be faster than -O2 -#OPTIMIZE = -O2 -MD -DNDEBUG -OPTIMIZE = -O1 -MD -DNDEBUG -.ELSE -OPTIMIZE = -Od -MD -DNDEBUG -.ENDIF -LINK_DBG = -release -.ENDIF - -LIBBASEFILES = $(CRYPT_LIB) \ - oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \ - comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \ - netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib \ - version.lib odbc32.lib odbccp32.lib - -# we add LIBC here, since we may be using PerlCRT.dll -LIBFILES = $(LIBBASEFILES) $(LIBC) - -CFLAGS = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \ - $(PCHFLAGS) $(OPTIMIZE) -LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \ - -libpath:"$(INST_COREDIR)" \ - -machine:$(PROCESSOR_ARCHITECTURE) -OBJOUT_FLAG = -Fo -EXEOUT_FLAG = -Fe -LIBOUT_FLAG = /out: - -.IF "$(USE_PERLCRT)" != "define" -BUILDOPT += -DPERL_MSVCRT_READFIX -.ENDIF - -.ENDIF - -.IF "$(USE_OBJECT)" == "define" -OPTIMIZE += $(CXX_FLAG) -BUILDOPT += -DPERL_OBJECT -.ENDIF - -CFLAGS_O = $(CFLAGS) $(BUILDOPT) - -# used to allow local linking flags that are not propogated into Config.pm, -# currently unused -# -- BKS, 12-12-1999 -PRIV_LINK_FLAGS *= -BLINK_FLAGS = $(PRIV_LINK_FLAGS) $(LINK_FLAGS) - -#################### do not edit below this line ####################### -############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ############## - -o *= .obj -a *= .lib - -LKPRE = INPUT ( -LKPOST = ) - -# -# Rules -# - -.SUFFIXES : .c .i $(o) .dll $(a) .exe .rc .res - -.c$(o): - $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $< - -.c.i: - $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) -E $< >$@ - -.y.c: - $(NOOP) - -$(o).dll: -.IF "$(CCTYPE)" == "BORLAND" - $(LINK32) -Tpd -ap $(BLINK_FLAGS) c0d32$(o) $<,$@,,$(LIBFILES),$(*B).def - $(IMPLIB) $(*B).lib $@ -.ELIF "$(CCTYPE)" == "GCC" - $(LINK32) -o $@ $(BLINK_FLAGS) $< $(LIBFILES) - $(IMPLIB) --input-def $(*B).def --output-lib $(*B).a $@ -.ELSE - $(LINK32) -dll -subsystem:windows -implib:$(*B).lib -def:$(*B).def \ - -out:$@ $(BLINK_FLAGS) $(LIBFILES) $< $(LIBPERL) -.ENDIF - -.rc.res: - $(RSC) -i.. $< - -# -# various targets -MINIPERL = ..\miniperl.exe -MINIDIR = .\mini -PERLEXE = ..\perl.exe -WPERLEXE = ..\wperl.exe -GLOBEXE = ..\perlglob.exe -CONFIGPM = ..\lib\Config.pm -MINIMOD = ..\lib\ExtUtils\Miniperl.pm -X2P = ..\x2p\a2p.exe - -# Nominate a target which causes extensions to be re-built -# This used to be $(PERLEXE), but at worst it is the .dll that they depend -# on and really only the interface - i.e. the .def file used to export symbols -# from the .dll -PERLDEP = perldll.def - - -PL2BAT = bin\pl2bat.pl -GLOBBAT = bin\perlglob.bat - -UTILS = \ - ..\utils\h2ph \ - ..\utils\splain \ - ..\utils\dprofpp \ - ..\utils\perlbug \ - ..\utils\pl2pm \ - ..\utils\c2ph \ - ..\utils\h2xs \ - ..\utils\perldoc \ - ..\utils\perlcc \ - ..\utils\perlivp \ - ..\utils\libnetcfg \ - ..\pod\checkpods \ - ..\pod\pod2html \ - ..\pod\pod2latex \ - ..\pod\pod2man \ - ..\pod\pod2text \ - ..\pod\pod2usage \ - ..\pod\podchecker \ - ..\pod\podselect \ - ..\x2p\find2perl \ - ..\x2p\s2p \ - ..\lib\ExtUtils\xsubpp \ - bin\exetype.pl \ - bin\runperl.pl \ - bin\pl2bat.pl \ - bin\perlglob.pl \ - bin\search.pl - -.IF "$(CCTYPE)" == "BORLAND" - -CFGSH_TMPL = config.bc -CFGH_TMPL = config_H.bc - -.ELIF "$(CCTYPE)" == "GCC" - -CFGSH_TMPL = config.gc -CFGH_TMPL = config_H.gc -PERLIMPLIB = ..\libperl57$(a) - -.ELSE - -CFGSH_TMPL = config.vc -CFGH_TMPL = config_H.vc - -.ENDIF - -# makedef.pl must be updated if this changes, and this should normally -# only change when there is an incompatible revision of the public API. -# XXX so why did we change it from perl56 to perl57? -PERLIMPLIB *= ..\perl57$(a) -PERLDLL = ..\perl57.dll - -XCOPY = xcopy /f /r /i /d -RCOPY = xcopy /f /r /i /e /d -NOOP = @echo - -# -# filenames given to xsubpp must have forward slashes (since it puts -# full pathnames in #line strings) -XSUBPP = ..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp \ - -C++ -prototypes - -MICROCORE_SRC = \ - ..\av.c \ - ..\deb.c \ - ..\doio.c \ - ..\doop.c \ - ..\dump.c \ - ..\globals.c \ - ..\gv.c \ - ..\hv.c \ - ..\locale.c \ - ..\mg.c \ - ..\numeric.c \ - ..\op.c \ - ..\perl.c \ - ..\perlapi.c \ - ..\perly.c \ - ..\pp.c \ - ..\pp_ctl.c \ - ..\pp_hot.c \ - ..\pp_pack.c \ - ..\pp_sys.c \ - ..\regcomp.c \ - ..\regexec.c \ - ..\run.c \ - ..\scope.c \ - ..\sv.c \ - ..\taint.c \ - ..\toke.c \ - ..\universal.c \ - ..\utf8.c \ - ..\util.c \ - ..\xsutils.c - -EXTRACORE_SRC += perllib.c - -.IF "$(PERL_MALLOC)" == "define" -EXTRACORE_SRC += ..\malloc.c -.ENDIF - -.IF "$(USE_OBJECT)" != "define" -EXTRACORE_SRC += ..\perlio.c -.ENDIF - -WIN32_SRC = \ - .\win32.c \ - .\win32io.c \ - .\win32sck.c \ - .\win32thread.c - -.IF "$(CRYPT_SRC)" != "" -WIN32_SRC += .\$(CRYPT_SRC) -.ENDIF - -DLL_SRC = $(DYNALOADER).c - -X2P_SRC = \ - ..\x2p\a2p.c \ - ..\x2p\hash.c \ - ..\x2p\str.c \ - ..\x2p\util.c \ - ..\x2p\walk.c - -CORE_NOCFG_H = \ - ..\av.h \ - ..\cop.h \ - ..\cv.h \ - ..\dosish.h \ - ..\embed.h \ - ..\form.h \ - ..\gv.h \ - ..\handy.h \ - ..\hv.h \ - ..\iperlsys.h \ - ..\mg.h \ - ..\nostdio.h \ - ..\op.h \ - ..\opcode.h \ - ..\perl.h \ - ..\perlapi.h \ - ..\perlsdio.h \ - ..\perlsfio.h \ - ..\perly.h \ - ..\pp.h \ - ..\proto.h \ - ..\regexp.h \ - ..\scope.h \ - ..\sv.h \ - ..\thread.h \ - ..\unixish.h \ - ..\utf8.h \ - ..\util.h \ - ..\warnings.h \ - ..\XSUB.h \ - ..\EXTERN.h \ - ..\perlvars.h \ - ..\intrpvar.h \ - ..\thrdvar.h \ - .\include\dirent.h \ - .\include\netdb.h \ - .\include\sys\socket.h \ - .\win32.h - -CORE_H = $(CORE_NOCFG_H) .\config.h - -MICROCORE_OBJ = $(MICROCORE_SRC:db:+$(o)) -CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:db:+$(o)) -WIN32_OBJ = $(WIN32_SRC:db:+$(o)) -MINICORE_OBJ = $(MINIDIR)\{$(MICROCORE_OBJ:f) miniperlmain$(o) perlio$(o)} -MINIWIN32_OBJ = $(MINIDIR)\{$(WIN32_OBJ:f)} -MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ) -DLL_OBJ = $(DLL_SRC:db:+$(o)) -X2P_OBJ = $(X2P_SRC:db:+$(o)) - -PERLDLL_OBJ = $(CORE_OBJ) -PERLEXE_OBJ = perlmain$(o) - -PERLDLL_OBJ += $(WIN32_OBJ) $(DLL_OBJ) - -.IF "$(USE_SETARGV)" != "" -SETARGV_OBJ = setargv$(o) -.ENDIF - -DYNAMIC_EXT = Socket IO Fcntl Opcode SDBM_File POSIX attrs Thread B re \ - Data/Dumper Devel/Peek ByteLoader Devel/DProf File/Glob \ - Sys/Hostname Storable Filter/Util/Call Encode \ - Digest/MD5 PerlIO/Scalar MIME/Base64 Time/HiRes Time/Piece -STATIC_EXT = DynaLoader -NONXS_EXT = Errno - -DYNALOADER = $(EXTDIR)\DynaLoader\DynaLoader - -POD2HTML = $(PODDIR)\pod2html -POD2MAN = $(PODDIR)\pod2man -POD2LATEX = $(PODDIR)\pod2latex -POD2TEXT = $(PODDIR)\pod2text - -# vars must be separated by "\t+~\t+", since we're using the tempfile -# version of config_sh.pl (we were overflowing someone's buffer by -# trying to fit them all on the command line) -# -- BKS 10-17-1999 -CFG_VARS = \ - INST_DRV=$(INST_DRV) ~ \ - INST_TOP=$(INST_TOP:s/\/\\/) ~ \ - INST_VER=$(INST_VER:s/\/\\/) ~ \ - INST_ARCH=$(INST_ARCH) ~ \ - archname=$(ARCHNAME) ~ \ - cc=$(CC) ~ \ - ld=$(LINK32) ~ \ - ccflags=$(OPTIMIZE) $(DEFINES) $(BUILDOPT) ~ \ - cf_email=$(EMAIL) ~ \ - d_crypt=$(D_CRYPT) ~ \ - d_mymalloc=$(PERL_MALLOC) ~ \ - libs=$(LIBFILES:f) ~ \ - incpath=$(CCINCDIR:s/\/\\/) ~ \ - libperl=$(PERLIMPLIB:f) ~ \ - libpth=$(CCLIBDIR:s/\/\\/);$(EXTRALIBDIRS:s/\/\\/) ~ \ - libc=$(LIBC) ~ \ - make=dmake ~ \ - _o=$(o) obj_ext=$(o) ~ \ - _a=$(a) lib_ext=$(a) ~ \ - static_ext=$(STATIC_EXT) ~ \ - use5005threads=$(USE_5005THREADS) ~ \ - useithreads=$(USE_ITHREADS) ~ \ - usethreads=$(USE_5005THREADS) ~ \ - usemultiplicity=$(USE_MULTI) ~ \ - useperlio=$(USE_PERLIO) ~ \ - LINK_FLAGS=$(LINK_FLAGS:s/\/\\/) ~ \ - optimize=$(OPTIMIZE) - -# -# set up targets varying between Win95 and WinNT builds -# - -.IF "$(IS_WIN95)" == "define" -MK2 = .\makefile.95 -RIGHTMAKE = __switch_makefiles -NOOP = @rem -.ELSE -MK2 = __not_needed -RIGHTMAKE = -.ENDIF - -# -# Top targets -# - -all : .\config.h $(GLOBEXE) $(MINIPERL) $(MK2) \ - $(RIGHTMAKE) $(MINIMOD) $(CONFIGPM) $(PERLEXE) \ - $(X2P) Extensions - -$(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c - -#---------------------------------------------------------------- - -#-------------------- BEGIN Win95 SPECIFIC ---------------------- - -# this target is a jump-off point for Win95 -# 1. it switches to the Win95-specific makefile if it exists -# (__do_switch_makefiles) -# 2. it prints a message when the Win95-specific one finishes (__done) -# 3. it then kills this makefile by trying to make __no_such_target - -__switch_makefiles: __do_switch_makefiles __done __no_such_target - -__do_switch_makefiles: -.IF "$(NOTFIRST)" != "true" - if exist $(MK2) $(MAKE:s/-S//) -f $(MK2) $(MAKETARGETS) NOTFIRST=true -.ELSE - $(NOOP) -.ENDIF - -.IF "$(NOTFIRST)" != "true" -__done: - @echo Build process complete. Ignore any errors after this message. - @echo Run "dmake test" to test and "dmake install" to install - -.ELSE -# dummy targets for Win95-specific makefile - -__done: - $(NOOP) - -__no_such_target: - $(NOOP) - -.ENDIF - -# This target is used to generate the new makefile (.\makefile.95) for Win95 - -.\makefile.95: .\makefile.mk - $(MINIPERL) genmk95.pl makefile.mk $(MK2) - -#--------------------- END Win95 SPECIFIC --------------------- - -# a blank target for when builds don't need to do certain things -# this target added for Win95 port but used to keep the WinNT port able to -# use this file -__not_needed: - $(NOOP) - -$(GLOBEXE) : perlglob$(o) -.IF "$(CCTYPE)" == "BORLAND" - $(CC) -c -w -v -tWM -I"$(CCINCDIR)" perlglob.c - $(LINK32) -Tpe -ap $(BLINK_FLAGS) c0x32$(o) perlglob$(o) \ - "$(CCLIBDIR)\32BIT\wildargs$(o)",$@,,import32.lib cw32mt.lib, -.ELIF "$(CCTYPE)" == "GCC" - $(LINK32) $(BLINK_FLAGS) -mconsole -o $@ perlglob$(o) $(LIBFILES) -.ELSE - $(LINK32) $(BLINK_FLAGS) $(LIBFILES) -out:$@ -subsystem:$(SUBSYS) \ - perlglob$(o) setargv$(o) -.ENDIF - -perlglob$(o) : perlglob.c - -config.w32 : $(CFGSH_TMPL) - copy $(CFGSH_TMPL) config.w32 - -.\config.h : $(CFGH_TMPL) $(CORE_NOCFG_H) - -del /f config.h - copy $(CFGH_TMPL) config.h - -..\config.sh : config.w32 $(MINIPERL) config_sh.PL FindExt.pm - $(MINIPERL) -I..\lib config_sh.PL --cfgsh-option-file \ - $(mktmp $(CFG_VARS)) config.w32 > ..\config.sh - -# this target is for when changes to the main config.sh happen -# edit config.{b,v,g}c and make this target once for each supported -# compiler (e.g. `dmake CCTYPE=BORLAND regen_config_h`) -regen_config_h: - perl config_sh.PL --cfgsh-option-file $(mktmp $(CFG_VARS)) \ - $(CFGSH_TMPL) > ..\config.sh - -cd .. && del /f perl.exe - cd .. && perl configpm - -del /f $(CFGH_TMPL) - -mkdir $(COREDIR) - -perl -I..\lib config_h.PL "INST_VER=$(INST_VER)" - rename config.h $(CFGH_TMPL) - -$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl - cd .. && miniperl configpm - if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL) - $(XCOPY) ..\*.h $(COREDIR)\*.* - $(XCOPY) *.h $(COREDIR)\*.* - $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.* - $(RCOPY) include $(COREDIR)\*.* - $(MINIPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)" \ - || $(MAKE) $(MAKEMACROS) $(CONFIGPM) $(MAKEFILE) - -$(MINIPERL) : $(MINIDIR) $(MINI_OBJ) $(CRTIPMLIBS) -.IF "$(CCTYPE)" == "BORLAND" - $(LINK32) -Tpe -ap $(BLINK_FLAGS) \ - @$(mktmp c0x32$(o) $(MINI_OBJ:s,\,\\),$(@:s,\,\\),,$(LIBFILES),) -.ELIF "$(CCTYPE)" == "GCC" - $(LINK32) -v -mconsole -o $@ $(BLINK_FLAGS) \ - $(mktmp $(LKPRE) $(MINI_OBJ:s,\,\\) $(LIBFILES) $(LKPOST)) -.ELSE - $(LINK32) -subsystem:console -out:$@ \ - @$(mktmp $(BLINK_FLAGS) $(LIBFILES) $(MINI_OBJ:s,\,\\)) -.ENDIF - -$(MINIDIR) : - if not exist "$(MINIDIR)" mkdir "$(MINIDIR)" - -$(MINICORE_OBJ) : $(CORE_NOCFG_H) - $(CC) -c $(CFLAGS) -DPERL_EXTERNAL_GLOB $(OBJOUT_FLAG)$@ ..\$(*B).c - -$(MINIWIN32_OBJ) : $(CORE_NOCFG_H) - $(CC) -c $(CFLAGS) $(OBJOUT_FLAG)$@ $(*B).c - -# -DPERL_IMPLICIT_SYS needs C++ for perllib.c -# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s unless -# unless the .IF is true), so instead we use a .ELSE with the default. -# This is the only file that depends on perlhost.h, vmem.h, and vdir.h - -perllib$(o) : perllib.c .\perlhost.h .\vdir.h .\vmem.h -.IF "$(USE_IMP_SYS)$(USE_OBJECT)" == "defineundef" - $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c -.ELSE - $(CC) -c -I. $(CFLAGS_O) $(OBJOUT_FLAG)$@ perllib.c -.ENDIF - -# 1. we don't want to rebuild miniperl.exe when config.h changes -# 2. we don't want to rebuild miniperl.exe with non-default config.h -$(MINI_OBJ) : $(CORE_NOCFG_H) - -$(WIN32_OBJ) : $(CORE_H) -$(CORE_OBJ) : $(CORE_H) -$(DLL_OBJ) : $(CORE_H) -$(X2P_OBJ) : $(CORE_H) - -perldll.def : $(MINIPERL) $(CONFIGPM) ..\global.sym ..\pp.sym ..\makedef.pl - $(MINIPERL) -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) \ - $(BUILDOPT) CCTYPE=$(CCTYPE) > perldll.def - -$(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES) -.IF "$(CCTYPE)" == "BORLAND" - $(LINK32) -Tpd -ap $(BLINK_FLAGS) \ - @$(mktmp c0d32$(o) $(PERLDLL_OBJ:s,\,\\)\n \ - $@,\n \ - $(LIBFILES)\n \ - perldll.def\n) - $(IMPLIB) $*.lib $@ -.ELIF "$(CCTYPE)" == "GCC" - $(LINK32) -mdll -o $@ -Wl,--base-file -Wl,perl.base $(BLINK_FLAGS) \ - $(mktmp $(LKPRE) $(PERLDLL_OBJ:s,\,\\) $(LIBFILES) $(LKPOST)) - dlltool --output-lib $(PERLIMPLIB) \ - --dllname $(PERLDLL:b).dll \ - --def perldll.def \ - --base-file perl.base \ - --output-exp perl.exp - $(LINK32) -mdll -o $@ $(BLINK_FLAGS) \ - $(mktmp $(LKPRE) $(PERLDLL_OBJ:s,\,\\) $(LIBFILES) \ - perl.exp $(LKPOST)) -.ELSE - $(LINK32) -dll -def:perldll.def -out:$@ \ - @$(mktmp -base:0x28000000 $(BLINK_FLAGS) $(DELAYLOAD) $(LIBFILES) \ - $(PERLDLL_RES) $(PERLDLL_OBJ:s,\,\\)) -.ENDIF - $(XCOPY) $(PERLIMPLIB) $(COREDIR) - -$(MINIMOD) : $(MINIPERL) ..\minimod.pl - cd .. && miniperl minimod.pl > lib\ExtUtils\Miniperl.pm - -..\x2p\a2p$(o) : ..\x2p\a2p.c - $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\a2p.c - -..\x2p\hash$(o) : ..\x2p\hash.c - $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\hash.c - -..\x2p\str$(o) : ..\x2p\str.c - $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\str.c - -..\x2p\util$(o) : ..\x2p\util.c - $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\util.c - -..\x2p\walk$(o) : ..\x2p\walk.c - $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\walk.c - -$(X2P) : $(MINIPERL) $(X2P_OBJ) - $(MINIPERL) ..\x2p\find2perl.PL - $(MINIPERL) ..\x2p\s2p.PL -.IF "$(CCTYPE)" == "BORLAND" - $(LINK32) -Tpe -ap $(BLINK_FLAGS) \ - @$(mktmp c0x32$(o) $(X2P_OBJ:s,\,\\),$(@:s,\,\\),,$(LIBFILES),) -.ELIF "$(CCTYPE)" == "GCC" - $(LINK32) -v -o $@ $(BLINK_FLAGS) \ - $(mktmp $(LKPRE) $(X2P_OBJ:s,\,\\) $(LIBFILES) $(LKPOST)) -.ELSE - $(LINK32) -subsystem:console -out:$@ \ - @$(mktmp $(BLINK_FLAGS) $(LIBFILES) $(X2P_OBJ:s,\,\\)) -.ENDIF - -perlmain.c : runperl.c - copy runperl.c perlmain.c - -perlmain$(o) : perlmain.c - $(CC) $(CFLAGS_O) -UPERLDLL $(OBJOUT_FLAG)$@ -c perlmain.c - -$(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES) -.IF "$(CCTYPE)" == "BORLAND" - $(LINK32) -Tpe -ap $(BLINK_FLAGS) \ - @$(mktmp c0x32$(o) $(PERLEXE_OBJ:s,\,\\)\n \ - $(@:s,\,\\),\n \ - $(PERLIMPLIB) $(LIBFILES)\n) -.ELIF "$(CCTYPE)" == "GCC" - $(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \ - $(PERLEXE_OBJ) $(PERLIMPLIB) $(LIBFILES) -.ELSE - $(LINK32) -subsystem:console -out:$@ -stack:0x1000000 $(BLINK_FLAGS) \ - $(LIBFILES) $(PERLEXE_OBJ) $(SETARGV_OBJ) $(PERLIMPLIB) $(PERLEXE_RES) -.ENDIF - copy $(PERLEXE) $(WPERLEXE) - $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS - copy splittree.pl .. - $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR) - -$(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM) - if not exist $(AUTODIR) mkdir $(AUTODIR) - cd $(EXTDIR)\$(*B) && ..\$(MINIPERL) -I..\..\lib $(*B)_pm.PL - cd $(EXTDIR)\$(*B) && ..\$(MINIPERL) -I..\..\lib XSLoader_pm.PL - $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL) - $(XCOPY) $(EXTDIR)\$(*B)\XSLoader.pm $(LIBDIR)\$(NULL) - cd $(EXTDIR)\$(*B) && $(XSUBPP) dl_win32.xs > $(*B).c - $(XCOPY) $(EXTDIR)\$(*B)\dlutils.c . - -$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs - copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs - -#---------------------------------------------------------------------------------- -Extensions : buildext.pl $(PERLDEP) $(CONFIGPM) - $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) - -Extensions_clean : - -if exist $(MINIPERL) $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) clean - -#---------------------------------------------------------------------------------- - - -doc: $(PERLEXE) - $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=./html \ - --podpath=pod:lib:ext:utils --htmlroot="file://$(INST_HTML:s,:,|,)"\ - --libpod=perlfunc:perlguts:perlvar:perlrun:perlop --recurse - -utils: $(PERLEXE) $(X2P) - cd ..\utils && $(MAKE) PERL=$(MINIPERL) - copy ..\README.aix ..\pod\perlaix.pod - copy ..\README.amiga ..\pod\perlamiga.pod - copy ..\README.apollo ..\pod\perlapollo.pod - copy ..\README.beos ..\pod\perlbeos.pod - copy ..\README.bs2000 ..\pod\perlbs2000.pod - copy ..\README.ce ..\pod\perlce.pod - copy ..\README.cygwin ..\pod\perlcygwin.pod - copy ..\README.dgux ..\pod\perldgux.pod - copy ..\README.dos ..\pod\perldos.pod - copy ..\README.epoc ..\pod\perlepoc.pod - copy ..\README.hpux ..\pod\perlhpux.pod - copy ..\README.hurd ..\pod\perlhurd.pod - copy ..\README.machten ..\pod\perlmachten.pod - copy ..\README.macos ..\pod\perlmacos.pod - copy ..\README.mint ..\pod\perlmint.pod - copy ..\README.mpeix ..\pod\perlmpeix.pod - copy ..\README.netware ..\pod\perlnetware.pod - copy ..\README.os2 ..\pod\perlos2.pod - copy ..\README.os390 ..\pod\perlos390.pod - copy ..\README.plan9 ..\pod\perlplan9.pod - copy ..\README.qnx ..\pod\perlqnx.pod - copy ..\README.solaris ..\pod\perlsolaris.pod - copy ..\README.tru64 ..\pod\perltru64.pod - copy ..\README.uts ..\pod\perluts.pod - copy ..\README.vmesa ..\pod\perlvmesa.pod - copy ..\vms\perlvms.pod ..\pod\perlvms.pod - copy ..\README.vos ..\pod\perlvos.pod - copy ..\README.win32 ..\pod\perlwin32.pod - cd ..\pod && $(MAKE) -f ..\win32\pod.mak converters - cd ..\lib && $(PERLEXE) lib_pm.PL - $(PERLEXE) $(PL2BAT) $(UTILS) - -distclean: clean - -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \ - $(PERLIMPLIB) ..\miniperl$(a) $(MINIMOD) - -del /f *.def *.map - -del /f $(EXTDIR)\DynaLoader\dl_win32.xs - -del /f $(LIBDIR)\.exists $(LIBDIR)\attrs.pm $(LIBDIR)\DynaLoader.pm - -del /f $(LIBDIR)\XSLoader.pm - -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm - -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm $(LIBDIR)\Thread.pm - -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm - -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm - -del /f $(LIBDIR)\Data\Dumper.pm $(LIBDIR)\ByteLoader.pm - -del /f $(LIBDIR)\PerlIO\Scalar.pm - -del /f $(LIBDIR)\Devel\Peek.pm $(LIBDIR)\Devel\DProf.pm - -del /f $(LIBDIR)\File\Glob.pm - -del /f $(LIBDIR)\Storable.pm - -del /f $(LIBDIR)\Filter\Util\Call.pm - -del /f $(LIBDIR)\Digest\MD5.pm - -del /f $(LIBDIR)\MIME\Base64.pm - -del /f $(LIBDIR)\MIME\QuotedPrint.pm - -del /f $(LIBDIR)\Time\HiRes.pm - -del /f $(LIBDIR)\List\Util.pm - -del /f $(LIBDIR)\Scalar\Util.pm - -del /f $(LIBDIR)\Time\Piece.pm - -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO || rmdir /s $(LIBDIR)\IO - -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread || rmdir /s $(LIBDIR)\Thread - -if exist $(LIBDIR)\B rmdir /s /q $(LIBDIR)\B || rmdir /s $(LIBDIR)\B - -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data || rmdir /s $(LIBDIR)\Data - -if exist $(LIBDIR)\Filter\Util\Call rmdir /s /q $(LIBDIR)\Filter\Util\Call || rmdir /s $(LIBDIR)\Filter - -if exist $(LIBDIR)\Filter\Util rmdir /s /q $(LIBDIR)\Filter\Util || rmdir /s $(LIBDIR)\Filter - -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest || rmdir /s $(LIBDIR)\Digest - -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME || rmdir /s $(LIBDIR)\MIME - -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List || rmdir /s $(LIBDIR)\List - -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar || rmdir /s $(LIBDIR)\Scalar - -cd $(PODDIR) && del /f *.html *.bat checkpods \ - perlaix.pod perlamiga.pod perlapollo.pod \ - perlbeos.pod perlbs2000.pod perlce.pod perlcygwin.pod perldgux.pod \ - perldos.pod perlepoc.pod perlhpux.pod perlhurd.pod \ - perlmachten.pod perlmint.pod \ - perlmacos.pod perlmpeix.pod perlnetware.pod \ - perlos2.pod perlos390.pod \ - perlplan9.pod perlqnx.pod \ - perlsolaris.pod perltru64.pod perluts.pod \ - perlvmesa.pod perlvms.pod perlvos.pod \ - perlwin32.pod pod2html pod2latex pod2man pod2text pod2usage \ - podchecker podselect - -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc \ - perlivp dprofpp *.bat - -cd ..\x2p && del /f find2perl s2p *.bat - -del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c config.h.new - -del /f $(CONFIGPM) - -del /f bin\*.bat - -cd $(EXTDIR) && del /s *$(a) *.def *.map *.pdb *.bs Makefile *$(o) \ - pm_to_blib - -if exist $(AUTODIR) rmdir /s /q $(AUTODIR) || rmdir /s $(AUTODIR) - -if exist $(COREDIR) rmdir /s /q $(COREDIR) || rmdir /s $(COREDIR) - -install : all installbare installhtml - -installbare : $(RIGHTMAKE) utils - $(PERLEXE) ..\installperl - if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\*.* - $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.* - $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.* - -installhtml : doc - $(RCOPY) html\*.* $(INST_HTML)\*.* - -inst_lib : $(CONFIGPM) - copy splittree.pl .. - $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR) - $(RCOPY) ..\lib $(INST_LIB)\*.* - -minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) utils - $(XCOPY) $(MINIPERL) ..\t\perl.exe -.IF "$(CCTYPE)" == "BORLAND" - $(XCOPY) $(GLOBBAT) ..\t\$(NULL) -.ELSE - $(XCOPY) $(GLOBEXE) ..\t\$(NULL) -.ENDIF - attrib -r ..\t\*.* - copy test ..\t - cd ..\t && \ - $(MINIPERL) -I..\lib test base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t - -test-prep : all utils - $(XCOPY) $(PERLEXE) ..\t\$(NULL) - $(XCOPY) $(PERLDLL) ..\t\$(NULL) -.IF "$(CCTYPE)" == "BORLAND" - $(XCOPY) $(GLOBBAT) ..\t\$(NULL) -.ELSE - $(XCOPY) $(GLOBEXE) ..\t\$(NULL) -.ENDIF - -test : $(RIGHTMAKE) test-prep - cd ..\t && $(PERLEXE) -I..\lib harness - -test-notty : test-prep - set PERL_SKIP_TTY_TEST=1 && \ - cd ..\t && $(PERLEXE) -I.\lib harness - -test-wide : test-prep - set HARNESS_PERL_SWITCHES=-C && \ - cd ..\t && $(PERLEXE) -I..\lib harness - -test-wide-notty : test-prep - set PERL_SKIP_TTY_TEST=1 && \ - set HARNESS_PERL_SWITCHES=-C && \ - cd ..\t && $(PERLEXE) -I..\lib harness - -clean : Extensions_clean - -@erase miniperlmain$(o) - -@erase $(MINIPERL) - -@erase perlglob$(o) - -@erase perlmain$(o) - -@erase config.w32 - -@erase /f config.h - -@erase $(GLOBEXE) - -@erase $(PERLEXE) - -@erase $(WPERLEXE) - -@erase $(PERLDLL) - -@erase $(CORE_OBJ) - -if exist $(MINIDIR) rmdir /s /q $(MINIDIR) || rmdir /s $(MINIDIR) - -@erase $(WIN32_OBJ) - -@erase $(DLL_OBJ) - -@erase $(X2P_OBJ) - -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp *.res - -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat - -@erase ..\x2p\*.exe ..\x2p\*.bat - -@erase *.ilk - -@erase *.pdb - -# Handy way to run perlbug -ok without having to install and run the -# installed perlbug. We don't re-run the tests here - we trust the user. -# Please *don't* use this unless all tests pass. -# If you want to report test failures, use "dmake nok" instead. -ok: utils - $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)" - -okfile: utils - $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok - -nok: utils - $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)" - -nokfile: utils - $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok +#
+# Makefile to build perl on Windows NT using DMAKE.
+# Supported compilers:
+# Visual C++ 2.0 thro 6.0
+# Borland C++ 5.02
+# Mingw32 with gcc-2.95.2 or better **experimental**
+#
+# This is set up to build a perl.exe that runs off a shared library
+# (perl57.dll). Also makes individual DLLs for the XS extensions.
+#
+
+##
+## Make sure you read README.win32 *before* you mess with anything here!
+##
+
+##
+## Build configuration. Edit the values below to suit your needs.
+##
+
+#
+# Set these to wherever you want "dmake install" to put your
+# newly built perl.
+#
+INST_DRV *= c:
+INST_TOP *= $(INST_DRV)\perl
+
+#
+# Comment this out if you DON'T want your perl installation to be versioned.
+# This means that the new installation will overwrite any files from the
+# old installation at the same INST_TOP location. Leaving it enabled is
+# the safest route, as perl adds the extra version directory to all the
+# locations it installs files to. If you disable it, an alternative
+# versioned installation can be obtained by setting INST_TOP above to a
+# path that includes an arbitrary version string.
+#
+INST_VER *= \5.7.2
+
+#
+# Comment this out if you DON'T want your perl installation to have
+# architecture specific components. This means that architecture-
+# specific files will be installed along with the architecture-neutral
+# files. Leaving it enabled is safer and more flexible, in case you
+# want to build multiple flavors of perl and install them together in
+# the same location. Commenting it out gives you a simpler
+# installation that is easier to understand for beginners.
+#
+INST_ARCH *= \$(ARCHNAME)
+
+#
+# uncomment to enable multiple interpreters. This is need for fork()
+# emulation.
+#
+USE_MULTI *= define
+
+#
+# Beginnings of interpreter cloning/threads; still very incomplete.
+# This should be enabled to get the fork() emulation. This needs
+# USE_MULTI as well.
+#
+USE_ITHREADS *= define
+
+#
+# uncomment to enable the implicit "host" layer for all system calls
+# made by perl. This needs USE_MULTI above. This is also needed to
+# get fork().
+#
+USE_IMP_SYS *= define
+
+#
+# uncomment to enable the experimental PerlIO I/O subsystem.
+USE_PERLIO = define
+
+#
+# WARNING! This option is deprecated and will eventually go away (enable
+# USE_ITHREADS instead).
+#
+# uncomment to enable threads-capabilities. This is incompatible with
+# USE_ITHREADS, and is only here for people who may have come to rely
+# on the experimental Thread support that was in 5.005.
+#
+#USE_5005THREADS *= define
+
+#
+# WARNING! This option is deprecated and will eventually go away (enable
+# USE_MULTI instead).
+#
+# uncomment next line if you want to use the PERL_OBJECT build option.
+# DO NOT ENABLE unless you have legacy code that relies on the C++
+# CPerlObj class that was available in 5.005. This cannot be enabled
+# if you ask for USE_5005THREADS above.
+#
+#USE_OBJECT *= define
+
+#
+# uncomment exactly one of the following
+#
+# Visual C++ 2.x
+#CCTYPE *= MSVC20
+# Visual C++ > 2.x and < 6.x
+#CCTYPE *= MSVC
+# Visual C++ >= 6.x
+CCTYPE *= MSVC60
+# Borland 5.02 or later
+#CCTYPE *= BORLAND
+# mingw32+gcc-2.95.2 or better
+#CCTYPE *= GCC
+
+#
+# uncomment this if your Borland compiler is older than v5.4.
+BCCOLD = define
+#
+# uncomment this if you want to use Borland's VCL as your CRT
+#BCCVCL = define
+
+#
+# uncomment this if you are compiling under Windows 95/98 and command.com
+# (not needed if you're running under 4DOS/NT 6.01 or later)
+#IS_WIN95 *= define
+
+#
+# uncomment next line if you want debug version of perl (big,slow)
+# If not enabled, we automatically try to use maximum optimization
+# with all compilers that are known to have a working optimizer.
+#
+CFG *= Debug
+
+#
+# uncomment to enable use of PerlCRT.DLL when using the Visual C compiler.
+# It has patches that fix known bugs in older versions of MSVCRT.DLL.
+# This currently requires VC 5.0 with Service Pack 3 or later.
+# Get it from CPAN at http://www.perl.com/CPAN/authors/id/D/DO/DOUGL/
+# and follow the directions in the package to install.
+#
+# Not recommended if you have VC 6.x and you're not running Windows 9x.
+#
+#USE_PERLCRT *= define
+
+#
+# uncomment to enable linking with setargv.obj under the Visual C
+# compiler. Setting this options enables perl to expand wildcards in
+# arguments, but it may be harder to use alternate methods like
+# File::DosGlob that are more powerful. This option is supported only with
+# Visual C.
+#
+#USE_SETARGV *= define
+
+#
+# if you have the source for des_fcrypt(), uncomment this and make sure the
+# file exists (see README.win32). File should be located in the same
+# directory as this file.
+#
+#CRYPT_SRC *= fcrypt.c
+
+#
+# if you didn't set CRYPT_SRC and if you have des_fcrypt() available in a
+# library, uncomment this, and make sure the library exists (see README.win32)
+# Specify the full pathname of the library.
+#
+#CRYPT_LIB *= fcrypt.lib
+
+#
+# set this if you wish to use perl's malloc
+# WARNING: Turning this on/off WILL break binary compatibility with extensions
+# you may have compiled with/without it. Be prepared to recompile all
+# extensions if you change the default. Currently, this cannot be enabled
+# if you ask for USE_IMP_SYS above.
+#
+#PERL_MALLOC *= define
+
+#
+# set the install locations of the compiler include/libraries
+# Running VCVARS32.BAT is *required* when using Visual C.
+# Some versions of Visual C don't define MSVCDIR in the environment,
+# so you may have to set CCHOME explicitly (spaces in the path name should
+# not be quoted)
+#
+#CCHOME *= F:\borland\bc5
+CCHOME *= $(MSVCDIR)
+#CCHOME *= c:\gcc-2.95.2
+CCINCDIR *= $(CCHOME)\include
+CCLIBDIR *= $(CCHOME)\lib
+
+#
+# Additional compiler flags can be specified here.
+#
+
+#
+# This should normally be disabled. Adding -DPERL_POLLUTE enables support
+# for old symbols by default, at the expense of extreme pollution. You most
+# probably just want to build modules that won't compile with
+# perl Makefile.PL POLLUTE=1
+# instead of enabling this. Please report such modules to the respective
+# authors.
+#
+#BUILDOPT += -DPERL_POLLUTE
+
+#
+# This should normally be disabled. Enabling it will disable the File::Glob
+# implementation of CORE::glob.
+#
+#BUILDOPT += -DPERL_EXTERNAL_GLOB
+
+#
+# This should normally be disabled. Enabling it causes perl to read scripts
+# in text mode (which is the 5.005 behavior) and will break ByteLoader.
+#BUILDOPT += -DPERL_TEXTMODE_SCRIPTS
+
+#
+# specify semicolon-separated list of extra directories that modules will
+# look for libraries (spaces in path names need not be quoted)
+#
+EXTRALIBDIRS *=
+
+#
+# set this to point to cmd.exe (only needed if you use some
+# alternate shell that doesn't grok cmd.exe style commands)
+#
+#SHELL *= g:\winnt\system32\cmd.exe
+
+#
+# set this to your email address (perl will guess a value from
+# from your loginname and your hostname, which may not be right)
+#
+#EMAIL *=
+
+##
+## Build configuration ends.
+##
+
+##################### CHANGE THESE ONLY IF YOU MUST #####################
+
+.IF "$(CRYPT_SRC)$(CRYPT_LIB)" == ""
+D_CRYPT = undef
+.ELSE
+D_CRYPT = define
+CRYPT_FLAG = -DHAVE_DES_FCRYPT
+.ENDIF
+
+.IF "$(USE_OBJECT)" == "define"
+PERL_MALLOC != undef
+USE_5005THREADS != undef
+USE_MULTI != undef
+USE_IMP_SYS != define
+.ENDIF
+
+PERL_MALLOC *= undef
+
+USE_5005THREADS *= undef
+
+.IF "$(USE_5005THREADS)" == "define"
+USE_ITHREADS != undef
+.ENDIF
+
+.IF "$(USE_IMP_SYS)" == "define"
+PERL_MALLOC != undef
+.ENDIF
+
+USE_MULTI *= undef
+USE_OBJECT *= undef
+USE_ITHREADS *= undef
+USE_IMP_SYS *= undef
+USE_PERLIO *= undef
+USE_PERLCRT *= undef
+
+.IF "$(USE_IMP_SYS)$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" == "defineundefundefundef"
+USE_MULTI != define
+.ENDIF
+
+.IF "$(USE_ITHREADS)$(USE_MULTI)$(USE_OBJECT)" == "defineundefundef"
+USE_MULTI != define
+USE_5005THREADS != undef
+.ENDIF
+
+.IF "$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" != "undefundefundef"
+BUILDOPT += -DPERL_IMPLICIT_CONTEXT
+.ENDIF
+
+.IF "$(USE_IMP_SYS)" != "undef"
+BUILDOPT += -DPERL_IMPLICIT_SYS
+.ENDIF
+
+.IMPORT .IGNORE : PROCESSOR_ARCHITECTURE
+
+PROCESSOR_ARCHITECTURE *= x86
+
+.IF "$(USE_OBJECT)" == "define"
+ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-object
+.ELIF "$(USE_5005THREADS)" == "define"
+ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-thread
+.ELIF "$(USE_MULTI)" == "define"
+ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-multi
+.ELSE
+.IF "$(USE_PERLIO)" == "define"
+ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-perlio
+.ELSE
+ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)
+.ENDIF
+ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)
+.ENDIF
+
+.IF "$(USE_ITHREADS)" == "define"
+ARCHNAME !:= $(ARCHNAME)-thread
+.ENDIF
+
+# Visual Studio 98 specific
+.IF "$(CCTYPE)" == "MSVC60"
+
+# VC 6.0 can load the socket dll on demand. Makes the test suite
+# run in about 10% less time.
+DELAYLOAD *= -DELAYLOAD:wsock32.dll -DELAYLOAD:shell32.dll delayimp.lib
+
+.IF "$(CFG)" == "Debug"
+.ELSE
+# VC 6.0 seems capable of compiling perl correctly with optimizations
+# enabled. Anything earlier fails tests.
+CFG *= Optimize
+.ENDIF
+.ENDIF
+
+ARCHDIR = ..\lib\$(ARCHNAME)
+COREDIR = ..\lib\CORE
+AUTODIR = ..\lib\auto
+LIBDIR = ..\lib
+EXTDIR = ..\ext
+PODDIR = ..\pod
+EXTUTILSDIR = $(LIBDIR)\ExtUtils
+
+#
+INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin
+INST_BIN = $(INST_SCRIPT)$(INST_ARCH)
+INST_LIB = $(INST_TOP)$(INST_VER)\lib
+INST_ARCHLIB = $(INST_LIB)$(INST_ARCH)
+INST_COREDIR = $(INST_ARCHLIB)\CORE
+INST_POD = $(INST_LIB)\pod
+INST_HTML = $(INST_TOP)$(INST_VER)\html
+
+#
+# Programs to compile, build .lib files and link
+#
+
+.USESHELL :
+
+.IF "$(CCTYPE)" == "BORLAND"
+
+CC = bcc32
+.IF "$(BCCOLD)" != "define"
+LINK32 = ilink32
+.ELSE
+LINK32 = tlink32
+.ENDIF
+LIB32 = tlib /P128
+IMPLIB = implib -c
+RSC = rc
+
+#
+# Options
+#
+INCLUDES = -I$(COREDIR) -I.\include -I. -I.. -I"$(CCINCDIR)"
+#PCHFLAGS = -H -Hc -H=c:\temp\bcmoduls.pch
+DEFINES = -DWIN32 $(CRYPT_FLAG)
+LOCDEFS = -DPERLDLL -DPERL_CORE
+SUBSYS = console
+CXX_FLAG = -P
+
+LIBC = cw32mti.lib
+LIBFILES = $(CRYPT_LIB) import32.lib $(LIBC)
+
+.IF "$(CFG)" == "Debug"
+OPTIMIZE = -v -D_RTLDLL -DDEBUGGING
+LINK_DBG = -v
+.ELSE
+OPTIMIZE = -O2 -D_RTLDLL
+LINK_DBG =
+.ENDIF
+
+CFLAGS = -w -g0 -tWM -tWD $(INCLUDES) $(DEFINES) $(LOCDEFS) \
+ $(PCHFLAGS) $(OPTIMIZE)
+LINK_FLAGS = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(CCLIBDIR)"
+OBJOUT_FLAG = -o
+EXEOUT_FLAG = -e
+LIBOUT_FLAG =
+.IF "$(BCCOLD)" != "define"
+LINK_FLAGS += -Gn
+DEFINES += -D_MT -D__USELOCALES__ -D_WIN32_WINNT=0x0410
+.END
+.IF "$(BCCVCL)" == "define"
+LIBC = cp32mti.lib vcl.lib vcl50.lib vclx50.lib vcle50.lib
+LINK_FLAGS += -L"$(CCLIBDIR)\Release"
+.END
+
+
+.ELIF "$(CCTYPE)" == "GCC"
+
+CC = gcc
+LINK32 = gcc
+LIB32 = ar rc
+IMPLIB = dlltool
+RSC = rc
+
+i = .i
+o = .o
+a = .a
+
+#
+# Options
+#
+
+INCLUDES = -I.\include -I. -I.. -I$(COREDIR)
+DEFINES = -DWIN32 $(CRYPT_FLAG)
+LOCDEFS = -DPERLDLL -DPERL_CORE
+SUBSYS = console
+CXX_FLAG = -xc++
+
+LIBC = -lmsvcrt
+
+# same libs as MSVC
+LIBFILES = $(CRYPT_LIB) $(LIBC) \
+ -lmoldname -lkernel32 -luser32 -lgdi32 \
+ -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 \
+ -loleaut32 -lnetapi32 -luuid -lwsock32 -lmpr \
+ -lwinmm -lversion -lodbc32
+
+.IF "$(CFG)" == "Debug"
+OPTIMIZE = -g -O2 -DDEBUGGING
+LINK_DBG = -g
+.ELSE
+OPTIMIZE = -g -O2
+LINK_DBG = -g
+.ENDIF
+
+CFLAGS = $(INCLUDES) $(DEFINES) $(LOCDEFS) $(OPTIMIZE)
+LINK_FLAGS = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(CCLIBDIR)"
+OBJOUT_FLAG = -o
+EXEOUT_FLAG = -o
+LIBOUT_FLAG =
+
+# NOTE: we assume that GCC uses MSVCRT.DLL
+BUILDOPT += -fno-strict-aliasing -DPERL_MSVCRT_READFIX
+
+.ELSE
+
+CC = cl
+LINK32 = link
+LIB32 = $(LINK32) -lib
+RSC = rc
+
+#
+# Options
+#
+
+INCLUDES = -I$(COREDIR) -I.\include -I. -I..
+#PCHFLAGS = -Fpc:\temp\vcmoduls.pch -YX
+DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG)
+LOCDEFS = -DPERLDLL -DPERL_CORE
+SUBSYS = console
+CXX_FLAG = -TP -GX
+
+.IF "$(USE_PERLCRT)" != "define"
+LIBC = msvcrt.lib
+.ELSE
+LIBC = PerlCRT.lib
+.ENDIF
+
+PERLEXE_RES =
+PERLDLL_RES =
+
+.IF "$(CFG)" == "Debug"
+.IF "$(CCTYPE)" == "MSVC20"
+OPTIMIZE = -Od -MD -Z7 -DDEBUGGING
+LINK_DBG = -debug -pdb:none
+.ELSE
+# -Zi requires .pdb file(s)
+#OPTIMIZE = -Od -MD -Zi -DDEBUGGING
+#LINK_DBG = -debug
+OPTIMIZE = -O1 -MD -Z7 -DDEBUGGING
+LINK_DBG = -debug -debugtype:both -pdb:none
+.ENDIF
+.ELSE
+.IF "$(CFG)" == "Optimize"
+# -O1 yields smaller code, which turns out to be faster than -O2
+#OPTIMIZE = -O2 -MD -DNDEBUG
+OPTIMIZE = -O1 -MD -DNDEBUG
+.ELSE
+OPTIMIZE = -Od -MD -DNDEBUG
+.ENDIF
+LINK_DBG = -release
+.ENDIF
+
+LIBBASEFILES = $(CRYPT_LIB) \
+ oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \
+ comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \
+ netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib \
+ version.lib odbc32.lib odbccp32.lib
+
+# we add LIBC here, since we may be using PerlCRT.dll
+LIBFILES = $(LIBBASEFILES) $(LIBC)
+
+CFLAGS = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \
+ $(PCHFLAGS) $(OPTIMIZE)
+LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \
+ -libpath:"$(INST_COREDIR)" \
+ -machine:$(PROCESSOR_ARCHITECTURE)
+OBJOUT_FLAG = -Fo
+EXEOUT_FLAG = -Fe
+LIBOUT_FLAG = /out:
+
+.IF "$(USE_PERLCRT)" != "define"
+BUILDOPT += -DPERL_MSVCRT_READFIX
+.ENDIF
+
+.ENDIF
+
+.IF "$(USE_OBJECT)" == "define"
+OPTIMIZE += $(CXX_FLAG)
+BUILDOPT += -DPERL_OBJECT
+.ENDIF
+
+CFLAGS_O = $(CFLAGS) $(BUILDOPT)
+
+# used to allow local linking flags that are not propogated into Config.pm,
+# currently unused
+# -- BKS, 12-12-1999
+PRIV_LINK_FLAGS *=
+BLINK_FLAGS = $(PRIV_LINK_FLAGS) $(LINK_FLAGS)
+
+#################### do not edit below this line #######################
+############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
+
+o *= .obj
+a *= .lib
+
+LKPRE = INPUT (
+LKPOST = )
+
+#
+# Rules
+#
+
+.SUFFIXES : .c .i $(o) .dll $(a) .exe .rc .res
+
+.c$(o):
+ $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<
+
+.c.i:
+ $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) -E $< >$@
+
+.y.c:
+ $(NOOP)
+
+$(o).dll:
+.IF "$(CCTYPE)" == "BORLAND"
+ $(LINK32) -Tpd -ap $(BLINK_FLAGS) c0d32$(o) $<,$@,,$(LIBFILES),$(*B).def
+ $(IMPLIB) $(*B).lib $@
+.ELIF "$(CCTYPE)" == "GCC"
+ $(LINK32) -o $@ $(BLINK_FLAGS) $< $(LIBFILES)
+ $(IMPLIB) --input-def $(*B).def --output-lib $(*B).a $@
+.ELSE
+ $(LINK32) -dll -subsystem:windows -implib:$(*B).lib -def:$(*B).def \
+ -out:$@ $(BLINK_FLAGS) $(LIBFILES) $< $(LIBPERL)
+.ENDIF
+
+.rc.res:
+ $(RSC) -i.. $<
+
+#
+# various targets
+MINIPERL = ..\miniperl.exe
+MINIDIR = .\mini
+PERLEXE = ..\perl.exe
+WPERLEXE = ..\wperl.exe
+GLOBEXE = ..\perlglob.exe
+CONFIGPM = ..\lib\Config.pm
+MINIMOD = ..\lib\ExtUtils\Miniperl.pm
+X2P = ..\x2p\a2p.exe
+
+# Nominate a target which causes extensions to be re-built
+# This used to be $(PERLEXE), but at worst it is the .dll that they depend
+# on and really only the interface - i.e. the .def file used to export symbols
+# from the .dll
+PERLDEP = perldll.def
+
+
+PL2BAT = bin\pl2bat.pl
+GLOBBAT = bin\perlglob.bat
+
+UTILS = \
+ ..\utils\h2ph \
+ ..\utils\splain \
+ ..\utils\dprofpp \
+ ..\utils\perlbug \
+ ..\utils\pl2pm \
+ ..\utils\c2ph \
+ ..\utils\h2xs \
+ ..\utils\perldoc \
+ ..\utils\perlcc \
+ ..\utils\perlivp \
+ ..\utils\libnetcfg \
+ ..\pod\checkpods \
+ ..\pod\pod2html \
+ ..\pod\pod2latex \
+ ..\pod\pod2man \
+ ..\pod\pod2text \
+ ..\pod\pod2usage \
+ ..\pod\podchecker \
+ ..\pod\podselect \
+ ..\x2p\find2perl \
+ ..\x2p\s2p \
+ ..\lib\ExtUtils\xsubpp \
+ bin\exetype.pl \
+ bin\runperl.pl \
+ bin\pl2bat.pl \
+ bin\perlglob.pl \
+ bin\search.pl
+
+.IF "$(CCTYPE)" == "BORLAND"
+
+CFGSH_TMPL = config.bc
+CFGH_TMPL = config_H.bc
+
+.ELIF "$(CCTYPE)" == "GCC"
+
+CFGSH_TMPL = config.gc
+CFGH_TMPL = config_H.gc
+PERLIMPLIB = ..\libperl57$(a)
+
+.ELSE
+
+CFGSH_TMPL = config.vc
+CFGH_TMPL = config_H.vc
+
+.ENDIF
+
+# makedef.pl must be updated if this changes, and this should normally
+# only change when there is an incompatible revision of the public API.
+# XXX so why did we change it from perl56 to perl57?
+PERLIMPLIB *= ..\perl57$(a)
+PERLDLL = ..\perl57.dll
+
+XCOPY = xcopy /f /r /i /d
+RCOPY = xcopy /f /r /i /e /d
+NOOP = @echo
+
+#
+# filenames given to xsubpp must have forward slashes (since it puts
+# full pathnames in #line strings)
+XSUBPP = ..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp \
+ -C++ -prototypes
+
+MICROCORE_SRC = \
+ ..\av.c \
+ ..\deb.c \
+ ..\doio.c \
+ ..\doop.c \
+ ..\dump.c \
+ ..\globals.c \
+ ..\gv.c \
+ ..\hv.c \
+ ..\locale.c \
+ ..\mg.c \
+ ..\numeric.c \
+ ..\op.c \
+ ..\perl.c \
+ ..\perlapi.c \
+ ..\perly.c \
+ ..\pp.c \
+ ..\pp_ctl.c \
+ ..\pp_hot.c \
+ ..\pp_pack.c \
+ ..\pp_sys.c \
+ ..\regcomp.c \
+ ..\regexec.c \
+ ..\run.c \
+ ..\scope.c \
+ ..\sv.c \
+ ..\taint.c \
+ ..\toke.c \
+ ..\universal.c \
+ ..\utf8.c \
+ ..\util.c \
+ ..\xsutils.c
+
+EXTRACORE_SRC += perllib.c
+
+.IF "$(PERL_MALLOC)" == "define"
+EXTRACORE_SRC += ..\malloc.c
+.ENDIF
+
+.IF "$(USE_OBJECT)" != "define"
+EXTRACORE_SRC += ..\perlio.c
+.ENDIF
+
+WIN32_SRC = \
+ .\win32.c \
+ .\win32io.c \
+ .\win32sck.c \
+ .\win32thread.c
+
+.IF "$(CRYPT_SRC)" != ""
+WIN32_SRC += .\$(CRYPT_SRC)
+.ENDIF
+
+DLL_SRC = $(DYNALOADER).c
+
+X2P_SRC = \
+ ..\x2p\a2p.c \
+ ..\x2p\hash.c \
+ ..\x2p\str.c \
+ ..\x2p\util.c \
+ ..\x2p\walk.c
+
+CORE_NOCFG_H = \
+ ..\av.h \
+ ..\cop.h \
+ ..\cv.h \
+ ..\dosish.h \
+ ..\embed.h \
+ ..\form.h \
+ ..\gv.h \
+ ..\handy.h \
+ ..\hv.h \
+ ..\iperlsys.h \
+ ..\mg.h \
+ ..\nostdio.h \
+ ..\op.h \
+ ..\opcode.h \
+ ..\perl.h \
+ ..\perlapi.h \
+ ..\perlsdio.h \
+ ..\perlsfio.h \
+ ..\perly.h \
+ ..\pp.h \
+ ..\proto.h \
+ ..\regexp.h \
+ ..\scope.h \
+ ..\sv.h \
+ ..\thread.h \
+ ..\unixish.h \
+ ..\utf8.h \
+ ..\util.h \
+ ..\warnings.h \
+ ..\XSUB.h \
+ ..\EXTERN.h \
+ ..\perlvars.h \
+ ..\intrpvar.h \
+ ..\thrdvar.h \
+ .\include\dirent.h \
+ .\include\netdb.h \
+ .\include\sys\socket.h \
+ .\win32.h
+
+CORE_H = $(CORE_NOCFG_H) .\config.h
+
+MICROCORE_OBJ = $(MICROCORE_SRC:db:+$(o))
+CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:db:+$(o))
+WIN32_OBJ = $(WIN32_SRC:db:+$(o))
+MINICORE_OBJ = $(MINIDIR)\{$(MICROCORE_OBJ:f) miniperlmain$(o) perlio$(o)}
+MINIWIN32_OBJ = $(MINIDIR)\{$(WIN32_OBJ:f)}
+MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
+DLL_OBJ = $(DLL_SRC:db:+$(o))
+X2P_OBJ = $(X2P_SRC:db:+$(o))
+
+PERLDLL_OBJ = $(CORE_OBJ)
+PERLEXE_OBJ = perlmain$(o)
+
+PERLDLL_OBJ += $(WIN32_OBJ) $(DLL_OBJ)
+
+.IF "$(USE_SETARGV)" != ""
+SETARGV_OBJ = setargv$(o)
+.ENDIF
+
+DYNAMIC_EXT = Socket IO Fcntl Opcode SDBM_File POSIX attrs Thread B re \
+ Data/Dumper Devel/Peek ByteLoader Devel/DProf File/Glob \
+ Sys/Hostname Storable Filter/Util/Call Encode \
+ Digest/MD5 PerlIO/Scalar MIME/Base64 Time/HiRes
+STATIC_EXT = DynaLoader
+NONXS_EXT = Errno
+
+DYNALOADER = $(EXTDIR)\DynaLoader\DynaLoader
+
+POD2HTML = $(PODDIR)\pod2html
+POD2MAN = $(PODDIR)\pod2man
+POD2LATEX = $(PODDIR)\pod2latex
+POD2TEXT = $(PODDIR)\pod2text
+
+# vars must be separated by "\t+~\t+", since we're using the tempfile
+# version of config_sh.pl (we were overflowing someone's buffer by
+# trying to fit them all on the command line)
+# -- BKS 10-17-1999
+CFG_VARS = \
+ INST_DRV=$(INST_DRV) ~ \
+ INST_TOP=$(INST_TOP:s/\/\\/) ~ \
+ INST_VER=$(INST_VER:s/\/\\/) ~ \
+ INST_ARCH=$(INST_ARCH) ~ \
+ archname=$(ARCHNAME) ~ \
+ cc=$(CC) ~ \
+ ld=$(LINK32) ~ \
+ ccflags=$(OPTIMIZE) $(DEFINES) $(BUILDOPT) ~ \
+ cf_email=$(EMAIL) ~ \
+ d_crypt=$(D_CRYPT) ~ \
+ d_mymalloc=$(PERL_MALLOC) ~ \
+ libs=$(LIBFILES:f) ~ \
+ incpath=$(CCINCDIR:s/\/\\/) ~ \
+ libperl=$(PERLIMPLIB:f) ~ \
+ libpth=$(CCLIBDIR:s/\/\\/);$(EXTRALIBDIRS:s/\/\\/) ~ \
+ libc=$(LIBC) ~ \
+ make=dmake ~ \
+ _o=$(o) obj_ext=$(o) ~ \
+ _a=$(a) lib_ext=$(a) ~ \
+ static_ext=$(STATIC_EXT) ~ \
+ use5005threads=$(USE_5005THREADS) ~ \
+ useithreads=$(USE_ITHREADS) ~ \
+ usethreads=$(USE_5005THREADS) ~ \
+ usemultiplicity=$(USE_MULTI) ~ \
+ useperlio=$(USE_PERLIO) ~ \
+ LINK_FLAGS=$(LINK_FLAGS:s/\/\\/) ~ \
+ optimize=$(OPTIMIZE)
+
+#
+# set up targets varying between Win95 and WinNT builds
+#
+
+.IF "$(IS_WIN95)" == "define"
+MK2 = .\makefile.95
+RIGHTMAKE = __switch_makefiles
+NOOP = @rem
+.ELSE
+MK2 = __not_needed
+RIGHTMAKE =
+.ENDIF
+
+#
+# Top targets
+#
+
+all : .\config.h $(GLOBEXE) $(MINIPERL) $(MK2) \
+ $(RIGHTMAKE) $(MINIMOD) $(CONFIGPM) $(PERLEXE) \
+ $(X2P) Extensions
+
+$(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c
+
+#----------------------------------------------------------------
+
+#-------------------- BEGIN Win95 SPECIFIC ----------------------
+
+# this target is a jump-off point for Win95
+# 1. it switches to the Win95-specific makefile if it exists
+# (__do_switch_makefiles)
+# 2. it prints a message when the Win95-specific one finishes (__done)
+# 3. it then kills this makefile by trying to make __no_such_target
+
+__switch_makefiles: __do_switch_makefiles __done __no_such_target
+
+__do_switch_makefiles:
+.IF "$(NOTFIRST)" != "true"
+ if exist $(MK2) $(MAKE:s/-S//) -f $(MK2) $(MAKETARGETS) NOTFIRST=true
+.ELSE
+ $(NOOP)
+.ENDIF
+
+.IF "$(NOTFIRST)" != "true"
+__done:
+ @echo Build process complete. Ignore any errors after this message.
+ @echo Run "dmake test" to test and "dmake install" to install
+
+.ELSE
+# dummy targets for Win95-specific makefile
+
+__done:
+ $(NOOP)
+
+__no_such_target:
+ $(NOOP)
+
+.ENDIF
+
+# This target is used to generate the new makefile (.\makefile.95) for Win95
+
+.\makefile.95: .\makefile.mk
+ $(MINIPERL) genmk95.pl makefile.mk $(MK2)
+
+#--------------------- END Win95 SPECIFIC ---------------------
+
+# a blank target for when builds don't need to do certain things
+# this target added for Win95 port but used to keep the WinNT port able to
+# use this file
+__not_needed:
+ $(NOOP)
+
+$(GLOBEXE) : perlglob$(o)
+.IF "$(CCTYPE)" == "BORLAND"
+ $(CC) -c -w -v -tWM -I"$(CCINCDIR)" perlglob.c
+ $(LINK32) -Tpe -ap $(BLINK_FLAGS) c0x32$(o) perlglob$(o) \
+ "$(CCLIBDIR)\32BIT\wildargs$(o)",$@,,import32.lib cw32mt.lib,
+.ELIF "$(CCTYPE)" == "GCC"
+ $(LINK32) $(BLINK_FLAGS) -mconsole -o $@ perlglob$(o) $(LIBFILES)
+.ELSE
+ $(LINK32) $(BLINK_FLAGS) $(LIBFILES) -out:$@ -subsystem:$(SUBSYS) \
+ perlglob$(o) setargv$(o)
+.ENDIF
+
+perlglob$(o) : perlglob.c
+
+config.w32 : $(CFGSH_TMPL)
+ copy $(CFGSH_TMPL) config.w32
+
+.\config.h : $(CFGH_TMPL) $(CORE_NOCFG_H)
+ -del /f config.h
+ copy $(CFGH_TMPL) config.h
+
+..\config.sh : config.w32 $(MINIPERL) config_sh.PL FindExt.pm
+ $(MINIPERL) -I..\lib config_sh.PL --cfgsh-option-file \
+ $(mktmp $(CFG_VARS)) config.w32 > ..\config.sh
+
+# this target is for when changes to the main config.sh happen
+# edit config.{b,v,g}c and make this target once for each supported
+# compiler (e.g. `dmake CCTYPE=BORLAND regen_config_h`)
+regen_config_h:
+ perl config_sh.PL --cfgsh-option-file $(mktmp $(CFG_VARS)) \
+ $(CFGSH_TMPL) > ..\config.sh
+ -cd .. && del /f perl.exe
+ cd .. && perl configpm
+ -del /f $(CFGH_TMPL)
+ -mkdir $(COREDIR)
+ -perl -I..\lib config_h.PL "INST_VER=$(INST_VER)"
+ rename config.h $(CFGH_TMPL)
+
+$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl
+ cd .. && miniperl configpm
+ if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL)
+ $(XCOPY) ..\*.h $(COREDIR)\*.*
+ $(XCOPY) *.h $(COREDIR)\*.*
+ $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.*
+ $(RCOPY) include $(COREDIR)\*.*
+ $(MINIPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)" \
+ || $(MAKE) $(MAKEMACROS) $(CONFIGPM) $(MAKEFILE)
+
+$(MINIPERL) : $(MINIDIR) $(MINI_OBJ) $(CRTIPMLIBS)
+.IF "$(CCTYPE)" == "BORLAND"
+ $(LINK32) -Tpe -ap $(BLINK_FLAGS) \
+ @$(mktmp c0x32$(o) $(MINI_OBJ:s,\,\\),$(@:s,\,\\),,$(LIBFILES),)
+.ELIF "$(CCTYPE)" == "GCC"
+ $(LINK32) -v -mconsole -o $@ $(BLINK_FLAGS) \
+ $(mktmp $(LKPRE) $(MINI_OBJ:s,\,\\) $(LIBFILES) $(LKPOST))
+.ELSE
+ $(LINK32) -subsystem:console -out:$@ \
+ @$(mktmp $(BLINK_FLAGS) $(LIBFILES) $(MINI_OBJ:s,\,\\))
+.ENDIF
+
+$(MINIDIR) :
+ if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"
+
+$(MINICORE_OBJ) : $(CORE_NOCFG_H)
+ $(CC) -c $(CFLAGS) -DPERL_EXTERNAL_GLOB $(OBJOUT_FLAG)$@ ..\$(*B).c
+
+$(MINIWIN32_OBJ) : $(CORE_NOCFG_H)
+ $(CC) -c $(CFLAGS) $(OBJOUT_FLAG)$@ $(*B).c
+
+# -DPERL_IMPLICIT_SYS needs C++ for perllib.c
+# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s unless
+# unless the .IF is true), so instead we use a .ELSE with the default.
+# This is the only file that depends on perlhost.h, vmem.h, and vdir.h
+
+perllib$(o) : perllib.c .\perlhost.h .\vdir.h .\vmem.h
+.IF "$(USE_IMP_SYS)$(USE_OBJECT)" == "defineundef"
+ $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c
+.ELSE
+ $(CC) -c -I. $(CFLAGS_O) $(OBJOUT_FLAG)$@ perllib.c
+.ENDIF
+
+# 1. we don't want to rebuild miniperl.exe when config.h changes
+# 2. we don't want to rebuild miniperl.exe with non-default config.h
+$(MINI_OBJ) : $(CORE_NOCFG_H)
+
+$(WIN32_OBJ) : $(CORE_H)
+$(CORE_OBJ) : $(CORE_H)
+$(DLL_OBJ) : $(CORE_H)
+$(X2P_OBJ) : $(CORE_H)
+
+perldll.def : $(MINIPERL) $(CONFIGPM) ..\global.sym ..\pp.sym ..\makedef.pl
+ $(MINIPERL) -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) \
+ $(BUILDOPT) CCTYPE=$(CCTYPE) > perldll.def
+
+$(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES)
+.IF "$(CCTYPE)" == "BORLAND"
+ $(LINK32) -Tpd -ap $(BLINK_FLAGS) \
+ @$(mktmp c0d32$(o) $(PERLDLL_OBJ:s,\,\\)\n \
+ $@,\n \
+ $(LIBFILES)\n \
+ perldll.def\n)
+ $(IMPLIB) $*.lib $@
+.ELIF "$(CCTYPE)" == "GCC"
+ $(LINK32) -mdll -o $@ -Wl,--base-file -Wl,perl.base $(BLINK_FLAGS) \
+ $(mktmp $(LKPRE) $(PERLDLL_OBJ:s,\,\\) $(LIBFILES) $(LKPOST))
+ dlltool --output-lib $(PERLIMPLIB) \
+ --dllname $(PERLDLL:b).dll \
+ --def perldll.def \
+ --base-file perl.base \
+ --output-exp perl.exp
+ $(LINK32) -mdll -o $@ $(BLINK_FLAGS) \
+ $(mktmp $(LKPRE) $(PERLDLL_OBJ:s,\,\\) $(LIBFILES) \
+ perl.exp $(LKPOST))
+.ELSE
+ $(LINK32) -dll -def:perldll.def -out:$@ \
+ @$(mktmp -base:0x28000000 $(BLINK_FLAGS) $(DELAYLOAD) $(LIBFILES) \
+ $(PERLDLL_RES) $(PERLDLL_OBJ:s,\,\\))
+.ENDIF
+ $(XCOPY) $(PERLIMPLIB) $(COREDIR)
+
+$(MINIMOD) : $(MINIPERL) ..\minimod.pl
+ cd .. && miniperl minimod.pl > lib\ExtUtils\Miniperl.pm
+
+..\x2p\a2p$(o) : ..\x2p\a2p.c
+ $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\a2p.c
+
+..\x2p\hash$(o) : ..\x2p\hash.c
+ $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\hash.c
+
+..\x2p\str$(o) : ..\x2p\str.c
+ $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\str.c
+
+..\x2p\util$(o) : ..\x2p\util.c
+ $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\util.c
+
+..\x2p\walk$(o) : ..\x2p\walk.c
+ $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\walk.c
+
+$(X2P) : $(MINIPERL) $(X2P_OBJ)
+ $(MINIPERL) ..\x2p\find2perl.PL
+ $(MINIPERL) ..\x2p\s2p.PL
+.IF "$(CCTYPE)" == "BORLAND"
+ $(LINK32) -Tpe -ap $(BLINK_FLAGS) \
+ @$(mktmp c0x32$(o) $(X2P_OBJ:s,\,\\),$(@:s,\,\\),,$(LIBFILES),)
+.ELIF "$(CCTYPE)" == "GCC"
+ $(LINK32) -v -o $@ $(BLINK_FLAGS) \
+ $(mktmp $(LKPRE) $(X2P_OBJ:s,\,\\) $(LIBFILES) $(LKPOST))
+.ELSE
+ $(LINK32) -subsystem:console -out:$@ \
+ @$(mktmp $(BLINK_FLAGS) $(LIBFILES) $(X2P_OBJ:s,\,\\))
+.ENDIF
+
+perlmain.c : runperl.c
+ copy runperl.c perlmain.c
+
+perlmain$(o) : perlmain.c
+ $(CC) $(CFLAGS_O) -UPERLDLL $(OBJOUT_FLAG)$@ -c perlmain.c
+
+$(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES)
+.IF "$(CCTYPE)" == "BORLAND"
+ $(LINK32) -Tpe -ap $(BLINK_FLAGS) \
+ @$(mktmp c0x32$(o) $(PERLEXE_OBJ:s,\,\\)\n \
+ $(@:s,\,\\),\n \
+ $(PERLIMPLIB) $(LIBFILES)\n)
+.ELIF "$(CCTYPE)" == "GCC"
+ $(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \
+ $(PERLEXE_OBJ) $(PERLIMPLIB) $(LIBFILES)
+.ELSE
+ $(LINK32) -subsystem:console -out:$@ -stack:0x1000000 $(BLINK_FLAGS) \
+ $(LIBFILES) $(PERLEXE_OBJ) $(SETARGV_OBJ) $(PERLIMPLIB) $(PERLEXE_RES)
+.ENDIF
+ copy $(PERLEXE) $(WPERLEXE)
+ $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS
+ copy splittree.pl ..
+ $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR)
+
+$(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)
+ if not exist $(AUTODIR) mkdir $(AUTODIR)
+ cd $(EXTDIR)\$(*B) && ..\$(MINIPERL) -I..\..\lib $(*B)_pm.PL
+ cd $(EXTDIR)\$(*B) && ..\$(MINIPERL) -I..\..\lib XSLoader_pm.PL
+ $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL)
+ $(XCOPY) $(EXTDIR)\$(*B)\XSLoader.pm $(LIBDIR)\$(NULL)
+ cd $(EXTDIR)\$(*B) && $(XSUBPP) dl_win32.xs > $(*B).c
+ $(XCOPY) $(EXTDIR)\$(*B)\dlutils.c .
+
+$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
+ copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
+
+#----------------------------------------------------------------------------------
+Extensions : buildext.pl $(PERLDEP) $(CONFIGPM)
+ $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR)
+
+Extensions_clean :
+ -if exist $(MINIPERL) $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) clean
+
+#----------------------------------------------------------------------------------
+
+
+doc: $(PERLEXE)
+ $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=./html \
+ --podpath=pod:lib:ext:utils --htmlroot="file://$(INST_HTML:s,:,|,)"\
+ --libpod=perlfunc:perlguts:perlvar:perlrun:perlop --recurse
+
+utils: $(PERLEXE) $(X2P)
+ cd ..\utils && $(MAKE) PERL=$(MINIPERL)
+ copy ..\README.aix ..\pod\perlaix.pod
+ copy ..\README.amiga ..\pod\perlamiga.pod
+ copy ..\README.apollo ..\pod\perlapollo.pod
+ copy ..\README.beos ..\pod\perlbeos.pod
+ copy ..\README.bs2000 ..\pod\perlbs2000.pod
+ copy ..\README.ce ..\pod\perlce.pod
+ copy ..\README.cygwin ..\pod\perlcygwin.pod
+ copy ..\README.dgux ..\pod\perldgux.pod
+ copy ..\README.dos ..\pod\perldos.pod
+ copy ..\README.epoc ..\pod\perlepoc.pod
+ copy ..\README.hpux ..\pod\perlhpux.pod
+ copy ..\README.hurd ..\pod\perlhurd.pod
+ copy ..\README.machten ..\pod\perlmachten.pod
+ copy ..\README.macos ..\pod\perlmacos.pod
+ copy ..\README.mint ..\pod\perlmint.pod
+ copy ..\README.mpeix ..\pod\perlmpeix.pod
+ copy ..\README.netware ..\pod\perlnetware.pod
+ copy ..\README.os2 ..\pod\perlos2.pod
+ copy ..\README.os390 ..\pod\perlos390.pod
+ copy ..\README.plan9 ..\pod\perlplan9.pod
+ copy ..\README.qnx ..\pod\perlqnx.pod
+ copy ..\README.solaris ..\pod\perlsolaris.pod
+ copy ..\README.tru64 ..\pod\perltru64.pod
+ copy ..\README.uts ..\pod\perluts.pod
+ copy ..\README.vmesa ..\pod\perlvmesa.pod
+ copy ..\vms\perlvms.pod ..\pod\perlvms.pod
+ copy ..\README.vos ..\pod\perlvos.pod
+ copy ..\README.win32 ..\pod\perlwin32.pod
+ cd ..\pod && $(MAKE) -f ..\win32\pod.mak converters
+ cd ..\lib && $(PERLEXE) lib_pm.PL
+ $(PERLEXE) $(PL2BAT) $(UTILS)
+
+distclean: clean
+ -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
+ $(PERLIMPLIB) ..\miniperl$(a) $(MINIMOD)
+ -del /f *.def *.map
+ -del /f $(EXTDIR)\DynaLoader\dl_win32.xs
+ -del /f $(LIBDIR)\.exists $(LIBDIR)\attrs.pm $(LIBDIR)\DynaLoader.pm
+ -del /f $(LIBDIR)\XSLoader.pm
+ -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm
+ -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm $(LIBDIR)\Thread.pm
+ -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm
+ -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm
+ -del /f $(LIBDIR)\Data\Dumper.pm $(LIBDIR)\ByteLoader.pm
+ -del /f $(LIBDIR)\PerlIO\Scalar.pm
+ -del /f $(LIBDIR)\Devel\Peek.pm $(LIBDIR)\Devel\DProf.pm
+ -del /f $(LIBDIR)\File\Glob.pm
+ -del /f $(LIBDIR)\Storable.pm
+ -del /f $(LIBDIR)\Filter\Util\Call.pm
+ -del /f $(LIBDIR)\Digest\MD5.pm
+ -del /f $(LIBDIR)\MIME\Base64.pm
+ -del /f $(LIBDIR)\MIME\QuotedPrint.pm
+ -del /f $(LIBDIR)\Time\HiRes.pm
+ -del /f $(LIBDIR)\List\Util.pm
+ -del /f $(LIBDIR)\Scalar\Util.pm
+ -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO || rmdir /s $(LIBDIR)\IO
+ -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread || rmdir /s $(LIBDIR)\Thread
+ -if exist $(LIBDIR)\B rmdir /s /q $(LIBDIR)\B || rmdir /s $(LIBDIR)\B
+ -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data || rmdir /s $(LIBDIR)\Data
+ -if exist $(LIBDIR)\Filter\Util\Call rmdir /s /q $(LIBDIR)\Filter\Util\Call || rmdir /s $(LIBDIR)\Filter
+ -if exist $(LIBDIR)\Filter\Util rmdir /s /q $(LIBDIR)\Filter\Util || rmdir /s $(LIBDIR)\Filter
+ -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest || rmdir /s $(LIBDIR)\Digest
+ -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME || rmdir /s $(LIBDIR)\MIME
+ -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List || rmdir /s $(LIBDIR)\List
+ -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar || rmdir /s $(LIBDIR)\Scalar
+ -cd $(PODDIR) && del /f *.html *.bat checkpods \
+ perlaix.pod perlamiga.pod perlapollo.pod \
+ perlbeos.pod perlbs2000.pod perlce.pod perlcygwin.pod perldgux.pod \
+ perldos.pod perlepoc.pod perlhpux.pod perlhurd.pod \
+ perlmachten.pod perlmint.pod \
+ perlmacos.pod perlmpeix.pod perlnetware.pod \
+ perlos2.pod perlos390.pod \
+ perlplan9.pod perlqnx.pod \
+ perlsolaris.pod perltru64.pod perluts.pod \
+ perlvmesa.pod perlvms.pod perlvos.pod \
+ perlwin32.pod pod2html pod2latex pod2man pod2text pod2usage \
+ podchecker podselect
+ -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc \
+ perlivp dprofpp *.bat
+ -cd ..\x2p && del /f find2perl s2p *.bat
+ -del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c config.h.new
+ -del /f $(CONFIGPM)
+ -del /f bin\*.bat
+ -cd $(EXTDIR) && del /s *$(a) *.def *.map *.pdb *.bs Makefile *$(o) \
+ pm_to_blib
+ -if exist $(AUTODIR) rmdir /s /q $(AUTODIR) || rmdir /s $(AUTODIR)
+ -if exist $(COREDIR) rmdir /s /q $(COREDIR) || rmdir /s $(COREDIR)
+
+install : all installbare installhtml
+
+installbare : $(RIGHTMAKE) utils
+ $(PERLEXE) ..\installperl
+ if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\*.*
+ $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.*
+ $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.*
+
+installhtml : doc
+ $(RCOPY) html\*.* $(INST_HTML)\*.*
+
+inst_lib : $(CONFIGPM)
+ copy splittree.pl ..
+ $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR)
+ $(RCOPY) ..\lib $(INST_LIB)\*.*
+
+minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) utils
+ $(XCOPY) $(MINIPERL) ..\t\perl.exe
+.IF "$(CCTYPE)" == "BORLAND"
+ $(XCOPY) $(GLOBBAT) ..\t\$(NULL)
+.ELSE
+ $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
+.ENDIF
+ attrib -r ..\t\*.*
+ copy test ..\t
+ cd ..\t && \
+ $(MINIPERL) -I..\lib test base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t
+
+test-prep : all utils
+ $(XCOPY) $(PERLEXE) ..\t\$(NULL)
+ $(XCOPY) $(PERLDLL) ..\t\$(NULL)
+.IF "$(CCTYPE)" == "BORLAND"
+ $(XCOPY) $(GLOBBAT) ..\t\$(NULL)
+.ELSE
+ $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
+.ENDIF
+
+test : $(RIGHTMAKE) test-prep
+ cd ..\t && $(PERLEXE) -I..\lib harness
+
+test-notty : test-prep
+ set PERL_SKIP_TTY_TEST=1 && \
+ cd ..\t && $(PERLEXE) -I.\lib harness
+
+test-wide : test-prep
+ set HARNESS_PERL_SWITCHES=-C && \
+ cd ..\t && $(PERLEXE) -I..\lib harness
+
+test-wide-notty : test-prep
+ set PERL_SKIP_TTY_TEST=1 && \
+ set HARNESS_PERL_SWITCHES=-C && \
+ cd ..\t && $(PERLEXE) -I..\lib harness
+
+clean : Extensions_clean
+ -@erase miniperlmain$(o)
+ -@erase $(MINIPERL)
+ -@erase perlglob$(o)
+ -@erase perlmain$(o)
+ -@erase config.w32
+ -@erase /f config.h
+ -@erase $(GLOBEXE)
+ -@erase $(PERLEXE)
+ -@erase $(WPERLEXE)
+ -@erase $(PERLDLL)
+ -@erase $(CORE_OBJ)
+ -if exist $(MINIDIR) rmdir /s /q $(MINIDIR) || rmdir /s $(MINIDIR)
+ -@erase $(WIN32_OBJ)
+ -@erase $(DLL_OBJ)
+ -@erase $(X2P_OBJ)
+ -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp *.res
+ -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat
+ -@erase ..\x2p\*.exe ..\x2p\*.bat
+ -@erase *.ilk
+ -@erase *.pdb
+
+# Handy way to run perlbug -ok without having to install and run the
+# installed perlbug. We don't re-run the tests here - we trust the user.
+# Please *don't* use this unless all tests pass.
+# If you want to report test failures, use "dmake nok" instead.
+ok: utils
+ $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)"
+
+okfile: utils
+ $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok
+
+nok: utils
+ $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)"
+
+nokfile: utils
+ $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok
|