From e4874be939ad32e22b4b19c2a20c0c1d50ddab71 Mon Sep 17 00:00:00 2001
From: Giovanni Bussi <giovanni.bussi@gmail.com>
Date: Mon, 3 Aug 2015 11:22:41 +0200
Subject: [PATCH] Support for spaces in DESTDIR

Fixes #157
---
 Makefile.conf.in          | 18 ++++----
 patches/patch.sh          |  2 +-
 regtest/scripts/run       |  2 +-
 src/lib/Makefile          | 87 ++++++++++++++++++++-------------------
 src/maketools/copyobjects |  4 +-
 src/maketools/listobjects |  4 +-
 6 files changed, 59 insertions(+), 58 deletions(-)

diff --git a/Makefile.conf.in b/Makefile.conf.in
index 7119fa950..2f8e3be59 100644
--- a/Makefile.conf.in
+++ b/Makefile.conf.in
@@ -18,12 +18,12 @@ program_transform_name=@program_transform_name@
 program_can_run_mpi=@program_can_run_mpi@
 program_can_run=@program_can_run@
 LD_RO=@LD_RO@
-exec_prefix="@exec_prefix@"
-bindir="@bindir@"
-libdir="@libdir@"
-includedir="@includedir@"
-datarootdir="@datarootdir@"
-datadir="@datadir@"
-docdir="${datarootdir}/doc/@program_name@"
-htmldir="@htmldir@"
-program_name="@program_name@"
+exec_prefix=@exec_prefix@
+bindir=@bindir@
+libdir=@libdir@
+includedir=@includedir@
+datarootdir=@datarootdir@
+datadir=@datadir@
+docdir=${datarootdir}/doc/@program_name@
+htmldir=@htmldir@
+program_name=@program_name@
diff --git a/patches/patch.sh b/patches/patch.sh
index 0aa5cac5f..e6fa2c3cb 100755
--- a/patches/patch.sh
+++ b/patches/patch.sh
@@ -243,7 +243,7 @@ case "$action" in
 
     if [ -d "$diff" ]; then
       test -n "$quiet" || echo "Patching with on-the-fly diff from stored originals"
-      PREPLUMED=$(cd $diff ; find . -name "*.preplumed" | sort)
+      PREPLUMED=$(cd "$diff" ; find . -name "*.preplumed" | sort)
       for bckfile in $PREPLUMED ; do
         file="${bckfile%.preplumed}"
         if test -e "$file" ; then
diff --git a/regtest/scripts/run b/regtest/scripts/run
index 4cf5dee0e..ee4e35806 100755
--- a/regtest/scripts/run
+++ b/regtest/scripts/run
@@ -111,7 +111,7 @@ case "$type" in
   echo "Run Make"
   $plumed info --configuration > Makefile.conf
   $plumed --is-installed || ln -s $($plumed info --root)/src plumed
-  cat <($plumed info --configuration) $($plumed info --root)/src/lib/Plumed.inc.static ../../../scripts/exe.make > Makefile 
+  cat <($plumed info --configuration) "$($plumed info --root)/src/lib/Plumed.inc.static" ../../../scripts/exe.make > Makefile 
   make exe 1>out 2> err
   $mpi $valgrind ./exe $arg >> out 2>> err
  ;;
diff --git a/src/lib/Makefile b/src/lib/Makefile
index ba64da193..622e8e830 100644
--- a/src/lib/Makefile
+++ b/src/lib/Makefile
@@ -117,55 +117,55 @@ ifdef PLUMED_LIBSUFFIX
 endif
 	cd ../config ; $(MAKE)
 	$(MAKE) uninstall
-	mkdir -p $(DESTDIR)$(bindir)
-	mkdir -p $(DESTDIR)$(libdir)
-	mkdir -p $(DESTDIR)$(includedir)/$(program_name)
-	mkdir -p $(DESTDIR)$(libdir)/$(program_name)/obj
-	mkdir -p $(DESTDIR)$(libdir)/$(program_name)/src/lib
-	mkdir -p $(DESTDIR)$(libdir)/$(program_name)/src/config
-	mkdir -p $(DESTDIR)$(libdir)/$(program_name)/src/colvar
+	mkdir -p "$(DESTDIR)$(bindir)"
+	mkdir -p "$(DESTDIR)$(libdir)"
+	mkdir -p "$(DESTDIR)$(includedir)/$(program_name)"
+	mkdir -p "$(DESTDIR)$(libdir)/$(program_name)/obj"
+	mkdir -p "$(DESTDIR)$(libdir)/$(program_name)/src/lib"
+	mkdir -p "$(DESTDIR)$(libdir)/$(program_name)/src/config"
+	mkdir -p "$(DESTDIR)$(libdir)/$(program_name)/src/colvar"
 # rebuild libraries and main using new target dir
 	$(MAKE) install-build
 # copy documentation:
-	if test -d ../../user-doc/html ; then mkdir -p $(DESTDIR)$(htmldir) && cd ../../ && tar cf - user-doc/html | tar xf - -C $(DESTDIR)$(htmldir)/ ; fi
-	if test -d ../../developer-doc/html ; then mkdir -p $(DESTDIR)$(htmldir) && cd ../../ && tar cf - developer-doc/html | tar xf - -C $(DESTDIR)$(htmldir)/ ; fi
-	if test -f ../../user-doc/manual.pdf ; then mkdir -p $(DESTDIR)$(htmldir)/user-doc && cp ../../user-doc/manual.pdf $(DESTDIR)$(htmldir)/user-doc/ ; fi
+	if test -d ../../user-doc/html ; then mkdir -p "$(DESTDIR)$(htmldir)" && cd ../../ && tar cf - user-doc/html | tar xf - -C "$(DESTDIR)$(htmldir)/" ; fi
+	if test -d ../../developer-doc/html ; then mkdir -p "$(DESTDIR)$(htmldir)" && cd ../../ && tar cf - developer-doc/html | tar xf - -C "$(DESTDIR)$(htmldir)/" ; fi
+	if test -f ../../user-doc/manual.pdf ; then mkdir -p "$(DESTDIR)$(htmldir)/user-doc" && cp ../../user-doc/manual.pdf "$(DESTDIR)$(htmldir)/user-doc/" ; fi
 # copy patches and scripts
-	cd ../../ ; tar cf - patches scripts | tar xf - -C $(DESTDIR)$(libdir)/$(program_name)/
+	cd ../../ ; tar cf - patches scripts | tar xf - -C "$(DESTDIR)$(libdir)/$(program_name)/"
 # copy Template.cpp file (we leave it in src/colvar/ for backward compatibility)
-	cp ../colvar/Template.cpp $(DESTDIR)$(libdir)/$(program_name)/src/colvar/
+	cp ../colvar/Template.cpp "$(DESTDIR)$(libdir)/$(program_name)/src/colvar/"
 # copy compile_options.sh file (we leave it in src/colvar/ for backward compatibility)
-	cp ../config/compile_options.sh $(DESTDIR)$(libdir)/$(program_name)/src/config/compile_options.sh
+	cp ../config/compile_options.sh "$(DESTDIR)$(libdir)/$(program_name)/src/config/compile_options.sh"
 ifdef LD_RO
-	cp install/kernel.o $(DESTDIR)$(libdir)/$(program_name)/obj/kernel.o
+	cp install/kernel.o "$(DESTDIR)$(libdir)/$(program_name)/obj/kernel.o"
 else
-	../maketools/copyobjects $(DESTDIR)$(libdir)/$(program_name)/obj/k $(OBJ_KERNEL)
+	../maketools/copyobjects "$(DESTDIR)$(libdir)/$(program_name)/obj/k" $(OBJ_KERNEL)
 endif
-	cp $(OBJ_WRAPPER) $(DESTDIR)$(libdir)/$(program_name)/obj/PlumedStatic.o
-	cp $(OBJ_DYNAMIC_WRAPPER) $(DESTDIR)$(libdir)/$(program_name)/obj/Plumed.o
+	cp $(OBJ_WRAPPER) "$(DESTDIR)$(libdir)/$(program_name)/obj/PlumedStatic.o"
+	cp $(OBJ_DYNAMIC_WRAPPER) "$(DESTDIR)$(libdir)/$(program_name)/obj/Plumed.o"
 # also copy .h files into include/ dir
-	cd ../../src ; tar cf - */*.h */*/*.h | tar xf - -C $(DESTDIR)$(includedir)/$(program_name)/
+	cd ../../src ; tar cf - */*.h */*/*.h | tar xf - -C "$(DESTDIR)$(includedir)/$(program_name)/"
 # install executable
-	cp install/plumed $(DESTDIR)$(bindir)/$(program_name)
+	cp install/plumed "$(DESTDIR)$(bindir)/$(program_name)"
 # patch file for cross compiling
-	cp install/plumed-patch $(DESTDIR)$(bindir)/$(program_name)-patch
+	cp install/plumed-patch "$(DESTDIR)$(bindir)/$(program_name)-patch"
 # copy include files for cmake and make
 # we leave it in src/lib/ for backward compatibility
-	cp install/Plumed.cmake* $(DESTDIR)$(libdir)/$(program_name)/src/lib/
-	cp install/Plumed.inc* $(DESTDIR)$(libdir)/$(program_name)/src/lib/
+	cp install/Plumed.cmake* "$(DESTDIR)$(libdir)/$(program_name)/src/lib/"
+	cp install/Plumed.inc* "$(DESTDIR)$(libdir)/$(program_name)/src/lib/"
 # other shell-based cltools are copied
-	for file in $(PLUMED_SCRIPTS) ; do cp install/plumed-$$file $(DESTDIR)$(libdir)/$(program_name)/plumed-$$file ; done
+	for file in $(PLUMED_SCRIPTS) ; do cp install/plumed-$$file "$(DESTDIR)$(libdir)/$(program_name)/plumed-$$file" ; done
 ifdef SOEXT
-	cp install/libplumed.$(SOEXT) $(DESTDIR)$(libdir)/lib$(program_name).$(SOEXT)
-	cp install/libplumedKernel.$(SOEXT) $(DESTDIR)$(libdir)/lib$(program_name)Kernel.$(SOEXT)
+	cp install/libplumed.$(SOEXT) "$(DESTDIR)$(libdir)/lib$(program_name).$(SOEXT)"
+	cp install/libplumedKernel.$(SOEXT) "$(DESTDIR)$(libdir)/lib$(program_name)Kernel.$(SOEXT)"
 endif
 # modulefile
-	cp install/modulefile $(DESTDIR)$(libdir)/$(program_name)/modulefile
+	cp install/modulefile "$(DESTDIR)$(libdir)/$(program_name)/modulefile"
 # making everything visible:
-	chmod -R go+rX,go-w $(DESTDIR)$(libdir)/$(program_name)
-	chmod -R go+rX,go-w $(DESTDIR)$(includedir)/$(program_name)
-	chmod -R go+rX,go-w $(DESTDIR)$(bindir)/$(program_name)
-	chmod -R go+rX,go-w $(DESTDIR)$(bindir)/$(program_name)-patch
+	chmod -R go+rX,go-w "$(DESTDIR)$(libdir)/$(program_name)"
+	chmod -R go+rX,go-w "$(DESTDIR)$(includedir)/$(program_name)"
+	chmod -R go+rX,go-w "$(DESTDIR)$(bindir)/$(program_name)"
+	chmod -R go+rX,go-w "$(DESTDIR)$(bindir)/$(program_name)-patch"
 	@echo
 	@echo "*** PLUMED has been installed ***"
 	@echo
@@ -212,13 +212,13 @@ endif
 
 
 uninstall:
-	rm -fr $(DESTDIR)$(libdir)/$(program_name)
-	rm -fr $(DESTDIR)$(htmldir)
-	rm -fr $(DESTDIR)$(includedir)/$(program_name)
-	rm -f $(DESTDIR)$(bindir)/bin/$(program_name)
-	rm -f $(DESTDIR)$(bindir)/bin/$(program_name)-patch
-	rm -f $(DESTDIR)$(libdir)/lib$(program_name).$(SOEXT)
-	rm -f $(DESTDIR)$(libdir)/lib$(program_name)Kernel.$(SOEXT)
+	rm -fr "$(DESTDIR)$(libdir)/$(program_name)"
+	rm -fr "$(DESTDIR)$(htmldir)"
+	rm -fr "$(DESTDIR)$(includedir)/$(program_name)"
+	rm -f "$(DESTDIR)$(bindir)/bin/$(program_name)"
+	rm -f "$(DESTDIR)$(bindir)/bin/$(program_name)-patch"
+	rm -f "$(DESTDIR)$(libdir)/lib$(program_name).$(SOEXT)"
+	rm -f "$(DESTDIR)$(libdir)/lib$(program_name)Kernel.$(SOEXT)"
 
 $(DIRS):
 	$(MAKE) -C $@ obj
@@ -299,18 +299,19 @@ ifeq ($(PLUMED_INSTALL),Install)
 
 $(PLUMED_LIBDIR)Plumed.inc:
 	@echo Building Plumed.inc
-	@echo "PLUMED_RUNTIME_LOAD=" $(libdir)/$(program_name)/obj/Plumed.o $(LIBS) $(LDFLAGS) > $@
+	@echo "PLUMED_RUNTIME_LOAD= \"$(libdir)/$(program_name)/obj/Plumed.o\" $(LIBS) $(LDFLAGS)" > $@
 ifdef LD_RO
-	@echo "PLUMED_STATIC_LOAD=" $(libdir)/$(program_name)/obj/kernel.o $(libdir)/$(program_name)/obj/PlumedStatic.o $(LIBS) $(DYNAMIC_LIBS) $(LDFLAGS) >> $@
+	@echo "PLUMED_STATIC_LOAD= \"$(libdir)/$(program_name)/obj/kernel.o\" \"$(libdir)/$(program_name)/obj/PlumedStatic.o\" $(LIBS) $(DYNAMIC_LIBS) $(LDFLAGS)" >> $@
 else
-	@echo "PLUMED_STATIC_LOAD=" $(shell ../maketools/listobjects $(libdir)/$(program_name)/obj/k $(OBJ_KERNEL)) $(libdir)/$(program_name)/obj/PlumedStatic.o $(LIBS) $(DYNAMIC_LIBS) $(LDFLAGS) >> $@
+# single quote required to preserve double quote in resulting file
+	@echo "PLUMED_STATIC_LOAD= '$(shell ../maketools/listobjects "$(libdir)/$(program_name)/obj/k" $(OBJ_KERNEL))' \"$(libdir)/$(program_name)/obj/PlumedStatic.o\" $(LIBS) $(DYNAMIC_LIBS) $(LDFLAGS)" >> $@
 endif
-	@echo "PLUMED_SHARED_LOAD=" $(libdir)/lib$(program_name).$(SOEXT) $(LIBS) $(LDFLAGS) >> $@
+	@echo "PLUMED_SHARED_LOAD= \"$(libdir)/lib$(program_name).$(SOEXT)\" $(LIBS) $(LDFLAGS)" >> $@
 	@echo "PLUMED_RUNTIME_DEPENDENCIES="   >> $@
 # when installing, it is sufficient to include dependence wrt a single object
 # indeed, the object are replaced all at the same time
-	@echo "PLUMED_STATIC_DEPENDENCIES=" $(libdir)/$(program_name)/obj/PlumedStatic.o  >> $@
-	@echo "PLUMED_SHARED_DEPENDENCIES=" $(libdir)/lib$(program_name).$(SOEXT)  >> $@
+	@echo "PLUMED_STATIC_DEPENDENCIES= \"$(libdir)/$(program_name)/obj/PlumedStatic.o\""  >> $@
+	@echo "PLUMED_SHARED_DEPENDENCIES= \"$(libdir)/lib$(program_name).$(SOEXT)\""  >> $@
 else
 Plumed.inc:
 	@echo Building Plumed.inc
diff --git a/src/maketools/copyobjects b/src/maketools/copyobjects
index f01357bda..410ba5a0b 100755
--- a/src/maketools/copyobjects
+++ b/src/maketools/copyobjects
@@ -7,13 +7,13 @@
 # cp b/b.o pippo/k1.o
 # cp c/c.o pippo/k2.o
 
-prefix=$1
+prefix="$1"
 
 shift
 
 i=0
 for file in "$@"
 do
-  cp $file $prefix$i.o
+  cp "$file" "$prefix$i.o"
   i=$((i+1))
 done
diff --git a/src/maketools/listobjects b/src/maketools/listobjects
index 1a587e375..652e779a2 100755
--- a/src/maketools/listobjects
+++ b/src/maketools/listobjects
@@ -1,13 +1,13 @@
 #! /bin/bash
 # same as copyobjects but just print the names
 
-prefix=$1
+prefix="$1"
 
 shift
 
 i=0
 for file in "$@"
 do
-  echo -n " $prefix$i.o"
+  echo -n " \"$prefix$i.o\""
   i=$((i+1))
 done
-- 
GitLab