mirror of
				https://github.com/Xahau/xahaud.git
				synced 2025-11-04 10:45:50 +00:00 
			
		
		
		
	Introduces a conanfile.py (and a Conan recipe for RocksDB) to enable building the package with Conan, choosing more recent default versions of dependencies. It removes almost all of the CMake build files related to dependencies, and the configurations for Travis CI and GitLab CI. A new set of cross-platform build instructions are written in BUILD.md. Includes example GitHub Actions workflow for each of Linux, macOS, Windows. * Test on macos-12 We use the <concepts> library which was not added to Apple Clang until version 13.1.6. The default Clang on macos-11 (the sometimes current version of macos-latest) is 13.0.0, and the default Clang on macos-12 is 14.0.0. Closes #4223.
		
			
				
	
	
		
			194 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import os
 | 
						|
import shutil
 | 
						|
from conans import ConanFile, CMake
 | 
						|
from conan.tools import microsoft as ms
 | 
						|
 | 
						|
class RocksDB(ConanFile):
 | 
						|
    name = 'rocksdb'
 | 
						|
    version = '6.27.3'
 | 
						|
 | 
						|
    license = ('GPL-2.0-only', 'Apache-2.0')
 | 
						|
    url = 'https://github.com/conan-io/conan-center-index'
 | 
						|
    description = 'A library that provides an embeddable, persistent key-value store for fast storage'
 | 
						|
    topics = ('rocksdb', 'database', 'leveldb', 'facebook', 'key-value')
 | 
						|
 | 
						|
    settings = 'os', 'compiler', 'build_type', 'arch'
 | 
						|
    options = {
 | 
						|
        'enable_sse': [False, 'sse42', 'avx2'],
 | 
						|
        'fPIC': [True, False],
 | 
						|
        'lite': [True, False],
 | 
						|
        'shared': [True, False],
 | 
						|
        'use_rtti': [True, False],
 | 
						|
        'with_gflags': [True, False],
 | 
						|
        'with_jemalloc': [True, False],
 | 
						|
        'with_lz4': [True, False],
 | 
						|
        'with_snappy': [True, False],
 | 
						|
        'with_tbb': [True, False],
 | 
						|
        'with_zlib': [True, False],
 | 
						|
        'with_zstd': [True, False],
 | 
						|
    }
 | 
						|
    default_options = {
 | 
						|
        'enable_sse': False,
 | 
						|
        'fPIC': True,
 | 
						|
        'lite': False,
 | 
						|
        'shared': False,
 | 
						|
        'use_rtti': False,
 | 
						|
        'with_gflags': False,
 | 
						|
        'with_jemalloc': False,
 | 
						|
        'with_lz4': False,
 | 
						|
        'with_snappy': False,
 | 
						|
        'with_tbb': False,
 | 
						|
        'with_zlib': False,
 | 
						|
        'with_zstd': False,
 | 
						|
    }
 | 
						|
 | 
						|
    def requirements(self):
 | 
						|
        if self.options.with_gflags:
 | 
						|
            self.requires('gflags/2.2.2')
 | 
						|
        if self.options.with_jemalloc:
 | 
						|
            self.requires('jemalloc/5.2.1')
 | 
						|
        if self.options.with_lz4:
 | 
						|
            self.requires('lz4/1.9.3')
 | 
						|
        if self.options.with_snappy:
 | 
						|
            self.requires('snappy/1.1.9')
 | 
						|
        if self.options.with_tbb:
 | 
						|
            self.requires('onetbb/2020.3')
 | 
						|
        if self.options.with_zlib:
 | 
						|
            self.requires('zlib/1.2.11')
 | 
						|
        if self.options.with_zstd:
 | 
						|
            self.requires('zstd/1.5.2')
 | 
						|
 | 
						|
    def config_options(self):
 | 
						|
        if self.settings.os == 'Windows':
 | 
						|
            del self.options.fPIC
 | 
						|
 | 
						|
    def configure(self):
 | 
						|
        if self.options.shared:
 | 
						|
            del self.options.fPIC
 | 
						|
 | 
						|
    generators = 'cmake', 'cmake_find_package'
 | 
						|
 | 
						|
    scm = {
 | 
						|
        'type': 'git',
 | 
						|
        'url': 'https://github.com/facebook/rocksdb.git',
 | 
						|
        'revision': 'v6.27.3',
 | 
						|
    }
 | 
						|
 | 
						|
    exports_sources = 'thirdparty.inc'
 | 
						|
    # For out-of-source build.
 | 
						|
    no_copy_source = True
 | 
						|
 | 
						|
    _cmake = None
 | 
						|
 | 
						|
    def _configure_cmake(self):
 | 
						|
        if self._cmake:
 | 
						|
            return
 | 
						|
 | 
						|
        self._cmake = CMake(self)
 | 
						|
 | 
						|
        self._cmake.definitions['CMAKE_POSITION_INDEPENDENT_CODE'] = True
 | 
						|
 | 
						|
        self._cmake.definitions['DISABLE_STALL_NOTIF'] = False
 | 
						|
        self._cmake.definitions['FAIL_ON_WARNINGS'] = False
 | 
						|
        self._cmake.definitions['OPTDBG'] = True
 | 
						|
        self._cmake.definitions['WITH_TESTS'] = False
 | 
						|
        self._cmake.definitions['WITH_TOOLS'] = False
 | 
						|
 | 
						|
        self._cmake.definitions['WITH_GFLAGS'] = self.options.with_gflags
 | 
						|
        self._cmake.definitions['WITH_JEMALLOC'] = self.options.with_jemalloc
 | 
						|
        self._cmake.definitions['WITH_LZ4'] = self.options.with_lz4
 | 
						|
        self._cmake.definitions['WITH_SNAPPY'] = self.options.with_snappy
 | 
						|
        self._cmake.definitions['WITH_TBB'] = self.options.with_tbb
 | 
						|
        self._cmake.definitions['WITH_ZLIB'] = self.options.with_zlib
 | 
						|
        self._cmake.definitions['WITH_ZSTD'] = self.options.with_zstd
 | 
						|
 | 
						|
        self._cmake.definitions['USE_RTTI'] = self.options.use_rtti
 | 
						|
        self._cmake.definitions['ROCKSDB_LITE'] = self.options.lite
 | 
						|
        self._cmake.definitions['ROCKSDB_INSTALL_ON_WINDOWS'] = (
 | 
						|
            self.settings.os == 'Windows'
 | 
						|
        )
 | 
						|
 | 
						|
        if not self.options.enable_sse:
 | 
						|
            self._cmake.definitions['PORTABLE'] = True
 | 
						|
            self._cmake.definitions['FORCE_SSE42'] = False
 | 
						|
        elif self.options.enable_sse == 'sse42':
 | 
						|
            self._cmake.definitions['PORTABLE'] = True
 | 
						|
            self._cmake.definitions['FORCE_SSE42'] = True
 | 
						|
        elif self.options.enable_sse == 'avx2':
 | 
						|
            self._cmake.definitions['PORTABLE'] = False
 | 
						|
            self._cmake.definitions['FORCE_SSE42'] = False
 | 
						|
 | 
						|
        self._cmake.definitions['WITH_ASAN'] = False
 | 
						|
        self._cmake.definitions['WITH_BZ2'] = False
 | 
						|
        self._cmake.definitions['WITH_JNI'] = False
 | 
						|
        self._cmake.definitions['WITH_LIBRADOS'] = False
 | 
						|
        if ms.is_msvc(self):
 | 
						|
            self._cmake.definitions['WITH_MD_LIBRARY'] = (
 | 
						|
                ms.msvc_runtime_flag(self).startswith('MD')
 | 
						|
            )
 | 
						|
            self._cmake.definitions['WITH_RUNTIME_DEBUG'] = (
 | 
						|
                ms.msvc_runtime_flag(self).endswith('d')
 | 
						|
            )
 | 
						|
        self._cmake.definitions['WITH_NUMA'] = False
 | 
						|
        self._cmake.definitions['WITH_TSAN'] = False
 | 
						|
        self._cmake.definitions['WITH_UBSAN'] = False
 | 
						|
        self._cmake.definitions['WITH_WINDOWS_UTF8_FILENAMES'] = False
 | 
						|
        self._cmake.definitions['WITH_XPRESS'] = False
 | 
						|
        self._cmake.definitions['WITH_FALLOCATE'] = True
 | 
						|
 | 
						|
 | 
						|
    def build(self):
 | 
						|
        if ms.is_msvc(self):
 | 
						|
            file = os.path.join(
 | 
						|
                self.recipe_folder, '..', 'export_source', 'thirdparty.inc'
 | 
						|
            )
 | 
						|
            shutil.copy(file, self.build_folder)
 | 
						|
        self._configure_cmake()
 | 
						|
        self._cmake.configure()
 | 
						|
        self._cmake.build()
 | 
						|
 | 
						|
    def package(self):
 | 
						|
        self._configure_cmake()
 | 
						|
        self._cmake.install()
 | 
						|
 | 
						|
    def package_info(self):
 | 
						|
        self.cpp_info.filenames['cmake_find_package'] = 'RocksDB'
 | 
						|
        self.cpp_info.filenames['cmake_find_package_multi'] = 'RocksDB'
 | 
						|
        self.cpp_info.set_property('cmake_file_name', 'RocksDB')
 | 
						|
 | 
						|
        self.cpp_info.names['cmake_find_package'] = 'RocksDB'
 | 
						|
        self.cpp_info.names['cmake_find_package_multi'] = 'RocksDB'
 | 
						|
 | 
						|
        self.cpp_info.components['librocksdb'].names['cmake_find_package'] = 'rocksdb'
 | 
						|
        self.cpp_info.components['librocksdb'].names['cmake_find_package_multi'] = 'rocksdb'
 | 
						|
        self.cpp_info.components['librocksdb'].set_property(
 | 
						|
            'cmake_target_name', 'RocksDB::rocksdb'
 | 
						|
        )
 | 
						|
 | 
						|
        self.cpp_info.components['librocksdb'].libs = ['rocksdb']
 | 
						|
 | 
						|
        if self.settings.os == "Windows":
 | 
						|
            self.cpp_info.components["librocksdb"].system_libs = ["shlwapi", "rpcrt4"]
 | 
						|
            if self.options.shared:
 | 
						|
                self.cpp_info.components["librocksdb"].defines = ["ROCKSDB_DLL"]
 | 
						|
        elif self.settings.os in ["Linux", "FreeBSD"]:
 | 
						|
            self.cpp_info.components["librocksdb"].system_libs = ["pthread", "m"]
 | 
						|
 | 
						|
        if self.options.lite:
 | 
						|
            self.cpp_info.components["librocksdb"].defines.append("ROCKSDB_LITE")
 | 
						|
 | 
						|
        if self.options.with_gflags:
 | 
						|
            self.cpp_info.components["librocksdb"].requires.append("gflags::gflags")
 | 
						|
        if self.options.with_jemalloc:
 | 
						|
            self.cpp_info.components["librocksdb"].requires.append("jemalloc::jemalloc")
 | 
						|
        if self.options.with_lz4:
 | 
						|
            self.cpp_info.components["librocksdb"].requires.append("lz4::lz4")
 | 
						|
        if self.options.with_snappy:
 | 
						|
            self.cpp_info.components["librocksdb"].requires.append("snappy::snappy")
 | 
						|
        if self.options.with_tbb:
 | 
						|
            self.cpp_info.components["librocksdb"].requires.append("onetbb::onetbb")
 | 
						|
        if self.options.with_zlib:
 | 
						|
            self.cpp_info.components["librocksdb"].requires.append("zlib::zlib")
 | 
						|
        if self.options.with_zstd:
 | 
						|
            self.cpp_info.components["librocksdb"].requires.append("zstd::zstd")
 |