use strict; use warnings; use Module::Build; use Config; use Data::Dumper; my $builder = Module::Build->new( module_name => 'Unix::SavedIDs', license => 'bsd', dist_author => 'Dylan Martin ', dist_version_from => 'lib/Unix/SavedIDs.pm', requires => { 'Test::More' => 0, 'version' => 0.7203, # 0.6701 doesn't work & 0.7203 is the # oldest one I have to test with # if you have an older one and Unix::SavedIDs # passes it's tests, let me know and I'll change # this }, add_to_cleanup => [ 'Unix-SavedIDs-*', ], create_makefile_pl => 'passthrough', create_readme => 1, get_options => { 'touchtestok' => {}, 'wibble' => {} }, ); # is unixish is only in recent versions of Module::Build my $is_unixy = eval{ $builder->is_unixish() }; if ( defined($is_unixy) && !$is_unixy ) { die "Sorry!\n\nThis module only works on unix-like operating systems!\n\n"; } if ( ! $Config{useposix} ) { die "Sorry!\n\nThis is not a POSIX system, so saved IDs probably won't work\n"; } eval { require POSIX }; if ( $@ ) { die "Failed to load POSIX module. If you can't do POSIX, I'm not even " ."going to try to do saved ids\n"; } my $kernel = (POSIX::uname())[2]; if ( $^O eq 'linux' ) { if ( $kernel !~ /^(\d+)\.(\d+)\.(\d+)/ ) { warn "I don't know how to parse kernel version '$kernel' please" ." contact dmartin\@cpan.org and include the kernel version" ." string.\n"; } my($maj,$min,$mic) = ($1,$2,$3); my $kernel_version_mesg = "Kernels older than 2.1.44 don't" ." have saved ids\n"; if ( ($maj < 2 ) || ( $maj == 2 && $min < 1 ) || ( $maj == 2 && $min == 1 && $mic < 44 ) ) { die $kernel_version_mesg; } print "You are running Linux with a kernel newer than 2.1.44. Good!\n"; } elsif ( $^O eq 'openbsd' ) { print "You are running OpenBSD. Good!\n"; } else { print "Unix::SavedIDs hasn't been tested on $^O, please" ." contact dmartin\@cpan.org and let me know how it works\n"; } my $prompt = "Do I have permission to run a" ." test that will touch and unlink a randomly named, currenly" ." non-existant file in your /tmp dir? (Y/N)"; if ( $builder->args('touchtestok') ) { print $prompt." [Y ]\nY\n"; $builder->notes(touchtest_ok => 'Y'); } else { my $touchtest_ok = $builder->prompt($prompt ,'N'); $builder->notes(touchtest_ok => $touchtest_ok); } $builder->create_build_script();