From 149f83dc2bb79cda3f856ee1d1096d88179cb22c Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Sun, 18 Feb 2001 12:47:50 -0500 Subject: [PATCH] ENH: add a smaple configure.in for CMake based projects --- configure.in.sample | 617 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 617 insertions(+) create mode 100644 configure.in.sample diff --git a/configure.in.sample b/configure.in.sample new file mode 100644 index 000000000..04623b5c3 --- /dev/null +++ b/configure.in.sample @@ -0,0 +1,617 @@ +# Process this file with autoconf to produce a configure script. +AC_INIT() + +AC_CONFIG_HEADER(itkConfigure.h) + +CMAKE_CONFIG_DIR=`pwd` +AC_SUBST(CMAKE_CONFIG_DIR) + +# +# check for some programs we use +# +AC_PROG_CC +AC_PROG_CXX +AC_PROG_RANLIB +AC_PROG_INSTALL +AC_PATH_XTRA + + +# get byte swapping info +AC_C_BIGENDIAN +if test $ac_cv_c_bigendian = yes; then + AC_DEFINE(CMAKE_WORDS_BIGENDIAN) +fi + + +# some stuff Tcl uses +# +AC_CHECK_HEADER(limits.h, HAVE_LIMITS_H=-DHAVE_LIMITS_H,HAVE_LIMITS_H="") +AC_SUBST(HAVE_LIMITS_H) +AC_HAVE_HEADERS(unistd.h, HAVE_UNISTD_H=-DHAVE_UNISTD_H,HAVE_UNISTD_H="") +AC_SUBST(HAVE_UNISTD_H) + +# Step 1: set the variable "system" to hold the name and version number +# for the system. This can usually be done via the "uname" command, but +# there are a few systems, like Next, where this doesn't work. + +AC_MSG_CHECKING([system version (for dynamic loading)]) +if test -f /usr/lib/NextStep/software_version; then + system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version` +else + system=`uname -s`-`uname -r` + if test "$?" -ne 0 ; then + AC_MSG_RESULT([unknown (can't find uname command)]) + system=unknown + else + # Special check for weird MP-RAS system (uname returns weird + # results, and the version is kept in special file). + + if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then + system=MP-RAS-`awk '{print $3}' /etc/.relid'` + fi + AC_MSG_RESULT($system) + fi +fi + + + +# +# use shared libs +# +AC_ARG_WITH(shared, + [ --with-shared create shared libraries], + [CMAKE_shared_ok=$withval], [CMAKE_shared_ok=no]) + +INSTALL_TARGET="install" + + + +AC_SUBST(INSTALL_TARGET) + +BUILD_TOOLKITS="" +CLEAN_TOOLKITS="" +DEPEND_TOOLKITS="" +INSTALL_TOOLKITS="" + +# --with-kits goes here +AC_SUBST(BUILD_TOOLKITS) +AC_SUBST(INSTALL_TOOLKITS) +AC_SUBST(DEPEND_TOOLKITS) +AC_SUBST(CLEAN_TOOLKITS) + + +# option for handling BSD style makefile includes +# +AC_ARG_WITH(bsdmake, + [ --with-bsdmake uses bsd style makefile includes], + if test "$withval" = yes; then + MAKEINCLUDE=".include" + MAKEQUOTE='"' + fi, + MAKEINCLUDE="include" + MAKEQUOTE='') +AC_SUBST(MAKEINCLUDE) +AC_SUBST(MAKEQUOTE) + + + +# the following is an excerpt from the tcl7.5b2 configure.in +#-------------------------------------------------------------------- +# The statements below define a collection of symbols related to +# dynamic loading and shared libraries: +# +# SHLIB_CFLAGS - Flags to pass to cc when compiling the components +# of a shared library (may request position-independent +# code, among other things). +# SHLIB_LD_LIBS - Dependent libraries for the linker to scan when +# creating shared libraries. This symbol typically +# goes at the end of the "ld" commands that build +# shared libraries. The value of the symbol if +# "${LIBS}" if all of the dependent libraries should +# be specified when creating a shared library. If +# dependent libraries should not be specified (as on +# SunOS 4.x, where they cause the link to fail, or in +# general if Tcl and Tk aren't themselves shared +# libraries), then this symbol has an empty string +# as its value. +# SHLIB_SUFFIX - Suffix to use for the name of the shared library. An +# empty string means we don't know how to use shared +# libraries on this platform. +# CMAKE_SHLIB_BUILD_FLAGS - +# Flags to use when building a shared library. +# CMAKE_SHLIB_LINK_FLAGS - +# Flags to pass to the compiler when linking object +# files into an executable application binary such +# as tclsh. +#-------------------------------------------------------------------- + + +# Step 2: check for existence of -ldl library. This is needed because +# Linux can use either -ldl or -ldld for dynamic loading. + +AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no) + +# Step 4: set configuration options based on system name and version. + +fullSrcDir=`cd $srcdir; pwd` +AC_SUBST(fullSrcDir) +case $system in + AIX-*) + # AIX: can't link shared library extensions unless Tcl and Tk are + # also shared libraries. + SHLIB_CFLAGS="" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX="..o" + DL_LIBS="" + AC_CHECK_LIB(ld,printf, DL_LIBS="-lld") + CMAKE_SHLIB_LINK_FLAGS="" + ;; + HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*) + SHLIB_CFLAGS="+z" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".sl" + DL_LIBS="-ldld" + CMAKE_SHLIB_BUILD_FLAGS='+Z -Wl,-E -Wl,-b' + CMAKE_SHLIB_LINK_FLAGS='-Wl,+s -Wl,+b,${LIB_RUNTIME_DIR}' + if test "$CC" = "gcc" -o `$CC -v 2>&1 | grep -c gcc` != "0" ; then + CMAKE_SHLIB_BUILD_FLAGS='-shared -Wl,-E -Wl,-b' + CMAKE_SHLIB_LINK_FLAGS='-Wl,+s -Wl,+b,${LIB_RUNTIME_DIR}' + fi + ;; + IRIX-5.*) + SHLIB_CFLAGS="" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_LIBS="" + CMAKE_SHLIB_BUILD_FLAGS="-shared -rdata_shared" + ;; + IRIX-6* | IRIX64-6* | IRIX-64-6*) + SHLIB_CFLAGS="" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_LIBS="" + CMAKE_SHLIB_BUILD_FLAGS="-shared -rdata_shared" + ;; + Linux*) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + CMAKE_SHLIB_BUILD_FLAGS="-shared" + if test "$have_dl" = yes; then + DL_LIBS="-ldl" + CMAKE_SHLIB_LINK_FLAGS="-rdynamic" + else + AC_CHECK_HEADER(dld.h, [ + DL_LIBS="-ldld" + CMAKE_SHLIB_LINK_FLAGS=""]) + fi + ;; + CYGWIN_NT*) + DL_LIBS="-lgdi32" + ;; + MP-RAS-02*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_LIBS="-ldl" + CMAKE_SHLIB_LINK_FLAGS="" + ;; + MP-RAS-*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_LIBS="-ldl" + CMAKE_SHLIB_LINK_FLAGS="-Wl,-Bexport" + ;; + NetBSD-*|FreeBSD-*) + # Not available on all versions: check for include file. + if test -f /usr/include/dlfcn.h; then + SHLIB_CFLAGS="-fpic" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_LIBS="" + CMAKE_SHLIB_LINK_FLAGS="-shared" + else + SHLIB_CFLAGS="" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX="..o" + DL_LIBS="" + CMAKE_SHLIB_LINK_FLAGS="" + fi + ;; + NEXTSTEP-*) + SHLIB_CFLAGS="" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_LIBS="" + CMAKE_SHLIB_LINK_FLAGS="" + ;; + OSF1-1.[012]) + # OSF/1 1.[012] from OSF, and derivatives, including Paragon OSF/1 + SHLIB_CFLAGS="" + # Hack: make package name same as library name + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_LIBS="" + CMAKE_SHLIB_LINK_FLAGS="" + ;; + OSF1-1.*) + # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2 + SHLIB_CFLAGS="-fpic" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_LIBS="" + CMAKE_SHLIB_LINK_FLAGS="" + ;; + OSF1-V*) + # Digital OSF/1 + SHLIB_CFLAGS="" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_LIBS="" + CMAKE_SHLIB_BUILD_FLAGS='-shared -Wl,-expect_unresolved,"*"' + CMAKE_SHLIB_LINK_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + ;; + RISCos-*) + SHLIB_CFLAGS="-G 0" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX="..o" + DL_LIBS="" + CMAKE_SHLIB_LINK_FLAGS="-Wl,-D,08000000" + ;; + SCO_SV-3.2*) + # Note, dlopen is available only on SCO 3.2.5 and greater. However, + # this test works, since "uname -s" was non-standard in 3.2.4 and + # below. + SHLIB_CFLAGS="-Kpic -belf" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_LIBS="" + CMAKE_SHLIB_LINK_FLAGS="-belf -Wl,-Bexport" + ;; + SINIX*5.4*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_LIBS="-ldl" + CMAKE_SHLIB_LINK_FLAGS="" + ;; + SunOS-4*) + SHLIB_CFLAGS="-PIC" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_LIBS="-ldl" + CMAKE_SHLIB_BUILD_FLAGS='-shared -Wl,-r -nostdlib' + CMAKE_SHLIB_LINK_FLAGS='-Wl,-L${LIB_RUNTIME_DIR}' + ;; + SunOS-5*) + SHLIB_CFLAGS="-KPIC" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_LIBS="-ldl" + CMAKE_SHLIB_BUILD_FLAGS='-G' + CMAKE_SHLIB_LINK_FLAGS='-R ${LIB_RUNTIME_DIR}' + if test "$CC" = "gcc" -o `$CC -v 2>&1 | grep -c gcc` != "0" ; then + CMAKE_SHLIB_BUILD_FLAGS='-Wl,-G' + CMAKE_SHLIB_LINK_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + fi + ;; + ULTRIX-4.*) + SHLIB_CFLAGS="-G 0" + SHLIB_SUFFIX="..o" + SHLIB_LD_LIBS="" + DL_LIBS="" + CMAKE_SHLIB_LINK_FLAGS="-Wl,-D,08000000" + ;; + UNIX_SV*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_LIBS="-ldl" + CMAKE_SHLIB_LINK_FLAGS="-Wl,-Bexport" + ;; +esac +export SHLIB_SUFFIX + +# If we're running gcc, then change the C flags for compiling shared +# libraries to the right flags for gcc, instead of those for the +# standard manufacturer compiler. +if test "$CC" = "gcc" -o `$CC -v 2>&1 | grep -c gcc` != "0" ; then + SHLIB_CFLAGS="-fPIC" +fi + +if test "$CMAKE_shared_ok" = "yes"; then + CMAKE_SHLIB_CFLAGS="${SHLIB_CFLAGS}" + CMAKE_LD_SEARCH_FLAGS="${LD_SEARCH_FLAGS}" + CMAKE_TCL_SHLIB_TARGET="CMAKEtcl" + RANLIB=":" + TOOLKIT_DEPENDS="" + CMAKE_LIB_EXT="${SHLIB_SUFFIX}" +else + CMAKE_LIB_EXT=".a" + SHLIB_LD_LIBS="" + CMAKE_SHLIB_CFLAGS="" + CMAKE_LD_SEARCH_FLAGS="" +fi +export CMAKE_LIB_EXT + +AC_SUBST(CMAKE_TCL_SHLIB_TARGET) + + +AC_SUBST(TOOLKIT_DEPENDS) + +AC_SUBST(CMAKE_SHLIB_LINK_FLAGS) +AC_SUBST(CMAKE_SHLIB_BUILD_FLAGS) + +AC_SUBST(CMAKE_SHLIB_CFLAGS) +AC_SUBST(CMAKE_LIB_EXT) +AC_SUBST(DL_LIBS) +AC_SUBST(SHLIB_LD_LIBS) +AC_SUBST(SHLIB_SUFFIX) + + +#-------------------------------------------------------------------- +# Include sys/select.h if it exists and if it supplies things +# that appear to be useful and aren't already in sys/types.h. +# This appears to be true only on the RS/6000 under AIX. Some +# systems like OSF/1 have a sys/select.h that's of no use, and +# other systems like SCO UNIX have a sys/select.h that's +# pernicious. If "fd_set" isn't defined anywhere then set a +# special flag. +#-------------------------------------------------------------------- + +AC_MSG_CHECKING([fd_set and sys/select]) +AC_TRY_COMPILE([#include ], + [fd_set readMask, writeMask;], tk_ok=yes, tk_ok=no) +if test $tk_ok = no; then + AC_HEADER_EGREP(fd_mask, sys/select.h, tk_ok=yes) + if test $tk_ok = yes; then + AC_DEFINE(HAVE_SYS_SELECT_H) + fi +fi +AC_MSG_RESULT($tk_ok) +if test $tk_ok = no; then + AC_DEFINE(NO_FD_SET) +fi + + +########################## +## ## +## Check thread support ## +## ## +########################## +# initialize thread vars +THREAD_LIBS="" +THREAD_FLAGS="" +use_sproc=no +CMAKE_USE_SPROC=0 +CMAKE_USE_PTHREADS=0 +CMAKE_HP_PTHREADS=0 + +########################## +## ## +## sproc ## +## ## +########################## +# check for sproc +force_sproc=no +AC_ARG_WITH(sproc, + [ --with-sproc use sproc instead of pthreads if possible], + if test "$withval" = yes; then + force_sproc=yes + fi,) + + + +AC_CHECK_HEADERS(sys/prctl.h, [use_sproc=yes]) +if test "$use_sproc" = "yes"; then +case $system in + Linux* | IRIX64-6.5 | IRIX-6.5) + if test "$force_sproc" = "yes"; then + CMAKE_USE_SPROC=1 + else + use_sproc=no + fi + ;; + IRIX*) + CMAKE_USE_SPROC=1 + ;; +esac +fi +use_pthreads=no +AC_CHECK_HEADERS(pthread.h, [use_pthreads=yes]) +if test "$use_pthreads" = "yes"; then + if test "$use_sproc" = "no"; then + AC_CHECK_LIB(pthreads, pthread_create, THREAD_LIBS="-lpthreads") + AC_CHECK_LIB(pthread, pthread_create, THREAD_LIBS="-lpthread") +# Work around Solaris 5.6 and 5.7 bug: + if test "`uname -s -r`" = "SunOS 5.6"; then + AC_CHECK_LIB(thread, thr_create, THREAD_LIBS="$THREAD_LIBS -lthread") + fi + if test "`uname -s -r`" = "SunOS 5.7"; then + AC_CHECK_LIB(thread, thr_create, THREAD_LIBS="$THREAD_LIBS -lthread") + fi + CMAKE_USE_PTHREADS=1 + fi +fi + +# on an HP with pthread we need to use -lcma +# on dec alphas we have had problems as well +if test "$use_pthreads" = "yes"; then +case $system in + HP-UX-*.10.*) + THREAD_LIBS="-lcma" + CMAKE_USE_PTHREADS=1 + CMAKE_HP_PTHREADS=1 + ;; + OSF1-V*) + CMAKE_USE_PTHREADS=0 + THREAD_LIBS="" + ;; + FreeBSD*) + CMAKE_USE_PTHREADS=0 + THREAD_LIBS="" + ;; +esac +fi + + +if test $CMAKE_USE_SPROC = 1; then +AC_DEFINE(CMAKE_USE_SPROC) +fi +if test $CMAKE_USE_PTHREADS = 1; then +AC_DEFINE(CMAKE_USE_PTHREADS) +fi +if test $CMAKE_HP_PTHREADS = 1; then +AC_DEFINE(CMAKE_HP_PTHREADS) +fi + +AC_SUBST(THREAD_LIBS) + + + +# on hp use -Aa for ansi +if test $ac_cv_prog_gxx = no; then +case $system in + HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*) + echo $ac_n "checking whether ${CC} accepts -Aa""... $ac_c" 1>&6 + echo 'void f(){}' > conftest.c + if test -z "`${CC} -Aa -c conftest.cc 2>&1`"; then + echo "$ac_t""yes" 1>&6 + ANSI_CFLAGS="-Aa" + else + echo "$ac_t""no" 1>&6 + fi + rm -f conftest* + ;; +esac +fi +AC_SUBST(ANSI_CFLAGS) + +# if we are not running g++ then we might need some other flags +# to get the templates compiled correctly +CMAKE_TEMPLATE_FLAGS="" +if test $ac_cv_prog_gxx = no; then + echo $ac_n "checking whether ${CXX} accepts -ptused -no_prelink""... $ac_c" 1>&6 + echo 'void f(){}' > conftest.cc + if test -z "`${CXX} -ptused -no_prelink -c conftest.cc 2>&1`"; then + echo "$ac_t""yes" 1>&6 + CMAKE_TEMPLATE_FLAGS="-ptused -no_prelink" + else + echo "$ac_t""no" 1>&6 + fi + rm -f conftest* + echo $ac_n "checking whether ${CXX} accepts -instances=semiexplicit""... $ac_c" 1>&6 + echo 'void f(){}' > conftest.cc + if test -z "`${CXX} -instances=static -c conftest.cc 2>&1`"; then + echo "$ac_t""yes" 1>&6 + CMAKE_TEMPLATE_FLAGS="-instances=static" + else + echo "$ac_t""no" 1>&6 + fi +fi +AC_SUBST(CMAKE_TEMPLATE_FLAGS) + +if test "$CC" = "gcc" -o `$CC -v 2>&1 | grep -c gcc` != "0" ; then + SHLIB_CFLAGS="-fPIC" +fi + +if test -f $CMAKE_CONFIG_DIR/CMakeLocal.make.in; then + echo "create CMakeLocal.make from $CMAKE_CONFIG_DIR/CMakeLocal.make.in" + rm -f local.make + cp $CMAKE_CONFIG_DIR/local.make.in local.make +else + echo "no $CMAKE_CONFIG_DIR/CMakeLocal.make.in creating an empty CMakeLocal.make file" + rm -f CMakeLocal.make + touch CMakeLocal.make +fi + +AC_SUBST(EXTRA_GCC_FLAG) + + +# run any sub directory cofigure scripts here + +AC_CONFIG_SUBDIRS(Code/Insight3DParty/vxl/vcl) + +# ***************************************** +# +# This next section extracts the sub-directories from +# the CMakeLists.txt file in the current directory, +# and any sub directories recursivley +# + +echo "Searching CMakeLists.txt files for all sub directories" +# the result of a the directories found is stored in allDirs +allDirs= +# start looking in the current directory . +searchDirs=$srcdir +# loop until the flag dirHasListsFile is set to falls +dirHasListsFile=: +while $dirHasListsFile; do + # reset the varible used to store the full paths to the directory + # outside the for loop + fullPathDirs= + # loop over all directorirs in the current searchDirs varible + for currentDir in $searchDirs;do + # look for a CMakeLists.txt file in the current directory + if test -e$currentDir/CMakeLists.txt; then + # extract the SUBDIRS varible from the CMakeLists.txt file + dirsInListsFile=`cat $currentDir/CMakeLists.txt | sed -e :a -e '/SUBDIRS.*\\\\$/N; s/\\\\\\n//; ta' | grep SUBDIRS | sed -e "s/SUBDIRS//g; s/(//g;s/)//g" ` + # add the current directory to any sub dirs found + # in the above search of CMakeLists.txt + for subdir in $dirsInListsFile;do + fullPathDirs="$fullPathDirs $currentDir/$subdir" + allDirs="$allDirs $currentDir/$subdir" + done + fi + done + # now get ready to search any directories found in the above for loop + searchDirs=$fullPathDirs + # check to see if searchDirs is emtpy + if test "x$searchDirs" = x; then + dirHasListsFile=false + fi +done # continue while loop until dirHasListsFile=false + +if test "x$srcdir" = x.; then + allDirs=`echo $allDirs | sed -e "s|\./||g"` +else + allDirs=`echo $allDirs | sed -e "s|$srcdir/||g"` +fi +SUBDIR_MAKEFILES=`echo $allDirs | sed -e 's|\\([[A-Za-z0-9_/]][[A-Za-z0-9_/]]*\\)|\1/Makefile:CMake/MakefileTemplate.in|g'` + +SUBDIR_CMAKE_TARGETS=`echo $allDirs | sed -e 's|\\([[A-Za-z0-9_/]][[A-Za-z0-9_/]]*\\)|\1/CMakeTargets.make:CMake/CMakeTargets.make.in|g'` + +# +# ***************************************** +# end of extract SUBDIRS out of CMakeLists.txt files +# + + +# output to the top level Makefile, which must be present +# create the toplevel CMakeTargets.make file +# Create all the make file fragments in CMake +# Create the Makefile in CMake/Source +# Create all the Makefiles and CMakeTargets.make files for +# sub directories found in CMakeLists.txt files + +AC_OUTPUT( +Makefile:CMake/MakefileTemplate.in +CMakeTargets.make:CMake/CMakeTargets.make.in +CMake/CMakeSimpleRules.make +CMake/CMakeMaster.make +CMake/CMakeVariables.make +CMake/CMakeRules.make +CMake/Source/CMakeTargets.make:CMake/dummy.in +CMake/Source/Makefile +$SUBDIR_MAKEFILES +$SUBDIR_CMAKE_TARGETS +) + + + +# force a rebuild of rulesgen which will rebuild CMakeTargets.make +# this has to be done because configure generates empty CMakeTargets.make files +# for makes other than gnu. +rm -f CMake/Source/CMakeBuildTargets +rm -f CMake/Source/CMakeBuildTargets.exe