diff options
-rw-r--r-- | COPYING.SBMAKE | 2 | ||||
-rw-r--r-- | COPYING.SOFORT | 2 | ||||
-rw-r--r-- | Makefile.in | 1 | ||||
-rw-r--r-- | README.SBMAKE (renamed from README) | 0 | ||||
-rw-r--r-- | config.usage | 2 | ||||
-rwxr-xr-x | configure | 30 | ||||
-rw-r--r-- | project/common.mk | 5 | ||||
-rw-r--r-- | project/config/cfgdefs.in | 10 | ||||
-rw-r--r-- | project/config/cfgdefs.sh | 37 | ||||
-rw-r--r-- | project/extras.mk | 20 | ||||
-rw-r--r-- | project/headers.mk | 2 | ||||
-rw-r--r-- | sofort/ccenv/ccenv.in | 7 | ||||
-rw-r--r-- | sofort/ccenv/ccenv.sh | 72 | ||||
-rw-r--r-- | sofort/ccenv/ccenv.vars | 6 | ||||
-rw-r--r-- | sofort/ccenv/ccswitch.strs | 1 | ||||
-rw-r--r-- | sofort/cfgtest/cfgtest.sh | 79 | ||||
-rw-r--r-- | sofort/config/config.vars | 1 |
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/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 @@ -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 |