The install script goes wrong when there is an existing installation on Linux x86_64 with no 32-bit glibc. Tested on RHEL 6.4 patched to 2013-05-22.
This results in (v. 13.5) :
Do you accept these terms? (accept,decline) accept
Installing software into /usr/local/pgi (this may take some time).
##############./install: line 431: cd: /usr/local/pgi/linux86/13.5: No such file or directory
#./install: line 431: cd: /usr/local/pgi/linux86/13.5: No such file or directory
tar: doc/pgdbg13ug.pdf: file changed as we read it
tar: doc/pgdbginstall135.pdf: file changed as we read it
tar: doc/pgiinstall135.pdf: file changed as we read it
tar: doc/pgicudaforug.pdf: file changed as we read it
tar: doc/pgi13ref.pdf: file changed as we read it
tar: doc/pgirn135.pdf: file changed as we read it
tar: doc/pgdbgrn135.pdf: file changed as we read it
tar: doc/acml.pdf: file changed as we read it
tar: doc/pgifortref.pdf: file changed as we read it
tar: doc/pgi13ug.pdf: file changed as we read it
tar: doc/pgprof13ug.pdf: file changed as we read it
tar: doc: file changed as we read it
#./install: line 431: cd: /usr/local/pgi/linux86/13.5: No such file or directory
tar: EXAMPLES/MPI/NPB2.3/FT: file changed as we read it
tar: EXAMPLES/MPI/NPB2.3/MG: file changed as we read it
tar: EXAMPLES/MPI/NPB2.3/MPI_dummy: file changed as we read it
tar: EXAMPLES/MPI/NPB2.3/LU: file changed as we read it
tar: EXAMPLES/MPI/NPB2.3/SP: file changed as we read it
tar: EXAMPLES/MPI/NPB2.3/BT: file changed as we read it
tar: EXAMPLES/MPI/NPB2.3: file changed as we read it
tar: EXAMPLES/MPI/hpfnpb/bt/src: file changed as we read it
tar: EXAMPLES/MPI/hpfnpb/bt: file changed as we read it
tar: EXAMPLES/MPI/hpfnpb/sp/src: file changed as we read it
tar: EXAMPLES/MPI/hpfnpb: file changed as we read it
tar: EXAMPLES/MPI/mpi: file changed as we read it
tar: EXAMPLES/MPI/scalapack: file changed as we read it
tar: EXAMPLES/MPI/blacs/blacstest.f: file changed as we read it
tar: EXAMPLES/MPI/blacs: file changed as we read it
tar: EXAMPLES/fftpde/STEPS: file changed as we read it
tar: EXAMPLES/fftpde: file changed as we read it
#./install: line 431: cd: /usr/local/pgi/linux86/13.5: No such file or directory
#./install: line 431: cd: /usr/local/pgi/linux86/13.5: No such file or directory
#./install: line 431: cd: /usr/local/pgi/linux86/13.5: No such file or directory
#./install: line 431: cd: /usr/local/pgi/linux86/13.5: No such file or directory
#./install: line 431: cd: /usr/local/pgi/linux86/13.5: No such file or directory
#./install: line 431: cd: /usr/local/pgi/linux86/13.5: No such file or directory
#./install: line 431: cd: /usr/local/pgi/linux86/13.5: No such file or directory
###########
then e.g.
Installing PGI JAVA components into /usr/local/pgi
This might take awhile ...
./install: line 626: cd: /usr/local/pgi/linux86/13.5/lib: No such file or directory
./install: line 630: cd: /usr/local/pgi/linux86/13.5/include: No such file or directory
Installing PGI CUDA components into /usr/local/pgi
The code at fault includes
428 if test -d $INSTALL_DIR/linux86 ; then
429 for i in `cat $COMMON` ; do
430 x=`basename $i`
431 tar cf - $x | ( cd $INSTALL_DIR/linux86/$release; tar xf - )
432 echo -n \#
433 done
434 fi
which
i) tries to change to a directory it has not checked exists, then
ii) extracts files where it thinks it should be.
As can be seen, the test (line 428) will always succeed when an existing installation means $INSTALL_DIR/linux86 exists, so the block is executed.
However, $INSTALL_DIR/linux86/$release will never exist because the install script does not create it if /usr/lib/libcrt1.o does not exist - so then the install script just uses tar to write a bunch of files on top of themselves.
Better would be e.g.
428 if test -d $INSTALL_DIR/linux86/$release ; then
429 for i in `cat $COMMON` ; do
430 x=`basename $i`
431 tar cf - $x | ( cd $INSTALL_DIR/linux86/$release && tar xf - )
432 echo -n \#
433 done
434 fi
or perhaps (?)
428 if test $support_32_bit -eq 1; then
429 for i in `cat $COMMON` ; do
430 x=`basename $i`
431 tar cf - $x | ( cd $INSTALL_DIR/linux86/$release && tar xf - )
432 echo -n \#
433 done
434 fi
and for the script to create $INSTALL_DIR/linux86/$release on 64-bit platforms if it is needed!
This block:
141 # Do not copy linux86 directory if x86-64 and no 32-bit support.
142
143 support_32_bit=1
144 if test "$target" = "linux86-64" ; then
145 if test ! -f /usr/lib/crt1.o -a ! -f /usr/lib32/crt1.o ; then
146 support_32_bit=0
[...]
159 fi
160 if test $support_32_bit -eq 1; then
161 PART2=`cat $SRC/.parts/linux86`
162 PART="$PART $PART2"
163 fi
164 fi
is perhaps questionable, because the directories in $PART2 are the ones written to in later lines in the script.
It all works properly if glibc-devel.i686 is installed (RHEL), because then support_32_bit=1, so the linux86 directories do get included in $PART, and then the bits of script that try to write to those directories don’t fall over.
The script should be fixed, though.