4 PROJECT_BLURB="a program for monitoring performance of OpenGL applications"
6 # Test whether this shell is capable of parameter substring processing.
7 ( option='a/b'; : ${option#*/} ) 2>/dev/null || {
9 The shell interpreting '$0' is lacking some required features.
11 To work around this problem you may try to execute:
20 # Store original IFS value so it can be changed (and restored) in many places.
21 readonly DEFAULT_IFS="$IFS"
23 srcdir=$(dirname "$0")
25 # For a non-srcdir configure invocation (such as ../configure), create
26 # the directory structure and copy Makefiles.
27 if [ "$srcdir" != "." ]; then
29 for dir in . $(grep "^subdirs *=" "$srcdir"/Makefile | sed -e "s/subdirs *= *//"); do
31 cp "$srcdir"/"$dir"/Makefile.local "$dir"
32 cp "$srcdir"/"$dir"/Makefile "$dir"
36 # Set several defaults (optionally specified by the user in
37 # environment variables)
42 # Set the defaults for values the user can specify with command-line
49 Usage: ./configure [options]...
51 This script configures ${PROJECT} to build on your system.
53 It verifies that dependencies are available, determines flags needed
54 to compile and link against various required libraries, and identifies
55 whether various system functions can be used or if locally-provided
56 replacements will be built instead.
58 Finally, it allows you to control various aspects of the build and
61 First, some common variables can specified via environment variables:
63 CC The C compiler to use
64 CFLAGS Flags to pass to the C compiler
65 LDFLAGS Flags to pass when linking
67 Each of these values can further be controlled by specifying them
68 later on the "make" command line.
70 Additionally, various options can be specified on the configure
73 --prefix=PREFIX Install files in PREFIX [$PREFIX]
75 By default, "make install" will install the resulting program to
76 $PREFIX/bin, documentation to $PREFIX/man, etc. You can
77 specify an installation prefix other than $PREFIX using
78 --prefix, for instance:
80 ./configure --prefix=\$HOME
82 Fine tuning of some installation directories is available:
84 --bindir=DIR Install executables to DIR [PREFIX/bin]
85 --libdir=DIR Install libraries to DIR [PREFIX/lib]
86 --mandir=DIR Install man pages to DIR [PREFIX/share/man]
87 --sysconfdir=DIR Read-only single-machine data [PREFIX/etc]
89 Additional options are accepted for compatibility with other
90 configure-script calling conventions, but don't do anything yet:
92 --build=<cpu>-<vendor>-<os> Currently ignored
93 --host=<cpu>-<vendor>-<os> Currently ignored
94 --infodir=DIR Currently ignored
95 --datadir=DIR Currently ignored
96 --localstatedir=DIR Currently ignored
97 --libexecdir=DIR Currently ignored
98 --disable-maintainer-mode Currently ignored
99 --disable-dependency-tracking Currently ignored
104 # Given two absolute paths ("from" and "to"), compute a relative path
105 # from "from" to "to". For example:
107 # relative_path /foo/bar/baz /foo/qux -> ../../qux
110 if [ $# -ne 2 ] ; then
111 echo "Internal error: relative_path requires exactly 2 arguments"
118 # Handle trivial case up-front
119 if [ "$from" = "$to" ] ; then
125 while [ "${to#$shared}" = "$to" ] && [ "$shared" != "." ] ; do
126 shared="$(dirname $shared)"
127 relative="..${relative:+/${relative}}"
130 echo "${relative:-.}${to#$shared}"
134 # Parse command-line options
136 if [ "${option}" = '--help' ] ; then
139 elif [ "${option%%=*}" = '--prefix' ] ; then
140 PREFIX="${option#*=}"
141 elif [ "${option%%=*}" = '--bindir' ] ; then
142 BINDIR="${option#*=}"
143 elif [ "${option%%=*}" = '--libdir' ] ; then
144 LIBDIR="${option#*=}"
145 elif [ "${option%%=*}" = '--mandir' ] ; then
146 MANDIR="${option#*=}"
147 elif [ "${option%%=*}" = '--sysconfdir' ] ; then
148 SYSCONFDIR="${option#*=}"
149 elif [ "${option%%=*}" = '--build' ] ; then
151 elif [ "${option%%=*}" = '--host' ] ; then
153 elif [ "${option%%=*}" = '--infodir' ] ; then
155 elif [ "${option%%=*}" = '--datadir' ] ; then
157 elif [ "${option%%=*}" = '--localstatedir' ] ; then
159 elif [ "${option%%=*}" = '--libexecdir' ] ; then
161 elif [ "${option}" = '--disable-maintainer-mode' ] ; then
163 elif [ "${option}" = '--disable-dependency-tracking' ] ; then
166 echo "Unrecognized option: ${option}"
175 Welcome to ${PROJECT}, ${PROJECT_BLURB}
177 We hope that the process of building and installing ${PROJECT} is quick
180 If anything goes wrong in the configure process, you can override any
181 decisions it makes by manually editing the Makefile.config file that
182 it creates. Also please do as much as you can to figure out what could
183 be different on your machine compared to those of the ${PROJECT}
184 developers. Then, please email those details to the ${PROJECT} developers so
185 that they can hopefully make future versions of ${PROJECT} easier for you to
188 We'll now investigate your system to verify that all required
189 dependencies are available:
195 printf "Checking for pkg-config... "
196 if pkg-config --version > /dev/null 2>&1; then
202 *** Error: This configure script requires pkg-config to find the
203 compilation flags required to link against the various libraries
204 needed by ${PROJECT}. The pkg-config program can be obtained from:
206 http://www.freedesktop.org/wiki/Software/pkg-config/
208 Or you may be able install it with a command such as:
210 sudo apt-get install pkg-config
212 sudo yum install pkgconfig
220 printf "Checking for working C compiler (${CC})... "
221 printf "int main(void){return 42;}\n" > minimal.c
222 if ${CC} -o minimal minimal.c > /dev/null 2>&1
229 *** Error: No functioning C compiler found. Either set the CC environment
230 to a working C compiler, or else install gcc:
234 You may be able to install gcc with a command such as:
236 sudo apt-get install build-essential
238 sudo yum install make automake gcc gcc-c++ kernel-devel
246 printf "Checking for libtalloc... "
247 if pkg-config --exists talloc; then
250 talloc_cflags=$(pkg-config --cflags talloc)
251 talloc_ldflags=$(pkg-config --libs talloc)
256 errors=$((errors + 1))
259 printf "Checking for libelf... "
260 printf "#include <gelf.h>\nint main(void){return elf_version (EV_CURRENT);}\n" > elf-minimal.c
261 if ${CC} -o elf-minimal elf-minimal.c -lelf > /dev/null 2>&1
272 errors=$((errors + 1))
274 rm -f elf-minimal elf-minimal.c
276 printf "Checking for GL/gl.h... "
278 if pkg-config --exists gl; then
281 gl_cflags=$(pkg-config --cflags gl)
282 gl_ldflags=$(pkg-config --libs gl)
286 errors=$((errors + 1))
289 printf "Checking for GL window-system-binding headers:\n"
292 printf " Checking for GL/glx.h... "
294 printf "#include <GL/glx.h>\nint main(void){return 0;}\n" > glx-minimal.c
295 if ${CC} -o glx-minimal glx-minimal.c ${gl_cflags} > /dev/null 2>&1
303 rm -f glx-minimal glx-minimal.c
305 if [ $have_gl_winsys -eq 0 ]; then
306 errors=$((errors + 1))
309 printf " Checking for X11... "
311 if pkg-config --exists x11; then
314 x11_cflags=$(pkg-config --cflags x11)
315 x11_ldflags=$(pkg-config --libs x11)
320 printf " Checking for EGL/egl.h... "
322 if pkg-config --exists egl; then
325 egl_cflags=$(pkg-config --cflags egl)
326 egl_ldflags=$(pkg-config --libs egl)
331 printf " Checking for GLESv2... "
333 if pkg-config --exists glesv2; then
336 glesv2_cflags=$(pkg-config --cflags glesv2)
337 glesv2_ldflags=$(pkg-config --libs glesv2)
342 printf "int main(void){return 0;}\n" > minimal.c
345 printf "Checking for available C compiler warning flags:\n"
346 for flag in -Wall -Wextra -Wmissing-declarations; do
347 if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
349 WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
352 printf "\t${WARN_CFLAGS}\n"
354 rm -f minimal minimal.c
356 printf "#include <features.h>\nint main(void){return 0;}\n" > arch-minimal.c
358 printf "Checking for machine-dependent compiler support:\n"
360 printf " Compiler can create 32-bit binaries... "
362 if ${CC} -m32 -o arch-minimal arch-minimal.c > /dev/null 2>&1
370 printf " Compiler can create 64-bit binaries... "
372 if ${CC} -m64 -o arch-minimal arch-minimal.c > /dev/null 2>&1
380 if [ "$have_m32" = "No" ] || [ "$have_m64" = "No" ]; then
383 * Warning: Cannot create both 32 and 64-bit fips libraries. Fips will not
384 support applications of the non-native size. Fixing this may be
385 as simple as running a command such as:
387 sudo apt-get install gcc-multilib
391 rm -f arch-minimal arch-minimal.c
393 if [ $errors -gt 0 ]; then
396 *** Error: The dependencies of ${PROJECT} could not be satisfied. You will
397 need to install the following packages before being able to compile
401 if [ $have_talloc -eq 0 ]; then
402 echo " The talloc library (including development files such as headers)"
403 echo " http://talloc.samba.org/"
406 if [ $have_libelf -eq 0 ]; then
407 echo " The libelf library (including development files such as headers)"
408 echo " http://http://sourceforge.net/projects/elftoolchain/"
411 if [ $have_gl -eq 0 ]; then
412 echo " Open GL header files (GL/gl.h)"
413 echo " http://www.mesa3d.org/"
416 if [ $have_gl_winsys -eq 0 ]; then
417 echo " OpenGL window-system-bindings header files (GL/glx.h and/or GL/egl.h)"
418 echo " http://www.mesa3d.org/"
422 With any luck, you're using a modern, package-based operating system
423 that has all of these packages available in the distribution. In that
424 case a simple command will install everything you need. For example:
426 On Debian and similar systems:
428 sudo apt-get install libtalloc-dev libelf-dev \\
429 libgl1-mesa-dev libgles2-mesa-dev
431 Or on Fedora and similar systems:
433 sudo yum install libtalloc-devel libelf-devel \\
434 mesa-libGL-devel mesa-libGLES-devel
436 On other systems, similar commands can be used, but the details of the
437 package names may be different.
439 When you have installed the necessary dependencies, you can run
440 configure again to ensure the packages can be found, or simply run
449 All required packages were found.
451 The following OpenGL window-system bindings will be supported:
456 You may now run the following commands to compile and install ${PROJECT}:
463 # construct the Makefile.config
464 cat > Makefile.config <<EOF
465 # This Makefile.config was automatically generated by the ./configure
466 # script of ${PROJECT}. If the configure script identified anything
467 # incorrectly, then you can edit this file to try to correct things,
468 # but be warned that if configure is run again it will destroy your
469 # changes, (and this could happen by simply calling "make" if the
470 # configure script is updated).
472 # The top-level directory for the source, (the directory containing
473 # the configure script). This may be different than the build
474 # directory (the current directory at the time configure was run).
477 configure_options = $@
479 # We use vpath directives (rather than the VPATH variable) since the
480 # VPATH variable matches targets as well as prerequisites, (which is
481 # not useful since then a target left-over from a srcdir build would
482 # cause a target to not be built in the non-srcdir build).
484 # Also, we don't use a single "vpath % \$(srcdir)" here because we
485 # don't want the vpath to trigger for our emacs lisp compilation,
486 # (unless we first find a way to convince emacs to build the .elc
487 # target in a directory other than the directory of the .el
488 # prerequisite). In the meantime, we're actually copying in the .el
489 # files, (which is quite ugly).
491 vpath %.cc \$(srcdir)
493 vpath Makefile.% \$(srcdir)
495 # The C compiler to use
498 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
501 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
504 # Flags to enable warnings when using the C compiler
505 WARN_CFLAGS=${WARN_CFLAGS}
507 # The prefix to which ${PROJECT} should be installed
510 # The directory to which executables should be installed
511 bindir = ${BINDIR:=\$(prefix)/bin}
513 # The directory to which libraries should be installed
514 libdir = ${LIBDIR:=\$(prefix)/lib}
516 # The directory to which man pages should be installed
517 mandir = ${MANDIR:=\$(prefix)/share/man}
519 # The directory to which read-only (configuration) files should be installed
520 sysconfdir = ${SYSCONFDIR:=\$(prefix)/etc}
522 # Whether compiler can create 32 or 64-bit binaries
523 COMPILER_SUPPORTS_32 = ${have_m32}
524 COMPILER_SUPPORTS_64 = ${have_m64}
526 # Flags needed to compile and link against talloc
527 TALLOC_CFLAGS = ${talloc_cflags}
528 TALLOC_LDFLAGS = ${talloc_ldflags}
530 # Flags needed to compile and link against libelf
531 LIBELF_CFLAGS = ${libelf_cflags}
532 LIBELF_LDFLAGS = ${libelf_ldflags}
534 # Whether GLX headers are available
535 HAVE_GLX = ${have_glx}
537 # Flags needed to compile and link against libGL
538 GL_CFLAGS = ${gl_cflags}
539 GL_LDFLAGS = ${gl_ldflags}
541 # Whether X11 headers and library are available
542 HAVE_X11 = ${have_x11}
544 # Flags needed to compile and link against libX11
545 X11_CLFLAGS = ${x11_cflags}
546 X11_LDFLAGS = ${x11_ldflags}
548 # Whether EGL headers are available
549 HAVE_EGL = ${have_egl}
551 # Flags needed to find EGL header files (EGL/egl.h)
552 EGL_CFLAGS = ${egl_cflags}
553 EGL_LDFLAGS = ${egl_ldflags}
555 # Whether GLESv2 headers and library are available
556 HAVE_GLESV2 = ${have_glesv2}
558 # Flags needed to compile and link against GLESv2
559 GLESV2_CFLAGS = ${glesv2_cflags}
560 GLESV2_LDFLAGS = ${glesv2_ldflags}
562 # Flags needed to have linker link only to necessary libraries
563 AS_NEEDED_LDFLAGS = ${as_needed_ldflags}
568 /* Generated by configure. */
570 /* Relative path from ${BINDIR} to ${LIBDIR}/fips */
571 #define BINDIR_TO_LIBFIPSDIR "$(relative_path ${BINDIR} ${LIBDIR})/fips"