diff options
author | Rich Felker <dalias@aerifal.cx> | 2013-08-16 17:51:38 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2013-08-16 17:51:38 -0400 |
commit | 82fa6b43b367d047e89cfa5505ad718253fbb693 (patch) | |
tree | e49cb6c2694a0be5ded8eaf0d913da9ba11a9fe3 /Makefile | |
parent | 63893d3ff1f9383ba3ce63a19b7de74ace319d77 (diff) | |
download | musl-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-- | Makefile | 8 |
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),) |