Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
eee22892
Commit
eee22892
authored
Mar 12, 2007
by
Magnus Hagander
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make a run with perltidy to format the code. Per request from Andrew Dunstan.
parent
576027bb
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
1376 additions
and
1089 deletions
+1376
-1089
src/tools/msvc/Project.pm
src/tools/msvc/Project.pm
+417
-326
src/tools/msvc/README
src/tools/msvc/README
+8
-0
src/tools/msvc/Solution.pm
src/tools/msvc/Solution.pm
+303
-245
src/tools/msvc/config.pl
src/tools/msvc/config.pl
+14
-14
src/tools/msvc/genbki.pl
src/tools/msvc/genbki.pl
+164
-127
src/tools/msvc/gendef.pl
src/tools/msvc/gendef.pl
+36
-31
src/tools/msvc/install.pl
src/tools/msvc/install.pl
+157
-123
src/tools/msvc/mkvcbuild.pl
src/tools/msvc/mkvcbuild.pl
+277
-223
No files found.
src/tools/msvc/Project.pm
View file @
eee22892
...
@@ -4,7 +4,8 @@ use Carp;
...
@@ -4,7 +4,8 @@ use Carp;
use
strict
;
use
strict
;
use
warnings
;
use
warnings
;
sub
new
{
sub
new
{
my
(
$junk
,
$name
,
$type
,
$solution
)
=
@_
;
my
(
$junk
,
$name
,
$type
,
$solution
)
=
@_
;
my
$good_types
=
{
my
$good_types
=
{
lib
=>
1
,
lib
=>
1
,
...
@@ -31,88 +32,107 @@ sub new {
...
@@ -31,88 +32,107 @@ sub new {
return
$self
;
return
$self
;
}
}
sub
AddFile
{
sub
AddFile
{
my
(
$self
,
$filename
)
=
@_
;
my
(
$self
,
$filename
)
=
@_
;
$self
->
{
files
}
->
{
$filename
}
=
1
;
$self
->
{
files
}
->
{
$filename
}
=
1
;
}
}
sub
AddFiles
{
sub
AddFiles
{
my
$self
=
shift
;
my
$self
=
shift
;
my
$dir
=
shift
;
my
$dir
=
shift
;
while
(
my
$f
=
shift
)
{
while
(
my
$f
=
shift
)
{
$self
->
{
files
}
->
{
$dir
.
"
\\
"
.
$f
}
=
1
;
$self
->
{
files
}
->
{
$dir
.
"
\\
"
.
$f
}
=
1
;
}
}
}
}
sub
ReplaceFile
{
sub
ReplaceFile
{
my
(
$self
,
$filename
,
$newname
)
=
@_
;
my
(
$self
,
$filename
,
$newname
)
=
@_
;
my
$re
=
"
\\\\
$filename
\
$
";
my
$re
=
"
\\\\
$filename
\
$
";
foreach
my
$file
(
keys
%
{
$self
->
{
files
}
}
)
{
foreach
my
$file
(
keys
%
{
$self
->
{
files
}
}
)
{
# Match complete filename
# Match complete filename
if
(
$filename
=~
/\\/
)
{
if
(
$filename
=~
/\\/
)
if
(
$file
eq
$filename
)
{
{
if
(
$file
eq
$filename
)
{
delete
$self
->
{
files
}{
$file
};
delete
$self
->
{
files
}{
$file
};
$self
->
{
files
}{
$newname
}
=
1
;
$self
->
{
files
}{
$newname
}
=
1
;
return
;
return
;
}
}
}
}
elsif
(
$file
=~
m/($re)/
)
{
elsif
(
$file
=~
m/($re)/
)
{
delete
$self
->
{
files
}{
$file
};
delete
$self
->
{
files
}{
$file
};
$self
->
{
files
}{
"
$newname
\\
$filename
"
}
=
1
;
$self
->
{
files
}{
"
$newname
\\
$filename
"
}
=
1
;
return
;
return
;
}
}
}
}
confess
("
Could not find file
$filename
to replace
\n
");
confess
("
Could not find file
$filename
to replace
\n
");
}
}
sub
RemoveFile
{
sub
RemoveFile
{
my
(
$self
,
$filename
)
=
@_
;
my
(
$self
,
$filename
)
=
@_
;
my
$orig
=
scalar
keys
%
{
$self
->
{
files
}
};
my
$orig
=
scalar
keys
%
{
$self
->
{
files
}
};
delete
$self
->
{
files
}
->
{
$filename
};
delete
$self
->
{
files
}
->
{
$filename
};
if
(
$orig
>
scalar
keys
%
{
$self
->
{
files
}}
)
{
if
(
$orig
>
scalar
keys
%
{
$self
->
{
files
}}
)
{
return
;
return
;
}
}
confess
("
Could not find file
$filename
to remove
\n
");
confess
("
Could not find file
$filename
to remove
\n
");
}
}
sub
AddReference
{
sub
AddReference
{
my
$self
=
shift
;
my
$self
=
shift
;
while
(
my
$ref
=
shift
)
{
while
(
my
$ref
=
shift
)
{
push
@
{
$self
->
{
references
}},
$ref
;
push
@
{
$self
->
{
references
}},
$ref
;
$self
->
AddLibrary
("
__CFGNAME__
\\
"
.
$ref
->
{
name
}
.
"
\\
"
.
$ref
->
{
name
}
.
"
.lib
");
$self
->
AddLibrary
("
__CFGNAME__
\\
"
.
$ref
->
{
name
}
.
"
\\
"
.
$ref
->
{
name
}
.
"
.lib
");
}
}
}
}
sub
AddLibrary
{
sub
AddLibrary
{
my
(
$self
,
$lib
,
$dbgsuffix
)
=
@_
;
my
(
$self
,
$lib
,
$dbgsuffix
)
=
@_
;
push
@
{
$self
->
{
libraries
}},
$lib
;
push
@
{
$self
->
{
libraries
}},
$lib
;
if
(
$dbgsuffix
)
{
if
(
$dbgsuffix
)
{
push
@
{
$self
->
{
suffixlib
}},
$lib
;
push
@
{
$self
->
{
suffixlib
}},
$lib
;
}
}
}
}
sub
AddIncludeDir
{
sub
AddIncludeDir
{
my
(
$self
,
$inc
)
=
@_
;
my
(
$self
,
$inc
)
=
@_
;
if
(
$self
->
{
includes
}
ne
'')
{
if
(
$self
->
{
includes
}
ne
'')
{
$self
->
{
includes
}
.=
'
;
';
$self
->
{
includes
}
.=
'
;
';
}
}
$self
->
{
includes
}
.=
$inc
;
$self
->
{
includes
}
.=
$inc
;
}
}
sub
AddDefine
{
sub
AddDefine
{
my
(
$self
,
$def
)
=
@_
;
my
(
$self
,
$def
)
=
@_
;
$def
=~
s/"/""/g
;
$def
=~
s/"/""/g
;
$self
->
{
defines
}
.=
$def
.
'
;
';
$self
->
{
defines
}
.=
$def
.
'
;
';
}
}
sub
FullExportDLL
{
sub
FullExportDLL
{
my
(
$self
,
$libname
)
=
@_
;
my
(
$self
,
$libname
)
=
@_
;
$self
->
{
builddef
}
=
1
;
$self
->
{
builddef
}
=
1
;
...
@@ -120,64 +140,83 @@ sub FullExportDLL {
...
@@ -120,64 +140,83 @@ sub FullExportDLL {
$self
->
{
implib
}
=
"
__CFGNAME__
\\
$self
->{name}
\\
$libname
";
$self
->
{
implib
}
=
"
__CFGNAME__
\\
$self
->{name}
\\
$libname
";
}
}
sub
UseDef
{
sub
UseDef
{
my
(
$self
,
$def
)
=
@_
;
my
(
$self
,
$def
)
=
@_
;
$self
->
{
def
}
=
$def
;
$self
->
{
def
}
=
$def
;
}
}
sub
AddDir
{
sub
AddDir
{
my
(
$self
,
$reldir
)
=
@_
;
my
(
$self
,
$reldir
)
=
@_
;
my
$MF
;
my
$MF
;
my
$t
=
$/
;
undef
$/
;
my
$t
=
$/
;
open
(
$MF
,"
$reldir
\\
Makefile
")
||
open
(
$MF
,"
$reldir
\\
GNUMakefile
")
||
croak
"
Could not open
$reldir
\\
Makefile
\n
";
undef
$/
;
open
(
$MF
,"
$reldir
\\
Makefile
")
||
open
(
$MF
,"
$reldir
\\
GNUMakefile
")
||
croak
"
Could not open
$reldir
\\
Makefile
\n
";
my
$mf
=
<
$MF
>
;
my
$mf
=
<
$MF
>
;
close
(
$MF
);
close
(
$MF
);
$mf
=~
s{\\\s*[\r\n]+}{}mg
;
$mf
=~
s{\\\s*[\r\n]+}{}mg
;
if
(
$mf
=~
m{^(?:SUB)?DIRS[^=]*=\s*(.*)$}mg
)
{
if
(
$mf
=~
m{^(?:SUB)?DIRS[^=]*=\s*(.*)$}mg
)
foreach
my
$subdir
(
split
/\s+/
,
$1
)
{
{
next
if
$subdir
eq
"
\
$(top_builddir)/src/timezone
";
#special case for non-standard include
foreach
my
$subdir
(
split
/\s+/
,
$1
)
{
next
if
$subdir
eq
"
\
$(top_builddir)/src/timezone
";
#special case for non-standard include
$self
->
AddDir
(
$reldir
.
"
\\
"
.
$subdir
);
$self
->
AddDir
(
$reldir
.
"
\\
"
.
$subdir
);
}
}
}
}
while
(
$mf
=~
m{^(?:EXTRA_)?OBJS[^=]*=\s*(.*)$}m
)
{
while
(
$mf
=~
m{^(?:EXTRA_)?OBJS[^=]*=\s*(.*)$}m
)
{
my
$s
=
$1
;
my
$s
=
$1
;
my
$filter_re
=
qr{\$\(filter ([^,]+),\s+\$\(([^\)]+)\)\)}
;
my
$filter_re
=
qr{\$\(filter ([^,]+),\s+\$\(([^\)]+)\)\)}
;
while
(
$s
=~
/$filter_re/
)
{
while
(
$s
=~
/$filter_re/
)
# Process $(filter a b c, $(VAR)) expressions
{
# Process $(filter a b c, $(VAR)) expressions
my
$list
=
$1
;
my
$list
=
$1
;
my
$filter
=
$2
;
my
$filter
=
$2
;
$list
=~
s/\.o/\.c/g
;
$list
=~
s/\.o/\.c/g
;
my
@pieces
=
split
/\s+/
,
$list
;
my
@pieces
=
split
/\s+/
,
$list
;
my
$matches
=
"";
my
$matches
=
"";
foreach
my
$p
(
@pieces
)
{
foreach
my
$p
(
@pieces
)
if
(
$filter
eq
"
LIBOBJS
")
{
{
if
(
grep
(
/$p/
,
@
main::
pgportfiles
)
==
1
)
{
if
(
$filter
eq
"
LIBOBJS
")
{
if
(
grep
(
/$p/
,
@
main::
pgportfiles
)
==
1
)
{
$p
=~
s/\.c/\.o/
;
$p
=~
s/\.c/\.o/
;
$matches
.=
$p
.
"
";
$matches
.=
$p
.
"
";
}
}
}
}
else
{
else
{
confess
"
Unknown filter
$filter
\n
";
confess
"
Unknown filter
$filter
\n
";
}
}
}
}
$s
=~
s/$filter_re/$matches/
;
$s
=~
s/$filter_re/$matches/
;
}
}
foreach
my
$f
(
split
/\s+/
,
$s
)
{
foreach
my
$f
(
split
/\s+/
,
$s
)
{
next
if
$f
=~
/^\s*$/
;
next
if
$f
=~
/^\s*$/
;
next
if
$f
eq
"
\\
";
next
if
$f
eq
"
\\
";
next
if
$f
=~
/\/SUBSYS.o$/
;
next
if
$f
=~
/\/SUBSYS.o$/
;
$f
=~
s/,$//
;
# Remove trailing comma that can show up from filter stuff
$f
=~
s/,$//
;
# Remove trailing comma that can show up from filter stuff
next
unless
$f
=~
/.*\.o$/
;
next
unless
$f
=~
/.*\.o$/
;
$f
=~
s/\.o$/\.c/
;
$f
=~
s/\.o$/\.c/
;
if
(
$f
=~
/^\$\(top_builddir\)\/(.*)/
)
{
if
(
$f
=~
/^\$\(top_builddir\)\/(.*)/
)
{
$f
=
$1
;
$f
=
$1
;
$f
=~
s/\//\\/g
;
$f
=~
s/\//\\/g
;
$self
->
{
files
}
->
{
$f
}
=
1
;
$self
->
{
files
}
->
{
$f
}
=
1
;
}
}
else
{
else
{
$f
=~
s/\//\\/g
;
$f
=~
s/\//\\/g
;
$self
->
{
files
}
->
{"
$reldir
\\
$f
"}
=
1
;
$self
->
{
files
}
->
{"
$reldir
\\
$f
"}
=
1
;
}
}
...
@@ -185,30 +224,36 @@ sub AddDir {
...
@@ -185,30 +224,36 @@ sub AddDir {
$mf
=~
s{OBJS[^=]*=\s*(.*)$}{}m
;
$mf
=~
s{OBJS[^=]*=\s*(.*)$}{}m
;
}
}
# Match rules that pull in source files from different directories
# Match rules that pull in source files from different directories
my
$replace_re
=
qr{^([^:\n\$]+\.c)\s*:\s*(?:%\s*: )?\$(\([^\)]+\))\/(.*)\/[^\/]+$}
;
my
$replace_re
=
qr{^([^:\n\$]+\.c)\s*:\s*(?:%\s*: )?\$(\([^\)]+\))\/(.*)\/[^\/]+$}
;
while
(
$mf
=~
m{$replace_re}m
)
{
while
(
$mf
=~
m{$replace_re}m
)
{
my
$match
=
$1
;
my
$match
=
$1
;
my
$top
=
$2
;
my
$top
=
$2
;
my
$target
=
$3
;
my
$target
=
$3
;
$target
=~
s{/}{\\}g
;
$target
=~
s{/}{\\}g
;
my
@pieces
=
split
/\s+/
,
$match
;
my
@pieces
=
split
/\s+/
,
$match
;
foreach
my
$fn
(
@pieces
)
{
foreach
my
$fn
(
@pieces
)
if
(
$top
eq
"
(top_srcdir)
")
{
{
if
(
$top
eq
"
(top_srcdir)
")
{
eval
{
$self
->
ReplaceFile
(
$fn
,
$target
)
};
eval
{
$self
->
ReplaceFile
(
$fn
,
$target
)
};
}
}
elsif
(
$top
eq
"
(backend_src)
")
{
elsif
(
$top
eq
"
(backend_src)
")
{
eval
{
$self
->
ReplaceFile
(
$fn
,
"
src
\\
backend
\\
$target
")
};
eval
{
$self
->
ReplaceFile
(
$fn
,
"
src
\\
backend
\\
$target
")
};
}
}
else
{
else
{
confess
"
Bad replacement top:
$top
, on line
$_
\n
";
confess
"
Bad replacement top:
$top
, on line
$_
\n
";
}
}
}
}
$mf
=~
s{$replace_re}{}m
;
$mf
=~
s{$replace_re}{}m
;
}
}
# See if this Makefile contains a description, and should have a RC file
# See if this Makefile contains a description, and should have a RC file
if
(
$mf
=~
/^PGFILEDESC\s*=\s*\"([^\"]+)\"/m
)
{
if
(
$mf
=~
/^PGFILEDESC\s*=\s*\"([^\"]+)\"/m
)
{
my
$desc
=
$1
;
my
$desc
=
$1
;
my
$ico
;
my
$ico
;
if
(
$mf
=~
/^PGAPPICON\s*=\s*(.*)$/m
)
{
$ico
=
$1
;
}
if
(
$mf
=~
/^PGAPPICON\s*=\s*(.*)$/m
)
{
$ico
=
$1
;
}
...
@@ -217,22 +262,26 @@ sub AddDir {
...
@@ -217,22 +262,26 @@ sub AddDir {
$/
=
$t
;
$/
=
$t
;
}
}
sub
AddResourceFile
{
sub
AddResourceFile
{
my
(
$self
,
$dir
,
$desc
,
$ico
)
=
@_
;
my
(
$self
,
$dir
,
$desc
,
$ico
)
=
@_
;
my
(
$sec
,
$min
,
$hour
,
$mday
,
$mon
,
$year
,
$wday
,
$yday
,
$isdst
)
=
localtime
(
time
);
my
(
$sec
,
$min
,
$hour
,
$mday
,
$mon
,
$year
,
$wday
,
$yday
,
$isdst
)
=
localtime
(
time
);
my
$d
=
(
$year
-
100
)
.
"
$yday
";
my
$d
=
(
$year
-
100
)
.
"
$yday
";
if
(
Solution::
IsNewer
("
$dir
\\
win32ver.rc
",'
src
\
port
\
win32ver.rc
'))
{
if
(
Solution::
IsNewer
("
$dir
\\
win32ver.rc
",'
src
\
port
\
win32ver.rc
'))
{
print
"
Generating win32ver.rc for
$dir
\n
";
print
"
Generating win32ver.rc for
$dir
\n
";
open
(
I
,'
src
\
port
\
win32ver.rc
')
||
confess
"
Could not open win32ver.rc
";
open
(
I
,'
src
\
port
\
win32ver.rc
')
||
confess
"
Could not open win32ver.rc
";
open
(
O
,"
>
$dir
\\
win32ver.rc
")
||
confess
"
Could not write win32ver.rc
";
open
(
O
,"
>
$dir
\\
win32ver.rc
")
||
confess
"
Could not write win32ver.rc
";
my
$icostr
=
$ico
?"
IDI_ICON ICON
\"
src/port/
$ico
.ico
\"
":"";
my
$icostr
=
$ico
?"
IDI_ICON ICON
\"
src/port/
$ico
.ico
\"
":"";
while
(
<
I
>
)
{
while
(
<
I
>
)
{
s/FILEDESC/"$desc"/gm
;
s/FILEDESC/"$desc"/gm
;
s/_ICO_/$icostr/gm
;
s/_ICO_/$icostr/gm
;
s/(VERSION.*),0/$1,$d/
;
s/(VERSION.*),0/$1,$d/
;
if
(
$self
->
{
type
}
eq
"
dll
")
{
if
(
$self
->
{
type
}
eq
"
dll
")
{
s/VFT_APP/VFT_DLL/gm
;
s/VFT_APP/VFT_DLL/gm
;
}
}
print
O
;
print
O
;
...
@@ -243,23 +292,26 @@ sub AddResourceFile {
...
@@ -243,23 +292,26 @@ sub AddResourceFile {
$self
->
AddFile
("
$dir
\\
win32ver.rc
");
$self
->
AddFile
("
$dir
\\
win32ver.rc
");
}
}
sub
DisableLinkerWarnings
{
sub
DisableLinkerWarnings
{
my
(
$self
,
$warnings
)
=
@_
;
my
(
$self
,
$warnings
)
=
@_
;
$self
->
{
disablelinkerwarnings
}
.=
'
;
'
unless
(
$self
->
{
disablelinkerwarnings
}
eq
'');
$self
->
{
disablelinkerwarnings
}
.=
'
;
'
unless
(
$self
->
{
disablelinkerwarnings
}
eq
'');
$self
->
{
disablelinkerwarnings
}
.=
$warnings
;
$self
->
{
disablelinkerwarnings
}
.=
$warnings
;
}
}
sub
Save
{
sub
Save
{
my
(
$self
)
=
@_
;
my
(
$self
)
=
@_
;
# If doing DLL and haven't specified a DEF file, do a full export of all symbols
# If doing DLL and haven't specified a DEF file, do a full export of all symbols
# in the project.
# in the project.
if
(
$self
->
{
type
}
eq
"
dll
"
&&
!
$self
->
{
def
})
{
if
(
$self
->
{
type
}
eq
"
dll
"
&&
!
$self
->
{
def
})
{
$self
->
FullExportDLL
(
$self
->
{
name
}
.
"
.lib
");
$self
->
FullExportDLL
(
$self
->
{
name
}
.
"
.lib
");
}
}
# Dump the project
# Dump the project
open
(
F
,
"
>
$self
->{name}.vcproj
")
||
croak
("
Could not write to
$self
->{name}.vcproj
\n
");
open
(
F
,
"
>
$self
->{name}.vcproj
")
||
croak
("
Could not write to
$self
->{name}.vcproj
\n
");
$self
->
WriteHeader
(
*
F
);
$self
->
WriteHeader
(
*
F
);
$self
->
WriteReferences
(
*
F
);
$self
->
WriteReferences
(
*
F
);
...
@@ -268,22 +320,27 @@ sub Save {
...
@@ -268,22 +320,27 @@ sub Save {
EOF
EOF
my
@dirstack
=
();
my
@dirstack
=
();
my
%
uniquefiles
;
my
%
uniquefiles
;
foreach
my
$f
(
sort
keys
%
{
$self
->
{
files
}
})
{
foreach
my
$f
(
sort
keys
%
{
$self
->
{
files
}
})
{
confess
"
Bad format filename '
$f
'
\n
"
unless
(
$f
=~
/^(.*)\\([^\\]+)\.[r]?[cyl]$/
);
confess
"
Bad format filename '
$f
'
\n
"
unless
(
$f
=~
/^(.*)\\([^\\]+)\.[r]?[cyl]$/
);
my
$dir
=
$1
;
my
$dir
=
$1
;
my
$file
=
$2
;
my
$file
=
$2
;
# Walk backwards down the directory stack and close any dirs we're done with
# Walk backwards down the directory stack and close any dirs we're done with
while
(
$#dirstack
>=
0
)
{
while
(
$#dirstack
>=
0
)
if
(
join
('
\
\'
,@dirstack) eq substr($dir, 0, length(join(
'
\\
'
,@dirstack)))) {
{
if
(
join
('
\
\'
,@dirstack) eq substr($dir, 0, length(join(
'
\\
'
,@dirstack))))
{
last if (length($dir) == length(join(
'
\\
'
,@dirstack)));
last if (length($dir) == length(join(
'
\\
'
,@dirstack)));
last if (substr($dir, length(join(
'
\\
'
,@dirstack)),1) eq
'
\\
'
);
last if (substr($dir, length(join(
'
\\
'
,@dirstack)),1) eq
'
\\
'
);
}
}
print F
'
'
x $#dirstack . " </Filter>
\
n";
print F
'
'
x $#dirstack . " </Filter>
\
n";
pop @dirstack;
pop @dirstack;
}
}
# Now walk forwards and create whatever directories are needed
while (join(
'
\\
'
,@dirstack) ne $dir) {
# Now walk forwards and create whatever directories are needed
while (join(
'
\\
'
,@dirstack) ne $dir)
{
my $left = substr($dir, length(join(
'
\\
'
,@dirstack)));
my $left = substr($dir, length(join(
'
\\
'
,@dirstack)));
$left =~ s/^
\\
//;
$left =~ s/^
\\
//;
my @pieces = split /
\\
/, $left;
my @pieces = split /
\\
/, $left;
...
@@ -292,30 +349,44 @@ EOF
...
@@ -292,30 +349,44 @@ EOF
}
}
print F
'
'
x $#dirstack . " <File RelativePath=
\
"$f
\
"";
print F
'
'
x $#dirstack . " <File RelativePath=
\
"$f
\
"";
if ($f =~ /
\
.y$/) {
if ($f =~ /
\
.y$/)
{
my $of = $f;
my $of = $f;
$of =~ s/
\
.y$/.c/;
$of =~ s/
\
.y$/.c/;
$of =~ s{^src
\\
pl
\\
plpgsql
\\
src
\\
gram.c$}{src
\\
pl
\\
plpgsql
\\
src
\\
pl_gram.c};
$of =~ s{^src
\\
pl
\\
plpgsql
\\
src
\\
gram.c$}{src
\\
pl
\\
plpgsql
\\
src
\\
pl_gram.c};
print F
'
>
'
. GenerateCustomTool(
'
Running
bison
on
'
. $f,
'
cmd
/V:ON /c
src
\
tools
\
msvc
\
pgbison
.
bat
'
. $f, $of) .
'
</
File
>
'
. "
\
n";
print F
'
>
'
. GenerateCustomTool(
'
Running
bison
on
'
. $f,
'
cmd
/V:ON /c
src
\
tools
\
msvc
\
pgbison
.
bat
'
. $f, $of)
.
'
</
File
>
'
. "
\
n";
}
}
elsif ($f =~ /
\
.l$/) {
elsif ($f =~ /
\
.l$/)
{
my $of = $f;
my $of = $f;
$of =~ s/
\
.l$/.c/;
$of =~ s/
\
.l$/.c/;
$of =~ s{^src
\\
pl
\\
plpgsql
\\
src
\\
scan.c$}{src
\\
pl
\\
plpgsql
\\
src
\\
pl_scan.c};
$of =~ s{^src
\\
pl
\\
plpgsql
\\
src
\\
scan.c$}{src
\\
pl
\\
plpgsql
\\
src
\\
pl_scan.c};
print F
'
>
'
. GenerateCustomTool(
'
Running
flex
on
'
. $f,
'
src
\
tools
\
msvc
\
pgflex
.
bat
'
. $f,$of) .
'
</
File
>
'
. "
\
n";
print F
'
>
'
. GenerateCustomTool(
'
Running
flex
on
'
. $f,
'
src
\
tools
\
msvc
\
pgflex
.
bat
'
. $f,$of)
.
'
</
File
>
'
. "
\
n";
}
}
elsif (defined($uniquefiles{$file})) {
elsif (defined($uniquefiles{$file}))
# File already exists, so fake a new name
{
# File already exists, so fake a new name
my $obj = $dir;
my $obj = $dir;
$obj =~ s/
\\
/_/g;
$obj =~ s/
\\
/_/g;
print F "><FileConfiguration Name=
\
"Debug|Win32
\
"><Tool Name=
\
"VCCLCompilerTool
\
" ObjectFile=
\
".
\\
debug
\\
$self->{name}
\\
$obj" . "_$file.obj
\
" /></FileConfiguration><FileConfiguration Name=
\
"Release|Win32
\
"><Tool Name=
\
"VCCLCompilerTool
\
" ObjectFile=
\
".
\\
release
\\
$self->{name}
\\
$obj" . "_$file.obj
\
" /></FileConfiguration></File>
\
n";
print F
"><FileConfiguration Name=
\
"Debug|Win32
\
"><Tool Name=
\
"VCCLCompilerTool
\
" ObjectFile=
\
".
\\
debug
\\
$self->{name}
\\
$obj"
. "_$file.obj
\
" /></FileConfiguration><FileConfiguration Name=
\
"Release|Win32
\
"><Tool Name=
\
"VCCLCompilerTool
\
" ObjectFile=
\
".
\\
release
\\
$self->{name}
\\
$obj"
. "_$file.obj
\
" /></FileConfiguration></File>
\
n";
}
}
else {
else
{
$uniquefiles{$file} = 1;
$uniquefiles{$file} = 1;
print F " />
\
n";
print F " />
\
n";
}
}
}
}
while ($#dirstack >= 0) {
while ($#dirstack >= 0)
{
print F
'
'
x $#dirstack . " </Filter>
\
n";
print F
'
'
x $#dirstack . " </Filter>
\
n";
pop @dirstack;
pop @dirstack;
}
}
...
@@ -323,25 +394,32 @@ EOF
...
@@ -323,25 +394,32 @@ EOF
close(F);
close(F);
}
}
sub GenerateCustomTool {
sub GenerateCustomTool
{
my ($desc, $tool, $output, $cfg) = @_;
my ($desc, $tool, $output, $cfg) = @_;
if (!defined($cfg)) {
if (!defined($cfg))
return GenerateCustomTool($desc, $tool, $output,
'
Debug
'
) .
{
GenerateCustomTool($desc, $tool, $output,
'
Release
'
);
return GenerateCustomTool($desc, $tool, $output,
'
Debug
'
)
.GenerateCustomTool($desc, $tool, $output,
'
Release
'
);
}
}
return "<FileConfiguration Name=
\
"$cfg|Win32
\
"><Tool Name=
\
"VCCustomBuildTool
\
" Description=
\
"$desc
\
" CommandLine=
\
"$tool
\
" AdditionalDependencies=
\
"
\
" Outputs=
\
"$output
\
" /></FileConfiguration>";
return
"<FileConfiguration Name=
\
"$cfg|Win32
\
"><Tool Name=
\
"VCCustomBuildTool
\
" Description=
\
"$desc
\
" CommandLine=
\
"$tool
\
" AdditionalDependencies=
\
"
\
" Outputs=
\
"$output
\
" /></FileConfiguration>";
}
}
sub WriteReferences {
sub WriteReferences
{
my ($self, $f) = @_;
my ($self, $f) = @_;
print $f " <References>
\
n";
print $f " <References>
\
n";
foreach my $ref (@{$self->{references}}) {
foreach my $ref (@{$self->{references}})
print $f " <ProjectReference ReferencedProjectIdentifier=
\
"$ref->{guid}
\
" Name=
\
"$ref->{name}
\
" />
\
n";
{
print $f
" <ProjectReference ReferencedProjectIdentifier=
\
"$ref->{guid}
\
" Name=
\
"$ref->{name}
\
" />
\
n";
}
}
print $f " </References>
\
n";
print $f " </References>
\
n";
}
}
sub WriteHeader {
sub WriteHeader
{
my ($self, $f) = @_;
my ($self, $f) = @_;
print $f <<EOF;
print $f <<EOF;
...
@@ -350,9 +428,11 @@ sub WriteHeader {
...
@@ -350,9 +428,11 @@ sub WriteHeader {
<Platforms><Platform Name="Win32"/></Platforms>
<Platforms><Platform Name="Win32"/></Platforms>
<Configurations>
<Configurations>
EOF
EOF
$self->WriteConfiguration($f,
'
Debug
'
, { defs=>
'
_DEBUG
;
DEBUG
=
1
;'
, wholeopt=>0 , opt=>0, strpool=>
'
false
'
, runtime=>3 });
$self->WriteConfiguration($f,
'
Debug
'
,
$self->WriteConfiguration($f,
'
Release
'
, { defs=>
''
, wholeopt=>0, opt=>3, strpool=>
'
true
'
, runtime=>2 });
{ defs=>
'
_DEBUG
;
DEBUG
=
1
;'
, wholeopt=>0, opt=>0, strpool=>
'
false
'
, runtime=>3 });
print $f <<EOF;
$self->WriteConfiguration($f,
'
Release
'
,
{ defs=>
''
, wholeopt=>0, opt=>3, strpool=>
'
true
'
, runtime=>2 });
print $f <<EOF;
</Configurations>
</Configurations>
EOF
EOF
}
}
...
@@ -363,10 +443,13 @@ sub WriteConfiguration
...
@@ -363,10 +443,13 @@ sub WriteConfiguration
my $cfgtype = ($self->{type} eq "exe")?1:($self->{type} eq "dll"?2:4);
my $cfgtype = ($self->{type} eq "exe")?1:($self->{type} eq "dll"?2:4);
my $libcfg = (uc $cfgname eq "RELEASE")?"MD":"MDd";
my $libcfg = (uc $cfgname eq "RELEASE")?"MD":"MDd";
my $libs =
''
;
my $libs =
''
;
foreach my $lib (@{$self->{libraries}}) {
foreach my $lib (@{$self->{libraries}})
{
my $xlib = $lib;
my $xlib = $lib;
foreach my $slib (@{$self->{suffixlib}}) {
foreach my $slib (@{$self->{suffixlib}})
if ($slib eq $lib) {
{
if ($slib eq $lib)
{
$xlib =~ s/
\
.lib$/$libcfg.lib/;
$xlib =~ s/
\
.lib$/$libcfg.lib/;
last;
last;
}
}
...
@@ -398,32 +481,40 @@ EOF
...
@@ -398,32 +481,40 @@ EOF
GenerateMapFile="FALSE" MapFileName=".
\\
$cfgname
\\
$self->{name}
\\
$self->{name}.map"
GenerateMapFile="FALSE" MapFileName=".
\\
$cfgname
\\
$self->{name}
\\
$self->{name}.map"
SubSystem="1" TargetMachine="1"
SubSystem="1" TargetMachine="1"
EOF
EOF
if ($self->{disablelinkerwarnings}) {
if ($self->{disablelinkerwarnings})
{
print $f "
\
t
\
tAdditionalOptions=
\
"/ignore:$self->{disablelinkerwarnings}
\
"
\
n";
print $f "
\
t
\
tAdditionalOptions=
\
"/ignore:$self->{disablelinkerwarnings}
\
"
\
n";
}
}
if ($self->{implib}) {
if ($self->{implib})
{
my $l = $self->{implib};
my $l = $self->{implib};
$l =~ s/__CFGNAME__/$cfgname/g;
$l =~ s/__CFGNAME__/$cfgname/g;
print $f "
\
t
\
tImportLibrary=
\
"$l
\
"
\
n";
print $f "
\
t
\
tImportLibrary=
\
"$l
\
"
\
n";
}
}
if ($self->{def}) {
if ($self->{def})
{
my $d = $self->{def};
my $d = $self->{def};
$d =~ s/__CFGNAME__/$cfgname/g;
$d =~ s/__CFGNAME__/$cfgname/g;
print $f "
\
t
\
tModuleDefinitionFile=
\
"$d
\
"
\
n";
print $f "
\
t
\
tModuleDefinitionFile=
\
"$d
\
"
\
n";
}
}
print $f "
\
t/>
\
n";
print $f "
\
t/>
\
n";
print $f "
\
t<Tool Name=
\
"VCLibrarianTool
\
" OutputFile=
\
".
\\
$cfgname
\\
$self->{name}
\\
$self->{name}.lib
\
" IgnoreDefaultLibraryNames=
\
"libc
\
" />
\
n";
print $f
print $f "
\
t<Tool Name=
\
"VCResourceCompilerTool
\
" AdditionalIncludeDirectories=
\
"src
\\
include
\
" />
\
n";
"
\
t<Tool Name=
\
"VCLibrarianTool
\
" OutputFile=
\
".
\\
$cfgname
\\
$self->{name}
\\
$self->{name}.lib
\
" IgnoreDefaultLibraryNames=
\
"libc
\
" />
\
n";
if ($self->{builddef}) {
print $f
print $f "
\
t<Tool Name=
\
"VCPreLinkEventTool
\
" Description=
\
"Generate DEF file
\
" CommandLine=
\
"perl src
\\
tools
\\
msvc
\\
gendef.pl $cfgname
\\
$self->{name}
\
" />
\
n";
"
\
t<Tool Name=
\
"VCResourceCompilerTool
\
" AdditionalIncludeDirectories=
\
"src
\\
include
\
" />
\
n";
if ($self->{builddef})
{
print $f
"
\
t<Tool Name=
\
"VCPreLinkEventTool
\
" Description=
\
"Generate DEF file
\
" CommandLine=
\
"perl src
\\
tools
\\
msvc
\\
gendef.pl $cfgname
\\
$self->{name}
\
" />
\
n";
}
}
print $f <<EOF;
print $f <<EOF;
</Configuration>
</Configuration>
EOF
EOF
}
}
sub Footer {
sub Footer
{
my ($self, $f) = @_;
my ($self, $f) = @_;
print $f <<EOF;
print $f <<EOF;
...
@@ -433,9 +524,9 @@ sub Footer {
...
@@ -433,9 +524,9 @@ sub Footer {
EOF
EOF
}
}
# Utility function that loads a complete file
# Utility function that loads a complete file
sub read_file {
sub read_file
{
my $filename = shift;
my $filename = shift;
my $F;
my $F;
my $t = $/;
my $t = $/;
...
...
src/tools/msvc/README
View file @
eee22892
...
@@ -63,3 +63,11 @@ Get from http://www.zlib.net
...
@@ -63,3 +63,11 @@ Get from http://www.zlib.net
libxml2 and libxslt - required for XML support
libxml2 and libxslt - required for XML support
Get from http://www.zlatkovic.com/pub/libxml or build from source from
Get from http://www.zlatkovic.com/pub/libxml or build from source from
http://xmlsoft.org. Note that libxml2 requires iconv.
http://xmlsoft.org. Note that libxml2 requires iconv.
Code indention
--------------
If the perl code is modified, use perltidy on it since pgindent won't
touch perl code. Use the following commandline:
perltidy -b -bl -nsfs -naws -l=100 *.pl *.pm
src/tools/msvc/Solution.pm
View file @
eee22892
...
@@ -3,7 +3,8 @@ use Carp;
...
@@ -3,7 +3,8 @@ use Carp;
use
strict
;
use
strict
;
use
warnings
;
use
warnings
;
sub
new
{
sub
new
{
my
$junk
=
shift
;
my
$junk
=
shift
;
my
$options
=
shift
;
my
$options
=
shift
;
my
$self
=
{
my
$self
=
{
...
@@ -13,8 +14,10 @@ sub new {
...
@@ -13,8 +14,10 @@ sub new {
strver
=>
'',
strver
=>
'',
};
};
bless
$self
;
bless
$self
;
if
(
$options
->
{
xml
})
{
if
(
$options
->
{
xml
})
if
(
!
(
$options
->
{
xslt
}
&&
$options
->
{
iconv
}))
{
{
if
(
!
(
$options
->
{
xslt
}
&&
$options
->
{
iconv
}))
{
die
"
XML requires both XSLT and ICONV
\n
";
die
"
XML requires both XSLT and ICONV
\n
";
}
}
}
}
...
@@ -23,9 +26,11 @@ sub new {
...
@@ -23,9 +26,11 @@ sub new {
# Return 1 if $oldfile is newer than $newfile, or if $newfile doesn't exist.
# Return 1 if $oldfile is newer than $newfile, or if $newfile doesn't exist.
# Special case - if config.pl has changed, always return 1
# Special case - if config.pl has changed, always return 1
sub
IsNewer
{
sub
IsNewer
{
my
(
$newfile
,
$oldfile
)
=
@_
;
my
(
$newfile
,
$oldfile
)
=
@_
;
if
(
$oldfile
ne
'
src
\
tools
\
msvc
\
config.pl
')
{
if
(
$oldfile
ne
'
src
\
tools
\
msvc
\
config.pl
')
{
return
1
if
IsNewer
(
$newfile
,
'
src
\
tools
\
msvc
\
config.pl
');
return
1
if
IsNewer
(
$newfile
,
'
src
\
tools
\
msvc
\
config.pl
');
}
}
return
1
if
(
!
(
-
e
$newfile
));
return
1
if
(
!
(
-
e
$newfile
));
...
@@ -36,27 +41,33 @@ sub IsNewer {
...
@@ -36,27 +41,33 @@ sub IsNewer {
}
}
# Copy a file, *not* preserving date. Only works for text files.
# Copy a file, *not* preserving date. Only works for text files.
sub
copyFile
{
sub
copyFile
{
my
(
$src
,
$dest
)
=
@_
;
my
(
$src
,
$dest
)
=
@_
;
open
(
I
,
$src
)
||
croak
"
Could not open
$src
";
open
(
I
,
$src
)
||
croak
"
Could not open
$src
";
open
(
O
,"
>
$dest
")
||
croak
"
Could not open
$dest
";
open
(
O
,"
>
$dest
")
||
croak
"
Could not open
$dest
";
while
(
<
I
>
)
{
while
(
<
I
>
)
{
print
O
;
print
O
;
}
}
close
(
I
);
close
(
I
);
close
(
O
);
close
(
O
);
}
}
sub
GenerateFiles
{
sub
GenerateFiles
{
my
$self
=
shift
;
my
$self
=
shift
;
# Parse configure.in to get version numbers
# Parse configure.in to get version numbers
open
(
C
,"
configure.in
")
||
confess
("
Could not open configure.in for reading
\n
");
open
(
C
,"
configure.in
")
||
confess
("
Could not open configure.in for reading
\n
");
while
(
<
C
>
)
{
while
(
<
C
>
)
if
(
/^AC_INIT\(\[PostgreSQL\], \[([^\]]+)\]/
)
{
{
if
(
/^AC_INIT\(\[PostgreSQL\], \[([^\]]+)\]/
)
{
$self
->
{
strver
}
=
$1
;
$self
->
{
strver
}
=
$1
;
if
(
$self
->
{
strver
}
!~
/^(\d+)\.(\d+)(?:\.(\d+))?/
)
{
if
(
$self
->
{
strver
}
!~
/^(\d+)\.(\d+)(?:\.(\d+))?/
)
confess
"
Bad format of version:
$self
->{strver}
\n
"
{
confess
"
Bad format of version:
$self
->{strver}
\n
";
}
}
$self
->
{
numver
}
=
sprintf
("
%d%02d%02d
",
$1
,
$2
,
$3
?
$3:0
);
$self
->
{
numver
}
=
sprintf
("
%d%02d%02d
",
$1
,
$2
,
$3
?
$3:0
);
$self
->
{
majorver
}
=
sprintf
("
%d.%d
",
$1
,
$2
);
$self
->
{
majorver
}
=
sprintf
("
%d.%d
",
$1
,
$2
);
...
@@ -66,19 +77,22 @@ sub GenerateFiles {
...
@@ -66,19 +77,22 @@ sub GenerateFiles {
confess
"
Unable to parse configure.in for all variables!
"
confess
"
Unable to parse configure.in for all variables!
"
if
(
$self
->
{
strver
}
eq
''
||
$self
->
{
numver
}
eq
'');
if
(
$self
->
{
strver
}
eq
''
||
$self
->
{
numver
}
eq
'');
if
(
IsNewer
("
src
\\
include
\\
pg_config_os.h
","
src
\\
include
\\
port
\\
win32.h
"))
{
if
(
IsNewer
("
src
\\
include
\\
pg_config_os.h
","
src
\\
include
\\
port
\\
win32.h
"))
{
print
"
Copying pg_config_os.h...
\n
";
print
"
Copying pg_config_os.h...
\n
";
copyFile
("
src
\\
include
\\
port
\\
win32.h
","
src
\\
include
\\
pg_config_os.h
");
copyFile
("
src
\\
include
\\
port
\\
win32.h
","
src
\\
include
\\
pg_config_os.h
");
}
}
if
(
IsNewer
("
src
\\
include
\\
pg_config.h
","
src
\\
include
\\
pg_config.h.win32
"))
{
if
(
IsNewer
("
src
\\
include
\\
pg_config.h
","
src
\\
include
\\
pg_config.h.win32
"))
{
print
"
Generating pg_config.h...
\n
";
print
"
Generating pg_config.h...
\n
";
open
(
I
,"
src
\\
include
\\
pg_config.h.win32
")
||
confess
"
Could not open pg_config.h.win32
\n
";
open
(
I
,"
src
\\
include
\\
pg_config.h.win32
")
||
confess
"
Could not open pg_config.h.win32
\n
";
open
(
O
,"
>src
\\
include
\\
pg_config.h
")
||
confess
"
Could not write to pg_config.h
\n
";
open
(
O
,"
>src
\\
include
\\
pg_config.h
")
||
confess
"
Could not write to pg_config.h
\n
";
while
(
<
I
>
)
{
while
(
<
I
>
)
{
s{PG_VERSION "[^"]+"}{PG_VERSION "$self->{strver}
"
};
s{PG_VERSION "[^"]+"}{PG_VERSION "$self->{strver}
"
};
s{PG_VERSION_NUM
\
d+}{PG_VERSION_NUM
$self
->{numver}};
s{PG_VERSION_NUM
\
d+}{PG_VERSION_NUM
$self
->{numver}};
s{PG_VERSION_STR
"[
^
"
]+
"}{
__STRINGIFY
(
x
)
#x\n#define __STRINGIFY2(z) __STRINGIFY(z)\n#define PG_VERSION_STR "PostgreSQL $self->{strver}, compiled by Visual C++ build " __STRINGIFY2(_MSC_VER)};
s{PG_VERSION_STR
"[
^
"
]+
"}{
__STRINGIFY
(
x
)
#x\n#define __STRINGIFY2(z) __STRINGIFY(z)\n#define PG_VERSION_STR "PostgreSQL $self->{strver}, compiled by Visual C++ build " __STRINGIFY2(_MSC_VER)};
print
O
;
print
O
;
}
}
print
O
"
/* defines added by config steps */
\n
";
print
O
"
/* defines added by config steps */
\n
";
...
@@ -89,11 +103,14 @@ sub GenerateFiles {
...
@@ -89,11 +103,14 @@ sub GenerateFiles {
print
O
"
#define USE_SSL 1
\n
"
if
(
$self
->
{
options
}
->
{
openssl
});
print
O
"
#define USE_SSL 1
\n
"
if
(
$self
->
{
options
}
->
{
openssl
});
print
O
"
#define ENABLE_NLS 1
\n
"
if
(
$self
->
{
options
}
->
{
nls
});
print
O
"
#define ENABLE_NLS 1
\n
"
if
(
$self
->
{
options
}
->
{
nls
});
print
O
"
#define LOCALEDIR
\"
/share/locale
\"\n
"
if
(
$self
->
{
options
}
->
{
nls
});
print
O
"
#define LOCALEDIR
\"
/share/locale
\"\n
"
if
(
$self
->
{
options
}
->
{
nls
});
if
(
$self
->
{
options
}
->
{
xml
})
{
if
(
$self
->
{
options
}
->
{
xml
})
{
print
O
"
#define HAVE_LIBXML2
\n
";
print
O
"
#define HAVE_LIBXML2
\n
";
print
O
"
#define USE_LIBXML
\n
";
print
O
"
#define USE_LIBXML
\n
";
}
}
if
(
$self
->
{
options
}
->
{
krb5
})
{
if
(
$self
->
{
options
}
->
{
krb5
})
{
print
O
"
#define KRB5 1
\n
";
print
O
"
#define KRB5 1
\n
";
print
O
"
#define HAVE_KRB5_ERROR_TEXT_DATA 1
\n
";
print
O
"
#define HAVE_KRB5_ERROR_TEXT_DATA 1
\n
";
print
O
"
#define HAVE_KRB5_TICKET_ENC_PART2 1
\n
";
print
O
"
#define HAVE_KRB5_TICKET_ENC_PART2 1
\n
";
...
@@ -103,12 +120,14 @@ sub GenerateFiles {
...
@@ -103,12 +120,14 @@ sub GenerateFiles {
close
(
I
);
close
(
I
);
}
}
if
(
IsNewer
("
src
\\
interfaces
\\
libpq
\\
libpqdll.def
","
src
\\
interfaces
\\
libpq
\\
exports.txt
"))
{
if
(
IsNewer
("
src
\\
interfaces
\\
libpq
\\
libpqdll.def
","
src
\\
interfaces
\\
libpq
\\
exports.txt
"))
{
print
"
Generating libpqdll.def...
\n
";
print
"
Generating libpqdll.def...
\n
";
open
(
I
,"
src
\\
interfaces
\\
libpq
\\
exports.txt
")
||
confess
("
Could not open exports.txt
\n
");
open
(
I
,"
src
\\
interfaces
\\
libpq
\\
exports.txt
")
||
confess
("
Could not open exports.txt
\n
");
open
(
O
,"
>src
\\
interfaces
\\
libpq
\\
libpqdll.def
")
||
confess
("
Could not open libpqdll.def
\n
");
open
(
O
,"
>src
\\
interfaces
\\
libpq
\\
libpqdll.def
")
||
confess
("
Could not open libpqdll.def
\n
");
print
O
"
LIBRARY LIBPQ
\n
EXPORTS
\n
";
print
O
"
LIBRARY LIBPQ
\n
EXPORTS
\n
";
while
(
<
I
>
)
{
while
(
<
I
>
)
{
next
if
(
/^#/
);
next
if
(
/^#/
);
my
(
$f
,
$o
)
=
split
;
my
(
$f
,
$o
)
=
split
;
print
O
"
$f
@
$o
\n
";
print
O
"
$f
@
$o
\n
";
...
@@ -117,19 +136,22 @@ sub GenerateFiles {
...
@@ -117,19 +136,22 @@ sub GenerateFiles {
close
(
I
);
close
(
I
);
}
}
if
(
IsNewer
("
src
\\
backend
\\
utils
\\
fmgrtab.c
","
src
\\
include
\\
catalog
\\
pg_proc.h
"))
{
if
(
IsNewer
("
src
\\
backend
\\
utils
\\
fmgrtab.c
","
src
\\
include
\\
catalog
\\
pg_proc.h
"))
{
print
"
Generating fmgrtab.c and fmgroids.h...
\n
";
print
"
Generating fmgrtab.c and fmgroids.h...
\n
";
open
(
I
,"
src
\\
include
\\
catalog
\\
pg_proc.h
")
||
confess
"
Could not open pg_proc.h
";
open
(
I
,"
src
\\
include
\\
catalog
\\
pg_proc.h
")
||
confess
"
Could not open pg_proc.h
";
my
@fmgr
=
();
my
@fmgr
=
();
my
%
seenit
;
my
%
seenit
;
while
(
<
I
>
)
{
while
(
<
I
>
)
{
next
unless
(
/^DATA/
);
next
unless
(
/^DATA/
);
s/^.*OID[^=]*=[^0-9]*//
;
s/^.*OID[^=]*=[^0-9]*//
;
s/\(//g
;
s/\(//g
;
s/[ \t]*\).*$//
;
s/[ \t]*\).*$//
;
my
@p
=
split
;
my
@p
=
split
;
next
if
(
$p
[
4
]
ne
"
12
");
next
if
(
$p
[
4
]
ne
"
12
");
push
@fmgr
,{
push
@fmgr
,
{
oid
=>
$p
[
0
],
oid
=>
$p
[
0
],
proname
=>
$p
[
1
],
proname
=>
$p
[
1
],
prosrc
=>
$p
[
$#p
-
2
],
prosrc
=>
$p
[
$#p
-
2
],
...
@@ -140,12 +162,15 @@ sub GenerateFiles {
...
@@ -140,12 +162,15 @@ sub GenerateFiles {
}
}
close
(
I
);
close
(
I
);
open
(
H
,'
>
',
'
src
\
include
\
utils
\
fmgroids.h
')
||
open
(
H
,'
>
',
'
src
\
include
\
utils
\
fmgroids.h
')
confess
"
Could not open fmgroids.h
";
||
confess
"
Could not open fmgroids.h
";
print
H
"
/* fmgroids.h generated for Visual C++ */
\n
#ifndef FMGROIDS_H
\n
#define FMGROIDS_H
\n\n
";
print
H
"
/* fmgroids.h generated for Visual C++ */
\n
#ifndef FMGROIDS_H
\n
#define FMGROIDS_H
\n\n
";
open
(
T
,"
>src
\\
backend
\\
utils
\\
fmgrtab.c
")
||
confess
"
Could not open fmgrtab.c
";
open
(
T
,"
>src
\\
backend
\\
utils
\\
fmgrtab.c
")
||
confess
"
Could not open fmgrtab.c
";
print
T
"
/* fmgrtab.c generated for Visual C++ */
\n
#include
\"
postgres.h
\"\n
#include
\"
utils/fmgrtab.h
\"\n\n
";
print
T
foreach
my
$s
(
sort
{
$a
->
{
oid
}
<=>
$b
->
{
oid
}}
@fmgr
)
{
"
/* fmgrtab.c generated for Visual C++ */
\n
#include
\"
postgres.h
\"\n
#include
\"
utils/fmgrtab.h
\"\n\n
";
foreach
my
$s
(
sort
{
$a
->
{
oid
}
<=>
$b
->
{
oid
}}
@fmgr
)
{
next
if
$seenit
{
$s
->
{
prosrc
}};
next
if
$seenit
{
$s
->
{
prosrc
}};
$seenit
{
$s
->
{
prosrc
}}
=
1
;
$seenit
{
$s
->
{
prosrc
}}
=
1
;
print
H
"
#define F_
"
.
uc
$s
->
{
prosrc
}
.
"
$s
->{oid}
\n
";
print
H
"
#define F_
"
.
uc
$s
->
{
prosrc
}
.
"
$s
->{oid}
\n
";
...
@@ -157,22 +182,26 @@ sub GenerateFiles {
...
@@ -157,22 +182,26 @@ sub GenerateFiles {
my
%
bmap
;
my
%
bmap
;
$bmap
{'
t
'}
=
'
true
';
$bmap
{'
t
'}
=
'
true
';
$bmap
{'
f
'}
=
'
false
';
$bmap
{'
f
'}
=
'
false
';
foreach
my
$s
(
sort
{
$a
->
{
oid
}
<=>
$b
->
{
oid
}}
@fmgr
)
{
foreach
my
$s
(
sort
{
$a
->
{
oid
}
<=>
$b
->
{
oid
}}
@fmgr
)
print
T
"
{
$s
->{oid},
\"
$s
->{prosrc}
\"
,
$s
->{nargs},
$bmap
{
$s
->{strict}},
$bmap
{
$s
->{retset}},
$s
->{prosrc} },
\n
";
{
print
T
"
{
$s
->{oid},
\"
$s
->{prosrc}
\"
,
$s
->{nargs},
$bmap
{
$s
->{strict}},
$bmap
{
$s
->{retset}},
$s
->{prosrc} },
\n
";
}
}
print
T
print
T
"
{ 0, NULL, 0, false, false, NULL }
\n
};
\n\n
const int fmgr_nbuiltins = (sizeof(fmgr_builtins) / sizeof(FmgrBuiltin)) - 1;
\n
";
"
{ 0, NULL, 0, false, false, NULL }
\n
};
\n\n
const int fmgr_nbuiltins = (sizeof(fmgr_builtins) / sizeof(FmgrBuiltin)) - 1;
\n
";
close
(
T
);
close
(
T
);
}
}
if
(
IsNewer
('
src
\
interfaces
\
libpq
\
libpq.rc
','
src
\
interfaces
\
libpq
\
libpq.rc.in
'))
{
if
(
IsNewer
('
src
\
interfaces
\
libpq
\
libpq.rc
','
src
\
interfaces
\
libpq
\
libpq.rc.in
'))
{
print
"
Generating libpq.rc...
\n
";
print
"
Generating libpq.rc...
\n
";
my
(
$sec
,
$min
,
$hour
,
$mday
,
$mon
,
$year
,
$wday
,
$yday
,
$isdst
)
=
localtime
(
time
);
my
(
$sec
,
$min
,
$hour
,
$mday
,
$mon
,
$year
,
$wday
,
$yday
,
$isdst
)
=
localtime
(
time
);
my
$d
=
(
$year
-
100
)
.
"
$yday
";
my
$d
=
(
$year
-
100
)
.
"
$yday
";
open
(
I
,'
<
',
'
src
\
interfaces
\
libpq
\
libpq.rc.in
')
||
confess
"
Could not open libpq.rc.in
";
open
(
I
,'
<
',
'
src
\
interfaces
\
libpq
\
libpq.rc.in
')
||
confess
"
Could not open libpq.rc.in
";
open
(
O
,'
>
',
'
src
\
interfaces
\
libpq
\
libpq.rc
')
||
confess
"
Could not open libpq.rc
";
open
(
O
,'
>
',
'
src
\
interfaces
\
libpq
\
libpq.rc
')
||
confess
"
Could not open libpq.rc
";
while
(
<
I
>
)
{
while
(
<
I
>
)
{
s/(VERSION.*),0/$1,$d/
;
s/(VERSION.*),0/$1,$d/
;
print
O
;
print
O
;
}
}
...
@@ -180,16 +209,24 @@ sub GenerateFiles {
...
@@ -180,16 +209,24 @@ sub GenerateFiles {
close
(
O
);
close
(
O
);
}
}
if
(
IsNewer
('
src
\
bin
\
psql
\
sql_help.h
','
src
\
bin
\
psql
\
create_help.pl
'))
{
if
(
IsNewer
('
src
\
bin
\
psql
\
sql_help.h
','
src
\
bin
\
psql
\
create_help.pl
'))
{
print
"
Generating sql_help.h...
\n
";
print
"
Generating sql_help.h...
\n
";
chdir
('
src
\
bin
\
psql
');
chdir
('
src
\
bin
\
psql
');
system
("
perl create_help.pl ../../../doc/src/sgml/ref sql_help.h
");
system
("
perl create_help.pl ../../../doc/src/sgml/ref sql_help.h
");
chdir
('
..
\
..
\
..
');
chdir
('
..
\
..
\
..
');
}
}
if
(
IsNewer
('
src
\
interfaces
\
ecpg
\
include
\
ecpg_config.h
',
'
src
\
interfaces
\
ecpg
\
include
\
ecpg_config.h.in
'))
{
if
(
IsNewer
(
'
src
\
interfaces
\
ecpg
\
include
\
ecpg_config.h
',
'
src
\
interfaces
\
ecpg
\
include
\
ecpg_config.h.in
'
)
)
{
print
"
Generating ecpg_config.h...
\n
";
print
"
Generating ecpg_config.h...
\n
";
open
(
O
,'
>
','
src
\
interfaces
\
ecpg
\
include
\
ecpg_config.h
')
||
confess
"
Could not open ecpg_config.h
";
open
(
O
,'
>
','
src
\
interfaces
\
ecpg
\
include
\
ecpg_config.h
')
||
confess
"
Could not open ecpg_config.h
";
print
O
<<EOF;
print
O
<<EOF;
#if (_MSC_VER > 1200)
#if (_MSC_VER > 1200)
#define HAVE_LONG_LONG_INT_64
#define HAVE_LONG_LONG_INT_64
...
@@ -198,7 +235,8 @@ EOF
...
@@ -198,7 +235,8 @@ EOF
close
(
O
);
close
(
O
);
}
}
unless
(
-
f
"
src
\\
port
\\
pg_config_paths.h
")
{
unless
(
-
f
"
src
\\
port
\\
pg_config_paths.h
")
{
print
"
Generating pg_config_paths.h...
\n
";
print
"
Generating pg_config_paths.h...
\n
";
open
(
O
,'
>
',
'
src
\
port
\
pg_config_paths.h
')
||
confess
"
Could not open pg_config_paths.h
";
open
(
O
,'
>
',
'
src
\
port
\
pg_config_paths.h
')
||
confess
"
Could not open pg_config_paths.h
";
print
O
<<EOF;
print
O
<<EOF;
...
@@ -219,13 +257,17 @@ EOF
...
@@ -219,13 +257,17 @@ EOF
my
$mf
=
Project::
read_file
('
src
\
backend
\
catalog
\
Makefile
');
my
$mf
=
Project::
read_file
('
src
\
backend
\
catalog
\
Makefile
');
$mf
=~
s{\\s*[\r\n]+}{}mg
;
$mf
=~
s{\\s*[\r\n]+}{}mg
;
$mf
=~
/^POSTGRES_BKI_SRCS\s*:?=[^,]+,(.*)\)$/gm
||
croak
"
Could not find POSTGRES_BKI_SRCS in Makefile
\n
";
$mf
=~
/^POSTGRES_BKI_SRCS\s*:?=[^,]+,(.*)\)$/gm
||
croak
"
Could not find POSTGRES_BKI_SRCS in Makefile
\n
";
my
@allbki
=
split
/\s+/
,
$1
;
my
@allbki
=
split
/\s+/
,
$1
;
foreach
my
$bki
(
@allbki
)
{
foreach
my
$bki
(
@allbki
)
{
next
if
$bki
eq
"";
next
if
$bki
eq
"";
if
(
IsNewer
('
src/backend/catalog/postgres.bki
',
"
src/include/catalog/
$bki
"))
{
if
(
IsNewer
('
src/backend/catalog/postgres.bki
',
"
src/include/catalog/
$bki
"))
{
print
"
Generating postgres.bki...
\n
";
print
"
Generating postgres.bki...
\n
";
system
("
perl src/tools/msvc/genbki.pl
$self
->{majorver} src/backend/catalog/postgres
"
.
join
('
src/include/catalog/
',
@allbki
));
system
("
perl src/tools/msvc/genbki.pl
$self
->{majorver} src/backend/catalog/postgres
"
.
join
('
src/include/catalog/
',
@allbki
));
last
;
last
;
}
}
}
}
...
@@ -238,31 +280,37 @@ EOF
...
@@ -238,31 +280,37 @@ EOF
close
(
O
);
close
(
O
);
}
}
sub
AddProject
{
sub
AddProject
{
my
(
$self
,
$name
,
$type
,
$folder
,
$initialdir
)
=
@_
;
my
(
$self
,
$name
,
$type
,
$folder
,
$initialdir
)
=
@_
;
my
$proj
=
new
Project
(
$name
,
$type
,
$self
);
my
$proj
=
new
Project
(
$name
,
$type
,
$self
);
push
@
{
$self
->
{
projects
}
->
{
$folder
}},
$proj
;
push
@
{
$self
->
{
projects
}
->
{
$folder
}},
$proj
;
$proj
->
AddDir
(
$initialdir
)
if
(
$initialdir
);
$proj
->
AddDir
(
$initialdir
)
if
(
$initialdir
);
if
(
$self
->
{
options
}
->
{
zlib
})
{
if
(
$self
->
{
options
}
->
{
zlib
})
{
$proj
->
AddIncludeDir
(
$self
->
{
options
}
->
{
zlib
}
.
'
\
include
');
$proj
->
AddIncludeDir
(
$self
->
{
options
}
->
{
zlib
}
.
'
\
include
');
$proj
->
AddLibrary
(
$self
->
{
options
}
->
{
zlib
}
.
'
\
lib
\
zdll.lib
');
$proj
->
AddLibrary
(
$self
->
{
options
}
->
{
zlib
}
.
'
\
lib
\
zdll.lib
');
}
}
if
(
$self
->
{
options
}
->
{
openssl
})
{
if
(
$self
->
{
options
}
->
{
openssl
})
{
$proj
->
AddIncludeDir
(
$self
->
{
options
}
->
{
openssl
}
.
'
\
include
');
$proj
->
AddIncludeDir
(
$self
->
{
options
}
->
{
openssl
}
.
'
\
include
');
$proj
->
AddLibrary
(
$self
->
{
options
}
->
{
openssl
}
.
'
\
lib
\
VC
\
ssleay32.lib
',
1
);
$proj
->
AddLibrary
(
$self
->
{
options
}
->
{
openssl
}
.
'
\
lib
\
VC
\
ssleay32.lib
',
1
);
$proj
->
AddLibrary
(
$self
->
{
options
}
->
{
openssl
}
.
'
\
lib
\
VC
\
libeay32.lib
',
1
);
$proj
->
AddLibrary
(
$self
->
{
options
}
->
{
openssl
}
.
'
\
lib
\
VC
\
libeay32.lib
',
1
);
}
}
if
(
$self
->
{
options
}
->
{
nls
})
{
if
(
$self
->
{
options
}
->
{
nls
})
{
$proj
->
AddIncludeDir
(
$self
->
{
options
}
->
{
nls
}
.
'
\
include
');
$proj
->
AddIncludeDir
(
$self
->
{
options
}
->
{
nls
}
.
'
\
include
');
$proj
->
AddLibrary
(
$self
->
{
options
}
->
{
nls
}
.
'
\
lib
\
intl.lib
');
$proj
->
AddLibrary
(
$self
->
{
options
}
->
{
nls
}
.
'
\
lib
\
intl.lib
');
}
}
if
(
$self
->
{
options
}
->
{
krb5
})
{
if
(
$self
->
{
options
}
->
{
krb5
})
{
$proj
->
AddIncludeDir
(
$self
->
{
options
}
->
{
krb5
}
.
'
\
inc
\
krb5
');
$proj
->
AddIncludeDir
(
$self
->
{
options
}
->
{
krb5
}
.
'
\
inc
\
krb5
');
$proj
->
AddLibrary
(
$self
->
{
options
}
->
{
krb5
}
.
'
\
lib
\
i386
\
krb5_32.lib
');
$proj
->
AddLibrary
(
$self
->
{
options
}
->
{
krb5
}
.
'
\
lib
\
i386
\
krb5_32.lib
');
$proj
->
AddLibrary
(
$self
->
{
options
}
->
{
krb5
}
.
'
\
lib
\
i386
\
comerr32.lib
');
$proj
->
AddLibrary
(
$self
->
{
options
}
->
{
krb5
}
.
'
\
lib
\
i386
\
comerr32.lib
');
}
}
if
(
$self
->
{
options
}
->
{
xml
})
{
if
(
$self
->
{
options
}
->
{
xml
})
{
$proj
->
AddIncludeDir
(
$self
->
{
options
}
->
{
xml
}
.
'
\
include
');
$proj
->
AddIncludeDir
(
$self
->
{
options
}
->
{
xml
}
.
'
\
include
');
$proj
->
AddIncludeDir
(
$self
->
{
options
}
->
{
iconv
}
.
'
\
include
');
$proj
->
AddIncludeDir
(
$self
->
{
options
}
->
{
iconv
}
.
'
\
include
');
$proj
->
AddLibrary
(
$self
->
{
options
}
->
{
xml
}
.
'
\
lib
\
libxml2.lib
');
$proj
->
AddLibrary
(
$self
->
{
options
}
->
{
xml
}
.
'
\
lib
\
libxml2.lib
');
...
@@ -270,13 +318,16 @@ sub AddProject {
...
@@ -270,13 +318,16 @@ sub AddProject {
return
$proj
;
return
$proj
;
}
}
sub
Save
{
sub
Save
{
my
(
$self
)
=
@_
;
my
(
$self
)
=
@_
;
my
%
flduid
;
my
%
flduid
;
$self
->
GenerateFiles
();
$self
->
GenerateFiles
();
foreach
my
$fld
(
keys
%
{
$self
->
{
projects
}})
{
foreach
my
$fld
(
keys
%
{
$self
->
{
projects
}})
foreach
my
$proj
(
@
{
$self
->
{
projects
}
->
{
$fld
}})
{
{
foreach
my
$proj
(
@
{
$self
->
{
projects
}
->
{
$fld
}})
{
$proj
->
Save
();
$proj
->
Save
();
}
}
}
}
...
@@ -287,14 +338,17 @@ Microsoft Visual Studio Solution File, Format Version 9.00
...
@@ -287,14 +338,17 @@ Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
# Visual Studio 2005
EOF
EOF
foreach
my
$fld
(
keys
%
{
$self
->
{
projects
}})
{
foreach
my
$fld
(
keys
%
{
$self
->
{
projects
}})
foreach
my
$proj
(
@
{
$self
->
{
projects
}
->
{
$fld
}})
{
{
foreach
my
$proj
(
@
{
$self
->
{
projects
}
->
{
$fld
}})
{
print
SLN
<<EOF;
print
SLN
<<EOF;
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "$proj->{name}", "$proj->{name}.vcproj", "$proj->{guid}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "$proj->{name}", "$proj->{name}.vcproj", "$proj->{guid}"
EndProject
EndProject
EOF
EOF
}
}
if
(
$fld
ne
"")
{
if
(
$fld
ne
"")
{
$flduid
{
$fld
}
=
Win32::
GuidGen
();
$flduid
{
$fld
}
=
Win32::
GuidGen
();
print
SLN
<<EOF;
print
SLN
<<EOF;
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "$fld", "$fld", "$flduid{$fld}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "$fld", "$fld", "$flduid{$fld}"
...
@@ -312,8 +366,10 @@ Global
...
@@ -312,8 +366,10 @@ Global
GlobalSection(ProjectConfigurationPlatforms) = postSolution
GlobalSection(ProjectConfigurationPlatforms) = postSolution
EOF
EOF
foreach
my
$fld
(
keys
%
{
$self
->
{
projects
}})
{
foreach
my
$fld
(
keys
%
{
$self
->
{
projects
}})
foreach
my
$proj
(
@
{
$self
->
{
projects
}
->
{
$fld
}})
{
{
foreach
my
$proj
(
@
{
$self
->
{
projects
}
->
{
$fld
}})
{
print
SLN
<<EOF;
print
SLN
<<EOF;
$proj->{guid}.Debug|Win32.ActiveCfg = Debug|Win32
$proj->{guid}.Debug|Win32.ActiveCfg = Debug|Win32
$proj->{guid}.Debug|Win32.Build.0 = Debug|Win32
$proj->{guid}.Debug|Win32.Build.0 = Debug|Win32
...
@@ -331,9 +387,11 @@ EOF
...
@@ -331,9 +387,11 @@ EOF
GlobalSection(NestedProjects) = preSolution
GlobalSection(NestedProjects) = preSolution
EOF
EOF
foreach
my
$fld
(
keys
%
{
$self
->
{
projects
}})
{
foreach
my
$fld
(
keys
%
{
$self
->
{
projects
}})
{
next
if
(
$fld
eq
"");
next
if
(
$fld
eq
"");
foreach
my
$proj
(
@
{
$self
->
{
projects
}
->
{
$fld
}})
{
foreach
my
$proj
(
@
{
$self
->
{
projects
}
->
{
$fld
}})
{
print
SLN
"
\t\t
$proj
->{guid} =
$flduid
{
$fld
}
\n
";
print
SLN
"
\t\t
$proj
->{guid} =
$flduid
{
$fld
}
\n
";
}
}
}
}
...
...
src/tools/msvc/config.pl
View file @
eee22892
src/tools/msvc/genbki.pl
View file @
eee22892
...
@@ -11,7 +11,7 @@
...
@@ -11,7 +11,7 @@
#
#
#
#
# IDENTIFICATION
# IDENTIFICATION
# $PostgreSQL: pgsql/src/tools/msvc/genbki.pl,v 1.
4 2007/02/19 14:05:42
mha Exp $
# $PostgreSQL: pgsql/src/tools/msvc/genbki.pl,v 1.
5 2007/03/12 19:10:50
mha Exp $
#
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
...
@@ -25,19 +25,23 @@ $version =~ /^(\d+\.\d+)/ || die "Bad format verison $version\n";
...
@@ -25,19 +25,23 @@ $version =~ /^(\d+\.\d+)/ || die "Bad format verison $version\n";
my
$majorversion
=
$1
;
my
$majorversion
=
$1
;
my
$pgext
=
read_file
("
src/include/pg_config_manual.h
");
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
";
$pgext
=~
/^#define\s+NAMEDATALEN\s+(\d+)$/mg
||
die
"
Could not read NAMEDATALEN from pg_config_manual.h
\n
";
my
$namedatalen
=
$1
;
my
$namedatalen
=
$1
;
my
$pgauthid
=
read_file
("
src/include/catalog/pg_authid.h
");
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
";
$pgauthid
=~
/^#define\s+BOOTSTRAP_SUPERUSERID\s+(\d+)$/mg
||
die
"
Could not read BOOTSTRAUP_SUPERUSERID from pg_authid.h
\n
";
my
$bootstrapsuperuserid
=
$1
;
my
$bootstrapsuperuserid
=
$1
;
my
$pgnamespace
=
read_file
("
src/include/catalog/pg_namespace.h
");
my
$pgnamespace
=
read_file
("
src/include/catalog/pg_namespace.h
");
$pgnamespace
=~
/^#define\s+PG_CATALOG_NAMESPACE\s+(\d+)$/mg
||
die
"
Could not read PG_CATALOG_NAMESPACE from pg_namespace.h
\n
";
$pgnamespace
=~
/^#define\s+PG_CATALOG_NAMESPACE\s+(\d+)$/mg
||
die
"
Could not read PG_CATALOG_NAMESPACE from pg_namespace.h
\n
";
my
$pgcatalognamespace
=
$1
;
my
$pgcatalognamespace
=
$1
;
my
$indata
=
"";
my
$indata
=
"";
while
(
my
$f
=
shift
)
{
while
(
my
$f
=
shift
)
{
$indata
.=
read_file
(
$f
);
$indata
.=
read_file
(
$f
);
$indata
.=
"
\n
";
$indata
.=
"
\n
";
}
}
...
@@ -73,31 +77,42 @@ my $nc = 0;
...
@@ -73,31 +77,42 @@ my $nc = 0;
my
$inside
=
0
;
my
$inside
=
0
;
my
@attr
;
my
@attr
;
my
@types
;
my
@types
;
foreach
my
$line
(
split
/\n/
,
$indata
)
{
if
(
$line
=~
/^DATA\((.*)\)$/m
)
{
foreach
my
$line
(
split
/\n/
,
$indata
)
{
if
(
$line
=~
/^DATA\((.*)\)$/m
)
{
my
$data
=
$1
;
my
$data
=
$1
;
my
@fields
=
split
/\s+/
,
$data
;
my
@fields
=
split
/\s+/
,
$data
;
if
(
$#fields
>=
4
&&
$fields
[
0
]
eq
"
insert
"
&&
$fields
[
1
]
eq
"
OID
"
&&
$fields
[
2
]
eq
"
=
")
{
if
(
$#fields
>=
4
&&
$fields
[
0
]
eq
"
insert
"
&&
$fields
[
1
]
eq
"
OID
"
&&
$fields
[
2
]
eq
"
=
")
{
$oid
=
$fields
[
3
];
$oid
=
$fields
[
3
];
}
}
else
{
else
{
$oid
=
0
;
$oid
=
0
;
}
}
$data
=~
s/\s{2,}/ /g
;
$data
=~
s/\s{2,}/ /g
;
$bki
.=
$data
.
"
\n
";
$bki
.=
$data
.
"
\n
";
}
}
elsif
(
$line
=~
/^DESCR\("(.*)"\)$/m
){
elsif
(
$line
=~
/^DESCR\("(.*)"\)$/m
)
if
(
$oid
!=
0
)
{
{
if
(
$oid
!=
0
)
{
$desc
.=
sprintf
("
%d
\t
%s
\t
0
\t
%s
\n
",
$oid
,
$catalog
,
$1
);
$desc
.=
sprintf
("
%d
\t
%s
\t
0
\t
%s
\n
",
$oid
,
$catalog
,
$1
);
}
}
}
}
elsif
(
$line
=~
/^SHDESCR\("(.*)"\)$/m
)
{
elsif
(
$line
=~
/^SHDESCR\("(.*)"\)$/m
)
if
(
$oid
!=
0
)
{
{
if
(
$oid
!=
0
)
{
$shdesc
.=
sprintf
("
%d
\t
%s
\t
%s
\n
",
$oid
,
$catalog
,
$1
);
$shdesc
.=
sprintf
("
%d
\t
%s
\t
%s
\n
",
$oid
,
$catalog
,
$1
);
}
}
}
}
elsif
(
$line
=~
/^DECLARE_(UNIQUE_)?INDEX\((.*)\)$/m
)
{
elsif
(
$line
=~
/^DECLARE_(UNIQUE_)?INDEX\((.*)\)$/m
)
if
(
$reln_open
)
{
{
if
(
$reln_open
)
{
$bki
.=
"
close
$catalog
\n
";
$bki
.=
"
close
$catalog
\n
";
$reln_open
=
0
;
$reln_open
=
0
;
}
}
...
@@ -106,19 +121,24 @@ foreach my $line (split /\n/, $indata) {
...
@@ -106,19 +121,24 @@ foreach my $line (split /\n/, $indata) {
$fields
[
2
]
=~
s/\s{2,}/ /g
;
$fields
[
2
]
=~
s/\s{2,}/ /g
;
$bki
.=
"
declare
$u
index
$fields
[0]
$fields
[1]
$fields
[2]
\n
";
$bki
.=
"
declare
$u
index
$fields
[0]
$fields
[1]
$fields
[2]
\n
";
}
}
elsif
(
$line
=~
/^DECLARE_TOAST\((.*)\)$/m
)
{
elsif
(
$line
=~
/^DECLARE_TOAST\((.*)\)$/m
)
if
(
$reln_open
)
{
{
if
(
$reln_open
)
{
$bki
.=
"
close
$catalog
\n
";
$bki
.=
"
close
$catalog
\n
";
$reln_open
=
0
;
$reln_open
=
0
;
}
}
my
@fields
=
split
/,/
,
$1
;
my
@fields
=
split
/,/
,
$1
;
$bki
.=
"
declare toast
$fields
[1]
$fields
[2] on
$fields
[0]
\n
";
$bki
.=
"
declare toast
$fields
[1]
$fields
[2] on
$fields
[0]
\n
";
}
}
elsif
(
$line
=~
/^BUILD_INDICES/
)
{
elsif
(
$line
=~
/^BUILD_INDICES/
)
{
$bki
.=
"
build indices
\n
";
$bki
.=
"
build indices
\n
";
}
}
elsif
(
$line
=~
/^CATALOG\((.*)\)(.*)$/m
)
{
elsif
(
$line
=~
/^CATALOG\((.*)\)(.*)$/m
)
if
(
$reln_open
)
{
{
if
(
$reln_open
)
{
$bki
.=
"
close
$catalog
\n
";
$bki
.=
"
close
$catalog
\n
";
$reln_open
=
0
;
$reln_open
=
0
;
}
}
...
@@ -127,29 +147,39 @@ foreach my $line (split /\n/, $indata) {
...
@@ -127,29 +147,39 @@ foreach my $line (split /\n/, $indata) {
$catalog
=
$fields
[
0
];
$catalog
=
$fields
[
0
];
$oid
=
$fields
[
1
];
$oid
=
$fields
[
1
];
$bootstrap
=
$shared_relation
=
$without_oids
=
"";
$bootstrap
=
$shared_relation
=
$without_oids
=
"";
if
(
$rest
=~
/BKI_BOOTSTRAP/
)
{
if
(
$rest
=~
/BKI_BOOTSTRAP/
)
{
$bootstrap
=
"
bootstrap
";
$bootstrap
=
"
bootstrap
";
}
}
if
(
$rest
=~
/BKI_SHARED_RELATION/
)
{
if
(
$rest
=~
/BKI_SHARED_RELATION/
)
{
$shared_relation
=
"
shared_relation
";
$shared_relation
=
"
shared_relation
";
}
}
if
(
$rest
=~
/BKI_WITHOUT_OIDS/
)
{
if
(
$rest
=~
/BKI_WITHOUT_OIDS/
)
{
$without_oids
=
"
without_oids
";
$without_oids
=
"
without_oids
";
}
}
$nc
++
;
$nc
++
;
$inside
=
1
;
$inside
=
1
;
next
;
next
;
}
}
if
(
$inside
==
1
)
{
if
(
$inside
==
1
)
{
next
if
(
$line
=~
/{/
);
next
if
(
$line
=~
/{/
);
if
(
$line
=~
/}/
)
{
if
(
$line
=~
/}/
)
# Last line
{
# Last line
$bki
.=
"
create
$bootstrap$shared_relation$without_oids$catalog
$oid
\n
(
\n
";
$bki
.=
"
create
$bootstrap$shared_relation$without_oids$catalog
$oid
\n
(
\n
";
my
$first
=
1
;
my
$first
=
1
;
for
(
my
$i
=
0
;
$i
<=
$#attr
;
$i
++
)
{
for
(
my
$i
=
0
;
$i
<=
$#attr
;
$i
++
)
if
(
$first
==
1
)
{
{
if
(
$first
==
1
)
{
$first
=
0
;
$first
=
0
;
}
else
{
}
else
{
$bki
.=
"
,
\n
";
$bki
.=
"
,
\n
";
}
}
$bki
.=
"
"
.
$attr
[
$i
]
.
"
=
"
.
$types
[
$i
];
$bki
.=
"
"
.
$attr
[
$i
]
.
"
=
"
.
$types
[
$i
];
...
@@ -159,25 +189,30 @@ foreach my $line (split /\n/, $indata) {
...
@@ -159,25 +189,30 @@ foreach my $line (split /\n/, $indata) {
undef
(
@types
);
undef
(
@types
);
$reln_open
=
1
;
$reln_open
=
1
;
$inside
=
0
;
$inside
=
0
;
if
(
$bootstrap
eq
"")
{
if
(
$bootstrap
eq
"")
{
$bki
.=
"
open
$catalog
\n
";
$bki
.=
"
open
$catalog
\n
";
}
}
next
;
next
;
}
}
# inside catalog definition, so keep sucking up attributes
# inside catalog definition, so keep sucking up attributes
my
@fields
=
split
/\s+/
,
$line
;
my
@fields
=
split
/\s+/
,
$line
;
if
(
$fields
[
1
]
=~
/(.*)\[.*\]/
)
{
#Array attribute
if
(
$fields
[
1
]
=~
/(.*)\[.*\]/
)
{
#Array attribute
push
@attr
,
$1
;
push
@attr
,
$1
;
push
@types
,
$fields
[
0
]
.
'
[]
';
push
@types
,
$fields
[
0
]
.
'
[]
';
}
}
else
{
else
{
push
@attr
,
$fields
[
1
];
push
@attr
,
$fields
[
1
];
push
@types
,
$fields
[
0
];
push
@types
,
$fields
[
0
];
}
}
next
;
next
;
}
}
}
}
if
(
$reln_open
==
1
)
{
if
(
$reln_open
==
1
)
{
$bki
.=
"
close
$catalog
\n
";
$bki
.=
"
close
$catalog
\n
";
}
}
...
@@ -192,12 +227,14 @@ open(O,">$prefix.shdescription") || die "Could not write $prefix.shdescription\n
...
@@ -192,12 +227,14 @@ open(O,">$prefix.shdescription") || die "Could not write $prefix.shdescription\n
print
O
$shdesc
;
print
O
$shdesc
;
close
(
O
);
close
(
O
);
sub
Usage
{
sub
Usage
{
print
"
Usage: genbki.pl <version> <prefix> <input1> [<input2> <input3>...]
\n
";
print
"
Usage: genbki.pl <version> <prefix> <input1> [<input2> <input3>...]
\n
";
exit
(
1
);
exit
(
1
);
}
}
sub
read_file
{
sub
read_file
{
my
$filename
=
shift
;
my
$filename
=
shift
;
my
$F
;
my
$F
;
my
$t
=
$/
;
my
$t
=
$/
;
...
...
src/tools/msvc/gendef.pl
View file @
eee22892
...
@@ -3,21 +3,24 @@ my @def;
...
@@ -3,21 +3,24 @@ my @def;
die
"
Usage: gendef.pl <modulepath>
\n
"
unless
(
$ARGV
[
0
]
=~
/\\([^\\]+$)/
);
die
"
Usage: gendef.pl <modulepath>
\n
"
unless
(
$ARGV
[
0
]
=~
/\\([^\\]+$)/
);
my
$defname
=
uc
$1
;
my
$defname
=
uc
$1
;
if
(
-
f
"
$ARGV
[0]/
$defname
.def
")
{
if
(
-
f
"
$ARGV
[0]/
$defname
.def
")
{
print
"
Not re-generating
$defname
.DEF, file already exists.
\n
";
print
"
Not re-generating
$defname
.DEF, file already exists.
\n
";
exit
(
0
);
exit
(
0
);
}
}
print
"
Generating
$defname
.DEF from directory
$ARGV
[0]
\n
";
print
"
Generating
$defname
.DEF from directory
$ARGV
[0]
\n
";
while
(
<
$ARGV
[
0
]
/*.
obj
>
)
{
while
(
<
$ARGV
[
0
]
/*.
obj
>
)
{
print
"
.
";
print
"
.
";
system
("
dumpbin /symbols /out:symbols.out
$_
>NUL
")
&&
die
"
Could not call dumpbin
";
system
("
dumpbin /symbols /out:symbols.out
$_
>NUL
")
&&
die
"
Could not call dumpbin
";
open
(
F
,
"
<symbols.out
")
||
die
"
Could not open symbols.out for
$_
\n
";
open
(
F
,
"
<symbols.out
")
||
die
"
Could not open symbols.out for
$_
\n
";
while
(
<
F
>
)
{
while
(
<
F
>
)
{
s/\(\)//g
;
s/\(\)//g
;
next
unless
/^\d/
;
next
unless
/^\d/
;
my
@pieces
=
split
;
my
@pieces
=
split
;
next
unless
$pieces
[
6
];
next
unless
$pieces
[
6
];
next
if
(
$pieces
[
2
]
eq
"
UNDEF
");
next
if
(
$pieces
[
2
]
eq
"
UNDEF
");
next
unless
(
$pieces
[
4
]
eq
"
External
");
next
unless
(
$pieces
[
4
]
eq
"
External
");
...
@@ -40,12 +43,14 @@ open(DEF,">$ARGV[0]/$defname.def") || die "Could not write to $defname\n";
...
@@ -40,12 +43,14 @@ open(DEF,">$ARGV[0]/$defname.def") || die "Could not write to $defname\n";
print
DEF
"
EXPORTS
\n
";
print
DEF
"
EXPORTS
\n
";
my
$i
=
0
;
my
$i
=
0
;
my
$last
=
"";
my
$last
=
"";
foreach
my
$f
(
sort
@def
)
{
foreach
my
$f
(
sort
@def
)
{
next
if
(
$f
eq
$last
);
next
if
(
$f
eq
$last
);
$last
=
$f
;
$last
=
$f
;
$f
=~
s/^_//
;
$f
=~
s/^_//
;
$i
++
;
$i
++
;
# print DEF " $f \@ $i\n"; # ordinaled exports?
# print DEF " $f \@ $i\n"; # ordinaled exports?
print
DEF
"
$f
\n
";
print
DEF
"
$f
\n
";
}
}
close
(
DEF
);
close
(
DEF
);
...
...
src/tools/msvc/install.pl
View file @
eee22892
...
@@ -10,56 +10,76 @@ my $target = shift || Usage();
...
@@ -10,56 +10,76 @@ my $target = shift || Usage();
chdir
("
../../..
")
if
(
-
f
"
../../../configure
");
chdir
("
../../..
")
if
(
-
f
"
../../../configure
");
my
$conf
=
"";
my
$conf
=
"";
if
(
-
d
"
debug
")
{
if
(
-
d
"
debug
")
{
$conf
=
"
debug
";
$conf
=
"
debug
";
}
}
if
(
-
d
"
release
")
{
if
(
-
d
"
release
")
{
$conf
=
"
release
";
$conf
=
"
release
";
}
}
die
"
Could not find debug or release binaries
"
if
(
$conf
eq
"");
die
"
Could not find debug or release binaries
"
if
(
$conf
eq
"");
print
"
Installing for
$conf
\n
";
print
"
Installing for
$conf
\n
";
EnsureDirectories
('
bin
','
lib
','
share
','
share/timezonesets
');
EnsureDirectories
('
bin
','
lib
','
share
','
share/timezonesets
');
CopySolutionOutput
(
$conf
,
$target
);
CopySolutionOutput
(
$conf
,
$target
);
copy
(
$target
.
'
/lib/libpq.dll
',
$target
.
'
/bin/libpq.dll
');
copy
(
$target
.
'
/lib/libpq.dll
',
$target
.
'
/bin/libpq.dll
');
CopySetOfFiles
('
config files
',
"
*.sample
",
$target
.
'
/share/
');
CopySetOfFiles
('
config files
',
"
*.sample
",
$target
.
'
/share/
');
CopySetOfFiles
('
timezone names
',
'
src
\
timezone
\
tznames
\
*.txt
',
$target
.
'
/share/timezonesets/
');
CopySetOfFiles
('
timezone names
',
'
src
\
timezone
\
tznames
\
*.txt
',
$target
.
'
/share/timezonesets/
');
CopyFiles
('
timezone sets
',
$target
.
'
/share/timezonesets/
',
'
src/timezone/tznames/
',
'
Default
','
Australia
','
India
');
CopyFiles
(
'
timezone sets
',
$target
.
'
/share/timezonesets/
',
'
src/timezone/tznames/
',
'
Default
','
Australia
','
India
'
);
CopySetOfFiles
('
BKI files
',
"
src
\\
backend
\\
catalog
\\
postgres.*
",
$target
.
'
/share/
');
CopySetOfFiles
('
BKI files
',
"
src
\\
backend
\\
catalog
\\
postgres.*
",
$target
.
'
/share/
');
CopySetOfFiles
('
SQL files
',
"
src
\\
backend
\\
catalog
\\
*.sql
",
$target
.
'
/share/
');
CopySetOfFiles
('
SQL files
',
"
src
\\
backend
\\
catalog
\\
*.sql
",
$target
.
'
/share/
');
CopyFiles
('
Information schema data
',
$target
.
'
/share/
',
'
src/backend/catalog/
',
'
sql_features.txt
');
CopyFiles
(
'
Information schema data
',
$target
.
'
/share/
',
'
src/backend/catalog/
',
'
sql_features.txt
'
);
GenerateConversionScript
();
GenerateConversionScript
();
GenerateTimezoneFiles
();
GenerateTimezoneFiles
();
sub
Usage
{
sub
Usage
{
print
"
Usage: install.pl <targetdir>
\n
";
print
"
Usage: install.pl <targetdir>
\n
";
exit
(
1
);
exit
(
1
);
}
}
sub
EnsureDirectories
{
sub
EnsureDirectories
{
mkdir
$target
unless
-
d
(
$target
);
mkdir
$target
unless
-
d
(
$target
);
while
(
my
$d
=
shift
)
{
while
(
my
$d
=
shift
)
{
mkdir
$target
.
'
/
'
.
$d
unless
-
d
(
$target
.
'
/
'
.
$d
);
mkdir
$target
.
'
/
'
.
$d
unless
-
d
(
$target
.
'
/
'
.
$d
);
}
}
}
}
sub
CopyFiles
{
sub
CopyFiles
{
my
$what
=
shift
;
my
$what
=
shift
;
my
$target
=
shift
;
my
$target
=
shift
;
my
$basedir
=
shift
;
my
$basedir
=
shift
;
print
"
Copying
$what
";
print
"
Copying
$what
";
while
(
my
$f
=
shift
)
{
while
(
my
$f
=
shift
)
{
print
"
.
";
print
"
.
";
$f
=
$basedir
.
$f
;
$f
=
$basedir
.
$f
;
die
"
No file
$f
\n
"
if
(
!
-
f
$f
);
die
"
No file
$f
\n
"
if
(
!-
f
$f
);
copy
(
$f
,
$target
.
basename
(
$f
))
||
croak
"
Could not copy
$f
to
$target
"
.
basename
(
$f
)
.
"
to
$target
"
.
basename
(
$f
)
.
"
\n
";
copy
(
$f
,
$target
.
basename
(
$f
))
||
croak
"
Could not copy
$f
to
$target
"
.
basename
(
$f
)
.
"
to
$target
"
.
basename
(
$f
)
.
"
\n
";
}
}
print
"
\n
";
print
"
\n
";
}
}
sub
CopySetOfFiles
{
sub
CopySetOfFiles
{
my
$what
=
shift
;
my
$what
=
shift
;
my
$spec
=
shift
;
my
$spec
=
shift
;
my
$target
=
shift
;
my
$target
=
shift
;
...
@@ -67,7 +87,8 @@ sub CopySetOfFiles {
...
@@ -67,7 +87,8 @@ sub CopySetOfFiles {
print
"
Copying
$what
";
print
"
Copying
$what
";
open
(
$D
,
"
dir /b /s
$spec
|
")
||
croak
"
Could not list
$spec
\n
";
open
(
$D
,
"
dir /b /s
$spec
|
")
||
croak
"
Could not list
$spec
\n
";
while
(
<
$D
>
)
{
while
(
<
$D
>
)
{
chomp
;
chomp
;
next
if
/regress/
;
# Skip temporary install in regression subdir
next
if
/regress/
;
# Skip temporary install in regression subdir
my
$tgt
=
$target
.
basename
(
$_
);
my
$tgt
=
$target
.
basename
(
$_
);
...
@@ -78,14 +99,16 @@ sub CopySetOfFiles {
...
@@ -78,14 +99,16 @@ sub CopySetOfFiles {
print
"
\n
";
print
"
\n
";
}
}
sub
CopySolutionOutput
{
sub
CopySolutionOutput
{
my
$conf
=
shift
;
my
$conf
=
shift
;
my
$target
=
shift
;
my
$target
=
shift
;
my
$rem
=
qr{Project\("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"\) = "([^"]+)"}
;
my
$rem
=
qr{Project\("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"\) = "([^"]+)"}
;
my
$sln
=
read_file
("
pgsql.sln
")
||
croak
"
Could not open pgsql.sln
\n
";
my
$sln
=
read_file
("
pgsql.sln
")
||
croak
"
Could not open pgsql.sln
\n
";
print
"
Copying build output files...
";
print
"
Copying build output files...
";
while
(
$sln
=~
$rem
)
{
while
(
$sln
=~
$rem
)
{
my
$pf
=
$1
;
my
$pf
=
$1
;
my
$dir
;
my
$dir
;
my
$ext
;
my
$ext
;
...
@@ -93,18 +116,23 @@ sub CopySolutionOutput {
...
@@ -93,18 +116,23 @@ sub CopySolutionOutput {
$sln
=~
s/$rem//
;
$sln
=~
s/$rem//
;
my
$proj
=
read_file
("
$pf
.vcproj
")
||
croak
"
Could not open
$pf
.vcproj
\n
";
my
$proj
=
read_file
("
$pf
.vcproj
")
||
croak
"
Could not open
$pf
.vcproj
\n
";
if
(
$proj
!~
qr{ConfigurationType="([^"]+)"}
)
{
if
(
$proj
!~
qr{ConfigurationType="([^"]+)"}
)
{
croak
"
Could not parse
$pf
.vcproj
\n
";
croak
"
Could not parse
$pf
.vcproj
\n
";
}
}
if
(
$1
==
1
)
{
if
(
$1
==
1
)
{
$dir
=
"
bin
";
$dir
=
"
bin
";
$ext
=
"
exe
";
$ext
=
"
exe
";
}
}
elsif
(
$1
==
2
)
{
elsif
(
$1
==
2
)
{
$dir
=
"
lib
";
$dir
=
"
lib
";
$ext
=
"
dll
";
$ext
=
"
dll
";
}
}
else
{
else
{
# Static lib, such as libpgport, only used internally during build, don't install
# Static lib, such as libpgport, only used internally during build, don't install
next
;
next
;
}
}
...
@@ -114,33 +142,39 @@ sub CopySolutionOutput {
...
@@ -114,33 +142,39 @@ sub CopySolutionOutput {
print
"
\n
";
print
"
\n
";
}
}
sub
GenerateConversionScript
{
sub
GenerateConversionScript
{
my
$sql
=
"";
my
$sql
=
"";
my
$F
;
my
$F
;
print
"
Generating conversion proc script...
";
print
"
Generating conversion proc script...
";
my
$mf
=
read_file
('
src/backend/utils/mb/conversion_procs/Makefile
');
my
$mf
=
read_file
('
src/backend/utils/mb/conversion_procs/Makefile
');
$mf
=~
s{\\\s*[\r\n]+}{}mg
;
$mf
=~
s{\\\s*[\r\n]+}{}mg
;
$mf
=~
/^CONVERSIONS\s*=\s*(.*)$/m
||
die
"
Could not find CONVERSIONS line in conversions Makefile
\n
";
$mf
=~
/^CONVERSIONS\s*=\s*(.*)$/m
||
die
"
Could not find CONVERSIONS line in conversions Makefile
\n
";
my
@pieces
=
split
/\s+/
,
$1
;
my
@pieces
=
split
/\s+/
,
$1
;
while
(
$#pieces
>
0
)
{
while
(
$#pieces
>
0
)
{
my
$name
=
shift
@pieces
;
my
$name
=
shift
@pieces
;
my
$se
=
shift
@pieces
;
my
$se
=
shift
@pieces
;
my
$de
=
shift
@pieces
;
my
$de
=
shift
@pieces
;
my
$func
=
shift
@pieces
;
my
$func
=
shift
@pieces
;
my
$obj
=
shift
@pieces
;
my
$obj
=
shift
@pieces
;
$sql
.=
"
--
$se
-->
$de
\n
";
$sql
.=
"
--
$se
-->
$de
\n
";
$sql
.=
"
CREATE OR REPLACE FUNCTION
$func
(INTEGER, INTEGER, CSTRING, INTERNAL, INTEGER) RETURNS VOID AS '
\
$libdir
/
$obj
', '
$func
' LANGUAGE C STRICT;
\n
";
$sql
.=
"
CREATE OR REPLACE FUNCTION
$func
(INTEGER, INTEGER, CSTRING, INTERNAL, INTEGER) RETURNS VOID AS '
\
$libdir
/
$obj
', '
$func
' LANGUAGE C STRICT;
\n
";
$sql
.=
"
DROP CONVERSION pg_catalog.
$name
;
\n
";
$sql
.=
"
DROP CONVERSION pg_catalog.
$name
;
\n
";
$sql
.=
"
CREATE DEFAULT CONVERSION pg_catalog.
$name
FOR '
$se
' TO '
$de
' FROM
$func
;
\n
";
$sql
.=
"
CREATE DEFAULT CONVERSION pg_catalog.
$name
FOR '
$se
' TO '
$de
' FROM
$func
;
\n
";
}
}
open
(
$F
,"
>
$target
/share/conversion_create.sql
")
||
die
"
Could not write to conversion_create.sql
\n
";
open
(
$F
,"
>
$target
/share/conversion_create.sql
")
||
die
"
Could not write to conversion_create.sql
\n
";
print
$F
$sql
;
print
$F
$sql
;
close
(
$F
);
close
(
$F
);
print
"
\n
";
print
"
\n
";
}
}
sub
GenerateTimezoneFiles
{
sub
GenerateTimezoneFiles
{
my
$mf
=
read_file
("
src/timezone/Makefile
");
my
$mf
=
read_file
("
src/timezone/Makefile
");
$mf
=~
s{\\\s*[\r\n]+}{}mg
;
$mf
=~
s{\\\s*[\r\n]+}{}mg
;
$mf
=~
/^TZDATA\s*:?=\s*(.*)$/m
||
die
"
Could not find TZDATA row in timezone makefile
\n
";
$mf
=~
/^TZDATA\s*:?=\s*(.*)$/m
||
die
"
Could not find TZDATA row in timezone makefile
\n
";
...
@@ -151,8 +185,8 @@ sub GenerateTimezoneFiles {
...
@@ -151,8 +185,8 @@ sub GenerateTimezoneFiles {
print
"
\n
";
print
"
\n
";
}
}
sub
read_file
sub
read_file
{
{
my
$filename
=
shift
;
my
$filename
=
shift
;
my
$F
;
my
$F
;
my
$t
=
$/
;
my
$t
=
$/
;
...
...
src/tools/msvc/mkvcbuild.pl
View file @
eee22892
...
@@ -46,14 +46,22 @@ my $plpgsql = $solution->AddProject('plpgsql','dll','PLs','src\pl\plpgsql\src');
...
@@ -46,14 +46,22 @@ my $plpgsql = $solution->AddProject('plpgsql','dll','PLs','src\pl\plpgsql\src');
$plpgsql
->
AddFiles
('
src
\
pl
\
plpgsql
\
src
','
scan.l
','
gram.y
');
$plpgsql
->
AddFiles
('
src
\
pl
\
plpgsql
\
src
','
scan.l
','
gram.y
');
$plpgsql
->
AddReference
(
$postgres
);
$plpgsql
->
AddReference
(
$postgres
);
if
(
$solution
->
{
options
}
->
{
perl
})
{
if
(
$solution
->
{
options
}
->
{
perl
})
{
my
$plperl
=
$solution
->
AddProject
('
plperl
','
dll
','
PLs
','
src
\
pl
\
plperl
');
my
$plperl
=
$solution
->
AddProject
('
plperl
','
dll
','
PLs
','
src
\
pl
\
plperl
');
$plperl
->
AddIncludeDir
(
$solution
->
{
options
}
->
{
perl
}
.
'
/lib/CORE
');
$plperl
->
AddIncludeDir
(
$solution
->
{
options
}
->
{
perl
}
.
'
/lib/CORE
');
$plperl
->
AddDefine
('
PLPERL_HAVE_UID_GID
');
$plperl
->
AddDefine
('
PLPERL_HAVE_UID_GID
');
if
(
Solution::
IsNewer
('
src
\
pl
\
plperl
\
SPI.c
','
src
\
pl
\
plperl
\
SPI.xs
'))
{
if
(
Solution::
IsNewer
('
src
\
pl
\
plperl
\
SPI.c
','
src
\
pl
\
plperl
\
SPI.xs
'))
{
print
'
Building src
\
pl
\
plperl
\
SPI.c...
'
.
"
\n
";
print
'
Building src
\
pl
\
plperl
\
SPI.c...
'
.
"
\n
";
system
(
$solution
->
{
options
}
->
{
perl
}
.
'
/bin/perl
'
.
$solution
->
{
options
}
->
{
perl
}
.
'
/lib/ExtUtils/xsubpp -typemap
'
.
$solution
->
{
options
}
->
{
perl
}
.
'
/lib/ExtUtils/typemap src
\
pl
\
plperl
\
SPI.xs >src
\
pl
\
plperl
\
SPI.c
');
system
(
$solution
->
{
options
}
->
{
perl
}
if
((
!
(
-
f
'
src
\
pl
\
plperl
\
SPI.c
'))
||
-
z
'
src
\
pl
\
plperl
\
SPI.c
')
{
.
'
/bin/perl
'
.
$solution
->
{
options
}
->
{
perl
}
.
'
/lib/ExtUtils/xsubpp -typemap
'
.
$solution
->
{
options
}
->
{
perl
}
.
'
/lib/ExtUtils/typemap src
\
pl
\
plperl
\
SPI.xs >src
\
pl
\
plperl
\
SPI.c
');
if
((
!
(
-
f
'
src
\
pl
\
plperl
\
SPI.c
'))
||
-
z
'
src
\
pl
\
plperl
\
SPI.c
')
{
unlink
('
src
\
pl
\
plperl
\
SPI.c
');
# if zero size
unlink
('
src
\
pl
\
plperl
\
SPI.c
');
# if zero size
die
'
Failed to create SPI.c
'
.
"
\n
";
die
'
Failed to create SPI.c
'
.
"
\n
";
}
}
...
@@ -62,15 +70,18 @@ if ($solution->{options}->{perl}) {
...
@@ -62,15 +70,18 @@ if ($solution->{options}->{perl}) {
$plperl
->
AddLibrary
(
$solution
->
{
options
}
->
{
perl
}
.
'
\
lib
\
CORE
\
perl58.lib
');
$plperl
->
AddLibrary
(
$solution
->
{
options
}
->
{
perl
}
.
'
\
lib
\
CORE
\
perl58.lib
');
}
}
if
(
$solution
->
{
options
}
->
{
python
})
{
if
(
$solution
->
{
options
}
->
{
python
})
{
my
$plpython
=
$solution
->
AddProject
('
plpython
','
dll
','
PLs
','
src
\
pl
\
plpython
');
my
$plpython
=
$solution
->
AddProject
('
plpython
','
dll
','
PLs
','
src
\
pl
\
plpython
');
$plpython
->
AddIncludeDir
(
$solution
->
{
options
}
->
{
python
}
.
'
\
include
');
$plpython
->
AddIncludeDir
(
$solution
->
{
options
}
->
{
python
}
.
'
\
include
');
$solution
->
{
options
}
->
{
python
}
=~
/\\Python(\d{2})/i
||
croak
"
Could not determine python version from path
";
$solution
->
{
options
}
->
{
python
}
=~
/\\Python(\d{2})/i
||
croak
"
Could not determine python version from path
";
$plpython
->
AddLibrary
(
$solution
->
{
options
}
->
{
python
}
.
"
\\
Libs
\\
python$1.lib
");
$plpython
->
AddLibrary
(
$solution
->
{
options
}
->
{
python
}
.
"
\\
Libs
\\
python$1.lib
");
$plpython
->
AddReference
(
$postgres
);
$plpython
->
AddReference
(
$postgres
);
}
}
if
(
$solution
->
{
options
}
->
{
tcl
})
{
if
(
$solution
->
{
options
}
->
{
tcl
})
{
my
$pltcl
=
$solution
->
AddProject
('
pltcl
','
dll
','
PLs
','
src
\
pl
\
tcl
');
my
$pltcl
=
$solution
->
AddProject
('
pltcl
','
dll
','
PLs
','
src
\
pl
\
tcl
');
$pltcl
->
AddIncludeDir
(
$solution
->
{
options
}
->
{
tcl
}
.
'
\
include
');
$pltcl
->
AddIncludeDir
(
$solution
->
{
options
}
->
{
tcl
}
.
'
\
include
');
$pltcl
->
AddReference
(
$postgres
);
$pltcl
->
AddReference
(
$postgres
);
...
@@ -85,12 +96,14 @@ $libpq->AddLibrary('wldap32.lib') if ($solution->{options}->{ldap});
...
@@ -85,12 +96,14 @@ $libpq->AddLibrary('wldap32.lib') if ($solution->{options}->{ldap});
$libpq
->
UseDef
('
src
\
interfaces
\
libpq
\
libpqdll.def
');
$libpq
->
UseDef
('
src
\
interfaces
\
libpq
\
libpqdll.def
');
$libpq
->
ReplaceFile
('
src
\
interfaces
\
libpq
\
libpqrc.c
','
src
\
interfaces
\
libpq
\
libpq.rc
');
$libpq
->
ReplaceFile
('
src
\
interfaces
\
libpq
\
libpqrc.c
','
src
\
interfaces
\
libpq
\
libpq.rc
');
my
$pgtypes
=
$solution
->
AddProject
('
libpgtypes
','
dll
','
interfaces
','
src
\
interfaces
\
ecpg
\
pgtypeslib
');
my
$pgtypes
=
$solution
->
AddProject
('
libpgtypes
','
dll
','
interfaces
','
src
\
interfaces
\
ecpg
\
pgtypeslib
');
$pgtypes
->
AddDefine
('
FRONTEND
');
$pgtypes
->
AddDefine
('
FRONTEND
');
$pgtypes
->
AddReference
(
$postgres
,
$libpgport
);
$pgtypes
->
AddReference
(
$postgres
,
$libpgport
);
$pgtypes
->
AddIncludeDir
('
src
\
interfaces
\
ecpg
\
include
');
$pgtypes
->
AddIncludeDir
('
src
\
interfaces
\
ecpg
\
include
');
if
(
$config
->
{
pthread
})
{
if
(
$config
->
{
pthread
})
{
my
$libecpg
=
$solution
->
AddProject
('
libecpg
','
dll
','
interfaces
','
src
\
interfaces
\
ecpg
\
ecpglib
');
my
$libecpg
=
$solution
->
AddProject
('
libecpg
','
dll
','
interfaces
','
src
\
interfaces
\
ecpg
\
ecpglib
');
$libecpg
->
AddDefine
('
FRONTEND
');
$libecpg
->
AddDefine
('
FRONTEND
');
$libecpg
->
AddIncludeDir
('
src
\
interfaces
\
ecpg
\
include
');
$libecpg
->
AddIncludeDir
('
src
\
interfaces
\
ecpg
\
include
');
...
@@ -100,7 +113,8 @@ if ($config->{pthread}) {
...
@@ -100,7 +113,8 @@ if ($config->{pthread}) {
$libecpg
->
AddLibrary
(
$config
->
{'
pthread
'}
.
'
\
pthreadVC2.lib
');
$libecpg
->
AddLibrary
(
$config
->
{'
pthread
'}
.
'
\
pthreadVC2.lib
');
$libecpg
->
AddReference
(
$libpq
,
$pgtypes
);
$libecpg
->
AddReference
(
$libpq
,
$pgtypes
);
my
$libecpgcompat
=
$solution
->
AddProject
('
libecpg_compat
','
dll
','
interfaces
','
src
\
interfaces
\
ecpg
\
compatlib
');
my
$libecpgcompat
=
$solution
->
AddProject
('
libecpg_compat
','
dll
','
interfaces
','
src
\
interfaces
\
ecpg
\
compatlib
');
$libecpgcompat
->
AddIncludeDir
('
src
\
interfaces
\
ecpg
\
include
');
$libecpgcompat
->
AddIncludeDir
('
src
\
interfaces
\
ecpg
\
include
');
$libecpgcompat
->
AddIncludeDir
('
src
\
interfaces
\
libpq
');
$libecpgcompat
->
AddIncludeDir
('
src
\
interfaces
\
libpq
');
$libecpgcompat
->
AddReference
(
$pgtypes
,
$libecpg
);
$libecpgcompat
->
AddReference
(
$pgtypes
,
$libecpg
);
...
@@ -114,11 +128,11 @@ if ($config->{pthread}) {
...
@@ -114,11 +128,11 @@ if ($config->{pthread}) {
$ecpg
->
AddDefine
('
PATCHLEVEL=1
');
$ecpg
->
AddDefine
('
PATCHLEVEL=1
');
$ecpg
->
AddReference
(
$libpgport
);
$ecpg
->
AddReference
(
$libpgport
);
}
}
else
{
else
{
print
"
Not building ecpg due to lack of pthreads.
\n
";
print
"
Not building ecpg due to lack of pthreads.
\n
";
}
}
# src/bin
# src/bin
my
$initdb
=
AddSimpleFrontend
('
initdb
',
1
);
my
$initdb
=
AddSimpleFrontend
('
initdb
',
1
);
...
@@ -158,17 +172,11 @@ my $zic = $solution->AddProject('zic','exe','utils');
...
@@ -158,17 +172,11 @@ my $zic = $solution->AddProject('zic','exe','utils');
$zic
->
AddFiles
('
src
\
timezone
','
zic.c
','
ialloc.c
','
scheck.c
','
localtime.c
');
$zic
->
AddFiles
('
src
\
timezone
','
zic.c
','
ialloc.c
','
scheck.c
','
localtime.c
');
$zic
->
AddReference
(
$libpgport
);
$zic
->
AddReference
(
$libpgport
);
my
$contrib_defines
=
{
my
$contrib_defines
=
{'
refint
'
=>
'
REFINT_VERBOSE
'};
'
refint
'
=>
'
REFINT_VERBOSE
'
};
my
@contrib_uselibpq
=
('
dblink
',
'
oid2name
',
'
pgbench
',
'
vacuumlo
');
my
@contrib_uselibpq
=
('
dblink
',
'
oid2name
',
'
pgbench
',
'
vacuumlo
');
my
@contrib_uselibpgport
=
('
oid2name
',
'
pgbench
',
'
pg_standby
',
'
vacuumlo
');
my
@contrib_uselibpgport
=
('
oid2name
',
'
pgbench
',
'
pg_standby
',
'
vacuumlo
');
my
$contrib_extralibs
=
{
my
$contrib_extralibs
=
{'
pgbench
'
=>
['
wsock32.lib
']};
'
pgbench
'
=>
['
wsock32.lib
']
my
$contrib_extraincludes
=
{'
tsearch2
'
=>
['
contrib/tsearch2
']};
};
my
$contrib_extraincludes
=
{
'
tsearch2
'
=>
['
contrib/tsearch2
']
};
my
$contrib_extrasource
=
{
my
$contrib_extrasource
=
{
'
cube
'
=>
['
cubescan.l
','
cubeparse.y
'],
'
cube
'
=>
['
cubescan.l
','
cubeparse.y
'],
'
seg
'
=>
['
segscan.l
','
segparse.y
']
'
seg
'
=>
['
segscan.l
','
segparse.y
']
...
@@ -176,42 +184,58 @@ my $contrib_extrasource = {
...
@@ -176,42 +184,58 @@ my $contrib_extrasource = {
my
@contrib_excludes
=
('
pgcrypto
');
my
@contrib_excludes
=
('
pgcrypto
');
if
(
$solution
->
{
options
}
->
{
xml
})
{
if
(
$solution
->
{
options
}
->
{
xml
})
$contrib_extraincludes
->
{'
xml2
'}
=
[
$solution
->
{
options
}
->
{
xml
}
.
'
\
include
'
,
{
$contrib_extraincludes
->
{'
xml2
'}
=
[
$solution
->
{
options
}
->
{
xml
}
.
'
\
include
',
$solution
->
{
options
}
->
{
xslt
}
.
'
\
include
',
$solution
->
{
options
}
->
{
xslt
}
.
'
\
include
',
$solution
->
{
options
}
->
{
iconv
}
.
'
\
include
'];
$solution
->
{
options
}
->
{
iconv
}
.
'
\
include
'
];
$contrib_extralibs
->
{'
xml2
'}
=
[
$solution
->
{
options
}
->
{
xml
}
.
'
\
lib
\
libxml2.lib
',
$contrib_extralibs
->
{'
xml2
'}
=
[
$solution
->
{
options
}
->
{
xslt
}
.
'
\
lib
\
libxslt.lib
'];
$solution
->
{
options
}
->
{
xml
}
.
'
\
lib
\
libxml2.lib
',
$solution
->
{
options
}
->
{
xslt
}
.
'
\
lib
\
libxslt.lib
'
];
}
}
else
{
else
{
push
@contrib_excludes
,'
xml2
';
push
@contrib_excludes
,'
xml2
';
}
}
if
(
!
$solution
->
{
options
}
->
{
openssl
})
{
if
(
!
$solution
->
{
options
}
->
{
openssl
})
{
push
@contrib_excludes
,'
sslinfo
';
push
@contrib_excludes
,'
sslinfo
';
}
}
# Pgcrypto makefile too complex to parse....
# Pgcrypto makefile too complex to parse....
my
$pgcrypto
=
$solution
->
AddProject
('
pgcrypto
','
dll
','
crypto
');
my
$pgcrypto
=
$solution
->
AddProject
('
pgcrypto
','
dll
','
crypto
');
$pgcrypto
->
AddFiles
('
contrib
\
pgcrypto
','
pgcrypto.c
','
px.c
','
px-hmac.c
','
px-crypt.c
',
$pgcrypto
->
AddFiles
(
'
crypt-gensalt.c
','
crypt-blowfish.c
','
crypt-des.c
','
crypt-md5.c
','
mbuf.c
',
'
contrib
\
pgcrypto
','
pgcrypto.c
','
px.c
','
px-hmac.c
',
'
pgp.c
','
pgp-armor.c
','
pgp-cfb.c
','
pgp-compress.c
','
pgp-decrypt.c
','
pgp-encrypt.c
',
'
px-crypt.c
','
crypt-gensalt.c
','
crypt-blowfish.c
','
crypt-des.c
',
'
pgp-info.c
','
pgp-mpi.c
','
pgp-pubdec.c
','
pgp-pubenc.c
','
pgp-pubkey.c
','
pgp-s2k.c
',
'
crypt-md5.c
','
mbuf.c
','
pgp.c
','
pgp-armor.c
',
'
pgp-pgsql.c
');
'
pgp-cfb.c
','
pgp-compress.c
','
pgp-decrypt.c
','
pgp-encrypt.c
',
if
(
$solution
->
{
options
}
->
{
openssl
})
{
'
pgp-info.c
','
pgp-mpi.c
','
pgp-pubdec.c
','
pgp-pubenc.c
',
'
pgp-pubkey.c
','
pgp-s2k.c
','
pgp-pgsql.c
'
);
if
(
$solution
->
{
options
}
->
{
openssl
})
{
$pgcrypto
->
AddFiles
('
contrib
\
pgcrypto
',
'
openssl.c
','
pgp-mpi-openssl.c
');
$pgcrypto
->
AddFiles
('
contrib
\
pgcrypto
',
'
openssl.c
','
pgp-mpi-openssl.c
');
}
}
else
{
else
$pgcrypto
->
AddFiles
('
contrib
\
pgcrypto
',
'
md5.c
','
sha1.c
','
sha2.c
','
internal.c
','
internal-sha2.c
',
{
'
blf.c
','
rijndael.c
','
fortuna.c
','
random.c
','
pgp-mpi-internal.c
','
imath.c
');
$pgcrypto
->
AddFiles
(
'
contrib
\
pgcrypto
',
'
md5.c
','
sha1.c
','
sha2.c
',
'
internal.c
','
internal-sha2.c
','
blf.c
','
rijndael.c
',
'
fortuna.c
','
random.c
','
pgp-mpi-internal.c
','
imath.c
'
);
}
}
$pgcrypto
->
AddReference
(
$postgres
);
$pgcrypto
->
AddReference
(
$postgres
);
$pgcrypto
->
AddLibrary
('
wsock32.lib
');
$pgcrypto
->
AddLibrary
('
wsock32.lib
');
my
$D
;
my
$D
;
opendir
(
$D
,
'
contrib
')
||
croak
"
Could not opendir on contrib!
\n
";
opendir
(
$D
,
'
contrib
')
||
croak
"
Could not opendir on contrib!
\n
";
while
(
my
$d
=
readdir
(
$D
))
{
while
(
my
$d
=
readdir
(
$D
))
{
next
if
(
$d
=~
/^\./
);
next
if
(
$d
=~
/^\./
);
next
unless
(
-
f
"
contrib/
$d
/Makefile
");
next
unless
(
-
f
"
contrib/
$d
/Makefile
");
next
if
(
grep
{
/^$d$/
}
@contrib_excludes
);
next
if
(
grep
{
/^$d$/
}
@contrib_excludes
);
...
@@ -219,15 +243,16 @@ while (my $d = readdir($D)) {
...
@@ -219,15 +243,16 @@ while (my $d = readdir($D)) {
}
}
closedir
(
$D
);
closedir
(
$D
);
my
$mf
=
Project::
read_file
('
src
\
backend
\
utils
\
mb
\
conversion_procs
\
Makefile
');
my
$mf
=
Project::
read_file
('
src
\
backend
\
utils
\
mb
\
conversion_procs
\
Makefile
');
$mf
=~
s{\\s*[\r\n]+}{}mg
;
$mf
=~
s{\\s*[\r\n]+}{}mg
;
$mf
=~
m{DIRS\s*=\s*(.*)$}m
||
die
'
Could not match in conversion makefile
'
.
"
\n
";
$mf
=~
m{DIRS\s*=\s*(.*)$}m
||
die
'
Could not match in conversion makefile
'
.
"
\n
";
foreach
my
$sub
(
split
/\s+/
,
$1
)
{
foreach
my
$sub
(
split
/\s+/
,
$1
)
{
my
$mf
=
Project::
read_file
('
src
\
backend
\
utils
\
mb
\
conversion_procs
\
\'
. $sub .
'
\
Makefile
'
);
my
$mf
=
Project::
read_file
('
src
\
backend
\
utils
\
mb
\
conversion_procs
\
\'
. $sub .
'
\
Makefile
'
);
my $p = $solution->AddProject($sub,
'
dll
'
,
'
conversion
procs
'
);
my $p = $solution->AddProject($sub,
'
dll
'
,
'
conversion
procs
'
);
$p->AddFile(
'
src
\
backend
\
utils
\
mb
\
conversion_procs
\\
'
. $sub .
'
\\
'
. $sub .
'
.
c
'
);
$p->AddFile(
'
src
\
backend
\
utils
\
mb
\
conversion_procs
\\
'
. $sub .
'
\\
'
. $sub .
'
.
c
'
);
if ($mf =~ m{^SRCS
\
s*
\
+=
\
s*(.*)$}m) {
if ($mf =~ m{^SRCS
\
s*
\
+=
\
s*(.*)$}m)
{
$p->AddFile(
'
src
\
backend
\
utils
\
mb
\
conversion_procs
\\
'
. $sub .
'
\\
'
. $1);
$p->AddFile(
'
src
\
backend
\
utils
\
mb
\
conversion_procs
\\
'
. $sub .
'
\\
'
. $1);
}
}
$p->AddReference($postgres);
$p->AddReference($postgres);
...
@@ -236,23 +261,30 @@ foreach my $sub (split /\s+/,$1) {
...
@@ -236,23 +261,30 @@ foreach my $sub (split /\s+/,$1) {
$mf = Project::read_file(
'
src
\
bin
\
scripts
\
Makefile
'
);
$mf = Project::read_file(
'
src
\
bin
\
scripts
\
Makefile
'
);
$mf =~ s{
\\
s*[
\
r
\
n]+}{}mg;
$mf =~ s{
\\
s*[
\
r
\
n]+}{}mg;
$mf =~ m{PROGRAMS
\
s*=
\
s*(.*)$}m || die
'
Could
not
match
in
bin
\
scripts
\
Makefile
'
. "
\
n";
$mf =~ m{PROGRAMS
\
s*=
\
s*(.*)$}m || die
'
Could
not
match
in
bin
\
scripts
\
Makefile
'
. "
\
n";
foreach my $prg (split /
\
s+/,$1) {
foreach my $prg (split /
\
s+/,$1)
{
my $proj = $solution->AddProject($prg,
'
exe
'
,
'
bin
'
);
my $proj = $solution->AddProject($prg,
'
exe
'
,
'
bin
'
);
$mf =~ m{$prg
\
s*:
\
s*(.*)$}m || die
'
Could
not
find
script
define
for
$prg
'
. "
\
n";
$mf =~ m{$prg
\
s*:
\
s*(.*)$}m || die
'
Could
not
find
script
define
for
$prg
'
. "
\
n";
my @files = split /
\
s+/,$1;
my @files = split /
\
s+/,$1;
foreach my $f (@files) {
foreach my $f (@files)
if ($f =~ /
\
/keywords
\
.o$/) {
{
if ($f =~ /
\
/keywords
\
.o$/)
{
$proj->AddFile(
'
src
\
backend
\
parser
\
keywords
.
c
'
);
$proj->AddFile(
'
src
\
backend
\
parser
\
keywords
.
c
'
);
}
}
else {
else
{
$f =~ s/
\
.o$/
\
.c/;
$f =~ s/
\
.o$/
\
.c/;
if ($f eq
'
dumputils
.
c
'
) {
if ($f eq
'
dumputils
.
c
'
)
{
$proj->AddFile(
'
src
\
bin
\
pg_dump
\
dumputils
.
c
'
);
$proj->AddFile(
'
src
\
bin
\
pg_dump
\
dumputils
.
c
'
);
}
}
elsif ($f =~ /print
\
.c$/) { # Also catches mbprint.c
elsif ($f =~ /print
\
.c$/)
{ # Also catches mbprint.c
$proj->AddFile(
'
src
\
bin
\
psql
\\
'
. $f);
$proj->AddFile(
'
src
\
bin
\
psql
\\
'
. $f);
}
}
else {
else
{
$proj->AddFile(
'
src
\
bin
\
scripts
\\
'
. $f);
$proj->AddFile(
'
src
\
bin
\
scripts
\\
'
. $f);
}
}
}
}
...
@@ -264,7 +296,6 @@ foreach my $prg (split /\s+/,$1) {
...
@@ -264,7 +296,6 @@ foreach my $prg (split /\s+/,$1) {
$proj->AddResourceFile(
'
src
\
bin
\
scripts
'
,
'
PostgreSQL
Utility
'
);
$proj->AddResourceFile(
'
src
\
bin
\
scripts
'
,
'
PostgreSQL
Utility
'
);
}
}
# Regression DLL and EXE
# Regression DLL and EXE
my $regress = $solution->AddProject(
'
regress
'
,
'
dll
'
,
'
misc
'
);
my $regress = $solution->AddProject(
'
regress
'
,
'
dll
'
,
'
misc
'
);
$regress->AddFile(
'
src
\
test
\
regress
\
regress
.
c
'
);
$regress->AddFile(
'
src
\
test
\
regress
\
regress
.
c
'
);
...
@@ -284,7 +315,8 @@ $solution->Save();
...
@@ -284,7 +315,8 @@ $solution->Save();
#####################
#####################
# Add a simple frontend project (exe)
# Add a simple frontend project (exe)
sub AddSimpleFrontend {
sub AddSimpleFrontend
{
my $n = shift;
my $n = shift;
my $uselibpq= shift;
my $uselibpq= shift;
...
@@ -292,34 +324,41 @@ sub AddSimpleFrontend {
...
@@ -292,34 +324,41 @@ sub AddSimpleFrontend {
$p->AddDir(
'
src
\
bin
\\
'
. $n);
$p->AddDir(
'
src
\
bin
\\
'
. $n);
$p->AddDefine(
'
FRONTEND
'
);
$p->AddDefine(
'
FRONTEND
'
);
$p->AddReference($libpgport);
$p->AddReference($libpgport);
if ($uselibpq) {
if ($uselibpq)
{
$p->AddIncludeDir(
'
src
\
interfaces
\
libpq
'
);
$p->AddIncludeDir(
'
src
\
interfaces
\
libpq
'
);
$p->AddReference($libpq);
$p->AddReference($libpq);
}
}
return $p;
return $p;
}
}
# Add a simple contrib project
# Add a simple contrib project
sub AddContrib {
sub AddContrib
{
my $n = shift;
my $n = shift;
my $mf = Project::read_file(
'
contrib
\\
'
. $n .
'
\
Makefile
'
);
my $mf = Project::read_file(
'
contrib
\\
'
. $n .
'
\
Makefile
'
);
if ($mf =~ /^MODULE_big/mg) {
if ($mf =~ /^MODULE_big/mg)
{
$mf =~ s{
\\\
s*[
\
r
\
n]+}{}mg;
$mf =~ s{
\\\
s*[
\
r
\
n]+}{}mg;
my $proj = $solution->AddProject($n,
'
dll
'
,
'
contrib
'
);
my $proj = $solution->AddProject($n,
'
dll
'
,
'
contrib
'
);
$mf =~ /^OBJS
\
s*=
\
s*(.*)$/gm || croak "Could not find objects in MODULE_big for $n
\
n";
$mf =~ /^OBJS
\
s*=
\
s*(.*)$/gm || croak "Could not find objects in MODULE_big for $n
\
n";
foreach my $o (split /
\
s+/, $1) {
foreach my $o (split /
\
s+/, $1)
{
$o =~ s/
\
.o$/.c/;
$o =~ s/
\
.o$/.c/;
$proj->AddFile(
'
contrib
\\
'
. $n .
'
\\
'
. $o);
$proj->AddFile(
'
contrib
\\
'
. $n .
'
\\
'
. $o);
}
}
$proj->AddReference($postgres);
$proj->AddReference($postgres);
if ($mf =~ /^SUBDIRS
\
s*:?=
\
s*(.*)$/mg) {
if ($mf =~ /^SUBDIRS
\
s*:?=
\
s*(.*)$/mg)
foreach my $d (split /
\
s+/, $1) {
{
foreach my $d (split /
\
s+/, $1)
{
my $mf2 = Project::read_file(
'
contrib
\\
'
. $n .
'
\\
'
. $d .
'
\
Makefile
'
);
my $mf2 = Project::read_file(
'
contrib
\\
'
. $n .
'
\\
'
. $d .
'
\
Makefile
'
);
$mf2 =~ s{
\\\
s*[
\
r
\
n]+}{}mg;
$mf2 =~ s{
\\\
s*[
\
r
\
n]+}{}mg;
$mf2 =~ /^SUBOBJS
\
s*=
\
s*(.*)$/gm || croak "Could not find objects in MODULE_big for $n, subdir $d
\
n";
$mf2 =~ /^SUBOBJS
\
s*=
\
s*(.*)$/gm
foreach my $o (split /
\
s+/, $1) {
|| croak "Could not find objects in MODULE_big for $n, subdir $d
\
n";
foreach my $o (split /
\
s+/, $1)
{
$o =~ s/
\
.o$/.c/;
$o =~ s/
\
.o$/.c/;
$proj->AddFile(
'
contrib
\\
'
. $n .
'
\\
'
. $d .
'
\\
'
. $o);
$proj->AddFile(
'
contrib
\\
'
. $n .
'
\\
'
. $d .
'
\\
'
. $o);
}
}
...
@@ -328,8 +367,10 @@ sub AddContrib {
...
@@ -328,8 +367,10 @@ sub AddContrib {
AdjustContribProj($proj);
AdjustContribProj($proj);
return $proj;
return $proj;
}
}
elsif ($mf =~ /^MODULES
\
s*=
\
s*(.*)$/mg) {
elsif ($mf =~ /^MODULES
\
s*=
\
s*(.*)$/mg)
foreach my $mod (split /
\
s+/, $1) {
{
foreach my $mod (split /
\
s+/, $1)
{
my $proj = $solution->AddProject($mod,
'
dll
'
,
'
contrib
'
);
my $proj = $solution->AddProject($mod,
'
dll
'
,
'
contrib
'
);
$proj->AddFile(
'
contrib
\\
'
. $n .
'
\\
'
. $mod .
'
.
c
'
);
$proj->AddFile(
'
contrib
\\
'
. $n .
'
\\
'
. $mod .
'
.
c
'
);
$proj->AddReference($postgres);
$proj->AddReference($postgres);
...
@@ -337,48 +378,61 @@ sub AddContrib {
...
@@ -337,48 +378,61 @@ sub AddContrib {
}
}
return undef;
return undef;
}
}
elsif ($mf =~ /^PROGRAM
\
s*=
\
s*(.*)$/mg) {
elsif ($mf =~ /^PROGRAM
\
s*=
\
s*(.*)$/mg)
{
my $proj = $solution->AddProject($1,
'
exe
'
,
'
contrib
'
);
my $proj = $solution->AddProject($1,
'
exe
'
,
'
contrib
'
);
$mf =~ /^OBJS
\
s*=
\
s*(.*)$/gm || croak "Could not find objects in MODULE_big for $n
\
n";
$mf =~ /^OBJS
\
s*=
\
s*(.*)$/gm || croak "Could not find objects in MODULE_big for $n
\
n";
foreach my $o (split /
\
s+/, $1) {
foreach my $o (split /
\
s+/, $1)
{
$o =~ s/
\
.o$/.c/;
$o =~ s/
\
.o$/.c/;
$proj->AddFile(
'
contrib
\\
'
. $n .
'
\\
'
. $o);
$proj->AddFile(
'
contrib
\\
'
. $n .
'
\\
'
. $o);
}
}
AdjustContribProj($proj);
AdjustContribProj($proj);
return $proj;
return $proj;
}
}
else {
else
{
croak "Could not determine contrib module type for $n
\
n";
croak "Could not determine contrib module type for $n
\
n";
}
}
}
}
sub AdjustContribProj {
sub AdjustContribProj
{
my $proj = shift;
my $proj = shift;
my $n = $proj->{name};
my $n = $proj->{name};
if ($contrib_defines->{$n}) {
if ($contrib_defines->{$n})
foreach my $d ($contrib_defines->{$n}) {
{
foreach my $d ($contrib_defines->{$n})
{
$proj->AddDefine($d);
$proj->AddDefine($d);
}
}
}
}
if (grep {/^$n$/} @contrib_uselibpq) {
if (grep {/^$n$/} @contrib_uselibpq)
{
$proj->AddIncludeDir(
'
src
\
interfaces
\
libpq
'
);
$proj->AddIncludeDir(
'
src
\
interfaces
\
libpq
'
);
$proj->AddReference($libpq);
$proj->AddReference($libpq);
}
}
if (grep {/^$n$/} @contrib_uselibpgport) {
if (grep {/^$n$/} @contrib_uselibpgport)
{
$proj->AddReference($libpgport);
$proj->AddReference($libpgport);
}
}
if ($contrib_extralibs->{$n}) {
if ($contrib_extralibs->{$n})
foreach my $l (@{$contrib_extralibs->{$n}}) {
{
foreach my $l (@{$contrib_extralibs->{$n}})
{
$proj->AddLibrary($l);
$proj->AddLibrary($l);
}
}
}
}
if ($contrib_extraincludes->{$n}) {
if ($contrib_extraincludes->{$n})
foreach my $i (@{$contrib_extraincludes->{$n}}) {
{
foreach my $i (@{$contrib_extraincludes->{$n}})
{
$proj->AddIncludeDir($i);
$proj->AddIncludeDir($i);
}
}
}
}
if ($contrib_extrasource->{$n}) {
if ($contrib_extrasource->{$n})
{
$proj->AddFiles(
'
contrib
\\
'
. $n, @{$contrib_extrasource->{$n}});
$proj->AddFiles(
'
contrib
\\
'
. $n, @{$contrib_extrasource->{$n}});
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment