*** installperl.orig Thu Jan 20 10:52:17 2005 --- installperl Thu Jan 20 10:59:36 2005 *************** *** 941,946 **** --- 941,950 ---- push @opts, shift @args; } + if( `uname` =~ /Darwin/ ) { + push @opts, "-urn"; + } + foreach my $file (@args) { if (-f $file) { if ($verbose) { *** configpm.orig 2004-06-04 11:50:51.000000000 +0100 --- configpm 2004-06-04 11:49:45.000000000 +0100 *************** *** 111,116 **** --- 111,132 ---- my $fetch_string = <<'EOT'; + # Replace Zeus paths + sub _subst_zeushome($) + { + my ( $value ) = @_; + return $value unless $value; + + # ZEUSPERLPREFIX is *only* to help out internal builds. + if (exists $ENV{ZEUSPERLPREFIX}) { + $value =~ s|/dev/null/zperl|$ENV{ZEUSPERLPREFIX}|; + } + if (exists $ENV{ZEUSHOME}) { + $value =~ s|/dev/null/|$ENV{ZEUSHOME}/|; + } + return $value; + } + # Search for it in the big string sub fetch_string { my($self, $key) = @_; *************** *** 150,155 **** --- 166,174 ---- eval "\$value = \"$value\""; } + # Zeus extensions + $value = _subst_zeushome( $value ); + # So we can say "if $Config{'foo'}". $value = undef if $value eq 'undef'; $self->{$key} = $value; # cache it *************** *** 374,379 **** --- 393,402 ---- } else { print CONFIG <<'ENDOFSET'; sub TIEHASH { + my $hash = $_[1]; + foreach my $key ( keys %$hash ) { + $hash->{$key} = _subst_zeushome( $hash->{$key} ); + } bless $_[1], $_[0]; } ENDOFSET *** perl.c.orig 2004-06-04 11:51:30.000000000 +0100 --- perl.c 2004-06-04 11:53:41.000000000 +0100 *************** *** 3043,3048 **** --- 3043,3097 ---- sv_setpvn(get_sv("/", TRUE), "\n", 1); } + /******************* + * Zeus Extensions + *******************/ + #define ZEUSHOME_SUBST "/dev/null/" + #define ZEUSPERLPREFIX_SUBST "/dev/null/zperl" + STATIC char * + S_get_zeushome(pTHX) + { + static char *zeushome = NULL; + static int zeushome_missing = 0; + + if (zeushome) + return zeushome; + + zeushome = PerlEnv_getenv("ZEUSHOME"); + if (zeushome) + zeushome = strdup(zeushome); + else { + /* Have a good guess. We live in $ZEUSHOME/{web,zperl}/bin. */ + char *zh_guess; + int zh_slashcount = 0; + zeushome = strdup(PL_origargv[0]); + for (zh_guess = strchr(zeushome, '\0') - 1; + zh_guess >= zeushome; --zh_guess) { + if (*zh_guess == '/') + ++zh_slashcount; + if (zh_slashcount == 3) + break; + } + if (zh_slashcount == 3) + *zh_guess = '\0'; + else { + free(zeushome); + zeushome = NULL; + } + } + + /* If we can't figure it out, warn, but only once. */ + if (!zeushome && !zeushome_missing && ckWARN(WARN_IO)) { + PerlIO_printf(Perl_error_log, + "$ZEUSHOME is not set.\n" + "It should point to the Zeus installation containing " + "the Perl distribution.\n"); + zeushome_missing = 1; + } + + return zeushome; + } + /* PSz 18 Nov 03 fdscript now global but do not change prototype */ STATIC void S_open_script(pTHX_ char *scriptname, bool dosearch, SV *sv) *************** *** 3128,3133 **** --- 3177,3183 ---- #else /* IAMSUID */ else if (PL_preprocess) { char *cpp_cfg = CPPSTDIN; + char *incdir = NULL; SV *cpp = newSVpvn("",0); SV *cmd = NEWSV(0,0); *************** *** 3139,3145 **** # ifndef VMS sv_catpvn(sv, "-I", 2); ! sv_catpv(sv,PRIVLIB_EXP); # endif DEBUG_P(PerlIO_printf(Perl_debug_log, --- 3189,3220 ---- # ifndef VMS sv_catpvn(sv, "-I", 2); ! ! if (!strncmp(PRIVLIB_EXP, ZEUSPERLPREFIX_SUBST, ! sizeof(ZEUSPERLPREFIX_SUBST) - 1)) { ! char *zeusperlprefix = PerlEnv_getenv("ZEUSPERLPREFIX"); ! if (zeusperlprefix) { ! incdir = (char*)malloc( strlen( zeusperlprefix ) + ! strlen( PRIVLIB_EXP ) + 1); ! strcpy( incdir, zeusperlprefix ); ! strcat( incdir, PRIVLIB_EXP + strlen( ZEUSPERLPREFIX_SUBST )); ! } ! } ! if (!strncmp(PRIVLIB_EXP, ZEUSHOME_SUBST, ! sizeof(ZEUSHOME_SUBST) - 1)) { ! char *zeushome = S_get_zeushome(aTHX); ! if (zeushome) { ! incdir = (char*)malloc( strlen( zeushome ) + ! strlen( PRIVLIB_EXP ) + 1); ! strcpy( incdir, zeushome ); ! strcat( incdir, PRIVLIB_EXP + strlen( ZEUSHOME_SUBST )); ! } ! } ! if (incdir) ! sv_catpv(sv,incdir); ! else ! sv_catpv(sv,PRIVLIB_EXP); ! free (incdir); # endif DEBUG_P(PerlIO_printf(Perl_debug_log, *************** *** 4396,4401 **** --- 4471,4497 ---- sv_catpv(libdir, ":"); #endif + /* Zeus - replace paths */ + if (!strncmp(SvPVX(libdir), ZEUSPERLPREFIX_SUBST, + sizeof(ZEUSPERLPREFIX_SUBST) - 1)) { + /* This is deliberately undocumented. It's here so that we can + * completely override Perl's prefix while building against it + * internally. + */ + char *zeusperlprefix = PerlEnv_getenv("ZEUSPERLPREFIX"); + if (zeusperlprefix) + sv_insert(libdir, 0, sizeof(ZEUSPERLPREFIX_SUBST) - 1, + zeusperlprefix, strlen(zeusperlprefix)); + } + if (!strncmp(SvPVX(libdir), ZEUSHOME_SUBST, + sizeof(ZEUSHOME_SUBST) - 1)) { + char *zeushome = S_get_zeushome(aTHX); + if (zeushome) + /* Don't write over the trailing slash. */ + sv_insert(libdir, 0, sizeof(ZEUSHOME_SUBST) - 2, + zeushome, strlen(zeushome)); + } + /* * BEFORE pushing libdir onto @INC we may first push version- and * archname-specific sub-directories.