summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--COPYING.SBMAKE2
-rw-r--r--COPYING.SOFORT2
-rw-r--r--Makefile.in1
-rw-r--r--README.SBMAKE (renamed from README)0
-rw-r--r--config.usage2
-rwxr-xr-xconfigure30
-rw-r--r--project/common.mk5
-rw-r--r--project/config/cfgdefs.in10
-rw-r--r--project/config/cfgdefs.sh37
-rw-r--r--project/extras.mk20
-rw-r--r--project/headers.mk2
-rw-r--r--sofort/ccenv/ccenv.in7
-rw-r--r--sofort/ccenv/ccenv.sh72
-rw-r--r--sofort/ccenv/ccenv.vars6
-rw-r--r--sofort/ccenv/ccswitch.strs1
-rw-r--r--sofort/cfgtest/cfgtest.sh79
-rw-r--r--sofort/config/config.vars1
17 files changed, 220 insertions, 57 deletions
diff --git a/COPYING.SBMAKE b/COPYING.SBMAKE
index 913bc34..0d1a89a 100644
--- a/COPYING.SBMAKE
+++ b/COPYING.SBMAKE
@@ -2,7 +2,7 @@
/* */
/* sbmake: a sofort-based build project for NetBSD's make(1) utility. */
/* */
-/* Copyright (C) 2021 Z. Gilboa */
+/* Copyright (C) 2021 SysDeer Technologies, LLC */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
diff --git a/COPYING.SOFORT b/COPYING.SOFORT
index 4880eec..1c8a6c1 100644
--- a/COPYING.SOFORT
+++ b/COPYING.SOFORT
@@ -2,7 +2,7 @@
/* */
/* sofort: portable software project skeleton */
/* */
-/* Copyright (C) 2015--2021 Z. Gilboa */
+/* Copyright (C) 2015--2024 SysDeer Technologies, LLC */
/* */
/* sofort provides a build system that can be incorporated into Works */
/* which may or may not be covered by a copyleft license. THE FOLLOWING */
diff --git a/Makefile.in b/Makefile.in
index 4e0f9e9..5ad6ff0 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -84,7 +84,6 @@ CFLAGS_DEBUG += @cflags_debug@
CFLAGS_CMDLINE += @cflags_cmdline@
CFLAGS_CONFIG += @cflags_config@
CFLAGS_SYSROOT += @cflags_sysroot@
-CFLAGS_OS += @cflags_os@
CFLAGS_SITE += @cflags_site@
CFLAGS_PATH += @cflags_path@
CFLAGS_STRICT += @cflags_strict@
diff --git a/README b/README.SBMAKE
index 0aa6a0c..0aa6a0c 100644
--- a/README
+++ b/README.SBMAKE
diff --git a/config.usage b/config.usage
index 33d1e58..41fe629 100644
--- a/config.usage
+++ b/config.usage
@@ -143,7 +143,7 @@ supported variables:
TOOLCHAIN
SYSROOT
CROSS_COMPILE
- SHELL
+ CONFIG_SHELL
PKGCONF
PKGCONFIG
diff --git a/configure b/configure
index e79d154..839d8b3 100755
--- a/configure
+++ b/configure
@@ -33,7 +33,12 @@ usage()
" ___________________________________________" \
"__________________________________"
- cat "$mb_project_dir"/project/config/cfgdefs.usage
+ if [ -f "$mb_project_dir"/project/config/cfgdefs.usage ]; then
+ cat "$mb_project_dir"/project/config/cfgdefs.usage
+ else
+ printf '%s\n\n' \
+ "[ info: this project does not provide a project-specific cfgdefs.usage file. ]"
+ fi
fi
exit 0
@@ -275,7 +280,7 @@ init_vars()
mb_toolchain=$TOOLCHAIN
mb_sysroot=$SYSROOT
mb_cross_compile=$CROSS_COMPILE
- mb_shell=$SHELL
+ mb_shell=$CONFIG_SHELL
# pkgconf
mb_pkgconf=$PKGCONF
@@ -713,7 +718,7 @@ config_flags()
# ccstrict
if [ _$mb_ccstrict = _yes ]; then
- mb_cflags_strict='$(_CFLAGS_Wall) $(_CFLAGS_Werror) $(_CFLAGS_Wextra) $(_CFLAGS_Wundef)'
+ mb_cflags_strict='$(_CFLAGS_Wall) $(_CFLAGS_Werror) $(_CFLAGS_Wextra) $(_CFLAGS_Wundef) $(_CFLAGS_Wpedantic)'
fi
# ldstrict
@@ -842,26 +847,9 @@ config_ccenv()
error_msg "${mb_pretty} forcing native mode when cross-building is strictly prohibited."
fi
- # add the include and library directories to the compiler and linker search path
- if [ "$mb_cchost" = "$mb_native_cchost" ]; then
- mb_cflags_last="$mb_cflags_last -I$mb_includedir"
- mb_ldflags_last="$mb_ldflags_last -L$mb_libdir"
- else
- case "$mb_libdir" in
- /*)
- mb_cflags_last="$mb_cflags_last -I$mb_sysroot/.$mb_includedir"
- mb_ldflags_last="$mb_ldflags_last -L$mb_sysroot/.$mb_libdir"
- ;;
- *)
- mb_cflags_last="$mb_cflags_last -I$mb_includedir"
- mb_ldflags_last="$mb_ldflags_last -L$mb_libdir"
- esac
- fi
-
# re-generate Makefile.tmp
output_section_break
config_copy
-
}
config_custom_cfgdefs()
@@ -944,7 +932,7 @@ config_host()
mb_cfghost_cflags="$mb_cfghost_cflags -ffreestanding"
mb_cfghost_cflags="$mb_cfghost_cflags -nostdlib"
else
- printf 'int main(void){return 0;}' \
+ printf 'int main(void){return 0;}\n' \
> "$mb_cfghost_tmpname"
fi
diff --git a/project/common.mk b/project/common.mk
index af510bf..35d4bef 100644
--- a/project/common.mk
+++ b/project/common.mk
@@ -4,12 +4,11 @@ API_SRCS = \
src/logic/compat.c \
src/logic/cond.c \
src/logic/dir.c \
- src/logic/enum.c \
src/logic/for.c \
src/logic/hash.c \
src/logic/job.c \
src/logic/lst.c \
- src/logic/main.c \
+ src/logic/make.c \
src/logic/make_malloc.c \
src/logic/meta.c \
src/logic/metachar.c \
@@ -22,6 +21,6 @@ API_SRCS = \
src/logic/var.c \
APP_SRCS = \
- src/make.c
+ src/main.c
COMMON_SRCS = $(API_SRCS) $(INTERNAL_SRCS)
diff --git a/project/config/cfgdefs.in b/project/config/cfgdefs.in
index e69de29..c63687f 100644
--- a/project/config/cfgdefs.in
+++ b/project/config/cfgdefs.in
@@ -0,0 +1,10 @@
+# cfgdefs.mk: build project definitions and variable assignments,
+# generated by the project-specific cfgdefs.sh.
+
+# changes made to this file will be gone the next time
+# you run ./configure.
+
+# for persistent post-configure, ad-hoc changes to the
+# build project, use usrdefs.mk instead.
+
+CFLAGS_CONFIG += -D_PATH_DEFSYSPATH=\"@cfgdefs_default_sys_path@\"
diff --git a/project/config/cfgdefs.sh b/project/config/cfgdefs.sh
index 34bd609..a4e859f 100644
--- a/project/config/cfgdefs.sh
+++ b/project/config/cfgdefs.sh
@@ -17,10 +17,27 @@
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
@@ -34,16 +51,17 @@ cfgdefs_bootstrap()
cfgdefs_objs=
- cfgdefs_utilsrc='make.c'
+ cfgdefs_utilsrc='main.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="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
@@ -64,7 +82,8 @@ cfgdefs_bootstrap()
output_step_prolog 'compiling' "./bootstrap/${obj}"
- printf '\n$ %s %s\n' "$mb_native_cc $cfgdefs_cflags" '\' >&3
+ 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
@@ -82,7 +101,8 @@ cfgdefs_bootstrap()
output_step_prolog 'compiling' "./bootstrap/${obj}"
- printf '\n$ %s %s\n' "$mb_native_cc $cfgdefs_cflags" '\' >&3
+ 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
@@ -118,7 +138,12 @@ cfgdefs_bootstrap()
cfgdefs_output_custom_defs()
{
- cat "$mb_project_dir/project/config/cfgdefs.in" > cfgdefs.mk
+ 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
}
diff --git a/project/extras.mk b/project/extras.mk
index 7fbc567..5a9a8f7 100644
--- a/project/extras.mk
+++ b/project/extras.mk
@@ -1,5 +1,4 @@
-SYS_MK_DIR = $(DATADIR)/mk
-CFLAGS_CONFIG += -D_PATH_DEFSYSPATH=\"$(SYS_MK_DIR)\"
+SYS_MK_DIR = $(DATADIR)/mk
MK_FILES = \
$(SOURCE_DIR)/mk/ChangeLog \
@@ -9,6 +8,8 @@ MK_FILES = \
$(SOURCE_DIR)/mk/auto.obj.mk \
$(SOURCE_DIR)/mk/autoconf.mk \
$(SOURCE_DIR)/mk/autodep.mk \
+ $(SOURCE_DIR)/mk/cc-wrap.mk \
+ $(SOURCE_DIR)/mk/ccm.dep.mk \
$(SOURCE_DIR)/mk/compiler.mk \
$(SOURCE_DIR)/mk/cython.mk \
$(SOURCE_DIR)/mk/dep.mk \
@@ -27,6 +28,7 @@ MK_FILES = \
$(SOURCE_DIR)/mk/init.mk \
$(SOURCE_DIR)/mk/install-new.mk \
$(SOURCE_DIR)/mk/java.mk \
+ $(SOURCE_DIR)/mk/jobs.mk \
$(SOURCE_DIR)/mk/ldorder.mk \
$(SOURCE_DIR)/mk/lib.mk \
$(SOURCE_DIR)/mk/libnames.mk \
@@ -42,10 +44,12 @@ MK_FILES = \
$(SOURCE_DIR)/mk/meta2deps.sh \
$(SOURCE_DIR)/mk/mk-files.txt \
$(SOURCE_DIR)/mk/mkopt.sh \
+ $(SOURCE_DIR)/mk/newlog.sh \
$(SOURCE_DIR)/mk/nls.mk \
$(SOURCE_DIR)/mk/obj.mk \
$(SOURCE_DIR)/mk/options.mk \
$(SOURCE_DIR)/mk/own.mk \
+ $(SOURCE_DIR)/mk/posix.mk \
$(SOURCE_DIR)/mk/prlist.mk \
$(SOURCE_DIR)/mk/prog.mk \
$(SOURCE_DIR)/mk/progs.mk \
@@ -54,9 +58,11 @@ MK_FILES = \
$(SOURCE_DIR)/mk/srctop.mk \
$(SOURCE_DIR)/mk/stage-install.sh \
$(SOURCE_DIR)/mk/subdir.mk \
+ $(SOURCE_DIR)/mk/suffixes.mk \
$(SOURCE_DIR)/mk/sys.clean-env.mk \
$(SOURCE_DIR)/mk/sys.debug.mk \
$(SOURCE_DIR)/mk/sys.dependfile.mk \
+ $(SOURCE_DIR)/mk/sys.dirdeps.mk \
$(SOURCE_DIR)/mk/sys.mk \
$(SOURCE_DIR)/mk/sys.vars.mk \
$(SOURCE_DIR)/mk/target-flags.mk \
@@ -74,12 +80,18 @@ MK_SYS_FILES = \
$(SOURCE_DIR)/mk/sys/NetBSD.mk \
$(SOURCE_DIR)/mk/sys/OSF1.mk \
$(SOURCE_DIR)/mk/sys/OpenBSD.mk \
+ $(SOURCE_DIR)/mk/sys/SCO_SV.mk \
$(SOURCE_DIR)/mk/sys/SunOS.mk \
$(SOURCE_DIR)/mk/sys/UnixWare.mk \
install-mk:
- mkdir -p $(SYS_MK_DIR) $(DESTDIR)$(SYS_MK_DIR)/sys
+ mkdir -p $(DESTDIR)$(SYS_MK_DIR)
+ mkdir -p $(DESTDIR)$(SYS_MK_DIR)/sys
cp -p $(MK_FILES) $(DESTDIR)$(SYS_MK_DIR)
cp -p $(MK_SYS_FILES) $(DESTDIR)$(SYS_MK_DIR)/sys
-install: install-mk
+install-man:
+ mkdir -p $(DESTDIR)$(DATADIR)/man/man1/
+ cp -p $(SOURCE_DIR)/man/make.1 $(DESTDIR)$(DATADIR)/man/man1/$(NICKNAME).1
+
+install: install-mk install-man
diff --git a/project/headers.mk b/project/headers.mk
index 872f706..fe24bdd 100644
--- a/project/headers.mk
+++ b/project/headers.mk
@@ -2,7 +2,6 @@ INTERNAL_HEADERS = \
$(SOURCE_DIR)/src/internal/buf.h \
$(SOURCE_DIR)/src/internal/config.h \
$(SOURCE_DIR)/src/internal/dir.h \
- $(SOURCE_DIR)/src/internal/enum.h \
$(SOURCE_DIR)/src/internal/hash.h \
$(SOURCE_DIR)/src/internal/job.h \
$(SOURCE_DIR)/src/internal/lst.h \
@@ -10,7 +9,6 @@ INTERNAL_HEADERS = \
$(SOURCE_DIR)/src/internal/make_malloc.h \
$(SOURCE_DIR)/src/internal/metachar.h \
$(SOURCE_DIR)/src/internal/meta.h \
- $(SOURCE_DIR)/src/internal/nonints.h \
$(SOURCE_DIR)/src/internal/pathnames.h \
$(SOURCE_DIR)/src/internal/str.h \
$(SOURCE_DIR)/src/internal/trace.h \
diff --git a/sofort/ccenv/ccenv.in b/sofort/ccenv/ccenv.in
index 441f8ab..0daff84 100644
--- a/sofort/ccenv/ccenv.in
+++ b/sofort/ccenv/ccenv.in
@@ -84,8 +84,13 @@ PKGCONF = @ccenv_pkgconf@
AS = @ccenv_as@
LD = @ccenv_ld@
+# @ccenv_cfgtype@ visibility attributes
+CFLAGS_ATTR_VISIBILITY_DEFAULT = -D_ATTR_VISIBILITY_DEFAULT=@ccenv_attr_visibility_default@
+CFLAGS_ATTR_VISIBILITY_HIDDEN = -D_ATTR_VISIBILITY_HIDDEN=@ccenv_attr_visibility_hidden@
+CFLAGS_ATTR_VISIBILITY_INTERNAL = -D_ATTR_VISIBILITY_INTERNAL=@ccenv_attr_visibility_internal@
+CFLAGS_ATTR_VISIBILITY_PROTECTED = -D_ATTR_VISIBILITY_PROTECTED=@ccenv_attr_visibility_protected@
+
# @ccenv_cfgtype@ cflags
CFLAGS_OS += -DOS_LIB_SUFFIX=\"@ccenv_os_lib_suffix@\"
CFLAGS_OS += @ccenv_cflags_os@
CFLAGS_PIC += @ccenv_cflags_pic@
-
diff --git a/sofort/ccenv/ccenv.sh b/sofort/ccenv/ccenv.sh
index a13aa07..d975c6b 100644
--- a/sofort/ccenv/ccenv.sh
+++ b/sofort/ccenv/ccenv.sh
@@ -1118,14 +1118,20 @@ ccenv_set_os()
fi
case "$ccenv_cchost" in
- *-*-*-* )
- ccenv_tip=${ccenv_cchost%-*}
- ccenv_os=${ccenv_tip#*-*-}
- ;;
*-*-musl | *-*-gnu )
ccenv_tip=${ccenv_cchost%-*}
ccenv_os=${ccenv_tip#*-}
;;
+ *-*-solaris* )
+ ccenv_os='solaris'
+ ;;
+ *-*-*bsd* | *-*-dragonfly* )
+ ccenv_os='bsd'
+ ;;
+ *-*-*-* )
+ ccenv_tip=${ccenv_cchost%-*}
+ ccenv_os=${ccenv_tip#*-*-}
+ ;;
*-*-* )
ccenv_os=${ccenv_cchost#*-*-}
;;
@@ -1412,6 +1418,42 @@ ccenv_set_os_pe_switches()
;;
esac
fi
+
+ if [ "$ccenv_cc_binfmt" = 'PE' ]; then
+ if ! cfgtest_macro_definition '__PE__'; then
+ ccenv_cflags_os="${ccenv_cflags_os} -D__PE__"
+ fi
+
+ if ! cfgtest_macro_definition '__dllexport'; then
+ ccenv_cflags_os="${ccenv_cflags_os} -D__dllexport=__attribute__\(\(__dllexport__\)\)"
+ fi
+
+ if ! cfgtest_macro_definition '__dllimport'; then
+ ccenv_cflags_os="${ccenv_cflags_os} -D__dllimport=__attribute__\(\(__dllimport__\)\)"
+ fi
+ fi
+}
+
+ccenv_set_os_gate_switches()
+{
+ if [ "$ccenv_os" = 'solaris' ]; then
+ if ! cfgtest_macro_definition 'AT_FDCWD'; then
+ ccenv_cflags_os="${ccenv_cflags_os} -D__EXTENSIONS__"
+ fi
+ fi
+}
+
+ccenv_set_os_bsd_switches()
+{
+ if [ "$ccenv_os" = 'bsd' ]; then
+ mb_cfgtest_headers='sys/mman.h'
+
+ if ! cfgtest_macro_definition 'MAP_ANON'; then
+ ccenv_cflags_os="${ccenv_cflags_os} -D__BSD_VISIBLE"
+ fi
+
+ mb_cfgtest_headers=
+ fi
}
ccenv_output_defs()
@@ -1654,6 +1696,25 @@ ccenv_set_cc_linker_switch_vars()
done
}
+ccenv_set_cc_attr_visibility_vars()
+{
+ if cfgtest_attr_visibility 'default'; then
+ ccenv_attr_visibility_default="$mb_cfgtest_attr"
+ fi
+
+ if cfgtest_attr_visibility 'hidden'; then
+ ccenv_attr_visibility_hidden="$mb_cfgtest_attr"
+ fi
+
+ if cfgtest_attr_visibility 'internal'; then
+ ccenv_attr_visibility_internal="$mb_cfgtest_attr"
+ fi
+
+ if cfgtest_attr_visibility 'protected'; then
+ ccenv_attr_visibility_protected="$mb_cfgtest_attr"
+ fi
+}
+
ccenv_dso_verify()
{
ccenv_str='int foo(int x){return ++x;}'
@@ -1760,6 +1821,9 @@ ccenv_set_toolchain_variables()
ccenv_set_os_dso_linkage
ccenv_set_os_dso_patterns
ccenv_set_os_pe_switches
+ ccenv_set_os_gate_switches
+ ccenv_set_os_bsd_switches
+ ccenv_set_cc_attr_visibility_vars
ccenv_output_defs
ccenv_clean_up
diff --git a/sofort/ccenv/ccenv.vars b/sofort/ccenv/ccenv.vars
index 41eb327..054b638 100644
--- a/sofort/ccenv/ccenv.vars
+++ b/sofort/ccenv/ccenv.vars
@@ -82,6 +82,12 @@ ccenv_windrc=
ccenv_pkgconf=
+# visibility attributes
+ccenv_attr_visibility_default=
+ccenv_attr_visibility_hidden=
+ccenv_attr_visibility_internal=
+ccenv_attr_visibility_protected=
+
# cflags
ccenv_cflags_os=
ccenv_cflags_pic=
diff --git a/sofort/ccenv/ccswitch.strs b/sofort/ccenv/ccswitch.strs
index 0a76f03..277e02e 100644
--- a/sofort/ccenv/ccswitch.strs
+++ b/sofort/ccenv/ccswitch.strs
@@ -34,6 +34,7 @@
-Werror
-Wextra
-Wundef
+-Wpedantic
# debugging
-g
diff --git a/sofort/cfgtest/cfgtest.sh b/sofort/cfgtest/cfgtest.sh
index debdb8c..7bb27a0 100644
--- a/sofort/cfgtest/cfgtest.sh
+++ b/sofort/cfgtest/cfgtest.sh
@@ -15,6 +15,7 @@
# mb_cfgtest_cfgtype: the type of the current test (host/native)
# mb_cfgtest_makevar: the make variable affected by the current test
# mb_cfgtest_headers: headers for ad-hoc inclusion with the current test
+# mb_cfgtest_attr: if supported, the compiler-specific attribute definition
cfgtest_newline()
@@ -131,6 +132,15 @@ cfgtest_epilog()
return 1
fi
+ if [ "${1}" = 'attr' ] && [ "${2}" = '(error)' ]; then
+ printf '\n\ncfgtest: the %s compiler %s %s_ attribute.\n' \
+ "$mb_cfgtest_cfgtype" \
+ 'does not appear to support the _' \
+ "${3}" >&3
+ printf '%s\n' '------------------------' >&3
+ return 1
+ fi
+
if [ "${2}" = '-----' ] || [ "${2}" = '(missing)' ]; then
printf '\n\ncfgtest: %s %s is missing or cannot be found.\n' "${1}" "${3}" >&3
printf '%s\n' '------------------------' >&3
@@ -246,6 +256,8 @@ cfgtest_common_init()
fi
elif [ "$cfgtest_type" = 'asm' ]; then
cfgtest_fmt='%s -c -xc - -o a.out'
+ elif [ "$cfgtest_type" = 'attr' ]; then
+ cfgtest_fmt='%s -c -xc - -o a.out -Werror'
elif [ "$cfgtest_type" = 'lib' ]; then
cfgtest_fmt='%s -xc - -o a.out'
elif [ "$cfgtest_type" = 'ldflag' ]; then
@@ -330,11 +342,16 @@ cfgtest_header_presence()
cfgtest_prolog 'header' "${1}"
cfgtest_code_snippet=$(printf '#include <%s>\n' "${1}")
+ cfgtest_code_onedecl='int fn(void){return 0;}'
+
+ cfgtest_code_snippet=$(printf '%s\n%s\n' \
+ "$cfgtest_code_snippet" \
+ "$cfgtest_code_onedecl")
cfgtest_common_init
# execute
- printf '%s' "$cfgtest_src" \
+ printf '%s\n' "$cfgtest_src" \
| eval $(printf '%s' "$cfgtest_cmd") \
> /dev/null 2>&3 \
|| cfgtest_epilog 'header' '-----' "<${1}>" \
@@ -365,11 +382,16 @@ cfgtest_header_absence()
cfgtest_prolog 'header absence' "${1}"
cfgtest_code_snippet=$(printf '#include <%s>\n' "${1}")
+ cfgtest_code_onedecl='int fn(void){return 0;}'
+
+ cfgtest_code_snippet=$(printf '%s\n%s\n' \
+ "$cfgtest_code_snippet" \
+ "$cfgtest_code_onedecl")
cfgtest_common_init
# execute
- printf '%s' "$cfgtest_src" \
+ printf '%s\n' "$cfgtest_src" \
| eval $(printf '%s' "$cfgtest_cmd") \
> /dev/null 2>&3 \
&& printf 'cfgtest: %s header <%s>: no error.' \
@@ -401,12 +423,12 @@ cfgtest_interface_presence()
# init
cfgtest_prolog 'interface' "${1}"
- cfgtest_code_snippet=$(printf 'void * addr = &%s;\n' "${1}")
+ cfgtest_code_snippet=$(printf 'void (*addr)() = (void (*)())&%s;\n' "${1}")
cfgtest_common_init
# execute
- printf '%s' "$cfgtest_src" \
+ printf '%s\n' "$cfgtest_src" \
| eval $(printf '%s' "$cfgtest_cmd") \
> /dev/null 2>&3 \
|| cfgtest_epilog 'interface' '(error)' "${1}" \
@@ -443,7 +465,7 @@ cfgtest_decl_presence()
cfgtest_common_init
# execute
- printf '%s' "$cfgtest_src" \
+ printf '%s\n' "$cfgtest_src" \
| eval $(printf '%s' "$cfgtest_cmd") \
> /dev/null 2>&3 \
|| cfgtest_epilog 'decl' '(error)' "${1}" \
@@ -496,7 +518,7 @@ cfgtest_type_size()
cfgtest_common_init
- printf '%s' "$cfgtest_src" \
+ printf '%s\n' "$cfgtest_src" \
| eval $(printf '%s' "$cfgtest_cmd") \
> /dev/null 2>&3 \
&& mb_internal_size=$mb_internal_guess
@@ -534,6 +556,39 @@ cfgtest_type_size()
}
+cfgtest_attr_visibility()
+{
+ # init
+ cfgtest_prolog 'compiler visibility attr' "${1}"
+
+ cfgtest_attr_syntax='__attribute__((__visibility__("'"${1}"'")))'
+ cfgtest_code_snippet="$cfgtest_attr_syntax"' int f_'"${1}"'(void);'
+
+ cfgtest_common_init 'attr'
+
+ # execute
+ cfgtest_ret=1
+
+ printf '%s\n' "$cfgtest_src" \
+ | eval $(printf '%s' "$cfgtest_cmd") \
+ > /dev/null 2>&3 \
+ || cfgtest_epilog 'attr' '(error)' "${1}" \
+ || return
+
+ # result
+ mb_cfgtest_attr=$(printf '__attribute__\\(\\(__visibility__\\(\\"%s\\"\\)\\)\\)' "${1}")
+
+ cfgtest_ret=0
+
+ printf 'cfgtest: %s compiler: above attribute is supported; see also ccenv/%s.mk.\n\n' \
+ "$mb_cfgtest_cfgtype" "$mb_cfgtest_cfgtype" >&3
+
+ cfgtest_epilog 'attr' '(ok)'
+
+ return 0
+}
+
+
cfgtest_code_snippet_asm()
{
# init
@@ -546,7 +601,7 @@ cfgtest_code_snippet_asm()
# execute
cfgtest_ret=1
- printf '%s' "$cfgtest_src" \
+ printf '%s\n' "$cfgtest_src" \
| eval $(printf '%s' "$cfgtest_cmd") \
> /dev/null 2>&3 \
|| cfgtest_epilog 'snippet' '(error)' \
@@ -579,7 +634,7 @@ cfgtest_macro_definition()
# execute
cfgtest_ret=1
- printf '%s' "$cfgtest_src" \
+ printf '%s\n' "$cfgtest_src" \
| eval $(printf '%s' "$cfgtest_cmd") \
> /dev/null 2>&3 \
|| cfgtest_epilog 'macro' '(error)' "${1}" \
@@ -627,7 +682,7 @@ cfgtest_library_presence()
cfgtest_common_init 'lib'
# execute
- printf '%s' "$cfgtest_src" \
+ printf '%s\n' "$cfgtest_src" \
| eval $(printf '%s' "$cfgtest_cmd") \
> /dev/null 2>&3 \
|| cfgtest_epilog 'library' '-----' "$@" \
@@ -805,20 +860,20 @@ cfgtest_compiler_switch()
;;
*)
- cfgtest_code_snippet=
+ cfgtest_code_snippet='int fn(void){return 0;}'
cfgtest_common_init 'switch'
;;
esac
# execute
- printf '%s' "$cfgtest_src" \
+ printf '%s\n' "$cfgtest_src" \
| eval $(printf '%s' "$cfgtest_cmd") \
> /dev/null 2>&3 \
|| cfgtest_epilog 'switch' '(error)' "$@" \
|| return 1
# result
- printf 'cfgtest: the switch `%s was accepted by the compier.\n' \
+ printf 'cfgtest: the switch `%s was accepted by the compiler.\n' \
"$cfgtest_switches'" >&3
printf '%s\n' '------------------------' >&3
diff --git a/sofort/config/config.vars b/sofort/config/config.vars
index 0c01a29..38d5616 100644
--- a/sofort/config/config.vars
+++ b/sofort/config/config.vars
@@ -54,6 +54,7 @@ zealous
sysroot
freestanding
cross_compile
+config_shell
shell
pkgconf