#!/usr/bin/perl -I%PREFIX%/share/bsdbuild
#
# Copyright (c) 2001-2012 Hypertriton, Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistribution of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
use BSDBuild::Core;
use BSDBuild::Builtins;
use Getopt::Long;
my $Verbose = 0;
my %Fns = (
'package' => \&package,
'version' => \&version,
'release' => \&release,
'register' => \®ister,
'register_section' => \®ister_section,
'test' => \&test,
'check' => \&test, # <2.8 compat
'require' => \&test_require,
'test_dir' => \&test_dir,
'mdefine' => \&mdefine,
'mappend' => \&mappend,
'hdefine' => \&hdefine,
'hdefine_unquoted' => \&hdefine_unquoted,
'hundef' => \&hundef,
'c_define' => \&c_define,
'c_incdir' => \&c_incdir,
'c_incprep' => \&c_incprep,
'c_libdir' => \&c_libdir,
'c_option' => \&c_option,
'ld_option' => \&ld_option,
'c_extra_warnings' => \&c_extra_warnings,
'c_fatal_warnings' => \&c_fatal_warnings,
'c_no_secure_warnings' => \&c_no_secure_warnings,
'c_incdir_config' => \&c_incdir_config,
'c_include_config' => \&c_include_config,
'config_script' => \&config_script,
'config_guess' => \&config_guess,
'check_header' => \&check_header,
'check_header_opts' => \&check_header_opts,
'check_func' => \&check_func,
'check_func_opts' => \&check_func_opts,
'check_perl_module' => \&check_perl_module,
'require_perl_module' => \&require_perl_module,
'default_dir' => \&default_dir,
);
$INSTALLDIR = '%PREFIX%/share/bsdbuild';
my @Help = ();
my $ConfigGuess = 'mk/config.guess';
my @TestDirs = ("$INSTALLDIR/BSDBuild");
my %EmulDepsTested = ();
# Specify software package name
sub package
{
my ($val) = @_;
if ($val =~ /^"(.+)"$/) { $val = $1; }
MkDefine('PACKAGE', $val);
MkSaveMK('PACKAGE');
MkSaveDefine('PACKAGE');
}
# Specify software package version
sub version
{
my ($val) = @_;
if ($val =~ /^"(.+)"$/) { $val = $1; }
MkDefine('VERSION', $val);
MkSaveMK('VERSION');
MkSaveDefine('VERSION');
}
# Specify software package release name
sub release
{
my ($val) = @_;
if ($val =~ /^"(.+)"$/) { $val = $1; }
MkDefine('RELEASE', $val);
MkSaveMK('RELEASE');
MkSaveDefine('RELEASE');
}
# Directives used in first pass; no-ops as script directives
sub register { }
sub register_section { }
sub config_guess { }
sub c_incdir_config { }
sub c_include_config { }
# Check for a header file
sub check_header
{
foreach my $hdrFile (@_) {
$hdrDef = uc($hdrFile);
$hdrDef =~ s/[\\\/\.]/_/g;
$hdrDef = 'HAVE_'.$hdrDef;
MkPrintN("checking for <$hdrFile> ($hdrDef)...");
MkCompileC $hdrDef, '', '', << "EOF";
#include <$hdrFile>
int main (int argc, char *argv[]) { return (0); }
EOF
}
}
# Check for a header file, with specific CFLAGS/LIBS.
sub check_header_opts
{
my $cflags = shift;
my $libs = shift;
foreach my $hdrFile (@_) {
$hdrDef = uc($hdrFile);
$hdrDef =~ s/[\\\/\.]/_/g;
$hdrDef = 'HAVE_'.$hdrDef;
MkPrintN("checking for <$hdrFile>...");
MkCompileC $hdrDef, $cflags, $libs, << "EOF";
#include <$hdrFile>
int main (int argc, char *argv[]) { return (0); }
EOF
}
}
# Check for a function
sub check_func
{
foreach my $funcList (@_) {
$funcDef = uc($funcList);
$funcDef =~ s/[\\\/\.]/_/g;
$funcDef = 'HAVE_'.$funcDef;
MkPrintN("checking for $funcList()...");
MkDefine('TEST_CFLAGS', '-Wall'); # Avoid failing on "conflicting types blah"
MkCompileC $funcDef, '', '', << "EOF";
#ifdef __STDC__
# include
#else
# include
#endif
#undef $funcList
#ifdef __cplusplus
extern "C"
#endif
char $funcList();
#if defined __stub_$funcList || defined __stub___$funcList
choke me
#endif
int main() {
return $funcList();
;
return 0;
}
EOF
}
}
# Check for a Perl module.
sub check_perl_module
{
my $modname = shift;
my $define = 'HAVE_'.uc($modname);
$define =~ s/::/_/;
MkPrintN("checking for Perl module $modname...");
print << "EOF";
$define="No"
MK_CACHED="No"
if [ "\${cache}" != "" ]; then
if [ -e "\${cache}/perltest-$define" ]; then
$define=`cat \${cache}/perltest-$define`
MK_CACHED="Yes"
fi
fi
if [ "\${MK_CACHED}" = "No" ]; then
cat /dev/null | \${PERL} -M$modname 2>/dev/null
if [ \$? != 0 ]; then
echo "-> not found (\$?)" >> config.log
$define="no"
echo "no"
else
echo "-> found" >> config.log
$define="yes"
echo "yes"
fi
fi
EOF
}
# Check for a Perl module and fail if not found.
sub require_perl_module
{
my $modname = shift;
my $define = 'HAVE_'.uc($modname);
$define =~ s/::/_/;
check_perl_module($modname);
MkIf "\"\$\{$define\}\" != \"yes\"";
MkPrint('* ');
MkPrint("* This software requires the $modname module.");
MkPrint("* Get it from CPAN (http://cpan.org/).");
MkPrint('* ');
MkFail('configure failed!');
MkEndif;
}
# Specify an alternate installation directory default.
sub default_dir
{
my $dir = shift;
my $default = shift;
if ($dir =~ /^"(.*)"$/) { $dir = $1; }
if ($default =~ /^"(.*)"$/) { $default = $1; }
MkIf "\"\$\{${dir}_SPECIFIED\}\" != \"yes\"";
MkDefine($dir, $default);
MkSaveDefine($dir);
MkSaveMK($dir);
MkEndif;
}
# Check for a function with CFLAGS and LIBS
sub check_func_opts
{
my $cflags = shift;
my $libs = shift;
foreach my $funcList (@_) {
$funcDef = uc($funcList);
$funcDef =~ s/[\\\/\.]/_/g;
$funcDef = 'HAVE_'.$funcDef;
MkPrintN("checking for $funcList()...");
MkDefine('TEST_CFLAGS', '-Wall'); # Avoid failing on "conflicting types blah"
MkCompileC $funcDef, $cflags, $libs, << "EOF";
#ifdef __STDC__
# include
#else
# include
#endif
#undef $funcList
#ifdef __cplusplus
extern "C"
#endif
char $funcList();
#if defined __stub_$funcList || defined __stub___$funcList
choke me
#endif
int main() {
return $funcList();
;
return 0;
}
EOF
}
}
# Add a directory containing extra test modules.
sub test_dir
{
foreach my $dir (@_) {
unless (-e $dir) {
print STDERR "TEST_DIR $dir: $!; ignoring\n";
next;
}
push @TestDirs, $dir;
}
}
# Execute one of the standard BSDBuild tests.
sub test
{
my @args = @_;
my ($t) = shift(@args);
my $mod = undef;
foreach my $dir (@TestDirs) {
my $path = $dir.'/'.$t.'.pm';
if (-e $path) {
$mod = $path;
last;
}
}
if (!defined($mod)) {
print STDERR "No such test module: $t\n";
exit (1);
}
do($mod);
if ($@) {
print STDERR $@;
exit (1);
}
if (exists($DEPS{$t})) {
foreach my $dep (split(',', $DEPS{$t})) {
if (!exists($done{$dep})) {
print STDERR "$t depends on: $dep\n";
exit(1);
}
}
}
my $c;
if ($EmulOS) {
unless (exists($EMUL{$t}) && defined($EMUL{$t})) {
print STDERR "Missing EMUL for $t\n";
exit(1);
}
if (exists($EMULDEPS{$t})) {
foreach my $ed (@{$EMULDEPS{$t}}) {
if (!exists($EmulDepsTested{$ed})) {
test($ed);
$EmulDepsTested{$ed} = 1;
}
}
}
$c = $EMUL{$t};
@args = ($EmulOS, $EmulOSRel, '');
} else {
$c = $TESTS{$t};
}
if ($c) {
MkPrintN("checking for $DESCR{$t}...");
&$c(@args);
if ($EmulOS) {
MkPrintN("ok\n");
}
}
$done{$t} = 1;
}
# Execute one of the standard BSDBuild tests, abort if the test fails.
sub test_require
{
my ($t, $ver) = @_;
my $def = 'HAVE_'.uc($t);
test(@_);
if ($EmulOS) {
return;
}
MkIf "\"\$\{$def\}\" != \"yes\"";
MkPrint('* ');
MkPrint("* This software requires $t installed on your system.");
MkPrint('* ');
MkFail('configure failed!');
MkEndif;
if ($ver) {
MkIf '"${MK_VERSION_OK}" != "yes"';
MkPrint('* ');
MkPrint("* This software requires $t version >= $ver,");
MkPrint("* please upgrade and try again.");
MkPrint('* ');
MkFail('configure failed!');
MkEndif;
}
}
# Make environment define
sub mdefine
{
my ($def, $val) = @_;
if ($val =~ /^"(.*)"$/) { $val = $1; }
MkDefine($def, $val);
MkSaveMK($def);
}
# Append to make environment define
sub mappend
{
my ($def, $val) = @_;
if ($val =~ /^"(.*)"$/) { $val = $1; }
MkDefine($def, "\${$def} $val");
MkSaveMK($def);
}
# Header define
sub hdefine
{
my ($def, $val) = @_;
if ($val =~ /^"(.*)"$/) { $val = $1; }
MkDefine($def, $val);
MkSaveDefine($def);
}
# Header define unquoted
sub hdefine_unquoted
{
my ($def, $val) = @_;
if ($val =~ /^"(.+)"$/) { $val = $1; }
MkDefine($def, $val);
MkSaveDefineUnquoted($def);
}
# Header undef
sub hundef
{
my $def = shift;
MkSaveUndef($def);
}
# C/C++ define
sub c_define
{
my $def = shift;
MkDefine('CFLAGS', '$CFLAGS -D'.$def);
MkDefine('CXXFLAGS', '$CXXFLAGS -D'.$def);
MkSaveMK('CFLAGS');
MkSaveMK('CXXFLAGS');
print {$LUA} "table.insert(package.defines,{\"$def\"})\n";
}
# C/C++ include directory
sub c_incdir
{
my $dir = shift;
my $qdir = $dir;
# if ($dir =~ /^\$/) { $qdir = '\"'.$dir.'\"'; }
MkDefine('CFLAGS', '$CFLAGS -I'.$qdir);
MkDefine('CXXFLAGS', '$CXXFLAGS -I'.$qdir);
MkSaveMK('CFLAGS');
MkSaveMK('CXXFLAGS');
if ($EmulEnv eq 'vs2005') {
$dir =~ s/\$SRC/\$\(SolutionDir\)/g;
$dir =~ s/\$BLD/\$\(SolutionDir\)/g;
} else {
$dir =~ s/\$SRC/\.\./g;
$dir =~ s/\$BLD/\.\./g;
}
print {$LUA} "table.insert(package.includepaths,{\"$dir\"})\n";
}
# Include file preprocessing
sub c_incprep
{
my $dir = shift;
print << "EOF";
if [ ! -e "$dir" ]; then
mkdir -p "$dir"
fi
if [ "\${includes}" = "link" ]; then
\$ECHO_N "* Linking C include files..."
if [ "\${SRCDIR}" != "\${BLDDIR}" ]; then
(cd \${SRCDIR} && \${PERL} mk/gen-includelinks.pl "\${SRCDIR}" "$dir" 1>>\${BLDDIR}/config.log 2>&1)
else
\${PERL} mk/gen-includelinks.pl "\${SRCDIR}" "$dir" 1>>config.log 2>&1
fi
if [ \$? != 0 ]; then
echo "\${PERL} mk/gen-includelinks.pl failed"
exit 1
fi
echo "done"
else
if [ "\${PERL}" = "" ]; then
echo "*"
echo "* The --includes=yes option requires perl, but no perl"
echo "* interpreter was found. If perl is unavailable, please"
echo "* please rerun configure with --includes=link instead."
echo "*"
exit 1
fi
\$ECHO_N "* Preprocessing C include files..."
if [ "\${SRCDIR}" != "\${BLDDIR}" ]; then
(cd \${SRCDIR} && \${PERL} mk/gen-includes.pl "$dir" 1>>\${BLDDIR}/config.log 2>&1)
else
\${PERL} mk/gen-includes.pl "$dir" 1>>config.log 2>&1
fi
if [ \$? != 0 ]; then
echo "\${PERL} mk/gen-includes.pl failed"
exit 1
fi
echo "done"
fi
EOF
}
# C/C++ library directory
sub c_libdir
{
my $dir = shift;
# if ($dir =~ /^\$/) { $qdir = '\"'.$dir.'\"'; }
MkDefine('LIBS', '$LIBS -L'.$dir);
MkSaveMK('LIBS');
$dir =~ s/\$SRC/\./g;
print {$LUA} "table.insert(package.libpaths,{\"$dir\"})\n";
}
# Extra compiler warnings
sub c_extra_warnings
{
print {$LUA} 'table.insert(package.buildflags,{"extra-warnings"})'."\n";
}
# Fatal warnings
sub c_fatal_warnings
{
print {$LUA} 'table.insert(package.buildflags,{"extra-warnings"})'."\n";
}
# Disable _CRT_SECURE warnings (win32)
sub c_no_secure_warnings
{
print {$LUA} << "EOF";
if (windows) then
table.insert(package.defines,{"_CRT_SECURE_NO_WARNINGS"})
table.insert(package.defines,{"_CRT_SECURE_NO_DEPRECATE"})
end
EOF
}
# C compiler option
sub c_option
{
my $opt = shift;
MkDefine('CFLAGS', '$CFLAGS '.$opt);
MkDefine('CXXFLAGS', '$CXXFLAGS '.$opt);
MkSaveMK('CFLAGS');
MkSaveMK('CXXFLAGS');
}
# Linker option
sub ld_option
{
my $opt = shift;
MkDefine('LDFLAGS', '$LDFLAGS'.$opt);
MkSaveMK('LDFLAGS');
}
# Generate a "foo-config" style script.
sub config_script
{
my ($out, $cflags, $libs) = @_;
if ($out =~ /^"(.+)"$/) { $out = $1; }
if ($cflags =~ /^"(.+)"$/) { $cflags = $1; }
if ($libs =~ /^"(.+)"$/) { $libs = $1; }
print "config_script_out=\"$out\"\n";
print "config_script_cflags=\"$cflags\"\n";
print "config_script_libs=\"$libs\"\n";
print << 'EOF';
# Avoid breakage with existing trees compiled before BSDBuild 2.8.
if [ -d "$config_script_out" ]; then
echo "rm -fR $config_script_out"
rm -fR $config_script_out
fi
if [ "${SRC}" != "" ]; then
if [ -d "${SRC}/$config_script_out" ]; then
echo "rm -fR ${SRC}/$config_script_out"
rm -fR ${SRC}/$config_script_out
fi
fi
cat << EOT > $config_script_out
#!/bin/sh
# Generated for ${PACKAGE} by BSDBuild %VERSION%.
#
prefix="${PREFIX}"
exec_prefix="${EXEC_PREFIX}"
exec_prefix_set="no"
libdir="${LIBDIR}"
usage="\
Usage: $config_script_out [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--cflags] [--libs]"
if test \$# -eq 0; then
echo "\${usage}" 1>&2
exit 1
fi
while test \$# -gt 0; do
case "\$1" in
-*=*)
optarg=\`echo "\$1" | LC_ALL="C" sed 's/[-_a-zA-Z0-9]*=//'\`
;;
*)
optarg=
;;
esac
case \$1 in
--prefix=*)
prefix=\$optarg
if test \$exec_prefix_set = no ; then
exec_prefix=\$optarg
fi
;;
--prefix)
echo "\$prefix"
;;
--exec-prefix=*)
exec_prefix=\$optarg
exec_prefix_set=yes
;;
--exec-prefix)
echo "\$exec_prefix"
;;
--version)
echo "${VERSION}"
;;
--cflags)
echo "$config_script_cflags"
;;
--libs | --static-libs)
echo "$config_script_libs"
;;
*)
echo "\${usage}" 1>&2
exit 1
;;
esac
shift
done
EOT
EOF
}
#
# End macros
#
# Process REGISTER() in first pass.
sub pass1_register
{
my ($arg, $descr) = @_;
if ($arg =~ /\"(.*)\"/) { $arg = $1; }
if ($descr =~ /\"(.*)\"/) { $descr = $1; }
my $darg = pack('A' x 27, split('', $arg));
push @Help, "echo \" $darg $descr\"";
}
# Process REGISTER_SECTION() in first pass.
sub pass1_register_section
{
my ($s) = @_;
if ($s =~ /\"(.*)\"/) { $s = $1; }
push @Help, "echo \"\"";
push @Help, "echo \"$s\"";
}
# Process CONFIG_GUESS() in first pass.
sub pass1_config_guess
{
my ($s) = @_;
if ($s =~ /\"(.*)\"/) { $s = $1; }
if ($Verbose) {
print STDERR "Using config.guess: $s\n";
}
$ConfigGuess = $s;
}
# Specify target ./config include directory.
sub pass1_c_incdir_config
{
my $dir = shift;
if ($dir) {
$OutputHeaderDir = $dir;
} else {
$OutputHeaderDir = undef;
}
}
# Specify target monolithic config header file.
sub pass1_c_include_config
{
my $file = shift;
if ($file) {
print << "EOF";
if [ -e "$file" ]; then
echo "* Overwriting $file"
rm -f "$file"
fi
EOF
$OutputHeaderFile = $file;
} else {
$OutputHeaderFile = undef;
}
}
sub Help
{
my %stdOpts = (
'--srcdir=p' => 'Source directory for concurrent build',
'--build=s' => 'Host environment for build',
'--host=s' => 'Cross-compile for target environment',
'--byte-order=s' => 'Byte order for build (LE|BE)',
'--prefix=p' => 'Installation base',
'--exec-prefix=p' => 'Machine-dependent installation base',
'--bindir=p' => 'Executables for common users',
'--libdir=p' => 'System libraries',
'--moduledir=P' => 'Dynamically loaded modules',
'--libexecdir=p' => 'Executables for program use',
'--datadir=P' => 'Data files for program use',
'--statedir=P' => 'Modifiable single-machine data',
'--sysconfdir=P' => 'System configuration files',
'--localedir=p' => 'Multi-language support locales',
'--mandir=p' => 'Manual page documentation',
'--testdir=p' => 'Execute all tests in this directory',
'--cache=p' => 'Cache ./configure results in directory',
'--includes=s' => 'Preprocess C headers (yes|no|link)',
'--enable-nls' => 'Multi-language support',
'--with-gettext' => 'Use gettext for multi-language',
'--with-libtool' => 'Specify path to libtool',
'--with-manpages' => 'Generate Unix manual pages',
'--with-catman' => 'Install cat files for manual pages',
'--with-manlinks' => 'Add manual entries for every function',
'--with-ctags' => 'Generate ctags(1) tag files',
'--with-docs' => 'Generate printable documentation',
);
my %stdDefaults = (
'--srcdir=p' => '.',
'--build=s' => 'auto-detect',
'--host=s' => 'BUILD',
'--byte-order=s' => 'auto-detect',
'--prefix=p' => '/usr/local',
'--exec-prefix=p' => 'PREFIX',
'--bindir=p' => 'PREFIX/bin',
'--libdir=p' => 'PREFIX/lib',
'--moduledir=P' => 'PREFIX/lib',
'--libexecdir=p' => 'PREFIX/libexec',
'--datadir=P' => 'PREFIX/share',
'--statedir=P' => 'PREFIX/var',
'--sysconfdir=P' => 'PREFIX/etc',
'--localedir=p' => 'DATADIR/locale',
'--mandir=p' => 'PREFIX/man',
'--testdir=p' => '.',
'--cache=p' => 'none',
'--includes=s' => 'yes',
'--enable-nls' => 'no',
'--with-gettext' => 'auto-detect',
'--with-libtool' => 'auto-detect',
'--with-manpages' => 'yes',
'--with-catman' => 'auto-detect',
'--with-manlinks' => 'no',
'--with-ctags' => 'no',
'--with-docs' => 'no',
);
print << 'EOF';
echo "This configure script was generated by BSDBuild %VERSION%."
echo ""
echo ""
echo "Usage: ./configure [options]"
echo ""
echo "Standard build options:"
EOF
foreach my $opt (sort keys %stdOpts) {
my ($optName, $optSpec) = split('=', $opt);
if (defined($optSpec) && $optSpec eq 'p') {
$optName = $optName.'=DIR';
} elsif (defined($optSpec) && $optSpec eq 'P') {
$optName = $optName.'=DIR|NONE';
} elsif (defined($optSpec) && $optSpec eq 's') {
$optName = $optName.'=STRING';
}
my $optFmt = pack('A' x 25, split('', $optName));
print 'echo " '.$optFmt.' '.$stdOpts{$opt};
if (exists($stdDefaults{$opt})) {
print ' ['.$stdDefaults{$opt}.']';
}
print "\"\n";
}
print join("\n",@Help),"\n";
print "exit 1\n";
}
sub Version
{
print << "EOF";
if [ "${PACKAGE}" != "" ]; then
echo "BSDBuild %VERSION%, for ${PACKAGE} ${VERSION}"
else
echo "BSDBuild %VERSION%"
fi
exit 1
EOF
}
#
# BEGIN
#
my $res = GetOptions(
"verbose" => \$Verbose,
"emul-os=s" => \$EmulOS,
"emul-osrel=s" => \$EmulOSRel,
"emul-env=s" => \$EmulEnv,
"output-lua=s" => \$OutputLUA
);
print << 'EOF';
#!/bin/sh
#
# Do not edit!
# This file was generated from configure.in by BSDBuild %VERSION%.
#
# To regenerate this file, get the latest BSDBuild release from
# http://hypertriton.com/bsdbuild/, and use the command:
#
# $ cat configure.in | mkconfigure > configure
#
EOF
open($LUA, ">$OutputLUA");
print { $LUA } << 'EOF';
-- Public domain
--
-- Do not edit!
-- This file was generated from configure.in by BSDBuild %VERSION%.
--
-- To regenerate this file, get the latest BSDBuild release from
-- http://bsdbuild.hypertriton.com/, and use the command:
--
-- $ cat configure.in | mkconfigure > configure
--
hdefs = {}
mdefs = {}
EOF
#
# Initialize and parse for command-line options.
#
print << 'EOF';
# Copyright (c) 2001-2012 Hypertriton, Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
PACKAGE="Untitled"
VERSION=""
RELEASE=""
optarg=
for arg
do
case "$arg" in
-*=*)
optarg=`echo "$arg" | sed 's/[-_a-zA-Z0-9]*=//'`
;;
*)
optarg=
;;
esac
case "$arg" in
--build=*)
build_arg=$optarg
;;
--host=*)
host_arg=$optarg
;;
--target=*)
target=$optarg
;;
--emul-os=*)
PROJ_TARGET=$optarg
;;
--byte-order=*)
byte_order=$optarg
;;
--prefix=*)
prefix=$optarg
;;
--exec-prefix=*)
exec_prefix=$optarg
;;
--sysconfdir=*)
sysconfdir=$optarg
;;
--bindir=*)
bindir=$optarg
;;
--libdir=*)
libdir=$optarg
;;
--moduledir=*)
moduledir=$optarg
;;
--libexecdir=*)
libexecdir=$optarg
;;
--datadir=*)
datadir=$optarg
;;
--statedir=* | --localstatedir=*)
statedir=$optarg
;;
--localedir=*)
localedir=$optarg
;;
--mandir=*)
mandir=$optarg
;;
--infodir=* | --datarootdir=* | --docdir=* | --htmldir=* | --dvidir=* | --pdfdir=* | --psdir=* | --sharedstatedir=* | --sbindir=*)
;;
--enable-*)
option=`echo $arg | sed -e 's/--enable-//' -e 's/=.*//'`
option=`echo $option | sed 's/-/_/g'`
case "$arg" in
*=*)
eval "enable_${option}='$optarg'"
eval "prefix_${option}='$optarg'"
;;
*)
eval "enable_${option}=yes"
;;
esac
;;
--disable-*)
option=`echo $arg | sed -e 's/--disable-//'`;
option=`echo $option | sed 's/-/_/g'`
eval "enable_${option}=no"
;;
--with-*)
option=`echo $arg | sed -e 's/--with-//' -e 's/=.*//'`
option=`echo $option | sed 's/-/_/g'`
case "$arg" in
*=*)
eval "with_${option}='$optarg'"
eval "prefix_${option}='$optarg'"
;;
*)
eval "with_${option}=yes"
;;
esac
;;
--without-*)
option=`echo $arg | sed -e 's/--without-//'`;
option=`echo $option | sed 's/-/_/g'`
eval "with_${option}=no"
;;
--help)
show_help=yes
;;
--version)
show_version=yes
;;
--srcdir=*)
srcdir=$optarg
;;
--testdir=*)
testdir=$optarg
;;
--cache=*)
cache=$optarg
;;
--includes=*)
includes=$optarg
;;
--cache-file=*)
;;
--config-cache | -C)
;;
*)
echo "invalid argument: $arg"
echo "try ./configure --help"
exit 1
;;
esac
done
EOF
#
# See if we can use "echo -n"
#
print << 'EOF';
if [ -e "/bin/echo" ]; then
/bin/echo -n ""
if [ $? = 0 ]; then
ECHO_N="/bin/echo -n"
else
ECHO_N="echo -n"
fi
else
ECHO_N="echo -n"
fi
EOF
#
# Check if perl is available.
#
print << 'EOF';
PERL=""
for path in `echo $PATH | sed 's/:/ /g'`; do
if [ -x "${path}" ]; then
if [ -e "${path}/perl" ]; then
PERL="${path}/perl"
break
fi
fi
done
EOF
#
# Check if pkgconfig is available.
#
print << 'EOF';
PKGCONFIG=""
for path in `echo $PATH | sed 's/:/ /g'`; do
if [ -x "${path}" ]; then
if [ -e "${path}/pkg-config" ]; then
PKGCONFIG="${path}/pkg-config"
break
fi
fi
done
EOF
#
# Sort out the installation, build and source directories. If build is
# outside of the source directory, generate the required environment in
# the working directory using mkconcurrent.pl.
#
print << 'EOF';
if [ "${prefix}" != "" ]; then
PREFIX="$prefix"
else
PREFIX="/usr/local"
fi
if [ "${exec_prefix}" != "" ]; then
EXEC_PREFIX="$exec_prefix"
else
EXEC_PREFIX="${PREFIX}"
fi
if [ "${srcdir}" != "" ]; then
if [ "${PERL}" = "" ]; then
echo "*"
echo "* Separate build (--srcdir) requires perl, but there is"
echo "* no perl interpreter to be found in your PATH."
echo "*"
exit 1
fi
SRC=${srcdir}
else
SRC=`pwd`
fi
BLD=`pwd`
SRCDIR="${SRC}"
BLDDIR="${BLD}"
if [ "${testdir}" != "" ]; then
echo "Configure tests will be executed in ${testdir}"
if [ ! -e "${testdir}" ]; then
echo "Creating ${testdir}"
mkdir ${testdir}
fi
else
testdir="."
fi
EOF
#
# Check for the --includes option.
#
print << 'EOF';
if [ "${includes}" = "" ]; then
includes="yes"
fi
case "${includes}" in
yes|no)
;;
link)
if [ "${with_proj_generation}" ]; then
echo "Cannot use --includes=link with --with-proj-generation!"
exit 1
fi
;;
*)
echo "Usage: --includes [yes|no|link]"
exit 1
;;
esac
EOF
#
# Create empty ".depend" files, otherwise the initial "make depend" will
# fail due to "include .depend" use in , etc. We currently
# rely on perl to do this properly (if perl is unavailable, empty .depend
# files can still be created manually).
#
print << "EOF";
if [ "\${srcdir}" = "" ]; then
cat << EOT > configure.dep.pl
EOF
my @code = ();
open(SCRIPT, "$INSTALLDIR/gen-dotdepend.pl") || die "gen-dotdepend.pl: $!";
foreach my $s (