| 1 #!/bin/sh |
1 #!/bin/sh |
| 2 # |
2 |
| 3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
3 HOST=`uname -n` |
| 4 # |
4 PREFIX=`pwd`/work |
| 5 # Copyright 2013 Olaf Wintermann. All rights reserved. |
5 INSTALL_DIR=$PREFIX |
| 6 # |
6 |
| 7 # Redistribution and use in source and binary forms, with or without |
7 EPREFIX=$PREFIX |
| 8 # modification, are permitted provided that the following conditions are met: |
8 |
| 9 # |
9 BINDIR= |
| 10 # 1. Redistributions of source code must retain the above copyright |
10 SBINDIR= |
| 11 # notice, this list of conditions and the following disclaimer. |
11 LIBDIR= |
| 12 # |
12 LIBEXECDIR= |
| 13 # 2. Redistributions in binary form must reproduce the above copyright |
13 DATADIR= |
| 14 # notice, this list of conditions and the following disclaimer in the |
14 SYSCONFDIR= |
| 15 # documentation and/or other materials provided with the distribution. |
15 SHAREDSTATEDIR= |
| 16 # |
16 LOCALSTATEDIR= |
| 17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
17 INCLUDEDIR= |
| 18 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
18 INFODIR= |
| 19 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
19 MANDIR= |
| 20 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
|
| 21 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
| 22 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
| 23 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|
| 24 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|
| 25 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
| 26 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
| 27 # POSSIBILITY OF SUCH DAMAGE. |
|
| 28 # |
|
| 29 |
|
| 30 # |
|
| 31 # TODO: parse arguments |
|
| 32 # |
|
| 33 |
20 |
| 34 OS=`uname -s` |
21 OS=`uname -s` |
| 35 HOST=`uname -n` |
22 OS_VERSION=`uname -r` |
| 36 INSTALL_DIR=`pwd`/work |
23 |
| 37 |
24 TEMP_DIR=".tmp-`uname -n`" |
| 38 LIBS_CFLAGS=`pkg-config --cflags libxml-2.0 openssl` |
25 mkdir -p $TEMP_DIR |
| 39 LIBS_LDFLAGS=`pkg-config --libs libxml-2.0 openssl` |
26 if [ $? -ne 0 ]; then |
| 40 |
27 echo "Cannot create tmp dir" |
| 41 # create config.mk |
28 echo "Abort" |
| 42 echo "generate config.mk" |
29 fi |
| 43 |
30 touch $TEMP_DIR/options |
| 44 cat > config.mk << __EOF__ |
31 touch $TEMP_DIR/features |
| |
32 |
| |
33 # features |
| |
34 |
| |
35 # help text |
| |
36 printhelp() |
| |
37 { |
| |
38 echo "Usage: $0 [OPTIONS]..." |
| |
39 cat << __EOF__ |
| |
40 Installation directories: |
| |
41 --prefix=PREFIX path prefix for architecture-independent files |
| |
42 [/usr] |
| |
43 --exec-prefix=EPREFIX path prefix for architecture-dependent files |
| |
44 [PREFIX] |
| |
45 |
| |
46 --bindir=DIR user executables [EPREFIX/bin] |
| |
47 --sbindir=DIR system admin executables [EPREFIX/sbin] |
| |
48 --libexecdir=DIR program executables [EPREFIX/libexec] |
| |
49 --sysconfdir=DIR system configuration files [PREFIX/etc] |
| |
50 --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] |
| |
51 --localstatedir=DIR modifiable single-machine data [PREFIX/var] |
| |
52 --libdir=DIR object code libraries [EPREFIX/lib] |
| |
53 --includedir=DIR C header files [PREFIX/include] |
| |
54 --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] |
| |
55 --datadir=DIR read-only architecture-independent data [DATAROOTDIR] |
| |
56 --infodir=DIR info documentation [DATAROOTDIR/info] |
| |
57 --mandir=DIR man documentation [DATAROOTDIR/man] |
| |
58 |
| |
59 Optional Features: |
| |
60 --enable-pg |
| |
61 |
| |
62 __EOF__ |
| |
63 } |
| |
64 |
| |
65 # |
| |
66 # parse arguments |
| |
67 # |
| |
68 for ARG in $@ |
| |
69 do |
| |
70 if [[ $ARG == --prefix=* ]]; then |
| |
71 PREFIX=${ARG:9} |
| |
72 elif [[ $ARG = --exec-prefix=* ]]; then |
| |
73 EPREFIX=${ARG:14} |
| |
74 elif [[ $ARG = --bindir=* ]]; then |
| |
75 BINDIR=${ARG:9} |
| |
76 elif [[ $ARG = --sbindir=* ]]; then |
| |
77 SBINDIR=${ARG:10} |
| |
78 elif [[ $ARG = --libdir=* ]]; then |
| |
79 LIBDIR=${ARG:9} |
| |
80 elif [[ $ARG = --libexecdir=* ]]; then |
| |
81 LIBEXECDIR=${ARG:13} |
| |
82 elif [[ $ARG = --datadir=* ]]; then |
| |
83 DATADIR=${ARG:10} |
| |
84 elif [[ $ARG = --sysconfdir=* ]]; then |
| |
85 SYSCONFDIR=${ARG:13} |
| |
86 elif [[ $ARG = --sharedstatedir=* ]]; then |
| |
87 SHAREDSTATEDIR=${ARG:17} |
| |
88 elif [[ $ARG = --localstatedir=* ]]; then |
| |
89 LOCALSTATEDIR=${ARG:16} |
| |
90 elif [[ $ARG = --includedir=* ]]; then |
| |
91 INCLUDEDIR=${ARG:12} |
| |
92 elif [[ $ARG = --infodir=* ]]; then |
| |
93 INFODIR=${ARG:10} |
| |
94 elif [[ $ARG = --mandir=* ]]; then |
| |
95 MANDIR=${ARG:9} |
| |
96 elif [ $ARG = "--help" ]; then |
| |
97 printhelp |
| |
98 exit 0 |
| |
99 elif [[ $ARG == --enable-pg ]]; then |
| |
100 FEATURE_PG=on |
| |
101 elif [[ $ARG == --disable-pg ]]; then |
| |
102 unset FEATURE_PG |
| |
103 fi |
| |
104 done |
| |
105 |
| |
106 # set dir variables |
| |
107 if [ -z $BINDIR ]; then |
| |
108 BINDIR=$EPREFIX/bin |
| |
109 fi |
| |
110 if [ -z $SBINDIR ]; then |
| |
111 SBINDIR=$EPREFIX/sbin |
| |
112 fi |
| |
113 if [ -z $LIBDIR ]; then |
| |
114 LIBDIR=$EPREFIX/lib |
| |
115 fi |
| |
116 if [ -z $LIBEXEC ]; then |
| |
117 LIBEXECDIR=$EPREFIX/libexec |
| |
118 fi |
| |
119 if [ -z $DATADIR ]; then |
| |
120 DATADIR=$PREFIX/share |
| |
121 fi |
| |
122 if [ -z $SYSCONFDIR]; then |
| |
123 SYSCONFDIR=$PREFIX/etc |
| |
124 fi |
| |
125 if [ -z $SHAREDSTATEDIR ]; then |
| |
126 SHAREDSTATEDIR=$PREFIX/com |
| |
127 fi |
| |
128 if [ -z $LOCALSTATEDIR ]; then |
| |
129 LOCALSTATEDIR=$PREFIX/var |
| |
130 fi |
| |
131 if [ -z $INCLUDEDIR ]; then |
| |
132 INCLUDEDIR=$PREFIX/include |
| |
133 fi |
| |
134 if [ -z $INFODIR ]; then |
| |
135 INFODIR=$PREFIX/info |
| |
136 fi |
| |
137 if [ -z $MANDIR ]; then |
| |
138 MANDIR=$PREFIX/man |
| |
139 fi |
| |
140 |
| |
141 which pkg-config > /dev/null |
| |
142 if [ $? -ne 0 ]; then |
| |
143 PKG_CONFIG=pkg-config |
| |
144 else |
| |
145 PKG_CONFIG=false |
| |
146 fi |
| |
147 |
| |
148 # Simple uname based platform detection |
| |
149 # $PLATFORM is used for platform dependent dependency selection |
| |
150 printf "detect platform... " |
| |
151 if [ $OS = SunOS ]; then |
| |
152 PLATFORM="solaris sunos unix svr4" |
| |
153 fi |
| |
154 if [ $OS = Linux ]; then |
| |
155 PLATFORM="linux unix" |
| |
156 fi |
| |
157 if [ $OS = FreeBSD ]; then |
| |
158 PLATFORM="freebsd bsd unix" |
| |
159 fi |
| |
160 if [ $OS = Darwin ]; then |
| |
161 PLATFORM="macos osx bsd unix" |
| |
162 fi |
| |
163 echo $OS | grep "MINGW" > /dev/null |
| |
164 if [ $? -eq 0 ]; then |
| |
165 PLATFORM="windows mingw" |
| |
166 fi |
| |
167 |
| |
168 if [ -z "$PLATFORM" ]; then |
| |
169 PLATFORM="unix" |
| |
170 fi |
| |
171 |
| |
172 for p in $PLATFORM |
| |
173 do |
| |
174 PLATFORM_NAME=$p |
| |
175 break |
| |
176 done |
| |
177 echo $PLATFORM_NAME |
| |
178 |
| |
179 isplatform() |
| |
180 { |
| |
181 for p in $PLATFORM |
| |
182 do |
| |
183 if [ $p = $1 ]; then |
| |
184 return 0 |
| |
185 fi |
| |
186 done |
| |
187 return 1 |
| |
188 } |
| |
189 |
| |
190 # generate config.mk and config.h |
| |
191 cat > $TEMP_DIR/config.mk << __EOF__ |
| 45 # |
192 # |
| 46 # config.mk generated by configure |
193 # config.mk generated by configure |
| 47 # |
194 # |
| 48 |
195 |
| 49 INSTALL_DIR = $INSTALL_DIR |
196 # general vars |
| 50 HOST = $HOST |
197 HOST=$HOST |
| 51 |
198 PREFIX=$PREFIX |
| 52 __EOF__ |
199 INSTALL_DIR=$INSTALL_DIR |
| 53 |
200 |
| 54 # platform |
201 EPREFIX=$EPREFIX |
| 55 |
202 |
| 56 if [ $OS = SunOS ]; then |
203 BINDIR=$BINDIR |
| 57 CCONF=suncc.mk |
204 SBINDIR=$SBINDIR |
| 58 PLATFORM=solaris.mk |
205 LIBDIR=$LIBDIR |
| 59 fi |
206 LIBEXECDIR=$LIBEXECDIR |
| 60 |
207 DATADIR=$DATADIR |
| 61 if [ $OS = Linux ]; then |
208 SYSCONFDIR=$SYSCONFDIR |
| 62 if `type clang > /dev/null`; then |
209 SHAREDSTATEDIR=$SHAREDSTATEDIR |
| 63 CCONF=clang.mk |
210 LOCALSTATEDIR=$LOCALSTATEDIR |
| 64 else |
211 INCLUDEDIR=$INCLUDEDIR |
| 65 CCONF=gcc.mk |
212 INFODIR=$INFODIR |
| 66 fi |
213 MANDIR=$MANDIR |
| 67 PLATFORM=linux.mk |
214 |
| 68 fi |
215 __EOF__ |
| 69 |
216 |
| 70 if [ $OS = Darwin ]; then |
217 echo > $TEMP_DIR/make.mk |
| 71 CCONF=clang.mk |
218 |
| 72 PLATFORM=osx.mk |
219 ENV_CFLAGS=$CFLAGS |
| 73 fi |
220 ENV_LDFLAGS=$LDFLAGS |
| 74 |
221 ENV_CXXFLAGS=$CXXFLAGS |
| 75 ISBSD=`echo $OS | grep -c BSD` |
222 |
| 76 if [ $ISBSD = 1 ]; then |
223 # Toolchain detection |
| 77 if `type clang > /dev/null`; then |
224 # this will insert make vars to config.mk |
| 78 CCONF=clang.mk |
225 source make/toolchain.sh |
| 79 else |
226 |
| 80 CCONF=gcc.mk |
227 # add user specified flags to config.mk |
| 81 fi |
228 echo >> $TEMP_DIR/config.mk |
| 82 PLATFORM=bsd.mk |
229 if [[ ! -z ${ENV_CFLAGS} ]]; then |
| 83 fi |
230 echo "CFLAGS += $ENV_CFLAGS" >> $TEMP_DIR/config.mk |
| 84 |
231 fi |
| 85 echo " |
232 if [[ ! -z ${ENV_CXXFLAGS} ]]; then |
| 86 include \$(BUILD_ROOT)/make/$CCONF |
233 echo "CXXFLAGS += $ENV_CXXFLAGS" >> $TEMP_DIR/config.mk |
| 87 include \$(BUILD_ROOT)/make/$PLATFORM |
234 fi |
| 88 |
235 if [[ ! -z ${ENV_LDFLAGS} ]]; then |
| 89 CFLAGS += $LIBS_CFLAGS |
236 echo "LDFLAGS += $ENV_LDFLAGS" >> $TEMP_DIR/config.mk |
| 90 LDFLAGS += $LIBS_LDFLAGS |
237 fi |
| 91 |
238 |
| 92 " >> config.mk |
239 # |
| 93 |
240 # DEPENDENCIES |
| 94 |
241 # |
| 95 |
242 |
| |
243 dependency_libpq() |
| |
244 { |
| |
245 printf "checking for libpq... " |
| |
246 # dependency libpq |
| |
247 while true |
| |
248 do |
| |
249 if [ -z "PKG_CONFIG" ]; then |
| |
250 break |
| |
251 fi |
| |
252 if ! pkg-config libpq ; then |
| |
253 break |
| |
254 fi |
| |
255 CFLAGS+=" `pkg-config --cflags libpq`" |
| |
256 LDFLAGS+=" `pkg-config --libs libpq`" |
| |
257 echo yes |
| |
258 return 0 |
| |
259 done |
| |
260 |
| |
261 echo no |
| |
262 return 1 |
| |
263 } |
| |
264 dependency_openssl() |
| |
265 { |
| |
266 printf "checking for openssl... " |
| |
267 # dependency openssl |
| |
268 while true |
| |
269 do |
| |
270 if [ -z "PKG_CONFIG" ]; then |
| |
271 break |
| |
272 fi |
| |
273 if ! pkg-config openssl ; then |
| |
274 break |
| |
275 fi |
| |
276 CFLAGS+=" `pkg-config --cflags openssl`" |
| |
277 LDFLAGS+=" `pkg-config --libs openssl`" |
| |
278 echo yes |
| |
279 return 0 |
| |
280 done |
| |
281 |
| |
282 echo no |
| |
283 return 1 |
| |
284 } |
| |
285 dependency_libxml2() |
| |
286 { |
| |
287 printf "checking for libxml2... " |
| |
288 # dependency libxml2 |
| |
289 while true |
| |
290 do |
| |
291 if [ -z "PKG_CONFIG" ]; then |
| |
292 break |
| |
293 fi |
| |
294 if ! pkg-config libxml-2.0 ; then |
| |
295 break |
| |
296 fi |
| |
297 CFLAGS+=" `pkg-config --cflags libxml-2.0`" |
| |
298 LDFLAGS+=" `pkg-config --libs libxml-2.0`" |
| |
299 echo yes |
| |
300 return 0 |
| |
301 done |
| |
302 |
| |
303 echo no |
| |
304 return 1 |
| |
305 } |
| |
306 |
| |
307 DEPENDENCIES_FAILED= |
| |
308 ERROR=0 |
| |
309 # general dependencies |
| |
310 CFLAGS= |
| |
311 LDFLAGS= |
| |
312 while true |
| |
313 do |
| |
314 if ! isplatform "linux"; then |
| |
315 break |
| |
316 fi |
| |
317 while true |
| |
318 do |
| |
319 |
| |
320 CFLAGS+="-DLINUX" |
| |
321 LDFLAGS+="-lpthread -ldl -lm -lldap" |
| |
322 cat >> $TEMP_DIR/make.mk << __EOF__ |
| |
323 # platform dependend source files |
| |
324 PLATFORM_DAEMONOBJ = event_linux.o |
| |
325 |
| |
326 # platform dependend vars |
| |
327 OBJ_EXT = .o |
| |
328 LIB_EXT = .so |
| |
329 APP_EXT = |
| |
330 |
| |
331 __EOF__ |
| |
332 |
| |
333 break |
| |
334 done |
| |
335 |
| |
336 break |
| |
337 done |
| |
338 while true |
| |
339 do |
| |
340 if ! isplatform "bsd"; then |
| |
341 break |
| |
342 fi |
| |
343 if isplatform "macos"; then |
| |
344 break |
| |
345 fi |
| |
346 while true |
| |
347 do |
| |
348 |
| |
349 CFLAGS+="-DBSD" |
| |
350 LDFLAGS+="-lpthread -lm -lldap" |
| |
351 cat >> $TEMP_DIR/make.mk << __EOF__ |
| |
352 # platform dependend source files |
| |
353 PLATFORM_DAEMONOBJ = event_bsd.o |
| |
354 |
| |
355 # platform dependend vars |
| |
356 OBJ_EXT = .o |
| |
357 LIB_EXT = .so |
| |
358 APP_EXT = |
| |
359 |
| |
360 __EOF__ |
| |
361 |
| |
362 break |
| |
363 done |
| |
364 |
| |
365 break |
| |
366 done |
| |
367 while true |
| |
368 do |
| |
369 if ! isplatform "macos"; then |
| |
370 break |
| |
371 fi |
| |
372 while true |
| |
373 do |
| |
374 |
| |
375 CFLAGS+="-DBSD -DOSX" |
| |
376 LDFLAGS+="-lpthread -ldl -lm -lldap" |
| |
377 cat >> $TEMP_DIR/make.mk << __EOF__ |
| |
378 # platform dependend source files |
| |
379 PLATFORM_DAEMONOBJ = event_bsd.o |
| |
380 |
| |
381 # platform dependend vars |
| |
382 OBJ_EXT = .o |
| |
383 LIB_EXT = .dylib |
| |
384 APP_EXT = |
| |
385 |
| |
386 __EOF__ |
| |
387 |
| |
388 break |
| |
389 done |
| |
390 |
| |
391 break |
| |
392 done |
| |
393 while true |
| |
394 do |
| |
395 if ! isplatform "solaris"; then |
| |
396 break |
| |
397 fi |
| |
398 while true |
| |
399 do |
| |
400 |
| |
401 CFLAGS+="-DSOLARIS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS" |
| |
402 LDFLAGS+="-lsocket -lnsl -lsendfile -lposix4 -lpthread -ldl -lm -lmd -lldap" |
| |
403 cat >> $TEMP_DIR/make.mk << __EOF__ |
| |
404 # platform dependend source files |
| |
405 PLATFORM_DAEMONOBJ = event_solaris.o |
| |
406 |
| |
407 # platform dependend vars |
| |
408 OBJ_EXT = .o |
| |
409 LIB_EXT = .so |
| |
410 APP_EXT = |
| |
411 |
| |
412 __EOF__ |
| |
413 |
| |
414 break |
| |
415 done |
| |
416 |
| |
417 break |
| |
418 done |
| |
419 |
| |
420 # add general dependency flags to config.mk |
| |
421 echo >> $TEMP_DIR/config.mk |
| |
422 if [[ ! -z ${CFLAGS} ]]; then |
| |
423 echo "CFLAGS += $CFLAGS" >> $TEMP_DIR/config.mk |
| |
424 fi |
| |
425 if [[ ! -z ${CXXFLAGS} ]]; then |
| |
426 echo "CXXFLAGS += $CXXFLAGS" >> $TEMP_DIR/config.mk |
| |
427 fi |
| |
428 if [[ ! -z ${LDFLAGS} ]]; then |
| |
429 echo "LDFLAGS += $LDFLAGS" >> $TEMP_DIR/config.mk |
| |
430 fi |
| |
431 |
| |
432 # |
| |
433 # OPTION VALUES |
| |
434 # |
| |
435 |
| |
436 # |
| |
437 # TARGETS |
| |
438 # |
| |
439 CFLAGS= |
| |
440 CXXFLAGS= |
| |
441 LDFLAGS= |
| |
442 |
| |
443 # Target |
| |
444 CFLAGS= |
| |
445 LDFLAGS= |
| |
446 CXXFLAGS= |
| |
447 |
| |
448 dependency_libxml2 |
| |
449 if [ $? -ne 0 ]; then |
| |
450 DEPENDENCIES_FAILED+="libxml2 " |
| |
451 ERROR=1 |
| |
452 fi |
| |
453 dependency_openssl |
| |
454 if [ $? -ne 0 ]; then |
| |
455 DEPENDENCIES_FAILED+="openssl " |
| |
456 ERROR=1 |
| |
457 fi |
| |
458 |
| |
459 |
| |
460 echo >> $TEMP_DIR/config.mk |
| |
461 if [[ ! -z ${CFLAGS} ]]; then |
| |
462 echo "CFLAGS += $CFLAGS" >> $TEMP_DIR/config.mk |
| |
463 fi |
| |
464 if [[ ! -z ${CXXFLAGS} ]]; then |
| |
465 echo "CXXFLAGS += $CXXFLAGS" >> $TEMP_DIR/config.mk |
| |
466 fi |
| |
467 if [[ ! -z ${LDFLAGS} ]]; then |
| |
468 echo "LDFLAGS += $LDFLAGS" >> $TEMP_DIR/config.mk |
| |
469 fi |
| |
470 |
| |
471 if [ $ERROR -ne 0 ]; then |
| |
472 echo |
| |
473 echo "Error: Unresolved dependencies" |
| |
474 echo $DEPENCIES_FAILED |
| |
475 rm -Rf $TEMP_DIR |
| |
476 exit 1 |
| |
477 fi |
| |
478 |
| |
479 echo "configure finished" |
| |
480 echo |
| |
481 echo "Build Config:" |
| |
482 echo " PREFIX: $PREFIX" |
| |
483 echo " TOOLCHAIN: $TOOLCHAIN_NAME" |
| |
484 echo |
| |
485 cat $TEMP_DIR/config.mk $TEMP_DIR/make.mk > config.mk |
| |
486 rm -Rf $TEMP_DIR |
| |
487 |
| |
488 |