mirror of
				https://github.com/Xahau/xahaud.git
				synced 2025-11-04 10:45:50 +00:00 
			
		
		
		
	Remove recipe for RocksDB and add recipe for Snappy (#4431)
- Copies the recipe for Snappy from Conan Center, but removes three lines that explicitly link the standard library, which prevents builders from statically linking it. - Removes the recipe for RocksDB now that an official recipe for version 6.27.3 is in Conan Center. Developers will likely need to remove cached versions of both RocksDB and Snappy: ``` conan remove -f rocksdb conan remove -f snappy ``` --------- Co-authored-by: John Freeman <jfreeman08@gmail.com>
This commit is contained in:
		
							
								
								
									
										4
									
								
								.github/workflows/nix.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/nix.yml
									
									
									
									
										vendored
									
									
								
							@@ -69,8 +69,8 @@ jobs:
 | 
			
		||||
        with:
 | 
			
		||||
            path: ${{ steps.conan-cache.outputs.dir }}
 | 
			
		||||
            key: ${{ hashFiles('~/.conan/profiles/default', 'conanfile.py', 'external/rocksdb/*', '.github/workflows/nix.yml') }}
 | 
			
		||||
      - name: export RocksDB
 | 
			
		||||
        run: conan export external/rocksdb
 | 
			
		||||
      - name: export Snappy
 | 
			
		||||
        run: conan export external/snappy snappy/1.1.9@
 | 
			
		||||
      - name: install dependencies
 | 
			
		||||
        run: |
 | 
			
		||||
          mkdir ${build_dir}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								.github/workflows/windows.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/windows.yml
									
									
									
									
										vendored
									
									
								
							@@ -69,8 +69,8 @@ jobs:
 | 
			
		||||
        with:
 | 
			
		||||
            path: ${{ steps.conan-cache.outputs.dir }}
 | 
			
		||||
            key: ${{ hashFiles('~/.conan/profiles/default', 'conanfile.py', 'external/rocksdb/*', '.github/workflows/windows.yml') }}
 | 
			
		||||
      - name: export RocksDB
 | 
			
		||||
        run: conan export external/rocksdb
 | 
			
		||||
      - name: export Snappy
 | 
			
		||||
        run: conan export external/snappy snappy/1.1.9@
 | 
			
		||||
      - name: install dependencies
 | 
			
		||||
        run: |
 | 
			
		||||
          mkdir $env:build_dir
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								BUILD.md
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								BUILD.md
									
									
									
									
									
								
							@@ -243,7 +243,7 @@ The first is for a single-configuration generator (e.g. Unix Makefiles) on
 | 
			
		||||
Linux or MacOS:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
conan export external/rocksdb
 | 
			
		||||
conan export external/snappy snappy/1.1.9@
 | 
			
		||||
mkdir .build
 | 
			
		||||
cd .build
 | 
			
		||||
conan install .. --output-folder . --build missing --settings build_type=Release
 | 
			
		||||
@@ -256,7 +256,7 @@ The second is for a multi-configuration generator (e.g. Visual Studio) on
 | 
			
		||||
Windows:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
conan export external/rocksdb
 | 
			
		||||
conan export external/snappy snappy/1.1.9@
 | 
			
		||||
mkdir .build
 | 
			
		||||
cd .build
 | 
			
		||||
conan install .. --output-folder . --build missing --settings build_type=Release --settings compiler.runtime=MT
 | 
			
		||||
@@ -270,10 +270,10 @@ cmake --build . --config Debug
 | 
			
		||||
 | 
			
		||||
Now to explain the individual steps in each example:
 | 
			
		||||
 | 
			
		||||
1. Export our [Conan recipe for RocksDB](./external/rocksdb).
 | 
			
		||||
1. Export our [Conan recipe for Snappy](./external/snappy).
 | 
			
		||||
 | 
			
		||||
    It builds version 6.27.3, which, as of July 8, 2022,
 | 
			
		||||
    is not available in [Conan Center](https://conan.io/center/rocksdb).
 | 
			
		||||
    It does not explicitly link the C++ standard library,
 | 
			
		||||
    which allows us to statically link it.
 | 
			
		||||
 | 
			
		||||
1. Create a build directory (and move into it).
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										193
									
								
								external/rocksdb/conanfile.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										193
									
								
								external/rocksdb/conanfile.py
									
									
									
									
										vendored
									
									
								
							@@ -1,193 +0,0 @@
 | 
			
		||||
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")
 | 
			
		||||
							
								
								
									
										62
									
								
								external/rocksdb/thirdparty.inc
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								external/rocksdb/thirdparty.inc
									
									
									
									
										vendored
									
									
								
							@@ -1,62 +0,0 @@
 | 
			
		||||
if(WITH_GFLAGS)
 | 
			
		||||
  # Config with namespace available since gflags 2.2.2
 | 
			
		||||
  find_package(gflags REQUIRED)
 | 
			
		||||
  set(GFLAGS_LIB gflags::gflags)
 | 
			
		||||
  list(APPEND THIRDPARTY_LIBS ${GFLAGS_LIB})
 | 
			
		||||
  add_definitions(-DGFLAGS=1)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(WITH_SNAPPY)
 | 
			
		||||
  find_package(Snappy REQUIRED)
 | 
			
		||||
  add_definitions(-DSNAPPY)
 | 
			
		||||
  list(APPEND THIRDPARTY_LIBS Snappy::snappy)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(WITH_LZ4)
 | 
			
		||||
  find_package(lz4 REQUIRED)
 | 
			
		||||
  add_definitions(-DLZ4)
 | 
			
		||||
  list(APPEND THIRDPARTY_LIBS lz4::lz4)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(WITH_ZLIB)
 | 
			
		||||
  find_package(ZLIB REQUIRED)
 | 
			
		||||
  add_definitions(-DZLIB)
 | 
			
		||||
  list(APPEND THIRDPARTY_LIBS ZLIB::ZLIB)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
option(WITH_BZ2 "build with bzip2" OFF)
 | 
			
		||||
if(WITH_BZ2)
 | 
			
		||||
  find_package(BZip2 REQUIRED)
 | 
			
		||||
  add_definitions(-DBZIP2)
 | 
			
		||||
  list(APPEND THIRDPARTY_LIBS BZip2::BZip2)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(WITH_ZSTD)
 | 
			
		||||
  find_package(zstd REQUIRED)
 | 
			
		||||
  add_definitions(-DZSTD)
 | 
			
		||||
  list(APPEND THIRDPARTY_LIBS zstd::zstd)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# ================================================== XPRESS ==================================================
 | 
			
		||||
# This makes use of built-in Windows API, no additional includes, links to a system lib
 | 
			
		||||
 | 
			
		||||
if(WITH_XPRESS)
 | 
			
		||||
  message(STATUS "XPRESS is enabled")
 | 
			
		||||
  add_definitions(-DXPRESS)
 | 
			
		||||
  # We are using the implementation provided by the system
 | 
			
		||||
  list(APPEND SYSTEM_LIBS Cabinet.lib)
 | 
			
		||||
else()
 | 
			
		||||
  message(STATUS "XPRESS is disabled")
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# ================================================== JEMALLOC ==================================================
 | 
			
		||||
if(WITH_JEMALLOC)
 | 
			
		||||
  message(STATUS "JEMALLOC library is enabled")
 | 
			
		||||
  add_definitions(-DROCKSDB_JEMALLOC -DJEMALLOC_EXPORT= -DJEMALLOC_NO_RENAME)
 | 
			
		||||
  list(APPEND THIRDPARTY_LIBS jemalloc::jemalloc)
 | 
			
		||||
  set(ARTIFACT_SUFFIX "_je")
 | 
			
		||||
 | 
			
		||||
else ()
 | 
			
		||||
  set(ARTIFACT_SUFFIX "")
 | 
			
		||||
  message(STATUS "JEMALLOC library is disabled")
 | 
			
		||||
endif ()
 | 
			
		||||
							
								
								
									
										16
									
								
								external/snappy/conandata.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								external/snappy/conandata.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
sources:
 | 
			
		||||
  "1.1.9":
 | 
			
		||||
    url: "https://github.com/google/snappy/archive/1.1.9.tar.gz"
 | 
			
		||||
    sha256: "75c1fbb3d618dd3a0483bff0e26d0a92b495bbe5059c8b4f1c962b478b6e06e7"
 | 
			
		||||
  "1.1.8":
 | 
			
		||||
    url: "https://github.com/google/snappy/archive/1.1.8.tar.gz"
 | 
			
		||||
    sha256: "16b677f07832a612b0836178db7f374e414f94657c138e6993cbfc5dcc58651f"
 | 
			
		||||
  "1.1.7":
 | 
			
		||||
    url: "https://github.com/google/snappy/archive/1.1.7.tar.gz"
 | 
			
		||||
    sha256: "3dfa02e873ff51a11ee02b9ca391807f0c8ea0529a4924afa645fbf97163f9d4"
 | 
			
		||||
patches:
 | 
			
		||||
  "1.1.9":
 | 
			
		||||
    - patch_file: "patches/1.1.9-0001-fix-inlining-failure.patch"
 | 
			
		||||
    - patch_file: "patches/1.1.9-0002-no-Werror.patch"
 | 
			
		||||
    - patch_file: "patches/1.1.9-0003-fix-clobber-list-older-llvm.patch"
 | 
			
		||||
    - patch_file: "patches/1.1.9-0004-rtti-by-default.patch"
 | 
			
		||||
							
								
								
									
										89
									
								
								external/snappy/conanfile.py
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								external/snappy/conanfile.py
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
from conan import ConanFile
 | 
			
		||||
from conan.tools.build import check_min_cppstd
 | 
			
		||||
from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout
 | 
			
		||||
from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, rmdir
 | 
			
		||||
from conan.tools.scm import Version
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
required_conan_version = ">=1.54.0"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SnappyConan(ConanFile):
 | 
			
		||||
    name = "snappy"
 | 
			
		||||
    description = "A fast compressor/decompressor"
 | 
			
		||||
    topics = ("google", "compressor", "decompressor")
 | 
			
		||||
    url = "https://github.com/conan-io/conan-center-index"
 | 
			
		||||
    homepage = "https://github.com/google/snappy"
 | 
			
		||||
    license = "BSD-3-Clause"
 | 
			
		||||
 | 
			
		||||
    package_type = "library"
 | 
			
		||||
    settings = "os", "arch", "compiler", "build_type"
 | 
			
		||||
    options = {
 | 
			
		||||
        "shared": [True, False],
 | 
			
		||||
        "fPIC": [True, False],
 | 
			
		||||
    }
 | 
			
		||||
    default_options = {
 | 
			
		||||
        "shared": False,
 | 
			
		||||
        "fPIC": True,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    def export_sources(self):
 | 
			
		||||
        export_conandata_patches(self)
 | 
			
		||||
 | 
			
		||||
    def config_options(self):
 | 
			
		||||
        if self.settings.os == 'Windows':
 | 
			
		||||
            del self.options.fPIC
 | 
			
		||||
 | 
			
		||||
    def configure(self):
 | 
			
		||||
        if self.options.shared:
 | 
			
		||||
            self.options.rm_safe("fPIC")
 | 
			
		||||
 | 
			
		||||
    def layout(self):
 | 
			
		||||
        cmake_layout(self, src_folder="src")
 | 
			
		||||
 | 
			
		||||
    def validate(self):
 | 
			
		||||
        if self.settings.compiler.get_safe("cppstd"):
 | 
			
		||||
            check_min_cppstd(self, 11)
 | 
			
		||||
 | 
			
		||||
    def source(self):
 | 
			
		||||
        get(self, **self.conan_data["sources"][self.version], strip_root=True)
 | 
			
		||||
 | 
			
		||||
    def generate(self):
 | 
			
		||||
        tc = CMakeToolchain(self)
 | 
			
		||||
        tc.variables["SNAPPY_BUILD_TESTS"] = False
 | 
			
		||||
        if Version(self.version) >= "1.1.8":
 | 
			
		||||
            tc.variables["SNAPPY_FUZZING_BUILD"] = False
 | 
			
		||||
            tc.variables["SNAPPY_REQUIRE_AVX"] = False
 | 
			
		||||
            tc.variables["SNAPPY_REQUIRE_AVX2"] = False
 | 
			
		||||
            tc.variables["SNAPPY_INSTALL"] = True
 | 
			
		||||
        if Version(self.version) >= "1.1.9":
 | 
			
		||||
            tc.variables["SNAPPY_BUILD_BENCHMARKS"] = False
 | 
			
		||||
        tc.generate()
 | 
			
		||||
 | 
			
		||||
    def build(self):
 | 
			
		||||
        apply_conandata_patches(self)
 | 
			
		||||
        cmake = CMake(self)
 | 
			
		||||
        cmake.configure()
 | 
			
		||||
        cmake.build()
 | 
			
		||||
 | 
			
		||||
    def package(self):
 | 
			
		||||
        copy(self, "COPYING", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses"))
 | 
			
		||||
        cmake = CMake(self)
 | 
			
		||||
        cmake.install()
 | 
			
		||||
        rmdir(self, os.path.join(self.package_folder, "lib", "cmake"))
 | 
			
		||||
 | 
			
		||||
    def package_info(self):
 | 
			
		||||
        self.cpp_info.set_property("cmake_file_name", "Snappy")
 | 
			
		||||
        self.cpp_info.set_property("cmake_target_name", "Snappy::snappy")
 | 
			
		||||
        # TODO: back to global scope in conan v2 once cmake_find_package* generators removed
 | 
			
		||||
        self.cpp_info.components["snappylib"].libs = ["snappy"]
 | 
			
		||||
        if not self.options.shared:
 | 
			
		||||
            if self.settings.os in ["Linux", "FreeBSD"]:
 | 
			
		||||
                self.cpp_info.components["snappylib"].system_libs.append("m")
 | 
			
		||||
 | 
			
		||||
        # TODO: to remove in conan v2 once cmake_find_package* generators removed
 | 
			
		||||
        self.cpp_info.names["cmake_find_package"] = "Snappy"
 | 
			
		||||
        self.cpp_info.names["cmake_find_package_multi"] = "Snappy"
 | 
			
		||||
        self.cpp_info.components["snappylib"].names["cmake_find_package"] = "snappy"
 | 
			
		||||
        self.cpp_info.components["snappylib"].names["cmake_find_package_multi"] = "snappy"
 | 
			
		||||
        self.cpp_info.components["snappylib"].set_property("cmake_target_name", "Snappy::snappy")
 | 
			
		||||
							
								
								
									
										14
									
								
								external/snappy/patches/1.1.9-0001-fix-inlining-failure.patch
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								external/snappy/patches/1.1.9-0001-fix-inlining-failure.patch
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
Fixes the following error:
 | 
			
		||||
error: inlining failed in call to ‘always_inline’ ‘size_t snappy::AdvanceToNextTag(const uint8_t**, size_t*)’: function body can be overwritten at link time
 | 
			
		||||
 | 
			
		||||
--- snappy-stubs-internal.h
 | 
			
		||||
+++ snappy-stubs-internal.h
 | 
			
		||||
@@ -100,7 +100,7 @@
 | 
			
		||||
 
 | 
			
		||||
 // Inlining hints.
 | 
			
		||||
 #ifdef HAVE_ATTRIBUTE_ALWAYS_INLINE
 | 
			
		||||
-#define SNAPPY_ATTRIBUTE_ALWAYS_INLINE __attribute__((always_inline))
 | 
			
		||||
+#define SNAPPY_ATTRIBUTE_ALWAYS_INLINE
 | 
			
		||||
 #else
 | 
			
		||||
 #define SNAPPY_ATTRIBUTE_ALWAYS_INLINE
 | 
			
		||||
 #endif
 | 
			
		||||
							
								
								
									
										12
									
								
								external/snappy/patches/1.1.9-0002-no-Werror.patch
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								external/snappy/patches/1.1.9-0002-no-Werror.patch
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
--- CMakeLists.txt
 | 
			
		||||
+++ CMakeLists.txt
 | 
			
		||||
@@ -69,7 +69,7 @@
 | 
			
		||||
-  # Use -Werror for clang only.
 | 
			
		||||
+if(0)
 | 
			
		||||
   if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
 | 
			
		||||
     if(NOT CMAKE_CXX_FLAGS MATCHES "-Werror")
 | 
			
		||||
       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
 | 
			
		||||
     endif(NOT CMAKE_CXX_FLAGS MATCHES "-Werror")
 | 
			
		||||
   endif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
 | 
			
		||||
-
 | 
			
		||||
+endif()
 | 
			
		||||
							
								
								
									
										12
									
								
								external/snappy/patches/1.1.9-0003-fix-clobber-list-older-llvm.patch
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								external/snappy/patches/1.1.9-0003-fix-clobber-list-older-llvm.patch
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
asm clobbers do not work for clang < 9 and apple-clang < 11 (found by SpaceIm)
 | 
			
		||||
--- snappy.cc
 | 
			
		||||
+++ snappy.cc
 | 
			
		||||
@@ -1026,7 +1026,7 @@
 | 
			
		||||
   size_t literal_len = *tag >> 2;
 | 
			
		||||
   size_t tag_type = *tag;
 | 
			
		||||
   bool is_literal;
 | 
			
		||||
-#if defined(__GNUC__) && defined(__x86_64__)
 | 
			
		||||
+#if defined(__GNUC__) && defined(__x86_64__) && ( (!defined(__clang__) && !defined(__APPLE__)) || (!defined(__APPLE__) && defined(__clang__) && (__clang_major__ >= 9)) || (defined(__APPLE__) && defined(__clang__) && (__clang_major__ > 11)) )
 | 
			
		||||
   // TODO clang misses the fact that the (c & 3) already correctly
 | 
			
		||||
   // sets the zero flag.
 | 
			
		||||
   asm("and $3, %k[tag_type]\n\t"
 | 
			
		||||
							
								
								
									
										20
									
								
								external/snappy/patches/1.1.9-0004-rtti-by-default.patch
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								external/snappy/patches/1.1.9-0004-rtti-by-default.patch
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
--- a/CMakeLists.txt
 | 
			
		||||
+++ b/CMakeLists.txt
 | 
			
		||||
@@ -53,8 +53,6 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
 | 
			
		||||
   add_definitions(-D_HAS_EXCEPTIONS=0)
 | 
			
		||||
 
 | 
			
		||||
   # Disable RTTI.
 | 
			
		||||
-  string(REGEX REPLACE "/GR" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
 | 
			
		||||
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR-")
 | 
			
		||||
 else(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
 | 
			
		||||
   # Use -Wall for clang and gcc.
 | 
			
		||||
   if(NOT CMAKE_CXX_FLAGS MATCHES "-Wall")
 | 
			
		||||
@@ -78,8 +76,6 @@ endif()
 | 
			
		||||
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
 | 
			
		||||
 
 | 
			
		||||
   # Disable RTTI.
 | 
			
		||||
-  string(REGEX REPLACE "-frtti" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
 | 
			
		||||
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
 | 
			
		||||
 endif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
 | 
			
		||||
 
 | 
			
		||||
 # BUILD_SHARED_LIBS is a standard CMake variable, but we declare it here to make
 | 
			
		||||
		Reference in New Issue
	
	Block a user