use ExtUtils::MakeMaker; use ExtUtils::Constant qw (WriteConstants); # Makefile.PL for Win32::NetPacket # v 0.2 (11/02/2006) # ------------------------------------- # Set the path to the WPcap library : my $WPCAP = 'C:\WpdPack'; # ************************************** unless ( -e $WPCAP . '\Lib\Packet.lib' ) { print << 'ERR'; Error: WinPcap library not found. Set the path to this library in Makefile.PL and run 'perl Makefile.PL' again. ERR exit; } # patching socket.h my $sockfile; foreach (@INC) { # looking for socket.h if ( -e $_ . '/CORE/sys/socket.h' ) { $sockfile = $_ . '/CORE/sys/socket.h'; last; } } die "file \"socket.h\" not found" unless $sockfile; open H, "< $sockfile" or die $!; my $h; { local $/; $h = ; } close H; my $ifdef = <<'IFDEF'; # patch for socket.h /* patch for WinPCap original file renamed 'socket.h.orig' */ #ifdef WINSOCK2_H_REQUESTED #include #else #include #endif /* end of patch */ IFDEF if ( $h =~ /\#include / ) { print "socket.h already patched...Ok\n"; } else { if ( rename $sockfile, $sockfile . '.orig' ) { $h =~ s/#include /$ifdef/; open H, "> $sockfile" or die $!; print H $h; close H; print "socket.h patched...Ok\n"; } else { print "Unable to patch socket.h\n"; } } # end patching WriteMakefile( 'NAME' => 'Win32::NetPacket', 'VERSION_FROM' => 'lib/Win32/NetPacket.pm', # finds $VERSION 'PREREQ_PM' => {}, # e.g., Module::Name => 1.1 ( $] >= 5.005 ? ## Add these new keywords supported since 5.005 ( ABSTRACT_FROM => 'lib/Win32/NetPacket.pm', # retrieve abstract from module AUTHOR => 'Jean-Louis Morel ' ) : () ), 'LIBS' => ["$WPCAP\\Lib\\Packet.lib"], # e.g., '-lm' 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING' 'INC' => "-I$WPCAP\\Include", # e.g., '-I/usr/include/other' ); # extracting constants from NetPacket.pm my $content; open my $pmfile, "lib/Win32/NetPacket.pm" or die $!; { local $/; $content = <$pmfile>; } close $pmfile; my @cst; foreach my $name (qw/ ndis oid mode /) { ($_) = $content =~ /^\s*'$name'\s*=>\s*\[\s*qw\(\s*([A-Z_0-9\s]+)/m; push @cst, split; } WriteConstants( NAME => 'Win32::NetPacket', NAMES => [@cst], );