diff --git a/recipes/mikktspace/all/CMakeLists.txt b/recipes/mikktspace/all/CMakeLists.txt index 3eb15462a684a..d8848832b7e30 100644 --- a/recipes/mikktspace/all/CMakeLists.txt +++ b/recipes/mikktspace/all/CMakeLists.txt @@ -1,22 +1,20 @@ cmake_minimum_required(VERSION 3.4) -project(mikktspace) +project(mikktspace LANGUAGES C) -include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup() +add_library(mikktspace ${MIKKTSPACE_SRC_DIR}/mikktspace.c) +target_include_directories(mikktspace PUBLIC ${MIKKTSPACE_SRC_DIR}) +set_target_properties(mikktspace PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) -if(WIN32 AND BUILD_SHARED_LIBS) - set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) -endif() - -add_library(mikktspace ${CMAKE_CURRENT_SOURCE_DIR}/source_subfolder/mikktspace.c) -target_include_directories(mikktspace PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/source_subfolder) -if(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux") +include(CheckFunctionExists) +check_function_exists(pow HAVE_MATH_SYSTEM) +if(NOT HAVE_MATH_SYSTEM) target_link_libraries(mikktspace PRIVATE m) endif() +include(GNUInstallDirs) install(TARGETS mikktspace RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/source_subfolder/mikktspace.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +install(FILES ${MIKKTSPACE_SRC_DIR}/mikktspace.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) diff --git a/recipes/mikktspace/all/conanfile.py b/recipes/mikktspace/all/conanfile.py index 13838e6596dd4..ebe053f1cb1f9 100644 --- a/recipes/mikktspace/all/conanfile.py +++ b/recipes/mikktspace/all/conanfile.py @@ -1,6 +1,9 @@ +from conan import ConanFile +from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout +from conan.tools.files import get, save import os -import glob -from conans import ConanFile, CMake, tools + +required_conan_version = ">=1.53.0" class MikkTSpaceConan(ConanFile): @@ -9,31 +12,19 @@ class MikkTSpaceConan(ConanFile): homepage = "https://github.com/mmikk/MikkTSpace" url = "https://github.com/conan-io/conan-center-index" license = "Zlib" - topics = ("conan", "tangent", "space", "normal") + topics = ("tangent", "space", "normal") settings = "os", "arch", "compiler", "build_type" options = { - "fPIC": [True, False], "shared": [True, False], + "fPIC": [True, False], } default_options = { + "shared": False, "fPIC": True, - "shared": False } - generators = "cmake" - exports_sources = ['CMakeLists.txt'] - - _cmake = None - - @property - def _source_subfolder(self): - return "source_subfolder" - - def source(self): - tools.get(**self.conan_data["sources"][self.version]) - extracted_dir = glob.glob('MikkTSpace-*/')[0] - os.rename(extracted_dir, self._source_subfolder) + exports_sources = "CMakeLists.txt" def config_options(self): if self.settings.os == "Windows": @@ -41,35 +32,41 @@ def config_options(self): def configure(self): if self.options.shared: - del self.options.fPIC - del self.settings.compiler.cppstd - del self.settings.compiler.libcxx + self.options.rm_safe("fPIC") + self.settings.rm_safe("compiler.cppstd") + self.settings.rm_safe("compiler.libcxx") + + def layout(self): + cmake_layout(self, src_folder="src") + + def source(self): + get(self, **self.conan_data["sources"][self.version], + destination=self.source_folder, strip_root=True) - def _configure_cmake(self): - if self._cmake: - return self._cmake - self._cmake = CMake(self) - self._cmake.configure() - return self._cmake + def generate(self): + tc = CMakeToolchain(self) + tc.variables["MIKKTSPACE_SRC_DIR"] = self.source_folder.replace("\\", "/") + tc.generate() def build(self): - cmake = self._configure_cmake() + cmake = CMake(self) + cmake.configure(build_script_folder=os.path.join(self.source_folder, os.pardir)) cmake.build() @property def _extracted_license(self): - content_lines = open(os.path.join(self.source_folder, self._source_subfolder, "mikktspace.h")).readlines() + content_lines = open(os.path.join(self.source_folder, "mikktspace.h")).readlines() license_content = [] for i in range(4, 21): license_content.append(content_lines[i][4:-1]) return "\n".join(license_content) def package(self): - tools.save(os.path.join(self.package_folder, "licenses", "LICENSE"), self._extracted_license) - cmake = self._configure_cmake() + save(self, os.path.join(self.package_folder, "licenses", "LICENSE"), self._extracted_license) + cmake = CMake(self) cmake.install() def package_info(self): self.cpp_info.libs = ["mikktspace"] - if self.settings.os == "Linux": + if not self.options.shared and self.settings.os in ["Linux", "FreeBSD"]: self.cpp_info.system_libs = ["m"] diff --git a/recipes/mikktspace/all/test_package/CMakeLists.txt b/recipes/mikktspace/all/test_package/CMakeLists.txt index bbb1d4b048d19..e098a7e87ec40 100644 --- a/recipes/mikktspace/all/test_package/CMakeLists.txt +++ b/recipes/mikktspace/all/test_package/CMakeLists.txt @@ -1,9 +1,7 @@ cmake_minimum_required(VERSION 3.1) -project(test_package) +project(test_package LANGUAGES C) -include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup() - -add_executable(${CMAKE_PROJECT_NAME} test_package.cpp) -target_link_libraries(${CMAKE_PROJECT_NAME} ${CONAN_LIBS}) +find_package(mikktspace REQUIRED CONFIG) +add_executable(${CMAKE_PROJECT_NAME} test_package.c) +target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE mikktspace::mikktspace) diff --git a/recipes/mikktspace/all/test_package/conanfile.py b/recipes/mikktspace/all/test_package/conanfile.py index ffc9be1e577c3..0a6bc68712d90 100644 --- a/recipes/mikktspace/all/test_package/conanfile.py +++ b/recipes/mikktspace/all/test_package/conanfile.py @@ -1,10 +1,19 @@ +from conan import ConanFile +from conan.tools.build import can_run +from conan.tools.cmake import CMake, cmake_layout import os -from conans import ConanFile, CMake, tools class TestPackageConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - generators = "cmake_find_package", "cmake" + settings = "os", "arch", "compiler", "build_type" + generators = "CMakeToolchain", "CMakeDeps", "VirtualRunEnv" + test_type = "explicit" + + def layout(self): + cmake_layout(self) + + def requirements(self): + self.requires(self.tested_reference_str) def build(self): cmake = CMake(self) @@ -12,5 +21,6 @@ def build(self): cmake.build() def test(self): - if not tools.cross_building(self.settings): - self.run(os.path.join("bin", "test_package"), run_environment=True) + if can_run(self): + bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package") + self.run(bin_path, env="conanrun") diff --git a/recipes/mikktspace/all/test_package/test_package.cpp b/recipes/mikktspace/all/test_package/test_package.c similarity index 75% rename from recipes/mikktspace/all/test_package/test_package.cpp rename to recipes/mikktspace/all/test_package/test_package.c index 8e159e04557a6..b1fe82cf21c2a 100644 --- a/recipes/mikktspace/all/test_package/test_package.cpp +++ b/recipes/mikktspace/all/test_package/test_package.c @@ -1,15 +1,9 @@ -#include -#include -#include -#include -#include -#include - #include +#include static int GetNumFaces(const SMikkTSpaceContext *pContext) { - return 0; + return 0; } int main() diff --git a/recipes/mikktspace/all/test_v1_package/CMakeLists.txt b/recipes/mikktspace/all/test_v1_package/CMakeLists.txt new file mode 100644 index 0000000000000..0d20897301b68 --- /dev/null +++ b/recipes/mikktspace/all/test_v1_package/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.1) +project(test_package) + +include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) +conan_basic_setup(TARGETS) + +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../test_package + ${CMAKE_CURRENT_BINARY_DIR}/test_package) diff --git a/recipes/mikktspace/all/test_v1_package/conanfile.py b/recipes/mikktspace/all/test_v1_package/conanfile.py new file mode 100644 index 0000000000000..38f4483872d47 --- /dev/null +++ b/recipes/mikktspace/all/test_v1_package/conanfile.py @@ -0,0 +1,17 @@ +from conans import ConanFile, CMake, tools +import os + + +class TestPackageConan(ConanFile): + settings = "os", "arch", "compiler", "build_type" + generators = "cmake", "cmake_find_package_multi" + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if not tools.cross_building(self): + bin_path = os.path.join("bin", "test_package") + self.run(bin_path, run_environment=True)