summaryrefslogtreecommitdiff
path: root/psql/README-DEV
blob: 10f82ecdf559d889280f9ea942ebe77c829879d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
This document describes how psql was packaged for build2. In particular, this
understanding will be useful when upgrading to a new upstream version. See
../README-DEV for general notes on PostgreSQL packaging.

The upstream package builds the common and ports static libraries and links
them to the psql program. These static libraries are generic enough to fit all
the binaries built by the package. We will build psql by only selecting the
required static libraries source files, relying on the linker diagnostics
(unresolved symbol errors, etc).

Symlink the required upstream components:

$ ln -s ../upstream/COPYRIGHT

$ mkdir -p psql/src
$ ln -s ../../../upstream/src/bin/psql psql/src

Note that symlinking all the upstream's top source directories is a bad idea
since this would potentially bloat the distribution and uglify the
buildfile. Also note that some of the source files are shared with the libpq
package and this sharing doesn't align with such an approach. Thus, we
selectively symlink only the required files and directories.

$ mkdir -p psql/src/fe_utils psql/src/common psql/src/port
$ ln -s ../../../../upstream/src/fe_utils/{print,conditional,cancel,string_utils,mbprint}.c psql/src/fe_utils
$ ln -s ../../../../upstream/src/common/{fe_memutils,logging,username,psprintf,sprompt,string,wait_error,exec,pg_get_line,stringinfo,kwlookup,keywords}.c psql/src/common
$ ln -s ../../../../upstream/src/port/{strlcpy,strlcat,pgstrcasecmp,snprintf,strerror,path,pgsleep,qsort,pgstrsignal,thread,win32stat,win32env,win32setlocale,win32error,getopt_long,getopt,open,system}.c psql/src/port

$ mkdir -p psql/include/catalog psql/include/fe_utils psql/include/lib psql/include/libpq psql/include/mb psql/include/parser psql/include/port psql/include/portability
$ ln -s ../../../../upstream/src/include/catalog/{pg_am,genbki}.h psql/include/catalog
$ ln -s ../../../../upstream/src/include/fe_utils/{conditional,print,psqlscan,string_utils,cancel,mbprint,psqlscan_int}.h psql/include/fe_utils
$ ln -s ../../../../upstream/src/include/lib/{stringinfo,sort_template}.h psql/include/lib
$ ln -s ../../../../upstream/src/include/libpq/pqcomm.h psql/include/libpq
$ ln -s ../../../../upstream/src/include/mb/pg_wchar.h psql/include/mb
$ ln -s ../../../../upstream/src/include/parser/kwlist.h psql/include/parser
$ ln -s ../../../../upstream/src/include/port/{win32,win32_msvc,{linux,freebsd,darwin,win32}.h} psql/include/port
$ ln -s ../../../../upstream/src/include/portability/instr_time.h psql/include/portability
$ ln -s ../../../upstream/src/include/{c,port,postgres_fe,getopt_long,pg_getopt,pg_config_manual}.h psql/include
$ ln -s ../../../libpq/libpq/{pg_config,pg_config_os,pg_config_paths}.h psql/include
$ ln -s ../../../upstream/src/interfaces/libpq/pqexpbuffer.h psql/include
$ ln -s ../../../upstream/src/include/common psql/include

Note that some of the source files are generated by perl scripts executed by
make on POSIX and build.pl on Windows. At the moment it feels too hairy to
generate them automatically in our buildfile. These files are platform-
independent, so lets build the upstream's psql program on some of the
supported platforms and copy these files to our downstream/ subdirectory:

$ mkdir -p psql/downstream/catalog
$ cp <build-dir>/src/include/catalog/{pg_type_d,pg_am_d,pg_attribute_d,pg_cast_d,pg_class_d,pg_default_acl_d}.h psql/downstream/catalog/
$ cp <build-dir>/src/bin/psql/{sql_help.{h,c},psqlscanslash.c} psql/downstream/
$ cp <build-dir>/src/fe_utils/psqlscan.c psql/downstream/
$ cp <build-dir>/src/common/kwlist_d.h psql/downstream/

Edit psql/downstream/psqlscanslash.c by changing the

#line ... ".../psqlscanslash.c"
#line ... ".../psqlscanslash.l"

directives to

#line ... "psqlscanslash.c"
#line ... "psqlscanslash.l"

Also edit psql/downstream/psqlscan.c similar to the above.

$ ln -s ../src/psql/psqlscanslash.l psql/downstream/
$ ln -s ../../../upstream/src/fe_utils/psqlscan.l psql/downstream/