[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:
install-exec-hook:
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)
@$(NORMAL_INSTALL)
@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
yourself.
(Even this is not enough to handle installation directories with
quotes in their names. I think that one's just hopeless.)
zw