# # Building Makefile for Embperl # # (C) 1997-1998 G.Richter (richter@dev.ecos.de) / ECOS # # use ExtUtils::MakeMaker; use Cwd ; use Config ; $win32 = ($Config{osname} =~ /win32/i) ; print "\nRunning on Win 32\n" if ($win32) ; sub MY::test_via_harness { my ($txt) = shift -> MM::test_via_harness (@_) ; $txt =~ s/PERL_DL_NONLAZY=1/PERL_DL_NONLAZY=0/ ; #$txt =~ s/\$\(FULLPERL\)/\$\(FULLPERL\) \-T / ; $txt =~ s/\$\(FULLPERL\)/SET PATH=\$\(PATH\)\;$EPHTTPDDLL\n\t\$\(FULLPERL\)/ if ($win32) ; return $txt ; } sub MY::test_via_script { my ($txt) = shift -> MM::test_via_script (@_) ; $txt =~ s/PERL_DL_NONLAZY=1/PERL_DL_NONLAZY=0/ ; #$txt =~ s/\$\(FULLPERL\)/\$\(FULLPERL\) \-T / ; $txt =~ s/\$\(FULLPERL\)/SET PATH=\$\(PATH\)\;$EPHTTPDDLL\n\t\$\(FULLPERL\)/ if ($win32) ; return $txt ; } sub MY::xs_c { my ($txt) = shift -> MM::xs_c (@_) ; $txt =~ s/\&\&/\n\t/ if ($win32) ; return $txt ; } ## ---------------------------------------------------------------------------- sub GetString { my ($prompt, $default) = @_ ; printf ("%s [%s]", $prompt, $default) ; chop ($_ = ) ; if (!/^\s*$/) {return $_ ;} else { if ($_ eq "") {return $default ;} else { return "" ; } } } ## ---------------------------------------------------------------------------- sub GetYesNo { my ($prompt, $default) = @_ ; my ($value) ; do { $value = lc (GetString ($prompt . "(y/n)", ($default?"y":"n"))) ; } until (($value cmp "j") == 0 || ($value cmp "y") == 0 || ($value cmp "n" ) == 0) ; return ($value cmp "n") != 0 ; } ## ---------------------------------------------------------------------------- # # Check if known config # $apache = 0 ; $b = 0 ; if (defined ($ARGV[0]) && ($ARGV[0] =~ /^\W/)) { $apache = 2 ; $b = 1 ; $apache_src = shift @ARGV ; } elsif (defined ($ENV{APACHE_SRC})) { $apache = 2 ; $b = 1 ; $apache_src = $ENV{APACHE_SRC} ; } if (!$apache && $apache_src eq '') { eval 'use Apache::MyConfig' ; if ($@ eq '') { $apache_src = $Apache::MyConfig::Setup{Apache_Src} ; } else { $apache_src = '' ; } } if (!$apache && $apache_src eq '') { eval 'do "test/conf/config.pl"' ; $apache_src = $EPAPACHESRC ; } $base = '..' ; $apache = GetYesNo ("Build with support for Apache mod_perl?", 'y') if (!$apache) ; if ($apache && $apache_src ne '') { if ($apache_src =~ /^(.*?)\/$/) { $apache_src = $1 ; } if ($apache_src =~ /^(.*?)\/main$/) { $apache_src = $1 ; } if ($apache_src =~ /^(.*?)\/include$/) { $apache_src = $1 ; } if (-e "$apache_src/httpd.h" || -e "$apache_src/main/httpd.h" || -e "$apache_src/include/httpd.h") { $b = GetYesNo ("Use $apache_src as Apache source", 'y') if (!$b) ; } } while ($apache && !$b) { print "Searching for Apache sources...\n" ; foreach $src_dir ($base, "$base/src", <$base/apache*/src>, <./src>) { print "Look at $src_dir\n" ; if (-e "$src_dir/httpd.h" || -e "$src_dir/main/httpd.h" || -e "$src_dir/include/httpd.h") { $b = GetYesNo ("Use $src_dir as Apache source", 'y') ; if ($b) { $apache_src = $src_dir ; last ; } } } if ($apache_src =~ /^(.*?)\/$/) { $apache_src = $1 ; } if ($apache_src =~ /^(.*?)\/main$/) { $apache_src = $1 ; } if ($apache_src =~ /^(.*?)\/include$/) { $apache_src = $1 ; } if (!$b) { $base = GetString ("Apache source not found, enter path name or q to quit", '') ; if ($base eq 'q') { $apache = 0 ; } else { $base =~ s/\//\\/g if ($win32) ; } } } if ($b && $apache && $apache_src ne '') { print "Will use $apache_src for Apache Headers\n" ; #### look in which subdir the include files resides #### if (-e "$apache_src/httpd.h") { $inc_dir = $apache_src ; } elsif (-e "$apache_src/main/httpd.h") { $inc_dir = "$apache_src/main" ; } elsif (-e "$apache_src/include/httpd.h") { $inc_dir = "$apache_src/include" ; } if ($win32) { $i = "-I. -I$inc_dir -I$apache_src/regex -I$apache_src/os/win32" ; $o = " $apache_src/CoreR/ApacheCore.lib" ; } else { $i = "-I$inc_dir -I$apache_src/regex -I$apache_src/os/unix" ; $o = '' ; } $d = "-DAPACHE" ; $EPAPACHE_SSL = -e "$apache_src/apache_ssl.c" ; $EPSTRONGHOLD = -e "$apache_src/mod_ssl.h" ; $i .= " -I$apache_src/../ssl/include" if ($EPSTRONGHOLD) ; $d .= " -DEPAPACHE_SSL" if ($EPAPACHE_SSL) ; $d .= " -DSTRONGHOLD" if ($EPSTRONGHOLD) ; } else { $apache = 0 ; print "Will build without mod_perl support\n" ; $i = '' ; $d = '' ; $o = '' ; } if ($win32 && $apache) { # borrowed from mod_perl local *FH; open FH, ">dirent.h" || die "can't write dirent.h $!"; print FH <import('prompt'); $mpdll = prompt("Where is your ApacheModulePerl.dll located ?", $mpdll); } die "Can't find ApacheModulePerl.dll!" unless -e $mpdll; } # # Check to see which user to use for httpd tests # $EPPATH = cwd ; $EPMODPERL = '' ; if ($b && $apache) { $EPPORT = 8529 ; if (!$win32) { $EPUSER = getpwuid($>) || $> ; $EPGROUP = getgrgid($)) || $) ; if ($EPUSER eq 'root') { my $nobody = (getpwnam('nobody'))[0] ; $EPUSER = $nobody if $nobody ; } if ($EPUSER eq 'root') { print "Cannot run test httpd as User $EPUSER\n" ; $EPUSER = GetString ("User to run httpd", 'nobody') ; $EPGROUP = GetString ("Group to run httpd", $EPGROUP) ; } $EPHTTPD = "$apache_src/httpd" ; $EPHTTPD = "$apache_src/httpsd" if (!-e $EPHTTPD && -e "$apache_src/httpsd") ; if (!-e $EPHTTPD) { $EPHTTPD = GetString ("Enter path and file to start as httpd", "$EPHTTPD") ; } } else { $EPHTTPD = "$apache_src/ApacheR/Apache.exe" ; $EPHTTPDDLL = "$apache_src/CoreR" ; if (!-e $EPHTTPD) { $EPHTTPD = "$apache_src/ApacheD/Apache.exe" ; $EPHTTPDDLL = "$apache_src/CoreD" ; } $EPMODPERL="LoadModule perl_module $mpdll" ; $EPUSER = 'www' ; # dummy value $EPGROUP = 'www' ; if (!-e $EPHTTPD) { $EPHTTPD = GetString ("Enter path and file to start as Apache.exe", "$EPHTTPD") ; } } if ($EPSTRONGHOLD) { my $conf = "$apache_src/../conf/httpd.conf"; if(-e $conf) { open FH, $conf; while() { if(/^StrongholdKey/) { chomp ; $EPSTRONGHOLDKEY = $_; last; } } close FH; } } else { $EPSTRONGHOLDKEY = '' ; } print "Test start $EPHTTPD\n" ; print "Test httpd will run as user $EPUSER and group $EPGROUP\n" if (!$win32) ; print "Test httpd will listen on port $EPPORT\n" ; print "Test will use $EPSTRONGHOLDKEY\n" if($EPSTRONGHOLDKEY) ; open FH, ">$EPPATH/test/conf/config.pl" or die "Cannot open $EPPATH/test/conf/config.pl" ; print FH "# This file is automaticly generated by Makefile.PL, do not edit\n" ; print FH "\$EPPATH='$EPPATH' ;\n" ; print FH "\$EPUSER='$EPUSER' ;\n" ; print FH "\$EPGROUP='$EPGROUP' ;\n" ; print FH "\$EPPORT=$EPPORT ;\n" ; print FH "\$EPHTTPD='$EPHTTPD' ;\n" ; print FH "\$EPHTTPDDLL='$EPHTTPDDLL' ;\n" ; print FH "\$EPWIN32='$win32' ;\n" ; print FH "\$EPAPACHESRC='$apache_src' ;\n" ; print FH "\$EPAPACHE_SSL='$EPAPACHE_SSL' ;\n" ; print FH "\$EPSTRONGHOLD='$EPSTRONGHOLD' ;\n" ; print FH "\$EPSTRONGHOLDKEY='$EPSTRONGHOLDKEY' ;\n" ; if ($win32) { print FH "\$EPMODPERL='$EPMODPERL';\n" ; print FH "\$EPNULL='nul';\n" ; } else { print FH "\$EPMODPERL='';\n" ; print FH "\$EPNULL='/dev/null';\n" ; } close FH ; } else { open FH, ">$EPPATH/test/conf/config.pl" or die "Cannot open $EPPATH/test/conf/config.pl" ; print FH "# This file is automaticly generated by Makefile.PL, do not edit\n" ; print FH "\$EPPATH='$EPPATH' ; \n" ; print FH "\$EPHTTPD='' ;\n" ; print FH "\$EPWIN32='$win32' ;\n" ; close FH ; } # # Change path to perl binary # @bins = ('embpexec.pl', 'embpexec.test.pl', 'embpexec.bat', 'embpexec.test.bat') ; foreach $f (@bins) { unlink "$f.org" ; rename $f, "$f.org" or die "Cannot rename $f to $f.org" ; open IN, "<$f.org" or die "Cannot open $f.org" ; open OUT, ">$f" or die "Cannot open $f" ; my $l = 1 ; while () { if ($l++ < 10) { s/^\#\!.*?perl.*?\s(.*?)/#!$Config{'perlpath'} $1/ ; s/^.*?perl.*?\s-x/$Config{'perlpath'} -x/ ; } print OUT $_ ; } close IN ; close OUT ; chmod 0755, $f or die "Cannot set executable $f" ; } WriteMakefile( 'NAME' => 'HTML::Embperl', 'VERSION_FROM' => 'Embperl.pm', # finds $VERSION 'OBJECT' => 'Embperl$(OBJ_EXT) epmain$(OBJ_EXT) epio$(OBJ_EXT) epchar$(OBJ_EXT) epcmd$(OBJ_EXT) eputil$(OBJ_EXT) epeval$(OBJ_EXT)' . $o, 'LIBS' => [''], 'DEFINE' => "$d \$(DEFS)", 'INC' => $i, 'clean' => { FILES => 'dirent.h' }, 'dist' => { COMPRESS => 'gzip', SUFFIX => 'gz'}, );