Ads support for using a library spec file (e.g. to include the
target requirements for non-standard libraries - or even libm
which we can now configure at the target side).

gcc/cobol/ChangeLog:

        * gcobolspec.cc (SPEC_FILE): New.
        (lang_specific_driver): Make the 'need libgcobol' flag global
        so that the prelink callback can use it. Libm use is now handled
        via the library spec.
        (lang_specific_pre_link): Include libgcobol.spec where needed.

libgcobol/ChangeLog:

        * Makefile.am: Add libgcobol.spec and dependency.
        * Makefile.in: Regenerate.
        * configure: Regenerate.
        * configure.ac: Add libgcobol.spec handling.
        * libgcobol.spec.in: New file.

Signed-off-by: Iain Sandoe <i...@sandoe.co.uk>
---
 gcc/cobol/gcobolspec.cc     | 41 ++++++++++---------------------
 libgcobol/Makefile.am       |  2 ++
 libgcobol/Makefile.in       | 48 ++++++++++++++++++++++++++++++-------
 libgcobol/configure         | 12 +++++-----
 libgcobol/configure.ac      | 16 +++++++------
 libgcobol/libgcobol.spec.in |  8 +++++++
 6 files changed, 78 insertions(+), 49 deletions(-)
 create mode 100644 libgcobol/libgcobol.spec.in

diff --git a/gcc/cobol/gcobolspec.cc b/gcc/cobol/gcobolspec.cc
index 94350bb0757..af3bfb9a922 100644
--- a/gcc/cobol/gcobolspec.cc
+++ b/gcc/cobol/gcobolspec.cc
@@ -57,10 +57,6 @@ along with GCC; see the file COPYING3.  If not see
 
 int lang_specific_extra_outfiles = 0;
 
-#ifndef MATH_LIBRARY
-#define MATH_LIBRARY "m"
-#endif
-
 #ifndef DL_LIBRARY
 #define DL_LIBRARY "dl"
 #endif
@@ -73,12 +69,16 @@ int lang_specific_extra_outfiles = 0;
 #define COBOL_LIBRARY "gcobol"
 #endif
 
+#define SPEC_FILE "libgcobol.spec"
+
 /* The original argument list and related info is copied here.  */
 static const struct cl_decoded_option *original_options;
 
 /* The new argument list will be built here.  */
 static std::vector<cl_decoded_option>new_opt;
 
+static bool need_libgcobol = true;
+
 // #define NOISY 1
 
 static void
@@ -195,8 +195,6 @@ lang_specific_driver (struct cl_decoded_option 
**in_decoded_options,
 
   // These flags indicate whether we need various libraries
 
-  bool need_libgcobol   = true;
-  bool need_libmath     = (MATH_LIBRARY[0] != '\0');
   bool need_libdl       = (DL_LIBRARY[0] != '\0');
   bool need_libstdc     = (STDCPP_LIBRARY[0] != '\0');
   // bool need_libquadmath = (QUADMATH_LIBRARY[0] != '\0');
@@ -304,7 +302,6 @@ lang_specific_driver (struct cl_decoded_option 
**in_decoded_options,
         // With this option, no libraries need be loaded
         saw_OPT_c = true;
         need_libgcobol   = false;
-        need_libmath     = false;
         need_libdl       = false;
         need_libstdc     = false;
         // need_libquadmath = false;
@@ -331,7 +328,6 @@ lang_specific_driver (struct cl_decoded_option 
**in_decoded_options,
       case OPT_E:
         // With these options, no libraries need be loaded
         need_libgcobol   = false;
-        need_libmath     = false;
         need_libdl       = false;
         need_libstdc     = false;
         // need_libquadmath = false;
@@ -345,11 +341,7 @@ lang_specific_driver (struct cl_decoded_option 
**in_decoded_options,
 
       case OPT_l:
         n_infiles += 1;
-        if(strcmp(decoded_options[i].arg, MATH_LIBRARY) == 0)
-          {
-          need_libmath = false;
-          }
-        else if(strcmp(decoded_options[i].arg, DL_LIBRARY) == 0)
+        if(strcmp(decoded_options[i].arg, DL_LIBRARY) == 0)
           {
           need_libdl = false;
           }
@@ -455,7 +447,6 @@ lang_specific_driver (struct cl_decoded_option 
**in_decoded_options,
   if( n_infiles == 0 )
     {
     need_libgcobol   = false;
-    need_libmath     = false;
     need_libdl       = false;
     need_libstdc     = false;
     // need_libquadmath = false;
@@ -592,11 +583,7 @@ lang_specific_driver (struct cl_decoded_option 
**in_decoded_options,
     {
     add_arg_lib(COBOL_LIBRARY, static_libgcobol);
     }
-  if( need_libmath)
-    {
-    add_arg_lib(MATH_LIBRARY, static_in_general);
-    }
-  if( need_libdl   )
+  if( need_libdl )
     {
     add_arg_lib(DL_LIBRARY, static_in_general);
     }
@@ -658,14 +645,12 @@ lang_specific_driver (struct cl_decoded_option 
**in_decoded_options,
   *in_decoded_options = new_options;
   }
 
-/*
- * Called before linking.
- * Returns 0 on success and -1 on failure.
- * Unused.
- */
+/* Called before linking.  Returns 0 on success and -1 on failure.  */
 int
-lang_specific_pre_link( void )
-    {
-    return 0;
-    }
+lang_specific_pre_link (void)
+{
+  if (need_libgcobol)
+    do_spec ("%:include(libgcobol.spec)");
 
+  return 0;
+}
diff --git a/libgcobol/Makefile.am b/libgcobol/Makefile.am
index 36345320e9c..042a2f12b81 100644
--- a/libgcobol/Makefile.am
+++ b/libgcobol/Makefile.am
@@ -28,6 +28,7 @@ gcc_version := $(shell @get_gcc_base_ver@ 
$(top_srcdir)/../gcc/BASE-VER)
 # Skip the whole process if we are not building libgcobol.
 if BUILD_LIBGCOBOL
 toolexeclib_LTLIBRARIES  = libgcobol.la
+toolexeclib_DATA = libgcobol.spec
 
 ##
 ## 2.2.12 Automatic Dependency Tracking
@@ -64,5 +65,6 @@ version_arg = -version-info $(LIBGCOBOL_VERSION)
 libgcobol_la_LDFLAGS = $(LTLDFLAGS) $(LTLIBICONV) \
        $(extra_ldflags_libgcobol) $(LIBS) \
        $(version_arg)
+libgcobol_la_DEPENDENCIES = libgcobol.spec
 
 endif BUILD_LIBGCOBOL
diff --git a/libgcobol/Makefile.in b/libgcobol/Makefile.in
index 6694d98ce73..88158cbf377 100644
--- a/libgcobol/Makefile.in
+++ b/libgcobol/Makefile.in
@@ -35,6 +35,7 @@
 
 # Written de novo for libgcobol.
 
+
 VPATH = @srcdir@
 am__is_gnu_make = { \
   if test -z '$(MAKELEVEL)'; then \
@@ -141,7 +142,7 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache 
config.log \
  configure.lineno config.status.lineno
 mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
 CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_FILES = libgcobol.spec
 CONFIG_CLEAN_VPATH_FILES =
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
@@ -170,7 +171,8 @@ am__uninstall_files_from_dir = { \
     || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
-am__installdirs = "$(DESTDIR)$(toolexeclibdir)"
+am__installdirs = "$(DESTDIR)$(toolexeclibdir)" \
+       "$(DESTDIR)$(toolexeclibdir)"
 LTLIBRARIES = $(toolexeclib_LTLIBRARIES)
 libgcobol_la_LIBADD =
 @BUILD_LIBGCOBOL_TRUE@am_libgcobol_la_OBJECTS = charmaps.lo \
@@ -223,6 +225,7 @@ am__can_run_installinfo = \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+DATA = $(toolexeclib_DATA)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
        $(LISP)config.h.in
 # Read a list of newline-separated strings from the standard input,
@@ -312,6 +315,7 @@ RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SPEC_LIBGCOBOL_DEPS = @SPEC_LIBGCOBOL_DEPS@
 STRIP = @STRIP@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
@@ -386,6 +390,7 @@ gcc_version := $(shell @get_gcc_base_ver@ 
$(top_srcdir)/../gcc/BASE-VER)
 
 # Skip the whole process if we are not building libgcobol.
 @BUILD_LIBGCOBOL_TRUE@toolexeclib_LTLIBRARIES = libgcobol.la
+@BUILD_LIBGCOBOL_TRUE@toolexeclib_DATA = libgcobol.spec
 @BUILD_LIBGCOBOL_TRUE@libgcobol_la_SOURCES = \
 @BUILD_LIBGCOBOL_TRUE@ charmaps.cc                             \
 @BUILD_LIBGCOBOL_TRUE@ constants.cc                            \
@@ -409,6 +414,7 @@ gcc_version := $(shell @get_gcc_base_ver@ 
$(top_srcdir)/../gcc/BASE-VER)
 @BUILD_LIBGCOBOL_TRUE@ $(extra_ldflags_libgcobol) $(LIBS) \
 @BUILD_LIBGCOBOL_TRUE@ $(version_arg)
 
+@BUILD_LIBGCOBOL_TRUE@libgcobol_la_DEPENDENCIES = libgcobol.spec
 all: config.h
        $(MAKE) $(AM_MAKEFLAGS) all-am
 
@@ -462,6 +468,8 @@ $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ 
$(am__configure_deps)
 
 distclean-hdr:
        -rm -f config.h stamp-h1
+libgcobol.spec: $(top_builddir)/config.status $(srcdir)/libgcobol.spec.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
 
 install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES)
        @$(NORMAL_INSTALL)
@@ -545,6 +553,27 @@ clean-libtool:
 
 distclean-libtool:
        -rm -f libtool config.lt
+install-toolexeclibDATA: $(toolexeclib_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(toolexeclib_DATA)'; test -n "$(toolexeclibdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(toolexeclibdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(toolexeclibdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(toolexeclibdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(toolexeclibdir)" || exit $$?; \
+       done
+
+uninstall-toolexeclibDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(toolexeclib_DATA)'; test -n "$(toolexeclibdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(toolexeclibdir)'; $(am__uninstall_files_from_dir)
 
 ID: $(am__tagged_files)
        $(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -606,9 +635,9 @@ distclean-tags:
        -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
 check-am: all-am
 check: check-am
-all-am: Makefile $(LTLIBRARIES) config.h
+all-am: Makefile $(LTLIBRARIES) $(DATA) config.h
 installdirs:
-       for dir in "$(DESTDIR)$(toolexeclibdir)"; do \
+       for dir in "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(toolexeclibdir)"; 
do \
          test -z "$$dir" || $(MKDIR_P) "$$dir"; \
        done
 install: install-am
@@ -671,7 +700,8 @@ install-dvi: install-dvi-am
 
 install-dvi-am:
 
-install-exec-am: install-toolexeclibLTLIBRARIES
+install-exec-am: install-toolexeclibDATA \
+       install-toolexeclibLTLIBRARIES
 
 install-html: install-html-am
 
@@ -713,7 +743,8 @@ ps: ps-am
 
 ps-am:
 
-uninstall-am: uninstall-toolexeclibLTLIBRARIES
+uninstall-am: uninstall-toolexeclibDATA \
+       uninstall-toolexeclibLTLIBRARIES
 
 .MAKE: all install-am install-strip
 
@@ -726,12 +757,13 @@ uninstall-am: uninstall-toolexeclibLTLIBRARIES
        install-data-am install-dvi install-dvi-am install-exec \
        install-exec-am install-html install-html-am install-info \
        install-info-am install-man install-pdf install-pdf-am \
-       install-ps install-ps-am install-strip \
+       install-ps install-ps-am install-strip install-toolexeclibDATA \
        install-toolexeclibLTLIBRARIES installcheck installcheck-am \
        installdirs maintainer-clean maintainer-clean-generic \
        mostlyclean mostlyclean-compile mostlyclean-generic \
        mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
-       uninstall-am uninstall-toolexeclibLTLIBRARIES
+       uninstall-am uninstall-toolexeclibDATA \
+       uninstall-toolexeclibLTLIBRARIES
 
 .PRECIOUS: Makefile
 
diff --git a/libgcobol/configure b/libgcobol/configure
index 0a6bafe265b..acf78646d5b 100755
--- a/libgcobol/configure
+++ b/libgcobol/configure
@@ -630,11 +630,11 @@ ac_includes_default="\
 #endif"
 
 ac_func_list=
-ac_unique_file="Makefile.am"
 ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
 LIBOBJS
+SPEC_LIBGCOBOL_DEPS
 get_gcc_base_ver
 extra_ldflags_libgcobol
 LIBGCOBOL_VERSION
@@ -17720,14 +17720,13 @@ fi
 
 
 
-# Add dependencies for libgcobol.spec file
-#SPEC_LIBGCOBOL_DEPS="$LIBS"
-#AC_SUBST(SPEC_LIBGCOBOL_DEPS)
+# Add dependencies for libgcobol.spec file, this might be excessive - since
+# the spec file might not use all of them.
+SPEC_LIBGCOBOL_DEPS="$LIBS"
 
 
-ac_config_files="$ac_config_files Makefile"
+ac_config_files="$ac_config_files Makefile libgcobol.spec"
 
-####AC_CONFIG_FILES(libgcobol.spec)
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: libgcobol has been configured." >&5
 $as_echo "$as_me: libgcobol has been configured." >&6;}
@@ -18856,6 +18855,7 @@ do
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "libgcobol.spec") CONFIG_FILES="$CONFIG_FILES libgcobol.spec" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
diff --git a/libgcobol/configure.ac b/libgcobol/configure.ac
index 7396a2e3527..0356f9e9c67 100644
--- a/libgcobol/configure.ac
+++ b/libgcobol/configure.ac
@@ -207,13 +207,15 @@ fi
 # Determine what GCC version number to use in filesystem paths.
 GCC_BASE_VER
 
-# Add dependencies for libgcobol.spec file
-#SPEC_LIBGCOBOL_DEPS="$LIBS"
-#AC_SUBST(SPEC_LIBGCOBOL_DEPS)
-
-AC_CONFIG_SRCDIR([Makefile.am])
-AC_CONFIG_FILES([Makefile])
-####AC_CONFIG_FILES(libgcobol.spec)
+# Add dependencies for libgcobol.spec file, this might be excessive - since
+# the spec file might not use all of them.
+SPEC_LIBGCOBOL_DEPS="$LIBS"
+AC_SUBST(SPEC_LIBGCOBOL_DEPS)
+
+AC_CONFIG_FILES([
+Makefile
+libgcobol.spec
+])
 
 AC_MSG_NOTICE([libgcobol has been configured.])
 
diff --git a/libgcobol/libgcobol.spec.in b/libgcobol/libgcobol.spec.in
new file mode 100644
index 00000000000..e8ccc0db0dd
--- /dev/null
+++ b/libgcobol/libgcobol.spec.in
@@ -0,0 +1,8 @@
+#
+# This spec file is read by gcobol when linking.
+# It is used to specify the libraries we need to link in, in the right
+# order.
+#
+
+%rename lib liborig
+*lib: @LIBM@ %(liborig)
-- 
2.39.2 (Apple Git-143)

Reply via email to