#! /usr/bin/perl -w
my $message = << 'END';
#limalautoconf [-h|--help]
#
#Create LiMaL configure.in from configure.in.in
#
#Available macros in the configure.in.in:
#  @RPMNAME@                - reads it from file RPMNAME
#  @RPMARCH@                - reads it from file RPMNAME (list of archs)
#  @RPMLIB@                 - reads it from file RPMNAME
#  @VERSION@                - reads it from file VERSION
#  @MAINTAINER@             - reads it from file MAINTAINER
#
#  @LIMAL-INIT-COMMON@      - Initialization. The generated configure.in
#                              will not work without it (or its equivalent)
#  @LIMAL-INIT-PROGRAM@     - Initilazation necessary for packages with programs
#  @LIMAL-INIT-PO@          -                        with translations
#  @LIMAL-CHECKS-COMMON@    - Checks for tools needed by all LiMaL code
#  @LIMAL-CHECKS-PROGRAM@   - Additional checks for packages with programs
#  @LIMAL-CHECKS-PO@        - Checks for translation utils
#  @LIMAL-CHECKS-QT@        - Checks for Qt paths
#  @LIMAL-CHECKS-SWIG@      - Checks for swig paths
#  @LIMAL-CHECKS-PERL@      - Checks for embeded perl
#  @LIMAL-CHECKS-BLOCXX@    - Checks for BloCxx library and includes
#  @LIMAL-CHECKS-LIMAL@     - Checks for LiMaL core library and includes
#  @LIMAL-CHECKS-TESTSUITE@ - Checks for expect and dejagnu
#
#  @LIMAL-OUTPUT@           - Creates list of Makefiles to be generated
END
#Authors:
#  Jan Holesovsky <kendy@suse.cz>, 2001
#  Michal Svec <msvec@suse.cz>
#
# $Id: limalautoconf 1861 2006-08-08 13:00:59Z mc $

if ($#ARGV >= 0 && ($ARGV[0] eq "-h" || $ARGV[0] eq "--help"))
{
    $message =~ s/^#//gm;	# there used to be sed here
    die $message;
}

$RPMNAME = `cat RPMNAME`;
$RPMARCH = `cat RPMARCH 2>/dev/null`;
$RPMLIB  = $RPMNAME; $RPMLIB  =~ s/^[^-]*-//g;
$VERSION = `cat VERSION`;
$MAINTAINER = `cat MAINTAINER`;

chomp $RPMNAME;
chomp $RPMARCH;
chomp $VERSION;
chomp $MAINTAINER;
chomp $RPMLIB;

$OUTPUT = qx(SUBDIRS=`cat SUBDIRS 2> /dev/null` ;
	     [ -z "\$SUBDIRS" ] && SUBDIRS="./" ;
	     for DIR in \$SUBDIRS ;
	       do find \$DIR -name 'Makefile.am' | grep -v "^./$RPMNAME-" | grep -v '^\\./Makefile.am\$' | grep -v '^po/' | sed 's/.am\$//' ;
	     done;
	     [ -d "po" ] && echo "po/Makefile.in");

%macros =
(

    # common variables
    '@RPMNAME@' => $RPMNAME,
    '@RPMARCH@' => $RPMARCH,
    '@RPMLIB@' => $RPMLIB,
    '@VERSION@' => $VERSION,
    '@MAINTAINER@' => $MAINTAINER,

    # init: common stuff
    '@LIMAL-INIT-COMMON@' =>
"AC_INIT($RPMNAME, $VERSION, http://www.suse.de/feedback, $RPMNAME)
dnl Check for presence of file 'RPMNAME'
AC_CONFIG_SRCDIR([RPMNAME])

dnl Checking host/target/build systems, for make, install etc.
AC_CANONICAL_TARGET
dnl Perform program name transformation
AC_ARG_PROGRAM

AC_PREFIX_DEFAULT(/usr)

AM_INIT_AUTOMAKE(tar-ustar) dnl searches for some needed programs

dnl Important LiMaL variables
VERSION=\"$VERSION\"
RPMNAME=\"$RPMNAME\"
RPMARCH=\"$RPMARCH\"
RPMLIB=\"$RPMLIB\"
MAINTAINER=\"$MAINTAINER\"
". '
limalbindir=\${bindir}
limallibdir=\${libdir}/limal
limaldatadir=\${prefix}/share/limal
limalincludedir=\${includedir}/limal

dnl pkgconfig honors lib64
pkgconfigdir=\${libdir}/pkgconfig
case $RPMARCH in
noarch) pkgconfigdir=\${prefix}/share/pkgconfig ;;
esac

docdir=\${prefix}/share/doc/packages/$RPMNAME
mandir=\${prefix}/share/man

potdir=\${docdir}/pot
pobindir=${limaldatadir}/po-tools
localedir=\${prefix}/share/locale

AC_SUBST(VERSION)
AC_SUBST(RPMNAME)
AC_SUBST(RPMLIB)
AC_SUBST(MAINTAINER)

AC_SUBST(limallibdir)
AC_SUBST(limalbindir)
AC_SUBST(limaldatadir)
AC_SUBST(limalincludedir)

AC_SUBST(pkgconfigdir)

AC_SUBST(docdir)
AC_SUBST(mandir)

AC_SUBST(potdir)
AC_SUBST(pobindir)
AC_SUBST(localedir)
',

    # init: prog
    '@LIMAL-INIT-PROGRAM@' =>
'',

    # init: translation
    '@LIMAL-INIT-PO@' =>
'LL=${RPMNAME##*-}
AC_SUBST(LL)

AC_ARG_WITH(own_compendium,
	    AS_HELP_STRING([--with-own_compendium=FILE],
			   [Location of compendium file]),
	    limalcompendium=yes, limalcompendium=no)
if test "x$with_own_compendium" = "x" ; then
  COMPENDIUM=\'../../memory/limal.$(LL).po\'
else
  COMPENDIUM=${with_own_compendium}
fi
AC_SUBST(COMPENDIUM)
',


    # check: common stuff
    '@LIMAL-CHECKS-COMMON@' =>
'dnl Checks for programs.
AC_PROG_INSTALL
INSTALL="${INSTALL} -p"
AC_PROG_LN_S
AC_PROG_MAKE_SET

dnl pkgconfig
AC_ARG_VAR([PKG_CONFIG_PATH], [where to search for pkg-config files])
dnl devtools
dnl ...
dnl producing pkg-config for others?
AM_CONDITIONAL(CREATE_PKGCONFIG, test x${CREATE_PKGCONFIG} = xtrue)

dnl no need for AC_ARG_VAR
AC_PATH_PROG(XGETTEXT, xgettext)
if test -z "$XGETTEXT" ; then
    AC_MSG_ERROR(xgettext is missing; please install gettext.)
fi

dnl Check docbook installation
LIMAL_CHECK_DOCBOOK

devtools_limalbindir=`pkg-config --variable=limalbindir limal-devtools`
devtools_limaldatadir=`pkg-config --variable=limaldatadir limal-devtools`

dbdir=${devtools_limaldatadir}/docbook
STYLESHEET_HTML=${dbdir}/stylesheets/limal-customize-html.xsl
STYLESHEET_PDF=${dbdir}/stylesheets/limal-customize-fo.xsl
STYLESHEET_CSS=${dbdir}/css/limaldocs.css
AC_SUBST(STYLESHEET_HTML)
AC_SUBST(STYLESHEET_PDF)
AC_SUBST(STYLESHEET_CSS)
',

    # check: program
    '@LIMAL-CHECKS-PROGRAM@' =>
'
AC_PATH_PROG(LIMALDOXYGEN, limaldoxygen, false, $PATH:$devtools_limalbindir)
if test "$LIMALDOXYGEN" = "false"; then
    AC_MSG_ERROR([limaldoxygen is not installed])
fi

AC_PROG_CXX
AC_PROG_AWK
AC_PROG_CC
AC_PROG_CPP
AC_PROG_CXX
AC_LANG(C++)

CFLAGS="${CFLAGS} -W -Wall"
CXXFLAGS="${CXXFLAGS} -W -Wall"

dnl Check large file support via AC_SYS_LARGEFILE
dnl  - adds the --disable-largefile option
dnl  - substitutes LFS_CPPFLAGS variable
LIMAL_CHECK_LARGEFILE
if test "x${LFS_CPPFLAGS}" != x ; then
    CPPFLAGS="${CPPFLAGS} ${LFS_CPPFLAGS}"
fi

dnl Libtool checks
AC_DISABLE_STATIC
AC_PROG_LIBTOOL
AM_PROG_LIBTOOL dnl for libraries

dnl generate the config header
AC_CONFIG_HEADERS([config.h]) dnl at the distribution this done

AC_FUNC_ALLOCA
AC_FUNC_STRERROR_R
AC_HEADER_STDC
',

    # check: qt
    '@LIMAL-CHECKS-QT@' =>
'dnl Check qt paths
QTDIR="/usr/lib/qt3"
QTLIBDIR="${QTDIR}/lib"
AC_ARG_WITH(qt-dir,
    AS_HELP_STRING([--with-qt-dir=DIR],
		   [where the root of Qt is installed.]),
    [ QTDIR="$withval" ])
AC_ARG_WITH(qt-libdir,
    AS_HELP_STRING([--with-qt-libdir=DIR],
		   [where the Qt library is installed.]),
    [ QTLIBDIR="$withval" ])
AC_SUBST(QTDIR)
AC_SUBST(QTLIBDIR)

dnl Try to find the X includes and libraries
AC_PATH_X
if test -n "$x_includes"; then
	CPPFLAGS="$CPPFLAGS -I$x_includes"
fi
if test -n "$x_libraries"; then
	LDFLAGS="$LDFLAGS -L$x_libraries"
fi
',

    # check: Swig
    '@LIMAL-CHECKS-SWIG@' =>
'dnl Check Swig installation
LIMAL_CHECK_SWIG
',

    # check: Perl
    '@LIMAL-CHECKS-PERL@' =>
'dnl Check Perl installation
LIMAL_CHECK_PERL
',

    # check: BloCxx
    '@LIMAL-CHECKS-BLOCXX@' =>
'dnl Check BloCxx installation
LIMAL_CHECK_BLOCXX([1.0.0])
',

    # check: LiMaL (core) and blocxx large file check
    '@LIMAL-CHECKS-LIMAL@' =>
'dnl Check BloCxx installation
LIMAL_CHECK_BLOCXX([1.0.0])

dnl Check LiMaL (core lib) installation
LIMAL_CHECK_LIMAL([1.2.0])
',

    # check: translations
    '@LIMAL-CHECKS-PO@' =>
'
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION(0.14.3)
',

    # check: testsuite
    '@LIMAL-CHECKS-TESTSUITE@' =>
'dnl Check packages expect and dejagnu
AC_PATH_PROG(MYEXPECT, expect, false)
if test "$MYEXPECT" = "false"; then
	AC_MSG_ERROR([expect not installed])
fi
AC_PATH_PROG(MYRUNTEST, runtest, false)
if test "$MYRUNTEST" = "false"; then
	AC_MSG_ERROR([dejagnu not installed])
fi
',

    # generate output
    '@LIMAL-OUTPUT@' =>
"AC_CONFIG_FILES(Makefile $OUTPUT)
AC_OUTPUT
"
);

# main program
print STDERR "limalautoconf: Generating toplevel configure.in\n";

open(INPUT, '<', "configure.in.in") or die "limalautoconf: Cannot open configure.in.in!\n";
open(OUTPUT, '>', "configure.in") or die "limalautoconf: Cannot open configure.in!\n";

print OUTPUT
    "dnl configure.in for $RPMNAME\n" .
    "dnl\n" .
    "dnl -- This file is generated by limalautoconf - DO NOT EDIT! --\n" .
    "dnl    (edit configure.in.in instead)\n";

$unknown_macro = 0;

while (<INPUT>)
{
    if (! /^##.*/)
    {
	foreach $macro_name ( keys %macros )
	{
	    s/$macro_name/$macros{$macro_name}/g;
	}

	if (/^\@.+\@/)
	{
	    chomp;
	    print STDERR "limalautoconf: ERROR: unknown macro $_\n";
	    $unknown_macro = 1;
	}

	print OUTPUT;
    }
}
close (INPUT);
close (OUTPUT);

if ($unknown_macro)
{
    print STDERR "limalautoconf: ERROR: unknown macro - update your limal-devtools\n";
    exit 1;
}
