[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Space in dirs break `make install`

From: Zack Weinberg
Subject: Re: Space in dirs break `make install`
Date: Wed, 28 Oct 2020 09:18:59 -0400

On Wed, Oct 28, 2020 at 8:40 AM Ole Tange <tange@gnu.org> wrote:
> make[3]: Entering directory '/home/  space  /parallel-20200922/src'
> rm /home/  space  /bin/sem || true
> rm: cannot remove '/home/': Is a directory
> rm: cannot remove 'space': No such file or directory
> rm: cannot remove '/bin/sem': No such file or directory
> ln -s parallel /home/  space  /bin/sem
> ln: target '/bin/sem' is not a directory

The commands that can't handle spaces in $(prefix) are coming from the
install-exec-hook in src/Makefile.am:

        rm $(DESTDIR)$(bindir)/sem || true
        $(LN_S) parallel $(DESTDIR)$(bindir)/sem

Compare the installation rules generated by Automake (src/Makefile.in):

install-binSCRIPTS: $(bin_SCRIPTS)
        @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
        if test -n "$$list"; then \
          echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
          $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
        fi; \
        while read type dir files; do \
             if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
             test -z "$$files" || { \
               echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
               $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" ||
exit $$?; \
             } \
        ; done

This is a mess, but see how it _always_ expands $(DESTDIR)$(bindir)
inside shell quotes?  To handle spaces in installation directories
correctly, you have to do the same thing in every rule you write

(Even this is not enough to handle installation directories with
quotes in their names.  I think that one's just hopeless.)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]