blob: 2df99f186c82e0343af901b00b69f590a228cc4d (
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
|
vcpkg_download_distfile(ARCHIVE
URLS "https://www.gaia-gis.it/gaia-sins/libspatialite-sources/libspatialite-${VERSION}.tar.gz"
FILENAME "libspatialite-${VERSION}.tar.gz"
SHA512 2745b373e31cea58623224def6090c491b58409803bb71231450dfa2cfdf3aafc3fc6f680585d55d085008f8cf362c3062ae67ffc7d80257775a22eb81ef1e57
)
vcpkg_extract_source_archive(
SOURCE_PATH
ARCHIVE "${ARCHIVE}"
PATCHES
fix-makefiles.patch
fix-linux-configure.patch
gaiaconfig-msvc.patch
fix-mingw.patch
fix-utf8-source.patch
android-builtin-iconv.diff
# https://groups.google.com/g/spatialite-users/c/FLBqJNIDkNQ
# https://groups.google.com/g/spatialite-users/c/nyT4iAJbttY
libxml2-no-http.diff
)
vcpkg_check_features(OUT_FEATURE_OPTIONS unused
FEATURES
freexl ENABLE_FREEXL
gcp ENABLE_GCP
rttopo ENABLE_RTTOPO
)
set(pkg_config_modules geos libxml-2.0 proj sqlite3 zlib)
if(ENABLE_FREEXL)
list(APPEND pkg_config_modules freexl)
endif()
if(ENABLE_RTTOPO)
list(APPEND pkg_config_modules rttopo)
endif()
if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
set(CL_FLAGS "")
if(NOT ENABLE_FREEXL)
string(APPEND CL_FLAGS " /DOMIT_FREEXL")
endif()
if(ENABLE_GCP)
string(APPEND CL_FLAGS " /DENABLE_GCP")
endif()
if(ENABLE_RTTOPO)
string(APPEND CL_FLAGS " /DENABLE_RTTOPO")
endif()
x_vcpkg_pkgconfig_get_modules(
PREFIX PKGCONFIG
MODULES --msvc-syntax ${pkg_config_modules}
LIBS
CFLAGS
)
set(CL_FLAGS_RELEASE "${CL_FLAGS} ${PKGCONFIG_CFLAGS_RELEASE}")
set(CL_FLAGS_DEBUG "${CL_FLAGS} ${PKGCONFIG_CFLAGS_DEBUG}")
# vcpkg_build_nmake doesn't supply cmake's implicit link libraries
if(PKGCONFIG_LIBS_RELEASE MATCHES "libcrypto")
string(APPEND PKGCONFIG_LIBS_RELEASE " user32.lib")
string(APPEND PKGCONFIG_LIBS_DEBUG " user32.lib")
endif()
file(TO_NATIVE_PATH "${CURRENT_PACKAGES_DIR}" INST_DIR)
vcpkg_install_nmake(
SOURCE_PATH "${SOURCE_PATH}"
PREFER_JOM
CL_LANGUAGE C
OPTIONS_RELEASE
"CL_FLAGS=${CL_FLAGS_RELEASE}"
"INST_DIR=${INST_DIR}"
"LIBS_ALL=${PKGCONFIG_LIBS_RELEASE} iconv.lib charset.lib"
OPTIONS_DEBUG
"CL_FLAGS=${CL_FLAGS_DEBUG}"
"INST_DIR=${INST_DIR}\\debug"
"LIBS_ALL=${PKGCONFIG_LIBS_DEBUG} iconv.lib charset.lib"
"LINK_FLAGS=/debug"
)
vcpkg_copy_pdbs()
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin")
file(REMOVE "${CURRENT_PACKAGES_DIR}/lib/spatialite_i.lib")
if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/bin")
file(REMOVE "${CURRENT_PACKAGES_DIR}/debug/lib/spatialite_i.lib")
endif()
else()
file(REMOVE "${CURRENT_PACKAGES_DIR}/lib/spatialite.lib")
file(RENAME "${CURRENT_PACKAGES_DIR}/lib/spatialite_i.lib" "${CURRENT_PACKAGES_DIR}/lib/spatialite.lib")
if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
file(REMOVE "${CURRENT_PACKAGES_DIR}/debug/lib/spatialite.lib")
file(RENAME "${CURRENT_PACKAGES_DIR}/debug/lib/spatialite_i.lib" "${CURRENT_PACKAGES_DIR}/debug/lib/spatialite.lib")
endif()
endif()
set(infile "${SOURCE_PATH}/spatialite.pc.in")
set(libdir [[${prefix}/lib]])
set(exec_prefix [[${prefix}]])
list(JOIN pkg_config_modules " " requires_private)
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
set(includedir [[${prefix}/include]])
set(outfile "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/spatialite.pc")
configure_file("${infile}" "${outfile}" @ONLY)
vcpkg_replace_string("${outfile}" "Libs:" "Requires.private: ${requires_private}\nLibs.private: -liconv -lcharset\nLibs:")
vcpkg_replace_string("${outfile}" " -lm" " ")
endif()
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
set(includedir [[${prefix}/../include]])
set(outfile "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/spatialite.pc")
configure_file("${infile}" "${outfile}" @ONLY)
vcpkg_replace_string("${outfile}" "Libs:" "Requires.private: ${requires_private}\nLibs.private: -liconv -lcharset\nLibs:")
vcpkg_replace_string("${outfile}" " -lm" " ")
endif()
else()
if(ENABLE_FREEXL)
set(FREEXL_OPTION "--enable-freexl")
else()
set(FREEXL_OPTION "--disable-freexl")
endif()
if(ENABLE_GCP)
set(GCP_OPTION "--enable-gcp")
else()
set(GCP_OPTION "--disable-gcp")
endif()
if(ENABLE_GEOCALLBACKS)
set(GEOCALLBACKS_OPTION "--enable-geocallbacks")
else()
set(GEOCALLBACKS_OPTION "--disable-geocallbacks")
endif()
if(ENABLE_RTTOPO)
set(RTTOPO_OPTION "--enable-rttopo")
else()
set(RTTOPO_OPTION "--disable-rttopo")
endif()
list(REMOVE_ITEM pkg_config_modules libxml2) # handled properly by configure
x_vcpkg_pkgconfig_get_modules(
PREFIX PKGCONFIG
MODULES ${pkg_config_modules}
LIBS
)
if(VCPKG_TARGET_IS_MINGW)
# Avoid system libs (as detected by cmake) in exported pc files
set(SYSTEM_LIBS "")
elseif(VCPKG_TARGET_IS_ANDROID)
set(SYSTEM_LIBS "\$LIBS -llog")
else()
set(SYSTEM_LIBS "\$LIBS")
endif()
# libspatialite needs some targets literally
if(VCPKG_TARGET_IS_ANDROID)
set(TARGET_ALIAS "--target=android")
elseif(VCPKG_TARGET_IS_MINGW)
set(TARGET_ALIAS "--target=mingw32")
elseif(VCPKG_TARGET_IS_OSX)
set(TARGET_ALIAS "--target=macosx")
else()
set(TARGET_ALIAS "")
endif()
vcpkg_make_configure(
SOURCE_PATH "${SOURCE_PATH}"
AUTORECONF
OPTIONS
${TARGET_ALIAS}
${FREEXL_OPTION}
${GCP_OPTION}
${RTTOPO_OPTION}
"--disable-examples"
"--disable-minizip"
"cross_compiling=yes" # avoid conftest rpath trouble
OPTIONS_DEBUG
"LIBS=${PKGCONFIG_LIBS_DEBUG} ${SYSTEM_LIBS}"
OPTIONS_RELEASE
"LIBS=${PKGCONFIG_LIBS_RELEASE} ${SYSTEM_LIBS}"
)
# automake adds the basedir of the generated config to `DEFAULT_INCLUDES`,
# but libspatialite uses `#include <spatialite/gaiaconfig.h>`.
file(GLOB_RECURSE makefiles
"${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/Makefile"
"${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/Makefile"
)
foreach(makefile IN LISTS makefiles)
vcpkg_replace_string("${makefile}" " -I$(top_builddir)/./src/headers/spatialite" " -I$(top_builddir)/./src/headers" IGNORE_UNCHANGED)
endforeach()
vcpkg_make_install()
if(VCPKG_TARGET_IS_MINGW AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/plugins/${PORT}")
file(RENAME "${CURRENT_PACKAGES_DIR}/lib/mod_spatialite.dll" "${CURRENT_PACKAGES_DIR}/plugins/${PORT}/mod_spatialite.dll")
endif()
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/debug/plugins/${PORT}")
file(RENAME "${CURRENT_PACKAGES_DIR}/debug/lib/mod_spatialite.dll" "${CURRENT_PACKAGES_DIR}/debug/plugins/${PORT}/mod_spatialite.dll")
endif()
endif()
endif()
vcpkg_fixup_pkgconfig()
# Handle copyright
set(outfile "${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright")
if(NOT ENABLE_GCP AND NOT ENABLE_RTTOPO)
file(READ "${SOURCE_PATH}/COPYING" mpl)
file(WRITE "${outfile}"
"SpatiaLite[${FEATURES}] is licensed under the MPL tri-license terms;\n"
"you are free to choose the best-fit license between:\n"
"- the MPL 1.1\n"
"- the GPL v2.0 or any subsequent version\n"
"- the LGPL v2.1 or any subsequent version.\n\n"
"# MPL 1.1 (from COPYING)\n\n"
"${mpl}\n"
)
else()
file(WRITE "${outfile}"
"SpatiaLite[${FEATURES}] is licensed under:\n"
"the GPL v2.0 or any subsequent version.\n\n"
)
endif()
file(READ "${SOURCE_PATH}/src/control_points/COPYING" gpl)
file(APPEND "${outfile}"
"# GPL v2.0 (from src/control_points/COPYING)\n\n"
"${gpl}\n"
)
|