(perl #131786) avoid a duplicate symbol error on _LIB_VERSION
authorTony Cook <tony@develop-help.com>
Wed, 2 Aug 2017 06:15:06 +0000 (16:15 +1000)
committerTony Cook <tony@develop-help.com>
Thu, 10 Aug 2017 01:32:59 +0000 (11:32 +1000)
For -flto -mieee-fp builds, the _LIB_VERSION definition in perl.c and
in libieee conflict, causing a build failure.

The test we perform in Configure checks only that such a variable exists
(and is declared), it doesn't check that we can *define* such a variable,
which the code in pp.c tried to do.

So rather than trying to define the variable, just initialize it during
our normal interpreter initialization.

perl.c
pp.c

diff --git a/perl.c b/perl.c
index 4370f48..563fb3b 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -286,6 +286,14 @@ perl_construct(pTHXx)
     PL_localpatches = local_patches;   /* For possible -v */
 #endif
 
+#if defined(LIBM_LIB_VERSION)
+    /*
+     * Some BSDs and Cygwin default to POSIX math instead of IEEE.
+     * This switches them over to IEEE.
+     */
+    _LIB_VERSION = _IEEE_;
+#endif
+
 #ifdef HAVE_INTERP_INTERN
     sys_intern_init();
 #endif
diff --git a/pp.c b/pp.c
index 8e27eac..46366c3 100644 (file)
--- a/pp.c
+++ b/pp.c
 extern Pid_t getpid (void);
 #endif
 
-/*
- * Some BSDs and Cygwin default to POSIX math instead of IEEE.
- * This switches them over to IEEE.
- */
-#if defined(LIBM_LIB_VERSION)
-    _LIB_VERSION_TYPE _LIB_VERSION = _IEEE_;
-#endif
-
 static const STRLEN small_mu_len = sizeof(GREEK_SMALL_LETTER_MU_UTF8) - 1;
 static const STRLEN capital_iota_len = sizeof(GREEK_CAPITAL_LETTER_IOTA_UTF8) - 1;