1 #!/bin/sh
2
3
4 # some utility functions
5 isplatform()
6 {
7 for p in $PLATFORM
8 do
9 if [ "$p" = "$1" ]; then
10 return 0
11 fi
12 done
13 return 1
14 }
15 notisplatform()
16 {
17 for p in $PLATFORM
18 do
19 if [ "$p" = "$1" ]; then
20 return 1
21 fi
22 done
23 return 0
24 }
25 istoolchain()
26 {
27 for t in $TOOLCHAIN
28 do
29 if [ "$t" = "$1" ]; then
30 return 0
31 fi
32 done
33 return 1
34 }
35 notistoolchain()
36 {
37 for t in $TOOLCHAIN
38 do
39 if [ "$t" = "$1" ]; then
40 return 1
41 fi
42 done
43 return 0
44 }
45
46 # clean abort
47 abort_configure()
48 {
49 rm -Rf "$TEMP_DIR"
50 exit 1
51 }
52
53 # Test for availability of pkg-config
54 PKG_CONFIG=`command -v pkg-config`
55 : ${PKG_CONFIG:="false"}
56
57 # Simple uname based platform detection
58 # $PLATFORM is used for platform dependent dependency selection
59 OS=`uname -s`
60 OS_VERSION=`uname -r`
61 ARCH=`uname -m`
62 printf "Configure script for platform: "
63 if [ "$OS" = "SunOS" ]; then
64 PLATFORM="solaris sunos unix svr4"
65 elif [ "$OS" = "Linux" ]; then
66 PLATFORM="linux unix"
67 elif [ "$OS" = "FreeBSD" ]; then
68 PLATFORM="freebsd bsd unix"
69 elif [ "$OS" = "OpenBSD" ]; then
70 PLATFORM="openbsd bsd unix"
71 elif [ "$OS" = "NetBSD" ]; then
72 PLATFORM="netbsd bsd unix"
73 elif [ "$OS" = "Darwin" ]; then
74 PLATFORM="macos osx bsd unix"
75 elif echo "$OS" | grep -i "MINGW" > /dev/null; then
76 PLATFORM="windows mingw"
77 else
78 PLATFORM="unix"
79 fi
80 PLATFORM_NAME=`echo "$PLATFORM" | cut -f1 -d' ' -`
81 echo "$PLATFORM_NAME"
82
83
84 # help text
85 printhelp()
86 {
87 echo "Usage: $0 [OPTIONS]..."
88 if [ $has_overridable_config_vars__ -eq 1 ] ; then
89 echo
90 echo "Configuration:"
91 fi
92 if true \
93 ; then
94 :
95 if [ -z "$prefix__described__" ] ; then
96 prefix__described__=1
97 cat << '__EOF__'
98 --prefix path prefix for architecture-independent files [/usr]
99 __EOF__
100 fi
101 if [ -z "$exec_prefix__described__" ] ; then
102 exec_prefix__described__=1
103 cat << '__EOF__'
104 --exec-prefix path prefix for architecture-dependent files [PREFIX]
105 __EOF__
106 fi
107 if [ -z "$libdir__described__" ] ; then
108 libdir__described__=1
109 cat << '__EOF__'
110 --libdir object code libraries [EPREFIX/lib]
111 __EOF__
112 fi
113 if [ -z "$includedir__described__" ] ; then
114 includedir__described__=1
115 cat << '__EOF__'
116 --includedir C header files [PREFIX/include]
117 __EOF__
118 fi
119 fi
120 if true \
121 && isplatform "freebsd" \
122 ; then
123 :
124 if [ -z "$pkgconfigdir__described__" ] ; then
125 pkgconfigdir__described__=1
126 cat << '__EOF__'
127 --pkgconfigdir location of the *.pc files
128 __EOF__
129 fi
130 fi
131 if true \
132 && notisplatform "freebsd" \
133 ; then
134 :
135 if [ -z "$pkgconfigdir__described__" ] ; then
136 pkgconfigdir__described__=1
137 cat << '__EOF__'
138 --pkgconfigdir location of the *.pc files
139 __EOF__
140 fi
141 fi
142 if true \
143 ; then
144 :
145 if [ -z "$DOXYGEN__described__" ] ; then
146 DOXYGEN__described__=1
147 cat << '__EOF__'
148 --doxygen path of the Doxygen executable
149 __EOF__
150 fi
151 fi
152 cat << '__EOF__'
153
154 Build Types:
155 --debug add extra compile flags for debug builds
156 --release add extra compile flags for release builds
157
158 Optional Features:
159 --enable-api-docs run Doxygen during build
160 --enable-coverage test coverage with gcov
161 --enable-asan address sanitizer
162 --enable-ubsan undefined behavior sanitizer
163 --disable-cxx-tests the check-cxx makefile target
164 --disable-szmul-builtin use custom implementation, instead
165 --disable-memrchr
166 --disable-mkstemp
167 --disable-qsort_r
168
169 __EOF__
170 abort_configure
171 }
172
173 # create temporary directory
174 TEMP_DIR=".tmp-`uname -n`"
175 rm -Rf "$TEMP_DIR"
176 if mkdir -p "$TEMP_DIR"; then
177 :
178 else
179 echo "Cannot create tmp dir $TEMP_DIR"
180 echo "Abort"
181 exit 1
182 fi
183 touch "$TEMP_DIR/options"
184 touch "$TEMP_DIR/features"
185
186 # config variables
187 has_overridable_config_vars__=0
188 if true \
189 ; then
190 :
191 if [ -z "$prefix__initialized__" ] ; then
192 has_overridable_config_vars__=1
193 prefix__initialized__=1
194 prefix='/usr'
195 fi
196 if [ -z "$exec_prefix__initialized__" ] ; then
197 has_overridable_config_vars__=1
198 exec_prefix__initialized__=1
199 exec_prefix=''
200 fi
201 if [ -z "$libdir__initialized__" ] ; then
202 has_overridable_config_vars__=1
203 libdir__initialized__=1
204 libdir=''
205 fi
206 if [ -z "$includedir__initialized__" ] ; then
207 has_overridable_config_vars__=1
208 includedir__initialized__=1
209 includedir=''
210 fi
211 if [ -z "$VERSION__initialized__" ] ; then
212 VERSION__initialized__=1
213 VERSION='4.0.2'
214 fi
215 if [ -z "$LIBVERSION__initialized__" ] ; then
216 LIBVERSION__initialized__=1
217 LIBVERSION='7.0.2'
218 fi
219 if [ -z "$LIBVERSION_MAJOR__initialized__" ] ; then
220 LIBVERSION_MAJOR__initialized__=1
221 LIBVERSION_MAJOR='7'
222 fi
223 if [ -z "$root_dir__initialized__" ] ; then
224 root_dir__initialized__=1
225 root_dir=`pwd`
226 fi
227 if [ -z "$build_dir__initialized__" ] ; then
228 build_dir__initialized__=1
229 build_dir='${root_dir}/build'
230 fi
231 if [ -z "$docs_dir__initialized__" ] ; then
232 docs_dir__initialized__=1
233 docs_dir='${root_dir}/build/docs'
234 fi
235 if [ -z "$dist_dir__initialized__" ] ; then
236 dist_dir__initialized__=1
237 dist_dir='${root_dir}/dist'
238 fi
239 if [ -z "$MKDIR__initialized__" ] ; then
240 MKDIR__initialized__=1
241 MKDIR='/bin/mkdir -p'
242 fi
243 if [ -z "$RMFILE__initialized__" ] ; then
244 RMFILE__initialized__=1
245 RMFILE='/bin/rm -f'
246 fi
247 if [ -z "$RMDIR__initialized__" ] ; then
248 RMDIR__initialized__=1
249 RMDIR='/bin/rm -f -R'
250 fi
251 if [ -z "$COPYFILE__initialized__" ] ; then
252 COPYFILE__initialized__=1
253 COPYFILE='/bin/cp -f'
254 fi
255 if [ -z "$COPYALL__initialized__" ] ; then
256 COPYALL__initialized__=1
257 COPYALL='/bin/cp -f -R'
258 fi
259 if [ -z "$SYMLINK__initialized__" ] ; then
260 SYMLINK__initialized__=1
261 SYMLINK='/bin/ln -s'
262 fi
263 fi
264 if true \
265 && isplatform "freebsd" \
266 ; then
267 :
268 if [ -z "$pkgconfigdir__initialized__" ] ; then
269 has_overridable_config_vars__=1
270 pkgconfigdir__initialized__=1
271 pkgconfigdir='${exec_prefix}/libdata/pkgconfig'
272 fi
273 fi
274 if true \
275 && notisplatform "freebsd" \
276 ; then
277 :
278 if [ -z "$pkgconfigdir__initialized__" ] ; then
279 has_overridable_config_vars__=1
280 pkgconfigdir__initialized__=1
281 pkgconfigdir='${libdir}/pkgconfig'
282 fi
283 fi
284 if true \
285 ; then
286 :
287 if [ -z "$DOXYGEN__initialized__" ] ; then
288 has_overridable_config_vars__=1
289 DOXYGEN__initialized__=1
290 DOXYGEN=`command -v doxygen || echo '/bin/false'`
291 fi
292 fi
293
294 # features
295 FEATURE_CXX_TESTS=auto
296 FEATURE_SZMUL_BUILTIN=auto
297 FEATURE_MEMRCHR=auto
298 FEATURE_MKSTEMP=auto
299 FEATURE_QSORT_R=auto
300
301 #
302 # parse arguments
303 #
304 BUILD_TYPE="default"
305 for ARG in "$@"
306 do
307 case "$ARG" in
308 "--prefix="*) prefix=${ARG#--prefix=} ;;
309 "--exec-prefix="*) exec_prefix=${ARG#--exec-prefix=} ;;
310 "--libdir="*) libdir=${ARG#--libdir=} ;;
311 "--includedir="*) includedir=${ARG#--includedir=} ;;
312 "--pkgconfigdir="*) pkgconfigdir=${ARG#--pkgconfigdir=} ;;
313 "--doxygen="*) DOXYGEN=${ARG#--doxygen=} ;;
314 "--help"*) printhelp ;;
315 "--debug") BUILD_TYPE="debug" ;;
316 "--release") BUILD_TYPE="release" ;;
317 "--enable-api-docs") FEATURE_API_DOCS=on ;;
318 "--disable-api-docs") unset FEATURE_API_DOCS ;;
319 "--enable-coverage") FEATURE_COVERAGE=on ;;
320 "--disable-coverage") unset FEATURE_COVERAGE ;;
321 "--enable-asan") FEATURE_ASAN=on ;;
322 "--disable-asan") unset FEATURE_ASAN ;;
323 "--enable-ubsan") FEATURE_UBSAN=on ;;
324 "--disable-ubsan") unset FEATURE_UBSAN ;;
325 "--enable-cxx-tests") FEATURE_CXX_TESTS=on ;;
326 "--disable-cxx-tests") unset FEATURE_CXX_TESTS ;;
327 "--enable-szmul-builtin") FEATURE_SZMUL_BUILTIN=on ;;
328 "--disable-szmul-builtin") unset FEATURE_SZMUL_BUILTIN ;;
329 "--enable-memrchr") FEATURE_MEMRCHR=on ;;
330 "--disable-memrchr") unset FEATURE_MEMRCHR ;;
331 "--enable-mkstemp") FEATURE_MKSTEMP=on ;;
332 "--disable-mkstemp") unset FEATURE_MKSTEMP ;;
333 "--enable-qsort_r") FEATURE_QSORT_R=on ;;
334 "--disable-qsort_r") unset FEATURE_QSORT_R ;;
335 "-"*) echo "unknown option: $ARG"; abort_configure ;;
336 esac
337 done
338
339 # toolchain detection utilities
340 . make/toolchain.sh
341
342 # check languages
343 lang_c=
344 lang_cpp=
345 if detect_cpp_compiler ; then
346 lang_cpp=1
347 fi
348 if detect_c_compiler ; then
349 lang_c=1
350 fi
351
352
353
354 # set defaults for dir variables
355 : ${exec_prefix:="$prefix"}
356 : ${bindir:='${exec_prefix}/bin'}
357 : ${sbindir:='${exec_prefix}/sbin'}
358 : ${libdir:='${exec_prefix}/lib'}
359 : ${libexecdir:='${exec_prefix}/libexec'}
360 : ${datarootdir:='${prefix}/share'}
361 : ${datadir:='${datarootdir}'}
362 : ${sharedstatedir:='${prefix}/com'}
363 if [ -z "$sysconfdir" ]; then
364 if [ "$prefix" = '/usr' ]; then
365 sysconfdir='/etc'
366 else
367 sysconfdir='${prefix}/etc'
368 fi
369 fi
370 if [ -z "$localstatedir" ]; then
371 if [ "$prefix" = '/usr' ]; then
372 localstatedir='/var'
373 else
374 localstatedir='${prefix}/var'
375 fi
376 fi
377 if [ -z "$runstatedir" ]; then
378 if [ "$prefix" = '/usr' ]; then
379 runstatedir='/var/run'
380 else
381 runstatedir='${prefix}/var'
382 fi
383 fi
384 : ${includedir:='${prefix}/include'}
385 : ${infodir:='${datarootdir}/info'}
386 : ${mandir:='${datarootdir}/man'}
387 : ${localedir:='${datarootdir}/locale'}
388
389
390 # check if a config.site exists and load it
391 CONFIG_SITE_OK=0
392 if [ -n "$CONFIG_SITE" ]; then
393 # CONFIG_SITE may contain space separated file names
394 for cs in $CONFIG_SITE; do
395 printf "loading defaults from $cs... "
396 if [ -f "$cs" ]; then
397 . "$cs"
398 echo ok
399 CONFIG_SITE_OK=1
400 break
401 else
402 echo "not found"
403 fi
404 done
405 elif [ -f "$prefix/share/config.site" ]; then
406 printf "loading site defaults... "
407 . "$prefix/share/config.site"
408 echo ok
409 CONFIG_SITE_OK=1
410 elif [ -f "$prefix/etc/config.site" ]; then
411 printf "loading site defaults... "
412 . "$prefix/etc/config.site"
413 echo ok
414 CONFIG_SITE_OK=1
415 fi
416
417 if [ $CONFIG_SITE_OK -eq 0 ]; then
418 # try to detect the correct libdir on our own, except it was changed by the user
419 if [ "$libdir" = '${exec_prefix}/lib' ] ; then
420 if [ "$TOOLCHAIN_WSIZE" = "64" ] ; then
421 if [ "$OS" = "SunOS" ]; then
422 [ -d "${exec_prefix}/lib/64" ] && libdir='${exec_prefix}/lib/64'
423 else
424 [ -d "${exec_prefix}/lib64" ] && libdir='${exec_prefix}/lib64'
425 fi
426 elif [ "$TOOLCHAIN_WSIZE" = "32" ] ; then
427 if [ "$OS" = "SunOS" ]; then
428 [ -d "${exec_prefix}/lib/32" ] && libdir='${exec_prefix}/lib/32'
429 else
430 [ -d "${exec_prefix}/lib32" ] && libdir='${exec_prefix}/lib32'
431 fi
432 fi
433 fi
434 fi
435
436
437 # generate vars.mk
438 echo '# configuration' > "$TEMP_DIR/vars.mk"
439 echo "prefix=$prefix" >> "$TEMP_DIR/vars.mk"
440 echo "exec_prefix=$exec_prefix" >> "$TEMP_DIR/vars.mk"
441 echo "libdir=$libdir" >> "$TEMP_DIR/vars.mk"
442 echo "includedir=$includedir" >> "$TEMP_DIR/vars.mk"
443 echo "VERSION=$VERSION" >> "$TEMP_DIR/vars.mk"
444 echo "LIBVERSION=$LIBVERSION" >> "$TEMP_DIR/vars.mk"
445 echo "LIBVERSION_MAJOR=$LIBVERSION_MAJOR" >> "$TEMP_DIR/vars.mk"
446 echo "root_dir=$root_dir" >> "$TEMP_DIR/vars.mk"
447 echo "build_dir=$build_dir" >> "$TEMP_DIR/vars.mk"
448 echo "docs_dir=$docs_dir" >> "$TEMP_DIR/vars.mk"
449 echo "dist_dir=$dist_dir" >> "$TEMP_DIR/vars.mk"
450 echo "MKDIR=$MKDIR" >> "$TEMP_DIR/vars.mk"
451 echo "RMFILE=$RMFILE" >> "$TEMP_DIR/vars.mk"
452 echo "RMDIR=$RMDIR" >> "$TEMP_DIR/vars.mk"
453 echo "COPYFILE=$COPYFILE" >> "$TEMP_DIR/vars.mk"
454 echo "COPYALL=$COPYALL" >> "$TEMP_DIR/vars.mk"
455 echo "SYMLINK=$SYMLINK" >> "$TEMP_DIR/vars.mk"
456 echo "pkgconfigdir=$pkgconfigdir" >> "$TEMP_DIR/vars.mk"
457 echo "DOXYGEN=$DOXYGEN" >> "$TEMP_DIR/vars.mk"
458 echo >> "$TEMP_DIR/vars.mk"
459
460 #
461 # DEPENDENCIES
462 #
463
464 # create buffer for make variables required by dependencies
465 echo > "$TEMP_DIR/make.mk"
466
467 test_pkg_config()
468 {
469 if "$PKG_CONFIG" --exists "$1" ; then :
470 else return 1 ; fi
471 if [ -z "$2" ] || "$PKG_CONFIG" --atleast-version="$2" "$1" ; then :
472 else return 1 ; fi
473 if [ -z "$3" ] || "$PKG_CONFIG" --exact-version="$3" "$1" ; then :
474 else return 1 ; fi
475 if [ -z "$4" ] || "$PKG_CONFIG" --max-version="$4" "$1" ; then :
476 else return 1 ; fi
477 return 0
478 }
479
480 print_check_msg()
481 {
482 if [ -z "$1" ]; then
483 shift
484 printf "$@"
485 fi
486 }
487
488 dependency_error_coverage()
489 {
490 print_check_msg "$dep_checked_coverage" "checking for coverage... "
491 # dependency coverage toolchain="gcc"
492 while true
493 do
494 if notistoolchain "gcc"; then
495 break
496 fi
497 if command -v gcovr > /dev/null 2>&1 ; then
498 :
499 else
500 break
501 fi
502 TEMP_CFLAGS="$TEMP_CFLAGS \${COVERAGE_CFLAGS}"
503 TEMP_LDFLAGS="$TEMP_LDFLAGS \${COVERAGE_LDFLAGS}"
504 print_check_msg "$dep_checked_coverage" "yes\n"
505 dep_checked_coverage=1
506 return 1
507 done
508
509 print_check_msg "$dep_checked_coverage" "no\n"
510 dep_checked_coverage=1
511 return 0
512 }
513 dependency_error_mkstemp()
514 {
515 print_check_msg "$dep_checked_mkstemp" "checking for mkstemp... "
516 # dependency mkstemp
517 while true
518 do
519 if $TOOLCHAIN_CC $CFLAGS $LDFLAGS -o /dev/null make/test_mkstemp.c > /dev/null 2>&1 ; then
520 :
521 else
522 break
523 fi
524 TEMP_CFLAGS="$TEMP_CFLAGS -DWITH_MKSTEMP"
525 TEMP_CXXFLAGS="$TEMP_CXXFLAGS -DWITH_MKSTEMP"
526 print_check_msg "$dep_checked_mkstemp" "yes\n"
527 dep_checked_mkstemp=1
528 return 1
529 done
530
531 print_check_msg "$dep_checked_mkstemp" "no\n"
532 dep_checked_mkstemp=1
533 return 0
534 }
535 dependency_error_asan()
536 {
537 print_check_msg "$dep_checked_asan" "checking for asan... "
538 # dependency asan toolchain="gnuc"
539 while true
540 do
541 if notistoolchain "gnuc"; then
542 break
543 fi
544 TEMP_CFLAGS="$TEMP_CFLAGS -fsanitize=address"
545 TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=address"
546 print_check_msg "$dep_checked_asan" "yes\n"
547 dep_checked_asan=1
548 return 1
549 done
550
551 print_check_msg "$dep_checked_asan" "no\n"
552 dep_checked_asan=1
553 return 0
554 }
555 dependency_error_cxx()
556 {
557 print_check_msg "$dep_checked_cxx" "checking for cxx... "
558 # dependency cxx
559 while true
560 do
561 if [ -z "$lang_cpp" ] ; then
562 break
563 fi
564 print_check_msg "$dep_checked_cxx" "yes\n"
565 dep_checked_cxx=1
566 return 1
567 done
568
569 print_check_msg "$dep_checked_cxx" "no\n"
570 dep_checked_cxx=1
571 return 0
572 }
573 dependency_error_memrchr()
574 {
575 print_check_msg "$dep_checked_memrchr" "checking for memrchr... "
576 # dependency memrchr
577 while true
578 do
579 if $TOOLCHAIN_CC $CFLAGS $LDFLAGS -o /dev/null make/test_memrchr.c > /dev/null 2>&1 ; then
580 :
581 else
582 break
583 fi
584 TEMP_CFLAGS="$TEMP_CFLAGS -DWITH_MEMRCHR"
585 TEMP_CXXFLAGS="$TEMP_CXXFLAGS -DWITH_MEMRCHR"
586 print_check_msg "$dep_checked_memrchr" "yes\n"
587 dep_checked_memrchr=1
588 return 1
589 done
590
591 print_check_msg "$dep_checked_memrchr" "no\n"
592 dep_checked_memrchr=1
593 return 0
594 }
595 dependency_error_doxygen()
596 {
597 print_check_msg "$dep_checked_doxygen" "checking for doxygen... "
598 # dependency doxygen
599 while true
600 do
601 if test -n "$DOXYGEN" > /dev/null 2>&1 ; then
602 :
603 else
604 break
605 fi
606 print_check_msg "$dep_checked_doxygen" "yes\n"
607 dep_checked_doxygen=1
608 return 1
609 done
610
611 print_check_msg "$dep_checked_doxygen" "no\n"
612 dep_checked_doxygen=1
613 return 0
614 }
615 dependency_error_no_coverage()
616 {
617 print_check_msg "$dep_checked_no_coverage" "checking for no_coverage... "
618 # dependency no_coverage
619 while true
620 do
621 if test -z "$FEATURE_COVERAGE" > /dev/null 2>&1 ; then
622 :
623 else
624 break
625 fi
626 print_check_msg "$dep_checked_no_coverage" "yes\n"
627 dep_checked_no_coverage=1
628 return 1
629 done
630
631 print_check_msg "$dep_checked_no_coverage" "no\n"
632 dep_checked_no_coverage=1
633 return 0
634 }
635 dependency_error_ubsan()
636 {
637 print_check_msg "$dep_checked_ubsan" "checking for ubsan... "
638 # dependency ubsan toolchain="gnuc"
639 while true
640 do
641 if notistoolchain "gnuc"; then
642 break
643 fi
644 TEMP_CFLAGS="$TEMP_CFLAGS -fsanitize=undefined"
645 TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=undefined"
646 print_check_msg "$dep_checked_ubsan" "yes\n"
647 dep_checked_ubsan=1
648 return 1
649 done
650
651 print_check_msg "$dep_checked_ubsan" "no\n"
652 dep_checked_ubsan=1
653 return 0
654 }
655 dependency_error_qsort_r()
656 {
657 print_check_msg "$dep_checked_qsort_r" "checking for qsort_r... "
658 # dependency qsort_r
659 while true
660 do
661 if $TOOLCHAIN_CC $CFLAGS $LDFLAGS -o /dev/null make/test_qsort_r.c > /dev/null 2>&1 ; then
662 :
663 else
664 break
665 fi
666 TEMP_CFLAGS="$TEMP_CFLAGS -DWITH_QSORT_R"
667 TEMP_CXXFLAGS="$TEMP_CXXFLAGS -DWITH_QSORT_R"
668 print_check_msg "$dep_checked_qsort_r" "yes\n"
669 dep_checked_qsort_r=1
670 return 1
671 done
672
673 print_check_msg "$dep_checked_qsort_r" "no\n"
674 dep_checked_qsort_r=1
675 return 0
676 }
677
678 # start collecting dependency information
679 echo > "$TEMP_DIR/flags.mk"
680
681 DEPENDENCIES_FAILED=
682 ERROR=0
683 # unnamed dependencies
684 cat >> "$TEMP_DIR/make.mk" << __EOF__
685
686 # definitions from unnamed dependencies
687 __EOF__
688 TEMP_CFLAGS="$CFLAGS"
689 TEMP_CXXFLAGS="$CXXFLAGS"
690 TEMP_LDFLAGS="$LDFLAGS"
691 while true
692 do
693 if notisplatform "macos"; then
694 break
695 fi
696 while true
697 do
698 if [ -z "$lang_c" ] ; then
699 ERROR=1
700 break
701 fi
702
703 cat >> "$TEMP_DIR/make.mk" << __EOF__
704 AR=ar
705 ARFLAGS=r
706 STLIB_EXT=.a
707 SHLIB_EXT=.dylib
708
709 SHLIB_LDFLAGS=-dynamiclib -current_version \$(LIBVERSION) -compatibility_version \$(LIBVERSION)
710 INSTALL_LIB=\$(root_dir)/make/install-lib-macos.sh
711 __EOF__
712 break
713 done
714 break
715 done
716 while true
717 do
718 if notisplatform "unix"; then
719 break
720 fi
721 if isplatform "macos" || istoolchain "macos"; then
722 break
723 fi
724 while true
725 do
726 if [ -z "$lang_c" ] ; then
727 ERROR=1
728 break
729 fi
730
731 cat >> "$TEMP_DIR/make.mk" << __EOF__
732 AR=ar
733 ARFLAGS=cr
734 STLIB_EXT=.a
735 SHLIB_EXT=.so
736 INSTALL_LIB=\$(root_dir)/make/install-lib.sh
737 __EOF__
738 break
739 done
740 break
741 done
742 while true
743 do
744 if notistoolchain "gnuc"; then
745 break
746 fi
747 if isplatform "macos" || istoolchain "macos"; then
748 break
749 fi
750 while true
751 do
752
753 cat >> "$TEMP_DIR/make.mk" << __EOF__
754 SHLIB_LDFLAGS += -Wl,-soname,libucx\$(SHLIB_EXT).\$(LIBVERSION_MAJOR)
755 __EOF__
756 break
757 done
758 break
759 done
760 while true
761 do
762 if notistoolchain "suncc"; then
763 break
764 fi
765 while true
766 do
767
768 cat >> "$TEMP_DIR/make.mk" << __EOF__
769 SHLIB_LDFLAGS += -h libucx\$(SHLIB_EXT).\$(LIBVERSION_MAJOR)
770 __EOF__
771 break
772 done
773 break
774 done
775 while true
776 do
777 if notisplatform "solaris"; then
778 break
779 fi
780 while true
781 do
782
783 TEMP_LDFLAGS="$TEMP_LDFLAGS -lm"
784 break
785 done
786 break
787 done
788
789 # build type
790 if [ "$BUILD_TYPE" = "debug" ]; then
791 TEMP_CFLAGS="\${DEBUG_CFLAGS} $TEMP_CFLAGS"
792 TEMP_CXXFLAGS="\${DEBUG_CXXFLAGS} $TEMP_CXXFLAGS"
793 fi
794 if [ "$BUILD_TYPE" = "release" ]; then
795 TEMP_CFLAGS="\${RELEASE_CFLAGS} $TEMP_CFLAGS"
796 TEMP_CXXFLAGS="\${RELEASE_CXXFLAGS} $TEMP_CXXFLAGS"
797 fi
798
799 # add general dependency flags to flags.mk
800 echo "# general flags" >> "$TEMP_DIR/flags.mk"
801 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
802 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
803 fi
804 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
805 echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
806 fi
807 if [ -n "${TEMP_LDFLAGS}" ]; then
808 echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
809 fi
810
811 #
812 # OPTION VALUES
813 #
814
815 #
816 # TARGETS
817 #
818
819 echo >> "$TEMP_DIR/flags.mk"
820 echo "configuring global target"
821 echo "# flags for unnamed target" >> "$TEMP_DIR/flags.mk"
822 TEMP_CFLAGS=
823 TEMP_CXXFLAGS=
824 TEMP_LDFLAGS=
825
826
827 # Features
828 if [ -n "$FEATURE_API_DOCS" ]; then
829 # check dependency
830 if dependency_error_doxygen ; then
831 # "auto" features can fail and are just disabled in this case
832 if [ "$FEATURE_API_DOCS" = "auto" ]; then
833 DISABLE_FEATURE_API_DOCS=1
834 else
835 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED doxygen "
836 ERROR=1
837 fi
838 fi
839 if [ -n "$DISABLE_FEATURE_API_DOCS" ]; then
840 unset FEATURE_API_DOCS
841 fi
842 fi
843 if [ -n "$FEATURE_API_DOCS" ]; then
844 :
845 cat >> "$TEMP_DIR/make.mk" << __EOF__
846
847 # enabled feature: api-docs
848 WITH_API_DOCS=yes
849 __EOF__
850 else
851 :
852 fi
853 if [ -n "$FEATURE_COVERAGE" ]; then
854 # check dependency
855 if dependency_error_coverage ; then
856 # "auto" features can fail and are just disabled in this case
857 if [ "$FEATURE_COVERAGE" = "auto" ]; then
858 DISABLE_FEATURE_COVERAGE=1
859 else
860 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED coverage "
861 ERROR=1
862 fi
863 fi
864 if [ -n "$DISABLE_FEATURE_COVERAGE" ]; then
865 unset FEATURE_COVERAGE
866 fi
867 fi
868 if [ -n "$FEATURE_COVERAGE" ]; then
869 :
870 else
871 :
872 fi
873 if [ -n "$FEATURE_ASAN" ]; then
874 # check dependency
875 if dependency_error_asan ; then
876 # "auto" features can fail and are just disabled in this case
877 if [ "$FEATURE_ASAN" = "auto" ]; then
878 DISABLE_FEATURE_ASAN=1
879 else
880 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED asan "
881 ERROR=1
882 fi
883 fi
884 if [ -n "$DISABLE_FEATURE_ASAN" ]; then
885 unset FEATURE_ASAN
886 fi
887 fi
888 if [ -n "$FEATURE_ASAN" ]; then
889 :
890 else
891 :
892 fi
893 if [ -n "$FEATURE_UBSAN" ]; then
894 # check dependency
895 if dependency_error_ubsan ; then
896 # "auto" features can fail and are just disabled in this case
897 if [ "$FEATURE_UBSAN" = "auto" ]; then
898 DISABLE_FEATURE_UBSAN=1
899 else
900 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ubsan "
901 ERROR=1
902 fi
903 fi
904 if [ -n "$DISABLE_FEATURE_UBSAN" ]; then
905 unset FEATURE_UBSAN
906 fi
907 fi
908 if [ -n "$FEATURE_UBSAN" ]; then
909 :
910 else
911 :
912 fi
913 if [ -n "$FEATURE_CXX_TESTS" ]; then
914 # check dependency
915 if dependency_error_cxx ; then
916 # "auto" features can fail and are just disabled in this case
917 if [ "$FEATURE_CXX_TESTS" = "auto" ]; then
918 DISABLE_FEATURE_CXX_TESTS=1
919 else
920 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED cxx "
921 ERROR=1
922 fi
923 fi
924 if [ -n "$DISABLE_FEATURE_CXX_TESTS" ]; then
925 unset FEATURE_CXX_TESTS
926 fi
927 fi
928 if [ -n "$FEATURE_CXX_TESTS" ]; then
929 :
930 cat >> "$TEMP_DIR/make.mk" << __EOF__
931
932 # enabled feature: cxx-tests
933 WITH_CXX_TEST=yes
934 __EOF__
935 else
936 :
937 fi
938 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then
939 # check dependency
940 if dependency_error_no_coverage ; then
941 # "auto" features can fail and are just disabled in this case
942 if [ "$FEATURE_SZMUL_BUILTIN" = "auto" ]; then
943 DISABLE_FEATURE_SZMUL_BUILTIN=1
944 else
945 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED no_coverage "
946 ERROR=1
947 fi
948 fi
949 if [ -n "$DISABLE_FEATURE_SZMUL_BUILTIN" ]; then
950 unset FEATURE_SZMUL_BUILTIN
951 fi
952 fi
953 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then
954 :
955 else
956 :
957 TEMP_CFLAGS="$TEMP_CFLAGS -DCX_NO_SZMUL_BUILTIN"
958 TEMP_CXXFLAGS="$TEMP_CXXFLAGS -DCX_NO_SZMUL_BUILTIN"
959 fi
960 if [ -n "$FEATURE_MEMRCHR" ]; then
961 # check dependency
962 if dependency_error_memrchr ; then
963 # "auto" features can fail and are just disabled in this case
964 if [ "$FEATURE_MEMRCHR" = "auto" ]; then
965 DISABLE_FEATURE_MEMRCHR=1
966 else
967 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED memrchr "
968 ERROR=1
969 fi
970 fi
971 if [ -n "$DISABLE_FEATURE_MEMRCHR" ]; then
972 unset FEATURE_MEMRCHR
973 fi
974 fi
975 if [ -n "$FEATURE_MEMRCHR" ]; then
976 :
977 else
978 :
979 fi
980 if [ -n "$FEATURE_MKSTEMP" ]; then
981 # check dependency
982 if dependency_error_mkstemp ; then
983 # "auto" features can fail and are just disabled in this case
984 if [ "$FEATURE_MKSTEMP" = "auto" ]; then
985 DISABLE_FEATURE_MKSTEMP=1
986 else
987 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED mkstemp "
988 ERROR=1
989 fi
990 fi
991 if [ -n "$DISABLE_FEATURE_MKSTEMP" ]; then
992 unset FEATURE_MKSTEMP
993 fi
994 fi
995 if [ -n "$FEATURE_MKSTEMP" ]; then
996 :
997 else
998 :
999 fi
1000 if [ -n "$FEATURE_QSORT_R" ]; then
1001 # check dependency
1002 if dependency_error_qsort_r ; then
1003 # "auto" features can fail and are just disabled in this case
1004 if [ "$FEATURE_QSORT_R" = "auto" ]; then
1005 DISABLE_FEATURE_QSORT_R=1
1006 else
1007 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED qsort_r "
1008 ERROR=1
1009 fi
1010 fi
1011 if [ -n "$DISABLE_FEATURE_QSORT_R" ]; then
1012 unset FEATURE_QSORT_R
1013 fi
1014 fi
1015 if [ -n "$FEATURE_QSORT_R" ]; then
1016 :
1017 else
1018 :
1019 fi
1020
1021 OPTIONS_UNSELECTED=
1022
1023 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
1024 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
1025 fi
1026 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
1027 echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
1028 fi
1029 if [ -n "${TEMP_LDFLAGS}" ]; then
1030 echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
1031 fi
1032
1033
1034 # final result
1035 echo "configure finished"
1036 echo
1037
1038 if [ $ERROR -ne 0 ]; then
1039 echo "Error:"
1040 if [ -n "$DEPENDENCIES_FAILED" ]; then
1041 echo "Unresolved dependencies: $DEPENDENCIES_FAILED"
1042 fi
1043 if [ -n "$OPTIONS_UNSELECTED" ]; then
1044 echo "Unselected options: $OPTIONS_UNSELECTED"
1045 fi
1046 abort_configure
1047 fi
1048
1049 echo "Toolchain:"
1050 echo " name: $TOOLCHAIN_NAME"
1051 if [ -n "$TOOLCHAIN_CC" ]; then
1052 echo " cc: $TOOLCHAIN_CC"
1053 fi
1054 if [ -n "$TOOLCHAIN_CXX" ]; then
1055 echo " cxx: $TOOLCHAIN_CXX"
1056 fi
1057 if [ -n "$TOOLCHAIN_WSIZE" ]; then
1058 echo " word size: $TOOLCHAIN_WSIZE bit"
1059 fi
1060 if [ -n "$TOOLCHAIN_CSTD" ]; then
1061 echo " default C std: $TOOLCHAIN_CSTD"
1062 fi
1063 if [ $has_overridable_config_vars__ -eq 1 ]; then
1064 echo
1065 echo "Config:"
1066 if [ -n "$prefix__initialized__" ]; then
1067 printf ' %-16s' 'prefix:'
1068 echo "$prefix"
1069 fi
1070 if [ -n "$exec_prefix__initialized__" ]; then
1071 printf ' %-16s' 'exec-prefix:'
1072 echo "$exec_prefix"
1073 fi
1074 if [ -n "$libdir__initialized__" ]; then
1075 printf ' %-16s' 'libdir:'
1076 echo "$libdir"
1077 fi
1078 if [ -n "$includedir__initialized__" ]; then
1079 printf ' %-16s' 'includedir:'
1080 echo "$includedir"
1081 fi
1082 if [ -n "$pkgconfigdir__initialized__" ]; then
1083 printf ' %-16s' 'pkgconfigdir:'
1084 echo "$pkgconfigdir"
1085 fi
1086 if [ -n "$DOXYGEN__initialized__" ]; then
1087 printf ' %-16s' 'doxygen:'
1088 echo "$DOXYGEN"
1089 fi
1090 fi
1091 echo
1092 echo "Features:"
1093 printf ' %-16s' 'api-docs:'
1094 if [ -n "$FEATURE_API_DOCS" ]; then
1095 echo 'on'
1096 else
1097 echo 'off'
1098 fi
1099 printf ' %-16s' 'coverage:'
1100 if [ -n "$FEATURE_COVERAGE" ]; then
1101 echo 'on'
1102 else
1103 echo 'off'
1104 fi
1105 printf ' %-16s' 'asan:'
1106 if [ -n "$FEATURE_ASAN" ]; then
1107 echo 'on'
1108 else
1109 echo 'off'
1110 fi
1111 printf ' %-16s' 'ubsan:'
1112 if [ -n "$FEATURE_UBSAN" ]; then
1113 echo 'on'
1114 else
1115 echo 'off'
1116 fi
1117 printf ' %-16s' 'cxx-tests:'
1118 if [ -n "$FEATURE_CXX_TESTS" ]; then
1119 echo 'on'
1120 else
1121 echo 'off'
1122 fi
1123 printf ' %-16s' 'szmul-builtin:'
1124 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then
1125 echo 'on'
1126 else
1127 echo 'off'
1128 fi
1129 printf ' %-16s' 'memrchr:'
1130 if [ -n "$FEATURE_MEMRCHR" ]; then
1131 echo 'on'
1132 else
1133 echo 'off'
1134 fi
1135 printf ' %-16s' 'mkstemp:'
1136 if [ -n "$FEATURE_MKSTEMP" ]; then
1137 echo 'on'
1138 else
1139 echo 'off'
1140 fi
1141 printf ' %-16s' 'qsort_r:'
1142 if [ -n "$FEATURE_QSORT_R" ]; then
1143 echo 'on'
1144 else
1145 echo 'off'
1146 fi
1147 echo
1148
1149 # generate the config.mk file
1150 pwd=`pwd`
1151 cat > "$TEMP_DIR/config.mk" << __EOF__
1152 #
1153 # config.mk generated by:
1154 # pwd: $pwd
1155 # $0 $@
1156 #
1157
1158 __EOF__
1159 write_toolchain_defaults "$TEMP_DIR/toolchain.mk"
1160 cat "$TEMP_DIR/config.mk" "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk
1161 rm -Rf "$TEMP_DIR"
1162