use ExtUtils::MakeMaker; use Config qw(%Config); #### Build information my $statvfs_header = "sys/statvfs.h"; my $statvfs_symbol = "d_statvfs"; my $statvfs_header_def = "i_sysstatvfs"; my $define = ""; print "OS = $Config{osname}\n"; #### Windows if($Config{osname} =~ /^MSWin/i) { print "This module does not support Windows.\n"; die "You might try Filesys::DfPortable instead.\n"; } #### Check for the existance of statvfs if(check_statvfs()) { print "Building with statvfs ....\n"; } else { print "Config module or include search could not find statvfs."; die "We could not find statvfs on this system.\n"; } sub check_statvfs { print "Checking for statvfs .....\n"; if(exists $Config{$statvfs_symbol} && defined $Config{$statvfs_symbol}) { print "$statvfs_symbol is defined.\n"; if(exists $Config{$statvfs_header_def} && defined $Config{$statvfs_header_def}) { print "$statvfs_header_def is defined.\n"; return(1); } else { print "Weird, $statvfs_header_def is not defined.\n"; #### Have never seen a system with statvfs and no sys/statvfs.h header #### Lets see if we can find one if(look_for_header($statvfs_header)) { return(1); } else { #### no idea what header would be print "Cannot find a $statvfs_header file\n"; print "We will not try to build with statvfs\n"; return(0); } } } else { print "$statvfs_symbol is not defined\n"; if(look_for_header($statvfs_header)) { return(1); } else { #### don't use statvfs print "Cannot find a $statvfs_header file\n"; print "We will not try to build with statvfs\n"; return(0); } } return(0); } sub look_for_header { my $header = shift; my @header_inc = split(/\s+/, join(" ", $Config{usrinc}, $Config{locincpth})); #my @header_inc = split(/\s+/, join(" ", $Config{usrinc})); foreach $header_path (@header_inc) { if(-f $header_path . '/' . $header) { print "Header found:" , $header_path . '/' . $header, "\n"; return(1); } } return(0); } WriteMakefile( 'NAME' => 'Filesys::Statvfs', 'VERSION_FROM' => 'Statvfs.pm', # finds $VERSION 'LIBS' => [''], # e.g., '-lm' 'DEFINE' => $define, # e.g., '-DHAVE_SOMETHING' 'INC' => '', # e.g., '-I/usr/include/other' 'XSPROTOARG' => '-prototypes' );