diff mbox series

[1,2] Darwin : Update libtool and dependencies for Darwin20 [PR97865]

Message ID A28140B6-CD5F-4D35-9818-45587208A9AF@sandoe.co.uk
State New
Headers show
Series [1,2] Darwin : Update libtool and dependencies for Darwin20 [PR97865] | expand

Commit Message

Iain Sandoe Nov. 23, 2020, 8:01 p.m. UTC
Hi

This fixes a blocker for x86_64 darwin20 (a.k.a macOS 11)
It is needed on all open branches too.

(probably this comes under my Dariwn hat - but since it involves
  regenerating all the configure scripts… I’d welcome another pair
  of eyes)

tested on:
darwin8-darwin20, powerpc, i686, x86_64, arm64(aarch64).
aix (cfarm gcc119), aarch64 (cfarm gcc115), powerpc64 (BE) - (cfarm gcc110)
powerpc64 (LE) - (cfarm gcc135), sparc solaris 2.11 (gcc211)
x86_64-linux-gnu (cfarm gcc123)

OK for master?

OK for backports?

thanks
iain

N.B. I am attaching the second patch which is the uninteresting regenerated  
files.

=====

The change in major version (and the increment from Darwin19 to 20)
caused libtool tests to fail which resulted in incorrect build settings
for shared libraries.

We take this opportunity to sort out the shared undefined symbols state
rather than propagating the current unsound behaviour into a new rev.

This change means that we default to the case that missing symbols are
considered an error, and if one wants to allow this intentionally, the
confiuration for that case should be set appropriately.

We use intentional missing symbols to emulate the ELF behaviour when
we have a weak undefined extern.

So, three existing cases need undefined dynamic lookup:
  libitm, where there is already a configuration mechanism to add the
          flags.
  libsanitizer, likewise
  libcc1, where we add simple configuration to add the flags for Darwin.

libcc1/ChangeLog:

	PR target/97865
	* Makefile.am: Add dynamic_lookup to LD flags for Darwin.
	* configure.ac: Test for Darwin host and set a flag.

libitm/ChangeLog:

	PR target/97865
	* configure.tgt: Add dynamic_lookup to XLDFLAGS for Darwin.

libsanitizer/ChangeLog:

	PR target/97865
	* configure.tgt: Add dynamic_lookup to EXTRA_CXXFLAGS for
	Darwin.

ChangeLog:

	PR target/97865
	* libtool.m4: Update handling of Darwin platform link flags
	for Darwin20.


---
  libcc1/Makefile.am         |  3 +++
  libcc1/configure.ac        |  6 ++++++
  libitm/configure.tgt       |  9 ++++++++-
  libsanitizer/configure.tgt |  1 +
  libtool.m4                 | 32 +++++++++++++++++---------------
  5 files changed, 35 insertions(+), 16 deletions(-)

      ;;
    esac
      if test "$lt_cv_apple_cc_single_mod" = "yes"; then
@@ -1033,7 +1035,7 @@ _LT_EOF
 
  # _LT_DARWIN_LINKER_FEATURES
  # --------------------------
-# Checks for linker and compiler features on darwin
+# Checks for linker and compiler features on darwin / macos / ios
  m4_defun([_LT_DARWIN_LINKER_FEATURES],
  [
    m4_require([_LT_REQUIRED_DARWIN_CHECKS])

Comments

Jonathan Wakely Nov. 24, 2020, 10:47 a.m. UTC | #1
On 23/11/20 20:01 +0000, Iain Sandoe wrote:
>Hi
>
>This fixes a blocker for x86_64 darwin20 (a.k.a macOS 11)
>It is needed on all open branches too.
>
>(probably this comes under my Dariwn hat - but since it involves
> regenerating all the configure scripts… I’d welcome another pair
> of eyes)
>
>tested on:
>darwin8-darwin20, powerpc, i686, x86_64, arm64(aarch64).
>aix (cfarm gcc119), aarch64 (cfarm gcc115), powerpc64 (BE) - (cfarm gcc110)
>powerpc64 (LE) - (cfarm gcc135), sparc solaris 2.11 (gcc211)
>x86_64-linux-gnu (cfarm gcc123)
>
>OK for master?
>
>OK for backports?
>
>thanks
>iain
>
>N.B. I am attaching the second patch which is the uninteresting 
>regenerated files.
>
>=====
>
>The change in major version (and the increment from Darwin19 to 20)
>caused libtool tests to fail which resulted in incorrect build settings
>for shared libraries.
>
>We take this opportunity to sort out the shared undefined symbols state
>rather than propagating the current unsound behaviour into a new rev.
>
>This change means that we default to the case that missing symbols are
>considered an error, and if one wants to allow this intentionally, the
>confiuration for that case should be set appropriately.
>
>We use intentional missing symbols to emulate the ELF behaviour when
>we have a weak undefined extern.
>
>So, three existing cases need undefined dynamic lookup:
> libitm, where there is already a configuration mechanism to add the
>         flags.
> libsanitizer, likewise
> libcc1, where we add simple configuration to add the flags for Darwin.
>
>libcc1/ChangeLog:
>
>	PR target/97865
>	* Makefile.am: Add dynamic_lookup to LD flags for Darwin.
>	* configure.ac: Test for Darwin host and set a flag.
>
>libitm/ChangeLog:
>
>	PR target/97865
>	* configure.tgt: Add dynamic_lookup to XLDFLAGS for Darwin.
>
>libsanitizer/ChangeLog:
>
>	PR target/97865
>	* configure.tgt: Add dynamic_lookup to EXTRA_CXXFLAGS for
>	Darwin.
>
>ChangeLog:
>
>	PR target/97865
>	* libtool.m4: Update handling of Darwin platform link flags
>	for Darwin20.
>
>
>---
> libcc1/Makefile.am         |  3 +++
> libcc1/configure.ac        |  6 ++++++
> libitm/configure.tgt       |  9 ++++++++-
> libsanitizer/configure.tgt |  1 +
> libtool.m4                 | 32 +++++++++++++++++---------------
> 5 files changed, 35 insertions(+), 16 deletions(-)
>
>diff --git a/libcc1/Makefile.am b/libcc1/Makefile.am
>index ab6f839ecae..173b84f9cdb 100644
>--- a/libcc1/Makefile.am
>+++ b/libcc1/Makefile.am
>@@ -25,6 +25,9 @@ CPPFLAGS_FOR_C_FAMILY = -I $(srcdir)/../gcc/c-family \
> CPPFLAGS_FOR_C = $(CPPFLAGS_FOR_C_FAMILY) -I $(srcdir)/../gcc/c
> CPPFLAGS_FOR_CXX = $(CPPFLAGS_FOR_C_FAMILY) -I $(srcdir)/../gcc/cp
> AM_CXXFLAGS = $(WARN_FLAGS) $(WERROR) $(visibility) $(CET_HOST_FLAGS)
>+if DARWIN_DYNAMIC_LOOKUP
>+AM_CXXFLAGS += -Wl,-undefined,dynamic_lookup
>+endif
> override CXXFLAGS := $(filter-out -fsanitize=address,$(CXXFLAGS))
> override LDFLAGS := $(filter-out -fsanitize=address,$(LDFLAGS))
> # Can be simplified when libiberty becomes a normal convenience library.
>diff --git a/libcc1/configure.ac b/libcc1/configure.ac
>index 8d3b8d14748..262e0a61e6f 100644
>--- a/libcc1/configure.ac
>+++ b/libcc1/configure.ac
>@@ -104,6 +104,12 @@ AC_CACHE_CHECK([for socket libraries], 
>libcc1_cv_lib_sockets,
> ])
> LIBS="$LIBS $libcc1_cv_lib_sockets"
>
>+case "$host" in
>+  *-*-darwin*) darwin_dynamic_lookup=yes ;;
>+  *) darwin_dynamic_lookup= ;;
>+esac
>+AM_CONDITIONAL(DARWIN_DYNAMIC_LOOKUP, test $darwin_dynamic_lookup = yes)
>+
> # If any of these functions are missing, simply don't bother building
> # this plugin.
> GCC_ENABLE_PLUGINS
>diff --git a/libitm/configure.tgt b/libitm/configure.tgt
>index 04109160e91..d1beb5c9ec8 100644
>--- a/libitm/configure.tgt
>+++ b/libitm/configure.tgt
>@@ -43,6 +43,7 @@ if test "$gcc_cv_have_tls" = yes ; then
>     *-*-linux*)
> 	XCFLAGS="${XCFLAGS} -ftls-model=initial-exec"
> 	;;
>+
>   esac
> fi
>
>@@ -144,10 +145,16 @@ case "${target}" in
>   *-*-gnu* | *-*-k*bsd*-gnu \
>   | *-*-netbsd* | *-*-freebsd* | *-*-openbsd* \
>   | *-*-solaris2* | *-*-sysv4* | *-*-hpux11* \
>-  | *-*-darwin* | *-*-aix* | *-*-dragonfly*)
>+  | *-*-aix* | *-*-dragonfly*)
> 	# POSIX system.  The OS is supported.
> 	;;
>
>+  *-*-darwin*)
>+	# The OS is supported, but we need dynamic lookup to support undefined
>+	# weak symbols at link-time.
>+	XLDFLAGS="${XLDFLAGS} -Wl,-undefined,dynamic_lookup"
>+	;;
>+
>   *)	# Non-POSIX, or embedded system
> 	UNSUPPORTED=1
> 	;;
>diff --git a/libsanitizer/configure.tgt b/libsanitizer/configure.tgt
>index ef9150209c4..f73d410dedf 100644
>--- a/libsanitizer/configure.tgt
>+++ b/libsanitizer/configure.tgt
>@@ -64,6 +64,7 @@ case "${target}" in
> 	;;
>   x86_64-*-darwin2* | x86_64-*-darwin1[2-9]* | i?86-*-darwin1[2-9]*)
> 	TSAN_SUPPORTED=no
>+	EXTRA_CXXFLAGS+="-Wl,-undefined,dynamic_lookup"
> 	;;
>   x86_64-*-solaris2.11* | i?86-*-solaris2.11*)
> 	;;
>diff --git a/libtool.m4 b/libtool.m4
>index e194e899fcf..9b14b9470df 100644
>--- a/libtool.m4
>+++ b/libtool.m4
>@@ -994,23 +994,25 @@ _LT_EOF
>         rm -f conftest.err libconftest.a conftest conftest.c
>         rm -rf conftest.dSYM
>     ])
>-    case $host_os in
>-    rhapsody* | darwin1.[[012]])
>+    # Allow for Darwin 4-7 (macOS 10.0-10.3) although these are not 
>expect to
>+    # build without first building modern cctools / linker.
>+    case $host_cpu-$host_os in
>+    *-rhapsody* | *-darwin1.[[012]])
>       _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
>-    darwin1.*)
>+    *-darwin1.*)
>       _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
>-    darwin*) # darwin 5.x on
>-      # if running on 10.5 or later, the deployment target defaults
>-      # to the OS version, if on x86, and 10.4, the deployment
>-      # target defaults to 10.4. Don't you love it?
>-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
>-	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
>-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
>+    *-darwin*)
>+      # darwin 5.x (macoS 10.5) onwards we only adjust when the deployement

Typos "macoS" and "deployement".

Apart from that, I have no comment on it because darwin versioning
twists my melon.

The regenerated configure for libstdc++ is OK.
Iain Sandoe Dec. 2, 2020, 4:11 p.m. UTC | #2
given that this is a blocker for Darwin20 and is Darwin-local I plan to
apply it (with the spello fixes) if there are no more comments in the next
24h.

thanks
Iain

Jonathan Wakely <jwakely@redhat.com> wrote:

> On 23/11/20 20:01 +0000, Iain Sandoe wrote:
>> Hi
>>
>> This fixes a blocker for x86_64 darwin20 (a.k.a macOS 11)
>> It is needed on all open branches too.
>>
>> (probably this comes under my Dariwn hat - but since it involves
>> regenerating all the configure scripts… I’d welcome another pair
>> of eyes)
>>
>> tested on:
>> darwin8-darwin20, powerpc, i686, x86_64, arm64(aarch64).
>> aix (cfarm gcc119), aarch64 (cfarm gcc115), powerpc64 (BE) - (cfarm  
>> gcc110)
>> powerpc64 (LE) - (cfarm gcc135), sparc solaris 2.11 (gcc211)
>> x86_64-linux-gnu (cfarm gcc123)
>>
>> OK for master?
>>
>> OK for backports?
>>
>> thanks
>> iain
>>
>> N.B. I am attaching the second patch which is the uninteresting  
>> regenerated files.
>>
>> =====
>>
>> The change in major version (and the increment from Darwin19 to 20)
>> caused libtool tests to fail which resulted in incorrect build settings
>> for shared libraries.
>>
>> We take this opportunity to sort out the shared undefined symbols state
>> rather than propagating the current unsound behaviour into a new rev.
>>
>> This change means that we default to the case that missing symbols are
>> considered an error, and if one wants to allow this intentionally, the
>> confiuration for that case should be set appropriately.
>>
>> We use intentional missing symbols to emulate the ELF behaviour when
>> we have a weak undefined extern.
>>
>> So, three existing cases need undefined dynamic lookup:
>> libitm, where there is already a configuration mechanism to add the
>>        flags.
>> libsanitizer, likewise
>> libcc1, where we add simple configuration to add the flags for Darwin.
>>
>> libcc1/ChangeLog:
>>
>> 	PR target/97865
>> 	* Makefile.am: Add dynamic_lookup to LD flags for Darwin.
>> 	* configure.ac: Test for Darwin host and set a flag.
>>
>> libitm/ChangeLog:
>>
>> 	PR target/97865
>> 	* configure.tgt: Add dynamic_lookup to XLDFLAGS for Darwin.
>>
>> libsanitizer/ChangeLog:
>>
>> 	PR target/97865
>> 	* configure.tgt: Add dynamic_lookup to EXTRA_CXXFLAGS for
>> 	Darwin.
>>
>> ChangeLog:
>>
>> 	PR target/97865
>> 	* libtool.m4: Update handling of Darwin platform link flags
>> 	for Darwin20.
>>
>>
>> ---
>> libcc1/Makefile.am         |  3 +++
>> libcc1/configure.ac        |  6 ++++++
>> libitm/configure.tgt       |  9 ++++++++-
>> libsanitizer/configure.tgt |  1 +
>> libtool.m4                 | 32 +++++++++++++++++---------------
>> 5 files changed, 35 insertions(+), 16 deletions(-)
>>
>> diff --git a/libcc1/Makefile.am b/libcc1/Makefile.am
>> index ab6f839ecae..173b84f9cdb 100644
>> --- a/libcc1/Makefile.am
>> +++ b/libcc1/Makefile.am
>> @@ -25,6 +25,9 @@ CPPFLAGS_FOR_C_FAMILY = -I $(srcdir)/../gcc/c-family \
>> CPPFLAGS_FOR_C = $(CPPFLAGS_FOR_C_FAMILY) -I $(srcdir)/../gcc/c
>> CPPFLAGS_FOR_CXX = $(CPPFLAGS_FOR_C_FAMILY) -I $(srcdir)/../gcc/cp
>> AM_CXXFLAGS = $(WARN_FLAGS) $(WERROR) $(visibility) $(CET_HOST_FLAGS)
>> +if DARWIN_DYNAMIC_LOOKUP
>> +AM_CXXFLAGS += -Wl,-undefined,dynamic_lookup
>> +endif
>> override CXXFLAGS := $(filter-out -fsanitize=address,$(CXXFLAGS))
>> override LDFLAGS := $(filter-out -fsanitize=address,$(LDFLAGS))
>> # Can be simplified when libiberty becomes a normal convenience library.
>> diff --git a/libcc1/configure.ac b/libcc1/configure.ac
>> index 8d3b8d14748..262e0a61e6f 100644
>> --- a/libcc1/configure.ac
>> +++ b/libcc1/configure.ac
>> @@ -104,6 +104,12 @@ AC_CACHE_CHECK([for socket libraries],  
>> libcc1_cv_lib_sockets,
>> ])
>> LIBS="$LIBS $libcc1_cv_lib_sockets"
>>
>> +case "$host" in
>> +  *-*-darwin*) darwin_dynamic_lookup=yes ;;
>> +  *) darwin_dynamic_lookup= ;;
>> +esac
>> +AM_CONDITIONAL(DARWIN_DYNAMIC_LOOKUP, test $darwin_dynamic_lookup = yes)
>> +
>> # If any of these functions are missing, simply don't bother building
>> # this plugin.
>> GCC_ENABLE_PLUGINS
>> diff --git a/libitm/configure.tgt b/libitm/configure.tgt
>> index 04109160e91..d1beb5c9ec8 100644
>> --- a/libitm/configure.tgt
>> +++ b/libitm/configure.tgt
>> @@ -43,6 +43,7 @@ if test "$gcc_cv_have_tls" = yes ; then
>>    *-*-linux*)
>> 	XCFLAGS="${XCFLAGS} -ftls-model=initial-exec"
>> 	;;
>> +
>>  esac
>> fi
>>
>> @@ -144,10 +145,16 @@ case "${target}" in
>>  *-*-gnu* | *-*-k*bsd*-gnu \
>>  | *-*-netbsd* | *-*-freebsd* | *-*-openbsd* \
>>  | *-*-solaris2* | *-*-sysv4* | *-*-hpux11* \
>> -  | *-*-darwin* | *-*-aix* | *-*-dragonfly*)
>> +  | *-*-aix* | *-*-dragonfly*)
>> 	# POSIX system.  The OS is supported.
>> 	;;
>>
>> +  *-*-darwin*)
>> +	# The OS is supported, but we need dynamic lookup to support undefined
>> +	# weak symbols at link-time.
>> +	XLDFLAGS="${XLDFLAGS} -Wl,-undefined,dynamic_lookup"
>> +	;;
>> +
>>  *)	# Non-POSIX, or embedded system
>> 	UNSUPPORTED=1
>> 	;;
>> diff --git a/libsanitizer/configure.tgt b/libsanitizer/configure.tgt
>> index ef9150209c4..f73d410dedf 100644
>> --- a/libsanitizer/configure.tgt
>> +++ b/libsanitizer/configure.tgt
>> @@ -64,6 +64,7 @@ case "${target}" in
>> 	;;
>>  x86_64-*-darwin2* | x86_64-*-darwin1[2-9]* | i?86-*-darwin1[2-9]*)
>> 	TSAN_SUPPORTED=no
>> +	EXTRA_CXXFLAGS+="-Wl,-undefined,dynamic_lookup"
>> 	;;
>>  x86_64-*-solaris2.11* | i?86-*-solaris2.11*)
>> 	;;
>> diff --git a/libtool.m4 b/libtool.m4
>> index e194e899fcf..9b14b9470df 100644
>> --- a/libtool.m4
>> +++ b/libtool.m4
>> @@ -994,23 +994,25 @@ _LT_EOF
>>        rm -f conftest.err libconftest.a conftest conftest.c
>>        rm -rf conftest.dSYM
>>    ])
>> -    case $host_os in
>> -    rhapsody* | darwin1.[[012]])
>> +    # Allow for Darwin 4-7 (macOS 10.0-10.3) although these are not  
>> expect to
>> +    # build without first building modern cctools / linker.
>> +    case $host_cpu-$host_os in
>> +    *-rhapsody* | *-darwin1.[[012]])
>>      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
>> -    darwin1.*)
>> +    *-darwin1.*)
>>      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
>> -    darwin*) # darwin 5.x on
>> -      # if running on 10.5 or later, the deployment target defaults
>> -      # to the OS version, if on x86, and 10.4, the deployment
>> -      # target defaults to 10.4. Don't you love it?
>> -      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
>> -	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
>> -	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
>> +    *-darwin*)
>> +      # darwin 5.x (macoS 10.5) onwards we only adjust when the  
>> deployement
>
> Typos "macoS" and "deployement".
>
> Apart from that, I have no comment on it because darwin versioning
> twists my melon.
>
> The regenerated configure for libstdc++ is OK.
diff mbox series

Patch

diff --git a/libcc1/Makefile.am b/libcc1/Makefile.am
index ab6f839ecae..173b84f9cdb 100644
--- a/libcc1/Makefile.am
+++ b/libcc1/Makefile.am
@@ -25,6 +25,9 @@  CPPFLAGS_FOR_C_FAMILY = -I $(srcdir)/../gcc/c-family \
  CPPFLAGS_FOR_C = $(CPPFLAGS_FOR_C_FAMILY) -I $(srcdir)/../gcc/c
  CPPFLAGS_FOR_CXX = $(CPPFLAGS_FOR_C_FAMILY) -I $(srcdir)/../gcc/cp
  AM_CXXFLAGS = $(WARN_FLAGS) $(WERROR) $(visibility) $(CET_HOST_FLAGS)
+if DARWIN_DYNAMIC_LOOKUP
+AM_CXXFLAGS += -Wl,-undefined,dynamic_lookup
+endif
  override CXXFLAGS := $(filter-out -fsanitize=address,$(CXXFLAGS))
  override LDFLAGS := $(filter-out -fsanitize=address,$(LDFLAGS))
  # Can be simplified when libiberty becomes a normal convenience library.
diff --git a/libcc1/configure.ac b/libcc1/configure.ac
index 8d3b8d14748..262e0a61e6f 100644
--- a/libcc1/configure.ac
+++ b/libcc1/configure.ac
@@ -104,6 +104,12 @@  AC_CACHE_CHECK([for socket libraries],  
libcc1_cv_lib_sockets,
  ])
  LIBS="$LIBS $libcc1_cv_lib_sockets"
 
+case "$host" in
+  *-*-darwin*) darwin_dynamic_lookup=yes ;;
+  *) darwin_dynamic_lookup= ;;
+esac
+AM_CONDITIONAL(DARWIN_DYNAMIC_LOOKUP, test $darwin_dynamic_lookup = yes)
+
  # If any of these functions are missing, simply don't bother building
  # this plugin.
  GCC_ENABLE_PLUGINS
diff --git a/libitm/configure.tgt b/libitm/configure.tgt
index 04109160e91..d1beb5c9ec8 100644
--- a/libitm/configure.tgt
+++ b/libitm/configure.tgt
@@ -43,6 +43,7 @@  if test "$gcc_cv_have_tls" = yes ; then
      *-*-linux*)
  	XCFLAGS="${XCFLAGS} -ftls-model=initial-exec"
  	;;
+
    esac
  fi
 
@@ -144,10 +145,16 @@  case "${target}" in
    *-*-gnu* | *-*-k*bsd*-gnu \
    | *-*-netbsd* | *-*-freebsd* | *-*-openbsd* \
    | *-*-solaris2* | *-*-sysv4* | *-*-hpux11* \
-  | *-*-darwin* | *-*-aix* | *-*-dragonfly*)
+  | *-*-aix* | *-*-dragonfly*)
  	# POSIX system.  The OS is supported.
  	;;
 
+  *-*-darwin*)
+	# The OS is supported, but we need dynamic lookup to support undefined
+	# weak symbols at link-time.
+	XLDFLAGS="${XLDFLAGS} -Wl,-undefined,dynamic_lookup"
+	;;
+
    *)	# Non-POSIX, or embedded system
  	UNSUPPORTED=1
  	;;
diff --git a/libsanitizer/configure.tgt b/libsanitizer/configure.tgt
index ef9150209c4..f73d410dedf 100644
--- a/libsanitizer/configure.tgt
+++ b/libsanitizer/configure.tgt
@@ -64,6 +64,7 @@  case "${target}" in
  	;;
    x86_64-*-darwin2* | x86_64-*-darwin1[2-9]* | i?86-*-darwin1[2-9]*)
  	TSAN_SUPPORTED=no
+	EXTRA_CXXFLAGS+="-Wl,-undefined,dynamic_lookup"
  	;;
    x86_64-*-solaris2.11* | i?86-*-solaris2.11*)
  	;;
diff --git a/libtool.m4 b/libtool.m4
index e194e899fcf..9b14b9470df 100644
--- a/libtool.m4
+++ b/libtool.m4
@@ -994,23 +994,25 @@  _LT_EOF
          rm -f conftest.err libconftest.a conftest conftest.c
          rm -rf conftest.dSYM
      ])
-    case $host_os in
-    rhapsody* | darwin1.[[012]])
+    # Allow for Darwin 4-7 (macOS 10.0-10.3) although these are not expect  
to
+    # build without first building modern cctools / linker.
+    case $host_cpu-$host_os in
+    *-rhapsody* | *-darwin1.[[012]])
        _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
+    *-darwin1.*)
        _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
-      # if running on 10.5 or later, the deployment target defaults
-      # to the OS version, if on x86, and 10.4, the deployment
-      # target defaults to 10.4. Don't you love it?
-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+    *-darwin*)
+      # darwin 5.x (macoS 10.5) onwards we only adjust when the deployement
+      # target is forced to an earlier version.
+      case ${MACOSX_DEPLOYMENT_TARGET-UNSET},$host in
+	UNSET,*-darwin[[89]]*|UNSET,*-darwin[[12]][[0123456789]]*)
+	  ;;
  	10.[[012]][[,.]]*)
-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined  
${wl}suppress' ;;
-	10.*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined  
${wl}suppress'
+	  ;;
+	*)
+	  ;;
+     esac