#! perl -w use strict; # $Id: for_nmake.t 1008 2006-11-09 22:40:10Z abeltje $ use File::Spec; use Test::More tests => 71; BEGIN { use_ok( 'Test::Smoke::Util' ); } END { 1 while unlink 'win32/smoke.mk'; chdir File::Spec->updir if -d File::Spec->catdir( File::Spec->updir, 't' ); } chdir 't' or die "chdir: $!" if -d 't'; my $smoke_mk = 'win32/smoke.mk'; # Force the options that have a different default in # the makefile.mk and in Configure_win32() my $dft_args = '-Duseithreads -Duselargefiles'; my $config = $dft_args . ' -DINST_VER=\5.9.0 -DINST_ARCH=\$(ARCHNAME)'; Configure_win32( './Configure ' . $config, 'nmake' ); ok( -f $smoke_mk, "New makefile ($config)" ); my $extra_len = length( "\t\tconfig_args=$dft_args\t~\t\\\n" ); is( -s 'win32/Makefile', (-s $smoke_mk ) - $extra_len, "Sizes are equal for standard options (-Duseithreads)" ); # Now we can start testing this stuff ok( my_unlink( $smoke_mk ), "Remove makefile" ); $config = '-DINST_DRV=F:'; Configure_win32( './Configure ' . $config, 'nmake' ); ok( -f $smoke_mk, "New makefile ($config)" ); SKIP: { local *MF; ok open( MF, "< $smoke_mk" ), "Opening makefile" or skip "Can't read from '$smoke_mk': $!", 7; my $makefile = do { local $/; }; close MF; # This should be set like( $makefile, '/^INST_DRV\s*=\s*F:\n/m', '$(INST_DRV)' ); like( $makefile, '/^INST_DRV\t= untuched\n/m', "Untuched 1" ); like( $makefile, '/^# INST_DRV\t= untuched\n/m', "Untuched 2" ); #These should be unset like( $makefile, '/^#USE_MULTI\s*= define\n/m', '#$(USE_MULTI)' ); like( $makefile, '/^#USE_ITHREADS\s*= define\n/m', '#$(USE_ITHREADS)' ); like( $makefile, '/^#USE_IMP_SYS\s*= define\n/m', '#$(USE_IMP_SYS)' ); like( $makefile, '/^#USE_LARGE_FILES\s*= define\n/m', '#$(USE_LARGE_FILES)' ); } # Here we test the setting of CCTYPE ok( my_unlink( $smoke_mk ), "Remove makefile" ); $config = '-DCCTYPE=MSVC60'; Configure_win32( './Configure ' . $config, 'nmake' ); ok( -f $smoke_mk, "New makefile ($config)" ); SKIP: { local *MF; ok open( MF, "< $smoke_mk" ), "Opening makefile" or skip "Can't read from '$smoke_mk': $!", 5; my $makefile = do { local $/; }; close MF; # This should now be set twice like( $makefile, '/^CCTYPE\s*= MSVC60\nCCTYPE\s*= MSVC60\n/m', '$(CCTYPE) set twice' ); like( $makefile, '/^\s*CCTYPE=\$\(CCTYPE\) > somewhere\n/m', "Untuched CCTYPE" ); #These should be unset like( $makefile, '/^#USE_MULTI\s*= define\n/m', '#$(USE_MULTI)' ); like( $makefile, '/^#USE_ITHREADS\s*= define\n/m', '#$(USE_ITHREADS)' ); like( $makefile, '/^#USE_IMP_SYS\s*= define\n/m', '#$(USE_IMP_SYS)' ); like( $makefile, '/^#BUILD_STATIC\s*= define\n/m', '#$(BUILD_STATIC)' ); } # Check that all three are set for -Duseithreads ok( my_unlink( $smoke_mk ), "Remove makefile" ); $config = '-Dusethreads'; Configure_win32( './Configure ' . $config, 'nmake' ); ok( -f $smoke_mk, "New makefile ($config)" ); SKIP: { local *MF; ok open( MF, "< $smoke_mk" ), "Opening makefile" or skip "Can't read from '$smoke_mk': $!", 3; my $makefile = do { local $/; }; close MF; #These should be set like( $makefile, '/^USE_MULTI\s*= define\n/m', '$(USE_MULTI) set' ); like( $makefile, '/^USE_ITHREADS\s*= define\n/m', '$(USE_ITHREADS) set' ); like( $makefile, '/^USE_IMP_SYS\s*= define\n/m', '$(USE_IMP_SYS) set' ); } # This will be a full configuration: ok( my_unlink( $smoke_mk ), "Remove makefile" ); $config = '-Duselargefiles'; Configure_win32( './Configure ' . $config, 'nmake' ); ok( -f $smoke_mk, "New makefile ($config)" ); SKIP: { local *MF; ok open( MF, "< $smoke_mk" ), "Opening makefile" or skip "Can't read from '$smoke_mk': $!", 1; my $makefile = do { local $/; }; close MF; #These should be set like( $makefile, '/^USE_LARGE_FILES\s*= define\n/m', '$(USE_LARGE_FILES) set' ); } # This will be a full configuration: ok( my_unlink( $smoke_mk ), "Remove makefile" ); $config = '-des -Dusedevel -Duseithreads -Dusemymalloc ' . '-DCCTYPE=MSVC60 -Dcf_email=abeltje@cpan.org'; Configure_win32( './Configure ' . $config, 'nmake' ); ok( -f $smoke_mk, "New makefile ($config)" ); SKIP: { local *MF; ok open( MF, "< $smoke_mk" ), "Opening makefile" or skip "Can't read from '$smoke_mk': $!", 3; my $makefile = do { local $/; }; close MF; #These should be set like( $makefile, '/^USE_MULTI\s*= define\n/m', '$(USE_MULTI) set' ); like( $makefile, '/^USE_ITHREADS\s*= define\n/m', '$(USE_ITHREADS) set' ); like( $makefile, '/^USE_IMP_SYS\s*= define\n/m', '$(USE_IMP_SYS) set' ); like( $makefile, '/^\s*PERL_MALLOC\s*= define\n/m', '$(PERL_MALLOC) set' ); like( $makefile, '/^EMAIL\s*= abeltje\@cpan\.org\n/m', '$(EMAIL) set' ); # This should now be set twice like( $makefile, '/^CCTYPE\s*= MSVC60\nCCTYPE\s*= MSVC60\n/m', '$(CCTYPE) set twice' ); like( $makefile, '/^\s*CCTYPE=\$\(CCTYPE\) > somewhere\n/m', "Untuched CCTYPE" ); } ok( my_unlink( $smoke_mk ), "Remove makefile" ); $config = '-des -Dusedevel'; my @cfg_args = ( 'osvers=5.0 W2000Pro' ); Configure_win32( './Configure ' . $config, 'nmake', @cfg_args ); ok( -f $smoke_mk, "New makefile ($config/[@cfg_args])" ); SKIP: { local *MF; ok open( MF, "< $smoke_mk" ), "Opening makefile" or skip "Can't read from '$smoke_mk': $!", 1; my $makefile = do { local $/; }; close MF; like( $makefile, '/ ^CFG_VARS \s* = \s* \\\\\n \s*"osvers=5\.0\ W2000Pro"\t+\\\\\n \s*"config_args=-Dusedevel"\t+\\\\\n \s*"INST_DRV= /mx', "CFG_VARS macro for Config.pm" ); } ok( my_unlink( $smoke_mk ), "Remove makefile" ); $config = '-des -Dusedevel'; @cfg_args = ( 'osvers=5.0 W2000Pro', "", 'ccversion=cl 6.0' ); Configure_win32( './Configure ' . $config, 'nmake', @cfg_args ); ok( -f $smoke_mk, "New makefile ($config/[@cfg_args])" ); SKIP: { local *MF; ok open( MF, "< $smoke_mk" ), "Opening makefile" or skip "Can't read from '$smoke_mk': $!", 1; my $makefile = do { local $/; }; close MF; like( $makefile, '/ ^CFG_VARS \s* = \s* \\\\\n \s*"osvers=5\.0\ W2000Pro"\t+\\\\\n \s*"ccversion=cl\ 6\.0"\t+\\\\\n \s*"config_args=-Dusedevel"\t+\\\\\n \s*"INST_DRV= /mx', "CFG_VARS macro for Config.pm" ); } ok( my_unlink( $smoke_mk ), "Remove makefile" ); $config = '-des -Dusedevel'; @cfg_args = ( 'osvers=5.0 W2000Pro', "trash", 'ccversion=cl 6.0' ); Configure_win32( './Configure ' . $config, 'nmake', @cfg_args ); ok( -f $smoke_mk, "New makefile ($config/[@cfg_args])" ); SKIP: { local *MF; ok open( MF, "< $smoke_mk" ), "Opening makefile" or skip "Can't read from '$smoke_mk': $!", 1; my $makefile = do { local $/; }; close MF; like( $makefile, '/ ^CFG_VARS \s* = \s* \\\\\n \s*"osvers=5\.0\ W2000Pro"\t+\\\\\n \s*"ccversion=cl\ 6\.0"\t+\\\\\n \s*"config_args=-Dusedevel"\t+\\\\\n \s*"INST_DRV= /mx', "CFG_VARS macro for Config.pm" ); } ok( my_unlink( $smoke_mk ), "Remove makefile" ); $config = $dft_args . " -Accflags='-DPERL_COPY_ON_WRITE'"; Configure_win32( './Configure '. $config, 'nmake' ); ok( -f $smoke_mk, "New makefile ($config)" ); SKIP: { local *MF; ok open(MF, "< $smoke_mk"), "Opening makefile" or skip "Cannot read from '$smoke_mk': $!", 1; my $makefile = do { local $/; }; close MF; like( $makefile, '/^BUILDOPT\t=\s\$\(BUILDOPT\)\ -DPERL_COPY_ON_WRITE\n #+\ CHANGE THESE ONLY IF YOU MUST\ #+ /mx', "-Accflags= is translated to BUILDOPT = \$(BUILDOPT)" ); } ok( my_unlink( $smoke_mk ), "Remove makefile" ); $config = $dft_args . " -Accflags='-DPERL_COPY_ON_WRITE'". " -Accflags='-DPERL_POLLUTE'"; Configure_win32( './Configure '. $config, 'nmake' ); ok( -f $smoke_mk, "New makefile ($config)" ); SKIP: { local *MF; ok open(MF, "< $smoke_mk"), "Opening makefile" or skip "Cannot read from '$smoke_mk': $!", 1; my $makefile = do { local $/; }; close MF; like( $makefile, '/^BUILDOPT\t=\s\$\(BUILDOPT\)\ -DPERL_COPY_ON_WRITE\n BUILDOPT\t=\s\$\(BUILDOPT\)\ -DPERL_POLLUTE\n #+\ CHANGE THESE ONLY IF YOU MUST\ #+ /mx', "-Accflags= is translated to BUILDOPT = \$(BUILDOPT)" ); } # Testing: -Duseithreads -Uuseimpsys $config = $dft_args . " -Uuseimpsys"; Configure_win32( './Configure ' . $config, 'nmake' ); ok( -f $smoke_mk, "New makefile ($config)" ); SKIP: { local *MF; ok open(MF, "< $smoke_mk"), "Opening makefile" or skip "Cannot read from '$smoke_mk': $!", 1; my $makefile = do { local $/; }; close MF; #These should be unset like( $makefile, '/^USE_MULTI\s*= define\n/m', '$(USE_MULTI)' ); like( $makefile, '/^USE_ITHREADS\s*= define\n/m', '$(USE_ITHREADS)' ); like( $makefile, '/^#USE_IMP_SYS\s*= define\n/m', '#$(USE_IMP_SYS)' ); } # Testing: -Uuseshrplib $config = $dft_args . " -Uuseshrplib"; Configure_win32( './Configure ' . $config, 'nmake' ); ok( -f $smoke_mk, "New makefile ($config)" ); SKIP: { local *MF; ok open(MF, "< $smoke_mk"), "Opening makefile" or skip "Cannot read from '$smoke_mk': $!", 1; my $makefile = do { local $/; }; close MF; #These should be unset like( $makefile, '/^BUILD_STATIC\s*= define\n/m', '$(BUILD_STATIC)' ); } ok( my_unlink( $smoke_mk ), "Remove makefile" ); sub my_unlink { my $file = shift; 1 while unlink $file; return ! -e $file; }