about summary refs log tree commit diff
path: root/Makefile
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2013-08-16 17:51:38 -0400
committerRich Felker <dalias@aerifal.cx>2013-08-16 17:51:38 -0400
commit82fa6b43b367d047e89cfa5505ad718253fbb693 (patch)
treee49cb6c2694a0be5ded8eaf0d913da9ba11a9fe3 /Makefile
parent63893d3ff1f9383ba3ce63a19b7de74ace319d77 (diff)
downloadmusl-82fa6b43b367d047e89cfa5505ad718253fbb693.tar.gz
musl-82fa6b43b367d047e89cfa5505ad718253fbb693.tar.xz
musl-82fa6b43b367d047e89cfa5505ad718253fbb693.zip
fix atomicity and other issues installing dynamic linker symlink
ln -sf is non-atomic; it unlinks the destination first. instead, make
a temporary link and rename it into place.

this commit also fixes some of the dependency tracking behavior for
the link. depending on the directory it's to be installed in is not
reasonable; it causes a new link to be attempted if the library
directory has been modified, but does not attempt to make a new link
just because libc has been updated. instead, depend on the target to
be linked to. this will ensure that, if prefix has changed but
syslibdir has not, the link will be updated to point to the new
prefix.
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile8
1 files changed, 3 insertions, 5 deletions
diff --git a/Makefile b/Makefile
index 33c2de1b..7e634dad 100644
--- a/Makefile
+++ b/Makefile
@@ -155,11 +155,9 @@ $(DESTDIR)$(includedir)/bits/%: arch/$(ARCH)/bits/%
 $(DESTDIR)$(includedir)/%: include/%
 	install -D -m 644 $< $@
 
-$(DESTDIR)$(LDSO_PATHNAME): $(DESTDIR)$(syslibdir)
-	ln -sf $(libdir)/libc.so $@ || true
-
-$(DESTDIR)$(syslibdir):
-	install -d -m 755 $(DESTDIR)$(syslibdir)
+$(DESTDIR)$(LDSO_PATHNAME): $(DESTDIR)$(libdir)/libc.so
+	test -d $(DESTDIR)$(syslibdir) || install -d -m 755 $(DESTDIR)$(syslibdir) || true
+	{ ln -sf $(libdir)/libc.so $@.tmp.$$$$ && mv -f $@.tmp.$$$$ $@ ; } || true
 
 install-libs: $(ALL_LIBS:lib/%=$(DESTDIR)$(libdir)/%) $(if $(SHARED_LIBS),$(DESTDIR)$(LDSO_PATHNAME),)