1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-28 07:21:54 +03:00
samba-mirror/source4/heimdal_build
Karl Lenz f31333d40e s4 heimdal_build: Fix static heimdal builds with replacement closefrom()
If Samba was configured with "--nonshared-binary=winexe" to build
winexe as a static binary, and the replacement closefrom() function
was used (which is default on most GNU/Linux systems without the libbsd
development package installed), then winexe would fail to link with the
error message shown below.

[2631/3059] Linking bin/default/examples/winexe/winexe
source4/heimdal/lib/roken/closefrom.c.1.o: In function `rep_closefrom':
closefrom.c:(.text+0x0): multiple definition of `rep_closefrom'
lib/replace/closefrom.c.2.o:closefrom.c:(.text+0x292): first defined here
collect2: error: ld returned 1 exit status

The real problem here was not with the winexe build itself - that was
merely the application that I was attempting to build statically when I
encountered it. As Andrew Bartlett very helpfully pointed out to me, this
regression was introduced when "lib/replace/closefrom.c" was added in
commit 55529d0f and, more to the point, when the heimdal build started
using it in commit 3a7ebd0e. From that point on, any time that Samba's
embedded copy of heimdal was statically linked into an application, it
would fail to link because heimdal's own rep_closefrom() function in its
"roken" library would conflict with the rep_closefrom() function in the
"replace" library used elsewhere in Samba - a library which the "roken"
library itself depends on. To further compound the problem, heimdal's
own "roken" library is also compiled for the host (a necessary
distinction for cross-compiled builds) and linked into a small number of
utility applications used during the heimdal build. However, they can't
link directly against the "replace" library, unlike the main "roken"
library build which carries that dependency, because the "replace"
library is _not_ built for the host.

I solved this problem by eliminating heimdal's version of rep_closefrom()
and making it use the one from "lib/replace" everywhere. That wasn't a
problem for the main heimdal library that is built for the target because
it was already linking in "lib/replace" (that's what caused this problem
in the first place!), but to solve the aforementioned issue with
"lib/replace" not being built for the host, I added
"lib/replace/closefrom.c" to the list of "source4/heimdal/lib/roken"
sources to be built for the host to satisfy heimdal's host utilities.
Everyone wins, I think.

Signed-off-by: Karl Lenz <xorangekiller@gmail.com>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Gary Lockyer <gary@catalyst.net.nz>
2019-07-05 03:33:19 +00:00
..
krb5
asn1_compile_wrapper.sh
config.h s4:heimdal_build: make use of libreplace getprogname() replacement 2018-11-20 01:33:33 +01:00
crypto-headers.h
et_compile_wrapper.sh
gssapi-glue.c
hdb-glue.c
ifaddrs.hin
kafs.h
krb5-glue.c
krb5-types.h heimdal: Fix build with system provided heimdal library 2018-07-10 07:30:26 +02:00
lexyacc.sh
perl_path_wrapper.sh
print_version.h
replace.c s4:heimdal_build: make use of libreplace getprogname() replacement 2018-11-20 01:33:33 +01:00
roken.h heimdal_build: Try again to sort out the strerror_r mess 2013-01-19 10:32:17 +01:00
version.c
vis.h
wscript_build s4 heimdal_build: Fix static heimdal builds with replacement closefrom() 2019-07-05 03:33:19 +00:00
wscript_configure wscript: separate embedded_heimdal from system_heimdal 2019-01-29 22:09:07 +01:00