On 13.04.22 12:26, Peter Eisentraut wrote:
Some feedback and patches for your branch at 3274198960c139328fef3c725cee1468bbfff469:

Here is another patch.  It adds support for building ecpg.
From 35a23442727cdf82558c7e5eab85bc29df86b5d5 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Wed, 20 Apr 2022 10:54:29 +0200
Subject: [PATCH 6/6] meson: Add ecpg

---
 meson.build                                |  5 ++
 src/interfaces/ecpg/compatlib/meson.build  |  8 ++++
 src/interfaces/ecpg/ecpglib/meson.build    | 17 +++++++
 src/interfaces/ecpg/include/meson.build    | 46 ++++++++++++++++++
 src/interfaces/ecpg/meson.build            |  5 ++
 src/interfaces/ecpg/pgtypeslib/meson.build | 12 +++++
 src/interfaces/ecpg/preproc/Makefile       |  2 +-
 src/interfaces/ecpg/preproc/meson.build    | 55 ++++++++++++++++++++++
 src/interfaces/ecpg/preproc/parse.pl       |  6 ++-
 src/interfaces/meson.build                 |  1 +
 src/meson.build                            |  2 +
 11 files changed, 157 insertions(+), 2 deletions(-)
 create mode 100644 src/interfaces/ecpg/compatlib/meson.build
 create mode 100644 src/interfaces/ecpg/ecpglib/meson.build
 create mode 100644 src/interfaces/ecpg/include/meson.build
 create mode 100644 src/interfaces/ecpg/meson.build
 create mode 100644 src/interfaces/ecpg/pgtypeslib/meson.build
 create mode 100644 src/interfaces/ecpg/preproc/meson.build
 create mode 100644 src/interfaces/meson.build

diff --git a/meson.build b/meson.build
index e33ed11b08..bd6f1759e8 100644
--- a/meson.build
+++ b/meson.build
@@ -1637,6 +1637,11 @@ else
   cdata.set('STRERROR_R_INT', false)
 endif
 
+# XXX replace with real test
+if host_machine.system() == 'darwin'
+  cdata.set('LOCALE_T_IN_XLOCALE', true)
+endif
+
 # MSVC doesn't cope well with defining restrict to __restrict, the
 # spelling it understands, because it conflicts with
 # __declspec(restrict). Therefore we define pg_restrict to the
diff --git a/src/interfaces/ecpg/compatlib/meson.build 
b/src/interfaces/ecpg/compatlib/meson.build
new file mode 100644
index 0000000000..68ae270038
--- /dev/null
+++ b/src/interfaces/ecpg/compatlib/meson.build
@@ -0,0 +1,8 @@
+library('ecpg_compat',
+        'informix.c',
+        include_directories : ['.', '../include', postgres_inc, '../../libpq'],
+        dependencies: [frontend_shlib_code, thread_dep],
+        link_with: [ecpglib, ecpg_pgtypes],
+        soversion: 3,
+        install: true,
+       )
diff --git a/src/interfaces/ecpg/ecpglib/meson.build 
b/src/interfaces/ecpg/ecpglib/meson.build
new file mode 100644
index 0000000000..c32fc13871
--- /dev/null
+++ b/src/interfaces/ecpg/ecpglib/meson.build
@@ -0,0 +1,17 @@
+ecpglib = library('ecpg',
+                  'connect.c',
+                  'data.c',
+                  'descriptor.c',
+                  'error.c',
+                  'execute.c',
+                  'memory.c',
+                  'misc.c',
+                  'prepare.c',
+                  'sqlda.c',
+                  'typename.c',
+                  include_directories : ['.', '../include', postgres_inc],
+                  dependencies: [frontend_shlib_code, libpq, thread_dep],
+                  link_with: [ecpg_pgtypes],
+                  soversion: 6,
+                  install: true,
+                 )
diff --git a/src/interfaces/ecpg/include/meson.build 
b/src/interfaces/ecpg/include/meson.build
new file mode 100644
index 0000000000..840a23998d
--- /dev/null
+++ b/src/interfaces/ecpg/include/meson.build
@@ -0,0 +1,46 @@
+ecpg_conf_keys = [
+  'ENABLE_THREAD_SAFETY',
+  'HAVE_INT64',
+  'HAVE_LONG_INT_64',
+  'HAVE_LONG_LONG_INT_64',
+  'PG_USE_STDBOOL',
+]
+
+ecpg_conf_data = configuration_data()
+
+foreach key : ecpg_conf_keys
+  if cdata.has(key)
+    ecpg_conf_data.set(key, cdata.get(key))
+  endif
+endforeach
+
+configure_file(
+  output: 'ecpg_config.h',
+  configuration: ecpg_conf_data,
+  install_dir: get_option('includedir'),
+)
+
+install_headers(
+  'ecpg_informix.h',
+  'ecpgerrno.h',
+  'ecpglib.h',
+  'ecpgtype.h',
+  'pgtypes.h',
+  'pgtypes_date.h',
+  'pgtypes_error.h',
+  'pgtypes_interval.h',
+  'pgtypes_numeric.h',
+  'pgtypes_timestamp.h',
+  'sql3types.h',
+  'sqlca.h',
+  'sqlda.h',
+  'sqlda-compat.h',
+  'sqlda-native.h',
+)
+
+install_headers(
+  'datetime.h',
+  'decimal.h',
+  'sqltypes.h',
+  subdir: 'informix/esql',
+)
diff --git a/src/interfaces/ecpg/meson.build b/src/interfaces/ecpg/meson.build
new file mode 100644
index 0000000000..ffbe84c0e8
--- /dev/null
+++ b/src/interfaces/ecpg/meson.build
@@ -0,0 +1,5 @@
+subdir('include')
+subdir('pgtypeslib')
+subdir('ecpglib')
+subdir('compatlib')
+subdir('preproc')
diff --git a/src/interfaces/ecpg/pgtypeslib/meson.build 
b/src/interfaces/ecpg/pgtypeslib/meson.build
new file mode 100644
index 0000000000..9b1d54c019
--- /dev/null
+++ b/src/interfaces/ecpg/pgtypeslib/meson.build
@@ -0,0 +1,12 @@
+ecpg_pgtypes = library('pgtypes',
+                       'common.c',
+                       'datetime.c',
+                       'dt_common.c',
+                       'interval.c',
+                       'numeric.c',
+                       'timestamp.c',
+                       include_directories : ['.', '../include', postgres_inc],
+                       dependencies: [frontend_shlib_code],
+                       soversion: 3,
+                       install: true,
+                      )
diff --git a/src/interfaces/ecpg/preproc/Makefile 
b/src/interfaces/ecpg/preproc/Makefile
index ef6d645dee..747d824de3 100644
--- a/src/interfaces/ecpg/preproc/Makefile
+++ b/src/interfaces/ecpg/preproc/Makefile
@@ -65,7 +65,7 @@ preproc.h: preproc.c
 preproc.c: BISONFLAGS += -d
 
 preproc.y: ../../../backend/parser/gram.y parse.pl ecpg.addons ecpg.header 
ecpg.tokens ecpg.trailer ecpg.type
-       $(PERL) $(srcdir)/parse.pl $(srcdir) < $< > $@
+       $(PERL) $(srcdir)/parse.pl $(srcdir) $< > $@
        $(PERL) $(srcdir)/check_rules.pl $(srcdir) $<
 
 # generate keyword headers
diff --git a/src/interfaces/ecpg/preproc/meson.build 
b/src/interfaces/ecpg/preproc/meson.build
new file mode 100644
index 0000000000..4ae56f21d4
--- /dev/null
+++ b/src/interfaces/ecpg/preproc/meson.build
@@ -0,0 +1,55 @@
+pgc_c = custom_target('pgc.c',
+                      input: ['pgc.l'],
+                      output: ['pgc.c'],
+                      command: [flex, '-o', '@OUTPUT@', '@INPUT@'])
+
+preproc_y = custom_target('preproc.y',
+                          input: ['../../../backend/parser/gram.y',
+                                  'parse.pl',
+                                  'ecpg.addons',
+                                  'ecpg.header',
+                                  'ecpg.tokens',
+                                  'ecpg.trailer',
+                                  'ecpg.type'],
+                          output: ['preproc.y'],
+                          command: [perl, '@INPUT1@', '@CURRENT_SOURCE_DIR@', 
'@INPUT0@'],
+                          capture: true)
+
+preproc_c = custom_target('preproc.c',
+                          input: [preproc_y],
+                          output: ['preproc.c', 'preproc.h'],
+                          command: [bison, bisonflags, '-d', '-o', 
'@OUTPUT0@', '@INPUT@'])
+
+c_kwlist_d_h = custom_target('c_kwlist_d.h',
+                             input: ['c_kwlist.h'],
+                             output: ['c_kwlist_d.h'],
+                             command: [perl, '-I', '@SOURCE_ROOT@/src/tools', 
'@SOURCE_ROOT@/src/tools/gen_keywordlist.pl',
+                                       '--output', '@OUTDIR@',
+                                       '--varname', 'ScanCKeywords', 
'--no-case-fold', '@INPUT0@'])
+
+ecpg_kwlist_d_h = custom_target('ecpg_kwlist_d.h',
+                             input: ['ecpg_kwlist.h'],
+                             output: ['ecpg_kwlist_d.h'],
+                             command: [perl, '-I', '@SOURCE_ROOT@/src/tools', 
'@SOURCE_ROOT@/src/tools/gen_keywordlist.pl',
+                                       '--output', '@OUTDIR@',
+                                       '--varname', 'ScanECPGKeywords', 
'@INPUT0@'])
+
+executable('ecpg',
+           'c_keywords.c',
+           'descriptor.c',
+           'ecpg.c',
+           'ecpg_keywords.c',
+           'keywords.c',
+           'output.c',
+           'parser.c',
+           pgc_c,
+           preproc_c,
+           'type.c',
+           '../ecpglib/typename.c',
+           'variable.c',
+           c_kwlist_d_h,
+           ecpg_kwlist_d_h,
+           include_directories : ['.', '../include', postgres_inc],
+           dependencies: [frontend_shlib_code, libpq],
+           kwargs: default_bin_args,
+          )
diff --git a/src/interfaces/ecpg/preproc/parse.pl 
b/src/interfaces/ecpg/preproc/parse.pl
index dee6b8200d..0dd9f30b41 100644
--- a/src/interfaces/ecpg/preproc/parse.pl
+++ b/src/interfaces/ecpg/preproc/parse.pl
@@ -19,6 +19,8 @@
 my $path = shift @ARGV;
 $path = "." unless $path;
 
+open(our $infile, '<', $ARGV[0]) or die;
+
 my $copymode              = 0;
 my $brace_indent          = 0;
 my $yaccmode              = 0;
@@ -132,9 +134,11 @@
 include_file('trailer', 'ecpg.trailer');
 dump_buffer('trailer');
 
+close($infile);
+
 sub main
 {
-  line: while (<>)
+  line: while (<$infile>)
        {
                if (/ERRCODE_FEATURE_NOT_SUPPORTED/)
                {
diff --git a/src/interfaces/meson.build b/src/interfaces/meson.build
new file mode 100644
index 0000000000..fb85e3fd20
--- /dev/null
+++ b/src/interfaces/meson.build
@@ -0,0 +1 @@
+subdir('ecpg')
diff --git a/src/meson.build b/src/meson.build
index 414be1db41..a7fdd5a13e 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -8,3 +8,5 @@ subdir('backend')
 subdir('bin')
 
 subdir('pl')
+
+subdir('interfaces')
-- 
2.35.1

Reply via email to