| 1 | #!/usr/bin/perl -w |
| 2 | |
| 3 | BEGIN { |
| 4 | if( $ENV{PERL_CORE} ) { |
| 5 | chdir 't'; |
| 6 | @INC = '../lib'; |
| 7 | } |
| 8 | else { |
| 9 | unshift @INC, 't/lib'; |
| 10 | } |
| 11 | } |
| 12 | chdir 't'; |
| 13 | |
| 14 | BEGIN { |
| 15 | use Test::More; |
| 16 | |
| 17 | if( $^O =~ /^VMS|os2|MacOS|MSWin32|cygwin|beos|netware$/i ) { |
| 18 | plan skip_all => 'Non-Unix platform'; |
| 19 | } |
| 20 | else { |
| 21 | plan tests => 117; |
| 22 | } |
| 23 | } |
| 24 | |
| 25 | BEGIN { use_ok( 'ExtUtils::MM_Unix' ); } |
| 26 | |
| 27 | use vars qw($VERSION); |
| 28 | $VERSION = '0.02'; |
| 29 | use strict; |
| 30 | use File::Spec; |
| 31 | |
| 32 | my $class = 'ExtUtils::MM_Unix'; |
| 33 | |
| 34 | # only one of the following can be true |
| 35 | # test should be removed if MM_Unix ever stops handling other OS than Unix |
| 36 | my $os = ($ExtUtils::MM_Unix::Is_OS2 || 0) |
| 37 | + ($ExtUtils::MM_Unix::Is_Mac || 0) |
| 38 | + ($ExtUtils::MM_Unix::Is_Win32 || 0) |
| 39 | + ($ExtUtils::MM_Unix::Is_Dos || 0) |
| 40 | + ($ExtUtils::MM_Unix::Is_VMS || 0); |
| 41 | ok ( $os <= 1, 'There can be only one (or none)'); |
| 42 | |
| 43 | cmp_ok ($ExtUtils::MM_Unix::VERSION, '>=', '1.12606', 'Should be at least version 1.12606'); |
| 44 | |
| 45 | # when the following calls like canonpath, catdir etc are replaced by |
| 46 | # File::Spec calls, the test's become a bit pointless |
| 47 | |
| 48 | foreach ( qw( xx/ ./xx/ xx/././xx xx///xx) ) |
| 49 | { |
| 50 | is ($class->canonpath($_), File::Spec->canonpath($_), "canonpath $_"); |
| 51 | } |
| 52 | |
| 53 | is ($class->catdir('xx','xx'), File::Spec->catdir('xx','xx'), |
| 54 | 'catdir(xx, xx) => xx/xx'); |
| 55 | is ($class->catfile('xx','xx','yy'), File::Spec->catfile('xx','xx','yy'), |
| 56 | 'catfile(xx, xx) => xx/xx'); |
| 57 | |
| 58 | is ($class->file_name_is_absolute('Bombdadil'), |
| 59 | File::Spec->file_name_is_absolute('Bombdadil'), |
| 60 | 'file_name_is_absolute()'); |
| 61 | |
| 62 | is ($class->path(), File::Spec->path(), 'path() same as File::Spec->path()'); |
| 63 | |
| 64 | foreach (qw/updir curdir rootdir/) |
| 65 | { |
| 66 | is ($class->$_(), File::Spec->$_(), $_ ); |
| 67 | } |
| 68 | |
| 69 | foreach ( qw / |
| 70 | c_o |
| 71 | clean |
| 72 | const_cccmd |
| 73 | const_config |
| 74 | const_loadlibs |
| 75 | constants |
| 76 | depend |
| 77 | dir_target |
| 78 | dist |
| 79 | dist_basics |
| 80 | dist_ci |
| 81 | dist_core |
| 82 | distdir |
| 83 | dist_test |
| 84 | dlsyms |
| 85 | dynamic |
| 86 | dynamic_bs |
| 87 | dynamic_lib |
| 88 | exescan |
| 89 | extliblist |
| 90 | find_perl |
| 91 | fixin |
| 92 | force |
| 93 | guess_name |
| 94 | init_dirscan |
| 95 | init_main |
| 96 | init_others |
| 97 | install |
| 98 | installbin |
| 99 | linkext |
| 100 | lsdir |
| 101 | macro |
| 102 | makeaperl |
| 103 | makefile |
| 104 | manifypods |
| 105 | needs_linking |
| 106 | pasthru |
| 107 | perldepend |
| 108 | pm_to_blib |
| 109 | ppd |
| 110 | prefixify |
| 111 | processPL |
| 112 | quote_paren |
| 113 | realclean |
| 114 | static |
| 115 | static_lib |
| 116 | staticmake |
| 117 | subdir_x |
| 118 | subdirs |
| 119 | test |
| 120 | test_via_harness |
| 121 | test_via_script |
| 122 | tool_autosplit |
| 123 | tool_xsubpp |
| 124 | tools_other |
| 125 | top_targets |
| 126 | writedoc |
| 127 | xs_c |
| 128 | xs_cpp |
| 129 | xs_o |
| 130 | / ) |
| 131 | { |
| 132 | can_ok($class, $_); |
| 133 | } |
| 134 | |
| 135 | ############################################################################### |
| 136 | # some more detailed tests for the methods above |
| 137 | |
| 138 | ok ( join (' ', $class->dist_basics()), 'distclean :: realclean distcheck'); |
| 139 | |
| 140 | ############################################################################### |
| 141 | # has_link_code tests |
| 142 | |
| 143 | my $t = bless { NAME => "Foo" }, $class; |
| 144 | $t->{HAS_LINK_CODE} = 1; |
| 145 | is ($t->has_link_code(),1,'has_link_code'); is ($t->{HAS_LINK_CODE},1); |
| 146 | |
| 147 | $t->{HAS_LINK_CODE} = 0; |
| 148 | is ($t->has_link_code(),0); is ($t->{HAS_LINK_CODE},0); |
| 149 | |
| 150 | delete $t->{HAS_LINK_CODE}; delete $t->{OBJECT}; |
| 151 | is ($t->has_link_code(),0); is ($t->{HAS_LINK_CODE},0); |
| 152 | |
| 153 | delete $t->{HAS_LINK_CODE}; $t->{OBJECT} = 1; |
| 154 | is ($t->has_link_code(),1); is ($t->{HAS_LINK_CODE},1); |
| 155 | |
| 156 | delete $t->{HAS_LINK_CODE}; delete $t->{OBJECT}; $t->{MYEXTLIB} = 1; |
| 157 | is ($t->has_link_code(),1); is ($t->{HAS_LINK_CODE},1); |
| 158 | |
| 159 | delete $t->{HAS_LINK_CODE}; delete $t->{MYEXTLIB}; $t->{C} = [ 'Gloin' ]; |
| 160 | is ($t->has_link_code(),1); is ($t->{HAS_LINK_CODE},1); |
| 161 | |
| 162 | ############################################################################### |
| 163 | # libscan |
| 164 | |
| 165 | is ($t->libscan('foo/RCS/bar'), '', 'libscan on RCS'); |
| 166 | is ($t->libscan('CVS/bar/car'), '', 'libscan on CVS'); |
| 167 | is ($t->libscan('SCCS'), '', 'libscan on SCCS'); |
| 168 | is ($t->libscan('.svn/something'), '', 'libscan on Subversion'); |
| 169 | is ($t->libscan('foo/b~r'), 'foo/b~r', 'libscan on file with ~'); |
| 170 | is ($t->libscan('foo/RCS.pm'), 'foo/RCS.pm', 'libscan on file with RCS'); |
| 171 | |
| 172 | is ($t->libscan('Fatty'), 'Fatty', 'libscan on something not a VC file' ); |
| 173 | |
| 174 | ############################################################################### |
| 175 | # maybe_command |
| 176 | |
| 177 | is ($t->maybe_command('blargel'),undef,"'blargel' isn't a command"); |
| 178 | |
| 179 | ############################################################################### |
| 180 | # nicetext (dummy method) |
| 181 | |
| 182 | is ($t->nicetext('LOTR'),'LOTR','nicetext'); |
| 183 | |
| 184 | ############################################################################### |
| 185 | # parse_version |
| 186 | |
| 187 | my $self_name = $ENV{PERL_CORE} ? '../lib/ExtUtils/t/MM_Unix.t' |
| 188 | : 'MM_Unix.t'; |
| 189 | |
| 190 | is( $t->parse_version($self_name), '0.02', 'parse_version on ourself'); |
| 191 | |
| 192 | my %versions = ( |
| 193 | '$VERSION = 0.0' => 0.0, |
| 194 | '$VERSION = -1.0' => -1.0, |
| 195 | '$VERSION = undef' => 'undef', |
| 196 | '$wibble = 1.0' => 'undef', |
| 197 | ); |
| 198 | |
| 199 | while( my($code, $expect) = each %versions ) { |
| 200 | open(FILE, ">VERSION.tmp") || die $!; |
| 201 | print FILE "$code\n"; |
| 202 | close FILE; |
| 203 | |
| 204 | is( $t->parse_version('VERSION.tmp'), $expect, $code ); |
| 205 | |
| 206 | unlink "VERSION.tmp"; |
| 207 | } |
| 208 | |
| 209 | |
| 210 | ############################################################################### |
| 211 | # perl_script (on unix any ordinary, readable file) |
| 212 | |
| 213 | is ($t->perl_script($self_name),$self_name, 'we pass as a perl_script()'); |
| 214 | |
| 215 | ############################################################################### |
| 216 | # perm_rw perm_rwx |
| 217 | |
| 218 | $t->init_PERM; |
| 219 | is ($t->perm_rw(),'644', 'perm_rw() is 644'); |
| 220 | is ($t->perm_rwx(),'755', 'perm_rwx() is 755'); |
| 221 | |
| 222 | ############################################################################### |
| 223 | # post_constants, postamble, post_initialize |
| 224 | |
| 225 | foreach (qw/ post_constants postamble post_initialize/) |
| 226 | { |
| 227 | is ($t->$_(),'', "$_() is an empty string"); |
| 228 | } |
| 229 | |
| 230 | ############################################################################### |
| 231 | # replace_manpage_separator |
| 232 | |
| 233 | is ($t->replace_manpage_separator('Foo/Bar'),'Foo::Bar','manpage_separator'); |
| 234 | |
| 235 | ############################################################################### |
| 236 | |
| 237 | $t->init_linker; |
| 238 | foreach (qw/ EXPORT_LIST PERL_ARCHIVE PERL_ARCHIVE_AFTER LD /) |
| 239 | { |
| 240 | use Config; |
| 241 | ok( exists $t->{$_}, "$_ was defined" ); |
| 242 | if ($_ eq 'LD' && defined $Config{ld}) { |
| 243 | like($t->{LD}, qr/^($Config{ld}|ld)$/, |
| 244 | "LD ($t->{LD}) is like in %Config ($t->{$_}) or 'ld'"); |
| 245 | } else { |
| 246 | is($t->{$_}, '', "$_ is empty on Unix"); |
| 247 | } |
| 248 | } |
| 249 | |
| 250 | |
| 251 | { |
| 252 | $t->{CCFLAGS} = '-DMY_THING'; |
| 253 | $t->{LIBPERL_A} = 'libperl.a'; |
| 254 | $t->{LIB_EXT} = '.a'; |
| 255 | local $t->{NEEDS_LINKING} = 1; |
| 256 | $t->cflags(); |
| 257 | |
| 258 | # Brief bug where CCFLAGS was being blown away |
| 259 | is( $t->{CCFLAGS}, '-DMY_THING', 'cflags retains CCFLAGS' ); |
| 260 | } |
| 261 | |