Blame Makefile.PL

Packit d03604
# -*- perl -*-
Packit d03604
#
Packit d03604
# $Id$
Packit d03604
#
Packit d03604
#  Copyright (c) 1994-2010  Tim Bunce  Ireland
Packit d03604
#
Packit d03604
# See COPYRIGHT section in DBI.pm for usage and distribution rights.
Packit d03604
Packit d03604
use 5.008_001;
Packit d03604
Packit d03604
use ExtUtils::MakeMaker 5.16, qw(WriteMakefile $Verbose prompt);
Packit d03604
use Getopt::Long;
Packit d03604
use Config;
Packit d03604
use File::Find;
Packit d03604
use File::Spec;
Packit d03604
use strict;
Packit d03604
Packit d03604
use lib 'lib'; # for use DBI::DBD
Packit d03604
use DBI::DBD;
Packit d03604
Packit d03604
$| = 1;
Packit d03604
$^W = 1;
Packit d03604
my $os = $^O;
Packit d03604
my $osvers = $Config{osvers};
Packit d03604
$osvers =~ s/^\s*(\d+\.\d+).*/$1/;  # drop sub-sub-version: 2.5.1 -> 2.5
Packit d03604
my $ext_pl = $^O eq 'VMS' ? '.pl' : '';
Packit d03604
my $is_developer = ((-d ".svn" || -d ".git") && -f "MANIFEST.SKIP");
Packit d03604
Packit d03604
$::opt_v = 0;
Packit d03604
$::opt_thread = $Config{useithreads};	# thread if we can, use "-nothread" to disable
Packit d03604
$::opt_g = 0;
Packit d03604
$::opt_g = 1 if $is_developer && $ENV{LOGNAME} && $ENV{LOGNAME} eq 'timbo'; # it's me! (probably)
Packit d03604
Packit d03604
GetOptions(qw(v! g! thread!))
Packit d03604
	or die "Invalid arguments\n";
Packit d03604
Packit d03604
$::opt_g &&= '-g';  # convert to actual string
Packit d03604
Packit d03604
Packit d03604
if (($ENV{LANG}||'') =~ m/utf-?8/i) {
Packit d03604
    print "\n";
Packit d03604
    print "*** Your LANG environment variable is set to '$ENV{LANG}'\n";
Packit d03604
    print "*** This may cause problems for some perl installations.\n";
Packit d03604
    print "*** If you get test failures, please try again with LANG unset.\n";
Packit d03604
    print "*** If that then works, please email dbi-dev\@perl.org with details\n";
Packit d03604
    print "*** including the output of 'perl -V'\n";
Packit d03604
    print "\n";
Packit d03604
    sleep 1;
Packit d03604
}
Packit d03604
Packit d03604
my %opts = (
Packit d03604
    NAME   => 'DBI',
Packit d03604
    AUTHOR => 'Tim Bunce (dbi-users@perl.org)',
Packit d03604
    VERSION_FROM  => 'DBI.pm',
Packit d03604
    ABSTRACT_FROM => 'DBI.pm',
Packit d03604
    MIN_PERL_VERSION => '5.008',
Packit d03604
    BUILD_REQUIRES => {
Packit d03604
        'ExtUtils::MakeMaker' => '6.48',
Packit d03604
        'Test::Simple' => '0.90',
Packit d03604
    },
Packit d03604
    META_MERGE => {
Packit d03604
	resources => {
Packit d03604
	    repository  => 'https://github.com/perl5-dbi/dbi',
Packit d03604
	    MailingList => 'mailto:dbi-dev@perl.org',
Packit d03604
	    license     => 'http://dev.perl.org/licenses/',
Packit d03604
	    homepage    => 'http://dbi.perl.org/',
Packit d03604
	    IRC		=> 'irc://irc.perl.org/#dbi',
Packit d03604
	},
Packit d03604
	suggests => {
Packit d03604
	    'RPC::PlServer'  => 0.2001,
Packit d03604
	    'Net::Daemon'    => 0,
Packit d03604
	    'SQL::Statement' => 1.402,
Packit d03604
	    'Clone'          => 0.34,
Packit d03604
	    'MLDBM'          => 0,
Packit d03604
	    'DB_File'        => 0,
Packit d03604
	},
Packit d03604
    },
Packit d03604
    PREREQ_PM => {
Packit d03604
	  ( $^O eq 'MSWin32' ? ( 'File::Spec' => 3.31, ) : () ),
Packit d03604
    },
Packit d03604
    CONFLICTS => {
Packit d03604
	'SQL::Statement' => '1.33',
Packit d03604
	'DBD::AnyData' => '0.110',
Packit d03604
	'DBD::CSV' => '0.36',
Packit d03604
	'DBD::RAM' => '0.072',
Packit d03604
	'DBD::PO' => '2.10',
Packit d03604
	'DBD::Google' => '0.51',
Packit d03604
	'DBD::Amazon' => '0.10',
Packit d03604
    },
Packit d03604
    LICENSE => 'perl',
Packit Service 10a460
    EXE_FILES => [  "dbiprof$ext_pl", "dbilogstrip$ext_pl" ],
Packit d03604
    DIR => [ ],
Packit d03604
    dynamic_lib => { OTHERLDFLAGS => "$::opt_g" },
Packit d03604
    clean => { FILES=> "\$(DISTVNAME) Perl.xsi t/zv*_*.t dbi__null_test_tmp* test_output_*"
Packit d03604
                ." dbiproxy$ext_pl dbiprof$ext_pl dbilogstrip$ext_pl dbiproxy.*log dbitrace.log dbi*.prof ndtest.prt" },
Packit d03604
    dist  => {
Packit d03604
	DIST_DEFAULT=> 'clean distcheck disttest tardist',
Packit d03604
	PREOP => '$(MAKE) -f Makefile.old distdir',
Packit d03604
	COMPRESS => 'gzip -v9', SUFFIX => 'gz',
Packit d03604
    },
Packit d03604
);
Packit d03604
$opts{CAPI} = 'TRUE' if $Config{archname} =~ /-object\b/i;
Packit d03604
Packit d03604
if (my $gccversion = $Config{gccversion}) {	# ask gcc to be more pedantic
Packit d03604
    warn "WARNING: Your GNU C $gccversion compiler is very old. Please upgrade it and rebuild perl.\n"
Packit d03604
	if $gccversion =~ m/^\D*(1|2\.[1-8])/;
Packit d03604
    print "Your perl was compiled with gcc (version $Config{gccversion}), okay.\n";
Packit d03604
    $gccversion =~ s/[^\d\.]//g; # just a number please
Packit d03604
    $opts{DEFINE} .= ' -W -Wall -Wpointer-arith -Wbad-function-cast';
Packit d03604
    $opts{DEFINE} .= ' -Wno-comment -Wno-sign-compare -Wno-cast-qual';
Packit d03604
    $opts{DEFINE} .= ' -Wmissing-noreturn -Wno-unused-parameter' if $gccversion ge "3.0";
Packit d03604
    if ($is_developer && $::opt_g) {
Packit d03604
        $opts{DEFINE} .= ' -DPERL_GCC_PEDANTIC -ansi -pedantic' if $gccversion ge "3.0";
Packit d03604
        $opts{DEFINE} .= ' -Wdisabled-optimization -Wformat'    if $gccversion ge "3.0";
Packit d03604
        $opts{DEFINE} .= ' -Wmissing-prototypes';
Packit d03604
    }
Packit d03604
}
Packit d03604
Packit d03604
$opts{DEFINE} .= ' -DDBI_NO_THREADS' unless $::opt_thread;
Packit d03604
Packit d03604
# HP-UX 9 cannot link a non-PIC object file into a shared library.
Packit d03604
# Since the # .a libs that Oracle supplies contain non-PIC object
Packit d03604
# files, we sadly have to build static on HP-UX 9 :(
Packit d03604
if ($os eq 'hpux' and $osvers < 10) {
Packit d03604
    $opts{LINKTYPE} = 'static';
Packit d03604
    print "Warning: Forced to build static not dynamic on $os $osvers.\a\n";
Packit d03604
    print "** Note: DBI will be built *into* a NEW perl binary. You MUST use that new perl.\n";
Packit d03604
    print "         See README and Makefile.PL for more information.\a\n";
Packit d03604
}
Packit d03604
Packit d03604
if ($os eq 'MSWin32'  &&  $Config{libs} =~ /\bPerlCRT.lib\b/
Packit d03604
    &&  -f "$Config{archlib}/CORE/PerlCRT.lib") {
Packit d03604
    # ActiveState Perl needs this; should better be done in MakeMaker, but
Packit d03604
    # as a temporary workaround it seems ok.
Packit d03604
    $opts{LIBS} = "-L$Config{archlib}/CORE";
Packit d03604
}
Packit d03604
Packit d03604
# Set aside some values for post_initialize() in package MY
Packit d03604
my ( $cfg_privlibexp, $cfg_archlibexp, $cfg_sitelibexp, $cfg_sitearchexp,
Packit d03604
     $cfg_man3direxp ) =
Packit d03604
     @Config{qw( privlibexp archlibexp sitelibexp sitearchexp man3direxp ) };
Packit d03604
for ( $cfg_privlibexp, $cfg_archlibexp, $cfg_sitelibexp, $cfg_sitearchexp,
Packit d03604
     $cfg_man3direxp ) {
Packit d03604
     $_ = '' unless defined $_;
Packit d03604
}
Packit d03604
Packit d03604
my $conflictMsg = <
Packit d03604
***
Packit d03604
    This version of DBI conflicts with the version of
Packit d03604
    module %s (%s) you have installed.
Packit d03604
Packit d03604
    It's strongly recommended that you update it after
Packit d03604
    installing this version of DBI.
Packit d03604
***
Packit d03604
EOCM
Packit d03604
Packit d03604
sub CheckConflicts {
Packit d03604
    my %params    = @_;
Packit d03604
    my %conflicts = %{ $params{CONFLICTS} };
Packit d03604
    my $found     = 0;
Packit d03604
Packit d03604
    while ( my ( $module, $version ) = each(%conflicts) ) {
Packit d03604
        undef $@;
Packit d03604
        eval "require $module";
Packit d03604
        next if $@;
Packit d03604
        my $installed = eval "\$" . $module . "::VERSION";
Packit d03604
        if ( $installed le $version ) {
Packit d03604
            ++$found;
Packit d03604
            my $msg = $conflictMsg;
Packit d03604
            my $warning = sprintf( $msg, $module, $installed );
Packit d03604
            warn $warning;
Packit d03604
        }
Packit d03604
    }
Packit d03604
Packit d03604
    return !$found;
Packit d03604
}
Packit d03604
Packit d03604
sub WriteMakefile1 {
Packit d03604
    #Written by Alexandr Ciornii, version 0.21. Added by eumm-upgrade.
Packit d03604
    my %params       = @_;
Packit d03604
    my $eumm_version = $ExtUtils::MakeMaker::VERSION;
Packit d03604
    $eumm_version = eval $eumm_version;
Packit d03604
    die "EXTRA_META is deprecated" if ( exists( $params{EXTRA_META} ) );
Packit d03604
    die "License not specified"    if ( !exists( $params{LICENSE} ) );
Packit d03604
    if ( $params{BUILD_REQUIRES} and ( $eumm_version < 6.5503 ) ) {
Packit d03604
        #EUMM 6.5502 has problems with BUILD_REQUIRES
Packit d03604
        $params{PREREQ_PM} = { %{ $params{PREREQ_PM} || {} }, %{ $params{BUILD_REQUIRES} } };
Packit d03604
        delete $params{BUILD_REQUIRES};
Packit d03604
    }
Packit d03604
Packit d03604
    # more or less taken from Moose' Makefile.PL
Packit d03604
    if ( $params{CONFLICTS} ) {
Packit d03604
        my $ok = CheckConflicts(%params);
Packit d03604
        exit(0) if ( $params{PREREQ_FATAL} and not $ok );
Packit d03604
        my $cpan_smoker = grep { $_ =~ m/(?:CR_SMOKER|CPAN_REPORTER|AUTOMATED_TESTING)/ } keys %ENV;
Packit d03604
        unless ( $cpan_smoker || $ENV{PERL_MM_USE_DEFAULT} ) {
Packit d03604
            sleep 4 unless ($ok);
Packit d03604
        }
Packit d03604
	%{$params{META_MERGE}{conflicts}} = %{$params{CONFLICTS}};
Packit d03604
        delete $params{CONFLICTS};
Packit d03604
    }
Packit d03604
Packit d03604
    delete $params{CONFIGURE_REQUIRES} if ( $eumm_version < 6.52 );
Packit d03604
    delete $params{MIN_PERL_VERSION}   if ( $eumm_version < 6.48 );
Packit d03604
    delete $params{META_MERGE}         if ( $eumm_version < 6.46 );
Packit d03604
    delete $params{META_ADD}           if ( $eumm_version < 6.46 );
Packit d03604
    delete $params{LICENSE}            if ( $eumm_version < 6.31 );
Packit d03604
Packit d03604
    WriteMakefile(%params);
Packit d03604
}
Packit d03604
Packit d03604
$Verbose = $::opt_v;
Packit d03604
WriteMakefile1(
Packit d03604
    dbd_edit_mm_attribs(\%opts, {
Packit d03604
	create_pp_tests => 1,
Packit d03604
	create_nano_tests => 1,
Packit d03604
	create_gap_tests => 1,
Packit d03604
    })
Packit d03604
);
Packit d03604
# WriteMakefile call is last thing executed
Packit d03604
# so return value is propagated
Packit d03604
Packit d03604
Packit d03604
# =====================================================================
Packit d03604
Packit d03604
package MY;
Packit d03604
Packit d03604
sub postamble {
Packit d03604
warn <
Packit d03604
Packit d03604
    I see you're using perl $] on $Config::Config{archname}, okay.
Packit d03604
    Remember to actually *read* the README file!
Packit d03604
    Use  'make' to build the software (dmake or nmake on Windows).
Packit d03604
    Then 'make test' to execute self tests.
Packit d03604
    Then 'make install' to install the DBI and then delete this working
Packit d03604
    directory before unpacking and building any DBD::* drivers.
Packit d03604
Packit d03604
EOT
Packit d03604
warn <
Packit d03604
    Windows users need to use the correct make command.
Packit d03604
    That may be nmake or dmake depending on which Perl you are using.
Packit d03604
    If using the Win32 ActiveState build then it is recommended that you
Packit d03604
    use the ppm utility to fetch and install a prebuilt DBI instead.
Packit d03604
Packit d03604
EOT
Packit d03604
    return "";
Packit d03604
}
Packit d03604
Packit d03604
sub libscan {
Packit d03604
    my($self, $path) = @_;
Packit d03604
    ($path =~ /\~$|\B\.(svn|git)\b/) ? undef : $path;
Packit d03604
}
Packit d03604
Packit d03604
sub const_cccmd {
Packit d03604
    my $self = shift;
Packit d03604
    local($_) = $self->SUPER::const_cccmd(@_);
Packit d03604
    # If perl Makefile.PL *-g* then switch on debugging
Packit d03604
    if ($::opt_g) {
Packit d03604
	s/\s-O\d?\b//;      # delete optimise option
Packit d03604
	s/\s-/ -g -/;       # add -g option
Packit d03604
    }
Packit d03604
    $_;
Packit d03604
}
Packit d03604
Packit d03604
Packit d03604
sub post_initialize {
Packit d03604
    my($self) = shift;
Packit d03604
Packit d03604
    if ($cfg_privlibexp ne $cfg_sitelibexp) {
Packit d03604
	# this block could probably be removed now
Packit d03604
	my %old;
Packit d03604
	File::Find::find( sub {
Packit d03604
	    local $_ = $File::Find::name;
Packit d03604
	    s:\\:/:g if $os eq 'MSWin32';
Packit d03604
	    $File::Find::prune = 1, return
Packit d03604
		if -d $_ && ( $_ eq $cfg_sitelibexp ||
Packit d03604
			      $_ eq $cfg_sitearchexp ||
Packit d03604
			      $_ eq $cfg_man3direxp );
Packit d03604
	    ++$old{$_} if m:\bDB(I|D$):; # DBI files, but just DBD dirs
Packit d03604
	}, $cfg_privlibexp, $cfg_archlibexp );
Packit d03604
	if ( %old ) {
Packit d03604
	warn "
Packit d03604
Warning: By default new modules are installed into your 'site_lib'
Packit d03604
         directories. Since site_lib directories come after the normal library
Packit d03604
         directories you must delete old DBI files and directories from your
Packit d03604
         'privlib' and 'archlib' directories and their auto subdirectories.
Packit d03604
Packit d03604
Reinstall DBI and your DBD::* drivers after deleting the old directories.
Packit d03604
Packit d03604
Here's a list of probable old files and directories:
Packit d03604
Packit d03604
 " . join( "\n ", ( sort keys %old ), "\n" );
Packit d03604
	}
Packit d03604
    }
Packit d03604
Packit d03604
    # install files that DBD's may need
Packit d03604
    File::Find::find( sub {
Packit d03604
Packit d03604
	# may be '.' or '[]' depending on File::Find version
Packit d03604
	$_ = '.' if $^O eq 'VMS' && $_ eq File::Spec->curdir;
Packit d03604
Packit d03604
	$File::Find::prune = 1, return if -d $_ && '.' ne $_;
Packit d03604
	$self->{PM}->{$_} = File::Spec->catfile($self->{INST_ARCHAUTODIR}, $_)
Packit d03604
	    if '.h' eq substr( $_, -2 ) || '.xst' eq substr( $_, -4 );
Packit d03604
        }, '.' );
Packit d03604
Packit d03604
    delete $self->{$_}{"git-svn-vsn.pl"} for qw( PM MAN3PODS );
Packit d03604
Packit d03604
    return '';
Packit d03604
}
Packit d03604
Packit d03604
Packit d03604
sub post_constants {
Packit d03604
    my($self) = shift;
Packit d03604
Packit d03604
    # ensure that Driver.xst and related code gets tested
Packit d03604
    my $xst = main::dbd_postamble();
Packit d03604
    $xst =~ s/\$\(BASEEXT\)/Perl/g;
Packit d03604
    $xst .= '
Packit d03604
dbixs_rev.h: DBIXS.h Driver_xst.h dbipport.h dbivport.h dbixs_rev.pl
Packit d03604
	$(PERL) dbixs_rev.pl
Packit d03604
Packit d03604
DBI.c: Perl$(OBJ_EXT)
Packit d03604
Packit d03604
# make Changes file available as installed pod docs "perldoc DBI::Changes"
Packit d03604
inst_libdbi = ' . File::Spec->catdir($self->{INST_LIB}, 'DBI') . '
Packit d03604
changes_pm = '  . File::Spec->catfile($self->{INST_LIB}, 'DBI', 'Changes.pm') . '
Packit d03604
'.q{
Packit d03604
Packit d03604
config :: $(changes_pm)
Packit d03604
	$(NOECHO) $(NOOP)
Packit d03604
Packit d03604
$(changes_pm): Changes
Packit d03604
	$(MKPATH) $(inst_libdbi)
Packit d03604
	$(RM_F) $(changes_pm)
Packit d03604
	$(CP) Changes $(changes_pm)
Packit d03604
Packit d03604
ptest:  all
Packit d03604
	prove --blib --jobs 8 --shuffle
Packit d03604
Packit d03604
faq:
Packit d03604
	: checkin any local changes not already checked in before overwriting
Packit d03604
	svn commit --message "dbi.tiddlyspot.com FAQ update" dbi.tiddlyspot.com.html
Packit d03604
	wget --ignore-length --output-document=dbi.tiddlyspot.com.html --timestamping http://dbi.tiddlyspot.com/download
Packit d03604
	svn commit --message "dbi.tiddlyspot.com FAQ update" dbi.tiddlyspot.com.html
Packit d03604
Packit d03604
checkkeywords:
Packit d03604
	$(RM_RF) blib
Packit d03604
	find . -type f \( -name .svn -prune -o -name \*.pm -o -name \*.PL -o -name \*.pl \) \
Packit d03604
            -exec bash -c '[ -z "$$(svn pg svn:keywords {})" ] && echo svn propset svn:keywords \"Id Revision\" {}' \;
Packit d03604
Packit d03604
checkpod:
Packit d03604
	$(RM_RF) blib
Packit d03604
	find . -type f \( -name .svn -prune -o -name \*.pm -o -name \*.PL -o -name \*.pl \) \
Packit d03604
            -exec podchecker {} \; 2>&1 | grep -v 'pod syntax OK'
Packit d03604
};
Packit d03604
Packit d03604
    return $xst;
Packit d03604
}
Packit d03604
Packit d03604
# end.