Skip to content

Commit 937cd95

Browse files
SpaceImSSE4
authored andcommitted
(conan-io#9155) wt: modernize
* modernize * bump requirements * relocatable shared libs on macOS
1 parent 67958d4 commit 937cd95

File tree

6 files changed

+134
-89
lines changed

6 files changed

+134
-89
lines changed

recipes/wt/all/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ cmake_minimum_required(VERSION 2.8.11)
22
project(cmake_wrapper)
33

44
include(conanbuildinfo.cmake)
5-
conan_basic_setup()
5+
conan_basic_setup(KEEP_RPATHS)
66

77
add_subdirectory("source_subfolder")

recipes/wt/all/conandata.yml

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
sources:
2-
"4.3.1":
3-
url: "https://github.com/emweb/wt/archive/4.3.1.tar.gz"
4-
sha256: "6c0130f36c829ed67119679770c2f62d7768a62eaa281bb10070c4cf1b145139"
5-
"4.4.0":
6-
url: "https://github.com/emweb/wt/archive/4.4.0.tar.gz"
7-
sha256: "2eabefea915ecc4deb36f9f67ab30dd3b1f6c73893d76c9d9fa39ac25f4f3690"
8-
"4.5.0":
9-
url: "https://github.com/emweb/wt/archive/4.5.0.tar.gz"
10-
sha256: "119b1eae83285a153b9c901d3f4f25775c7a460d30b1e48242d7d2d649d61deb"
11-
"4.5.1":
12-
url: "https://github.com/emweb/wt/archive/4.5.1.tar.gz"
13-
sha256: "c2820646095af5618fc235705c0108797e3898225fb1826f2c6185c405c21a17"
14-
152
"4.6.0":
163
url: "https://github.com/emweb/wt/archive/4.6.0.tar.gz"
174
sha256: "7f709e132d32c4925e6db0a590c7ccc5613344e8b9052676ef891a25ccb550e6"
5+
"4.5.1":
6+
url: "https://github.com/emweb/wt/archive/4.5.1.tar.gz"
7+
sha256: "c2820646095af5618fc235705c0108797e3898225fb1826f2c6185c405c21a17"
8+
"4.5.0":
9+
url: "https://github.com/emweb/wt/archive/4.5.0.tar.gz"
10+
sha256: "119b1eae83285a153b9c901d3f4f25775c7a460d30b1e48242d7d2d649d61deb"
11+
"4.4.0":
12+
url: "https://github.com/emweb/wt/archive/4.4.0.tar.gz"
13+
sha256: "2eabefea915ecc4deb36f9f67ab30dd3b1f6c73893d76c9d9fa39ac25f4f3690"
14+
"4.3.1":
15+
url: "https://github.com/emweb/wt/archive/4.3.1.tar.gz"
16+
sha256: "6c0130f36c829ed67119679770c2f62d7768a62eaa281bb10070c4cf1b145139"
1817
patches:
1918
"4.5.0":
2019
- patch_file: "patches/wt_4_5_0_gcc_11.patch"

recipes/wt/all/conanfile.py

Lines changed: 105 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,16 @@
33
import os
44
import shutil
55

6-
required_conan_version = ">=1.33.0"
6+
required_conan_version = ">=1.43.0"
77

88

99
class WtConan(ConanFile):
1010
name = "wt"
1111
description = "Wt is a C++ library for developing web applications"
1212
url = "https://github.com/conan-io/conan-center-index"
1313
homepage = "https://github.com/emweb/wt"
14-
topics = ("conan", "wt", "web", "webapp")
14+
topics = ("wt", "web", "webapp")
1515
license = "GPL-2.0-only"
16-
exports_sources = ["patches/*", "CMakeLists.txt"]
17-
generators = "cmake"
1816

1917
settings = "os", "arch", "compiler", "build_type"
2018
options = {
@@ -34,7 +32,7 @@ class WtConan(ConanFile):
3432
"multi_threaded": [True, False],
3533
"connector_http": [True, False],
3634
"connector_isapi": [True, False],
37-
"connector_fcgi": [True, False]
35+
"connector_fcgi": [True, False],
3836
}
3937
default_options = {
4038
"shared": False,
@@ -53,9 +51,10 @@ class WtConan(ConanFile):
5351
"multi_threaded": True,
5452
"connector_http": True,
5553
"connector_isapi": True,
56-
"connector_fcgi": False
54+
"connector_fcgi": False,
5755
}
5856

57+
generators = "cmake"
5958
_cmake = None
6059

6160
@property
@@ -66,6 +65,11 @@ def _source_subfolder(self):
6665
def _build_subfolder(self):
6766
return "build_subfolder"
6867

68+
def export_sources(self):
69+
self.copy("CMakeLists.txt")
70+
for patch in self.conan_data.get("patches", {}).get(self.version, []):
71+
self.copy(patch["patch_file"])
72+
6973
def config_options(self):
7074
if self.settings.os == "Windows":
7175
del self.options.fPIC
@@ -95,17 +99,20 @@ def _required_boost_components(self):
9599
return ["program_options", "filesystem", "thread"]
96100

97101
def requirements(self):
98-
self.requires("boost/1.76.0")
102+
if tools.Version(self.version) >= "4.6.0":
103+
self.requires("boost/1.78.0")
104+
else:
105+
self.requires("boost/1.76.0")
99106
if self.options.connector_http:
100107
self.requires("zlib/1.2.11")
101108
if self.options.with_ssl:
102-
self.requires("openssl/1.1.1k")
109+
self.requires("openssl/1.1.1m")
103110
if self.options.get_safe("with_sqlite"):
104-
self.requires("sqlite3/3.35.5")
111+
self.requires("sqlite3/3.37.2")
105112
if self.options.get_safe("with_mysql"):
106113
self.requires("libmysqlclient/8.0.17")
107114
if self.options.get_safe("with_postgres"):
108-
self.requires("libpq/13.2")
115+
self.requires("libpq/13.4")
109116
if self.options.get_safe("with_mssql") and self.settings.os != "Windows":
110117
self.requires("odbc/2.3.9")
111118
if self.options.get_safe("with_unwind"):
@@ -120,6 +127,24 @@ def source(self):
120127
tools.get(**self.conan_data["sources"][self.version],
121128
destination=self._source_subfolder, strip_root=True)
122129

130+
def _patch_sources(self):
131+
for patch in self.conan_data.get("patches", {}).get(self.version, []):
132+
tools.patch(**patch)
133+
134+
cmakelists = os.path.join(self._source_subfolder, "CMakeLists.txt")
135+
tools.replace_in_file(cmakelists, "find_package(OpenSSL)", "#find_package(OpenSSL)")
136+
tools.replace_in_file(cmakelists, "INCLUDE(cmake/WtFindMysql.txt)", "#INCLUDE(cmake/WtFindMysql.txt)")
137+
tools.replace_in_file(cmakelists, "INCLUDE(cmake/WtFindPostgresql.txt)", "#INCLUDE(cmake/WtFindPostgresql.txt)")
138+
if self.settings.os != "Windows":
139+
tools.replace_in_file(cmakelists, "INCLUDE(cmake/WtFindOdbc.txt)", "#INCLUDE(cmake/WtFindOdbc.txt)")
140+
141+
# Do not pollute rpath of shared libs of the install tree on macOS please
142+
tools.replace_in_file(
143+
cmakelists,
144+
"IF(APPLE)\n SET(CMAKE_INSTALL_RPATH \"${CMAKE_INSTALL_PREFIX}/lib\")",
145+
"if(0)",
146+
)
147+
123148
def _configure_cmake(self):
124149
if self._cmake:
125150
return self._cmake
@@ -198,16 +223,7 @@ def _gather_libs(p):
198223
return self._cmake
199224

200225
def build(self):
201-
tools.replace_in_file(os.path.join(self._source_subfolder, "CMakeLists.txt"), "find_package(OpenSSL)", "#find_package(OpenSSL)")
202-
tools.replace_in_file(os.path.join(self._source_subfolder, "CMakeLists.txt"), "INCLUDE(cmake/WtFindMysql.txt)", "#INCLUDE(cmake/WtFindMysql.txt)")
203-
tools.replace_in_file(os.path.join(self._source_subfolder, "CMakeLists.txt"), "INCLUDE(cmake/WtFindPostgresql.txt)", "#INCLUDE(cmake/WtFindPostgresql.txt)")
204-
if self.settings.os != "Windows":
205-
tools.replace_in_file(os.path.join(self._source_subfolder, "CMakeLists.txt"), "INCLUDE(cmake/WtFindOdbc.txt)", "#INCLUDE(cmake/WtFindOdbc.txt)")
206-
207-
208-
for patch in self.conan_data.get("patches", {}).get(self.version, []):
209-
tools.patch(**patch)
210-
226+
self._patch_sources()
211227
cmake = self._configure_cmake()
212228
cmake.build()
213229

@@ -221,15 +237,14 @@ def package(self):
221237
tools.rmdir(os.path.join(self.package_folder, "lib", "cmake"))
222238

223239
def package_info(self):
224-
self.cpp_info.filenames["cmake_find_package"] = "wt"
225-
self.cpp_info.filenames["cmake_find_package_multi"] = "wt"
226-
self.cpp_info.names["cmake_find_package"] = "Wt"
227-
self.cpp_info.names["cmake_find_package_multi"] = "Wt"
240+
self.cpp_info.set_property("cmake_file_name", "wt")
241+
242+
suffix = "d" if self.settings.build_type == "Debug" else ""
243+
228244
# wt
229-
self.cpp_info.components["wtmain"].names["cmake_find_package"] = "Wt"
230-
self.cpp_info.components["wtmain"].names["cmake_find_package_multi"] = "Wt"
231-
self.cpp_info.components["wtmain"].libs = [self._lib_name("wt")]
232-
if self.settings.os == "Linux":
245+
self.cpp_info.components["wtmain"].set_property("cmake_target_name", "Wt::Wt")
246+
self.cpp_info.components["wtmain"].libs = ["wt{}".format(suffix)]
247+
if self.settings.os in ["Linux", "FreeBSD"]:
233248
self.cpp_info.components["wtmain"].system_libs = ["m", "rt"]
234249
elif self.settings.os == "Windows":
235250
self.cpp_info.components["wtmain"].system_libs = ["ws2_32", "mswsock", "winmm"]
@@ -238,73 +253,103 @@ def package_info(self):
238253
self.cpp_info.components["wtmain"].requires.append("openssl::openssl")
239254
if self.options.get_safe("with_unwind"):
240255
self.cpp_info.components["wtmain"].requires.append("libunwind::libunwind")
256+
241257
# wttest
242258
if self.options.with_test:
243-
self.cpp_info.components["wttest"].names["cmake_find_package"] = "Test"
244-
self.cpp_info.components["wttest"].names["cmake_find_package_multi"] = "Test"
245-
self.cpp_info.components["wttest"].libs = [self._lib_name("wttest")]
259+
self.cpp_info.components["wttest"].set_property("cmake_target_name", "Wt::Test")
260+
self.cpp_info.components["wttest"].libs = ["wttest{}".format(suffix)]
246261
self.cpp_info.components["wttest"].requires = ["wtmain"]
262+
247263
# wthttp
248264
if self.options.connector_http:
249-
self.cpp_info.components["wthttp"].names["cmake_find_package"] = "HTTP"
250-
self.cpp_info.components["wthttp"].names["cmake_find_package_multi"] = "HTTP"
251-
self.cpp_info.components["wthttp"].libs = [self._lib_name("wthttp")]
265+
self.cpp_info.components["wthttp"].set_property("cmake_target_name", "Wt::HTTP")
266+
self.cpp_info.components["wthttp"].libs = ["wthttp{}".format(suffix)]
252267
self.cpp_info.components["wthttp"].requires = ["wtmain", "boost::boost", "zlib::zlib"]
253268
if self.options.with_ssl:
254269
self.cpp_info.components["wthttp"].requires.append("openssl::openssl")
270+
255271
# wtisapi
256272
if self.options.get_safe("connector_isapi"):
257-
self.cpp_info.components["wtisapi"].names["cmake_find_package"] = "Isapi"
258-
self.cpp_info.components["wtisapi"].names["cmake_find_package_multi"] = "Isapi"
259-
self.cpp_info.components["wtisapi"].libs = [self._lib_name("wtisapi")]
273+
self.cpp_info.components["wtisapi"].set_property("cmake_target_name", "Wt::Isapi")
274+
self.cpp_info.components["wtisapi"].libs = ["wtisapi{}".format(suffix)]
260275
self.cpp_info.components["wtisapi"].requires = ["wtmain"]
276+
261277
# wtfcgi
262278
if self.options.get_safe("connector_fcgi"):
263-
self.cpp_info.components["wtfcgi"].names["cmake_find_package"] = "FCGI"
264-
self.cpp_info.components["wtfcgi"].names["cmake_find_package_multi"] = "FCGI"
265-
self.cpp_info.components["wtfcgi"].libs = [self._lib_name("wtfcgi")]
279+
self.cpp_info.components["wtfcgi"].set_property("cmake_target_name", "Wt::FCGI")
280+
self.cpp_info.components["wtfcgi"].libs = ["wtfcgi{}".format(suffix)]
266281
self.cpp_info.components["wtfcgi"].requires = ["wtmain"]
267282
if self.options.with_ssl:
268283
self.cpp_info.components["wtfcgi"].requires.append("openssl::openssl")
284+
269285
# wtdbo
270286
if self.options.with_dbo:
271-
self.cpp_info.components["wtdbo"].names["cmake_find_package"] = "Dbo"
272-
self.cpp_info.components["wtdbo"].names["cmake_find_package_multi"] = "Dbo"
273-
self.cpp_info.components["wtdbo"].libs = [self._lib_name("wtdbo")]
287+
self.cpp_info.components["wtdbo"].set_property("cmake_target_name", "Wt::Dbo")
288+
self.cpp_info.components["wtdbo"].libs = ["wtdbo{}".format(suffix)]
274289
if self.options.get_safe("with_unwind"):
275290
self.cpp_info.components["wtdbo"].requires.append("libunwind::libunwind")
291+
276292
# wtdbosqlite3
277293
if self.options.get_safe("with_sqlite"):
278-
self.cpp_info.components["wtdbosqlite3"].names["cmake_find_package"] = "DboSqlite3"
279-
self.cpp_info.components["wtdbosqlite3"].names["cmake_find_package_multi"] = "DboSqlite3"
280-
self.cpp_info.components["wtdbosqlite3"].libs = [self._lib_name("wtdbosqlite3")]
294+
self.cpp_info.components["wtdbosqlite3"].set_property("cmake_target_name", "Wt::DboSqlite3")
295+
self.cpp_info.components["wtdbosqlite3"].libs = ["wtdbosqlite3{}".format(suffix)]
281296
self.cpp_info.components["wtdbosqlite3"].requires = ["wtdbo", "sqlite3::sqlite3"]
282-
if self.settings.os == "Linux":
297+
if self.settings.os in ["Linux", "FreeBSD"]:
283298
self.cpp_info.components["wtdbosqlite3"].system_libs = ["m"]
299+
284300
# wtdbopostgres
285301
if self.options.get_safe("with_postgres"):
286-
self.cpp_info.components["wtdbopostgres"].names["cmake_find_package"] = "DboPostgres"
287-
self.cpp_info.components["wtdbopostgres"].names["cmake_find_package_multi"] = "DboPostgres"
288-
self.cpp_info.components["wtdbopostgres"].libs = [self._lib_name("wtdbopostgres")]
302+
self.cpp_info.components["wtdbopostgres"].set_property("cmake_target_name", "Wt::DboPostgres")
303+
self.cpp_info.components["wtdbopostgres"].libs = ["wtdbopostgres{}".format(suffix)]
289304
self.cpp_info.components["wtdbopostgres"].requires = ["wtdbo", "libpq::libpq"]
305+
290306
# wtdbomysql
291307
if self.options.get_safe("with_mysql"):
292-
self.cpp_info.components["wtdbomysql"].names["cmake_find_package"] = "DboMySQL"
293-
self.cpp_info.components["wtdbomysql"].names["cmake_find_package_multi"] = "DboMySQL"
294-
self.cpp_info.components["wtdbomysql"].libs = [self._lib_name("wtdbomysql")]
308+
self.cpp_info.components["wtdbomysql"].set_property("cmake_target_name", "Wt::DboMySQL")
309+
self.cpp_info.components["wtdbomysql"].libs = ["wtdbomysql{}".format(suffix)]
295310
self.cpp_info.components["wtdbomysql"].requires = ["wtdbo", "libmysqlclient::libmysqlclient"]
311+
296312
# wtdbomssqlserver
297313
if self.options.get_safe("with_mssql"):
298-
self.cpp_info.components["wtdbomssqlserver"].names["cmake_find_package"] = "DboMSSQLServer"
299-
self.cpp_info.components["wtdbomssqlserver"].names["cmake_find_package_multi"] = "DboMSSQLServer"
300-
self.cpp_info.components["wtdbomssqlserver"].libs = [self._lib_name("wtdbomssqlserver")]
314+
self.cpp_info.components["wtdbomssqlserver"].set_property("cmake_target_name", "Wt::DboMSSQLServer")
315+
self.cpp_info.components["wtdbomssqlserver"].libs = ["wtdbomssqlserver{}".format(suffix)]
301316
self.cpp_info.components["wtdbomssqlserver"].requires = ["wtdbo"]
302317
if self.settings.os == "Windows":
303318
self.cpp_info.components["wtdbomssqlserver"].system_libs.append("odbc32")
304319
else:
305320
self.cpp_info.components["wtdbomssqlserver"].requires.append("odbc::odbc")
306321

307-
def _lib_name(self, name):
308-
if self.settings.build_type == "Debug":
309-
return name + "d"
310-
return name
322+
# TODO: to remove in conan v2 once cmake_find_package* generators removed
323+
self.cpp_info.filenames["cmake_find_package"] = "wt"
324+
self.cpp_info.filenames["cmake_find_package_multi"] = "wt"
325+
self.cpp_info.names["cmake_find_package"] = "Wt"
326+
self.cpp_info.names["cmake_find_package_multi"] = "Wt"
327+
self.cpp_info.components["wtmain"].names["cmake_find_package"] = "Wt"
328+
self.cpp_info.components["wtmain"].names["cmake_find_package_multi"] = "Wt"
329+
if self.options.with_test:
330+
self.cpp_info.components["wttest"].names["cmake_find_package"] = "Test"
331+
self.cpp_info.components["wttest"].names["cmake_find_package_multi"] = "Test"
332+
if self.options.connector_http:
333+
self.cpp_info.components["wthttp"].names["cmake_find_package"] = "HTTP"
334+
self.cpp_info.components["wthttp"].names["cmake_find_package_multi"] = "HTTP"
335+
if self.options.get_safe("connector_isapi"):
336+
self.cpp_info.components["wtisapi"].names["cmake_find_package"] = "Isapi"
337+
self.cpp_info.components["wtisapi"].names["cmake_find_package_multi"] = "Isapi"
338+
if self.options.get_safe("connector_fcgi"):
339+
self.cpp_info.components["wtfcgi"].names["cmake_find_package"] = "FCGI"
340+
self.cpp_info.components["wtfcgi"].names["cmake_find_package_multi"] = "FCGI"
341+
if self.options.with_dbo:
342+
self.cpp_info.components["wtdbo"].names["cmake_find_package"] = "Dbo"
343+
self.cpp_info.components["wtdbo"].names["cmake_find_package_multi"] = "Dbo"
344+
if self.options.get_safe("with_sqlite"):
345+
self.cpp_info.components["wtdbosqlite3"].names["cmake_find_package"] = "DboSqlite3"
346+
self.cpp_info.components["wtdbosqlite3"].names["cmake_find_package_multi"] = "DboSqlite3"
347+
if self.options.get_safe("with_postgres"):
348+
self.cpp_info.components["wtdbopostgres"].names["cmake_find_package"] = "DboPostgres"
349+
self.cpp_info.components["wtdbopostgres"].names["cmake_find_package_multi"] = "DboPostgres"
350+
if self.options.get_safe("with_mysql"):
351+
self.cpp_info.components["wtdbomysql"].names["cmake_find_package"] = "DboMySQL"
352+
self.cpp_info.components["wtdbomysql"].names["cmake_find_package_multi"] = "DboMySQL"
353+
if self.options.get_safe("with_mssql"):
354+
self.cpp_info.components["wtdbomssqlserver"].names["cmake_find_package"] = "DboMSSQLServer"
355+
self.cpp_info.components["wtdbomssqlserver"].names["cmake_find_package_multi"] = "DboMSSQLServer"

recipes/wt/all/test_package/CMakeLists.txt

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@ cmake_minimum_required(VERSION 3.1)
22
project(test_package)
33

44
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
5-
conan_basic_setup()
6-
7-
find_package(wt REQUIRED Wt HTTP CONFIG)
8-
if(WITH_DBO)
9-
find_package(wt REQUIRED Dbo CONFIG)
10-
endif()
5+
conan_basic_setup(TARGETS)
116

127
add_executable(${PROJECT_NAME} test_package.cpp)
138
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)
14-
target_link_libraries(${PROJECT_NAME} Wt::Wt Wt::HTTP)
9+
10+
set(WT_COMPONENTS Wt HTTP)
11+
set(WT_TARGETS Wt::Wt Wt::HTTP)
1512
if(WITH_DBO)
16-
target_link_libraries(${PROJECT_NAME} Wt::Dbo)
17-
target_compile_definitions(${PROJECT_NAME} PRIVATE "WITH_DBO")
13+
target_compile_definitions(${PROJECT_NAME} PRIVATE WITH_DBO)
14+
list(APPEND WT_COMPONENTS Dbo)
15+
list(APPEND WT_TARGETS Wt::Dbo)
1816
endif()
17+
18+
find_package(wt REQUIRED ${WT_COMPONENTS} CONFIG)
19+
target_link_libraries(${PROJECT_NAME} PRIVATE ${WT_TARGETS})

recipes/wt/all/test_package/conanfile.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44

55
class TestPackageConan(ConanFile):
6-
settings = "os", "compiler", "build_type", "arch"
6+
settings = "os", "arch", "compiler", "build_type"
77
generators = "cmake", "cmake_find_package_multi"
88

99
def build(self):
@@ -13,7 +13,7 @@ def build(self):
1313
cmake.build()
1414

1515
def test(self):
16-
if not tools.cross_building(self.settings):
16+
if not tools.cross_building(self):
1717
bin_path = os.path.join("bin", "test_package")
1818
args = " --docroot . --http-listen http://127.0.0.1:8080"
1919
self.run(bin_path + args, run_environment=True)

recipes/wt/config.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
versions:
2-
"4.3.1":
2+
"4.6.0":
33
folder: all
4-
"4.4.0":
4+
"4.5.1":
55
folder: all
66
"4.5.0":
77
folder: all
8-
"4.5.1":
8+
"4.4.0":
99
folder: all
10-
"4.6.0":
10+
"4.3.1":
1111
folder: all

0 commit comments

Comments
 (0)