source: project/release/4/postgresql/trunk/postgresql.setup

Last change on this file was 33721, checked in by sjamaan, 5 years ago

postgresql: Also skip pkg-config if it doesn't know about "libpq"

File size: 2.7 KB
Line 
1;;; postgresql.setup -*- Scheme -*-
2
3(use files utils)
4
5(define pkg-config-available?
6  (handle-exceptions exn
7    (begin
8      (print "pkg-config is NOT available. Will use pg_config.")
9      #f)
10    (print "Checking if pkg-config is available and knows about \"libpq\"...")
11    (system* "pkg-config --exists libpq")
12    (print "pkg-config is available.")
13    #t))
14
15(define libpq-flags
16  (if pkg-config-available?
17      '("`pkg-config --cflags libpq`" "`pkg-config --libs libpq`")
18      '(-C -I -C "\"`pg_config --includedir`\""
19           "-L\"`pg_config --libdir`\""
20           -rpath "`pg_config --libdir`" -lpq)))
21
22(define PQescapeIdentifier-presence-checker #<<EOF
23  #include <libpq-fe.h>
24  int main(void)
25  {
26     PGconn *conn = NULL; /* Bork */
27     return PQescapeIdentifier(conn, "test", 4) != NULL;
28  }
29EOF
30)
31
32(define PQconnectdbParams-presence-checker #<<EOF
33  #include <libpq-fe.h>
34  int main(void)
35  {
36     const char *kw[] = {"a", NULL};
37     const char *val[] = {"b", NULL};
38     return PQconnectdbParams(kw, val, 0) != NULL;
39  }
40EOF
41)
42
43(define PG_DIAG_INTERNAL_QUERY+POSITION-checker #<<EOF
44  #include <libpq-fe.h>
45  int main(void)
46  {
47     int foo = PG_DIAG_INTERNAL_QUERY;
48     int bar = PG_DIAG_INTERNAL_POSITION;
49     return foo + bar;
50  }
51EOF
52)
53
54(define PG_DIAG_SCHEMA_INFO-checker #<<EOF
55  #include <libpq-fe.h>
56  int main(void)
57  {
58     int s = PG_DIAG_SCHEMA_NAME;
59     int t = PG_DIAG_TABLE_NAME;
60     int col = PG_DIAG_COLUMN_NAME;
61     int d = PG_DIAG_DATATYPE_NAME;
62     int con = PG_DIAG_CONSTRAINT_NAME;
63     return s + t + col + d + con;
64  }
65EOF
66)
67
68(define feature-checks
69  `((has-PQescapeIdentifier . ,PQescapeIdentifier-presence-checker)
70    (has-PQconnectdbParams . ,PQconnectdbParams-presence-checker)
71    (has-PG_DIAG_INTERNAL_QUERY+POSITION . ,PG_DIAG_INTERNAL_QUERY+POSITION-checker)
72    (has-PG_DIAG_SCHEMA_INFO . ,PG_DIAG_SCHEMA_INFO-checker)))
73
74(define-syntax try-compile-pgsql-prog
75  (syntax-rules ()
76    ((_ str)
77     (begin
78      (with-output-to-file "attempt.c" (lambda () (display str) (newline)))
79      (let ((result (handle-exceptions ex #f (compile "attempt.c" ,@libpq-flags))))
80        (delete-file* "attempt.c")
81        (delete-file* "attempt.o")
82        (delete-file* "attempt")
83        result)))))
84
85(define (check-features)
86  (fold (lambda (feature/test features)
87          (if (try-compile-pgsql-prog (cdr feature/test))
88              (append! `(-feature ,(car feature/test)) features)
89              features))
90        '()
91        feature-checks))
92
93(compile -s -O2 -d0 postgresql.scm -j postgresql ,@(check-features) ,@libpq-flags)
94
95(compile postgresql.import.scm -s -O2 -d0)
96
97(install-extension
98 'postgresql
99 '("postgresql.so" "postgresql.import.so")
100 '((version "3.10")
101   (documentation "postgresql.html")))
Note: See TracBrowser for help on using the repository browser.