# See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. # Last Modification: Wed Oct 6 13:30:32 WEST 2004 use ExtUtils::MakeMaker; use Getopt::Long(); use vars qw($opt); my ($CCLIENTLIBS, $CCLIENT_DIR, $PAM_DIR, $SSL_DIR, $KRB_DIR, $IMAP_DIR); my @objects = (); my $opt = {}; Getopt::Long::GetOptions($opt, "help" => \&usage, "cclient_dir=s" => \$CCLIENT_DIR, "with-shared_cclient" => sub { $CCLIENTLIBS = " -lc-client4"; }, "with-pam:s" => \$PAM_DIR, "with-ssl:s" => \$SSL_DIR, "with-kerberos:s" => \$KRB_DIR, "with-cclient-includes=s" => \$IMAP_DIR, ) or die < [--help]\n" unless($CCLIENT_DIR); die "CCLIENT_DIR $CCLIENT_DIR does not contain c-client.a\n" if(!-r "$CCLIENT_DIR/c-client.a"); } my %headers = (); my $osname = lc($^O); my @libs = "-L$CCLIENT_DIR/lib "; push(@libs, "-lm") if($osname eq "aix"); $LIBS = join(" ", @libs); if($CCLIENTLIBS) { print "configure with shared c-client:$CCLIENTLIBS\n"; $LIBS .= $CCLIENTLIBS; if($IMAP_DIR) { $CCLIENT_DIR = $IMAP_DIR; $headers{'HAVE_IMAP_LINKAGE'} = 1 if(-e "$IMAP_DIR/linkage.c"); } } if(defined($PAM_DIR)) { my $tmp = " -L$PAM_DIR" if($PAM_DIR); $tmp .= " -lpam"; print "configure with pam:$tmp\n"; $LIBS .= $tmp; } if(defined($SSL_DIR)) { my $tmp = " -L$SSL_DIR" if($SSL_DIR); $tmp .= " -lcrypto -lssl"; print "configure with ssl:$tmp\n"; $LIBS .= $tmp; $headers{'HAVE_IMAP_SSL'} = 1; } if(defined($KRB_DIR)) { my $tmp = " -L$KRB_DIR" if($KRB_DIR); $tmp .= " -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err"; print "configure with kerberos:$tmp\n"; $LIBS .= $tmp; } unlink("Cclient.h") if(-e "Cclient.h"); open(HEADERS, ">", "Cclient.h") or die("$!"); while(my ($key, $value) = each(%headers)) { print HEADERS "#define $key $value\n"; } close(HEADERS); unless($CCLIENTLIBS) { # # We want to turn Cclient.o (ours) plus the object files in the # $CCLIENT_DIR/c-client.a archive into a shared object. Simply # including both in the MakeMaker OBJECT list works fine for Linux # but under Digital UNIX, the combination of its ar and "ld -shared" # can't cope with simply "ar cr tmp.a Cclient.o .../c-client.a". # To get around that look at the contents of the c-client.a archive # and extract all .o files from it into the current directory. Then # we set OBJECT to be our Cclient.o plus all of those. Blech. # my @contents = (); print "Examining archive file $CCLIENT_DIR/c-client.a...\n"; chomp(@contents = `ar t $CCLIENT_DIR/c-client.a`); @objects = grep(/\.o$/, @contents); print "Extracting object files from archive: ", join(", ", @objects), "\n"; system("ar", "x", "$CCLIENT_DIR/c-client.a", @objects); my $err = $? >> 8; if ($err) { print < "Mail::Cclient", VERSION_FROM => "Cclient.pm", INC => "-I$CCLIENT_DIR", LIBS => ["$LIBS"], OBJECT => "@objects" ); exit(0); sub usage { print STDERR <<"USAGE"; Usage: perl $0 [options] Possible options are: --cclient_dir= Where is the pathname of the directory which contains the c-client.a archive library which you have just built. --with-shared_cclient Configure with support for a shared c-client library --with-pam= Configure with support for PAM. Where is the pathname of the directory which contains the libs. is optional. --with-ssl= Configure with support for SSL Where is the pathname of the directory which contains the libs. is optional. --with-kerberos= Configure with support for Kerberos Where is the pathname of the directory which contains the libs. is optional. --with-cclient-includes= Where the c-client header files live --help Print this message and exit USAGE exit 1; }