From b3e7fa5e706e99cfa1369196bd504c0830ff78e7 Mon Sep 17 00:00:00 2001 From: midipix Date: Apr 25 2021 12:14:41 +0000 Subject: project: bootstrap and cfgdefs.sh: initial implementation. --- diff --git a/config.project b/config.project index 751bccb..821ea72 100644 --- a/config.project +++ b/config.project @@ -13,7 +13,7 @@ mb_disable_static=yes mb_disable_shared=yes # custom config step -mb_use_custom_cfgdefs=no +mb_use_custom_cfgdefs=yes mb_use_custom_cfginit=no mb_use_custom_cfgfini=no mb_use_custom_cfgtest=no diff --git a/project/config/cfgdefs.sh b/project/config/cfgdefs.sh new file mode 100644 index 0000000..8400b6a --- /dev/null +++ b/project/config/cfgdefs.sh @@ -0,0 +1,88 @@ +# 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. + +for arg ; do + case "$arg" in + *) + error_msg ${arg#}: "unsupported config argument." + 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='make.c' + + cfgdefs_sources="arch.c buf.c compat.c cond.c dir.c enum.c for.c hash.c job.c" + cfgdefs_sources="$cfgdefs_sources lst.c main.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="-I${mb_source_dir}/src/internal" + cfgdefs_cflags="$cfgdefs_cflags -D_PATH_DEFSYSPATH=\"${mb_source_dir}/mk\"" + cfgdefs_cflags="$cfgdefs_cflags -DHAVE_STRERROR -DHAVE_VSNPRINTF" + cfgdefs_cflags="$cfgdefs_cflags -DHAVE_SETPGID -DHAVE_SETRLIMIT -DHAVE_SETENV" + + cfgdefs_make="$mb_pwd/bootstrap/make" + + mkdir -p "$mb_pwd/bootstrap" + + printf '\n\n' + + for src in $cfgdefs_utilsrc; do + obj=${src%%.c}.o + cfgdefs_objs="$cfgdefs_objs $mb_pwd/bootstrap/${obj}" + + set -x + + "$mb_native_cc" $mb_native_cflags $cfgdefs_cflags \ + -c "$mb_source_dir/src/${src}" \ + -o "$mb_pwd/bootstrap/${obj}" + + set +x + done + + for src in $cfgdefs_sources; do + obj=${src%%.c}.o + cfgdefs_objs="$cfgdefs_objs $mb_pwd/bootstrap/${obj}" + + set -x + + "$mb_native_cc" $mb_native_cflags $cfgdefs_cflags \ + -c "$mb_source_dir/src/logic/${src}" \ + -o "$mb_pwd/bootstrap/${obj}" + + set +x + done + + "$mb_native_cc" $mb_native_cflags $cfgdefs_cflags \ + $mb_native_ldflags $cfgdefs_objs \ + -o "$cfgdefs_make" + + mb_make="$cfgdefs_make" + + cfgdefs_bootstrap_done='yes' +} + +# bootstrap +cfgdefs_bootstrap + +# all done +return 0