# Set the defaults for values the user can specify with command-line
# options.
PREFIX=/usr/local
-LIBDIR=
usage ()
{
Fine tuning of some installation directories is available:
+ --bindir=DIR Install executables to DIR [PREFIX/bin]
--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]
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
exit 0
elif [ "${option%%=*}" = '--prefix' ] ; then
PREFIX="${option#*=}"
+ elif [ "${option%%=*}" = '--bindir' ] ; then
+ BINDIR="${option#*=}"
elif [ "${option%%=*}" = '--libdir' ] ; then
LIBDIR="${option#*=}"
- elif [ "${option%%=*}" = '--includedir' ] ; then
- INCLUDEDIR="${option#*=}"
elif [ "${option%%=*}" = '--mandir' ] ; then
MANDIR="${option#*=}"
elif [ "${option%%=*}" = '--sysconfdir' ] ; then
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}
errors=0
+printf "Checking for pkg-config... "
if pkg-config --version > /dev/null 2>&1; then
- have_pkg_config=1
+ printf "Yes.\n"
else
- have_pkg_config=0
+ 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 talloc development files... "
+printf "Checking for libtalloc... "
if pkg-config --exists talloc; then
printf "Yes.\n"
have_talloc=1
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"
+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)
+else
+ printf "#include <GL/gl.h>\nint main(void){return 0;}\n" > gl-minimal.c
+ if ${CC} -o gl-minimal gl-minimal.c > /dev/null 2>&1
+ then
+ printf "Yes.\n"
+ have_gl=1
else
- printf "Yes\n"
+ printf "No.\n"
+ errors=$((errors + 1))
fi
+ rm -f gl-minimal gl-minimal.c
+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 "Unknown.\n"
- cat <<EOF
+ printf "No.\n"
+fi
+rm -f glx-minimal glx-minimal.c
-*** Warning: Unknown platform. ${PROJECT} might or might not build correctly.
+printf " Checking for GL/egl.h... "
+have_egl=No
+if pkg-config --exists egl; then
+ printf "Yes.\n"
+ have_egl=Yes
+ egl_cflags=$(pkg-config --cflags egl)
+else
+ printf "#include <GL/egl.h>\nint main(void){return 0;}\n" > egl-minimal.c
+ if ${CC} -o egl-minimal egl-minimal.c ${gl_cflags} > /dev/null 2>&1
+ then
+ printf "Yes.\n"
+ have_gl_winsys=1
+ have_egl=1
+ else
+ printf "No.\n"
+ fi
+ rm -f egl-minimal egl-minimal.c
+fi
-EOF
+if [ $have_gl_winsys -eq 0 ]; then
+ errors=$((errors + 1))
fi
if [ $errors -gt 0 ]; then
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
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:
- 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.
-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.
cat <<EOF
-All required packages were found. You may now run the following
-commands to compile and install ${PROJECT}:
+All required packages were found.
+
+The following OpenGL window-system bindings will be supported:
+
+ GLX: ${have_glx}
+ EGL: ${have_egl}
+
+You may now run the following commands to compile and install ${PROJECT}:
make
sudo make install
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
-# Note: If you change this value here, be sure to ensure that the
-# LIBDIR_IN_LDCONFIG value below is still set correctly.
prefix = ${PREFIX}
+# The directory to which executables should be installed
+bindir = ${BINDIR:=\$(prefix)/bin}
+
# 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}
-# 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}
-# 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}
-
# 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 find GL and GLX header files (GL/gl.h and GL/glx.h)
+GL_CFLAGS = ${gl_cflags}
+
+# Whether EGL headers are available
+HAVE_EGL = ${have_egl}
+
+# Flags needed to find EGL header files (EGL/egl.h)
+EGL_CFLAGS = ${egl_cflags}
+
# Flags needed to have linker link only to necessary libraries
AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
# Combined flags for compiling and linking against all of the above
-CONFIGURE_CFLAGS = \$(TALLOC_CFLAGS)
-CONFIGURE_LDFLAGS = \$(TALLOC_LDFLAGS)
+CONFIGURE_CFLAGS = \$(TALLOC_CFLAGS) \$(LIBELF_CFLAGS) \$(GL_CFLAGS) \$(EGL_CFLAGS)
+CONFIGURE_LDFLAGS = \$(TALLOC_LDFLAGS) \$(LIBELF_LDFLAGS)
+EOF
+
+# construct config.h
+cat > config.h <<EOF
+/* Generated by configure. */
+
+/* Relative path from ${bindir} to ${libdir} */
+#define BINDIR_TO_LIBFIPSDIR "$(relative_path ${BINDIR} ${LIBDIR})/fips"
EOF