mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	pgindent run for release 9.3
This is the first run of the Perl-based pgindent script. Also update pgindent instructions.
This commit is contained in:
		@@ -39,20 +39,22 @@ $MAKE = "make";
 | 
			
		||||
# cause a lot of false-positive results.
 | 
			
		||||
#
 | 
			
		||||
open PIPE, "$FIND * -type f -name '*.c' |"
 | 
			
		||||
    or die "can't fork: $!";
 | 
			
		||||
while (<PIPE>) {
 | 
			
		||||
    chomp;
 | 
			
		||||
    push @cfiles, $_;
 | 
			
		||||
  or die "can't fork: $!";
 | 
			
		||||
while (<PIPE>)
 | 
			
		||||
{
 | 
			
		||||
	chomp;
 | 
			
		||||
	push @cfiles, $_;
 | 
			
		||||
}
 | 
			
		||||
close PIPE or die "$FIND failed: $!";
 | 
			
		||||
 | 
			
		||||
open PIPE, "$FIND * -type f -name '*.h' |"
 | 
			
		||||
    or die "can't fork: $!";
 | 
			
		||||
while (<PIPE>) {
 | 
			
		||||
    chomp;
 | 
			
		||||
    push @hfiles, $_ unless
 | 
			
		||||
	m|^src/include/port/| ||
 | 
			
		||||
	m|^src/backend/port/\w+/|;
 | 
			
		||||
  or die "can't fork: $!";
 | 
			
		||||
while (<PIPE>)
 | 
			
		||||
{
 | 
			
		||||
	chomp;
 | 
			
		||||
	push @hfiles, $_
 | 
			
		||||
	  unless m|^src/include/port/|
 | 
			
		||||
		  || m|^src/backend/port/\w+/|;
 | 
			
		||||
}
 | 
			
		||||
close PIPE or die "$FIND failed: $!";
 | 
			
		||||
 | 
			
		||||
@@ -61,15 +63,18 @@ close PIPE or die "$FIND failed: $!";
 | 
			
		||||
# 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) {
 | 
			
		||||
    open HFILE, $hfile
 | 
			
		||||
	or die "can't open $hfile: $!";
 | 
			
		||||
    while (<HFILE>) {
 | 
			
		||||
	if (m/^\s*#\s*define\s+(\w+)/) {
 | 
			
		||||
	    $defines{$1}{$hfile} = 1;
 | 
			
		||||
foreach $hfile (@hfiles)
 | 
			
		||||
{
 | 
			
		||||
	open HFILE, $hfile
 | 
			
		||||
	  or die "can't open $hfile: $!";
 | 
			
		||||
	while (<HFILE>)
 | 
			
		||||
	{
 | 
			
		||||
		if (m/^\s*#\s*define\s+(\w+)/)
 | 
			
		||||
		{
 | 
			
		||||
			$defines{$1}{$hfile} = 1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    close HFILE;
 | 
			
		||||
	close HFILE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
@@ -77,164 +82,210 @@ foreach $hfile (@hfiles) {
 | 
			
		||||
# 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) {
 | 
			
		||||
    ($fname, $fpath) = fileparse($file);
 | 
			
		||||
    chdir $fpath or die "can't chdir to $fpath: $!";
 | 
			
		||||
    #
 | 
			
		||||
    # Ask 'make' to parse the makefile so we can get the correct flags to
 | 
			
		||||
    # use.  CPPFLAGS in particular varies for each subdirectory.  If we are
 | 
			
		||||
    # processing a .h file, we might be in a subdirectory that has no
 | 
			
		||||
    # Makefile, in which case we have to fake it.  Note that there seems
 | 
			
		||||
    # no easy way to prevent make from recursing into subdirectories and
 | 
			
		||||
    # hence printing multiple definitions --- we keep the last one, which
 | 
			
		||||
    # should come from the current Makefile.
 | 
			
		||||
    #
 | 
			
		||||
    if (-f "Makefile" || -f "GNUmakefile") {
 | 
			
		||||
	$MAKECMD = "$MAKE -qp";
 | 
			
		||||
    } else {
 | 
			
		||||
	$subdir = $fpath;
 | 
			
		||||
	chop $subdir;
 | 
			
		||||
	$top_builddir = "..";
 | 
			
		||||
	$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'";
 | 
			
		||||
    }
 | 
			
		||||
    open PIPE, "$MAKECMD |"
 | 
			
		||||
	or die "can't fork: $!";
 | 
			
		||||
    while (<PIPE>) {
 | 
			
		||||
	if (m/^CPPFLAGS :?= (.*)/) {
 | 
			
		||||
	    $CPPFLAGS = $1;
 | 
			
		||||
	} elsif (m/^CFLAGS :?= (.*)/) {
 | 
			
		||||
	    $CFLAGS = $1;
 | 
			
		||||
	} elsif (m/^CFLAGS_SL :?= (.*)/) {
 | 
			
		||||
	    $CFLAGS_SL = $1;
 | 
			
		||||
	} elsif (m/^PTHREAD_CFLAGS :?= (.*)/) {
 | 
			
		||||
	    $PTHREAD_CFLAGS = $1;
 | 
			
		||||
	} elsif (m/^CC :?= (.*)/) {
 | 
			
		||||
	    $CC = $1;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    # If make exits with status 1, it's not an error, it just means make
 | 
			
		||||
    # thinks some files may not be up-to-date.  Only complain on status 2.
 | 
			
		||||
    close PIPE;
 | 
			
		||||
    die "$MAKE failed in $fpath\n" if $? != 0 && $? != 256;
 | 
			
		||||
foreach $file (@hfiles, @cfiles)
 | 
			
		||||
{
 | 
			
		||||
	($fname, $fpath) = fileparse($file);
 | 
			
		||||
	chdir $fpath or die "can't chdir to $fpath: $!";
 | 
			
		||||
 | 
			
		||||
    # Expand out stuff that might be referenced in CFLAGS
 | 
			
		||||
    $CFLAGS =~ s/\$\(CFLAGS_SL\)/$CFLAGS_SL/;
 | 
			
		||||
    $CFLAGS =~ s/\$\(PTHREAD_CFLAGS\)/$PTHREAD_CFLAGS/;
 | 
			
		||||
	#
 | 
			
		||||
	# Ask 'make' to parse the makefile so we can get the correct flags to
 | 
			
		||||
	# use.  CPPFLAGS in particular varies for each subdirectory.  If we are
 | 
			
		||||
	# processing a .h file, we might be in a subdirectory that has no
 | 
			
		||||
	# Makefile, in which case we have to fake it.  Note that there seems
 | 
			
		||||
	# no easy way to prevent make from recursing into subdirectories and
 | 
			
		||||
	# hence printing multiple definitions --- we keep the last one, which
 | 
			
		||||
	# should come from the current Makefile.
 | 
			
		||||
	#
 | 
			
		||||
	if (-f "Makefile" || -f "GNUmakefile")
 | 
			
		||||
	{
 | 
			
		||||
		$MAKECMD = "$MAKE -qp";
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		$subdir = $fpath;
 | 
			
		||||
		chop $subdir;
 | 
			
		||||
		$top_builddir = "..";
 | 
			
		||||
		$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'";
 | 
			
		||||
	}
 | 
			
		||||
	open PIPE, "$MAKECMD |"
 | 
			
		||||
	  or die "can't fork: $!";
 | 
			
		||||
	while (<PIPE>)
 | 
			
		||||
	{
 | 
			
		||||
		if (m/^CPPFLAGS :?= (.*)/)
 | 
			
		||||
		{
 | 
			
		||||
			$CPPFLAGS = $1;
 | 
			
		||||
		}
 | 
			
		||||
		elsif (m/^CFLAGS :?= (.*)/)
 | 
			
		||||
		{
 | 
			
		||||
			$CFLAGS = $1;
 | 
			
		||||
		}
 | 
			
		||||
		elsif (m/^CFLAGS_SL :?= (.*)/)
 | 
			
		||||
		{
 | 
			
		||||
			$CFLAGS_SL = $1;
 | 
			
		||||
		}
 | 
			
		||||
		elsif (m/^PTHREAD_CFLAGS :?= (.*)/)
 | 
			
		||||
		{
 | 
			
		||||
			$PTHREAD_CFLAGS = $1;
 | 
			
		||||
		}
 | 
			
		||||
		elsif (m/^CC :?= (.*)/)
 | 
			
		||||
		{
 | 
			
		||||
			$CC = $1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # Run the compiler (which had better be gcc) to get the inclusions.
 | 
			
		||||
    # "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";
 | 
			
		||||
    open PIPE, "$COMPILE 2>&1 >/dev/null |"
 | 
			
		||||
	or die "can't fork: $!";
 | 
			
		||||
    while (<PIPE>) {
 | 
			
		||||
	if (m/^\.+ (.*)/) {
 | 
			
		||||
	    $include = $1;
 | 
			
		||||
	    # Ignore system headers (absolute paths); but complain if a
 | 
			
		||||
	    # .c file includes a system header before any PG header.
 | 
			
		||||
	    if ($include =~ m|^/|) {
 | 
			
		||||
		warn "$file includes $include before any Postgres inclusion\n"
 | 
			
		||||
		    if $#includes == -1 && $file =~ m/\.c$/;
 | 
			
		||||
		next;
 | 
			
		||||
	    }
 | 
			
		||||
	    # Strip any "./" (assume this appears only at front)
 | 
			
		||||
	    $include =~ s|^\./||;
 | 
			
		||||
	    # Make path relative to top of tree
 | 
			
		||||
	    $ipath = $fpath;
 | 
			
		||||
	    while ($include =~ s|^\.\./||) {
 | 
			
		||||
		$ipath = dirname($ipath) . "/";
 | 
			
		||||
	    }
 | 
			
		||||
	    $ipath =~ s|^\./||;
 | 
			
		||||
	    push @includes, $ipath . $include;
 | 
			
		||||
	} else {
 | 
			
		||||
	    warn "$CC: $_";
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    # The compiler might fail, particularly if we are checking a file that's
 | 
			
		||||
    # not supposed to be compiled at all on the current platform, so don't
 | 
			
		||||
    # quit on nonzero status.
 | 
			
		||||
    close PIPE or warn "$COMPILE failed in $fpath\n";
 | 
			
		||||
	# If make exits with status 1, it's not an error, it just means make
 | 
			
		||||
	# thinks some files may not be up-to-date.  Only complain on status 2.
 | 
			
		||||
	close PIPE;
 | 
			
		||||
	die "$MAKE failed in $fpath\n" if $? != 0 && $? != 256;
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # Scan the file to find #ifdef, #ifndef, and #if defined() constructs
 | 
			
		||||
    # We assume #ifdef isn't continued across lines, and that defined(foo)
 | 
			
		||||
    # isn't split across lines either
 | 
			
		||||
    #
 | 
			
		||||
    open FILE, $fname
 | 
			
		||||
	or die "can't open $file: $!";
 | 
			
		||||
    $inif = 0;
 | 
			
		||||
    while (<FILE>) {
 | 
			
		||||
	$line = $_;
 | 
			
		||||
	if ($line =~ m/^\s*#\s*ifdef\s+(\w+)/) {
 | 
			
		||||
	    $symbol = $1;
 | 
			
		||||
	    &checkit;
 | 
			
		||||
	}
 | 
			
		||||
	if ($line =~ m/^\s*#\s*ifndef\s+(\w+)/) {
 | 
			
		||||
	    $symbol = $1;
 | 
			
		||||
	    &checkit;
 | 
			
		||||
	}
 | 
			
		||||
	if ($line =~ m/^\s*#\s*if\s+/) {
 | 
			
		||||
	    $inif = 1;
 | 
			
		||||
	}
 | 
			
		||||
	if ($inif) {
 | 
			
		||||
	    while ($line =~ s/\bdefined(\s+|\s*\(\s*)(\w+)//) {
 | 
			
		||||
		$symbol = $2;
 | 
			
		||||
		&checkit;
 | 
			
		||||
	    }
 | 
			
		||||
	    if (!($line =~ m/\\$/)) {
 | 
			
		||||
		$inif = 0;
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    close FILE;
 | 
			
		||||
	# Expand out stuff that might be referenced in CFLAGS
 | 
			
		||||
	$CFLAGS =~ s/\$\(CFLAGS_SL\)/$CFLAGS_SL/;
 | 
			
		||||
	$CFLAGS =~ s/\$\(PTHREAD_CFLAGS\)/$PTHREAD_CFLAGS/;
 | 
			
		||||
 | 
			
		||||
    chdir $topdir or die "can't chdir to $topdir: $!";
 | 
			
		||||
	#
 | 
			
		||||
	# Run the compiler (which had better be gcc) to get the inclusions.
 | 
			
		||||
	# "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";
 | 
			
		||||
	open PIPE, "$COMPILE 2>&1 >/dev/null |"
 | 
			
		||||
	  or die "can't fork: $!";
 | 
			
		||||
	while (<PIPE>)
 | 
			
		||||
	{
 | 
			
		||||
		if (m/^\.+ (.*)/)
 | 
			
		||||
		{
 | 
			
		||||
			$include = $1;
 | 
			
		||||
 | 
			
		||||
			# Ignore system headers (absolute paths); but complain if a
 | 
			
		||||
			# .c file includes a system header before any PG header.
 | 
			
		||||
			if ($include =~ m|^/|)
 | 
			
		||||
			{
 | 
			
		||||
				warn "$file includes $include before any Postgres inclusion\n"
 | 
			
		||||
				  if $#includes == -1 && $file =~ m/\.c$/;
 | 
			
		||||
				next;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			# Strip any "./" (assume this appears only at front)
 | 
			
		||||
			$include =~ s|^\./||;
 | 
			
		||||
 | 
			
		||||
			# Make path relative to top of tree
 | 
			
		||||
			$ipath = $fpath;
 | 
			
		||||
			while ($include =~ s|^\.\./||)
 | 
			
		||||
			{
 | 
			
		||||
				$ipath = dirname($ipath) . "/";
 | 
			
		||||
			}
 | 
			
		||||
			$ipath =~ s|^\./||;
 | 
			
		||||
			push @includes, $ipath . $include;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			warn "$CC: $_";
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	# The compiler might fail, particularly if we are checking a file that's
 | 
			
		||||
	# not supposed to be compiled at all on the current platform, so don't
 | 
			
		||||
	# quit on nonzero status.
 | 
			
		||||
	close PIPE or warn "$COMPILE failed in $fpath\n";
 | 
			
		||||
 | 
			
		||||
	#
 | 
			
		||||
	# Scan the file to find #ifdef, #ifndef, and #if defined() constructs
 | 
			
		||||
	# We assume #ifdef isn't continued across lines, and that defined(foo)
 | 
			
		||||
	# isn't split across lines either
 | 
			
		||||
	#
 | 
			
		||||
	open FILE, $fname
 | 
			
		||||
	  or die "can't open $file: $!";
 | 
			
		||||
	$inif = 0;
 | 
			
		||||
	while (<FILE>)
 | 
			
		||||
	{
 | 
			
		||||
		$line = $_;
 | 
			
		||||
		if ($line =~ m/^\s*#\s*ifdef\s+(\w+)/)
 | 
			
		||||
		{
 | 
			
		||||
			$symbol = $1;
 | 
			
		||||
			&checkit;
 | 
			
		||||
		}
 | 
			
		||||
		if ($line =~ m/^\s*#\s*ifndef\s+(\w+)/)
 | 
			
		||||
		{
 | 
			
		||||
			$symbol = $1;
 | 
			
		||||
			&checkit;
 | 
			
		||||
		}
 | 
			
		||||
		if ($line =~ m/^\s*#\s*if\s+/)
 | 
			
		||||
		{
 | 
			
		||||
			$inif = 1;
 | 
			
		||||
		}
 | 
			
		||||
		if ($inif)
 | 
			
		||||
		{
 | 
			
		||||
			while ($line =~ s/\bdefined(\s+|\s*\(\s*)(\w+)//)
 | 
			
		||||
			{
 | 
			
		||||
				$symbol = $2;
 | 
			
		||||
				&checkit;
 | 
			
		||||
			}
 | 
			
		||||
			if (!($line =~ m/\\$/))
 | 
			
		||||
			{
 | 
			
		||||
				$inif = 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	close FILE;
 | 
			
		||||
 | 
			
		||||
	chdir $topdir or die "can't chdir to $topdir: $!";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exit 0;
 | 
			
		||||
 | 
			
		||||
# Check an is-defined reference
 | 
			
		||||
sub checkit {
 | 
			
		||||
    # Ignore if symbol isn't defined in any PG include files
 | 
			
		||||
    if (! defined $defines{$symbol}) {
 | 
			
		||||
	return;
 | 
			
		||||
    }
 | 
			
		||||
    #
 | 
			
		||||
    # Try to match source(s) of symbol to the inclusions of the current file
 | 
			
		||||
    # (including itself).  We consider it OK if any one matches.
 | 
			
		||||
    #
 | 
			
		||||
    # Note: these tests aren't bulletproof; in theory the inclusion might
 | 
			
		||||
    # occur after the use of the symbol.  Given our normal file layout,
 | 
			
		||||
    # however, the risk is minimal.
 | 
			
		||||
    #
 | 
			
		||||
    foreach $deffile (keys %{ $defines{$symbol} }) {
 | 
			
		||||
	return if $deffile eq $file;
 | 
			
		||||
	foreach $reffile (@includes) {
 | 
			
		||||
	    return if $deffile eq $reffile;
 | 
			
		||||
sub checkit
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	# Ignore if symbol isn't defined in any PG include files
 | 
			
		||||
	if (!defined $defines{$symbol})
 | 
			
		||||
	{
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    #
 | 
			
		||||
    # If current file is a .h file, it's OK for it to assume that one of the
 | 
			
		||||
    # base headers (postgres.h or postgres_fe.h) has been included.
 | 
			
		||||
    #
 | 
			
		||||
    if ($file =~ m/\.h$/) {
 | 
			
		||||
	foreach $deffile (keys %{ $defines{$symbol} }) {
 | 
			
		||||
	    return if $deffile eq 'src/include/c.h';
 | 
			
		||||
	    return if $deffile eq 'src/include/postgres.h';
 | 
			
		||||
	    return if $deffile eq 'src/include/postgres_fe.h';
 | 
			
		||||
	    return if $deffile eq 'src/include/pg_config.h';
 | 
			
		||||
	    return if $deffile eq 'src/include/pg_config_manual.h';
 | 
			
		||||
 | 
			
		||||
	#
 | 
			
		||||
	# Try to match source(s) of symbol to the inclusions of the current file
 | 
			
		||||
	# (including itself).  We consider it OK if any one matches.
 | 
			
		||||
	#
 | 
			
		||||
	# Note: these tests aren't bulletproof; in theory the inclusion might
 | 
			
		||||
	# occur after the use of the symbol.  Given our normal file layout,
 | 
			
		||||
	# however, the risk is minimal.
 | 
			
		||||
	#
 | 
			
		||||
	foreach $deffile (keys %{ $defines{$symbol} })
 | 
			
		||||
	{
 | 
			
		||||
		return if $deffile eq $file;
 | 
			
		||||
		foreach $reffile (@includes)
 | 
			
		||||
		{
 | 
			
		||||
			return if $deffile eq $reffile;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    #
 | 
			
		||||
    @places = keys %{ $defines{$symbol} };
 | 
			
		||||
    print "$file references $symbol, defined in @places\n";
 | 
			
		||||
    # print "includes: @includes\n";
 | 
			
		||||
 | 
			
		||||
	#
 | 
			
		||||
	# If current file is a .h file, it's OK for it to assume that one of the
 | 
			
		||||
	# base headers (postgres.h or postgres_fe.h) has been included.
 | 
			
		||||
	#
 | 
			
		||||
	if ($file =~ m/\.h$/)
 | 
			
		||||
	{
 | 
			
		||||
		foreach $deffile (keys %{ $defines{$symbol} })
 | 
			
		||||
		{
 | 
			
		||||
			return if $deffile eq 'src/include/c.h';
 | 
			
		||||
			return if $deffile eq 'src/include/postgres.h';
 | 
			
		||||
			return if $deffile eq 'src/include/postgres_fe.h';
 | 
			
		||||
			return if $deffile eq 'src/include/pg_config.h';
 | 
			
		||||
			return if $deffile eq 'src/include/pg_config_manual.h';
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#
 | 
			
		||||
	@places = keys %{ $defines{$symbol} };
 | 
			
		||||
	print "$file references $symbol, defined in @places\n";
 | 
			
		||||
 | 
			
		||||
	# print "includes: @includes\n";
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user