use ExtUtils::MakeMaker; $use_xs = (grep { $_ eq 'noxs' } @ARGV) == 0; #--- Subroutine to find the internal name of 'undef'. This is #--- sv_undef in older releases, PL_sv_undef in more recent releases. #--- Since many are still using the older releases, we take care of #--- it here. In the near future, this can be removed. sub undef_flag { if ($] < 5.005) { return '-DOLD_INTERNAL'; } else { return ''; } } if ($use_xs) { @perlonly = (); print "\n\n","*"x40,"\n"; print "Using Perl/XS implementation\n"; print "*"x40,"\n\n"; $infile = 'IBM390_pm_xsver'; $outfile = 'IBM390.pm'; } else { @perlonly = ( XS => {}, C => [] ); print "\n\n","*"x40,"\n"; print "Using Perl-only implementation\n"; print "*"x40,"\n\n"; $infile = 'IBM390_pm_perlver'; $outfile = 'IBM390.pm'; } open(IN, "d/$infile") or die "Cannot open d/$infile: $!"; open(OUT,">lib/Convert/$outfile") or die "Cannot open $outfile: $!"; while() { print OUT; } close(IN); open(IN, "d/IBM390_pm_common") or die "Cannot open d/IBM390_pm_common: $!"; while() { print OUT; } close(IN); close(OUT); $p_define = ''; #--- C code if ($use_xs) { @c_code = qw(IBM390lib.ccc IBM390lib.hhh); foreach $file (@c_code) { ($outfile = $file) =~ s/(ccc|hhh)/substr($1,0,1)/e; open(IN, "d/$file") or die "Cannot open d/$infile: $!"; open(OUT,">$outfile") or die "Cannot open $outfile: $!"; while() { print OUT; } close(IN); close(OUT); } $p_define .= undef_flag(); } #--- WriteMakefile parameters $p_obj = '$(O_FILES)' x $use_xs; WriteMakefile( 'NAME' => 'Convert::IBM390', 'VERSION_FROM' => 'lib/Convert/IBM390.pm', # finds $VERSION 'OBJECT' => $p_obj, 'DEFINE' => $p_define, # 'DEFINE' => "$p_define -DDEBUG390", # if debugging is desired 'INC' => '', # e.g., -I/usr/local/lib/.../CORE 'clean' => { FILES => 'lib/Convert/IBM390.pm IBM390lib.c IBM390lib.h ' }, 'dist' => { PREOP => 'cp -p "d/IBM390_pm_dummy" "lib/Convert/IBM390.pm"' }, @perlonly, );