Skip to content

Commit 0b200ba

Browse files
committed
librhash: switch to custom CMakeLists.txt
The build scripts in the project are quite non-standard and not too portable. Based on rhash/RHash#103
1 parent 9b142c8 commit 0b200ba

File tree

4 files changed

+67
-94
lines changed

4 files changed

+67
-94
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Based on https://github.com/rhash/RHash/pull/103
2+
cmake_minimum_required(VERSION 3.15)
3+
project(librhash LANGUAGES C)
4+
5+
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/src/version.h" versionfile)
6+
string(REGEX MATCH "#define VERSION \"([0-9]*)\.([0-9]*)\.([0-9]*)\"" _ ${versionfile})
7+
set(RHASH_VERSION_MAJOR ${CMAKE_MATCH_1})
8+
set(RHASH_VERSION_MINOR ${CMAKE_MATCH_2})
9+
set(RHASH_VERSION_PATCH ${CMAKE_MATCH_3})
10+
set(RHASH_VERSION "${RHASH_VERSION_MAJOR}.${RHASH_VERSION_MINOR}.${RHASH_VERSION_PATCH}")
11+
12+
option(USE_OPENSSL "Enable OpenSSL (optimized hash functions) support" ON)
13+
14+
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
15+
16+
set(SRC_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/src/librhash")
17+
file(GLOB SOURCE_FILES "${SRC_ROOT}/*.c")
18+
file(GLOB HEADER_FILES "${SRC_ROOT}/*.h")
19+
20+
add_library(${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES})
21+
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${CMAKE_PROJECT_NAME}")
22+
23+
if(USE_OPENSSL)
24+
find_package(OpenSSL REQUIRED)
25+
target_link_libraries(${PROJECT_NAME} OpenSSL::Crypto)
26+
target_compile_definitions(${PROJECT_NAME} PUBLIC USE_OPENSSL)
27+
endif()
28+
29+
if(MSVC)
30+
target_compile_definitions(${PROJECT_NAME} PRIVATE _CRT_SECURE_NO_DEPRECATE)
31+
endif()
32+
33+
set_target_properties(${PROJECT_NAME} PROPERTIES
34+
COMPILE_DEFINITIONS IN_RHASH
35+
DEFINE_SYMBOL RHASH_EXPORTS
36+
PREFIX ""
37+
IMPORT_PREFIX ""
38+
VERSION ${RHASH_VERSION}
39+
SOVERSION ${RHASH_VERSION_MAJOR})
40+
41+
install(TARGETS ${PROJECT_NAME}
42+
RUNTIME DESTINATION bin
43+
LIBRARY DESTINATION lib
44+
ARCHIVE DESTINATION lib)
45+
46+
install(FILES "${SRC_ROOT}/rhash.h" "${SRC_ROOT}/rhash_torrent.h"
47+
DESTINATION include)

recipes/librhash/all/conandata.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,3 @@ sources:
55
"1.3.9":
66
url: "https://downloads.sourceforge.net/project/rhash/rhash/1.3.9/rhash-1.3.9-src.tar.gz"
77
sha256: "42b1006f998adb189b1f316bf1a60e3171da047a85c4aaded2d0d26c1476c9f6"
8-
patches:
9-
"1.4.2":
10-
- patch_file: "patches/0001-1.4.2-fix-compiler-detection.patch"

recipes/librhash/all/conanfile.py

Lines changed: 20 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
import os
22

33
from conan import ConanFile
4-
from conan.errors import ConanInvalidConfiguration
5-
from conan.tools.build import cross_building
6-
from conan.tools.env import VirtualBuildEnv, VirtualRunEnv
7-
from conan.tools.files import apply_conandata_patches, chdir, copy, export_conandata_patches, get, rmdir
8-
from conan.tools.gnu import Autotools, AutotoolsToolchain, AutotoolsDeps
4+
from conan.tools.cmake import CMakeToolchain, CMakeDeps, CMake
5+
from conan.tools.files import copy, get
96
from conan.tools.layout import basic_layout
10-
from conan.tools.microsoft import is_msvc, unix_path
7+
from conan.tools.scm import Version
118

129
required_conan_version = ">=1.53.0"
1310

@@ -38,7 +35,7 @@ def _settings_build(self):
3835
return getattr(self, "settings_build", self.settings)
3936

4037
def export_sources(self):
41-
export_conandata_patches(self)
38+
copy(self, "CMakeLists.txt", src=self.recipe_folder, dst=self.export_sources_folder)
4239

4340
def config_options(self):
4441
if self.settings.os == "Windows":
@@ -57,78 +54,39 @@ def requirements(self):
5754
if self.options.with_openssl:
5855
self.requires("openssl/1.1.1w")
5956

60-
def validate(self):
61-
if is_msvc(self):
62-
raise ConanInvalidConfiguration("Visual Studio is not supported")
63-
64-
def build_requirements(self):
65-
if self._settings_build.os == "Windows":
66-
self.win_bash = True
67-
if not self.conf.get("tools.microsoft.bash:path", check_type=str):
68-
self.tool_requires("msys2/cci.latest")
69-
7057
def source(self):
7158
get(self, **self.conan_data["sources"][self.version], strip_root=True)
7259

60+
@property
61+
def _xversion(self):
62+
# https://github.com/rhash/RHash/blob/v1.4.4/configure#L339
63+
version = Version(self.version)
64+
return f"0x{version.major.value:02x}{version.minor.value:02x}{version.patch.value:02x}{0:02x}"
65+
7366
def generate(self):
74-
env = VirtualBuildEnv(self)
75-
env.generate()
76-
77-
if not cross_building(self):
78-
env = VirtualRunEnv(self)
79-
env.generate(scope="build")
80-
81-
tc = AutotoolsToolchain(self)
82-
if self.settings.compiler in ("apple-clang",):
83-
if self.settings.arch == "armv7":
84-
tc.build_type_link_flags.append("-arch armv7")
85-
elif self.settings.arch == "armv8":
86-
tc.build_type_link_flags.append("-arch arm64")
87-
tc.configure_args = [
88-
# librhash's configure script does not understand `--enable-opt1=yes`
89-
"--{}-openssl".format("enable" if self.options.with_openssl else "disable"),
90-
"--disable-gettext",
91-
]
92-
if self.options.shared:
93-
tc.configure_args += ["--enable-lib-shared", "--disable-lib-static"]
94-
else:
95-
tc.configure_args += ["--disable-lib-shared", "--enable-lib-static"]
96-
tc.make_args += [
97-
f"INCDIR={unix_path(self, os.path.join(self.package_folder, 'include'))}",
98-
f"BINDIR={unix_path(self, os.path.join(self.package_folder, 'bin'))}",
99-
f"LIBDIR={unix_path(self, os.path.join(self.package_folder, 'lib'))}",
100-
f"SO_DIR={unix_path(self, os.path.join(self.package_folder, 'lib'))}",
101-
]
67+
tc = CMakeToolchain(self)
68+
tc.cache_variables["USE_OPENSSL"] = self.options.with_openssl
69+
tc.preprocessor_definitions["RHASH_XVERSION"] = self._xversion
10270
tc.generate()
103-
104-
deps = AutotoolsDeps(self)
71+
deps = CMakeDeps(self)
10572
deps.generate()
10673

10774
def build(self):
108-
apply_conandata_patches(self)
109-
with chdir(self, self.source_folder):
110-
autotools = Autotools(self)
111-
autotools.configure()
112-
autotools.make()
75+
cmake = CMake(self)
76+
cmake.configure(build_script_folder=self.source_path.parent)
77+
cmake.build()
11378

11479
def package(self):
11580
copy(self, "COPYING", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses"))
116-
with chdir(self, self.source_folder):
117-
autotools = Autotools(self)
118-
autotools.install()
119-
autotools.make(target="install-lib-headers")
120-
with chdir(self, "librhash"):
121-
if self.options.shared:
122-
autotools.make(target="install-so-link")
123-
for path in self.package_path.iterdir():
124-
if path.is_dir() and path.name not in ["include", "lib", "licenses"]:
125-
rmdir(self, path)
81+
cmake = CMake(self)
82+
cmake.install()
12683

12784
def package_info(self):
12885
self.cpp_info.set_property("cmake_file_name", "LibRHash")
12986
self.cpp_info.set_property("cmake_target_name", "LibRHash::LibRHash")
13087
self.cpp_info.set_property("pkg_config_name", "librhash")
13188
self.cpp_info.libs = ["rhash"]
89+
self.cpp_info.defines.append(f"RHASH_XVERSION={self._xversion}")
13290

13391
# TODO: to remove in conan v2 once cmake_find_package_* generators removed
13492
self.cpp_info.names["cmake_find_package"] = "LibRHash"

recipes/librhash/all/patches/0001-1.4.2-fix-compiler-detection.patch

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)