Austin Schuh | e89fa2d | 2019-08-14 20:24:23 -0700 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | # -*- coding: utf-8 -*- |
| 3 | |
| 4 | """Conan recipe package for Google FlatBuffers |
| 5 | """ |
| 6 | import os |
| 7 | import shutil |
| 8 | from conans import ConanFile, CMake, tools |
| 9 | |
| 10 | |
| 11 | class FlatbuffersConan(ConanFile): |
| 12 | name = "flatbuffers" |
| 13 | license = "Apache-2.0" |
| 14 | url = "https://github.com/google/flatbuffers" |
| 15 | homepage = "http://google.github.io/flatbuffers/" |
| 16 | author = "Wouter van Oortmerssen" |
| 17 | topics = ("conan", "flatbuffers", "serialization", "rpc", "json-parser") |
| 18 | description = "Memory Efficient Serialization Library" |
| 19 | settings = "os", "compiler", "build_type", "arch" |
| 20 | options = {"shared": [True, False], "fPIC": [True, False]} |
| 21 | default_options = {"shared": False, "fPIC": True} |
| 22 | generators = "cmake" |
| 23 | exports = "LICENSE.txt" |
| 24 | exports_sources = ["CMake/*", "include/*", "src/*", "grpc/*", "CMakeLists.txt", "conan/CMakeLists.txt"] |
| 25 | |
| 26 | def source(self): |
| 27 | """Wrap the original CMake file to call conan_basic_setup |
| 28 | """ |
| 29 | shutil.move("CMakeLists.txt", "CMakeListsOriginal.txt") |
| 30 | shutil.move(os.path.join("conan", "CMakeLists.txt"), "CMakeLists.txt") |
| 31 | |
| 32 | def config_options(self): |
| 33 | """Remove fPIC option on Windows platform |
| 34 | """ |
| 35 | if self.settings.os == "Windows": |
| 36 | self.options.remove("fPIC") |
| 37 | |
| 38 | def configure_cmake(self): |
| 39 | """Create CMake instance and execute configure step |
| 40 | """ |
| 41 | cmake = CMake(self) |
| 42 | cmake.definitions["FLATBUFFERS_BUILD_TESTS"] = False |
| 43 | cmake.definitions["FLATBUFFERS_BUILD_SHAREDLIB"] = self.options.shared |
| 44 | cmake.definitions["FLATBUFFERS_BUILD_FLATLIB"] = not self.options.shared |
| 45 | cmake.configure() |
| 46 | return cmake |
| 47 | |
| 48 | def build(self): |
| 49 | """Configure, build and install FlatBuffers using CMake. |
| 50 | """ |
| 51 | cmake = self.configure_cmake() |
| 52 | cmake.build() |
| 53 | |
| 54 | def package(self): |
| 55 | """Copy Flatbuffers' artifacts to package folder |
| 56 | """ |
| 57 | cmake = self.configure_cmake() |
| 58 | cmake.install() |
| 59 | self.copy(pattern="LICENSE.txt", dst="licenses") |
| 60 | self.copy(pattern="FindFlatBuffers.cmake", dst=os.path.join("lib", "cmake", "flatbuffers"), src="CMake") |
| 61 | self.copy(pattern="flathash*", dst="bin", src="bin") |
| 62 | self.copy(pattern="flatc*", dst="bin", src="bin") |
| 63 | if self.settings.os == "Windows" and self.options.shared: |
| 64 | if self.settings.compiler == "Visual Studio": |
| 65 | shutil.move(os.path.join(self.package_folder, "lib", "%s.dll" % self.name), |
| 66 | os.path.join(self.package_folder, "bin", "%s.dll" % self.name)) |
| 67 | elif self.settings.compiler == "gcc": |
| 68 | shutil.move(os.path.join(self.package_folder, "lib", "lib%s.dll" % self.name), |
| 69 | os.path.join(self.package_folder, "bin", "lib%s.dll" % self.name)) |
| 70 | |
| 71 | def package_info(self): |
| 72 | """Collect built libraries names and solve flatc path. |
| 73 | """ |
| 74 | self.cpp_info.libs = tools.collect_libs(self) |
| 75 | self.user_info.flatc = os.path.join(self.package_folder, "bin", "flatc") |