import os from conan import ConanFile from conan.tools.cmake import CMakeToolchain, CMakeDeps, CMake from conan.tools.files import copy from conan.tools.scm import Git, Version required_conan_version = ">=2.3" class rse_terrain(ConanFile): name = "rspterrainlib" package_type = "library" version = "2.1.0" revision_mode = "scm" license = "GPL-3.0" author = "JackCarterSmith " url = "https://git.jcsmith.fr/JCS-Prod/RSE-Terrain" description = "Rogue Squadron 3D (PC) game terrain files (hmp) extractor" settings = "os", "compiler", "build_type", "arch" generators = "CMakeDeps" options = { "shared": [True, False], "tools": [True, False], "fPIC": [True, False] } default_options = { "shared": True, "tools": False, "fPIC": True } @property def _is_msvc(self): return str(self.settings.compiler) in ["Visual Studio", "msvc"] #def validate(self): # if self.settings.os == "Macos": # raise ConanInvalidConfiguration("MacOS not supported") def config_options(self): if self.settings.os == "Windows": del self.options.fPIC def configure(self): self.options["libpng"].shared = True self.options["libpng"].sse = True if self.options.shared: self.options.rm_safe("fPIC") def requirements(self): if self.options.tools: self.requires("glew/2.2.0") self.requires("zlib/1.3.1") self.requires("libpng/1.6.43") def source(self): git = Git(self) cargs = ['--single-branch', '--recursive', '--depth', '1', '--branch', 'v' + self.version] git.clone(url="https://git.jcsmith.fr/JCS-Prod/RSE-Terrain.git", target=".", args=cargs) # def _patch(self): # replace_in_file(self, os.path.join(self.source_folder, "RSPTerrainLib", "CMakeLists.txt"), # 'set_target_properties(rsp-texture-libstatic PROPERTIES OUTPUT_NAME "${RSP_TEXTURE_LIB_NAME}_static")', # 'set_target_properties(rsp-texture-libstatic PROPERTIES OUTPUT_NAME "${RSP_TEXTURE_LIB_NAME}")') def export_sources(self): copy(self, "CMakeLists.txt", self.recipe_folder, self.export_sources_folder) # def layout(self): # cmake_layout(self, src_folder='.', build_folder='build') def generate(self): tc = CMakeToolchain(self) tc.cache_variables["RSPTERRAIN_SHARED"] = self.options.shared tc.cache_variables["RSPTERRAIN_STATIC"] = not self.options.shared tc.cache_variables["BUILD_TOOLS"] = self.options.tools #tc.cache_variables["BUILD_DEBUG"] = self.settings.build_type == "Debug" tc.generate() #cmdeps = CMakeDeps(self) #cmpdeps.set_property("zlib", "cmake_find_mode", "both") #cmpdeps.set_property("libpng", "cmake_find_mode", "both") #if self.options.shared: #cmdeps.configuration = "ReleaseShared" #cmdeps.generate() for dep in self.dependencies.values(): if len(dep.cpp_info.bindirs) > 0: if self.settings.os == "Windows": if self._is_msvc: copy(self, "*.dll", dep.cpp_info.bindirs[0], os.path.join(self.build_folder, "bin", str(self.settings.build_type))) else: copy(self, "*.dll", dep.cpp_info.bindirs[0], os.path.join(self.build_folder, "bin")) else: copy(self, "*.so", dep.cpp_info.bindirs[0], os.path.join(self.build_folder, "bin")) def build(self): cmbuilder = CMake(self) #self._patch() cmbuilder.configure() cmbuilder.build() def package(self): copy(self, "LICENSE", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses")) copy(self, pattern="*.h", src=os.path.join(self.source_folder, "include"), dst=os.path.join(self.package_folder, "include")) copy(self, pattern="*.a", src=self.build_folder, dst=os.path.join(self.package_folder, "lib"), keep_path=False) copy(self, pattern="*.so", src=self.build_folder, dst=os.path.join(self.package_folder, "lib"), keep_path=False) copy(self, pattern="*.lib", src=self.build_folder, dst=os.path.join(self.package_folder, "lib"), keep_path=False) copy(self, pattern="*.dll", src=self.build_folder, dst=os.path.join(self.package_folder, "bin"), keep_path=False) def package_info(self): self.cpp_info.set_property("cmake_file_name", "RSETerrain") self.cpp_info.set_property("cmake_target_name", "RSETerrain") self.cpp_info.set_property("cmake_module_target_name", "RSETerrain::RSETerrain") self.cpp_info.set_property("cmake_find_mode", "both") self.cpp_info.names["cmake_find_package"] = "RSETerrain" self.cpp_info.names["cmake_find_package_multi"] = "RSETerrain" self.cpp_info.includedirs = ["include"] prefix = "lib" if self._is_msvc else "" #suffix = "d" if self.settings.build_type == "Debug" else "" suffix = "" major_min_version = f"{Version(self.version).major}{Version(self.version).minor}" self.cpp_info.libs = ["{}RSETerrain{}{}".format(prefix, major_min_version, suffix)] if self.settings.os in ["Linux", "Android", "FreeBSD", "SunOS", "AIX"]: self.cpp_info.system_libs.append("m")