# vim: ts=2 sw=2 sts=0 noexpandtab: ########################################################## ## This script is part of the Devel::NYTProf distribution ## ## Copyright, contact and other information can be found ## at the bottom of this file, or by going to: ## http://search.cpan.org/~akaplan/Devel-NYTProf ## ########################################################### # $Id: Makefile.PL 32 2008-03-26 18:13:36Z adkapx $ ########################################################### use 5.006000; use warnings; use strict; use ExtUtils::MakeMaker; use Config; # --- Bail out on Windows if ($^O eq 'MSWin32') { print "This module does not support Windows because of NYTProf.xs.\n" ."Feel free to port it and submit a patch to akaplan\@cpan.org\n"; die "No support for OS"; } # --- Discover how much of stdio is implemented print "Looking for stdio.h and stdio_ext.h\n"; my $INCLUDE; my $stdio_dir; my $stdio_ext_dir; sub search_paths { my $dir = shift; my @dirs = split /:/, $dir; foreach (@dirs) { opendir(DIR, $_) or "Unable to open $_\n" and next; while(my $file = readdir(DIR)) { if ($file =~ m/^stdio\.h$/) { $stdio_dir = $_ unless defined $stdio_dir; } elsif ($file =~ m/^stdio_ext\.h$/) { $stdio_ext_dir = $_ unless defined $stdio_ext_dir; } last if (defined $stdio_dir && defined $stdio_ext_dir); } closedir(DIR); last if (defined $stdio_dir && defined $stdio_ext_dir); } } my $cpp = $Config{cpp}; if (!defined $cpp || 0 == length($cpp)) { print "Warning: cpp not found in your perl config. Falling back to `cat'"; $cpp = 'cat'; } my $fpurge; sub search_files { if (defined $stdio_dir) { open(STDIOH, "$cpp $stdio_dir/stdio.h |"); while () { if (m/(_{0,2}fpurge)\s*\(/go) { $fpurge = $1; $stdio_ext_dir = undef; last; } } close STDIOH; } return if (defined $fpurge); if (defined $stdio_ext_dir) { open(STDIOEH, "$cpp $stdio_ext_dir/stdio_ext.h |"); while () { if (m/(_{0,2}fpurge)\s*\(/go) { $fpurge = $1; $stdio_dir = undef; last; } } close STDIOEH; } } # verify sub verify { if (defined ($fpurge)) { if (defined $stdio_ext_dir) { print "Found $fpurge in $stdio_ext_dir/stdio_ext.h\n"; $INCLUDE = $stdio_ext_dir; } else { print "Found $fpurge in $stdio_dir/stdio.h\n"; $INCLUDE = $stdio_dir; } return 1; } undef; } if (defined $ENV{INCLUDE}) { search_paths($ENV{INCLUDE}); } else { search_paths('/include:/usr/include:/usr/local/include'); } search_files(); while(!verify) { print<= 6.3002; WriteMakefile( NAME => 'Devel::NYTProf', VERSION_FROM => 'lib/Devel/NYTProf/ModuleVersion.pm', # finds $VERSION PREREQ_PM => { 'Getopt::Long' => 0, }, # e.g., Module::Name => 1.1 ($] >= 5.005 ? ## Add these new keywords supported since 5.005 (ABSTRACT_FROM => 'lib/Devel/NYTProf.pm', # retrieve abstract from module AUTHOR => 'Adam Kaplan ') : ()), LIBS => [''], # e.g., '-lm' EXE_FILES => [ 'bin/nytprofhtml', 'bin/nytprofcsv' ], MAN1PODS => { 'bin/nytprofhtml' => '$(INST_MAN1DIR)/nytprofhtml.1', 'bin/nytprofcsv' => '$(INST_MAN1DIR)/nytprofcsv.1' }, DEFINE => $DEFINE, # e.g., '-DHAVE_SOMETHING' # e.g., '-I. -I/usr/include/other' INC => "-I. -I$INCLUDE", # e.g., '-I. -I/usr/include/other' clean => { FILES => "nytprof.out profiler t/nytprof.out t/profiler " ."t/auto" }, test => { TESTS => 'test.pl' }, %mm_opts, ); # vim:ts=2:sw=2