# in projects where [ $mb_use_custom_cfgdefs = yes ], # cfgdefs.sh is invoked from within ./configure via # . $mb_project_dir/project/cfgdefs.sh # a successful return from cfgdefs.sh will be followed # by a second invocation of the config_copy() function, # reflecting any changes to common config variables # made by cfgdefs.sh. # finally, cfgdefs.sh may update the contents of the # config-time generated cfgdefs.mk. # sofort's config test framework . "$mb_project_dir/sofort/cfgtest/cfgtest.sh" for arg ; do case "$arg" in --with-default-sys-path=*) cfgdefs_default_sys_path=${arg##*=} ;; *) error_msg ${arg#}: "unsupported config argument." exit 2 esac case "${cfgdefs_default_sys_path:-empty}" in /*) ;; empty) error_msg "$mb_script: --with-default-sys-path: empty paths are not allowed." exit 2 ;; *) error_msg "$mb_script: --with-default-sys-path: relative paths are not allowed." exit 2 esac done cfgdefs_bootstrap() { cfgdefs_bootstrap_done=${cfgdefs_bootstrap_done:-} if [ _$cfgdefs_bootstrap_done = _yes ]; then return 0 fi cfgdefs_objs= cfgdefs_utilsrc='main.c' cfgdefs_sources="arch.c buf.c compat.c cond.c dir.c for.c hash.c job.c" cfgdefs_sources="$cfgdefs_sources lst.c make.c make_malloc.c meta.c metachar.c parse.c" cfgdefs_sources="$cfgdefs_sources str.c suff.c targ.c trace.c util.c var.c" cfgdefs_cflags= cfgdefs_cflags="$cfgdefs_cflags -I${mb_source_dir}/src/internal" cfgdefs_cflags="$cfgdefs_cflags -D_PATH_DEFSYSPATH=\"${mb_source_dir}/mk\"" cfgdefs_cflags="$cfgdefs_cflags $cfgdefs_added_defs" cfgdefs_cflags="$cfgdefs_cflags -D_XOPEN_SOURCE=700" cfgtest_native_section if cfgtest_compiler_switch -std=c99; then cfgdefs_cflags="$cfgdefs_cflags -std=c99" fi cfgdefs_make="$mb_pwd/bootstrap/make" mkdir -p "$mb_pwd/bootstrap" output_section_break output_script_status 'bootstrapping' './bootstrap/make' for src in $cfgdefs_utilsrc; do obj=${src%%.c}.o cfgdefs_objs="$cfgdefs_objs $mb_pwd/bootstrap/${obj}" output_step_prolog 'compiling' "./bootstrap/${obj}" printf '\n$ %s %s\n' "$mb_native_cc $mb_native_cflags" '\' >&3 printf '\n$ %s\n' "$cfgdefs_cflags" '\' >&3 printf '\t-c %s %s\n' "$mb_source_dir/src/${src}" '\' >&3 printf '\t-o %s %s\n\n\n' "$mb_pwd/bootstrap/${obj}" >&3 "$mb_native_cc" $mb_native_cflags $cfgdefs_cflags \ -c "$mb_source_dir/src/${src}" \ -o "$mb_pwd/bootstrap/${obj}" \ 2>&3 output_step_epilog done for src in $cfgdefs_sources; do obj=${src%%.c}.o cfgdefs_objs="$cfgdefs_objs $mb_pwd/bootstrap/${obj}" output_step_prolog 'compiling' "./bootstrap/${obj}" printf '\n$ %s %s\n' "$mb_native_cc $mb_native_cflags" '\' >&3 printf '\n$ %s\n' "$cfgdefs_cflags" '\' >&3 printf '\t-c %s %s\n' "$mb_source_dir/src/logic/${src}" '\' >&3 printf '\t-o %s %s\n\n\n' "$mb_pwd/bootstrap/${obj}" >&3 "$mb_native_cc" $mb_native_cflags $cfgdefs_cflags \ -c "$mb_source_dir/src/logic/${src}" \ -o "$mb_pwd/bootstrap/${obj}" \ 2>&3 output_step_epilog done output_step_prolog 'linking' './bootstrap/make' printf '\n$ %s %s\n' "$mb_native_cc $cfgdefs_cflags" '\' >&3 printf '\t %s %s\n' "$mb_native_ldflags" '\' >&3 printf '\t %s %s\n' "$cfgdefs_objs" '\' >&3 printf '\t-o %s %s\n\n\n' "$cfgdefs_make" >&3 "$mb_native_cc" $mb_native_cflags $cfgdefs_cflags \ $mb_native_ldflags $cfgdefs_objs \ -o "$cfgdefs_make" \ 2>&3 output_step_epilog mb_make="$cfgdefs_make" cfgdefs_bootstrap_done='yes' output_section_break } cfgdefs_output_custom_defs() { cfgdefs_default_sys_path="${cfgdefs_default_sys_path:-/usr/share/mk}" sed \ -e 's#@cfgdefs_default_sys_path@#'"$cfgdefs_default_sys_path"'#g' \ "$mb_project_dir/project/config/cfgdefs.in" \ > cfgdefs.mk } cfgdefs_perform_common_tests() { # bootstrap cfgdefs_added_defs= # interfaces mb_cfgtest_headers='stdio.h' cfgtest_interface_presence 'vsnprintf' if [ $? = '0' ]; then cfgdefs_added_defs="$cfgdefs_added_defs -DHAVE_VSNPRINTF" fi mb_cfgtest_headers='string.h' cfgtest_interface_presence 'strerror' if [ $? = '0' ]; then cfgdefs_added_defs="$cfgdefs_added_defs -DHAVE_STRERROR" fi mb_cfgtest_headers='sys/types.h unistd.h' cfgtest_interface_presence 'setpgid' if [ $? = '0' ]; then cfgdefs_added_defs="$cfgdefs_added_defs -DHAVE_SETPGID" fi mb_cfgtest_headers='sys/time.h sys/resource.h' cfgtest_interface_presence 'setrlimit' if [ $? = '0' ]; then cfgdefs_added_defs="$cfgdefs_added_defs -DHAVE_SETRLIMIT" fi mb_cfgtest_headers='stdlib.h' cfgtest_interface_presence 'setenv' if [ $? = '0' ]; then cfgdefs_added_defs="$cfgdefs_added_defs -DHAVE_SETENV" fi cfgtest_newline } cfgdefs_perform_native_tests() { # init cfgtest_newline cfgtest_native_section # common tests cfgdefs_perform_common_tests # pretty cfgdefs.mk cfgtest_newline } cfgdefs_perform_target_tests() { # init cfgtest_newline cfgtest_host_section # common tests cfgdefs_perform_common_tests # pretty cfgdefs.mk cfgtest_newline } # cfgdefs.in --> cfgdefs.mk cfgdefs_output_custom_defs # strict: some tests might fail set +e # bootstrapping cflags cfgdefs_perform_native_tests # strict: restore mode set -e # bootstrap cfgdefs_bootstrap # strict: some tests might fail set +e # target-specific tests cfgdefs_perform_target_tests # strict: restore mode set -e # all done return 0