]> granicus.if.org Git - postgresql/blob - src/tools/version_stamp.pl
Fix initialization of fake LSN for unlogged relations
[postgresql] / src / tools / version_stamp.pl
1 #! /usr/bin/perl -w
2
3 #################################################################
4 # version_stamp.pl -- update version stamps throughout the source tree
5 #
6 # Copyright (c) 2008-2019, PostgreSQL Global Development Group
7 #
8 # src/tools/version_stamp.pl
9 #################################################################
10
11 #
12 # This script updates the version stamp in configure.in, and also in assorted
13 # other files wherein it's not convenient to obtain the version number from
14 # configure's output.  Note that you still have to run autoconf afterward
15 # to regenerate configure from the updated configure.in.
16 #
17 # Usage: cd to top of source tree and issue
18 #       src/tools/version_stamp.pl MINORVERSION
19 # where MINORVERSION can be a minor release number (0, 1, etc), or
20 # "devel", "alphaN", "betaN", "rcN".
21 #
22
23 use strict;
24
25 # Major version is hard-wired into the script.  We update it when we branch
26 # a new development version.
27 my $majorversion = 13;
28
29 # Validate argument and compute derived variables
30 my $minor = shift;
31 defined($minor) || die "$0: missing required argument: minor-version\n";
32
33 my ($dotneeded, $numericminor);
34
35 if ($minor =~ m/^\d+$/)
36 {
37         $dotneeded    = 1;
38         $numericminor = $minor;
39 }
40 elsif ($minor eq "devel")
41 {
42         $dotneeded    = 0;
43         $numericminor = 0;
44 }
45 elsif ($minor =~ m/^alpha\d+$/)
46 {
47         $dotneeded    = 0;
48         $numericminor = 0;
49 }
50 elsif ($minor =~ m/^beta\d+$/)
51 {
52         $dotneeded    = 0;
53         $numericminor = 0;
54 }
55 elsif ($minor =~ m/^rc\d+$/)
56 {
57         $dotneeded    = 0;
58         $numericminor = 0;
59 }
60 else
61 {
62         die "$0: minor-version must be N, devel, alphaN, betaN, or rcN\n";
63 }
64
65 my $fullversion;
66
67 # Create various required forms of the version number
68 if ($dotneeded)
69 {
70         $fullversion = $majorversion . "." . $minor;
71 }
72 else
73 {
74         $fullversion = $majorversion . $minor;
75 }
76 my $numericversion = $majorversion . "." . $numericminor;
77 my $padnumericversion = sprintf("%d%04d", $majorversion, $numericminor);
78
79 # Get the autoconf version number for eventual nag message
80 # (this also ensures we're in the right directory)
81
82 my $aconfver = "";
83 open(my $fh, '<', "configure.in") || die "could not read configure.in: $!\n";
84 while (<$fh>)
85 {
86         if (m/^m4_if\(m4_defn\(\[m4_PACKAGE_VERSION\]\), \[(.*)\], \[\], \[m4_fatal/
87           )
88         {
89                 $aconfver = $1;
90                 last;
91         }
92 }
93 close($fh);
94 $aconfver ne ""
95   || die "could not find autoconf version number in configure.in\n";
96
97 # Update configure.in and other files that contain version numbers
98
99 my $fixedfiles = "";
100
101 sed_file("configure.in",
102         "-e 's/AC_INIT(\\[PostgreSQL\\], \\[[0-9a-z.]*\\]/AC_INIT([PostgreSQL], [$fullversion]/'"
103 );
104
105 sed_file("src/include/pg_config.h.win32",
106         "-e 's/#define PACKAGE_STRING \"PostgreSQL .*\"/#define PACKAGE_STRING \"PostgreSQL $fullversion\"/' "
107           . "-e 's/#define PACKAGE_VERSION \".*\"/#define PACKAGE_VERSION \"$fullversion\"/' "
108           . "-e 's/#define PG_VERSION \".*\"/#define PG_VERSION \"$fullversion\"/' "
109           . "-e 's/#define PG_VERSION_NUM .*/#define PG_VERSION_NUM $padnumericversion/'"
110 );
111
112 sed_file("src/interfaces/libpq/libpq.rc.in",
113         "-e 's/FILEVERSION [0-9]*,[0-9]*,[0-9]*,0/FILEVERSION $majorversion,0,$numericminor,0/' "
114           . "-e 's/PRODUCTVERSION [0-9]*,[0-9]*,[0-9]*,0/PRODUCTVERSION $majorversion,0,$numericminor,0/' "
115           . "-e 's/VALUE \"FileVersion\", \"[0-9.]*/VALUE \"FileVersion\", \"$numericversion/' "
116           . "-e 's/VALUE \"ProductVersion\", \"[0-9.]*/VALUE \"ProductVersion\", \"$numericversion/'"
117 );
118
119 sed_file("src/port/win32ver.rc",
120         "-e 's/FILEVERSION    [0-9]*,[0-9]*,[0-9]*,0/FILEVERSION    $majorversion,0,$numericminor,0/' "
121           . "-e 's/PRODUCTVERSION [0-9]*,[0-9]*,[0-9]*,0/PRODUCTVERSION $majorversion,0,$numericminor,0/'"
122 );
123
124 print "Stamped these files with version number $fullversion:\n$fixedfiles";
125 print "Don't forget to run autoconf $aconfver before committing.\n";
126
127 exit 0;
128
129 sub sed_file
130 {
131         my ($filename, $sedargs) = @_;
132         my ($tmpfilename) = $filename . ".tmp";
133
134         system("sed $sedargs $filename >$tmpfilename") == 0
135           or die "sed failed: $?";
136         system("mv $tmpfilename $filename") == 0
137           or die "mv failed: $?";
138
139         $fixedfiles .= "\t$filename\n";
140         return;
141 }