[MacPorts] #57612: libtool does not respect -syslibroot when linking
MacPorts
noreply at macports.org
Thu Nov 15 23:34:07 UTC 2018
#57612: libtool does not respect -syslibroot when linking
--------------------+--------------------
Reporter: kencu | Owner: (none)
Type: defect | Status: new
Priority: Normal | Milestone:
Component: ports | Version:
Keywords: | Port:
--------------------+--------------------
This ticket is show some of the behaviour I've been noticing when trying
to build on Mojave `+universal` against the MacOSX10.13.sdk, in particular
to try to understand why the linking behaviour fails by default.
I picked a clean example, building `libedit`.
macports has been installed in `/opt/universal`, and `macports.conf` has
two entries added:
{{{
macosx_deployment_target 10.13
macosx_sdk_version 10.13
}}}
variants.conf has one entry:
{{{
+universal
}}}
A copy of the MacOSX10.13.sdk is installed in the proper place in Xcode:
{{{
$ ls -la
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
total 0
drwxr-xr-x 5 root wheel 160 8 Nov 21:38 .
drwxr-xr-x 5 root wheel 160 19 Oct 18:18 ..
drwxr-xr-x 7 root wheel 224 30 Oct 19:25 MacOSX.sdk
drwxr-xr-x 5 root wheel 160 8 Nov 21:37 MacOSX10.13.sdk
lrwxr-xr-x 1 root wheel 10 25 Sep 22:31 MacOSX10.14.sdk -> MacOSX.sdk
}}}
libtool compiles correctly with the proper -isysroot
{{{
libtool: compile: /usr/bin/clang -DHAVE_CONFIG_H -I. -I..
-I/opt/universal/include
-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk
-pipe -Os -arch i386
-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk
-c readline.c -o readline.o >/dev/null 2>&1
}}}
The build tries to set up the link correctly. -isysroot and syslibroot are
sent to libtool, and libtool passes only syslibroot along to clang to
link, which should work:
{{{
/bin/sh ../libtool --tag=CC --mode=link /usr/bin/clang -pipe -Os -arch
i386
-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk
-no-undefined -version-info 0:58:0 -L/opt/universal/lib
-Wl,-headerpad_max_install_names -arch i386
-Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk
-o libedit.la -rpath /opt/universal/lib chared.lo common.lo el.lo eln.lo
emacs.lo hist.lo keymacro.lo map.lo chartype.lo parse.lo prompt.lo read.lo
refresh.lo search.lo sig.lo terminal.lo tty.lo vi.lo wcsdup.lo
tokenizer.lo tokenizern.lo history.lo historyn.lo filecomplete.lo
readline.lo literal.lo -lncurses
libtool: link: /usr/bin/clang -dynamiclib -o .libs/libedit.0.dylib
.libs/chared.o .libs/common.o .libs/el.o .libs/eln.o .libs/emacs.o
.libs/hist.o .libs/keymacro.o .libs/map.o .libs/chartype.o .libs/parse.o
.libs/prompt.o .libs/read.o .libs/refresh.o .libs/search.o .libs/sig.o
.libs/terminal.o .libs/tty.o .libs/vi.o .libs/wcsdup.o .libs/tokenizer.o
.libs/tokenizern.o .libs/history.o .libs/historyn.o .libs/filecomplete.o
.libs/readline.o .libs/literal.o -L/opt/universal/lib -lncurses -Os
-arch i386 -Wl,-headerpad_max_install_names -arch i386 -Wl,-syslibroot
-Wl,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk
-install_name /opt/universal/lib/libedit.0.dylib -compatibility_version 1
-current_version 1.58 -Wl,-single_module
}}}
But does not, in the end, work. Instead, the MacOSX10.14.sdk is somehow
called instead as the syslibroot to do the link, and this is the
unexpected behaviour, which fails:
{{{
ld: warning: The i386 architecture is deprecated for macOS (remove from
the Xcode build setting: ARCHS)
ld: warning: ignoring file
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/lib/libSystem.tbd,
missing required architecture i386 in file
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/lib/libSystem.tbd
Undefined symbols for architecture i386:
Undefined symbols for architecture i386:
"__DefaultRuneLocale", referenced from:
_ce__isword in chared.o
_cv__isword in chared.o
_cv__isWord in chared.o
_cv_next_word in chared.o
_cv_prev_word in chared.o
_cv__endword in chared.o
_ed_move_to_beg in common.o
...
}}}
--
Ticket URL: <https://trac.macports.org/ticket/57612>
MacPorts <https://www.macports.org/>
Ports system for macOS
More information about the macports-tickets
mailing list