#!/usr/bin/perl
-$integer = '[+-]?[0-9]+';
-$real = '[+-]?[0-9]+\.[0-9]+';
-
-$RANGE = '(\.\.)(\.)?';
-$PLUMIN = q(\'\+\-\');
-$FLOAT = "(($integer)|($real))([eE]($integer))?";
-$EXTENSION = '<|>|~';
-
-$boundary = "($EXTENSION)?$FLOAT";
-$deviation = $FLOAT;
-
-$rule_1 = $boundary . $PLUMIN . $deviation;
-$rule_2 = $boundary . $RANGE . $boundary;
-$rule_3 = $boundary . $RANGE;
-$rule_4 = $RANGE . $boundary;
-$rule_5 = $boundary;
+
+use strict;
+
+my $integer = '[+-]?[0-9]+';
+my $real = '[+-]?[0-9]+\.[0-9]+';
+
+my $RANGE = '(\.\.)(\.)?';
+my $PLUMIN = q(\'\+\-\');
+my $FLOAT = "(($integer)|($real))([eE]($integer))?";
+my $EXTENSION = '<|>|~';
+
+my $boundary = "($EXTENSION)?$FLOAT";
+my $deviation = $FLOAT;
+
+my $rule_1 = $boundary . $PLUMIN . $deviation;
+my $rule_2 = $boundary . $RANGE . $boundary;
+my $rule_3 = $boundary . $RANGE;
+my $rule_4 = $RANGE . $boundary;
+my $rule_5 = $boundary;
print "$rule_5\n";
# src/tools/pginclude/pgcheckdefines
#
+use strict;
+
use Cwd;
use File::Basename;
-$topdir = cwd();
+my $topdir = cwd();
# Programs to use
-$FIND = "find";
-$MAKE = "make";
+my $FIND = "find";
+my $MAKE = "make";
#
# Build arrays of all the .c and .h files in the tree
# Including these .h files would clutter the list of define'd symbols and
# cause a lot of false-positive results.
#
+my (@cfiles, @hfiles);
+
open PIPE, "$FIND * -type f -name '*.c' |"
or die "can't fork: $!";
while (<PIPE>)
# a hash table. To cover the possibility of multiple .h files defining
# the same symbol, we make each hash entry a hash of filenames.
#
-foreach $hfile (@hfiles)
+my %defines;
+
+foreach my $hfile (@hfiles)
{
open HFILE, $hfile
or die "can't open $hfile: $!";
# files it #include's. Then extract all the symbols it tests for defined-ness,
# and check each one against the previously built hashtable.
#
-foreach $file (@hfiles, @cfiles)
+foreach my $file (@hfiles, @cfiles)
{
- ($fname, $fpath) = fileparse($file);
+ my ($fname, $fpath) = fileparse($file);
chdir $fpath or die "can't chdir to $fpath: $!";
#
# hence printing multiple definitions --- we keep the last one, which
# should come from the current Makefile.
#
+ my $MAKECMD;
+
if (-f "Makefile" || -f "GNUmakefile")
{
$MAKECMD = "$MAKE -qp";
}
else
{
- $subdir = $fpath;
+ my $subdir = $fpath;
chop $subdir;
- $top_builddir = "..";
- $tmp = $fpath;
+ my $top_builddir = "..";
+ my $tmp = $fpath;
while (($tmp = dirname($tmp)) ne '.')
{
$top_builddir = $top_builddir . "/..";
$MAKECMD =
"$MAKE -qp 'subdir=$subdir' 'top_builddir=$top_builddir' -f '$top_builddir/src/Makefile.global'";
}
+
+ my ($CPPFLAGS, $CFLAGS, $CFLAGS_SL, $PTHREAD_CFLAGS, $CC);
+
open PIPE, "$MAKECMD |"
or die "can't fork: $!";
while (<PIPE>)
# "gcc -H" reports inclusions on stderr as "... filename" where the
# number of dots varies according to nesting depth.
#
- @includes = ();
- $COMPILE = "$CC $CPPFLAGS $CFLAGS -H -E $fname";
+ my @includes = ();
+ my $COMPILE = "$CC $CPPFLAGS $CFLAGS -H -E $fname";
open PIPE, "$COMPILE 2>&1 >/dev/null |"
or die "can't fork: $!";
while (<PIPE>)
{
if (m/^\.+ (.*)/)
{
- $include = $1;
+ my $include = $1;
# Ignore system headers (absolute paths); but complain if a
# .c file includes a system header before any PG header.
$include =~ s|^\./||;
# Make path relative to top of tree
- $ipath = $fpath;
+ my $ipath = $fpath;
while ($include =~ s|^\.\./||)
{
$ipath = dirname($ipath) . "/";
#
open FILE, $fname
or die "can't open $file: $!";
- $inif = 0;
+ my $inif = 0;
while (<FILE>)
{
- $line = $_;
+ my $line = $_;
if ($line =~ m/^\s*#\s*ifdef\s+(\w+)/)
{
- $symbol = $1;
- &checkit;
+ checkit($file, $1, @includes);
}
if ($line =~ m/^\s*#\s*ifndef\s+(\w+)/)
{
- $symbol = $1;
- &checkit;
+ checkit($file, $1, @includes);
}
if ($line =~ m/^\s*#\s*if\s+/)
{
{
while ($line =~ s/\bdefined(\s+|\s*\(\s*)(\w+)//)
{
- $symbol = $2;
- &checkit;
+ checkit($file, $2, @includes);
}
if (!($line =~ m/\\$/))
{
# Check an is-defined reference
sub checkit
{
+ my ($file, $symbol, @includes) = @_;
# Ignore if symbol isn't defined in any PG include files
if (!defined $defines{$symbol})
# occur after the use of the symbol. Given our normal file layout,
# however, the risk is minimal.
#
- foreach $deffile (keys %{ $defines{$symbol} })
+ foreach my $deffile (keys %{ $defines{$symbol} })
{
return if $deffile eq $file;
- foreach $reffile (@includes)
+ foreach my $reffile (@includes)
{
return if $deffile eq $reffile;
}
#
if ($file =~ m/\.h$/)
{
- foreach $deffile (keys %{ $defines{$symbol} })
+ foreach my $deffile (keys %{ $defines{$symbol} })
{
return if $deffile eq 'src/include/c.h';
return if $deffile eq 'src/include/postgres.h';
}
#
- @places = keys %{ $defines{$symbol} };
+ my @places = keys %{ $defines{$symbol} };
print "$file references $symbol, defined in @places\n";
# print "includes: @includes\n";
# "devel", "alphaN", "betaN", "rcN".
#
+use strict;
+
# Major version is hard-wired into the script. We update it when we branch
# a new development version.
-$majorversion = 10;
+my $majorversion = 10;
# Validate argument and compute derived variables
-$minor = shift;
+my $minor = shift;
defined($minor) || die "$0: missing required argument: minor-version\n";
+my ($dotneeded, $numericminor);
+
if ($minor =~ m/^\d+$/)
{
$dotneeded = 1;
die "$0: minor-version must be N, devel, alphaN, betaN, or rcN\n";
}
+my $fullversion;
+
# Create various required forms of the version number
if ($dotneeded)
{
{
$fullversion = $majorversion . $minor;
}
-$numericversion = $majorversion . "." . $numericminor;
-$padnumericversion = sprintf("%d%04d", $majorversion, $numericminor);
+my $numericversion = $majorversion . "." . $numericminor;
+my $padnumericversion = sprintf("%d%04d", $majorversion, $numericminor);
# Get the autoconf version number for eventual nag message
# (this also ensures we're in the right directory)
-$aconfver = "";
+my $aconfver = "";
open(FILE, "configure.in") || die "could not read configure.in: $!\n";
while (<FILE>)
{
# Update configure.in and other files that contain version numbers
-$fixedfiles = "";
+my $fixedfiles = "";
sed_file("configure.in",
"-e 's/AC_INIT(\\[PostgreSQL\\], \\[[0-9a-z.]*\\]/AC_INIT([PostgreSQL], [$fullversion]/'"