Fix the makefiles to fail cleanly if Perl is needed but not present. This
authorTom Lane <[email protected]>
Tue, 23 Jun 2009 03:46:00 +0000 (03:46 +0000)
committerTom Lane <[email protected]>
Tue, 23 Jun 2009 03:46:00 +0000 (03:46 +0000)
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
config/missing
doc/src/sgml/cvs.sgml
doc/src/sgml/installation.sgml
src/Makefile.global.in
src/bin/psql/Makefile

index 37daaf6bc30ab3a26763fb0fb48b0c29b64e7430..4eb8377a5008054894ae9bc71abef909b662aefb 100644 (file)
@@ -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.)
index 1c8bd8af96d1d3ad327c3a87391c7ca053e3b27b..896a33c200aed7c614897d3ec69297cadfd90af0 100755 (executable)
@@ -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
index 0b19b00e5d7e7d277b03b5060c8bfffd3e4fe4f0..003e4e77605c0176f1b400c964bd72c0b4cbe997 100644 (file)
@@ -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>
index 2c053e41476edf7ff99bea6cf451987f5c3ee12d..c058141079961c0b81d7a814a54df8527e531c76 100644 (file)
@@ -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>
 
index 829ce7218df923fc92a0b7f2389e8b5347ea7ade..6244e8ac8cab1ab9455ca0c33fec680282989e6e 100644 (file)
@@ -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@
index cc7d42ec4ec5262b61717997a055884fca732ad5..1d82caf8d09b01592b563d3621741f94b634aab3 100644 (file)
@@ -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