From d089ce96a7da957accafa12336ffb0c635ae9a43 Mon Sep 17 00:00:00 2001
From: midipix <writeonce@midipix.org>
Date: Sun, 18 Feb 2024 06:33:00 +0000
Subject: build system: ccenv: detect compiler support of visibility
 attributes.

---
 sofort/ccenv/ccenv.in   |  7 ++++++-
 sofort/ccenv/ccenv.sh   | 20 ++++++++++++++++++++
 sofort/ccenv/ccenv.vars |  6 ++++++
 3 files changed, 32 insertions(+), 1 deletion(-)

(limited to 'sofort/ccenv')

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..0f7f486 100644
--- a/sofort/ccenv/ccenv.sh
+++ b/sofort/ccenv/ccenv.sh
@@ -1654,6 +1654,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 +1779,7 @@ ccenv_set_toolchain_variables()
 	ccenv_set_os_dso_linkage
 	ccenv_set_os_dso_patterns
 	ccenv_set_os_pe_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=
-- 
cgit v1.2.3