use strict; use 5.00503; use ExtUtils::MakeMaker; use Config(); use Getopt::Long(); use Data::Dumper(); my $TESTDB = "test"; my $TESTDRIVER = ""; use vars qw($opt); $opt = { help => \&Usage }; Getopt::Long::GetOptions($opt, "help", "testdb=s", "testhost=s", "testport=s", "testdsn=s", "testdriver=s", "testuser=s", "testpassword=s", ); my $source = {}; foreach my $key (qw/testdsn testdriver testdb testhost testport testuser testpassword/) { Configure($opt, $source, $key); } print <<"MSG"; I will use the following settings for compiling and testing: MSG delete $opt->{'help'}; my $keylen = 0; foreach my $key (keys %$opt) { $keylen = length($key) if length($key) > $keylen; } my $slen = 0; foreach my $val (values %$source) { $slen = length($val) if length($val) > $slen; } foreach my $key (sort {$a cmp $b} keys %$opt) { printf(" %-" . $keylen . "s (%-" . $slen . "s) = %s\n", $key, $source->{$key}, $opt->{$key}); } print <<"MSG"; To change these settings, see 'perl Makefile.PL --help'. MSG # sleep 5; eval { require File::Spec }; my $fileName = $@ ? "t/dbia.config" : File::Spec->catfile("t", "dbia.config"); die "Failed to determine location of $fileName" unless -f $fileName; if (open(FILE, ">$fileName")) { print FILE "{ my " . Data::Dumper->Dump([$opt],["opt"]) . " sub load_all { return (\n". " driver => \$opt->{'testdriver'},\n" . " host => \$opt->{'testhost'},\n" . " port => \$opt->{'testport'},\n" . " user => \$opt->{'testuser'},\n" . " password => \$opt->{'testpassword'},\n" . " db => \$opt->{'testdb'},\n" . " dsn => \$opt->{'testdsn'},\n" . " ) }\n". "} 1;\n"; close(FILE) or die "Failed to create $fileName: $!"; } # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'DBIx::PDlib', 'VERSION_FROM' => 'PDlib.pm', # finds $VERSION 'PREREQ_PM' => { 'DBI' => 0, }, ($] >= 5.005 ? ## Add these new keywords supported since 5.005 (ABSTRACT_FROM => 'PDlib.pm', # retrieve abstract from module AUTHOR => 'Josh I. Miller ') : ()), ); sub Configure { my($opt, $source, $param) = @_; if (exists($opt->{$param})) { $source->{$param} = "Users choice"; return; } if ($param eq "testdriver") { $source->{$param} = "default"; $opt->{$param} = $TESTDRIVER; } elsif ($param eq "testdb") { $source->{$param} = "default"; $opt->{$param} = $TESTDB; } elsif ($param eq "testuser" || $param eq "testpassword" || $param eq "testdsn" || $param eq "testhost" || $param eq "testport") { $source->{$param} = "default"; $opt->{$param} = ""; } else { die "Unknown configuration parameter: $param"; } } sub Usage { print STDERR <<"USAGE"; Usage: perl $0 [options] Possible options are: --testdsn= Use the DBI datasource for running the test suite Or you can connect with these: --testdriver= Use the DBD driver for running the test suite; defaults to $TESTDRIVER --testdb= Use the database for running the test suite; defaults to $TESTDB --testhost= Use as a database server for running the test suite; the default is not to specify one --testport= Use as the port number of the database; the default is not to specify one --testuser= Use the username for running the test suite; defaults to no username --testpassword= Use the password for running the test suite; defaults to no password --help Print this message and exit USAGE exit 1; } __END__