pg_probackup
/
gen_probackup_project.pl
231 строка · 4.9 Кб
1# -*-perl-*- hey - emacs - this is a perl file
2# my $currpath = cwd();
3
4our $pgsrc;
5our $currpath;
6
7BEGIN {
8# path to the pg_probackup dir
9$currpath = File::Basename::dirname(Cwd::abs_path($0));
10use Cwd;
11use File::Basename;
12if (($#ARGV+1)==1)
13{
14$pgsrc = shift @ARGV;
15if($pgsrc eq "--help"){
16print STDERR "Usage $0 pg-source-dir\n";
17print STDERR "Like this:\n";
18print STDERR "$0 C:/PgProject/postgresql.10dev/postgrespro\n";
19print STDERR "May need to run this first:\n";
20print STDERR "CALL \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" amd64\n";
21exit 1;
22}
23}
24else
25{
26use Cwd qw(abs_path);
27my $path = dirname(abs_path($0));
28chdir($path);
29chdir("../..");
30$pgsrc = cwd();
31$currpath = "contrib/pg_probackup";
32}
33chdir("$pgsrc/src/tools/msvc");
34push(@INC, "$pgsrc/src/tools/msvc");
35chdir("../../..") if (-d "../msvc" && -d "../../../src");
36
37}
38use Win32;
39use Carp;
40use strict;
41use warnings;
42
43
44use Project;
45use Solution;
46use File::Copy;
47use Config;
48use VSObjectFactory;
49use List::Util qw(first);
50
51use Exporter;
52our (@ISA, @EXPORT_OK);
53@ISA = qw(Exporter);
54@EXPORT_OK = qw(Mkvcbuild);
55
56my $solution;
57my $libpgport;
58my $libpgcommon;
59my $libpgfeutils;
60my $postgres;
61my $libpq;
62my @unlink_on_exit;
63
64if (-d "src/fe_utils")
65{
66$libpgfeutils = 1;
67}
68else
69{
70$libpgfeutils = 0;
71}
72
73
74
75use lib "src/tools/msvc";
76
77use Mkvcbuild;
78
79# if (-e "src/tools/msvc/buildenv.pl")
80# {
81# do "src/tools/msvc/buildenv.pl";
82# }
83# elsif (-e "./buildenv.pl")
84# {
85# do "./buildenv.pl";
86# }
87
88# set up the project
89our $config;
90do "config_default.pl";
91do "config.pl" if (-f "src/tools/msvc/config.pl");
92
93# my $vcver = Mkvcbuild::mkvcbuild($config);
94my $vcver = build_pgprobackup($config);
95
96# check what sort of build we are doing
97
98my $bconf = $ENV{CONFIG} || "Release";
99my $msbflags = $ENV{MSBFLAGS} || "";
100my $buildwhat = $ARGV[1] || "";
101
102# if (uc($ARGV[0]) eq 'DEBUG')
103# {
104# $bconf = "Debug";
105# }
106# elsif (uc($ARGV[0]) ne "RELEASE")
107# {
108# $buildwhat = $ARGV[0] || "";
109# }
110
111# printf "currpath=$currpath";
112
113# exit(0);
114# ... and do it
115system("msbuild pg_probackup.vcxproj /verbosity:normal $msbflags /p:Configuration=$bconf" );
116
117# report status
118
119my $status = $? >> 8;
120printf("Status: $status\n");
121printf("Output file built in the folder $pgsrc/$bconf/pg_probackup\n");
122
123exit $status;
124
125
126
127sub build_pgprobackup
128{
129our $config = shift;
130
131chdir('../../..') if (-d '../msvc' && -d '../../../src');
132die 'Must run from root or msvc directory'
133unless (-d 'src/tools/msvc' && -d 'src');
134
135# my $vsVersion = DetermineVisualStudioVersion();
136my $vsVersion = '16.00';
137
138$solution = CreateSolution($vsVersion, $config);
139
140$libpq = $solution->AddProject('libpq', 'dll', 'interfaces',
141'src/interfaces/libpq');
142if ($libpgfeutils)
143{
144$libpgfeutils = $solution->AddProject('libpgfeutils', 'lib', 'misc');
145}
146$libpgcommon = $solution->AddProject('libpgcommon', 'lib', 'misc');
147$libpgport = $solution->AddProject('libpgport', 'lib', 'misc');
148
149#vvs test
150my $probackup =
151$solution->AddProject("pg_probackup", 'exe', "pg_probackup"); #, 'contrib/pg_probackup'
152$probackup->AddDefine('FRONTEND');
153$probackup->AddFiles(
154"$currpath/src",
155'archive.c',
156'backup.c',
157'catalog.c',
158'catchup.c',
159'configure.c',
160'data.c',
161'delete.c',
162'dir.c',
163'fetch.c',
164'help.c',
165'init.c',
166'merge.c',
167'parsexlog.c',
168'pg_probackup.c',
169'restore.c',
170'show.c',
171'stream.c',
172'util.c',
173'validate.c',
174'checkdb.c',
175'ptrack.c'
176);
177$probackup->AddFiles(
178"$currpath/src/utils",
179'configuration.c',
180'file.c',
181'remote.c',
182'json.c',
183'logger.c',
184'parray.c',
185'pgut.c',
186'thread.c',
187'remote.c'
188);
189$probackup->AddFile("$pgsrc/src/backend/access/transam/xlogreader.c");
190$probackup->AddFile("$pgsrc/src/backend/utils/hash/pg_crc.c");
191$probackup->AddFiles(
192"$pgsrc/src/bin/pg_basebackup",
193'receivelog.c',
194'streamutil.c'
195);
196
197if (-e "$pgsrc/src/bin/pg_basebackup/walmethods.c")
198{
199$probackup->AddFile("$pgsrc/src/bin/pg_basebackup/walmethods.c");
200}
201
202$probackup->AddFile("$pgsrc/src/bin/pg_rewind/datapagemap.c");
203
204$probackup->AddFile("$pgsrc/src/interfaces/libpq/pthread-win32.c");
205$probackup->AddFile("$pgsrc/src/timezone/strftime.c");
206
207$probackup->AddIncludeDir("$pgsrc/src/bin/pg_basebackup");
208$probackup->AddIncludeDir("$pgsrc/src/bin/pg_rewind");
209$probackup->AddIncludeDir("$pgsrc/src/interfaces/libpq");
210$probackup->AddIncludeDir("$pgsrc/src");
211$probackup->AddIncludeDir("$pgsrc/src/port");
212$probackup->AddIncludeDir("$pgsrc/src/include/portability");
213
214$probackup->AddIncludeDir("$currpath");
215$probackup->AddIncludeDir("$currpath/src");
216$probackup->AddIncludeDir("$currpath/src/utils");
217
218if ($libpgfeutils)
219{
220$probackup->AddReference($libpq, $libpgfeutils, $libpgcommon, $libpgport);
221}
222else
223{
224$probackup->AddReference($libpq, $libpgcommon, $libpgport);
225}
226$probackup->AddLibrary('ws2_32.lib');
227
228$probackup->Save();
229return $solution->{vcver};
230
231}
232