summaryrefslogtreecommitdiff
path: root/Build/source/m4/kpse-visibility.m4
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
committerKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
commitad547a6b5986815fda458221149728d9d9ab1d87 (patch)
tree16296910eb3eca724371474ea9aea3994dc69614 /Build/source/m4/kpse-visibility.m4
parent947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff)
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/m4/kpse-visibility.m4')
-rw-r--r--Build/source/m4/kpse-visibility.m476
1 files changed, 76 insertions, 0 deletions
diff --git a/Build/source/m4/kpse-visibility.m4 b/Build/source/m4/kpse-visibility.m4
new file mode 100644
index 00000000000..5bdb8b93af5
--- /dev/null
+++ b/Build/source/m4/kpse-visibility.m4
@@ -0,0 +1,76 @@
+# $Id$
+# Public macros for the TeX Live (TL) tree.
+# Copyright 2017-2018 Karl Berry <tex-live@tug.org>
+# Copyright 2013-2014 Peter Breitenlohner <tex-live@tug.org>
+#
+# This file is free software; the copyright holder
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# KPSE_COMPILER_VISIBILITY
+# ------------------------
+# Set up compiler flags for C and C++ to hide external symbols.
+# This macro determines and substitutes VISIBILITY_CFLAGS for the C compiler
+# and, if applicable, VISIBILITY_CXXFLAGS for the C++ compiler. To activate
+# them a Makefile.am must use them, e.g., in AM_CFLAGS or AM_CXXFLAGS.
+AC_DEFUN([KPSE_COMPILER_VISIBILITY],
+[dnl arrange that AC_PROG_CC uses _KPSE_VISIBILITY_CFLAGS etc.
+echo 'tldbg:[$0] called.' >&AS_MESSAGE_LOG_FD
+AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_KPSE_VISIBILITY_CFLAGS],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_KPSE_VISIBILITY_CFLAGS
+])])
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_KPSE_VISIBILITY_CXXFLAGS],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_KPSE_VISIBILITY_CXXFLAGS
+])])
+]) # KPSE_COMPILER_VISIBILITY
+
+_KPSE_VISIBILITY_CFLAGS
+# ---------------------
+# Internal subroutine.
+# Set up compiler flags for C to hide external symbols.
+AC_DEFUN([_KPSE_VISIBILITY_CFLAGS], [dnl
+AC_REQUIRE([AC_PROG_CC])[]dnl
+_KPSE_VISIBILITY_FLAGS([C], [cflags])
+m4_define([_KPSE_VISIBILITY_CFLAGS], [])[]dnl
+]) # _KPSE_VISIBILITY_CFLAGS
+
+_KPSE_VISIBILITY_CXXFLAGS
+# -----------------------
+# Internal subroutine.
+# Set up compiler flags for C++ to hide external symbols.
+AC_DEFUN([_KPSE_VISIBILITY_CXXFLAGS], [dnl
+AC_REQUIRE([AC_PROG_CXX])[]dnl
+_KPSE_VISIBILITY_FLAGS([C++], [cxxflags])
+m4_define([_KPSE_VISIBILITY_CXXFLAGS], [])[]dnl
+]) # _KPSE_VISIBILITY_CFLAGS
+
+_KPSE_VISIBILITY_FLAGS(LANG, TAG)
+# -------------------------------
+# Internal subroutine.
+# Set up compiler flags for C or C++ to hide external symbols.
+m4_define([_KPSE_VISIBILITY_FLAGS], [dnl
+AC_CACHE_CHECK(AS_TR_CPP($2) [for $1 to hide external symbols],
+ [kpse_cv_visibility_$2],
+ [dnl
+AC_LANG_PUSH([$1])
+kpse_cv_visibility_$2=unknown
+kpse_save_flags=$AS_TR_CPP($2)
+AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <stdio.h>
+ extern void foo(void);
+ void foo(void){printf("foo\n");}]])])
+# FIXME: Add tests for non-GNU compilers
+for kpse_flag in '-fvisibility=hidden -fvisibility-inlines-hidden' '-fvisibility=hidden'; do
+ AS_TR_CPP($2)="$kpse_save_flags -Werror $kpse_flag"
+ AC_COMPILE_IFELSE([], [kpse_cv_visibility_$2=$kpse_flag; break])
+done
+AS_TR_CPP($2)=$kpse_save_flags
+AC_LANG_POP([$1])
+])
+AS_CASE([$kpse_cv_visibility_$2],
+ [unknown], [],
+ [AC_SUBST([VISIBILITY_]AS_TR_CPP($2), [$kpse_cv_visibility_$2])])
+]) # _KPSE_VISIBILITY_FLAGS