On Wed, Oct 28, 2020 at 8:40 AM Ole Tange <ta...@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

Reply via email to