[Spread-users] symlink creation by "install" target still problematic

Daniel Rall dlr at finemaltcoding.com
Tue Oct 1 18:12:30 EDT 2002


Though -f is a valid option to ln on Solaris, its semantics seem to
differ from Linux.  The Solaris man page says that -f mean "don't
prompt", while on Linux it seems to mean something along the lines of
"force".

Solaris 5.8:
dlr at nagoya:/tmp$ touch file
dlr at nagoya:/tmp$ ln -s file symlink       # initial symlink
dlr at nagoya:/tmp$ ln -s file symlink       # symlink exists, error
ln: cannot create symlink: File exists
dlr at nagoya:/tmp$ ln -fs file symlink      # symlink exists and won't be
ln: cannot create symlink: File exists    # overwritten


RedHat Linux 7.3:
dlr at despot:tmp$ touch file
dlr at despot:tmp$ ln -s file symlink       # initial symlink
dlr at despot:tmp$ ln -s file symlink       # symlink exists, error
ln: `symlink': File exists
dlr at despot:tmp$ ln -fs file symlink      # symlink existed, but overwritten

I'm guessing its more probably portable to `rm -f` any existing
symlink before creating it.

jonathan at spread.org writes:
...
>   Change softlinks of libraries to force the link (-f) so it overwrites existing links.
...
>   Index: Makefile.in
>   ===================================================================
>   RCS file: /storage/cvsroot/spread/daemon/Makefile.in,v
>   retrieving revision 1.4
>   retrieving revision 1.5
>   diff -u -r1.4 -r1.5
>   --- Makefile.in	27 Sep 2002 22:38:59 -0000	1.4
>   +++ Makefile.in	1 Oct 2002 21:02:14 -0000	1.5
>   @@ -5,6 +5,7 @@
>    bindir=@bindir@
>    sbindir=@sbindir@
>    libdir=@libdir@
>   +includedir=@includedir@
>    mandir=@mandir@
>    mansubdir=@mansubdir@
>    sysconfdir=@sysconfdir@
>   @@ -94,8 +95,8 @@
>    	$(SHCC) $(SHCFLAGS) $(SHCPPFLAGS) -D_REENTRANT -c $< -o $*.tlo
>    
>    parser:
>   -	$(YACC) -d config_parse.y
>   -	$(LEX) config_gram.l
>   +	$(YACC) -d $(srcdir)/config_parse.y
>   +	$(LEX) $(srcdir)/config_gram.l
>    
>    #Disabled now because of timestamp errors causing extra regeneration
>    #To build parser run "make parser" after ./configure is run.
>   @@ -121,14 +122,14 @@
>    
>    install-libspread.dylib:	libspread.dylib
>    	$(INSTALL) -m 0755 libspread.$(LIBVERSION).dylib $(DESTDIR)$(libdir)/libspread.$(LIBVERSION).dylib
>   -	(cd $(DESTDIR)$(libdir); $(SOFTLINK) libspread.$(LIBVERSION).dylib libspread.dylib)
>   +	(cd $(DESTDIR)$(libdir); $(SOFTLINK) -f libspread.$(LIBVERSION).dylib libspread.dylib)
>    
>    libspread.so:	$(LIBSP_SHOBJS)
>    	$(SHLD) -o $@ $(LIBSP_SHOBJS) $(SHLDFLAGS) $(SHLIBS)
>    
>    install-libspread.so:	libspread.so
>    	$(INSTALL) -m 0755 libspread.so $(DESTDIR)$(libdir)/libspread.so.$(LIBVERSION)
>   -	(cd $(DESTDIR)$(libdir); $(SOFTLINK) libspread.so.$(LIBVERSION) libspread.so)
>   +	(cd $(DESTDIR)$(libdir); $(SOFTLINK) -f libspread.so.$(LIBVERSION) libspread.so)
>    
>    libtspread.a: $(LIBTSP_OBJS)
>    	$(AR) rv $@ $(LIBTSP_OBJS)
>   @@ -140,14 +141,14 @@
>    
>    install-libtspread.dylib:	libtspread.dylib
>    	$(INSTALL) -m 0755 libtspread.$(LIBVERSION).dylib $(DESTDIR)$(libdir)/libtspread.$(LIBVERSION).dylib
>   -	(cd $(DESTDIR)$(libdir); $(SOFTLINK) libtspread.$(LIBVERSION).dylib libtspread.dylib)
>   +	(cd $(DESTDIR)$(libdir); $(SOFTLINK) -f libtspread.$(LIBVERSION).dylib libtspread.dylib)
>    
>    libtspread.so:	$(LIBTSP_SHOBJS)
>    	$(SHLD) -o $@ $(LIBTSP_SHOBJS) $(SHLDFLAGS) $(SHLIBS) $(THLIBS)
>    
>    install-libtspread.so:	libtspread.so
>    	$(INSTALL) -m 0755 libtspread.so $(DESTDIR)$(libdir)/libtspread.so.$(LIBVERSION)
>   -	(cd $(DESTDIR)$(libdir); $(SOFTLINK) libtspread.so.$(LIBVERSION) libtspread.so)
>   +	(cd $(DESTDIR)$(libdir); $(SOFTLINK) -f libtspread.so.$(LIBVERSION) libtspread.so)
>    
>    spread$(EXEEXT): $(SPREADOBJS)
>    	$(LD) -o $@ $(SPREADOBJS) $(LDFLAGS) $(LIBS)
>   @@ -215,6 +216,7 @@
>    	$(buildtoolsdir)/mkinstalldirs $(DESTDIR)$(mandir)/$(mansubdir)1
>    	$(buildtoolsdir)/mkinstalldirs $(DESTDIR)$(mandir)/$(mansubdir)3
>    	$(buildtoolsdir)/mkinstalldirs $(DESTDIR)$(libdir)
>   +	$(buildtoolsdir)/mkinstalldirs $(DESTDIR)$(includedir)
>    	$(INSTALL) -m 0755 -s spmonitor$(EXEEXT) $(DESTDIR)$(bindir)/spmonitor$(EXEEXT)
>    	$(INSTALL) -m 0755 -s spuser$(EXEEXT) $(DESTDIR)$(bindir)/spuser$(EXEEXT)
>    	$(INSTALL) -m 0755 -s sptuser$(EXEEXT) $(DESTDIR)$(bindir)/sptuser$(EXEEXT)
>   @@ -222,6 +224,9 @@
>    	$(INSTALL) -m 0755 -s spread$(EXEEXT) $(DESTDIR)$(sbindir)/spread$(EXEEXT)
>    	$(INSTALL) -m 644 libspread.a $(DESTDIR)$(libdir)/libspread.a
>    	$(INSTALL) -m 644 libtspread.a $(DESTDIR)$(libdir)/libtspread.a
>   +	$(INSTALL) -m 644 $(srcdir)/sp.h $(DESTDIR)$(includedir)/sp.h
>   +	$(INSTALL) -m 644 $(srcdir)/sp_func.h $(DESTDIR)$(includedir)/sp_func.h
>   +	$(INSTALL) -m 644 $(srcdir)/sp_events.h $(DESTDIR)$(includedir)/sp_events.h
>    	$(INSTALL) -m 644 docs/spread.1.out $(DESTDIR)$(mandir)/$(mansubdir)1/spread.1
>    	$(INSTALL) -m 644 docs/spuser.1.out $(DESTDIR)$(mandir)/$(mansubdir)1/spuser.1
>    	$(INSTALL) -m 644 docs/sptuser.1.out $(DESTDIR)$(mandir)/$(mansubdir)1/sptuser.1
>   @@ -250,6 +255,7 @@
>    	-rmdir $(DESTDIR)$(mandir)/$(mansubdir)3
>    	-rmdir $(DESTDIR)$(mandir)
>    	-rmdir $(DESTDIR)$(libdir)
>   +	-rmdir $(DESTDIR)$(includedir)
>    
>    uninstall: 
>    	-rm -f $(DESTDIR)$(bindir)/spuser$(EXEEXT)
>   @@ -259,6 +265,9 @@
>    	-rm -f $(DESTDIR)$(sbindir)/spread$(EXEEXT)
>    	-rm -f $(DESTDIR)$(libdir)/libspread.a
>    	-rm -f $(DESTDIR)$(libdir)/libtspread.a
>   +	-rm -f $(DESTDIR)$(includedir)/sp.h
>   +	-rm -f $(DESTDIR)$(includedir)/sp_func.h
>   +	-rm -f $(DESTDIR)$(includedir)/sp_events.h
>    	-rm -f $(DESTDIR)$(mandir)/$(mansubdir)3/SP_*.3
>    	-rm -f $(DESTDIR)$(mandir)/$(mansubdir)3/libsp.3
>    	-rm -f $(DESTDIR)$(mandir)/$(mansubdir)1/spread.1
-- 

Daniel Rall <dlr at finemaltcoding.com>




More information about the Spread-users mailing list