From 4b362c662e35c0edd6ed66523f94ebfe9f466329 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sat, 19 Jul 2008 04:01:29 +0000
Subject: [PATCH] Avoid substituting NAMEDATALEN, FLOAT4PASSBYVAL, and
 FLOAT8PASSBYVAL into the postgres.bki file during build, because we want that
 file to be entirely platform- and configuration-independent; else it can't
 safely be put into /usr/share on multiarch machines.  We can do the
 substitution during initdb, instead.  FLOAT4PASSBYVAL and FLOAT8PASSBYVAL are
 new breakage as of 8.4, while the NAMEDATALEN hazard has been there all along
 but I guess no one tripped over it.  Noticed while trying to build
 "universal" OS X binaries.

---
 src/backend/catalog/genbki.sh | 28 +++++++---------------------
 src/bin/initdb/initdb.c       | 14 +++++++++++++-
 src/tools/msvc/Genbki.pm      | 18 +-----------------
 3 files changed, 21 insertions(+), 39 deletions(-)

diff --git a/src/backend/catalog/genbki.sh b/src/backend/catalog/genbki.sh
index a07af451670..f5445010854 100644
--- a/src/backend/catalog/genbki.sh
+++ b/src/backend/catalog/genbki.sh
@@ -11,7 +11,7 @@
 #
 #
 # IDENTIFICATION
-#    $PostgreSQL: pgsql/src/backend/catalog/genbki.sh,v 1.44 2008/04/21 00:26:45 tgl Exp $
+#    $PostgreSQL: pgsql/src/backend/catalog/genbki.sh,v 1.45 2008/07/19 04:01:29 tgl Exp $
 #
 # NOTES
 #    non-essential whitespace is removed from the generated file.
@@ -59,7 +59,7 @@ do
             echo "  $CMDNAME [ -I dir ] --set-version=VERSION -o prefix files..."
             echo
             echo "Options:"
-            echo "  -I  path to pg_config_manual.h file"
+            echo "  -I  path to include files"
             echo "  -o  prefix of output files"
             echo "  --set-version  PostgreSQL version number for initdb cross-check"
             echo
@@ -106,22 +106,11 @@ TMPFILE="genbkitmp$$.c"
 trap "rm -f $TMPFILE ${OUTPUT_PREFIX}.bki.$$ ${OUTPUT_PREFIX}.description.$$ ${OUTPUT_PREFIX}.shdescription.$$" 0 1 2 3 15
 
 
-# Get NAMEDATALEN from pg_config_manual.h
-for dir in $INCLUDE_DIRS; do
-    if [ -f "$dir/pg_config_manual.h" ]; then
-        NAMEDATALEN=`grep '^#define[ 	]*NAMEDATALEN' $dir/pg_config_manual.h | $AWK '{ print $3 }'`
-        break
-    fi
-done
-
-# Get FLOAT4PASSBYVAL and FLOAT8PASSBYVAL from pg_config.h
-for dir in $INCLUDE_DIRS; do
-    if [ -f "$dir/pg_config.h" ]; then
-        FLOAT4PASSBYVAL=`grep '^#define[ 	]*FLOAT4PASSBYVAL' $dir/pg_config.h | $AWK '{ print $3 }'`
-        FLOAT8PASSBYVAL=`grep '^#define[ 	]*FLOAT8PASSBYVAL' $dir/pg_config.h | $AWK '{ print $3 }'`
-        break
-    fi
-done
+# CAUTION: be wary about what symbols you substitute into the .bki file here!
+# It's okay to substitute things that are expected to be really constant
+# within a given Postgres release, such as fixed OIDs.  Do not substitute
+# anything that could depend on platform or configuration.  (The right place
+# to handle those sorts of things is in initdb.c's bootstrap_template1().)
 
 # Get BOOTSTRAP_SUPERUSERID from catalog/pg_authid.h
 for dir in $INCLUDE_DIRS; do
@@ -172,9 +161,6 @@ sed -e "s/;[ 	]*$//g" \
     -e "s/^TransactionId/xid/g" \
     -e "s/(TransactionId/(xid/g" \
     -e "s/PGUID/$BOOTSTRAP_SUPERUSERID/g" \
-    -e "s/NAMEDATALEN/$NAMEDATALEN/g" \
-    -e "s/FLOAT4PASSBYVAL/$FLOAT4PASSBYVAL/g" \
-    -e "s/FLOAT8PASSBYVAL/$FLOAT8PASSBYVAL/g" \
     -e "s/PGNSP/$PG_CATALOG_NAMESPACE/g" \
 | $AWK '
 # ----------------
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index cc2ea273ea5..a7ef3c9227d 100644
--- a/src/bin/initdb/initdb.c
+++ b/src/bin/initdb/initdb.c
@@ -42,7 +42,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  * Portions taken from FreeBSD.
  *
- * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.157 2008/06/26 01:35:45 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.158 2008/07/19 04:01:29 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1313,6 +1313,7 @@ bootstrap_template1(char *short_version)
 	char	   *talkargs = "";
 	char	  **bki_lines;
 	char		headerline[MAXPGPATH];
+	char		buf[64];
 
 	printf(_("creating template1 database in %s/base/1 ... "), pg_data);
 	fflush(stdout);
@@ -1337,6 +1338,17 @@ bootstrap_template1(char *short_version)
 		exit_nicely();
 	}
 
+	/* Substitute for various symbols used in the BKI file */
+
+	sprintf(buf, "%d", NAMEDATALEN);
+	bki_lines = replace_token(bki_lines, "NAMEDATALEN", buf);
+
+	bki_lines = replace_token(bki_lines, "FLOAT4PASSBYVAL",
+							  FLOAT4PASSBYVAL ? "true" : "false");
+
+	bki_lines = replace_token(bki_lines, "FLOAT8PASSBYVAL",
+							  FLOAT8PASSBYVAL ? "true" : "false");
+
 	bki_lines = replace_token(bki_lines, "POSTGRES", username);
 
 	bki_lines = replace_token(bki_lines, "ENCODING", encodingid);
diff --git a/src/tools/msvc/Genbki.pm b/src/tools/msvc/Genbki.pm
index d8fe3027961..f8a7294c7db 100644
--- a/src/tools/msvc/Genbki.pm
+++ b/src/tools/msvc/Genbki.pm
@@ -11,7 +11,7 @@
 #
 #
 # IDENTIFICATION
-#    $PostgreSQL: pgsql/src/tools/msvc/Genbki.pm,v 1.4 2008/04/21 00:26:47 tgl Exp $
+#    $PostgreSQL: pgsql/src/tools/msvc/Genbki.pm,v 1.5 2008/07/19 04:01:29 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -33,19 +33,6 @@ sub genbki
     $version =~ /^(\d+\.\d+)/ || die "Bad format verison $version\n";
     my $majorversion = $1;
 
-    my $pgext = read_file("src/include/pg_config_manual.h");
-    $pgext =~ /^#define\s+NAMEDATALEN\s+(\d+)$/mg
-      || die "Could not read NAMEDATALEN from pg_config_manual.h\n";
-    my $namedatalen = $1;
-
-    my $pgconf = read_file("src/include/pg_config.h");
-    $pgconf =~ /^#define\s+FLOAT4PASSBYVAL\s+(\w+)$/mg
-      || die "Could not read FLOAT4PASSBYVAL from pg_config.h\n";
-    my $float4passbyval = $1;
-    $pgconf =~ /^#define\s+FLOAT8PASSBYVAL\s+(\w+)$/mg
-      || die "Could not read FLOAT8PASSBYVAL from pg_config.h\n";
-    my $float8passbyval = $1;
-
     my $pgauthid = read_file("src/include/catalog/pg_authid.h");
     $pgauthid =~ /^#define\s+BOOTSTRAP_SUPERUSERID\s+(\d+)$/mg
       || die "Could not read BOOTSTRAUP_SUPERUSERID from pg_authid.h\n";
@@ -78,9 +65,6 @@ sub genbki
     $indata =~ s{^TransactionId}{xid}gm;
     $indata =~ s{\(TransactionId}{(xid}g;
     $indata =~ s{PGUID}{$bootstrapsuperuserid}g;
-    $indata =~ s{NAMEDATALEN}{$namedatalen}g;
-    $indata =~ s{FLOAT4PASSBYVAL}{$float4passbyval}g;
-    $indata =~ s{FLOAT8PASSBYVAL}{$float8passbyval}g;
     $indata =~ s{PGNSP}{$pgcatalognamespace}g;
 
     #print $indata;
-- 
GitLab