#!/bin/sh

#
# 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.
#
#
# $Log$
# Revision 1.15  2012/10/02           shathaway
# Allow CFLAGS and CXXFLAGS to inherit external environment.
# Fix for XALANC-734
#
# Revision 1.14  2005/08/16 23:48:26  dmitryh
# Addional fix for XALANC-541
#
# Revision 1.13  2005/08/16 01:06:47  dmitryh
# Fix for XALANC-541
#
# Revision 1.12  2005/07/08 17:30:49  dmitryh
# Fix for XALANC-526
#
# Revision 1.11  2004/04/19 14:54:08  dmitryh
# Fix for Bugzilla Bug 28452
#
# Revision 1.10  2004/04/06 15:08:44  dmitryh
# Changes for a cygwin build
#
# Revision 1.9  2004/03/03 15:06:39  mhoyt
# Patch for Bugzilla 27406 from Bjoern A. Zeeb: FreeBSD threading configuration
#
# Revision 1.8  2004/02/26 23:10:06  mhoyt
# Update to Apache 2.0 License
#
# Revision 1.7  2004/02/06 08:49:09  dbertoni
# Initial changes for HP-UX IA64 port.
#
# Revision 1.6  2004/02/06 08:39:35  dbertoni
# Initial changes for HP-UX IA64 port.
#
# Revision 1.5  2004/01/06 02:41:25  dbertoni
# Changes for Bugzilla 25914.
#
# Revision 1.4  2003/12/29 00:26:53  dbertoni
# Patches for Bugzilla 25361.
#
# Revision 1.3  2003/12/03 21:52:57  dbertoni
# Patch 25180 for iSeries support.
#
# Revision 1.2  2003/12/02 19:58:50  dbertoni
# Patch for Bugzilla 24567.
#
# Revision 1.1  2003/11/12 20:42:18  dbertoni
# Patches for bug 13238.
#
# Revision 1.4  2003/11/06 01:28:34  dbertoni
# Patch for bugzilla 13238.
#
# Revision 1.3  2003/09/19 20:33:04  dbertoni
# Massive copyright update.
#
# Revision 1.2  2003/07/22 10:59:40  blautenb
# FreeBSD and Install patch from Bjoern Zeeb - Bugzilla 13238
#
# Revision 1.1  2003/06/29 03:57:53  blautenb
# Moved source for sane includes
#
# Revision 1.19  2003/04/05 05:21:56  blautenb
# Fix for bug 18675
#
# Revision 1.18  2003/03/20 16:38:32  dbertoni
# Updates for Intel compiler on Linux.
#
# Revision 1.17  2003/02/08 01:39:33  dbertoni
# Don't add bitstobuildLink on AIX.
#
# Revision 1.16  2003/01/05 18:29:54  dbertoni
# Bump optimization level on Linux.
#
# Revision 1.15  2002/12/12 20:58:06  dbertoni
# Changes to build outside of the source tree.  Fixes Bugzilla 4627.
#
# Revision 1.14  2002/11/05 05:15:59  dbertoni
# Add extra hint about using GNU make.
#
# Revision 1.13  2002/10/04 23:42:48  dbertoni
# Fixed getop problem.
#
# Revision 1.12  2002/08/05 21:21:02  dbertoni
# Fixed statement termination problem.
#
# Revision 1.11  2002/08/05 20:41:24  dbertoni
# Merge in HP changes.
#
# Revision 1.10  2002/08/05 20:33:54  dbertoni
# Changes to implement 32 and 64-bit builds.
#
# Revision 1.9  2002/08/01 18:36:38  dbertoni
# Added support for Intel compiler.
#
# Revision 1.8  2002/05/06 05:34:06  dbertoni
# Implemented multiple compiler options.
#
# Revision 1.7  2001/11/27 14:29:43  dbertoni
# Reverted previous changes.
#
# Revision 1.5  2001/08/14 16:10:18  dbertoni
# Changes from James Berry <jberry@criticalpath.com> for Mac OS X support.
#
# Revision 1.4  2001/05/18 18:24:12  dbertoni
# Added $compileroption to CXXFLAGS and CFLAGS.  Bug 1810
#
# Revision 1.3  2001/04/13 02:53:20  dbertoni
# Changes for the TRU64 port.
#
# Revision 1.2  2001/03/15 15:56:36  dbertoni
# Add -D NDEBUG to release builds to disable assertions.
#
# Revision 1.1  2000/01/27 19:57:43  jdonohue
# Preliminary based on Xerces
#
# Revision 1.1  1999/12/21 01:13:53  jdonohue
# Make for linux, etc
#

#
#

#
# runConfigure:
#    This script will run the "configure" script for the appropriate
#    platform. Only supported platforms are recognized.
#
# The following variables are defined and exported at the end of this
# script.
#
# LIBS
# LDFLAGS
# CXXFLAGS
#

usage()
{
    echo "runConfigure: Helper script to run \"configure\" for one of the supported platforms"
    echo "Usage: runConfigure \"options\""
    echo "       where options may be any of the following:"
    echo "       -p <platform> (accepts 'aix', 'linux', 'freebsd', 'netbsd', 'openbsd', 'solaris' 'solaris-x86',
            'hp-10', 'hp-11', 'hp-11-ia64', 'irix', 'tru64', 'macosx', 'os390', 'os400', 'cygwin' 'mingw-msys')"
    echo "       -c <C compiler name> (e.g. gcc, cc, xlc)"
    echo "       -x <C++ compiler name> (e.g. g++, CC, xlC)"
    echo "       -d (specifies that you want to build debug version)"
    echo "       -t <transcoder> can be 'icu' (everything else means default)"
    echo "       -m <msg locale system> (accepts 'inmem', 'icu','nls')" 
    echo "       -M <locale> (example: 'fr_FR'. Default: 'en_US')"     
    echo "       -r <thread option> can be 'pthread' or 'none' (Default: pthread)"
    echo "       -b <bitsToBuild> (accepts '64', '32')"
    echo "       -P <install-prefix>"
    echo "       -l <extra linker options>"
    echo "       -z <extra compiler options>"
    echo "       -C <any one extra configure options>"
    echo "       -h (to get help on the above commands)"
}

ERROR_EXIT_CODE=1

if test ${1}o = "o"; then
   usage
   exit ${ERROR_EXIT_CODE}
fi

if test ${XALANCROOT}o = "o"; then
   echo ERROR : You have not set your XALANCROOT environment variable
   echo Though this environment variable has nothing to do with creating makefiles,
   echo this is just a general warning to prevent you from pitfalls in future. Please
   echo set an environment variable called XALANCROOT to indicate where you installed
   echo the XALAN-C files, and run this command again to proceed. See the documentation
   echo for an example if you are still confused.
   exit ${ERROR_EXIT_CODE}
fi

if test $1 = "-h"; then
   usage
   exit ${ERROR_EXIT_CODE}
fi

# Set up the default values for each parameter
ccompiler=gcc            # Use GCC as the default compiler
cppcompiler=g++          # Use GCC as the default compiler
debug=off                # by default debug is off
bitsToBuild=32           # by default 32 bit build assumed
transcoder=default       # by default use default transcoder
localSys=inmem           # by default use inmem locale system
locale=en_US             # by default use US locale
thread=pthread           # by default, use pthread

# Get the command line parameters
if test -x /bin/getopt -o -x /usr/bin/getopt; then
    set -- `getopt C:p:P:c:x:dm:n:t:m:M:r:b:l:z:h $*`

    if [ $? != 0 ]
        then
        usage
        exit ${ERROR_EXIT_CODE}
    fi

while [ $# -gt 0 ]
   do
   case $1 in
   -p) 
        platform=$2; shift 2;;

   -c) 
        ccompiler=$2; shift 2;;

   -x) 
        cppcompiler=$2; shift 2;;

   -d) 
        debug=on; shift;;

   -t)
        transcoder=$2; shift 2;;
        
   -m)

    localSys=$2; shift 2;;
    

   -M)

        locale=$2; shift 2;;
        
   -r) 
        thread=$2; shift 2;;

   -b)
        bitsToBuild=$2; shift 2;;
  
   -P)
        configureoptions="$configureoptions --prefix=$2"; shift 2;;

   -l)
        linkeroptions="$linkeroptions $2"; shift 2;;

   -z) 
        compileroptions="$compileroptions $2"; shift 2;;

   -C)
        configureoptions="$configureoptions $2"; shift 2;;

   -h) 
        usage
        exit ${ERROR_EXIT_CODE};; 

   --) 
        shift; break;; 

   *)
       echo "unknown option $1"
       usage
       exit ${ERROR_EXIT_CODE};;
   esac
done
else
while getopts "C:p:P:c:x:dm:n:t:m:M:r:b:l:z:h" switch;
   do
   case $switch in
   p)
    platform=$OPTARG;;

   c)
        ccompiler=$OPTARG;;

   x)
        cppcompiler=$OPTARG;;

   d)
        debug=on;;

   t)
        transcoder=$OPTARG;;

   r)
        thread=$OPTARG;;

   b)
        bitsToBuild=$OPTARG;;

   z)
        compileroptions="$compileroptions $OPTARG";;

   l)
        linkeroptions="$linkeroptions $OPTARG";;

   m)
        localSys=$OPTARG;;

   M)
        locale=$OPTARG;;

   P)
        configureoptions="$configureoptions --prefix=$OPTARG";;

   C)
        configureoptions="$configureoptions $OPTARG";;

   h)
        usage
        exit ${ERROR_EXIT_CODE};;

   *)
        echo "unknown option -$switch $OPTARG"
        usage
        exit ${ERROR_EXIT_CODE};;
   esac
done
fi

echo "Generating makefiles with the following options ..."
echo "Platform: $platform"
echo "C Compiler: $ccompiler"
echo "C++ Compiler: $cppcompiler"
echo "Extra compile options: $compileroptions"
echo "Extra link options: $linkeroptions"
echo "Transcoder: $transcoder"
echo "Localization system: $localSys"
echo "Locale: $locale"
echo "Thread option: $thread"
echo "bitsToBuild option: $bitsToBuild"
echo "Extra configure options: $configureoptions"


#
# Now check if the options are correct or not, bail out if incorrect
#

case $platform in
   aix | linux | freebsd | netbsd | openbsd | solaris | solaris-x86 | hp-11 | hp-11-ia64 | irix | tru64 | macosx | os390 | os400 | cygwin | mingw-msys)
       # platform has been recognized
       ;;
   *)
      echo "I do not recognize the platform '$platform'. Please type '${0} -h' for help."
      exit ${ERROR_EXIT_CODE};;
esac


#
# Enable debugging or not...
#

if test $debug = "off"; then
    echo "Debug is OFF"
    if test $platform = "os400"; then
        debugflag="";
    elif test $platform = "os390"; then
        debugflag="-DNDEBUG";
    elif test $platform = "linux"; then
        debugflag="-O3 -DNDEBUG";
    elif test $cppcompiler = "aCC"; then
        if test $platform = "hp-11-ia64"; then
           debugflag="+O3 -DNDEBUG";
        else
           debugflag="+O2 -DNDEBUG";
        fi
    else
        debugflag="-O -DNDEBUG";
    fi
else
    echo "Debug is ON"
    debugflag="-g";
fi



#
# Check for the bitsToBuild option
#

#
#  aix | linux | hp-11 | hp-11-ia64 | solaris |
#  freebsd | netbsd | openbsd | irix | os390 | os400 | tru64 | macosx
#
if test $bitsToBuild = 64; then
    bitstobuildDefines=""
    bitstobuildLink=""
    if test $platform; then
        case $platform in
           solaris)
              bitstobuildDefines=" -xarch=v9 "
              bitstobuildLink=" -xarch=v9 " ;;
           solaris-x86)
              bitstobuildDefines=" -m64 "
              bitstobuildLink=" -m64 " ;;
           aix)
              bitstobuildDefines=" -q64 -qwarn64 " ;;
           hp-11)
              bitstobuildDefines=" +DA2.0W "
              bitstobuildLink=" +DA2.0W " ;;
           hp-11-ia64)
              bitstobuildDefines=" +DD64 "
              bitstobuildLink=" +DD64 " ;;
           *)
            ;;
        esac
    fi
elif test $bitsToBuild = 32; then
    bitstobuildDefines=""
    bitstobuildLink=""
else
    echo "I do not recognize the bitsToBuild '$bitsToBuild'. Please type '${0} -h' for help."
    exit ${ERROR_EXIT_CODE};
fi

#
# to export in case it is needed in Makefile.in/Makefine.incl
#
BITSTOBUILD=$bitsToBuild
export BITSTOBUILD

#
# Now check whether to use 'icu' as transcoder
#
TRANSCODER=
if test $transcoder; then
    case $transcoder in
        icu)
        if test ${ICUROOT}o = "o"; then
            echo '***Error*** ICUROOT environment variable not defined. Exiting...';
            exit ${ERROR_EXIT_CODE};
            fi
        transcodingDefines="-I${ICUROOT}/include";
            if test $platform != "os390"; then
                transcodingLibs="-L${ICUROOT} -L${ICUROOT}/lib -L${ICUROOT}/data";
            fi
	    TRANSCODER=icu;;

    default)
        ;;
    *)
        echo "Unknown transcoder '$transcoder'. Using default."
        ;;
    esac
fi

export TRANSCODER


XALAN_LOCALE_SYSTEM=

if test $localSys; then
    case $localSys in
        icu)
            if test ${ICUROOT}o = "o"; then
                  echo '***Error*** ICUROOT environment variable not defined. Exiting...'
                  exit ${ERROR_EXIT_CODE};
            fi
            XALAN_LOCALE_SYSTEM=icu;;

        inmem)
            XALAN_LOCALE_SYSTEM=inmem;;

        nls)
            XALAN_LOCALE_SYSTEM=nls;;

        default)
            XALAN_LOCALE_SYSTEM=inmem;;

        *)
            echo "Unknown locale '$localSys'. Using default."
    esac
fi

export XALAN_LOCALE_SYSTEM

XALAN_LOCALE=$locale

export XALAN_LOCALE 

#
# Set the C compiler and C++ compiler environment variables
#

case $ccompiler in
    gcc | icc)
        ;;

    cc)
        if test $platform = "aix"; then
            echo "Please use xlc instead of cc to build on AIX."
            exit ${ERROR_EXIT_CODE}
        fi
        ;;

    xlc)
        if test $cppcompiler != "xlC"; then
            echo "Please use xlC as the C++ compiler when using xlc."
            exit ${ERROR_EXIT_CODE}
        fi
        ;;

    xlc_r)
        if test $cppcompiler != "xlC_r"; then
            echo "Please use xlC_r as the C++ compiler when using xlc_r."
            exit ${ERROR_EXIT_CODE}
        fi
        ;;

    *)
        echo "I do not recognize the C compiler '$ccompiler'. Continuing anyway ..." 
        ;;
esac

case $cppcompiler in
    g++ | c++ | CC | aCC | cxx | icpc | icc)
        ;;

    xlC)
        if test $ccompiler != "xlc"; then
            echo "Please use xlc as the C compiler when using xlC."
            exit ${ERROR_EXIT_CODE}
        fi
        ;;

    xlC_r)
        if test $compiler != "xlc_r"; then
            echo "Please use xlc_r as the C compiler when using xlC_r."
            exit ${ERROR_EXIT_CODE}
        fi
        ;;

    *)
        echo "I do not recognize the C++ compiler '$cppcompiler'. Continuing anyway ..." 
        ;;
esac

CC="$ccompiler"
export CC

CXX="$cppcompiler"
export CXX


#
# Check for the threading option
#

threadingLibs=""
threadingDefines=""
gccThreadingDefines="-pthread -D_REENTRANT"
gccThreadingLibs="-lpthread"

if test $thread = "none"; then
    case $platform in
        aix)
            if test $ccompiler = "xlc_r"; then
                echo "Please use xlc instead of xlc_r to build without threads."
                exit ${ERROR_EXIT_CODE}
            fi

            if test $cppcompiler = "xlC_r"; then
                echo "Please use xlC instead of xlC_r to build without threads."
                exit ${ERROR_EXIT_CODE}
            fi
        ;;

        *)
        ;;

    esac
elif test $thread != "pthread"; then
    echo "I do not recognize the thread option '$thread'. Please type '${0} -h' for help."
    exit ${ERROR_EXIT_CODE}
else
    case $platform in
        aix)
            if test $ccompiler = "xlc"; then
                echo "Please use xlc_r instead of xlc to build with threads."
                exit ${ERROR_EXIT_CODE}
            elif $ccompiler = "gcc"; then
                threadingDefines=$gccThreadingDefines
                threadingLibs=$gccThreadingLibs
            fi

            if test $cppcompiler = "xlC"; then
                echo "Please use xlC_r instead of xlC to build with threads."
                exit ${ERROR_EXIT_CODE}
            fi
            ;;

        freebsd)
            if test -n "${PTHREAD_LIBS}" ; then
                threadingLibs="${PTHREAD_LIBS}"
                threadingDefines="${PTHREAD_CFLAGS}"
            else
                threadingDefines=$gccThreadingDefines
                threadingLibs=$gccThreadingLibs
            fi
            ;;

        os400)
            threadingDefines="-D_MULTI_THREADED"
            ;;

        os390)
            threadingDefines="-D_OPEN_THREADS"
            ;;

        solaris*)
            if test $ccompiler = "gcc"; then
                # GCC on Solaris uses "-pthreads" instead of
                # "-pthread"
                threadingDefines="-pthreads -D_REENTRANT"
                threadingLibs=$gccThreadingLibs
            else
                threadingDefines="-mt"
            fi
            ;;

        hp-11*)
            if test $ccompiler = "gcc"; then
                threadingDefines=$gccThreadingDefines
                threadingLibs=$gccThreadingLibs
            else
                threadingDefines="-mt"   
            fi
            ;;

        cygwin)
            threadingLibs=""
            threadingDefines=""
            ;;

        mingw-msys)
            threadingLibs="-mthreads"
            threadingDefines="-mthreads"
            ;;

        *)
            threadingDefines=$gccThreadingDefines
            threadingLibs=$gccThreadingLibs
        ;;
    esac
fi

#
# Set the extra C and C++ compiler flags
#

CXXFLAGS="$CXXFLAGS $compileroptions $debugflag $transcodingDefines $threadingDefines $bitstobuildDefines "
export CXXFLAGS

CFLAGS="$CFLAGS $compileroptions $debugflag $transcodingDefines $threadingDefines $bitstobuildDefines "
export CFLAGS

LDFLAGS="$LDFLAGS $linkeroptions $bitstobuildLink $threadingDefines"
export LDFLAGS

LIBS="$transcodingLibs $threadingLibs "
export LIBS


echo
rm -f config.cache
rm -f config.log
rm -f config.status
`dirname $0`/configure $configureoptions

echo
echo If the result of the above commands look OK to you, go to the directory
echo ${XALANCROOT} and type \"gmake\" or \"make\" to make the XALAN-C system.
echo
echo Note: You must use GNU make to use the Xalan Makefile.

exit  0;
