| #!/usr/bin/perl |
| # autoconf wrapper (for Unix)/alternative (for Windows) |
| # |
| # <@LICENSE> |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to you under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at: |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # </@LICENSE> |
| |
| |
| use strict; |
| use warnings; |
| use Config; |
| |
| use File::Copy; |
| use File::Spec::Functions qw(:ALL); |
| |
| use Cwd qw(chdir); |
| |
| use constant RUNNING_ON_NATIVE_WINDOWS => ($^O =~ /^(mswin|dos|os2)/i); |
| |
| |
| # Some nicer error messages. |
| $SIG{__DIE__} = sub { |
| die join(': ', $0, @_); |
| }; |
| |
| |
| # Build our argument list to call the real configure script later. |
| our @args = (q{./configure}); |
| our %args; |
| foreach (@ARGV) { |
| if (/^--([^=]+?)=["']?(.*?)["']?$/) { |
| $args{$1} = $2; |
| push(@args, $_); |
| } |
| elsif (/^([^=]+?)=["']?(.*?)["']?$/) { |
| $ENV{$1} = $2; |
| } |
| } |
| |
| |
| # Change to the dir this file is in. |
| my $srcdir; |
| $srcdir = canonpath(catpath((splitpath($0))[0..1])) || curdir(); |
| if ($srcdir ne curdir()) { |
| print "cd $srcdir\n"; |
| chdir($srcdir) || die "Can't cd to `$srcdir': $!"; |
| } |
| |
| |
| # Create version.h platform independently. |
| print join(' ', $Config{'perlpath'}, "version.h.pl") . "\n"; |
| { |
| # Do the same thing as for the preprocessor below. |
| package version_h; |
| my $Z = $0; |
| local $0 = "./version.h.pl"; |
| local @ARGV = (); |
| # Got to check for defined because the script returns shell error level! |
| unless (defined do $0) { |
| $0 = $Z; |
| die $@ ? $@ : "Can't exec `version.h.pl': $!"; |
| } |
| } |
| |
| |
| # On everything but native Windows (!= cygwin) we use autoconf. |
| unless (RUNNING_ON_NATIVE_WINDOWS) |
| { |
| print join(' ', @args) . "\n"; |
| exec @args; |
| exit 127; |
| } |
| # For Windows we've got our own little autoconf :) |
| else |
| { |
| # These are the defaults for the Makefile. |
| my %env = ( |
| CC => 'cl', |
| |
| WINCFLAGS => '/DWIN32 /W4', |
| SSLCFLAGS => '/DSPAMC_SSL', |
| |
| SRCDIR => $srcdir, |
| |
| WINLIBS => 'ws2_32.lib', |
| SSLLIBS => 'ssleay32.lib libeay32.lib', |
| |
| SPAMC_FILES => 'spamc.c getopt.c', |
| LIBSPAMC_FILES => 'libspamc.c utils.c', |
| ); |
| |
| # Enable SSL only if requested. |
| if ($args{'enable-ssl'} and $args{'enable-ssl'} ne 'yes') { |
| delete $env{SSLCFLAGS}; |
| delete $env{SSLLIBS}; |
| } |
| # Set every unset var in env to it's default value so the preprocessor |
| # gets it later on. |
| foreach (keys %env) { |
| $ENV{$_} = $env{$_} unless $ENV{$_}; |
| } |
| |
| # Now do the real work... |
| print "copy config.h.win config.h\n"; |
| copy(q{config.h.win}, q{config.h}) || die "Can't copy `config.h.win' to `config.h': $!"; |
| print "copy spamc.h.win spamc.h\n"; |
| copy(q{spamc.h.win}, q{spamc.h}) || die "Can't copy `spamc.h.win' to `spamc.h': $!"; |
| |
| # We'll use our preprocessor for variable replacement in the Makefile. |
| # Note that variables are enclosed by *two* @s while autoconf uses only |
| # one. |
| @args = ( |
| catfile(updir(), 'build', 'preprocessor'), |
| q{-Mvars}, |
| q{-iMakefile.win}, |
| q{-oMakefile} |
| ); |
| print join(' ', $Config{'perlpath'}, @args) . "\n"; |
| { |
| # We now call the preprocessor in its own namespace (so it doesn't |
| # clobber the main namespace. Feed its ARGV and do some zeroth-argument |
| # tricks to get nicer error messages. |
| package preprocessor; |
| my $Z = $0; |
| $0 = $::args[0]; |
| @ARGV = @::args[1 .. 3]; |
| # Got to check for defined because the script returns shell error level! |
| unless (defined do $0) { |
| $0 = $Z; |
| die $@ ? $@ : "Can't exec `$::args[0]': $!"; |
| } |
| } |
| |
| if ($srcdir ne curdir()) { |
| print "cd " . updir() . "\n" for splitdir($srcdir); |
| } |
| } #* RUNNING_ON_NATIVE_WINDOWS *# |