Hi.

The problem seems to be in the install target of the top-level
Makefile, which reads like this:

install : touch-dummy
        @if test -d bin ; then mkdir -p $(DESTDIR)$(bindir) ; \
        for x in `find . -path ./test-suite -prune -o -name *.x -type f` ; do \
                cp $$x $(DESTDIR)$(bindir)/ ; done ; \
        fi
        @echo 'Quantum ESPRESSO binaries installed in $(PREFIX)/bin'

This is the output of "find" in the machine where it does not fail:

./S3DE/iotk/src/iotk.x
./S3DE/iotk/src/iotk_print_kinds.x
./test-suite
./PW/tools/ev.x
./PW/tools/pwi2xsf.x
./PW/tools/dist.x
./PW/tools/kpoints.x
./PW/src/pw.x
./PW/src/generate_rVV10_kernel_table.x
./PW/src/generate_vdW_kernel_table.x
./PW/src/manypw.x

and this is the output of "find" in the machine where it fails:

./S3DE/iotk/src/iotk_print_kinds.x
./S3DE/iotk/src/iotk.x
./PW/tools/kpoints.x
./PW/tools/pwi2xsf.x
./PW/tools/dist.x
./PW/tools/ev.x
./PW/src/pw.x
./PW/src/generate_vdW_kernel_table.x
./PW/src/generate_rVV10_kernel_table.x
./PW/src/manypw.x
./test-suite

There are severl problems here:

* The directory "test-suite" should be excluded but it isn't.

* The output of "find" depends on filesystem ordering, it may be anything.

* The "cp" commands are concatenated using ";" and not "&&", which means
an intermediate "cp" command may fail as far as it's not the last one.

* If we are unlucky enough that "test-suite" is the last one, the whole
"install" target will fail, because copying a directory gives an error.


To reproduce the problem try forcing the output of the find command
so that the "test-suite" directory always comes last:

find . -path ./test-suite -prune -o -name *.x -type f | LC_ALL=C sort

Then I guess it will always fail for you as well.


The attached patch should probably work, it just ensures that the
"test-suite" directory is excluded from the output of "find".

I think it would be very good if you could forward this upstream so
that they fix the Makefile.

Thanks.
--- a/Makefile
+++ b/Makefile
@@ -259,7 +259,7 @@ links : bindir
 
 install : touch-dummy
        @if test -d bin ; then mkdir -p $(DESTDIR)$(bindir) ; \
-       for x in `find . -path ./test-suite -prune -o -name *.x -type f` ; do \
+       for x in `find * ! -path "test-suite/*" -name *.x -type f` ; do \
                cp $$x $(DESTDIR)$(bindir)/ ; done ; \
        fi
        @echo 'Quantum ESPRESSO binaries installed in $(PREFIX)/bin'

Reply via email to