use 5.008; use ExtUtils::MakeMaker (); use Config; $ExtUtils::MakeMaker::Verbose = 0; %os_supported = ( 'linux' => 1, 'MSWin32' => 1, 'darwin' => 1 ); our $TERM_RED = "\033[31;1m"; our $TERM_GREEN = "\033[32;1m"; our $TERM_YELLOW = "\033[33;1m"; our $TERM_BLUE = "\033[34;1m"; our $TERM_MAGENTA = "\033[35;1m"; our $TERM_CYAN = "\033[36;1m"; our $TERM_WHITE = "\033[37;1m"; our $TERM_RESET = "\033[m"; my $_useit = ! $PAB || ( $PAB && $PAB_OPT{'with_mysql'} ); %_LIBREQ = %_LIBS = ( 'mysqlclient' => 1, 'z' => 1 ); @_LIB_PATH = qw(/usr/local/lib64 /usr/local/lib /usr/lib64 /usr/lib); @_INC_PATH = qw(/usr/local/include/mysql /usr/include/mysql); @_LIB_PATH_MY = qw(/usr/local/mysql/lib); @_INC_PATH_MY = qw(/usr/local/mysql/include); @_OBJECT = (); @_EXT = ( '.so', '.a', '.dll', '.dylib' ); if( ! $os_supported{$^O} ) { if( $PAB && $PAB_OPT{'with_mysql'} eq '_auto_' ) { $_useit = 0; } elsif( $_useit ) { print < 'PAB3::DB::Driver::Mysql', VERSION_FROM => 'Mysql.pm', ABSTRACT => 'A Perl5 wrapper for MySQL and a driver for the PAB3::DB class', XSPROTOARG => '-prototypes', PREREQ_PM => {}, OBJECT => '$(O_FILES)', XS => { 'Mysql.xs' => 'Mysql.c' }, C => [ 'my_mysql.c', 'Mysql.c' ], DEFINE => '', PL_FILES => { 'install_files.PL' => $PAB ? 'pab' : 'self' }, ); if( ! $_useit ) { &donotuse(); ExtUtils::MakeMaker::WriteMakefile( %_MAKEOPTS ); $PAB ? return 1 : exit 0; } my $mc = 'mysql_config'; if( $^O eq 'MSWin32' ) { print "*****************************************************************\n"; print "*** Tested with MS-VC 7.10 and MySQL 5.0.37 Dll ***\n"; print "*****************************************************************\n"; $mc = undef; @_LIB_PATH_MY = @_LIB_PATH = (); @_INC_PATH_MY = @_INC_PATH = (); %_LIBREQ = %_LIBS = ( 'mysql' => 'inst' ); @_EXT = ( '.dll' ); #@_OBJECT = ( 'mysqlclient.lib' ); require Win32::TieRegistry; import Win32::TieRegistry; $Registry->Delimiter( '/' ); $keys = $Registry->{'HKEY_LOCAL_MACHINE/Software/MySQL AB'}; if( $keys ) { foreach( keys %$keys ) { next if ! ref( $keys->{$_} ) || ! $keys->{$_}->{'Location'}; my $path = $keys->{$_}->{'Location'}; $path =~ s!\\!\\\\!g; my $inc = $path . 'include/mysql.h'; if( -f $inc ) { push( @_INC_PATH_MY, $path . 'include' ); push( @_LIB_PATH_MY, $path . 'bin', $path . 'lib', $path . 'lib\\opt' ); } } } my $path = 'c:\\program files\\mysql\\'; if( ! @_INC_PATH_MY && -d $path ) { my( $dir, @items, $cp ); opendir( $dir, $path ); @items = grep{ ! /^\./ && -d $path . $_ } readdir( $dir ); closedir( $dir ); foreach( @items ) { $cp = $path . $_ . '\\'; if( -f $cp . 'include/mysql.h' ) { push( @_INC_PATH_MY, $cp . 'include' ); push( @_LIB_PATH_MY, $cp . 'bin', $cp . 'lib', $cp . 'lib\\opt' ); } } } $_MAKEOPTS{'DEFINE'} .= ' -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS'; } if( $PAB_OPT{'with_mysql'} ) { if( -d $PAB_OPT{'with_mysql'} ) { @_INC_PATH_MY = ( $PAB_OPT{'with_mysql'} . '/include' ); @_LIB_PATH_MY = ( $PAB_OPT{'with_mysql'} . '/lib' ); if( $^O eq 'MSWin32' ) { unshift @_LIB_PATH_MY, $PAB_OPT{'with_mysql'} . '/lib/opt'; unshift @_LIB_PATH_MY, $PAB_OPT{'with_mysql'} . '/bin'; } $mc = 0; } elsif( -x $PAB_OPT{'with_mysql'} ) { $mc = $PAB_OPT{'with_mysql'}; } } if( $Config{'usethreads'} ) { $_MAKEOPTS{'DEFINE'} .= ' -DUSE_THREADS'; } if( $^O ne 'linux' ) { $TERM_RED = $TERM_GREEN = $TERM_YELLOW = $TERM_BLUE = $TERM_MAGENTA = $TERM_CYAN = $TERM_WHITE = $TERM_RESET = ''; } @argv = (); foreach( @ARGV ) { if( /--help/ ) { print_usage(); } if( /--mysql_config=(.+)/ ) { $mc = $1; } elsif( /--mysql_dir=(.+)/ ) { @_INC_PATH_MY = ( $1 . '/include' ); @_LIB_PATH_MY = ( $1 . '/bin', $1 . '/lib', $1 . '/lib/opt' ); $lb = $ic = 1; } elsif( /--libs=(.+)/ ) { &parse_lib( $lb = $1 ); } elsif( /--include=(.+)/ ) { &parse_inc( $ic = $1 ); } else { push @argv, $_; } } @ARGV = @argv; $out = select( STDOUT ); $| = 1; select( $out ); $res = $mc ? `$mc --version` : 0; if( $res ) { if( ! $ic ) { &parse_inc( $ic = `$mc --include` ); } if( ! $lb ) { &parse_lib( $lb = `$mc --libs` ); } } unshift @_LIB_PATH, @_LIB_PATH_MY; unshift @_INC_PATH, @_INC_PATH_MY; print $TERM_BLUE, "Preparing ", $TERM_YELLOW, $_MAKEOPTS{'NAME'}, $TERM_RESET, "\n"; foreach $lib( keys %_LIBS ) { print $TERM_WHITE, "Looking for ", $TERM_GREEN, "lib$lib", $TERM_RESET, " ..."; $found = 0; foreach $path( @_LIB_PATH ) { foreach $ext( @_EXT ) { my $file = $path . '/lib' . $lib . $ext; if( -f $file ) { print $TERM_WHITE, "\n found at ", $TERM_MAGENTA, $file, $TERM_RESET; $found = 1; if( $_LIBS{$lib} eq 'inst' ) { &file_copy( $file, 'lib' . $lib . $ext ); } } } } if( ! $found ) { print $TERM_RED, " not found", $TERM_RESET; delete $_LIBS{$lib}; } print "\n"; } if( $^O eq 'MSWin32' ) { $_MAKEOPTS{'LIBS'} = [ join( ' ', map{ '"-L' . $_ . '"' } @_LIB_PATH ) . ' ' . join( ' ', map{ '-l' . $_ } keys %_LIBS ) . ' ' . join( ' ', @_OBJECT ) ]; $_MAKEOPTS{'INC'} = join( ' ', map{ '"-I' . $_ . '"' } @_INC_PATH ); } else { $_MAKEOPTS{'LIBS'} = [ join( ' ', map{ '-L' . $_ } @_LIB_PATH ) . ' ' . join( ' ', map{ '-l' . $_ } keys %_LIBS ) . ' ' . join( ' ', @_OBJECT ) ]; $_MAKEOPTS{'INC'} = join( ' ', map{ '-I' . $_ } @_INC_PATH ); } $found = 1; foreach( keys %_LIBREQ ) { if( ! $_LIBS{$_} ) { $found = 0; last; } } if( ! $found ) { if( $PAB && $PAB_OPT{'with_mysql'} eq '_auto_' ) { &donotuse(); } else { print <', $dst ) or warn "Can not open $dst: $!"; binmode( $dfh ); while( read( $sfh, $buf, 8192 ) ) { print $dfh $buf; } close( $dfh ); close( $sfh ); } package MY; sub cflags { my $inherited = shift->SUPER::cflags( @_ ); if( $^O eq 'MSWin32' ) { $inherited =~ s/-O1/-O2/sg; # set static linking to crt $inherited =~ s/-MD/-MT/sg; } $inherited; } sub const_loadlibs { my $inherited = shift->SUPER::const_loadlibs( @_ ); if( $^O eq 'MSWin32' ) { # set static linking to crt $inherited =~ s/msvcrt\.lib/libcmt\.lib/sgi; } $inherited; }