From 8d355d7bbfea045415afe66a30e321d4621cc1b9 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Tue, 23 Jun 2009 03:46:00 +0000
Subject: [PATCH] Fix the makefiles to fail cleanly if Perl is needed but not
 present.  This used to work as intended, but got broken some time ago (a
 quoted empty string is not an empty string), and got broken some more by the
 changes to generate ecpg's preproc.y automatically.  Given all the
 unprotected uses of $(PERL) elsewhere, it seems best to make use of the
 $(missing) script rather than trying to ensure each such use is protected
 individually.  Also fix various bits of documentation that omitted to mention
 Perl as a requirement for building from a CVS pull.  Per a complaint from
 Robert Haas.

---
 README.CVS                     |  6 +++---
 config/missing                 | 25 ++++++++++++++++++++++---
 doc/src/sgml/cvs.sgml          |  3 ++-
 doc/src/sgml/installation.sgml | 16 ++++++++++++++--
 src/Makefile.global.in         | 10 +++++++---
 src/bin/psql/Makefile          |  7 +------
 6 files changed, 49 insertions(+), 18 deletions(-)

diff --git a/README.CVS b/README.CVS
index 37daaf6bc30..4eb8377a500 100644
--- a/README.CVS
+++ b/README.CVS
@@ -8,7 +8,7 @@ If you are using CVS, you can view the most recent install instructions at:
 and the current release notes at:
 	http://developer.postgresql.org/docs/postgres/release.html
 
-Users compiling from CVS will also need compatible versions of Bison and
-Flex, as discussed in the install documentation.  Bison and Flex are not
+Users compiling from CVS will also need compatible versions of Bison, Flex,
+and Perl, as discussed in the install documentation.  These programs are not
 needed when using a tarball, since the files they are needed to build are
-already present in the tarball.
+already present in the tarball.  (On Windows, however, you need Perl anyway.)
diff --git a/config/missing b/config/missing
index 2d47501bb53..16e31756f6a 100755
--- a/config/missing
+++ b/config/missing
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-# $PostgreSQL: pgsql/config/missing,v 1.4 2006/03/11 04:38:28 momjian Exp $
+# $PostgreSQL: pgsql/config/missing,v 1.5 2009/06/23 03:46:00 tgl Exp $
 
 # This is *not* the GNU `missing' script, although it is similar in
 # concept. You can call it from the makefiles to get consistent
@@ -17,7 +17,7 @@ case $1 in
 WARNING: \`$1' is missing on your system. You should only need it
 if you changed the file \`$input'; these changes will not take effect.
 You can get $1 from a GNU mirror site.
-***"
+***" >&2
             echo "touch $output"
             touch "$output"
             exit 0
@@ -28,8 +28,27 @@ ERROR: \`$1' is missing on your system. It is needed to create the
 file \`$output'. You can either get $1 from a GNU mirror site
 or download an official distribution of PostgreSQL, which contains
 pre-packaged $1 output.
-***"
+***" >&2
             exit 1
         fi
         ;;
+
+    perl)
+        # `missing perl'
+        echo "\
+***
+ERROR: Perl is missing on your system. It is needed unless you are building
+from an unmodified official distribution of PostgreSQL.
+***" >&2
+        exit 1
+        ;;
+
+    *)
+        # `missing something-or-other'
+        echo "\
+***
+ERROR: \`$1' is missing on your system.
+***" >&2
+        exit 1
+        ;;
 esac
diff --git a/doc/src/sgml/cvs.sgml b/doc/src/sgml/cvs.sgml
index 83b721cdb97..55b17a23d31 100644
--- a/doc/src/sgml/cvs.sgml
+++ b/doc/src/sgml/cvs.sgml
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/cvs.sgml,v 1.50 2008/04/21 11:06:13 mha Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/cvs.sgml,v 1.51 2009/06/23 03:46:00 tgl Exp $ -->
 
 <appendix id="cvs">
  <appendixinfo>
@@ -171,6 +171,7 @@ cvs update
    pull requires reasonably up-to-date versions of <application>bison</>
    and <application>flex</>, which are not needed to build from a distribution
    tarball because the files made with them are pre-built in a tarball.
+   You will need Perl as well.
    Otherwise the tool requirements are the same as building from source.
   </para>
  </sect1>
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index f6f5166adac..0f9ce3eeee0 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/installation.sgml,v 1.324 2009/06/17 21:58:49 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/installation.sgml,v 1.325 2009/06/23 03:46:00 tgl Exp $ -->
 
 <chapter id="installation">
  <title><![%standalone-include[<productname>PostgreSQL</>]]>
@@ -294,13 +294,25 @@ su - postgres
       </indexterm>
 
       GNU <application>Flex</> and <application>Bison</>
-      are needed to build a CVS checkout or if you changed the actual
+      are needed to build from a CVS checkout, or if you changed the actual
       scanner and parser definition files. If you need them, be sure
       to get <application>Flex</> 2.5.4 or later and
       <application>Bison</> 1.875 or later. Other <application>lex</>
       and <application>yacc</> programs cannot be used.
      </para>
     </listitem>
+    <listitem>
+     <para>
+      <indexterm>
+       <primary>perl</primary>
+      </indexterm>
+
+      <application>Perl</> is also needed to build from a CVS checkout,
+      or if you changed the input files for any of the build steps that
+      use Perl scripts.  If building on Windows you will need
+      <application>Perl</> in any case.
+     </para>
+    </listitem>
    </itemizedlist>
   </para>
 
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index 1facf7c315e..763bdc004a0 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -1,5 +1,5 @@
 # -*-makefile-*-
-# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.253 2009/02/19 10:32:30 petere Exp $
+# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.254 2009/06/23 03:46:00 tgl Exp $
 
 #------------------------------------------------------------------------------
 # All PostgreSQL makefiles include this file and use the variables it sets,
@@ -248,8 +248,12 @@ X = @EXEEXT@
 
 # Perl 
 
-# quoted for pathname with spaces
-PERL			= "@PERL@"
+ifneq (@PERL@,)
+    # quoted to protect pathname with spaces
+    PERL		= "@PERL@"
+else
+    PERL		= $(missing) perl
+endif
 perl_archlibexp		= @perl_archlibexp@
 perl_privlibexp		= @perl_privlibexp@
 perl_useshrplib		= @perl_useshrplib@
diff --git a/src/bin/psql/Makefile b/src/bin/psql/Makefile
index d8a1f60c47c..01049d8af24 100644
--- a/src/bin/psql/Makefile
+++ b/src/bin/psql/Makefile
@@ -5,7 +5,7 @@
 # Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
 # Portions Copyright (c) 1994, Regents of the University of California
 #
-# $PostgreSQL: pgsql/src/bin/psql/Makefile,v 1.62 2009/03/07 00:13:58 alvherre Exp $
+# $PostgreSQL: pgsql/src/bin/psql/Makefile,v 1.63 2009/06/23 03:46:00 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -40,13 +40,8 @@ dumputils.c keywords.c: % : $(top_srcdir)/src/bin/pg_dump/%
 kwlookup.c: % : $(top_srcdir)/src/backend/parser/%
 	rm -f $@ && $(LN_S) $< .
 
-ifdef PERL
 $(srcdir)/sql_help.h: create_help.pl $(wildcard $(REFDOCDIR)/*.sgml)
 	$(PERL) $< $(REFDOCDIR) $@
-else
-$(srcdir)/sql_help.h:
-	@echo "*** Perl is needed to build psql help."
-endif
 
 $(srcdir)/psqlscan.c: psqlscan.l
 ifdef FLEX
-- 
GitLab