1*a6aa18fbSYabin Cui#!/usr/bin/env python 2*a6aa18fbSYabin Cui# -*- coding: utf-8 -*- 3*a6aa18fbSYabin Cui 4*a6aa18fbSYabin Cui# Note: Conan is supported on a best-effort basis. Abseil doesn't use Conan 5*a6aa18fbSYabin Cui# internally, so we won't know if it stops working. We may ask community 6*a6aa18fbSYabin Cui# members to help us debug any problems that arise. 7*a6aa18fbSYabin Cui 8*a6aa18fbSYabin Cuifrom conans import ConanFile, CMake, tools 9*a6aa18fbSYabin Cuifrom conans.errors import ConanInvalidConfiguration 10*a6aa18fbSYabin Cuifrom conans.model.version import Version 11*a6aa18fbSYabin Cui 12*a6aa18fbSYabin Cui 13*a6aa18fbSYabin Cuiclass AbseilConan(ConanFile): 14*a6aa18fbSYabin Cui name = "abseil" 15*a6aa18fbSYabin Cui url = "https://github.com/abseil/abseil-cpp" 16*a6aa18fbSYabin Cui homepage = url 17*a6aa18fbSYabin Cui author = "Abseil <[email protected]>" 18*a6aa18fbSYabin Cui description = "Abseil Common Libraries (C++) from Google" 19*a6aa18fbSYabin Cui license = "Apache-2.0" 20*a6aa18fbSYabin Cui topics = ("conan", "abseil", "abseil-cpp", "google", "common-libraries") 21*a6aa18fbSYabin Cui exports = ["LICENSE"] 22*a6aa18fbSYabin Cui exports_sources = ["CMakeLists.txt", "CMake/*", "absl/*"] 23*a6aa18fbSYabin Cui generators = "cmake" 24*a6aa18fbSYabin Cui settings = "os", "arch", "compiler", "build_type" 25*a6aa18fbSYabin Cui 26*a6aa18fbSYabin Cui def configure(self): 27*a6aa18fbSYabin Cui if self.settings.os == "Windows" and \ 28*a6aa18fbSYabin Cui self.settings.compiler == "Visual Studio" and \ 29*a6aa18fbSYabin Cui Version(self.settings.compiler.version.value) < "14": 30*a6aa18fbSYabin Cui raise ConanInvalidConfiguration("Abseil does not support MSVC < 14") 31*a6aa18fbSYabin Cui 32*a6aa18fbSYabin Cui def build(self): 33*a6aa18fbSYabin Cui tools.replace_in_file("CMakeLists.txt", "project(absl LANGUAGES CXX)", "project(absl LANGUAGES CXX)\ninclude(conanbuildinfo.cmake)\nconan_basic_setup()") 34*a6aa18fbSYabin Cui cmake = CMake(self) 35*a6aa18fbSYabin Cui cmake.definitions["BUILD_TESTING"] = False 36*a6aa18fbSYabin Cui cmake.configure() 37*a6aa18fbSYabin Cui cmake.build() 38*a6aa18fbSYabin Cui 39*a6aa18fbSYabin Cui def package(self): 40*a6aa18fbSYabin Cui self.copy("LICENSE", dst="licenses") 41*a6aa18fbSYabin Cui self.copy("*.h", dst="include", src=".") 42*a6aa18fbSYabin Cui self.copy("*.inc", dst="include", src=".") 43*a6aa18fbSYabin Cui self.copy("*.a", dst="lib", src=".", keep_path=False) 44*a6aa18fbSYabin Cui self.copy("*.lib", dst="lib", src=".", keep_path=False) 45*a6aa18fbSYabin Cui 46*a6aa18fbSYabin Cui def package_info(self): 47*a6aa18fbSYabin Cui if self.settings.os == "Linux": 48*a6aa18fbSYabin Cui self.cpp_info.libs = ["-Wl,--start-group"] 49*a6aa18fbSYabin Cui self.cpp_info.libs.extend(tools.collect_libs(self)) 50*a6aa18fbSYabin Cui if self.settings.os == "Linux": 51*a6aa18fbSYabin Cui self.cpp_info.libs.extend(["-Wl,--end-group", "pthread"]) 52