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 echo 'Configuration:'
89 if true \
90 ; then
91 :
92 if test -z "$prefix__described__"; then
93 prefix__described__=1
94 cat << '__EOF__'
95 --prefix path prefix for architecture-independent files [/usr]
96 __EOF__
97 fi
98 if test -z "$exec_prefix__described__"; then
99 exec_prefix__described__=1
100 cat << '__EOF__'
101 --exec-prefix path prefix for architecture-dependent files [PREFIX]
102 __EOF__
103 fi
104 if test -z "$libdir__described__"; then
105 libdir__described__=1
106 cat << '__EOF__'
107 --libdir object code libraries [EPREFIX/lib]
108 __EOF__
109 fi
110 if test -z "$includedir__described__"; then
111 includedir__described__=1
112 cat << '__EOF__'
113 --includedir C header files [PREFIX/include]
114 __EOF__
115 fi
116 fi
117 if true \
118 && isplatform "freebsd" \
119 ; then
120 :
121 if test -z "$pkgconfigdir__described__"; then
122 pkgconfigdir__described__=1
123 cat << '__EOF__'
124 --pkgconfigdir location of the *.pc files
125 __EOF__
126 fi
127 fi
128 if true \
129 && notisplatform "freebsd" \
130 ; then
131 :
132 if test -z "$pkgconfigdir__described__"; then
133 pkgconfigdir__described__=1
134 cat << '__EOF__'
135 --pkgconfigdir location of the *.pc files
136 __EOF__
137 fi
138 fi
139 if true \
140 ; then
141 :
142 if test -z "$DOXYGEN__described__"; then
143 DOXYGEN__described__=1
144 cat << '__EOF__'
145 --doxygen path of the Doxygen executable
146 __EOF__
147 fi
148 fi
149 cat << '__EOF__'
150
151 Build Types:
152 --debug add extra compile flags for debug builds
153 --release add extra compile flags for release builds
154
155 Optional Features:
156 --enable-api-docs run Doxygen during build
157 --enable-coverage test coverage with gcov
158 --enable-asan address sanitizer
159 --disable-memrchr
160 --disable-cxx-tests the check-cxx makefile target
161 --disable-szmul-builtin use custom implementation, instead
162
163 __EOF__
164 abort_configure
165 }
166
167 # create temporary directory
168 TEMP_DIR=".tmp-`uname -n`"
169 rm -Rf "$TEMP_DIR"
170 if mkdir -p "$TEMP_DIR"; then
171 :
172 else
173 echo "Cannot create tmp dir $TEMP_DIR"
174 echo "Abort"
175 exit 1
176 fi
177 touch "$TEMP_DIR/options"
178 touch "$TEMP_DIR/features"
179
180 # config variables
181 if true \
182 ; then
183 :
184 if test -z "$prefix__initialized__"; then
185 prefix__initialized__=1
186 prefix='/usr'
187 fi
188 if test -z "$exec_prefix__initialized__"; then
189 exec_prefix__initialized__=1
190 exec_prefix=''
191 fi
192 if test -z "$libdir__initialized__"; then
193 libdir__initialized__=1
194 libdir=''
195 fi
196 if test -z "$includedir__initialized__"; then
197 includedir__initialized__=1
198 includedir=''
199 fi
200 if test -z "$VERSION__initialized__"; then
201 VERSION__initialized__=1
202 VERSION='4.0.0'
203 fi
204 if test -z "$LIBVERSION__initialized__"; then
205 LIBVERSION__initialized__=1
206 LIBVERSION='7.0.0'
207 fi
208 if test -z "$LIBVERSION_MAJOR__initialized__"; then
209 LIBVERSION_MAJOR__initialized__=1
210 LIBVERSION_MAJOR='7'
211 fi
212 if test -z "$root_dir__initialized__"; then
213 root_dir__initialized__=1
214 root_dir=`pwd`
215 fi
216 if test -z "$build_dir__initialized__"; then
217 build_dir__initialized__=1
218 build_dir='${root_dir}/build'
219 fi
220 if test -z "$docs_dir__initialized__"; then
221 docs_dir__initialized__=1
222 docs_dir='${root_dir}/build/docs'
223 fi
224 if test -z "$dist_dir__initialized__"; then
225 dist_dir__initialized__=1
226 dist_dir='${root_dir}/dist'
227 fi
228 if test -z "$MKDIR__initialized__"; then
229 MKDIR__initialized__=1
230 MKDIR='/bin/mkdir -p'
231 fi
232 if test -z "$RMFILE__initialized__"; then
233 RMFILE__initialized__=1
234 RMFILE='/bin/rm -f'
235 fi
236 if test -z "$RMDIR__initialized__"; then
237 RMDIR__initialized__=1
238 RMDIR='/bin/rm -f -R'
239 fi
240 if test -z "$COPYFILE__initialized__"; then
241 COPYFILE__initialized__=1
242 COPYFILE='/bin/cp -f'
243 fi
244 if test -z "$COPYALL__initialized__"; then
245 COPYALL__initialized__=1
246 COPYALL='/bin/cp -f -R'
247 fi
248 if test -z "$SYMLINK__initialized__"; then
249 SYMLINK__initialized__=1
250 SYMLINK='/bin/ln -s'
251 fi
252 fi
253 if true \
254 && isplatform "freebsd" \
255 ; then
256 :
257 if test -z "$pkgconfigdir__initialized__"; then
258 pkgconfigdir__initialized__=1
259 pkgconfigdir='${exec_prefix}/libdata/pkgconfig'
260 fi
261 fi
262 if true \
263 && notisplatform "freebsd" \
264 ; then
265 :
266 if test -z "$pkgconfigdir__initialized__"; then
267 pkgconfigdir__initialized__=1
268 pkgconfigdir='${libdir}/pkgconfig'
269 fi
270 fi
271 if true \
272 ; then
273 :
274 if test -z "$DOXYGEN__initialized__"; then
275 DOXYGEN__initialized__=1
276 DOXYGEN=`command -v doxygen || echo '/bin/false'`
277 fi
278 fi
279
280 # features
281 FEATURE_MEMRCHR=auto
282 FEATURE_CXX_TESTS=auto
283 FEATURE_SZMUL_BUILTIN=auto
284
285 #
286 # parse arguments
287 #
288 BUILD_TYPE="default"
289 for ARG in "$@"
290 do
291 case "$ARG" in
292 "--prefix="*) prefix=${ARG#--prefix=} ;;
293 "--exec-prefix="*) exec_prefix=${ARG#--exec-prefix=} ;;
294 "--libdir="*) libdir=${ARG#--libdir=} ;;
295 "--includedir="*) includedir=${ARG#--includedir=} ;;
296 "--pkgconfigdir="*) pkgconfigdir=${ARG#--pkgconfigdir=} ;;
297 "--doxygen="*) DOXYGEN=${ARG#--doxygen=} ;;
298 "--help"*) printhelp ;;
299 "--debug") BUILD_TYPE="debug" ;;
300 "--release") BUILD_TYPE="release" ;;
301 "--enable-api-docs") FEATURE_API_DOCS=on ;;
302 "--disable-api-docs") unset FEATURE_API_DOCS ;;
303 "--enable-coverage") FEATURE_COVERAGE=on ;;
304 "--disable-coverage") unset FEATURE_COVERAGE ;;
305 "--enable-asan") FEATURE_ASAN=on ;;
306 "--disable-asan") unset FEATURE_ASAN ;;
307 "--enable-memrchr") FEATURE_MEMRCHR=on ;;
308 "--disable-memrchr") unset FEATURE_MEMRCHR ;;
309 "--enable-cxx-tests") FEATURE_CXX_TESTS=on ;;
310 "--disable-cxx-tests") unset FEATURE_CXX_TESTS ;;
311 "--enable-szmul-builtin") FEATURE_SZMUL_BUILTIN=on ;;
312 "--disable-szmul-builtin") unset FEATURE_SZMUL_BUILTIN ;;
313 "-"*) echo "unknown option: $ARG"; abort_configure ;;
314 esac
315 done
316
317 # toolchain detection utilities
318 . make/toolchain.sh
319
320 # check languages
321 lang_c=
322 lang_cpp=
323 if detect_cpp_compiler ; then
324 lang_cpp=1
325 fi
326 if detect_c_compiler ; then
327 lang_c=1
328 fi
329
330
331
332 # set defaults for dir variables
333 : ${exec_prefix:="$prefix"}
334 : ${bindir:='${exec_prefix}/bin'}
335 : ${sbindir:='${exec_prefix}/sbin'}
336 : ${libdir:='${exec_prefix}/lib'}
337 : ${libexecdir:='${exec_prefix}/libexec'}
338 : ${datarootdir:='${prefix}/share'}
339 : ${datadir:='${datarootdir}'}
340 : ${sharedstatedir:='${prefix}/com'}
341 if [ -z "$sysconfdir" ]; then
342 if [ "$prefix" = '/usr' ]; then
343 sysconfdir='/etc'
344 else
345 sysconfdir='${prefix}/etc'
346 fi
347 fi
348 if [ -z "$localstatedir" ]; then
349 if [ "$prefix" = '/usr' ]; then
350 localstatedir='/var'
351 else
352 localstatedir='${prefix}/var'
353 fi
354 fi
355 if [ -z "$runstatedir" ]; then
356 if [ "$prefix" = '/usr' ]; then
357 runstatedir='/var/run'
358 else
359 runstatedir='${prefix}/var'
360 fi
361 fi
362 : ${includedir:='${prefix}/include'}
363 : ${infodir:='${datarootdir}/info'}
364 : ${mandir:='${datarootdir}/man'}
365 : ${localedir:='${datarootdir}/locale'}
366
367
368 # check if a config.site exists and load it
369 CONFIG_SITE_OK=0
370 if [ -n "$CONFIG_SITE" ]; then
371 # CONFIG_SITE may contain space separated file names
372 for cs in $CONFIG_SITE; do
373 printf "loading defaults from $cs... "
374 if [ -f "$cs" ]; then
375 . "$cs"
376 echo ok
377 CONFIG_SITE_OK=1
378 break
379 else
380 echo "not found"
381 fi
382 done
383 elif [ -f "$prefix/share/config.site" ]; then
384 printf "loading site defaults... "
385 . "$prefix/share/config.site"
386 echo ok
387 CONFIG_SITE_OK=1
388 elif [ -f "$prefix/etc/config.site" ]; then
389 printf "loading site defaults... "
390 . "$prefix/etc/config.site"
391 echo ok
392 CONFIG_SITE_OK=1
393 fi
394
395 if [ $CONFIG_SITE_OK -eq 0 ]; then
396 # try to detect the correct libdir on our own, except it was changed by the user
397 if [ "$libdir" = '${exec_prefix}/lib' ] ; then
398 if [ "$TOOLCHAIN_WSIZE" = "64" ] ; then
399 if [ "$OS" = "SunOS" ]; then
400 [ -d "${exec_prefix}/lib/64" ] && libdir='${exec_prefix}/lib/64'
401 else
402 [ -d "${exec_prefix}/lib64" ] && libdir='${exec_prefix}/lib64'
403 fi
404 elif [ "$TOOLCHAIN_WSIZE" = "32" ] ; then
405 if [ "$OS" = "SunOS" ]; then
406 [ -d "${exec_prefix}/lib/32" ] && libdir='${exec_prefix}/lib/32'
407 else
408 [ -d "${exec_prefix}/lib32" ] && libdir='${exec_prefix}/lib32'
409 fi
410 fi
411 fi
412 fi
413
414
415 # generate vars.mk
416 cat > "$TEMP_DIR/vars.mk" << __EOF__
417 prefix=$prefix
418 exec_prefix=$exec_prefix
419 libdir=$libdir
420 includedir=$includedir
421 VERSION=$VERSION
422 LIBVERSION=$LIBVERSION
423 LIBVERSION_MAJOR=$LIBVERSION_MAJOR
424 root_dir=$root_dir
425 build_dir=$build_dir
426 docs_dir=$docs_dir
427 dist_dir=$dist_dir
428 MKDIR=$MKDIR
429 RMFILE=$RMFILE
430 RMDIR=$RMDIR
431 COPYFILE=$COPYFILE
432 COPYALL=$COPYALL
433 SYMLINK=$SYMLINK
434 pkgconfigdir=$pkgconfigdir
435 DOXYGEN=$DOXYGEN
436 __EOF__
437
438
439 #
440 # DEPENDENCIES
441 #
442
443
444
445 # create buffer for make variables required by dependencies
446 echo > "$TEMP_DIR/make.mk"
447
448 test_pkg_config()
449 {
450 if "$PKG_CONFIG" --exists "$1" ; then :
451 else return 1 ; fi
452 if [ -z "$2" ] || "$PKG_CONFIG" --atleast-version="$2" "$1" ; then :
453 else return 1 ; fi
454 if [ -z "$3" ] || "$PKG_CONFIG" --exact-version="$3" "$1" ; then :
455 else return 1 ; fi
456 if [ -z "$4" ] || "$PKG_CONFIG" --max-version="$4" "$1" ; then :
457 else return 1 ; fi
458 return 0
459 }
460
461 print_check_msg()
462 {
463 if [ -z "$1" ]; then
464 shift
465 printf "$@"
466 fi
467 }
468
469 dependency_error_coverage()
470 {
471 print_check_msg "$dep_checked_coverage" "checking for coverage... "
472 # dependency coverage toolchain="gcc"
473 while true
474 do
475 if notistoolchain "gcc"; then
476 break
477 fi
478 if command -v gcovr > /dev/null 2>&1 ; then
479 :
480 else
481 break
482 fi
483 TEMP_CFLAGS="$TEMP_CFLAGS \${COVERAGE_CFLAGS}"
484 TEMP_LDFLAGS="$TEMP_LDFLAGS \${COVERAGE_LDFLAGS}"
485 print_check_msg "$dep_checked_coverage" "yes\n"
486 dep_checked_coverage=1
487 return 1
488 done
489
490 print_check_msg "$dep_checked_coverage" "no\n"
491 dep_checked_coverage=1
492 return 0
493 }
494 dependency_error_asan()
495 {
496 print_check_msg "$dep_checked_asan" "checking for asan... "
497 # dependency asan toolchain="gnuc"
498 while true
499 do
500 if notistoolchain "gnuc"; then
501 break
502 fi
503 TEMP_CFLAGS="$TEMP_CFLAGS -fsanitize=address"
504 TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=address"
505 print_check_msg "$dep_checked_asan" "yes\n"
506 dep_checked_asan=1
507 return 1
508 done
509
510 print_check_msg "$dep_checked_asan" "no\n"
511 dep_checked_asan=1
512 return 0
513 }
514 dependency_error_cxx()
515 {
516 print_check_msg "$dep_checked_cxx" "checking for cxx... "
517 # dependency cxx
518 while true
519 do
520 if [ -z "$lang_cpp" ] ; then
521 break
522 fi
523 print_check_msg "$dep_checked_cxx" "yes\n"
524 dep_checked_cxx=1
525 return 1
526 done
527
528 print_check_msg "$dep_checked_cxx" "no\n"
529 dep_checked_cxx=1
530 return 0
531 }
532 dependency_error_memrchr()
533 {
534 print_check_msg "$dep_checked_memrchr" "checking for memrchr... "
535 # dependency memrchr
536 while true
537 do
538 if $TOOLCHAIN_CC $CFLAGS -o /dev/null make/test_memrchr.c > /dev/null 2>&1 ; then
539 :
540 else
541 break
542 fi
543 TEMP_CFLAGS="$TEMP_CFLAGS -DWITH_MEMRCHR"
544 print_check_msg "$dep_checked_memrchr" "yes\n"
545 dep_checked_memrchr=1
546 return 1
547 done
548
549 # dependency memrchr
550 while true
551 do
552 if $TOOLCHAIN_CC $CFLAGS -o /dev/null -D_GNU_SOURCE make/test_memrchr.c > /dev/null 2>&1 ; then
553 :
554 else
555 break
556 fi
557 TEMP_CFLAGS="$TEMP_CFLAGS -DWITH_MEMRCHR -DMEMRCHR_NEED_GNU"
558 print_check_msg "$dep_checked_memrchr" "yes\n"
559 dep_checked_memrchr=1
560 return 1
561 done
562
563 print_check_msg "$dep_checked_memrchr" "no\n"
564 dep_checked_memrchr=1
565 return 0
566 }
567 dependency_error_doxygen()
568 {
569 print_check_msg "$dep_checked_doxygen" "checking for doxygen... "
570 # dependency doxygen
571 while true
572 do
573 if test -n "$DOXYGEN" > /dev/null 2>&1 ; then
574 :
575 else
576 break
577 fi
578 print_check_msg "$dep_checked_doxygen" "yes\n"
579 dep_checked_doxygen=1
580 return 1
581 done
582
583 print_check_msg "$dep_checked_doxygen" "no\n"
584 dep_checked_doxygen=1
585 return 0
586 }
587 dependency_error_no_coverage()
588 {
589 print_check_msg "$dep_checked_no_coverage" "checking for no_coverage... "
590 # dependency no_coverage
591 while true
592 do
593 if test -z "$FEATURE_COVERAGE" > /dev/null 2>&1 ; then
594 :
595 else
596 break
597 fi
598 print_check_msg "$dep_checked_no_coverage" "yes\n"
599 dep_checked_no_coverage=1
600 return 1
601 done
602
603 print_check_msg "$dep_checked_no_coverage" "no\n"
604 dep_checked_no_coverage=1
605 return 0
606 }
607
608 # start collecting dependency information
609 echo > "$TEMP_DIR/flags.mk"
610
611 DEPENDENCIES_FAILED=
612 ERROR=0
613 # unnamed dependencies
614 TEMP_CFLAGS="$CFLAGS"
615 TEMP_CXXFLAGS="$CXXFLAGS"
616 TEMP_LDFLAGS="$LDFLAGS"
617 while true
618 do
619 if notisplatform "macos"; then
620 break
621 fi
622 while true
623 do
624 if [ -z "$lang_c" ] ; then
625 ERROR=1
626 break
627 fi
628
629 cat >> "$TEMP_DIR/make.mk" << __EOF__
630 AR=ar
631 ARFLAGS=r
632 STLIB_EXT=.a
633 SHLIB_EXT=.dylib
634
635 SHLIB_LDFLAGS=-dynamiclib -current_version \$(LIBVERSION) -compatibility_version \$(LIBVERSION)
636 INSTALL_LIB=\$(root_dir)/make/install-lib-macos.sh
637 __EOF__
638 break
639 done
640 break
641 done
642 while true
643 do
644 if notisplatform "unix"; then
645 break
646 fi
647 if isplatform "macos" || istoolchain "macos"; then
648 break
649 fi
650 while true
651 do
652 if [ -z "$lang_c" ] ; then
653 ERROR=1
654 break
655 fi
656
657 cat >> "$TEMP_DIR/make.mk" << __EOF__
658 AR=ar
659 ARFLAGS=cr
660 STLIB_EXT=.a
661 SHLIB_EXT=.so
662 INSTALL_LIB=\$(root_dir)/make/install-lib.sh
663 __EOF__
664 break
665 done
666 break
667 done
668 while true
669 do
670 if notistoolchain "gnuc"; then
671 break
672 fi
673 if isplatform "macos" || istoolchain "macos"; then
674 break
675 fi
676 while true
677 do
678
679 cat >> "$TEMP_DIR/make.mk" << __EOF__
680 SHLIB_LDFLAGS += -Wl,-soname,libucx\$(SHLIB_EXT).\$(LIBVERSION_MAJOR)
681 __EOF__
682 break
683 done
684 break
685 done
686 while true
687 do
688 if notistoolchain "suncc"; then
689 break
690 fi
691 while true
692 do
693
694 cat >> "$TEMP_DIR/make.mk" << __EOF__
695 SHLIB_LDFLAGS += -h libucx\$(SHLIB_EXT).\$(LIBVERSION_MAJOR)
696 __EOF__
697 break
698 done
699 break
700 done
701 while true
702 do
703 if notisplatform "solaris"; then
704 break
705 fi
706 while true
707 do
708
709 TEMP_LDFLAGS="$TEMP_LDFLAGS -lm"
710 break
711 done
712 break
713 done
714
715 # build type
716 if [ "$BUILD_TYPE" = "debug" ]; then
717 TEMP_CFLAGS="\${DEBUG_CFLAGS} $TEMP_CFLAGS"
718 TEMP_CXXFLAGS="\${DEBUG_CXXFLAGS} $TEMP_CXXFLAGS"
719 fi
720 if [ "$BUILD_TYPE" = "release" ]; then
721 TEMP_CFLAGS="\${RELEASE_CFLAGS} $TEMP_CFLAGS"
722 TEMP_CXXFLAGS="\${RELEASE_CXXFLAGS} $TEMP_CXXFLAGS"
723 fi
724
725 # add general dependency flags to flags.mk
726 echo "# general flags" >> "$TEMP_DIR/flags.mk"
727 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
728 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
729 fi
730 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
731 echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
732 fi
733 if [ -n "${TEMP_LDFLAGS}" ]; then
734 echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
735 fi
736
737 #
738 # OPTION VALUES
739 #
740
741 #
742 # TARGETS
743 #
744
745 echo >> "$TEMP_DIR/flags.mk"
746 echo "configuring global target"
747 echo "# flags for unnamed target" >> "$TEMP_DIR/flags.mk"
748 TEMP_CFLAGS=
749 TEMP_CXXFLAGS=
750 TEMP_LDFLAGS=
751
752
753 # Features
754 if [ -n "$FEATURE_API_DOCS" ]; then
755 # check dependency
756 if dependency_error_doxygen ; then
757 # "auto" features can fail and are just disabled in this case
758 if [ "$FEATURE_API_DOCS" = "auto" ]; then
759 DISABLE_FEATURE_API_DOCS=1
760 else
761 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED doxygen "
762 ERROR=1
763 fi
764 fi
765 if [ -n "$DISABLE_FEATURE_API_DOCS" ]; then
766 unset FEATURE_API_DOCS
767 fi
768 fi
769 if [ -n "$FEATURE_API_DOCS" ]; then
770 :
771 cat >> "$TEMP_DIR/make.mk" << __EOF__
772 # Documentation
773 WITH_API_DOCS=yes
774 __EOF__
775 else
776 :
777 fi
778 if [ -n "$FEATURE_COVERAGE" ]; then
779 # check dependency
780 if dependency_error_coverage ; then
781 # "auto" features can fail and are just disabled in this case
782 if [ "$FEATURE_COVERAGE" = "auto" ]; then
783 DISABLE_FEATURE_COVERAGE=1
784 else
785 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED coverage "
786 ERROR=1
787 fi
788 fi
789 if [ -n "$DISABLE_FEATURE_COVERAGE" ]; then
790 unset FEATURE_COVERAGE
791 fi
792 fi
793 if [ -n "$FEATURE_COVERAGE" ]; then
794 :
795 else
796 :
797 fi
798 if [ -n "$FEATURE_ASAN" ]; then
799 # check dependency
800 if dependency_error_asan ; then
801 # "auto" features can fail and are just disabled in this case
802 if [ "$FEATURE_ASAN" = "auto" ]; then
803 DISABLE_FEATURE_ASAN=1
804 else
805 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED asan "
806 ERROR=1
807 fi
808 fi
809 if [ -n "$DISABLE_FEATURE_ASAN" ]; then
810 unset FEATURE_ASAN
811 fi
812 fi
813 if [ -n "$FEATURE_ASAN" ]; then
814 :
815 else
816 :
817 fi
818 if [ -n "$FEATURE_MEMRCHR" ]; then
819 # check dependency
820 if dependency_error_memrchr ; then
821 # "auto" features can fail and are just disabled in this case
822 if [ "$FEATURE_MEMRCHR" = "auto" ]; then
823 DISABLE_FEATURE_MEMRCHR=1
824 else
825 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED memrchr "
826 ERROR=1
827 fi
828 fi
829 if [ -n "$DISABLE_FEATURE_MEMRCHR" ]; then
830 unset FEATURE_MEMRCHR
831 fi
832 fi
833 if [ -n "$FEATURE_MEMRCHR" ]; then
834 :
835 else
836 :
837 fi
838 if [ -n "$FEATURE_CXX_TESTS" ]; then
839 # check dependency
840 if dependency_error_cxx ; then
841 # "auto" features can fail and are just disabled in this case
842 if [ "$FEATURE_CXX_TESTS" = "auto" ]; then
843 DISABLE_FEATURE_CXX_TESTS=1
844 else
845 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED cxx "
846 ERROR=1
847 fi
848 fi
849 if [ -n "$DISABLE_FEATURE_CXX_TESTS" ]; then
850 unset FEATURE_CXX_TESTS
851 fi
852 fi
853 if [ -n "$FEATURE_CXX_TESTS" ]; then
854 :
855 cat >> "$TEMP_DIR/make.mk" << __EOF__
856 # Enable the check-cxx target
857 WITH_CXX_TEST=yes
858 __EOF__
859 else
860 :
861 fi
862 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then
863 # check dependency
864 if dependency_error_no_coverage ; then
865 # "auto" features can fail and are just disabled in this case
866 if [ "$FEATURE_SZMUL_BUILTIN" = "auto" ]; then
867 DISABLE_FEATURE_SZMUL_BUILTIN=1
868 else
869 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED no_coverage "
870 ERROR=1
871 fi
872 fi
873 if [ -n "$DISABLE_FEATURE_SZMUL_BUILTIN" ]; then
874 unset FEATURE_SZMUL_BUILTIN
875 fi
876 fi
877 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then
878 :
879 else
880 :
881 TEMP_CFLAGS="$TEMP_CFLAGS -DCX_NO_SZMUL_BUILTIN"
882 TEMP_CXXFLAGS="$TEMP_CXXFLAGS -DCX_NO_SZMUL_BUILTIN"
883 fi
884
885
886 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
887 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
888 fi
889 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
890 echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
891 fi
892 if [ -n "${TEMP_LDFLAGS}" ]; then
893 echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
894 fi
895
896
897 # final result
898 if [ $ERROR -ne 0 ]; then
899 echo
900 echo "Error: Unresolved dependencies"
901 echo "$DEPENDENCIES_FAILED"
902 abort_configure
903 fi
904
905 echo "configure finished"
906 echo
907 echo "Toolchain:"
908 echo " name: $TOOLCHAIN_NAME"
909 if [ -n "$TOOLCHAIN_CC" ]; then
910 echo " cc: $TOOLCHAIN_CC"
911 fi
912 if [ -n "$TOOLCHAIN_CXX" ]; then
913 echo " cxx: $TOOLCHAIN_CXX"
914 fi
915 if [ -n "$TOOLCHAIN_WSIZE" ]; then
916 echo " word size: $TOOLCHAIN_WSIZE bit"
917 fi
918 if [ -n "$TOOLCHAIN_CSTD" ]; then
919 echo " default C std: $TOOLCHAIN_CSTD"
920 fi
921 echo
922 echo "Config:"
923 printf ' %-16s' 'prefix:'
924 echo "$prefix"
925 printf ' %-16s' 'exec-prefix:'
926 echo "$exec_prefix"
927 printf ' %-16s' 'libdir:'
928 echo "$libdir"
929 printf ' %-16s' 'includedir:'
930 echo "$includedir"
931 printf ' %-16s' 'pkgconfigdir:'
932 echo "$pkgconfigdir"
933 printf ' %-16s' 'doxygen:'
934 echo "$DOXYGEN"
935 echo
936 echo "Features:"
937 printf ' %-16s' 'api-docs:'
938 if [ -n "$FEATURE_API_DOCS" ]; then
939 echo 'on'
940 else
941 echo 'off'
942 fi
943 printf ' %-16s' 'coverage:'
944 if [ -n "$FEATURE_COVERAGE" ]; then
945 echo 'on'
946 else
947 echo 'off'
948 fi
949 printf ' %-16s' 'asan:'
950 if [ -n "$FEATURE_ASAN" ]; then
951 echo 'on'
952 else
953 echo 'off'
954 fi
955 printf ' %-16s' 'memrchr:'
956 if [ -n "$FEATURE_MEMRCHR" ]; then
957 echo 'on'
958 else
959 echo 'off'
960 fi
961 printf ' %-16s' 'cxx-tests:'
962 if [ -n "$FEATURE_CXX_TESTS" ]; then
963 echo 'on'
964 else
965 echo 'off'
966 fi
967 printf ' %-16s' 'szmul-builtin:'
968 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then
969 echo 'on'
970 else
971 echo 'off'
972 fi
973 echo
974
975 # generate the config.mk file
976 pwd=`pwd`
977 cat > "$TEMP_DIR/config.mk" << __EOF__
978 #
979 # config.mk generated by:
980 # pwd: $pwd
981 # $0 $@
982 #
983
984 __EOF__
985 write_toolchain_defaults "$TEMP_DIR/toolchain.mk"
986 cat "$TEMP_DIR/config.mk" "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk
987 rm -Rf "$TEMP_DIR"
988