]> git.cworth.org Git - glaze/blob - configure
d115790d56296b6d99f9d732b525f226cf6c04fa
[glaze] / configure
1 #! /bin/sh
2
3 PROJECT=glaze
4 PROJECT_BLURB="a shiny way to wrap OpenGL"
5
6 MAJOR=0
7 MINOR=0
8 RELEASE=0
9 VERSION=${MAJOR}.${MINOR}.${RELEASE}
10
11 srcdir=$(dirname "$0")
12
13 # For a non-srcdir configure invocation (such as ../configure), create
14 # the directory structure and copy Makefiles.
15 if [ "$srcdir" != "." ]; then
16
17     for dir in . $(grep "^subdirs *=" "$srcdir"/Makefile | sed -e "s/subdirs *= *//"); do
18         mkdir -p "$dir"
19         cp "$srcdir"/"$dir"/Makefile.local "$dir"
20         cp "$srcdir"/"$dir"/Makefile "$dir"
21     done
22 fi
23
24 # Set several defaults (optionally specified by the user in
25 # environment variables)
26 CC=${CC:-gcc}
27 CFLAGS=${CFLAGS:--O2}
28 LDFLAGS=${LDFLAGS:-}
29
30 # Set the defaults for values the user can specify with command-line
31 # options.
32 PREFIX=/usr/local
33
34 usage ()
35 {
36     cat <<EOF
37 Usage: ./configure [options]...
38
39 This script configures ${PROJECT} to build on your system.
40
41 It verifies that dependencies are available, determines flags needed
42 to compile and link against various required libraries, and identifies
43 whether various system functions can be used or if locally-provided
44 replacements will be built instead.
45
46 Finally, it allows you to control various aspects of the build and
47 installation process.
48
49 First, some common variables can specified via environment variables:
50
51         CC              The C compiler to use
52         CFLAGS          Flags to pass to the C compiler
53         LDFLAGS         Flags to pass when linking
54
55 Each of these values can further be controlled by specifying them
56 later on the "make" command line.
57
58 Additionally, various options can be specified on the configure
59 command line.
60
61         --prefix=PREFIX Install files in PREFIX [$PREFIX]
62
63 By default, "make install" will install the resulting program to
64 $PREFIX/bin, documentation to $PREFIX/man, etc. You can
65 specify an installation prefix other than $PREFIX using
66 --prefix, for instance:
67
68         ./configure --prefix=\$HOME
69
70 Fine tuning of some installation directories is available:
71
72         --bindir=DIR            Install executables to DIR [PREFIX/bin]
73         --libdir=DIR            Install libraries to DIR [PREFIX/lib]
74         --mandir=DIR            Install man pages to DIR [PREFIX/share/man]
75         --sysconfdir=DIR        Read-only single-machine data [PREFIX/etc]
76
77 Additional options are accepted for compatibility with other
78 configure-script calling conventions, but don't do anything yet:
79
80         --build=<cpu>-<vendor>-<os>     Currently ignored
81         --host=<cpu>-<vendor>-<os>      Currently ignored
82         --infodir=DIR                   Currently ignored
83         --datadir=DIR                   Currently ignored
84         --localstatedir=DIR             Currently ignored
85         --libexecdir=DIR                Currently ignored
86         --disable-maintainer-mode       Currently ignored
87         --disable-dependency-tracking   Currently ignored
88
89 EOF
90 }
91
92 # Parse command-line options
93 for option; do
94     if [ "${option}" = '--help' ] ; then
95         usage
96         exit 0
97     elif [ "${option%%=*}" = '--prefix' ] ; then
98         PREFIX="${option#*=}"
99     elif [ "${option%%=*}" = '--bindir' ] ; then
100         BINDIR="${option#*=}"
101     elif [ "${option%%=*}" = '--libdir' ] ; then
102         LIBDIR="${option#*=}"
103     elif [ "${option%%=*}" = '--mandir' ] ; then
104         MANDIR="${option#*=}"
105     elif [ "${option%%=*}" = '--sysconfdir' ] ; then
106         SYSCONFDIR="${option#*=}"
107     elif [ "${option%%=*}" = '--build' ] ; then
108         true
109     elif [ "${option%%=*}" = '--host' ] ; then
110         true
111     elif [ "${option%%=*}" = '--infodir' ] ; then
112         true
113     elif [ "${option%%=*}" = '--datadir' ] ; then
114         true
115     elif [ "${option%%=*}" = '--localstatedir' ] ; then
116         true
117     elif [ "${option%%=*}" = '--libexecdir' ] ; then
118         true
119     elif [ "${option}" = '--disable-maintainer-mode' ] ; then
120         true
121     elif [ "${option}" = '--disable-dependency-tracking' ] ; then
122         true
123     else
124         echo "Unrecognized option: ${option}"
125         echo "See:"
126         echo "  $0 --help"
127         echo ""
128         exit 1
129     fi
130 done
131
132 printf "Checking for working C compiler (${CC})... "
133 printf "int main(void){return 42;}\n" > minimal.c
134 if ${CC} -o minimal minimal.c > /dev/null 2>&1
135 then
136     printf "Yes.\n"
137 else
138     printf "No.\n"
139     cat <<EOF
140
141 *** Error: No functioning C compiler found. Either set the CC environment
142 to a working C compiler, or else install gcc:
143
144         http://gcc.gnu.org/
145
146 You may be able to install gcc with a command such as:
147
148         sudo apt-get install build-essential
149     or:
150         sudo yum install make automake gcc gcc-c++ kernel-devel
151
152 EOF
153
154 exit 1
155
156 fi
157
158 WARN_CFLAGS=""
159 printf "Checking for available C compiler warning flags:\n"
160 for flag in -Wall -Wextra -Wmissing-declarations -Werror=attributes; do
161     if ${CC} $flag -o minimal minimal.c > /dev/null 2>&1
162     then
163         WARN_CFLAGS="${WARN_CFLAGS}${WARN_CFLAGS:+ }${flag}"
164     fi
165 done
166 printf "\t${WARN_CFLAGS}\n"
167
168 rm -f minimal minimal.c
169
170 printf "#include <features.h>\nint main(void){return 0;}\n" > arch-minimal.c
171
172 printf "Checking for machine-dependent compiler support:\n"
173
174 printf "        Compiler can create 32-bit binaries... "
175 have_m32=Yes
176 if ${CC} -m32 -o arch-minimal arch-minimal.c > /dev/null 2>&1
177 then
178     printf "Yes.\n"
179 else
180     printf "No.\n"
181     have_m32=No
182 fi
183
184 printf "        Compiler can create 64-bit binaries... "
185 have_m64=Yes
186 if ${CC} -m64 -o arch-minimal arch-minimal.c > /dev/null 2>&1
187 then
188     printf "Yes.\n"
189 else
190     printf "No.\n"
191     have_m64=No
192 fi
193
194 if [ "$have_m32" = "No" ] || [ "$have_m64" = "No" ]; then
195     cat <<EOF
196
197 * Warning: Cannot create both 32 and 64-bit glaze libraries. Glaze will not
198            support applications of the non-native size. Fixing this may be
199            as simple as running a command such as:
200
201                 sudo apt-get install gcc-multilib
202 EOF
203 fi
204
205 rm -f arch-minimal arch-minimal.c
206
207 cat <<EOF
208
209 You may now run the following commands to compile and install ${PROJECT}:
210
211         make
212         sudo make install
213
214 EOF
215
216 # construct the Makefile.config
217 cat > Makefile.config <<EOF
218 # This Makefile.config was automatically generated by the ./configure
219 # script of ${PROJECT}. If the configure script identified anything
220 # incorrectly, then you can edit this file to try to correct things,
221 # but be warned that if configure is run again it will destroy your
222 # changes, (and this could happen by simply calling "make" if the
223 # configure script is updated).
224
225 # The top-level directory for the source, (the directory containing
226 # the configure script). This may be different than the build
227 # directory (the current directory at the time configure was run).
228 srcdir = ${srcdir}
229
230 configure_options = $@
231
232 # We use vpath directives (rather than the VPATH variable) since the
233 # VPATH variable matches targets as well as prerequisites, (which is
234 # not useful since then a target left-over from a srcdir build would
235 # cause a target to not be built in the non-srcdir build).
236 vpath % \$(srcdir)
237
238 # The C compiler to use
239 CC = ${CC}
240
241 # Default FLAGS for C compiler (can be overridden by user such as "make CFLAGS=-g")
242 CFLAGS = ${CFLAGS}
243
244 # Default FLAGS for the linker (can be overridden by user such as "make LDFLAGS=-znow")
245 LDFLAGS = ${LDFLAGS}
246
247 # Flags to enable warnings when using the C compiler
248 WARN_CFLAGS = ${WARN_CFLAGS}
249
250 # The prefix to which ${PROJECT} should be installed
251 PREFIX = ${PREFIX}
252
253 # The directory to which executables should be installed
254 BINDIR = ${BINDIR:-\$(PREFIX)/bin}
255
256 # The directory to which libraries should be installed
257 LIBDIR = ${LIBDIR:-\$(PREFIX)/lib}
258
259 # The directory to which headers should be installed
260 INCLUDEDIR = ${INCLUDEDIR:-\$(PREFIX)/include}
261
262 # Whether compiler can create 32 or 64-bit binaries
263 COMPILER_SUPPORTS_32 = ${have_m32}
264 COMPILER_SUPPORTS_64 = ${have_m64}
265
266 # Version information for glaze library
267 MAJOR   = ${MAJOR}
268 MINOR   = ${MINOR}
269 RELEASE = ${RELEASE}
270 VERSION = ${VERSION}
271
272 EOF
273
274 # construct the glaze.pc file
275 cat > glaze.pc <<EOF
276 prefix=${PREFIX}
277 exec_prefix=\${prefix}
278 libdir=${LIBDIR:-\${exec_prefix\}/lib}
279 includedir=${INCLUDEDIR:-\${prefix\}/include}
280
281 Name: ${PROJECT}
282 Description: ${PROJECT_BLURB}
283 Version: ${VERSION}
284
285 Libs: -L\${libdir} -lglaze
286 Cflags: -I\${includedir}/glaze
287 EOF