Hi,

The libgdruntime_convenience library was built with `-fversion=Shared',
but the libphobos part wasn't when creating the static library.

As there are no issues compiling in Shared code into the static library,
to avoid mismatches the flag is now always present when --enable-shared
is turned on.  Libtool's compiler PIC D flag is now the combination of
compiler PIC and D Shared flags, and AM_DFLAGS passes `-prefer-pic' to
libtool unless --enable-shared is turned off.

Bootstrapped and regression tested on x86_64-linux-gnu/-m32/-mx32, and
committed to mainline.

Regards,
Iain

---
libphobos/ChangeLog:

        * Makefile.in: Regenerate.
        * configure: Regenerate.
        * configure.ac: Substitute enable_shared, enable_static, and
        phobos_lt_pic_flag.
        * libdruntime/Makefile.am (AM_DFLAGS): Replace
          phobos_compiler_pic_flag with phobos_lt_pic_flags, and
          phobos_compiler_shared_flag.
        * libdruntime/Makefile.in: Regenerate.
        * src/Makefile.am (AM_DFLAGS): Replace phobos_compiler_pic_flag
          with phobos_lt_pic_flag, and phobos_compiler_shared_flag.
        * src/Makefile.in: Regenerate.
        * testsuite/Makefile.in: Regenerate.
        * testsuite/libphobos.druntime_shared/druntime_shared.exp: Remove
        -fversion=Shared and -fno-moduleinfo from default extra test flags.
        * testsuite/libphobos.phobos_shared/phobos_shared.exp: Likewise.
        * testsuite/testsuite_flags.in: Add phobos_compiler_shared_flag to
        --gdcflags.
---
 libphobos/Makefile.in                         |  3 +++
 libphobos/configure                           | 24 ++++++++++++-------
 libphobos/configure.ac                        | 17 +++++++------
 libphobos/libdruntime/Makefile.am             |  2 +-
 libphobos/libdruntime/Makefile.in             |  5 +++-
 libphobos/src/Makefile.am                     |  2 +-
 libphobos/src/Makefile.in                     |  5 +++-
 libphobos/testsuite/Makefile.in               |  3 +++
 .../druntime_shared.exp                       |  4 ++--
 .../libphobos.phobos_shared/phobos_shared.exp |  4 ++--
 libphobos/testsuite/testsuite_flags.in        |  3 ++-
 11 files changed, 47 insertions(+), 25 deletions(-)

diff --git a/libphobos/Makefile.in b/libphobos/Makefile.in
index d42248405a2..eab12688867 100644
--- a/libphobos/Makefile.in
+++ b/libphobos/Makefile.in
@@ -298,6 +298,8 @@ datadir = @datadir@
 datarootdir = @datarootdir@
 docdir = @docdir@
 dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
 exec_prefix = @exec_prefix@
 gcc_version = @gcc_version@
 gdc_include_dir = @gdc_include_dir@
@@ -327,6 +329,7 @@ oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 phobos_compiler_pic_flag = @phobos_compiler_pic_flag@
 phobos_compiler_shared_flag = @phobos_compiler_shared_flag@
+phobos_lt_pic_flag = @phobos_lt_pic_flag@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
diff --git a/libphobos/configure b/libphobos/configure
index c940a404be4..59ca64aa1e0 100755
--- a/libphobos/configure
+++ b/libphobos/configure
@@ -705,6 +705,9 @@ libphobos_builddir
 get_gcc_base_ver
 phobos_compiler_shared_flag
 phobos_compiler_pic_flag
+phobos_lt_pic_flag
+enable_static
+enable_shared
 OTOOL64
 OTOOL
 LIPO
@@ -11746,7 +11749,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11749 "configure"
+#line 11752 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11852,7 +11855,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11855 "configure"
+#line 11858 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -13997,8 +14000,14 @@ CFLAGS=$lt_save_CFLAGS
   GDCFLAGS=$gdc_save_DFLAGS
 
 
+
+
 # libtool variables for Phobos shared and position-independent compiles.
 #
+# Use phobos_lt_pic_flag to designate the automake variable
+# used to encapsulate the default libtool approach to creating objects
+# with position-independent code. Default: -prefer-pic.
+#
 # Use phobos_compiler_shared_flag to designate the compile-time flags for
 # creating shared objects. Default: -fversion=Shared.
 #
@@ -14010,26 +14019,23 @@ CFLAGS=$lt_save_CFLAGS
 # libtool, and so we make it here.  How it is handled is that in shared
 # compilations the `lt_prog_compiler_pic_D' variable is used to instead
 # ensure that conditional compilation of shared runtime code is compiled in.
-# The original PIC flags are then used in the compilation of every object.
-#
-# Why are objects destined for libgphobos.a compiled with -fPIC?
-# Because -fPIC is not harmful to use for objects destined for static
-# libraries. In addition, using -fPIC will allow the use of static
-# libgphobos.a in the creation of other D shared libraries.
 if test "$enable_shared" = yes; then
+  phobos_lt_pic_flag="-prefer-pic"
   phobos_compiler_pic_flag="$lt_prog_compiler_pic_D"
   phobos_compiler_shared_flag="-fversion=Shared"
 else
+  phobos_lt_pic_flag=
   phobos_compiler_pic_flag=
   phobos_compiler_shared_flag=
 fi
 
 
 
+
 # Override the libtool's pic_flag and pic_mode.
 # Do this step after AM_PROG_LIBTOOL, but before AC_OUTPUT.
 # NB: this impacts --with-pic and --without-pic.
-lt_prog_compiler_pic_D="$phobos_compiler_shared_flag"
+lt_prog_compiler_pic_D="$phobos_compiler_pic_flag $phobos_compiler_shared_flag"
 pic_mode='default'
 
 # Determine what GCC version number to use in filesystem paths.
diff --git a/libphobos/configure.ac b/libphobos/configure.ac
index cc9af29754f..248d0ebbc19 100644
--- a/libphobos/configure.ac
+++ b/libphobos/configure.ac
@@ -91,9 +91,15 @@ AC_SUBST(CFLAGS_FOR_BUILD)
 LT_INIT(dlopen)
 AM_PROG_LIBTOOL
 WITH_LOCAL_DRUNTIME([LT_LANG([D])], [])
+AC_SUBST(enable_shared)
+AC_SUBST(enable_static)
 
 # libtool variables for Phobos shared and position-independent compiles.
 #
+# Use phobos_lt_pic_flag to designate the automake variable
+# used to encapsulate the default libtool approach to creating objects
+# with position-independent code. Default: -prefer-pic.
+#
 # Use phobos_compiler_shared_flag to designate the compile-time flags for
 # creating shared objects. Default: -fversion=Shared.
 #
@@ -105,26 +111,23 @@ WITH_LOCAL_DRUNTIME([LT_LANG([D])], [])
 # libtool, and so we make it here.  How it is handled is that in shared
 # compilations the `lt_prog_compiler_pic_D' variable is used to instead
 # ensure that conditional compilation of shared runtime code is compiled in.
-# The original PIC flags are then used in the compilation of every object.
-#
-# Why are objects destined for libgphobos.a compiled with -fPIC?
-# Because -fPIC is not harmful to use for objects destined for static
-# libraries. In addition, using -fPIC will allow the use of static
-# libgphobos.a in the creation of other D shared libraries.
 if test "$enable_shared" = yes; then
+  phobos_lt_pic_flag="-prefer-pic"
   phobos_compiler_pic_flag="$lt_prog_compiler_pic_D"
   phobos_compiler_shared_flag="-fversion=Shared"
 else
+  phobos_lt_pic_flag=
   phobos_compiler_pic_flag=
   phobos_compiler_shared_flag=
 fi
+AC_SUBST(phobos_lt_pic_flag)
 AC_SUBST(phobos_compiler_pic_flag)
 AC_SUBST(phobos_compiler_shared_flag)
 
 # Override the libtool's pic_flag and pic_mode.
 # Do this step after AM_PROG_LIBTOOL, but before AC_OUTPUT.
 # NB: this impacts --with-pic and --without-pic.
-lt_prog_compiler_pic_D="$phobos_compiler_shared_flag"
+lt_prog_compiler_pic_D="$phobos_compiler_pic_flag $phobos_compiler_shared_flag"
 pic_mode='default'
 
 # Determine what GCC version number to use in filesystem paths.
diff --git a/libphobos/libdruntime/Makefile.am 
b/libphobos/libdruntime/Makefile.am
index 945271e028f..535ca26e860 100644
--- a/libphobos/libdruntime/Makefile.am
+++ b/libphobos/libdruntime/Makefile.am
@@ -23,7 +23,7 @@ D_EXTRA_DFLAGS=-nostdinc -I $(srcdir) -I .
 
 # D flags for compilation
 AM_DFLAGS= \
-       $(phobos_compiler_pic_flag) \
+       $(phobos_lt_pic_flag) $(phobos_compiler_shared_flag) \
        $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(CET_DFLAGS)
 
 # Flags for other kinds of sources
diff --git a/libphobos/libdruntime/Makefile.in 
b/libphobos/libdruntime/Makefile.in
index 06c02961c86..7960add41d8 100644
--- a/libphobos/libdruntime/Makefile.in
+++ b/libphobos/libdruntime/Makefile.in
@@ -659,6 +659,8 @@ datadir = @datadir@
 datarootdir = @datarootdir@
 docdir = @docdir@
 dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
 exec_prefix = @exec_prefix@
 gcc_version = @gcc_version@
 gdc_include_dir = @gdc_include_dir@
@@ -688,6 +690,7 @@ oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 phobos_compiler_pic_flag = @phobos_compiler_pic_flag@
 phobos_compiler_shared_flag = @phobos_compiler_shared_flag@
+phobos_lt_pic_flag = @phobos_lt_pic_flag@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
@@ -720,7 +723,7 @@ D_EXTRA_DFLAGS = -nostdinc -I $(srcdir) -I .
 
 # D flags for compilation
 AM_DFLAGS = \
-       $(phobos_compiler_pic_flag) \
+       $(phobos_lt_pic_flag) $(phobos_compiler_shared_flag) \
        $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(CET_DFLAGS)
 
 
diff --git a/libphobos/src/Makefile.am b/libphobos/src/Makefile.am
index 2de8ab951b4..0dc2a2625a9 100644
--- a/libphobos/src/Makefile.am
+++ b/libphobos/src/Makefile.am
@@ -24,7 +24,7 @@ D_EXTRA_DFLAGS=-nostdinc -I $(srcdir) \
 
 # D flags for compilation
 AM_DFLAGS= \
-       $(phobos_compiler_pic_flag) \
+       $(phobos_lt_pic_flag) $(phobos_compiler_shared_flag) \
        $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(CET_DFLAGS)
 
 # Flags for other kinds of sources
diff --git a/libphobos/src/Makefile.in b/libphobos/src/Makefile.in
index 2e721783d06..33453517153 100644
--- a/libphobos/src/Makefile.in
+++ b/libphobos/src/Makefile.in
@@ -414,6 +414,8 @@ datadir = @datadir@
 datarootdir = @datarootdir@
 docdir = @docdir@
 dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
 exec_prefix = @exec_prefix@
 gcc_version = @gcc_version@
 gdc_include_dir = @gdc_include_dir@
@@ -443,6 +445,7 @@ oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 phobos_compiler_pic_flag = @phobos_compiler_pic_flag@
 phobos_compiler_shared_flag = @phobos_compiler_shared_flag@
+phobos_lt_pic_flag = @phobos_lt_pic_flag@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
@@ -477,7 +480,7 @@ D_EXTRA_DFLAGS = -nostdinc -I $(srcdir) \
 
 # D flags for compilation
 AM_DFLAGS = \
-       $(phobos_compiler_pic_flag) \
+       $(phobos_lt_pic_flag) $(phobos_compiler_shared_flag) \
        $(WARN_DFLAGS) $(CHECKING_DFLAGS) $(CET_DFLAGS)
 
 
diff --git a/libphobos/testsuite/Makefile.in b/libphobos/testsuite/Makefile.in
index c38a4688258..51eb4efc79d 100644
--- a/libphobos/testsuite/Makefile.in
+++ b/libphobos/testsuite/Makefile.in
@@ -242,6 +242,8 @@ datadir = @datadir@
 datarootdir = @datarootdir@
 docdir = @docdir@
 dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
 exec_prefix = @exec_prefix@
 gcc_version = @gcc_version@
 gdc_include_dir = @gdc_include_dir@
@@ -271,6 +273,7 @@ oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 phobos_compiler_pic_flag = @phobos_compiler_pic_flag@
 phobos_compiler_shared_flag = @phobos_compiler_shared_flag@
+phobos_lt_pic_flag = @phobos_lt_pic_flag@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
diff --git a/libphobos/testsuite/libphobos.druntime_shared/druntime_shared.exp 
b/libphobos/testsuite/libphobos.druntime_shared/druntime_shared.exp
index 6ca62a3ea39..2b2561346db 100644
--- a/libphobos/testsuite/libphobos.druntime_shared/druntime_shared.exp
+++ b/libphobos/testsuite/libphobos.druntime_shared/druntime_shared.exp
@@ -34,8 +34,8 @@ dg-init
 # Main loop.
 foreach test $tests {
     set libphobos_test_name "$subdir/[dg-trim-dirname $srcdir/../libdruntime 
$test]"
-    dg-runtest $test "-fversion=Shared -shared-libphobos" \
-       "-fmain -fbuilding-libphobos-tests -fno-moduleinfo $version_flags"
+    dg-runtest $test "-shared-libphobos" \
+       "-fmain -fbuilding-libphobos-tests $version_flags"
     set libphobos_test_name ""
 }
 
diff --git a/libphobos/testsuite/libphobos.phobos_shared/phobos_shared.exp 
b/libphobos/testsuite/libphobos.phobos_shared/phobos_shared.exp
index da313044908..3a847e71e98 100644
--- a/libphobos/testsuite/libphobos.phobos_shared/phobos_shared.exp
+++ b/libphobos/testsuite/libphobos.phobos_shared/phobos_shared.exp
@@ -45,8 +45,8 @@ dg-init
 # Main loop.
 foreach test $tests {
     set libphobos_test_name "$subdir/[dg-trim-dirname $srcdir/../src $test]"
-    dg-runtest $test "-fversion=Shared -shared-libphobos" \
-       "-fmain -fbuilding-libphobos-tests -fno-moduleinfo $version_flags"
+    dg-runtest $test "-shared-libphobos" \
+       "-fmain -fbuilding-libphobos-tests $version_flags"
     set libphobos_test_name ""
 }
 
diff --git a/libphobos/testsuite/testsuite_flags.in 
b/libphobos/testsuite/testsuite_flags.in
index 6a2d79f0cd2..bafd5ad4502 100755
--- a/libphobos/testsuite/testsuite_flags.in
+++ b/libphobos/testsuite/testsuite_flags.in
@@ -28,7 +28,8 @@ case ${query} in
       ;;
     --gdcflags)
       GDCFLAGS_default="-fmessage-length=0 -fno-show-column"
-      GDCFLAGS_config="@WARN_DFLAGS@ @GDCFLAGS@ @CET_DFLAGS@ -fno-release 
-funittest"
+      GDCFLAGS_config="@WARN_DFLAGS@ @GDCFLAGS@ @CET_DFLAGS@
+                      @phobos_compiler_shared_flag@ -fno-release -funittest"
       echo ${GDCFLAGS_default} ${GDCFLAGS_config}
       ;;
     --gdcpaths)
-- 
2.27.0

Reply via email to