summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2021-04-24 22:52:07 +0000
committermidipix <writeonce@midipix.org>2021-04-25 12:14:41 +0000
commitb3e7fa5e706e99cfa1369196bd504c0830ff78e7 (patch)
tree128cda389e7a0c7a69fdc5c6ac13834ec6b3ea20
parent087c88548c57a5b245f23ed796a7982e8db9f1fe (diff)
downloadsbmake-b3e7fa5e706e99cfa1369196bd504c0830ff78e7.tar.bz2
sbmake-b3e7fa5e706e99cfa1369196bd504c0830ff78e7.tar.xz
project: bootstrap and cfgdefs.sh: initial implementation.
-rw-r--r--config.project2
-rw-r--r--project/config/cfgdefs.sh88
2 files changed, 89 insertions, 1 deletions
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