https://gcc.gnu.org/g:f426587cf93e26b645e70abf261cdfcab203c184

commit r16-6434-gf426587cf93e26b645e70abf261cdfcab203c184
Author: Pietro Monteiro <[email protected]>
Date:   Mon Dec 29 12:53:20 2025 -0500

    libga68: Add symbol versions to exports
    
    libga68/ChangeLog:
    
            * configure.ac: New test to determine if symbol versioning is
            supported.
            * Makefile.am: Use result of above test to add appropriate linker
            flags.
            * Makefile.in: Regenerated.
            * aclocal.m4: Likewise.
            * configure: Likewise.
            * ga68.map: New file.
            * libtool-version: New file.
    
    Signed-off-by: Pietro Monteiro <[email protected]>

Diff:
---
 libga68/Makefile.am     |  27 ++++++++-
 libga68/Makefile.in     |  22 +++++--
 libga68/aclocal.m4      |   1 +
 libga68/configure       | 157 ++++++++++++++++++++++++++++++++++++++++++++++--
 libga68/configure.ac    |  51 ++++++++++++++--
 libga68/ga68.map        |  41 +++++++++++++
 libga68/libtool-version |   6 ++
 7 files changed, 289 insertions(+), 16 deletions(-)

diff --git a/libga68/Makefile.am b/libga68/Makefile.am
index accdd910d8d1..16917554da70 100644
--- a/libga68/Makefile.am
+++ b/libga68/Makefile.am
@@ -44,6 +44,27 @@ endif
 
 A68_BUILDDIR := $(shell pwd)
 
+if LIBGA68_USE_SYMVER
+if LIBGA68_USE_SYMVER_GNU
+version_arg = -Wl,--version-script=$(srcdir)/ga68.map
+version_dep = $(srcdir)/ga68.map
+endif
+if LIBGA68_USE_SYMVER_SUN
+version_arg = -Wl,-M,ga68.map-sun
+version_dep = ga68.map-sun
+ga68.map-sun : $(srcdir)/ga68.map \
+               $(top_srcdir)/../contrib/make_sunver.pl \
+               $(libga68_la_OBJECTS) $(libga68_la_LIBADD)
+       perl $(top_srcdir)/../contrib/make_sunver.pl \
+         $(srcdir)/ga68.map \
+         $(libga68_la_OBJECTS) $(libga68_la_LIBADD) \
+       > $@ || (rm -f $@ ; exit 1)
+endif
+else
+version_arg =
+version_dep =
+endif
+
 # Work around what appears to be a GNU make bug handling MAKEFLAGS
 # values defined in terms of make variables, as is the case for CC and
 # friends when we are called from the top level Makefile.
@@ -111,9 +132,9 @@ libga68_la_SOURCES = libga68.c \
                      ga68.h
 libga68_la_LIBTOOLFLAGS =
 libga68_la_CFLAGS = $(LIBGA68_GCFLAGS) $(LIBGA68_BOEHM_GC_INCLUDES)
-libga68_la_LDFLAGS = -version-info $(libga68_VERSION) \
-    $(extra_darwin_ldflags_libga68)
-libga68_la_DEPENDENCIES = libga68.spec
+libga68_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
+                    $(version_arg) $(lt_host_flags) 
$(extra_darwin_ldflags_libga68)
+libga68_la_DEPENDENCIES = libga68.spec $(version_dep)
 libga68_la_LIBADD = $(LIBGA68_BOEHM_GC_LIBS)
 
 # target overrides
diff --git a/libga68/Makefile.in b/libga68/Makefile.in
index efba8b8ee11b..7f4fd870192f 100644
--- a/libga68/Makefile.in
+++ b/libga68/Makefile.in
@@ -121,6 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
        $(top_srcdir)/../config/depstand.m4 \
        $(top_srcdir)/../config/gcc-plugin.m4 \
        $(top_srcdir)/../config/lead-dot.m4 \
+       $(top_srcdir)/../config/lthostflags.m4 \
        $(top_srcdir)/../config/multi.m4 \
        $(top_srcdir)/../config/no-executables.m4 \
        $(top_srcdir)/../config/override.m4 \
@@ -357,9 +358,9 @@ infodir = @infodir@
 install_sh = @install_sh@
 libdir = @libdir@
 libexecdir = @libexecdir@
-libga68_VERSION = @libga68_VERSION@
 localedir = @localedir@
 localstatedir = @localstatedir@
+lt_host_flags = @lt_host_flags@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 multi_basedir = @multi_basedir@
@@ -395,6 +396,12 @@ GCC_DIR = $(TOP_GCCDIR)/gcc
 A68_SRC = $(GCC_DIR)/algol68
 A68_FOR_TARGET = @A68_FOR_TARGET@
 A68_BUILDDIR := $(shell pwd)
+@LIBGA68_USE_SYMVER_FALSE@version_arg = 
+@LIBGA68_USE_SYMVER_GNU_TRUE@@LIBGA68_USE_SYMVER_TRUE@version_arg = 
-Wl,--version-script=$(srcdir)/ga68.map
+@LIBGA68_USE_SYMVER_SUN_TRUE@@LIBGA68_USE_SYMVER_TRUE@version_arg = 
-Wl,-M,ga68.map-sun
+@LIBGA68_USE_SYMVER_FALSE@version_dep = 
+@LIBGA68_USE_SYMVER_GNU_TRUE@@LIBGA68_USE_SYMVER_TRUE@version_dep = 
$(srcdir)/ga68.map
+@LIBGA68_USE_SYMVER_SUN_TRUE@@LIBGA68_USE_SYMVER_TRUE@version_dep = 
ga68.map-sun
 
 # Work around what appears to be a GNU make bug handling MAKEFLAGS
 # values defined in terms of make variables, as is the case for CC and
@@ -462,10 +469,10 @@ libga68_la_SOURCES = libga68.c \
 
 libga68_la_LIBTOOLFLAGS = 
 libga68_la_CFLAGS = $(LIBGA68_GCFLAGS) $(LIBGA68_BOEHM_GC_INCLUDES)
-libga68_la_LDFLAGS = -version-info $(libga68_VERSION) \
-    $(extra_darwin_ldflags_libga68)
+libga68_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
+                    $(version_arg) $(lt_host_flags) 
$(extra_darwin_ldflags_libga68)
 
-libga68_la_DEPENDENCIES = libga68.spec
+libga68_la_DEPENDENCIES = libga68.spec $(version_dep)
 libga68_la_LIBADD = $(LIBGA68_BOEHM_GC_LIBS)
 MULTISRCTOP = 
 MULTIBUILDTOP = 
@@ -868,6 +875,13 @@ uninstall-am: uninstall-toolexeclibDATA \
 
 .PRECIOUS: Makefile
 
+@LIBGA68_USE_SYMVER_SUN_TRUE@@[email protected] : 
$(srcdir)/ga68.map \
+@LIBGA68_USE_SYMVER_SUN_TRUE@@LIBGA68_USE_SYMVER_TRUE@         
$(top_srcdir)/../contrib/make_sunver.pl \
+@LIBGA68_USE_SYMVER_SUN_TRUE@@LIBGA68_USE_SYMVER_TRUE@         
$(libga68_la_OBJECTS) $(libga68_la_LIBADD)
+@LIBGA68_USE_SYMVER_SUN_TRUE@@LIBGA68_USE_SYMVER_TRUE@ perl 
$(top_srcdir)/../contrib/make_sunver.pl \
+@LIBGA68_USE_SYMVER_SUN_TRUE@@LIBGA68_USE_SYMVER_TRUE@   $(srcdir)/ga68.map \
+@LIBGA68_USE_SYMVER_SUN_TRUE@@LIBGA68_USE_SYMVER_TRUE@   $(libga68_la_OBJECTS) 
$(libga68_la_LIBADD) \
+@LIBGA68_USE_SYMVER_SUN_TRUE@@LIBGA68_USE_SYMVER_TRUE@ > $@ || (rm -f $@ ; 
exit 1)
 
 # target overrides
 -include $(tmake_file)
diff --git a/libga68/aclocal.m4 b/libga68/aclocal.m4
index 1d3f9eceae14..21d6365e3260 100644
--- a/libga68/aclocal.m4
+++ b/libga68/aclocal.m4
@@ -1192,6 +1192,7 @@ m4_include([../config/clang-plugin.m4])
 m4_include([../config/depstand.m4])
 m4_include([../config/gcc-plugin.m4])
 m4_include([../config/lead-dot.m4])
+m4_include([../config/lthostflags.m4])
 m4_include([../config/multi.m4])
 m4_include([../config/no-executables.m4])
 m4_include([../config/override.m4])
diff --git a/libga68/configure b/libga68/configure
index ce2c780ac324..705694a1891a 100755
--- a/libga68/configure
+++ b/libga68/configure
@@ -638,7 +638,12 @@ LIBGA68_BOEHM_GC_LIBS
 LIBGA68_BOEHM_GC_INCLUDES
 LIBGA68_GCFLAGS
 extra_darwin_ldflags_libga68
-libga68_VERSION
+LIBGA68_USE_SYMVER_SUN_FALSE
+LIBGA68_USE_SYMVER_SUN_TRUE
+LIBGA68_USE_SYMVER_GNU_FALSE
+LIBGA68_USE_SYMVER_GNU_TRUE
+LIBGA68_USE_SYMVER_FALSE
+LIBGA68_USE_SYMVER_TRUE
 SPEC_LIBGA68_DEPS
 get_gcc_base_ver
 CC_FOR_BUILD
@@ -646,6 +651,7 @@ enable_static
 enable_shared
 ENABLE_DARWIN_AT_RPATH_FALSE
 ENABLE_DARWIN_AT_RPATH_TRUE
+lt_host_flags
 OTOOL64
 OTOOL
 LIPO
@@ -798,6 +804,7 @@ with_gnu_ld
 enable_libtool_lock
 enable_darwin_at_rpath
 with_gcc_major_version_only
+enable_symvers
 enable_algol68_gc
 with_target_bdw_gc
 with_target_bdw_gc_include
@@ -1451,6 +1458,7 @@ Optional Features:
   --enable-darwin-at-rpath
                           install libraries with @rpath/library-name, requires
                           rpaths to be added to executables
+  --disable-symvers       disable symbol versioning for libga68
   --enable-algol68-gc     enable use of Boehm's garbage collector with the GNU
                           Algol runtime
 
@@ -12593,7 +12601,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12596 "configure"
+#line 12604 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12699,7 +12707,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12702 "configure"
+#line 12710 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12937,6 +12945,28 @@ CC="$lt_save_CC"
 
 
 
+
+
+case $host in
+  *-cygwin* | *-mingw*)
+    # 'host' will be top-level target in the case of a target lib,
+    # we must compare to with_cross_host to decide if this is a native
+    # or cross-compiler and select where to install dlls appropriately.
+    if test -n "$with_cross_host" &&
+       test x"$with_cross_host" != x"no"; then
+      lt_host_flags='-no-undefined -bindir "$(toolexeclibdir)"';
+    else
+      lt_host_flags='-no-undefined -bindir "$(bindir)"';
+    fi
+    ;;
+  *)
+    lt_host_flags=
+    ;;
+esac
+
+
+
+
  if test x$enable_darwin_at_rpath = xyes; then
   ENABLE_DARWIN_AT_RPATH_TRUE=
   ENABLE_DARWIN_AT_RPATH_FALSE='#'
@@ -13100,8 +13130,113 @@ fi
 SPEC_LIBGA68_DEPS="$LIBS"
 
 
-# libga68 soname version
-libga68_VERSION=2:0:0
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether symbol versioning is 
supported" >&5
+$as_echo_n "checking whether symbol versioning is supported... " >&6; }
+# Check whether --enable-symvers was given.
+if test "${enable_symvers+set}" = set; then :
+  enableval=$enable_symvers; ga68_use_symver=$enableval
+else
+  ga68_use_symver=yes
+fi
+
+if test "x$ga68_use_symver" != xno; then
+  if test x$gcc_no_link = xyes; then
+    # If we cannot link, we cannot build shared libraries, so do not use
+    # symbol versioning.
+    ga68_use_symver=no
+  else
+    save_LDFLAGS="$LDFLAGS"
+    LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
+    cat > conftest.map <<EOF
+FOO_1.0 {
+  global: *foo*; bar; local: *;
+};
+EOF
+    if test x$gcc_no_link = xyes; then
+  as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." 
"$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ga68_use_symver=gnu
+else
+  ga68_use_symver=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    if test x$ga68_use_symver = xno; then
+      case "$target_os" in
+        solaris2*)
+          LDFLAGS="$save_LDFLAGS"
+          LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
+          # Sun ld cannot handle wildcards and treats all entries as undefined.
+          cat > conftest.map <<EOF
+FOO_1.0 {
+  global: foo; local: *;
+};
+EOF
+          if test x$gcc_no_link = xyes; then
+  as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." 
"$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ga68_use_symver=sun
+else
+  ga68_use_symver=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+         ;;
+      esac
+    fi
+    LDFLAGS="$save_LDFLAGS"
+  fi
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga68_use_symver" >&5
+$as_echo "$ga68_use_symver" >&6; }
+ if test "x$ga68_use_symver" != xno; then
+  LIBGA68_USE_SYMVER_TRUE=
+  LIBGA68_USE_SYMVER_FALSE='#'
+else
+  LIBGA68_USE_SYMVER_TRUE='#'
+  LIBGA68_USE_SYMVER_FALSE=
+fi
+
+ if test "x$ga68_use_symver" = xgnu; then
+  LIBGA68_USE_SYMVER_GNU_TRUE=
+  LIBGA68_USE_SYMVER_GNU_FALSE='#'
+else
+  LIBGA68_USE_SYMVER_GNU_TRUE='#'
+  LIBGA68_USE_SYMVER_GNU_FALSE=
+fi
+
+ if test "x$ga68_use_symver" = xsun; then
+  LIBGA68_USE_SYMVER_SUN_TRUE=
+  LIBGA68_USE_SYMVER_SUN_FALSE='#'
+else
+  LIBGA68_USE_SYMVER_SUN_TRUE='#'
+  LIBGA68_USE_SYMVER_SUN_FALSE=
+fi
 
 
 # The Boehm GC
@@ -13477,6 +13612,18 @@ if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z 
"${ENABLE_DARWIN_AT_RPATH
   as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${LIBGA68_USE_SYMVER_TRUE}" && test -z 
"${LIBGA68_USE_SYMVER_FALSE}"; then
+  as_fn_error $? "conditional \"LIBGA68_USE_SYMVER\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${LIBGA68_USE_SYMVER_GNU_TRUE}" && test -z 
"${LIBGA68_USE_SYMVER_GNU_FALSE}"; then
+  as_fn_error $? "conditional \"LIBGA68_USE_SYMVER_GNU\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${LIBGA68_USE_SYMVER_SUN_TRUE}" && test -z 
"${LIBGA68_USE_SYMVER_SUN_FALSE}"; then
+  as_fn_error $? "conditional \"LIBGA68_USE_SYMVER_SUN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 
 : "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
diff --git a/libga68/configure.ac b/libga68/configure.ac
index 56ef197e5f40..5ff5e124f8f5 100644
--- a/libga68/configure.ac
+++ b/libga68/configure.ac
@@ -155,6 +155,7 @@ AC_PROG_INSTALL
 
 # Initialize libtool.
 LT_INIT
+ACX_LT_HOST_FLAGS
 
 AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = 
xyes])
 
@@ -162,7 +163,7 @@ AC_SUBST(enable_shared)
 AC_SUBST(enable_static)
 
 # Do compilation tests using the C compiler and preprocessor.
-AC_LANG_C([C])
+AC_LANG([C])
 
 # Allow the user to set CC_FOR_BUILD in the environment.
 CC_FOR_BUILD=${CC_FOR_BUILD:-gcc}
@@ -179,9 +180,51 @@ GCC_BASE_VER
 SPEC_LIBGA68_DEPS="$LIBS"
 AC_SUBST(SPEC_LIBGA68_DEPS)
 
-# libga68 soname version
-libga68_VERSION=2:0:0
-AC_SUBST(libga68_VERSION)
+AC_MSG_CHECKING([whether symbol versioning is supported])
+AC_ARG_ENABLE(symvers,
+AS_HELP_STRING([--disable-symvers],
+  [disable symbol versioning for libga68]),
+ga68_use_symver=$enableval,
+ga68_use_symver=yes)
+if test "x$ga68_use_symver" != xno; then
+  if test x$gcc_no_link = xyes; then
+    # If we cannot link, we cannot build shared libraries, so do not use
+    # symbol versioning.
+    ga68_use_symver=no
+  else
+    save_LDFLAGS="$LDFLAGS"
+    LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
+    cat > conftest.map <<EOF
+FOO_1.0 {
+  global: *foo*; bar; local: *;
+};
+EOF
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([[int foo;]], [[]])],
+                  [ga68_use_symver=gnu],[ga68_use_symver=no])
+    if test x$ga68_use_symver = xno; then
+      case "$target_os" in
+        solaris2*)
+          LDFLAGS="$save_LDFLAGS"
+          LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
+          # Sun ld cannot handle wildcards and treats all entries as undefined.
+          cat > conftest.map <<EOF
+FOO_1.0 {
+  global: foo; local: *;
+};
+EOF
+          AC_LINK_IFELSE([AC_LANG_PROGRAM([[int foo;]], [[]])],
+                        [ga68_use_symver=sun],[ga68_use_symver=no])
+         ;;
+      esac
+    fi
+    LDFLAGS="$save_LDFLAGS"
+  fi
+fi
+
+AC_MSG_RESULT($ga68_use_symver)
+AM_CONDITIONAL(LIBGA68_USE_SYMVER, [test "x$ga68_use_symver" != xno])
+AM_CONDITIONAL(LIBGA68_USE_SYMVER_GNU, [test "x$ga68_use_symver" = xgnu])
+AM_CONDITIONAL(LIBGA68_USE_SYMVER_SUN, [test "x$ga68_use_symver" = xsun])
 
 # The Boehm GC
 
diff --git a/libga68/ga68.map b/libga68/ga68.map
new file mode 100644
index 000000000000..f956655de031
--- /dev/null
+++ b/libga68/ga68.map
@@ -0,0 +1,41 @@
+LIBGA68_2.0 {
+  global:
+    _libga68_assert;
+    _libga68_bitsboundserror;
+    _libga68_bounds;
+    _libga68_bounds_mismatch;
+    _libga68_derefnil;
+    _libga68_dim;
+    _libga68_invalidcharerror;
+    _libga68_longlongrandom;
+    _libga68_longrandom;
+    _libga68_lower_bound;
+    _libga68_malloc;
+    _libga68_posixargc;
+    _libga68_posixargv;
+    _libga68_posixclose;
+    _libga68_posixcreat;
+    _libga68_posixerrno;
+    _libga68_posixfconnect;
+    _libga68_posixfgetc;
+    _libga68_posixfgets;
+    _libga68_posixfopen;
+    _libga68_posixfputc;
+    _libga68_posixfputs;
+    _libga68_posixfsize;
+    _libga68_posixgetchar;
+    _libga68_posixgetenv;
+    _libga68_posixgets;
+    _libga68_posixlseek;
+    _libga68_posixperror;
+    _libga68_posixputchar;
+    _libga68_posixputs;
+    _libga68_posixstrerror;
+    _libga68_random;
+    _libga68_set_exit_status;
+    _libga68_u32_cmp2;
+    _libga68_unreachable;
+    _libga68_upper_bound;
+  local:
+    *;
+};
diff --git a/libga68/libtool-version b/libga68/libtool-version
new file mode 100644
index 000000000000..1b1da6a4a412
--- /dev/null
+++ b/libga68/libtool-version
@@ -0,0 +1,6 @@
+# This file is used to maintain libtool version info for libga68.
+# See the libtool manual to understand the meaning of the fields.
+# This is a separate file so that version updates don't involve re-running
+# automake.
+# CURRENT:REVISION:AGE
+2:0:0

Reply via email to