Thread: 8.1 'make check' fails

8.1 'make check' fails

From
Wes
Date:
System: Mac OS X 10.4.2
PostgreSQL: 8.1 b2

Running 'make check', I get the following failure:

rm -rf ./testtablespace
mkdir ./testtablespace
/bin/sh ./pg_regress --temp-install --top-builddir=../../..
--temp-port=55432 --schedule=./parallel_schedule --multibyte=SQL_ASCII
--load-language=plpgsql
============== creating temporary installation        ==============

pg_regress: installation failed
Examine ./log/install.log for the reason.

make[2]: *** [check] Error 2
make[1]: *** [check] Error 2
make: *** [check] Error 2


Looking at the install log, I see it apparently does not handle directories
that contain blanks - the paths are not being quoted:

gzip -d -c ./postgres.tar.gz | ( cd /Volumes/G4
Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regress/./tmp_che
ck/install/usr/local/pgsql8.1b2/doc/html && /usr/bin/tar xf - )
for file in man1/*.1 man7/*.7 ; do \
  /bin/sh ../config/install-sh -c -m 644 $file /Volumes/G4
Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regress/./tmp_che
ck/install/usr/local/pgsql8.1b2/man/$file || exit; \
done
cp: /Volumes/G4 is a directory (not copied).
make[4]: *** [install] Error 1
make[3]: *** [install] Error 2



Re: 8.1 'make check' fails

From
"William ZHANG"
Date:
Yes, the Makefiles cannot deal with spaces correctly.
Seems we should avoid use the `complicated' path.

"Wes" <wespvp@syntegra.com> wrote
> System: Mac OS X 10.4.2
> PostgreSQL: 8.1 b2
>
> Running 'make check', I get the following failure:
>
> rm -rf ./testtablespace
> mkdir ./testtablespace
> /bin/sh ./pg_regress --temp-install --top-builddir=../../..
> --temp-port=55432 --schedule=./parallel_schedule --multibyte=SQL_ASCII
> --load-language=plpgsql
> ============== creating temporary installation        ==============
>
> pg_regress: installation failed
> Examine ./log/install.log for the reason.
>
> make[2]: *** [check] Error 2
> make[1]: *** [check] Error 2
> make: *** [check] Error 2
>
>
> Looking at the install log, I see it apparently does not handle
directories
> that contain blanks - the paths are not being quoted:
>
> gzip -d -c ./postgres.tar.gz | ( cd /Volumes/G4
>
Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regress/./tmp_che
> ck/install/usr/local/pgsql8.1b2/doc/html && /usr/bin/tar xf - )
> for file in man1/*.1 man7/*.7 ; do \
>   /bin/sh ../config/install-sh -c -m 644 $file /Volumes/G4
>
Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regress/./tmp_che
> ck/install/usr/local/pgsql8.1b2/man/$file || exit; \
> done
> cp: /Volumes/G4 is a directory (not copied).
> make[4]: *** [install] Error 1
> make[3]: *** [install] Error 2
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Have you searched our list archives?
>
>                http://archives.postgresql.org
>



Re: 8.1 'make check' fails

From
Wes
Date:
On 10/2/05 7:48 AM, "William ZHANG" <uniware@zedware.org> wrote:

> Yes, the Makefiles cannot deal with spaces correctly.
> Seems we should avoid use the `complicated' path.

Such paths are normal on systems with a GUI interface.  They are not out of
the ordinary nor complicated.

Wes



Re: 8.1 'make check' fails

From
Martijn van Oosterhout
Date:
On Sun, Oct 02, 2005 at 12:15:05PM -0500, Wes wrote:
> On 10/2/05 7:48 AM, "William ZHANG" <uniware@zedware.org> wrote:
>
> > Yes, the Makefiles cannot deal with spaces correctly.
> > Seems we should avoid use the `complicated' path.
>
> Such paths are normal on systems with a GUI interface.  They are not out of
> the ordinary nor complicated.

Problem is, the space is also the word seperator. So if you have a
space seperated list of words (ie normal for make), names with spaces
are a pain.

It occurred to me that you might be able to replace the spaces in the
paths with question marks. Then any invokation of the shell will expand
the question mark back to a space as part of parameter expansion.

Alternativly, replace the spaces with some utf-8 sequence that looks
like a space but isn't an ASCII space. Windows is case-insensetive so
it may map the different "spaces" together, but they'd be distinct for
make.

Good luck...
--
Martijn van Oosterhout   <kleptog@svana.org>   http://svana.org/kleptog/
> Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a
> tool for doing 5% of the work and then sitting around waiting for someone
> else to do the other 95% so you can sue them.

Attachment

Re: 8.1 'make check' fails

From
Tom Lane
Date:
Wes <wespvp@syntegra.com> writes:
> On 10/2/05 7:48 AM, "William ZHANG" <uniware@zedware.org> wrote:
>> Yes, the Makefiles cannot deal with spaces correctly.
>> Seems we should avoid use the `complicated' path.

> Such paths are normal on systems with a GUI interface.  They are not out of
> the ordinary nor complicated.

Feel free to submit a patch to make it work.

            regards, tom lane

Re: 8.1 'make check' fails

From
Wes
Date:
On 10/2/05 4:13 PM, "Martijn van Oosterhout" <kleptog@svana.org> wrote:

> Problem is, the space is also the word seperator. So if you have a
> space seperated list of words (ie normal for make), names with spaces
> are a pain.
>
> It occurred to me that you might be able to replace the spaces in the
> paths with question marks. Then any invokation of the shell will expand
> the question mark back to a space as part of parameter expansion.

The normal build seems to work, as does 'make install' (although the install
/path is /usr/local).

I would have thought it was just a matter of quoting file paths in all the
makefiles.  Instead of

gzip -d -c $(srcdir)/postgres.tar.gz | ( cd $(DESTDIR)$(docdir)/html...

It should be

gzip -d -c "$(srcdir)/postgres.tar.gz" | ( cd "$(DESTDIR)$(docdir)/html"...

But it's not quite that simple.  See below.  To resolve my immediate
problem, I can just temporarily rename my hard drive.  I'm just reporting
this as a problem that should be fixed.

Wes

install.log has:

make -C doc install
make[4]: Nothing to be done for `install'.
make -C src install
/bin/sh ../config/mkinstalldirs "/Volumes/G4
Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regress/./tmp_che
ck/install/usr/local/pgsql8.1b2/lib/pgxs/src"
mkdir /Volumes/G4/Boot
mkdir /Volumes/G4/Boot/Users
mkdir /Volumes/G4/Boot/Users/pgsql
mkdir /Volumes/G4/Boot/Users/pgsql/src
mkdir /Volumes/G4/Boot/Users/pgsql/src/postgres
mkdir /Volumes/G4/Boot/Users/pgsql/src/postgres/postgresql-8.1beta2
mkdir /Volumes/G4/Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src
mkdir /Volumes/G4/Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test
mkdir
/Volumes/G4/Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regre
ss
mkdir
/Volumes/G4/Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regre
ss/./tmp_check
mkdir
/Volumes/G4/Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regre
ss/./tmp_check/install
mkdir
/Volumes/G4/Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regre
ss/./tmp_check/install/usr
mkdir
/Volumes/G4/Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regre
ss/./tmp_check/install/usr/local
mkdir
/Volumes/G4/Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regre
ss/./tmp_check/install/usr/local/pgsql8.1b2
mkdir
/Volumes/G4/Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regre
ss/./tmp_check/install/usr/local/pgsql8.1b2/lib
mkdir
/Volumes/G4/Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regre
ss/./tmp_check/install/usr/local/pgsql8.1b2/lib/pgxs
mkdir
/Volumes/G4/Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regre
ss/./tmp_check/install/usr/local/pgsql8.1b2/lib/pgxs/src
/bin/sh ../config/install-sh -c -m 644 Makefile.global "/Volumes/G4
Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regress/./tmp_che
ck/install/usr/local/pgsql8.1b2/lib/pgxs/src/Makefile.global"
/bin/sh ../config/install-sh -c -m 644 Makefile.port "/Volumes/G4
Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regress/./tmp_che
ck/install/usr/local/pgsql8.1b2/lib/pgxs/src/Makefile.port"
/bin/sh ../config/install-sh -c -m 644 "./Makefile.shlib" "/Volumes/G4
Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regress/./tmp_che
ck/install/usr/local/pgsql8.1b2/lib/pgxs/src/Makefile.shlib"
/bin/sh ../config/install-sh -c -m 644 "./nls-global.mk" "/Volumes/G4
Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regress/./tmp_che
ck/install/usr/local/pgsql8.1b2/lib/pgxs/src/nls-global.mk"
make -C port install
/bin/sh ../../config/install-sh -c -m 644  libpgport.a /Volumes/G4
Boot/Users/pgsql/src/postgres/postgresql-8.1beta2/src/test/regress/./tmp_che
ck/install/usr/local/pgsql8.1b2/lib
cp: /Volumes/G4 is a directory (not copied).
make[5]: *** [install] Error 1
make[4]: *** [install] Error 2
make[3]: *** [install] Error 2