]> git.cworth.org Git - fips/blobdiff - configure
Add explicit link to libpthread, to work around debugging issues
[fips] / configure
index 91797ce86eedce8895de98550ef3139793ec08f6..f0f1a2188eeed82d9a3468f1374b33771fbf0da7 100755 (executable)
--- a/configure
+++ b/configure
@@ -42,7 +42,6 @@ LDFLAGS=${LDFLAGS:-}
 # Set the defaults for values the user can specify with command-line
 # options.
 PREFIX=/usr/local
 # Set the defaults for values the user can specify with command-line
 # options.
 PREFIX=/usr/local
-LIBDIR=
 
 usage ()
 {
 
 usage ()
 {
@@ -82,8 +81,8 @@ specify an installation prefix other than $PREFIX using
 
 Fine tuning of some installation directories is available:
 
 
 Fine tuning of some installation directories is available:
 
+       --bindir=DIR            Install executables to DIR [PREFIX/bin]
        --libdir=DIR            Install libraries to DIR [PREFIX/lib]
        --libdir=DIR            Install libraries to DIR [PREFIX/lib]
-       --includedir=DIR        Install header files to DIR [PREFIX/include]
        --mandir=DIR            Install man pages to DIR [PREFIX/share/man]
        --sysconfdir=DIR        Read-only single-machine data [PREFIX/etc]
 
        --mandir=DIR            Install man pages to DIR [PREFIX/share/man]
        --sysconfdir=DIR        Read-only single-machine data [PREFIX/etc]
 
@@ -102,6 +101,36 @@ configure-script calling conventions, but don't do anything yet:
 EOF
 }
 
 EOF
 }
 
+# Given two absolute paths ("from" and "to"), compute a relative path
+# from "from" to "to". For example:
+#
+#      relative_path /foo/bar/baz /foo/qux -> ../../qux
+relative_path ()
+{
+    if [ $# -ne 2 ] ; then
+       echo "Internal error: relative_path requires exactly 2 arguments"
+       exit 1;
+    fi
+
+    from="$1"
+    to="$2"
+
+    # Handle trivial case up-front
+    if [ "$from" = "$to" ] ; then
+       echo ""
+    else
+       shared="$from"
+       relative=""
+
+       while [ "${to#$shared}" = "$to" ] && [ "$shared" != "." ] ; do
+           shared="$(dirname $shared)"
+           relative="..${relative:+/${relative}}"
+       done
+
+       echo "${relative:-.}${to#$shared}"
+    fi
+}
+
 # Parse command-line options
 for option; do
     if [ "${option}" = '--help' ] ; then
 # Parse command-line options
 for option; do
     if [ "${option}" = '--help' ] ; then
@@ -109,10 +138,10 @@ for option; do
        exit 0
     elif [ "${option%%=*}" = '--prefix' ] ; then
        PREFIX="${option#*=}"
        exit 0
     elif [ "${option%%=*}" = '--prefix' ] ; then
        PREFIX="${option#*=}"
+    elif [ "${option%%=*}" = '--bindir' ] ; then
+       BINDIR="${option#*=}"
     elif [ "${option%%=*}" = '--libdir' ] ; then
        LIBDIR="${option#*=}"
     elif [ "${option%%=*}" = '--libdir' ] ; then
        LIBDIR="${option#*=}"
-    elif [ "${option%%=*}" = '--includedir' ] ; then
-       INCLUDEDIR="${option#*=}"
     elif [ "${option%%=*}" = '--mandir' ] ; then
        MANDIR="${option#*=}"
     elif [ "${option%%=*}" = '--sysconfdir' ] ; then
     elif [ "${option%%=*}" = '--mandir' ] ; then
        MANDIR="${option#*=}"
     elif [ "${option%%=*}" = '--sysconfdir' ] ; then
@@ -142,17 +171,6 @@ for option; do
     fi
 done
 
     fi
 done
 
-# We set this value early, (rather than just while printing the
-# Makefile.config file later like most values), because we need to
-# actually investigate this value compared to the ldconfig_paths value
-# below.
-if [ -z "$LIBDIR" ] ; then
-    libdir_expanded="${PREFIX}/lib"
-else
-    # very non-general variable expansion
-    libdir_expanded=`echo "$LIBDIR" | sed "s|\\${prefix}|${PREFIX}|g; s|\\$prefix/|${PREFIX}/|; s|//*|/|g"`
-fi
-
 cat <<EOF
 Welcome to ${PROJECT}, ${PROJECT_BLURB}
 
 cat <<EOF
 Welcome to ${PROJECT}, ${PROJECT_BLURB}
 
@@ -174,13 +192,58 @@ EOF
 
 errors=0
 
 
 errors=0
 
+printf "Checking for pkg-config... "
 if pkg-config --version > /dev/null 2>&1; then
 if pkg-config --version > /dev/null 2>&1; then
-    have_pkg_config=1
+    printf "Yes.\n"
+else
+    printf "No.\n"
+    cat <<EOF
+
+*** Error: This configure script requires pkg-config to find the
+compilation flags required to link against the various libraries
+needed by ${PROJECT}. The pkg-config program can be obtained from:
+
+       http://www.freedesktop.org/wiki/Software/pkg-config/
+
+Or you may be able install it with a command such as:
+
+       sudo apt-get install pkg-config
+    or:
+       sudo yum install pkgconfig
+
+EOF
+
+exit 1
+
+fi
+
+printf "Checking for working C compiler (${CC})... "
+printf "int main(void){return 42;}\n" > minimal.c
+if ${CC} -o minimal minimal.c > /dev/null 2>&1
+then
+    printf "Yes.\n"
 else
 else
-    have_pkg_config=0
+    printf "No.\n"
+    cat <<EOF
+
+*** Error: No functioning C compiler found. Either set the CC environment
+to a working C compiler, or else install gcc:
+
+       http://gcc.gnu.org/
+
+You may be able to install gcc with a command such as:
+
+       sudo apt-get install build-essential
+    or:
+       sudo yum install make automake gcc gcc-c++ kernel-devel
+
+EOF
+
+exit 1
+
 fi
 
 fi
 
-printf "Checking for talloc development files... "
+printf "Checking for libtalloc... "
 if pkg-config --exists talloc; then
     printf "Yes.\n"
     have_talloc=1
 if pkg-config --exists talloc; then
     printf "Yes.\n"
     have_talloc=1
@@ -193,62 +256,140 @@ else
     errors=$((errors + 1))
 fi
 
     errors=$((errors + 1))
 fi
 
-libdir_in_ldconfig=0
-
-printf "Checking which platform we are on... "
-uname=`uname`
-if [ $uname = "Darwin" ] ; then
-    printf "Mac OS X.\n"
-    platform=MACOSX
-    linker_resolves_library_dependencies=0
-elif [ $uname = "SunOS" ] ; then
-    printf "Solaris.\n"
-    platform=SOLARIS
-    linker_resolves_library_dependencies=0
-elif [ $uname = "FreeBSD" ] ; then
-    printf "FreeBSD.\n"
-    platform=FREEBSD
-    linker_resolves_library_dependencies=0
-elif [ $uname = "OpenBSD" ] ; then
-    printf "OpenBSD.\n"
-    platform=OPENBSD
-    linker_resolves_library_dependencies=0
-elif [ $uname = "Linux" ] || [ $uname = "GNU" ] ; then
-    printf "$uname\n"
-    platform="$uname"
-    linker_resolves_library_dependencies=1
-
-    printf "Checking for $libdir_expanded in ldconfig... "
-    ldconfig_paths=$(/sbin/ldconfig -N -X -v 2>/dev/null | sed -n -e 's,^\(/.*\):\( (.*)\)\?$,\1,p')
-    # Separate ldconfig_paths only on newline (not on any potential
-    # embedded space characters in any filenames). Note, we use a
-    # literal newline in the source here rather than something like:
-    #
-    #  IFS=$(printf '\n')
-    #
-    # because the shell's command substitution deletes any trailing newlines.
-    IFS="
-"
-    for path in $ldconfig_paths; do
-       if [ "$path" = "$libdir_expanded" ]; then
-           libdir_in_ldconfig=1
-       fi
-    done
-    IFS=$DEFAULT_IFS
-    if [ "$libdir_in_ldconfig" = '0' ]; then
-       printf "No (will set RPATH)\n"
-    else
-       printf "Yes\n"
+printf "Checking for libelf... "
+printf "#include <gelf.h>\nint main(void){return elf_version (EV_CURRENT);}\n" > elf-minimal.c
+if ${CC} -o elf-minimal elf-minimal.c -lelf > /dev/null 2>&1
+then
+    printf "Yes.\n"
+    have_libelf=1
+    libelf_cflags=
+    libelf_ldflags=-lelf
+else
+    printf "No.\n"
+    have_libelf=0
+    libelf_cflags=
+    libelf_ldflags=
+    errors=$((errors + 1))
+fi
+rm -f elf-minimal elf-minimal.c
+
+printf "Checking for GL/gl.h... "
+have_gl=0
+if pkg-config --exists gl; then
+    printf "Yes.\n"
+    have_gl=1
+    gl_cflags=$(pkg-config --cflags gl)
+    gl_ldflags=$(pkg-config --libs gl)
+else
+    printf"No.\n"
+    have_gl=0
+    errors=$((errors + 1))
+fi
+
+printf "Checking for GL window-system-binding headers:\n"
+have_gl_winsys=0
+
+printf "       Checking for GL/glx.h... "
+have_glx=No
+printf "#include <GL/glx.h>\nint main(void){return 0;}\n" > glx-minimal.c
+if ${CC} -o glx-minimal glx-minimal.c ${gl_cflags} > /dev/null 2>&1
+then
+    printf "Yes.\n"
+    have_gl_winsys=1
+    have_glx=Yes
+else
+    printf "No.\n"
+fi
+rm -f glx-minimal glx-minimal.c
+
+if [ $have_gl_winsys -eq 0 ]; then
+    errors=$((errors + 1))
+fi
+
+printf "       Checking for X11... "
+have_x11=No
+if pkg-config --exists x11; then
+  printf "Yes.\n"
+  have_x11=Yes
+  x11_cflags=$(pkg-config --cflags x11)
+  x11_ldflags=$(pkg-config --libs x11)
+else
+  printf "No.\n"
+fi
+
+printf "       Checking for EGL/egl.h... "
+have_egl=No
+if pkg-config --exists egl; then
+    printf "Yes.\n"
+    have_egl=Yes
+    egl_cflags=$(pkg-config --cflags egl)
+    egl_ldflags=$(pkg-config --libs egl)
+else
+    printf "No.\n"
+fi
+
+printf "       Checking for GLESv2... "
+have_glesv2=No
+if pkg-config --exists glesv2; then
+    printf "Yes.\n"
+    have_glesv2=Yes
+    glesv2_cflags=$(pkg-config --cflags glesv2)
+    glesv2_ldflags=$(pkg-config --libs glesv2)
+else
+    printf "No.\n"
+fi
+
+printf "int main(void){return 0;}\n" > minimal.c
+
+WARN_CFLAGS=""
+printf "Checking for available C compiler warning flags:\n"
+for flag in -Wall -Wextra -Wmissing-declarations; do
+    if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
+    then
+       WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
     fi
     fi
+done
+printf "\t${WARN_CFLAGS}\n"
+
+rm -f minimal minimal.c
+
+printf "#include <features.h>\nint main(void){return 0;}\n" > arch-minimal.c
+
+printf "Checking for machine-dependent compiler support:\n"
+
+printf "       Compiler can create 32-bit binaries... "
+have_m32=Yes
+if ${CC} -m32 -o arch-minimal arch-minimal.c > /dev/null 2>&1
+then
+    printf "Yes.\n"
 else
 else
-    printf "Unknown.\n"
+    printf "No.\n"
+    have_m32=No
+fi
+
+printf "       Compiler can create 64-bit binaries... "
+have_m64=Yes
+if ${CC} -m64 -o arch-minimal arch-minimal.c > /dev/null 2>&1
+then
+    printf "Yes.\n"
+else
+    printf "No.\n"
+    have_m64=No
+fi
+
+if [ "$have_m32" = "No" ] || [ "$have_m64" = "No" ]; then
     cat <<EOF
 
     cat <<EOF
 
-*** Warning: Unknown platform. ${PROJECT} might or might not build correctly.
+* Warning: Cannot create both 32 and 64-bit fips libraries. Fips will not
+           support applications of the non-native size. Fixing this may be
+           as simple as running a command such as:
 
 
+               sudo apt-get install gcc-multilib
 EOF
 fi
 
 EOF
 fi
 
+rm -f arch-minimal arch-minimal.c
+
 if [ $errors -gt 0 ]; then
     cat <<EOF
 
 if [ $errors -gt 0 ]; then
     cat <<EOF
 
@@ -262,6 +403,21 @@ EOF
        echo "  http://talloc.samba.org/"
        echo
     fi
        echo "  http://talloc.samba.org/"
        echo
     fi
+    if [ $have_libelf -eq 0 ]; then
+       echo "  The libelf library (including development files such as headers)"
+       echo "  http://http://sourceforge.net/projects/elftoolchain/"
+       echo
+    fi
+    if [ $have_gl -eq 0 ]; then
+       echo "  Open GL header files (GL/gl.h)"
+       echo "  http://www.mesa3d.org/"
+       echo
+    fi
+    if [ $have_gl_winsys -eq 0 ]; then
+       echo "  OpenGL window-system-bindings header files (GL/glx.h and/or GL/egl.h)"
+       echo "  http://www.mesa3d.org/"
+       echo
+    fi
     cat <<EOF
 With any luck, you're using a modern, package-based operating system
 that has all of these packages available in the distribution. In that
     cat <<EOF
 With any luck, you're using a modern, package-based operating system
 that has all of these packages available in the distribution. In that
@@ -269,35 +425,17 @@ case a simple command will install everything you need. For example:
 
 On Debian and similar systems:
 
 
 On Debian and similar systems:
 
-       sudo apt-get install libtalloc-dev
+       sudo apt-get install libtalloc-dev libelf-dev \\
+       libgl1-mesa-dev libgles2-mesa-dev
 
 Or on Fedora and similar systems:
 
 
 Or on Fedora and similar systems:
 
-       sudo yum install libtalloc-devel
+       sudo yum install libtalloc-devel libelf-devel \\
+       mesa-libGL-devel mesa-libGLES-devel
 
 On other systems, similar commands can be used, but the details of the
 package names may be different.
 
 
 On other systems, similar commands can be used, but the details of the
 package names may be different.
 
-EOF
-    if [ $have_pkg_config -eq 0 ]; then
-cat <<EOF
-Note: the pkg-config program is not available. This configure script
-uses pkg-config to find the compilation flags required to link against
-the various libraries needed by ${PROJECT}. It's possible you simply need
-to install pkg-config with a command such as:
-
-       sudo apt-get install pkg-config
-Or:
-       sudo yum install pkgconfig
-
-But if pkg-config is not available for your system, then you will need
-to modify the configure script to manually set the cflags and ldflags
-variables to the correct values to link against each library in each
-case that pkg-config could not be used to determine those values.
-
-EOF
-    fi
-cat <<EOF
 When you have installed the necessary dependencies, you can run
 configure again to ensure the packages can be found, or simply run
 "make" to compile.
 When you have installed the necessary dependencies, you can run
 configure again to ensure the packages can be found, or simply run
 "make" to compile.
@@ -306,24 +444,16 @@ EOF
     exit 1
 fi
 
     exit 1
 fi
 
-printf "int main(void){return 0;}\n" > minimal.c
+cat <<EOF
 
 
-WARN_CFLAGS=""
-printf "Checking for available C compiler warning flags... "
-for flag in -Wall -Wextra -Wmissing-declarations; do
-    if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
-    then
-       WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
-    fi
-done
-printf "\n\t${WARN_CFLAGS}\n"
+All required packages were found.
 
 
-rm -f minimal minimal.c
+The following OpenGL window-system bindings will be supported:
 
 
-cat <<EOF
+       GLX: ${have_glx}
+       EGL: ${have_egl}
 
 
-All required packages were found. You may now run the following
-commands to compile and install ${PROJECT}:
+You may now run the following commands to compile and install ${PROJECT}:
 
        make
        sudo make install
 
        make
        sudo make install
@@ -369,49 +499,74 @@ CC = ${CC}
 CFLAGS = ${CFLAGS}
 
 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
 CFLAGS = ${CFLAGS}
 
 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
-LDFLAGS = ${LDFLAGS} -ldl
+LDFLAGS = ${LDFLAGS}
 
 # Flags to enable warnings when using the C compiler
 WARN_CFLAGS=${WARN_CFLAGS}
 
 # The prefix to which ${PROJECT} should be installed
 
 # Flags to enable warnings when using the C compiler
 WARN_CFLAGS=${WARN_CFLAGS}
 
 # The prefix to which ${PROJECT} should be installed
-# Note: If you change this value here, be sure to ensure that the
-# LIBDIR_IN_LDCONFIG value below is still set correctly.
 prefix = ${PREFIX}
 
 prefix = ${PREFIX}
 
+# The directory to which executables should be installed
+bindir = ${BINDIR:=\$(prefix)/bin}
+
 # The directory to which libraries should be installed
 # The directory to which libraries should be installed
-# Note: If you change this value here, be sure to ensure that the
-# LIBDIR_IN_LDCONFIG value below is still set correctly.
 libdir = ${LIBDIR:=\$(prefix)/lib}
 
 libdir = ${LIBDIR:=\$(prefix)/lib}
 
-# Whether libdir is in a path configured into ldconfig
-LIBDIR_IN_LDCONFIG = ${libdir_in_ldconfig}
-
-# The directory to which header files should be installed
-includedir = ${INCLUDEDIR:=\$(prefix)/include}
-
 # The directory to which man pages should be installed
 mandir = ${MANDIR:=\$(prefix)/share/man}
 
 # The directory to which read-only (configuration) files should be installed
 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
 
 # The directory to which man pages should be installed
 mandir = ${MANDIR:=\$(prefix)/share/man}
 
 # The directory to which read-only (configuration) files should be installed
 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
 
-# Supported platforms (so far) are: LINUX, MACOSX, SOLARIS, FREEBSD, OPENBSD
-PLATFORM = ${platform}
-
-# Whether the linker will automatically resolve the dependency of one
-# library on another (if not, then linking a binary requires linking
-# directly against both)
-LINKER_RESOLVES_LIBRARY_DEPENDENCIES = ${linker_resolves_library_dependencies}
+# Whether compiler can create 32 or 64-bit binaries
+COMPILER_SUPPORTS_32 = ${have_m32}
+COMPILER_SUPPORTS_64 = ${have_m64}
 
 # Flags needed to compile and link against talloc
 TALLOC_CFLAGS = ${talloc_cflags}
 TALLOC_LDFLAGS = ${talloc_ldflags}
 
 
 # Flags needed to compile and link against talloc
 TALLOC_CFLAGS = ${talloc_cflags}
 TALLOC_LDFLAGS = ${talloc_ldflags}
 
+# Flags needed to compile and link against libelf
+LIBELF_CFLAGS = ${libelf_cflags}
+LIBELF_LDFLAGS = ${libelf_ldflags}
+
+# Whether GLX headers are available
+HAVE_GLX = ${have_glx}
+
+# Flags needed to compile and link against libGL
+GL_CFLAGS = ${gl_cflags}
+GL_LDFLAGS = ${gl_ldflags}
+
+# Whether X11 headers and library are available
+HAVE_X11 = ${have_x11}
+
+# Flags needed to compile and link against libX11
+X11_CLFLAGS = ${x11_cflags}
+X11_LDFLAGS = ${x11_ldflags}
+
+# Whether EGL headers are available
+HAVE_EGL = ${have_egl}
+
+# Flags needed to find EGL header files (EGL/egl.h)
+EGL_CFLAGS = ${egl_cflags}
+EGL_LDFLAGS = ${egl_ldflags}
+
+# Whether GLESv2 headers and library are available
+HAVE_GLESV2 = ${have_glesv2}
+
+# Flags needed to compile and link against GLESv2
+GLESV2_CFLAGS = ${glesv2_cflags}
+GLESV2_LDFLAGS = ${glesv2_ldflags}
+
 # Flags needed to have linker link only to necessary libraries
 AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
 # Flags needed to have linker link only to necessary libraries
 AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
+EOF
+
+# construct config.h
+cat > config.h <<EOF
+/* Generated by configure. */
 
 
-# Combined flags for compiling and linking against all of the above
-CONFIGURE_CFLAGS = \$(TALLOC_CFLAGS)
-CONFIGURE_LDFLAGS = \$(TALLOC_LDFLAGS)
+/* Relative path from ${BINDIR} to ${LIBDIR}/fips */
+#define BINDIR_TO_LIBFIPSDIR "$(relative_path ${BINDIR} ${LIBDIR})/fips"
 EOF
 EOF