blob: 3d5d6e5087a3824e58850d145e2c2f6393c9a5c5 (
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
cmake_minimum_required(VERSION 3.5)
project(libpq VERSION 9.6.1 LANGUAGES C)
if(NOT CMAKE_SYSTEM_PROCESSOR)
set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_HOST_SYSTEM_PROCESSOR})
endif()
find_package(OpenSSL REQUIRED)
find_program(PERL NAMES perl)
set(CMAKE_STATIC_LIBRARY_PREFIX)
set(CMAKE_SHARED_LIBRARY_PREFIX)
set(CMAKE_DEBUG_POSTFIX "d")
file(REMOVE
${CMAKE_CURRENT_SOURCE_DIR}/src/include/pg_config.h
${CMAKE_CURRENT_SOURCE_DIR}/src/include/pg_config_ext.h
${CMAKE_CURRENT_SOURCE_DIR}/src/include/pg_config_os.h
)
if(WIN32)
configure_file(src/include/pg_config.h.win32 include/pg_config.h)
configure_file(src/include/pg_config_ext.h.win32 include/pg_config_ext.h)
configure_file(src/include/port/win32.h include/pg_config_os.h)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/include/pg_config_ext.h" "#include <stdint.h>\n#define PG_INT64_TYPE int64_t")
configure_file("${PORT_DIR}/pg_config.darwin.h" include/pg_config.h COPYONLY)
configure_file(src/include/port/darwin.h include/pg_config_os.h COPYONLY)
configure_file(src/backend/port/dynloader/darwin.h include/dynloader.h COPYONLY)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/include/pg_config_ext.h" "#include <stdint.h>\n#define PG_INT64_TYPE int64_t")
configure_file(src/include/port/linux.h include/pg_config_os.h COPYONLY)
configure_file("${PORT_DIR}/pg_config.linux.h" include/pg_config.h COPYONLY)
configure_file(src/backend/port/dynloader/linux.h include/dynloader.h COPYONLY)
else()
message(FATAL_ERROR "Unknown system: ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
endif()
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/include/pg_config_paths.h "#define SYSCONFDIR \"\"")
set(INSTALL_INCLUDES ON CACHE BOOL "Install include files")
set(pg_port_src
src/port/pgstrcasecmp.c
src/port/pqsignal.c
src/port/thread.c
src/port/crypt.c
src/port/noblock.c
src/port/chklocale.c
src/port/snprintf.c
src/port/dirmod.c
src/port/pgsleep.c
src/port/open.c
src/port/system.c
)
if(WIN32)
list(APPEND pg_port_src
src/port/dirent.c
src/port/inet_aton.c
src/port/inet_net_ntop.c
src/port/win32error.c
src/port/win32setlocale.c
src/port/getaddrinfo.c
src/port/strlcpy.c
)
include_directories(src/include/port/win32 src/include/port/win32_msvc)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
list(APPEND pg_port_src
src/port/strlcpy.c
src/port/inet_aton.c
src/port/inet_net_ntop.c
src/port/getpeereid.c
)
endif()
set(pg_backend_src
src/backend/libpq/md5.c
src/backend/libpq/ip.c
src/backend/utils/mb/wchar.c
src/backend/utils/mb/encnames.c
)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
list(APPEND pg_backend_src
src/backend/port/dynloader/linux.c
src/backend/port/sysv_sema.c
src/backend/port/sysv_shmem.c
)
endif()
if(NOT WIN32)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/utils/errcodes.h
COMMAND "${PERL}" "${CMAKE_CURRENT_SOURCE_DIR}/src/backend/utils/generate-errcodes.pl" "${CMAKE_CURRENT_SOURCE_DIR}/src/backend/utils/errcodes.txt" > "${CMAKE_CURRENT_BINARY_DIR}/include/utils/errcodes.h"
VERBATIM
)
list(APPEND pg_backend_src
${CMAKE_CURRENT_BINARY_DIR}/include/utils/errcodes.h
)
endif()
set(pg_libpq_src
src/interfaces/libpq/fe-auth.c
src/interfaces/libpq/fe-connect.c
src/interfaces/libpq/fe-exec.c
src/interfaces/libpq/fe-lobj.c
src/interfaces/libpq/fe-misc.c
src/interfaces/libpq/fe-print.c
src/interfaces/libpq/fe-protocol2.c
src/interfaces/libpq/fe-protocol3.c
src/interfaces/libpq/fe-secure-openssl.c
src/interfaces/libpq/fe-secure.c
src/interfaces/libpq/libpq-events.c
src/interfaces/libpq/pqexpbuffer.c
src/interfaces/libpq/libpq-dist.rc
)
if(WIN32)
list(APPEND pg_libpq_src
src/interfaces/libpq/pthread-win32.c
src/interfaces/libpq/win32.c
)
endif()
set(pg_libpq_interface
src/include/postgres_ext.h
${CMAKE_CURRENT_BINARY_DIR}/include/pg_config_ext.h
${CMAKE_CURRENT_BINARY_DIR}/include/pg_config.h
src/interfaces/libpq/libpq-fe.h
src/interfaces/libpq/libpq-events.h
)
set(pg_libpq_catalog_interface
src/include/catalog/pg_type.h
src/include/catalog/genbki.h
)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_DEBUG_POSTFIX "d")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_library(libpq ${pg_port_src} ${pg_backend_src} ${pg_libpq_src})
target_compile_definitions(libpq PRIVATE -DFRONTEND -DENABLE_THREAD_SAFETY -DUSE_OPENSSL -D_CRT_SECURE_NO_WARNINGS)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_compile_definitions(libpq PRIVATE -D_GNU_SOURCE)
endif()
target_link_libraries(libpq PRIVATE OpenSSL::SSL)
if(WIN32)
target_link_libraries(libpq PRIVATE ws2_32 secur32 advapi32 shell32 crypt32)
endif()
target_include_directories(libpq PRIVATE src/include src/port ${CMAKE_CURRENT_BINARY_DIR}/include)
set_target_properties(libpq PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
install(TARGETS libpq
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)
if(INSTALL_INCLUDES)
install(FILES ${pg_libpq_interface} DESTINATION include)
install(DIRECTORY src/include/libpq DESTINATION include)
install(FILES ${pg_libpq_catalog_interface} DESTINATION include/catalog)
endif()
|