https://github.com/root-project/root
Raw File
Tip revision: 8a5cd822ba1c0d3029f3de4279ef8f8c9d2625f2 authored by Unknown Author on 08 September 2007, 15:17:07 UTC
This commit was manufactured by cvs2svn to create tag 'v5-14-00h'.
Tip revision: 8a5cd82
configure
##############################################################
#
# Copyright(c) 1995~2005  Masaharu Goto (cint@pcroot.cern.ch)
#
# For the licensing terms see the file COPYING
#
##############################################################
#
# This is a bash script, which works with any reasonable sh.
# Solaris sh is not, so we have to start bash, and call ourselves again.

[ "x$1" != "x__have_the_proper_shell@" ] && ( \
uname -a | grep -i sunos > /dev/null \
  && (bash $0 __have_the_proper_shell@ "$*") \
  || (sh $0 __have_the_proper_shell@ "$*") \
)

[ "x$1" != "x__have_the_proper_shell@" ] && exit
shift

# configure settings to build CINT

ARCHS=(linux linuxicc macgcc djgpp cygwin mingw mwerks hpux aix msvc7 msvc8 solaris solarisgcc)

#############################################################
###
###        Architecture Settings
###
#############################################################

# These are the variables that can be set by the different architectures.
# They are prepended by "G__CFG_" when writing out to Makefile.conf and configcint.h.

EXPORTS=(ARCH CC CFLAGS CMACROS COMP CPP COUT COUTEXE INCP CXX CXXFLAGS CXXMACROS \
    LD LDFLAGS LDOUT LIBP LIBL SOFLAGS SOOUT OBJEXT EXEEXT \
    SOEXT LIBEXT IMPLIBEXT DEBUG DEFAULTLIBS REFLEXINCDIR \
    MANGLEPATHS STREAMDIR PLATFORMO EXPLLINK \
    BUILDREADLINE READLINELIB CURSESLIB EXP_READLINELIB EXP_CURSESLIB RM MV PREFIX \
    INPUTMODE INPUTMODELOCK AR EXTRACTSYMBOLS MAKEIMPLIB )
unset ${EXPORTS[*]}

# Lines demonstrating the use of the available variables. 
# Only one of DBGFLAGS or OPTFLAGS is actually used, depending 
# on the value of DEBUG (see --debug)

# $CC $CFLAGS $CMACROS $COPTFLAGS $CDBGFLAGS ${COMP}@source@ ${COUT}@object@$OBJEXT ${INCP}@inclpath@ @header@
# $CXX $CXXFLAGS $CXXMACROS $CXXOPTFLAGS $CXXDBGFLAGS ${COMP}@source@ ${COUT}@object@$OBJEXT ${INCP}@inclpath@ @header@
# $LD $LDFLAGS $LDOPTFLAGS $LDDBGFLAGS ${LDOUT}@exe@$EXEEXT ${OBJ}@obj@$OBJEXT ${LIBP}@libpath@ $(subst @lib@,$LIBEXT,${LIBL}) $DEFAULTLIBS
# $LD $SOFLAGS $LDOPTFLAGS $LDDBGFLAGS ${SOOUT}@so@$SOEXT ${OBJ}@obj@$OBJEXT ${LIBP}@libpath@ $(subst @lib@,$LIBEXT,${LIBL}) $DEFAULTLIBS

function config_GCC_defaults {
    CC=gcc
    COMP=-c
    CPP="gcc -E -C"
    COUT="-o "
    COUTEXE="-o "
    INCP=-I
    CDBGFLAGS=-g
    COPTFLAGS=-O2
    CMACROS="$CMACROS -DG__SHAREDLIB -DG__OSFDLL -DG__ANSI -DG__ERRORCALLBACK -DG__SIGNEDCHAR -DG__NEWSTDHEADER -DG__CINT_VER6 -DG__NATIVELONGLONG -DG__P2FCAST -DG__STD_EXCEPTION"

    CXX=g++
    CXXDBGFLAGS="$CDBGFLAGS"
    CXXOPTFLAGS="$COPTFLAGS"
    CXXMACROS="$CXXMACROS $CMACROS"

    LD=g++
    DEFAULTLIBS="-lm -ldl"
    LDOUT="-o "
    SOOUT="$LDOUT"
    LIBP=-L
    LIBL=-l@imp@
    LDDBGFLAGS=-g
    LDOPTFLAGS=-O2
    SOFLAGS=-shared
    SODBGFLAGS=-g

    RM="rm -f"
    MV="mv -f"

    OBJEXT=.o
    EXEEXT=
    SOEXT=.so
    LIBEXT=.a
    IMPLIBEXT=.a
    AR="ar qcs "
    [ "x$TAILOPT" = "x" ] && TAILOPT=-n

    GCCVER=`echo __GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__|$CC -E -|tail ${TAILOPT}1`
    if [ ${GCCVER%% *} -gt 2 ]; then 
	STREAMDIR=gcc3strm
    else
	STREAMDIR=stream
    fi

    BUILDREADLINE=1
    INPUTMODE=cint
    INPUTMODELOCK=off
}

function config_linux {
    config_GCC_defaults
}

function config_linuxx8664gcc {
    config_GCC_defaults

    EXTRA_LIB_DIR=/usr/lib64
    CPP="gcc -E -C -m64"
    CXXFLAGS="-m64  -fPIC ${CXXFLAGS}"
    CFLAGS="-m64  -fPIC ${CFLAGS}"
    LDFLAGS="-m64 ${LDFLAGS}"

}

function config_linuxicc {
    config_GCC_defaults

    CXX=icc
    CC=icc
    LD=icc
    CPP="icc -E -C"
    CXXFLAGS="${CXXFLAGS} -wd1476 -wd21 -wd191"
    CFLAGS="${CFLAGS} -wd1476 -wd21 -wd191"
    STREAMDIR=iccstrm
}

function config_macgcc {
    config_GCC_defaults

    CXXFLAGS="${CXXFLAGS} -pipe -W -Wall -Wno-long-double -Woverloaded-virtual -fsigned-char -fno-common"
    CFLAGS="${CFLAGS} -pipe -W -Wall -Wno-long-double -fsigned-char -fno-common"
    SOFLAGS="-dynamiclib -single_module"
    CMACROS="$CMACROS -DG__MACOSX__ -DG__APPLE"

#    PLATFORMO=v6_macos

    AR="ar -q -cs "
    IMPLIBEXT=.dylib

    MAKEIMPLIB="ln -sf @so@ @imp@"

# EXPLLINK is 1 unconditionally on the HEAD - why not here?
    MACOSX_MINOR=`sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2`
    if [ $MACOSX_MINOR -lt 4 ]; then
       EXPLLINK=1
    fi
}

function config_djgpp {
    config_GCC_defaults
    CFLAGS="-I$(DJGPPDIR)/include"
    CMACROS="-DG__DJGPP -DG__DJGPP"
    CXXFLAGS="$CXXFLAGS $CFLAGS"
    CXXMACROS="$CMACROS"
    DEFAULTLIBS="-L$(DJGPPDIR)/lib -lm"
    EXPLLINK=1
}

function config_cygwin {
    config_GCC_defaults

    EXEEXT=.exe
    SOEXT=.dll
    IMPLIBEXT=.dll.a
    CMACROS="-DG__CYGWIN"
    CXXMACROS="$CMACROS"
    EXPLLINK=1
    SOFLAGS="$SOFLAGS --export-all-symbols"
}

function config_mingw {
    config_cygwin
    CFLAGS="$CFLAGS -mno-cygwin"
    CMACROS="-DG__MINGW"
    CXXFLAGS="$CXXFLAGS $CFLAGS"
    CXXMACROS="$CMACROS"
    EXPLLINK=1
}

function config_mwerks {
    echo "Not implemented yet."
    exit 1
}

function configcint_hpux {
    echo "Not implemented yet."
    exit 1
}

function config_aix {
    echo "Not implemented yet."
    exit 1
}

function config_msvc7 {
    OBJEXT=.obj
    EXEEXT=.exe
    LIBEXT=.lib
    SOEXT=.dll
    IMPLIBEXT=.lib

    CC=cl
    CFLAGS="-G5 -nologo -wd4996 -GX"
    CMACROS="-DG__REDIRECTIO -DG__SHAREDLIB -DG__UNIX -DG__WIN32 -DWIN32 -D_WIN32 -DVISUAL_CPLUSPLUS -DG__NEWSTDHEADER"
    COMP=-c
    CPP="cl -E -C -nologo"
    COUT=-Fo
    COUTEXE=-Fe
    INCP=-I
    COPTFLAGS="-O2 -MD"
    CDBGFLAGS="-Zi -MDd"

    CXX=cl
    CXXFLAGS="$CXXFLAGS $CFLAGS -GR -wd4181"
    CXXMACROS="$CMACROS"
    CXXOPTFLAGS="$COPTFLAGS"
    CXXDBGFLAGS="$CDBGFLAGS"

    LD=link
    LDFLAGS="-nologo -ignore:4049 -ignore:4217 -ignore:4221 -incremental:no"
    LDOUT=-out:
    LIBP=-LIBPATH:
    LIBL=lib@imp@$IMPLIBEXT
    LDOPTFLAGS=-OPT:REF
    LDDBGFLAGS=-DEBUG
    DEFAULTLIBS="kernel32.lib user32.lib"
    EXPLLINK=1

    # hack to get the implib and def in
    SOFLAGS="$LDFLAGS -DLL -implib:@so@$LIBEXT"
	SODBGFLAGS="-debug"
    SOOUT=-out:

    MANGLEPATHS="cygpath -m"
    STREAMDIR=vc7strm
    PLATFORMO=v6_winnt
    RM="rm -f"
    MV="mv -f"
    INPUTMODE=cint
    INPUTMODELOCK=off
    BUILDREADLINE=

    AR="lib /OUT:"
}

function config_msvc8 {
    config_msvc7
    CFLAGS="${CFLAGS/-G5/}"
    CXXFLAGS="${CXXFLAGS/-G5/}"
    CFLAGS="${CFLAGS/-GX/-EHs}"
    CMACROS="$CMACROS -D_CRT_SECURE_NO_DEPRECATE=1 -D_SECURE_SCL=0 -D_HAS_ITERATOR_DEBUGGING=0"
    CXXFLAGS="${CXXFLAGS/-GX/-EHs}"
    CXXMACROS="$CXXMACROS -D_CRT_SECURE_NO_DEPRECATE=1 -D_SECURE_SCL=0 -D_HAS_ITERATOR_DEBUGGING=0"
}

function config_solarisgcc {
    TAILOPT=-
    config_GCC_defaults
    CFLAGS="${CFLAGS} -fPIC"
    CXXFLAGS="${CXXFLAGS} -fPIC"
}

function config_solaris {
    TAILOPT=-
    config_GCC_defaults
    CXX=CC
    CC=cc
    LD=CC
    CPP="CC -E -C"

    CXXFLAGS="$CXXFLAGS -erroff=badargtypel2w,wbadinitl,wbadasgl"
    LDFLAGS=

    COPTFLAGS=-O
    CXXOPTFLAGS=-O
    LDOPTFLAGS=-O
    SOFLAGS="-KPIC -G"
    DEFAULTLIBS="-lm -ltermcap -ldl -L/usr/ccs/lib -lgen"
    STREAMDIR=sunstrm
}

#############################################################
###
###        Option Processing
###
#############################################################

declare -a OPTS_AVAIL
declare -a OPTS_DESCR
let numopts=0;

function add_opt {
  OPTS_AVAIL[$numopts]="$1"
  OPTS_DESCR[$numopts]="$2"
  let numopts=$numopts+1
}

add_opt "--help -h" 'Show this help.'
add_opt "--arch=" "Architecture, one of ${ARCHS[*]}"
add_opt "--prefix=" "where to put Cint for install target "$'\n\t'"(defaults to /usr/local)"
add_opt "--readline=" "Readline library "$'\n\t'"(defaults to /usr/(local)/lib/libreadline.a if it exists)"
add_opt "--reflex-incdir=" "Reflex header directory "$'\n\t'"(defaults to reflex/inc if it exists)"
add_opt "--debug" "Build non-optimized Cint with debug symbols"

function processflag_help {
    echo CINT configure options:
    let iopt=0
    while [ $iopt -lt $numopts ]; do
	arg=""
	opts=${OPTS_AVAIL[$iopt]}
	[ "${opts/=/}" != "$opts" ] && arg='<argument>'
	echo "  "${OPTS_AVAIL[$iopt]}"$arg": "${OPTS_DESCR[$iopt]}"
	let iopt=$iopt+1
    done
    exit 0
}

function guess_arch {
    arch=`uname -s | tr '[A-Z]' '[a-z]'`
    chip=`uname -m | tr '[A-Z]' '[a-z]'`
    rele=`uname -r`

    case "$arch:$chip:$rele" in
#        aix*)                  arch=aix5            ;;
#        osf1*:alpha:*)         arch=alphacxx6       ;;
#        freebsd*:*:6*)         arch=freebsd5        ;;
#        freebsd*:*:5*)         arch=freebsd5        ;;
#        freebsd*:*:4*)         arch=freebsd4        ;;
#        freebsd*:*:*)          arch=freebsd         ;;
#        hp-ux:ia64:*)          arch=hpuxia64acc     ;;
#        hp-ux:*:*)             arch=hpuxacc         ;;
#        hurd*:*:*)             arch=hurddeb         ;;
#        linux:ia64:*)          arch=linuxia64gcc    ;;
        linux:x86_64:*)        arch=linuxx8664gcc   ;;
#        linux:alpha:*)         arch=linuxalphagcc   ;;
#        linux:arm*:*)          arch=linuxarm        ;;
#        linux:ppc64*:*)        arch=linuxppc64gcc   ;;
#        linux:ppc*:*)          arch=linuxppcgcc     ;;
        linux:i*86:*)          arch=linux           ;;
#        openbsd*:*:*)          arch=openbsd         ;;
#        lynx:*:*)              arch=lynxos          ;;
#        darwin:power*:*)       arch=macosx          ;;
#        darwin:*86*:*)         arch=macosx          ;;
#        irix*:sgi*:*)          arch=sgicc           ;;
        sunos:sun*:6*)         arch=solarisCC5      ;;
        sunos:sun*:5*)         arch=solarisCC5      ;;
#        sunos:sun*:4*)         arch=solaris         ;;
        cygwin_*:*86:*)        arch=win32           ;;
        cygwin_*:pentium:*)    arch=win32           ;;
        cygwin_*:ia64)         arch=win32           ;;
#        *)
#            echo "Attempts at guessing your architecture failed."
#            echo "Please specify the architecture as the first argument."
#            echo "Do '$0 --help' for a list of avaliable architectures."
#            exit 1
#            ;;
    esac
    if [ "x`uname -a|grep -i linux`" != "x" ]; then
        GUESSEDARCH=$arch
    elif cl.exe >/dev/null 2>&1; then
        if [ "x`cl 2>&1|grep 'Version 14'`" != "x" ]; then
            GUESSEDARCH=msvc8
        else
            GUESSEDARCH=msvc7
        fi
    elif gcc --version >/dev/null 2>&1; then
        if [ "x`uname -a|grep -i mac`" != "x" ]; then
            GUESSEDARCH=macgcc
        elif [ "x`uname -a|grep -i SunOS`" != "x" ]; then
            GUESSEDARCH=solarisgcc
        fi
    elif [ "x`uname -a|grep -i SunOS`" != "x" ] && CC -V >/dev/null 2>&1; then
        GUESSEDARCH=solaris
    fi
    if [ "x$GUESSEDARCH" = "x" ]; then
        echo 'Cannot guess architecture, please specify --arch=...!'
        processflag_help
    fi
    echo 'Guessing architecture to be '$GUESSEDARCH
}

function processflag_arch {
    if [ "${ARCHS[*]/$1/}" = "${ARCHS[*]}" ]; then
	echo "Error: invalid architecture. Choose one out of"
	echo "  "${ARCHS[*]}
	exit 1
    fi

    ARCH=$1
    config_$ARCH
}

function processflag_prefix {
    PREFIX=$1
}

function processflag_debug {
    DEBUG=1
}

function processflag_reflex_incdir {
    REFLEXINCDIR=$1
}

function processflag_readlinelib {
    READLINELIB=$1
    BUILDREADLINE=
}

# process options
ALLOPTIONS=(${*:1})

while [ "$1" != "" ]; do
    let iopt=0;
    found=0
    while [ $found = 0 -a $iopt -lt $numopts ]; do
	flags=( ${OPTS_AVAIL[$iopt]} )
	let numflags=${#flags[*]}
	let iflag=0
	while [ $iflag -lt $numflags ]; do
	    flag=${flags[$iflag]}
	    if [ "${1#$flag}" != "$1" ]; then
		found=1
                # remove leading "-"s, trailing =, replace "-" by "_"
		func=`echo start ${flags[0]}|sed -e 's,start ,,' -e 's,^-*,,' -e 's,=$,,' -e 's,-,_,g'`
		if [ ${flag/=/} = $flag ]; then
		    # simple flag without value
		    processflag_$func
		else
		    value=${1#$flag}
		    processflag_$func "$value"
		fi
		break
	    fi
	    let iflag=$iflag+1
	done
	let iopt=$iopt+1
    done
    if [ $found = 0 ]; then
	echo "Unknown argument $1."
	echo ""
	processflag_help
    fi
    shift
done

if [ "$ARCH" = "" ]; then
    guess_arch
    ARCH=$GUESSEDARCH
    config_$ARCH
fi

if [ "$DEBUG" = "1" ]; then
    LDFLAGS="$LDDBGFLAGS $LDFLAGS"
    SOFLAGS="$SODBGFLAGS $SOFLAGS"
    CFLAGS="$CDBGFLAGS $CFLAGS"
    CXXFLAGS="$CXXDBGFLAGS $CXXFLAGS"
else
    LDFLAGS="$LDOPTFLAGS $LDFLAGS"
    SOFLAGS="$SOOPTFLAGS $SOFLAGS"
    CFLAGS="$COPTFLAGS $CFLAGS"
    CXXFLAGS="$CXXOPTFLAGS $CXXFLAGS"
fi

CMACROS="$CMACROS -DG__HAVE_CONFIG -DG__NOMAKEINFO"
CXXMACROS="$CXXMACROS -DG__HAVE_CONFIG -DG__NOMAKEINFO"

if [ "$REFLEXINCDIR" = "" -a -d reflex ]; then 
	REFLEXINCDIR=reflex/inc
	echo Setting reflex-incdir=reflex/inc
fi
if [ "$READLINELIB" = "" -a "$BUILDREADLINE" != "" ]; then
    for d in $EXTRA_LIB_DIR /usr/local/lib /usr/lib /sw/lib; do 
        if [ -f ${d}/libreadline$LIBEXT ]; then
            READLINELIB=$d/libreadline$LIBEXT
            BUILDREADLINE=
            break
        fi
    done
    if [ "$EXPLLINK" = "1" ]; then 
         EXP_READLINELIB=$READLINELIB
    fi
fi
# want readline?
if [ "$BUILDREADLINE" != "" ]; then
    READLINELIB=readline/libreadline$LIBEXT
fi    
if [ "$READLINELIB" != "" -o "$BUILDREADLINE" != "" ]; then
    CXXFLAGS="$CXXFLAGS -DG__GNUREADLINE"
    echo "Using $READLINELIB"

    # look for curses
    if [ "$CURSESLIB" = "" ]; then
        for d in $EXTRA_LIB_DIR /usr/local/lib /usr/lib /sw/lib; do 
            if [ -f ${d}/libncurses$LIBEXT ]; then
                CURSESLIB=$d/libncurses$LIBEXT
                break
            elif [ -f ${d}/libcurses$LIBEXT ]; then
                CURSESLIB=$d/libcurses$LIBEXT
                break
            fi
        done
    fi
    if [ "$CURSESLIB" != "" ]; then
        if [ "$EXPLLINK" = "1" ]; then 
           EXP_CURSESLIB=$CURSESLIB
        fi
        echo "Using $CURSESLIB"
    fi
fi


[ "$STREAMDIR" = "" ]   && STREAMDIR=stream
[ "$MANGLEPATHS" = "" ] && MANGLEPATHS="echo "

# do path name mangling to windows, if requested by $MANGLEPATHS
#if [ "$MANGLEPATHS" = "1" ]; then
#    [ $REFLEXINCDIR ] && REFLEXINCDIR=`cygpath -w $REFLEXINCDIR`
#    [ $CINTSYSDIR   ] && CINTSYSDIR=`cygpath -w $CINTSYSDIR`
#fi

HAVE_CONFIG=1

EXPORTS=(${EXPORTS[*]} HAVE_CONFIG)

echo ""
# generate Makefile.conf
file=Makefile.conf
echo Writing $file...
echo "# Makefile.conf for Cint" > $file
echo "# generated by configure with options" >> $file
echo "# "${ALLOPTIONS[*]} >> $file

for exp in ${EXPORTS[*]}; do
    # Write out e.g. "CXX:=cl"
    value="`echo start \"${!exp}\"|sed -e 's,start ,,' -e 's,[$],$$,g'`"
    [ "$value" != "" ] && echo G__CFG_$exp := "$value" >> $file
done

# Now do the same for configcint.h - but here we need to write _all_ vars
file=inc/configcint.h
echo Writing $file...
echo "/* configcint.h for Cint */" > $file
echo "/* generated by configure with options */" >> $file
echo "/* "${ALLOPTIONS[*]}" */">> $file

for exp in ${EXPORTS[*]}; do
    # Write out e.g. "CXX:=cl"
    [ $exp = EXTRACTSYMBOLS ] && continue
    value="`echo start \"${!exp}\"|sed -e 's,start ,,' -e 's,\\\\,\\\\\\\\,g'`"
    echo '#define 'G__CFG_$exp \""$value"\" >> $file
done

echo ${ALLOPTIONS[*]} > config.status
echo Done.
echo Run \"make\" to build cint.
echo Run \"make help\" to see the available build targets.

# -*- mode:sh -*-
back to top