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 "detect 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 fi
78 : ${PLATFORM:="unix"}
79
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.0'
214 fi
215 if [ -z "$LIBVERSION__initialized__" ] ; then
216 LIBVERSION__initialized__=1
217 LIBVERSION='7.0.0'
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 print_check_msg "$dep_checked_mkstemp" "yes\n"
526 dep_checked_mkstemp=1
527 return 1
528 done
529
530 print_check_msg "$dep_checked_mkstemp" "no\n"
531 dep_checked_mkstemp=1
532 return 0
533 }
534 dependency_error_asan()
535 {
536 print_check_msg "$dep_checked_asan" "checking for asan... "
537 # dependency asan toolchain="gnuc"
538 while true
539 do
540 if notistoolchain "gnuc"; then
541 break
542 fi
543 TEMP_CFLAGS="$TEMP_CFLAGS -fsanitize=address"
544 TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=address"
545 print_check_msg "$dep_checked_asan" "yes\n"
546 dep_checked_asan=1
547 return 1
548 done
549
550 print_check_msg "$dep_checked_asan" "no\n"
551 dep_checked_asan=1
552 return 0
553 }
554 dependency_error_cxx()
555 {
556 print_check_msg "$dep_checked_cxx" "checking for cxx... "
557 # dependency cxx
558 while true
559 do
560 if [ -z "$lang_cpp" ] ; then
561 break
562 fi
563 print_check_msg "$dep_checked_cxx" "yes\n"
564 dep_checked_cxx=1
565 return 1
566 done
567
568 print_check_msg "$dep_checked_cxx" "no\n"
569 dep_checked_cxx=1
570 return 0
571 }
572 dependency_error_memrchr()
573 {
574 print_check_msg "$dep_checked_memrchr" "checking for memrchr... "
575 # dependency memrchr
576 while true
577 do
578 if $TOOLCHAIN_CC $CFLAGS $LDFLAGS -o /dev/null make/test_memrchr.c > /dev/null 2>&1 ; then
579 :
580 else
581 break
582 fi
583 TEMP_CFLAGS="$TEMP_CFLAGS -DWITH_MEMRCHR"
584 print_check_msg "$dep_checked_memrchr" "yes\n"
585 dep_checked_memrchr=1
586 return 1
587 done
588
589 print_check_msg "$dep_checked_memrchr" "no\n"
590 dep_checked_memrchr=1
591 return 0
592 }
593 dependency_error_doxygen()
594 {
595 print_check_msg "$dep_checked_doxygen" "checking for doxygen... "
596 # dependency doxygen
597 while true
598 do
599 if test -n "$DOXYGEN" > /dev/null 2>&1 ; then
600 :
601 else
602 break
603 fi
604 print_check_msg "$dep_checked_doxygen" "yes\n"
605 dep_checked_doxygen=1
606 return 1
607 done
608
609 print_check_msg "$dep_checked_doxygen" "no\n"
610 dep_checked_doxygen=1
611 return 0
612 }
613 dependency_error_no_coverage()
614 {
615 print_check_msg "$dep_checked_no_coverage" "checking for no_coverage... "
616 # dependency no_coverage
617 while true
618 do
619 if test -z "$FEATURE_COVERAGE" > /dev/null 2>&1 ; then
620 :
621 else
622 break
623 fi
624 print_check_msg "$dep_checked_no_coverage" "yes\n"
625 dep_checked_no_coverage=1
626 return 1
627 done
628
629 print_check_msg "$dep_checked_no_coverage" "no\n"
630 dep_checked_no_coverage=1
631 return 0
632 }
633 dependency_error_ubsan()
634 {
635 print_check_msg "$dep_checked_ubsan" "checking for ubsan... "
636 # dependency ubsan toolchain="gnuc"
637 while true
638 do
639 if notistoolchain "gnuc"; then
640 break
641 fi
642 TEMP_CFLAGS="$TEMP_CFLAGS -fsanitize=undefined"
643 TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=undefined"
644 print_check_msg "$dep_checked_ubsan" "yes\n"
645 dep_checked_ubsan=1
646 return 1
647 done
648
649 print_check_msg "$dep_checked_ubsan" "no\n"
650 dep_checked_ubsan=1
651 return 0
652 }
653 dependency_error_qsort_r()
654 {
655 print_check_msg "$dep_checked_qsort_r" "checking for qsort_r... "
656 # dependency qsort_r
657 while true
658 do
659 if $TOOLCHAIN_CC $CFLAGS $LDFLAGS -o /dev/null make/test_qsort_r.c > /dev/null 2>&1 ; then
660 :
661 else
662 break
663 fi
664 TEMP_CFLAGS="$TEMP_CFLAGS -DWITH_QSORT_R"
665 print_check_msg "$dep_checked_qsort_r" "yes\n"
666 dep_checked_qsort_r=1
667 return 1
668 done
669
670 print_check_msg "$dep_checked_qsort_r" "no\n"
671 dep_checked_qsort_r=1
672 return 0
673 }
674
675 # start collecting dependency information
676 echo > "$TEMP_DIR/flags.mk"
677
678 DEPENDENCIES_FAILED=
679 ERROR=0
680 # unnamed dependencies
681 TEMP_CFLAGS="$CFLAGS"
682 TEMP_CXXFLAGS="$CXXFLAGS"
683 TEMP_LDFLAGS="$LDFLAGS"
684 while true
685 do
686 if notisplatform "macos"; then
687 break
688 fi
689 while true
690 do
691 if [ -z "$lang_c" ] ; then
692 ERROR=1
693 break
694 fi
695
696 cat >> "$TEMP_DIR/make.mk" << __EOF__
697 AR=ar
698 ARFLAGS=r
699 STLIB_EXT=.a
700 SHLIB_EXT=.dylib
701
702 SHLIB_LDFLAGS=-dynamiclib -current_version \$(LIBVERSION) -compatibility_version \$(LIBVERSION)
703 INSTALL_LIB=\$(root_dir)/make/install-lib-macos.sh
704 __EOF__
705 break
706 done
707 break
708 done
709 while true
710 do
711 if notisplatform "unix"; then
712 break
713 fi
714 if isplatform "macos" || istoolchain "macos"; then
715 break
716 fi
717 while true
718 do
719 if [ -z "$lang_c" ] ; then
720 ERROR=1
721 break
722 fi
723
724 cat >> "$TEMP_DIR/make.mk" << __EOF__
725 AR=ar
726 ARFLAGS=cr
727 STLIB_EXT=.a
728 SHLIB_EXT=.so
729 INSTALL_LIB=\$(root_dir)/make/install-lib.sh
730 __EOF__
731 break
732 done
733 break
734 done
735 while true
736 do
737 if notistoolchain "gnuc"; then
738 break
739 fi
740 if isplatform "macos" || istoolchain "macos"; then
741 break
742 fi
743 while true
744 do
745
746 cat >> "$TEMP_DIR/make.mk" << __EOF__
747 SHLIB_LDFLAGS += -Wl,-soname,libucx\$(SHLIB_EXT).\$(LIBVERSION_MAJOR)
748 __EOF__
749 break
750 done
751 break
752 done
753 while true
754 do
755 if notistoolchain "suncc"; then
756 break
757 fi
758 while true
759 do
760
761 cat >> "$TEMP_DIR/make.mk" << __EOF__
762 SHLIB_LDFLAGS += -h libucx\$(SHLIB_EXT).\$(LIBVERSION_MAJOR)
763 __EOF__
764 break
765 done
766 break
767 done
768 while true
769 do
770 if notisplatform "solaris"; then
771 break
772 fi
773 while true
774 do
775
776 TEMP_LDFLAGS="$TEMP_LDFLAGS -lm"
777 break
778 done
779 break
780 done
781
782 # build type
783 if [ "$BUILD_TYPE" = "debug" ]; then
784 TEMP_CFLAGS="\${DEBUG_CFLAGS} $TEMP_CFLAGS"
785 TEMP_CXXFLAGS="\${DEBUG_CXXFLAGS} $TEMP_CXXFLAGS"
786 fi
787 if [ "$BUILD_TYPE" = "release" ]; then
788 TEMP_CFLAGS="\${RELEASE_CFLAGS} $TEMP_CFLAGS"
789 TEMP_CXXFLAGS="\${RELEASE_CXXFLAGS} $TEMP_CXXFLAGS"
790 fi
791
792 # add general dependency flags to flags.mk
793 echo "# general flags" >> "$TEMP_DIR/flags.mk"
794 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
795 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
796 fi
797 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
798 echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
799 fi
800 if [ -n "${TEMP_LDFLAGS}" ]; then
801 echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
802 fi
803
804 #
805 # OPTION VALUES
806 #
807
808 #
809 # TARGETS
810 #
811
812 echo >> "$TEMP_DIR/flags.mk"
813 echo "configuring global target"
814 echo "# flags for unnamed target" >> "$TEMP_DIR/flags.mk"
815 TEMP_CFLAGS=
816 TEMP_CXXFLAGS=
817 TEMP_LDFLAGS=
818
819
820 # Features
821 if [ -n "$FEATURE_API_DOCS" ]; then
822 # check dependency
823 if dependency_error_doxygen ; then
824 # "auto" features can fail and are just disabled in this case
825 if [ "$FEATURE_API_DOCS" = "auto" ]; then
826 DISABLE_FEATURE_API_DOCS=1
827 else
828 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED doxygen "
829 ERROR=1
830 fi
831 fi
832 if [ -n "$DISABLE_FEATURE_API_DOCS" ]; then
833 unset FEATURE_API_DOCS
834 fi
835 fi
836 if [ -n "$FEATURE_API_DOCS" ]; then
837 :
838 cat >> "$TEMP_DIR/make.mk" << __EOF__
839 # Documentation
840 WITH_API_DOCS=yes
841 __EOF__
842 else
843 :
844 fi
845 if [ -n "$FEATURE_COVERAGE" ]; then
846 # check dependency
847 if dependency_error_coverage ; then
848 # "auto" features can fail and are just disabled in this case
849 if [ "$FEATURE_COVERAGE" = "auto" ]; then
850 DISABLE_FEATURE_COVERAGE=1
851 else
852 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED coverage "
853 ERROR=1
854 fi
855 fi
856 if [ -n "$DISABLE_FEATURE_COVERAGE" ]; then
857 unset FEATURE_COVERAGE
858 fi
859 fi
860 if [ -n "$FEATURE_COVERAGE" ]; then
861 :
862 else
863 :
864 fi
865 if [ -n "$FEATURE_ASAN" ]; then
866 # check dependency
867 if dependency_error_asan ; then
868 # "auto" features can fail and are just disabled in this case
869 if [ "$FEATURE_ASAN" = "auto" ]; then
870 DISABLE_FEATURE_ASAN=1
871 else
872 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED asan "
873 ERROR=1
874 fi
875 fi
876 if [ -n "$DISABLE_FEATURE_ASAN" ]; then
877 unset FEATURE_ASAN
878 fi
879 fi
880 if [ -n "$FEATURE_ASAN" ]; then
881 :
882 else
883 :
884 fi
885 if [ -n "$FEATURE_UBSAN" ]; then
886 # check dependency
887 if dependency_error_ubsan ; then
888 # "auto" features can fail and are just disabled in this case
889 if [ "$FEATURE_UBSAN" = "auto" ]; then
890 DISABLE_FEATURE_UBSAN=1
891 else
892 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ubsan "
893 ERROR=1
894 fi
895 fi
896 if [ -n "$DISABLE_FEATURE_UBSAN" ]; then
897 unset FEATURE_UBSAN
898 fi
899 fi
900 if [ -n "$FEATURE_UBSAN" ]; then
901 :
902 else
903 :
904 fi
905 if [ -n "$FEATURE_CXX_TESTS" ]; then
906 # check dependency
907 if dependency_error_cxx ; then
908 # "auto" features can fail and are just disabled in this case
909 if [ "$FEATURE_CXX_TESTS" = "auto" ]; then
910 DISABLE_FEATURE_CXX_TESTS=1
911 else
912 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED cxx "
913 ERROR=1
914 fi
915 fi
916 if [ -n "$DISABLE_FEATURE_CXX_TESTS" ]; then
917 unset FEATURE_CXX_TESTS
918 fi
919 fi
920 if [ -n "$FEATURE_CXX_TESTS" ]; then
921 :
922 cat >> "$TEMP_DIR/make.mk" << __EOF__
923 # Enable the check-cxx target
924 WITH_CXX_TEST=yes
925 __EOF__
926 else
927 :
928 fi
929 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then
930 # check dependency
931 if dependency_error_no_coverage ; then
932 # "auto" features can fail and are just disabled in this case
933 if [ "$FEATURE_SZMUL_BUILTIN" = "auto" ]; then
934 DISABLE_FEATURE_SZMUL_BUILTIN=1
935 else
936 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED no_coverage "
937 ERROR=1
938 fi
939 fi
940 if [ -n "$DISABLE_FEATURE_SZMUL_BUILTIN" ]; then
941 unset FEATURE_SZMUL_BUILTIN
942 fi
943 fi
944 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then
945 :
946 else
947 :
948 TEMP_CFLAGS="$TEMP_CFLAGS -DCX_NO_SZMUL_BUILTIN"
949 TEMP_CXXFLAGS="$TEMP_CXXFLAGS -DCX_NO_SZMUL_BUILTIN"
950 fi
951 if [ -n "$FEATURE_MEMRCHR" ]; then
952 # check dependency
953 if dependency_error_memrchr ; then
954 # "auto" features can fail and are just disabled in this case
955 if [ "$FEATURE_MEMRCHR" = "auto" ]; then
956 DISABLE_FEATURE_MEMRCHR=1
957 else
958 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED memrchr "
959 ERROR=1
960 fi
961 fi
962 if [ -n "$DISABLE_FEATURE_MEMRCHR" ]; then
963 unset FEATURE_MEMRCHR
964 fi
965 fi
966 if [ -n "$FEATURE_MEMRCHR" ]; then
967 :
968 else
969 :
970 fi
971 if [ -n "$FEATURE_MKSTEMP" ]; then
972 # check dependency
973 if dependency_error_mkstemp ; then
974 # "auto" features can fail and are just disabled in this case
975 if [ "$FEATURE_MKSTEMP" = "auto" ]; then
976 DISABLE_FEATURE_MKSTEMP=1
977 else
978 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED mkstemp "
979 ERROR=1
980 fi
981 fi
982 if [ -n "$DISABLE_FEATURE_MKSTEMP" ]; then
983 unset FEATURE_MKSTEMP
984 fi
985 fi
986 if [ -n "$FEATURE_MKSTEMP" ]; then
987 :
988 else
989 :
990 fi
991 if [ -n "$FEATURE_QSORT_R" ]; then
992 # check dependency
993 if dependency_error_qsort_r ; then
994 # "auto" features can fail and are just disabled in this case
995 if [ "$FEATURE_QSORT_R" = "auto" ]; then
996 DISABLE_FEATURE_QSORT_R=1
997 else
998 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED qsort_r "
999 ERROR=1
1000 fi
1001 fi
1002 if [ -n "$DISABLE_FEATURE_QSORT_R" ]; then
1003 unset FEATURE_QSORT_R
1004 fi
1005 fi
1006 if [ -n "$FEATURE_QSORT_R" ]; then
1007 :
1008 else
1009 :
1010 fi
1011
1012
1013 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
1014 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
1015 fi
1016 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
1017 echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
1018 fi
1019 if [ -n "${TEMP_LDFLAGS}" ]; then
1020 echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
1021 fi
1022
1023
1024 # final result
1025 if [ $ERROR -ne 0 ]; then
1026 echo
1027 echo "Error: Unresolved dependencies"
1028 echo "$DEPENDENCIES_FAILED"
1029 abort_configure
1030 fi
1031
1032 echo "configure finished"
1033 echo
1034 echo "Toolchain:"
1035 echo " name: $TOOLCHAIN_NAME"
1036 if [ -n "$TOOLCHAIN_CC" ]; then
1037 echo " cc: $TOOLCHAIN_CC"
1038 fi
1039 if [ -n "$TOOLCHAIN_CXX" ]; then
1040 echo " cxx: $TOOLCHAIN_CXX"
1041 fi
1042 if [ -n "$TOOLCHAIN_WSIZE" ]; then
1043 echo " word size: $TOOLCHAIN_WSIZE bit"
1044 fi
1045 if [ -n "$TOOLCHAIN_CSTD" ]; then
1046 echo " default C std: $TOOLCHAIN_CSTD"
1047 fi
1048 if [ $has_overridable_config_vars__ -eq 1 ]; then
1049 echo
1050 echo "Config:"
1051 if [ -n "$prefix__initialized__" ]; then
1052 printf ' %-16s' 'prefix:'
1053 echo "$prefix"
1054 fi
1055 if [ -n "$exec_prefix__initialized__" ]; then
1056 printf ' %-16s' 'exec-prefix:'
1057 echo "$exec_prefix"
1058 fi
1059 if [ -n "$libdir__initialized__" ]; then
1060 printf ' %-16s' 'libdir:'
1061 echo "$libdir"
1062 fi
1063 if [ -n "$includedir__initialized__" ]; then
1064 printf ' %-16s' 'includedir:'
1065 echo "$includedir"
1066 fi
1067 if [ -n "$pkgconfigdir__initialized__" ]; then
1068 printf ' %-16s' 'pkgconfigdir:'
1069 echo "$pkgconfigdir"
1070 fi
1071 if [ -n "$DOXYGEN__initialized__" ]; then
1072 printf ' %-16s' 'doxygen:'
1073 echo "$DOXYGEN"
1074 fi
1075 fi
1076 echo
1077 echo "Features:"
1078 printf ' %-16s' 'api-docs:'
1079 if [ -n "$FEATURE_API_DOCS" ]; then
1080 echo 'on'
1081 else
1082 echo 'off'
1083 fi
1084 printf ' %-16s' 'coverage:'
1085 if [ -n "$FEATURE_COVERAGE" ]; then
1086 echo 'on'
1087 else
1088 echo 'off'
1089 fi
1090 printf ' %-16s' 'asan:'
1091 if [ -n "$FEATURE_ASAN" ]; then
1092 echo 'on'
1093 else
1094 echo 'off'
1095 fi
1096 printf ' %-16s' 'ubsan:'
1097 if [ -n "$FEATURE_UBSAN" ]; then
1098 echo 'on'
1099 else
1100 echo 'off'
1101 fi
1102 printf ' %-16s' 'cxx-tests:'
1103 if [ -n "$FEATURE_CXX_TESTS" ]; then
1104 echo 'on'
1105 else
1106 echo 'off'
1107 fi
1108 printf ' %-16s' 'szmul-builtin:'
1109 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then
1110 echo 'on'
1111 else
1112 echo 'off'
1113 fi
1114 printf ' %-16s' 'memrchr:'
1115 if [ -n "$FEATURE_MEMRCHR" ]; then
1116 echo 'on'
1117 else
1118 echo 'off'
1119 fi
1120 printf ' %-16s' 'mkstemp:'
1121 if [ -n "$FEATURE_MKSTEMP" ]; then
1122 echo 'on'
1123 else
1124 echo 'off'
1125 fi
1126 printf ' %-16s' 'qsort_r:'
1127 if [ -n "$FEATURE_QSORT_R" ]; then
1128 echo 'on'
1129 else
1130 echo 'off'
1131 fi
1132 echo
1133
1134 # generate the config.mk file
1135 pwd=`pwd`
1136 cat > "$TEMP_DIR/config.mk" << __EOF__
1137 #
1138 # config.mk generated by:
1139 # pwd: $pwd
1140 # $0 $@
1141 #
1142
1143 __EOF__
1144 write_toolchain_defaults "$TEMP_DIR/toolchain.mk"
1145 cat "$TEMP_DIR/config.mk" "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk
1146 rm -Rf "$TEMP_DIR"
1147