From edabf194611dffcf59738b613b715e0ec027c940 Mon Sep 17 00:00:00 2001 From: Jamie Snape Date: Mon, 19 Dec 2016 11:44:39 -0500 Subject: [PATCH 1/2] Write and install CMake package config files This allows find_package(tinyobjloader) to be called. --- CMakeLists.txt | 60 +++++++++++++++++++++++++++++++++-- tinyobjloader-config.cmake.in | 9 ++++++ 2 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 tinyobjloader-config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index e43ea57..956c0c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,8 @@ #on the platform and configuration it is set to build in. project(tinyobjloader) cmake_minimum_required(VERSION 2.8.6) +set(TINYOBJLOADER_SOVERSION 1) +set(TINYOBJLOADER_VERSION 1.0.4) #Folder Shortcuts set(TINYOBJLOADEREXAMPLES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/examples) @@ -22,15 +24,32 @@ set(tinyobjloader-examples-objsticher ${TINYOBJLOADEREXAMPLES_DIR}/obj_sticher/obj_sticher.cc ) +#Install destinations +set(TINYOBJLOADER_CMAKE_DIR lib/cmake) +set(TINYOBJLOADER_INCLUDE_DIR include) +set(TINYOBJLOADER_LIBRARY_DIR lib) + option(TINYOBJLOADER_BUILD_TEST_LOADER "Build Example Loader Application" OFF) option(TINYOBJLOADER_COMPILATION_SHARED "Build as shared library" OFF) if (TINYOBJLOADER_COMPILATION_SHARED) add_library(tinyobjloader SHARED ${tinyobjloader-Source}) + set_target_properties(tinyobjloader PROPERTIES + SOVERSION ${TINYOBJLOADER_SOVERSION} + ) else() add_library(tinyobjloader STATIC ${tinyobjloader-Source}) endif() +set_target_properties(tinyobjloader PROPERTIES VERSION ${TINYOBJLOADER_VERSION}) + +target_include_directories(tinyobjloader INTERFACE + $ + $ + ) + +export(TARGETS tinyobjloader FILE ${PROJECT_NAME}-targets.cmake) + if(TINYOBJLOADER_BUILD_TEST_LOADER) add_executable(test_loader ${tinyobjloader-Example-Source}) target_link_libraries(test_loader tinyobjloader) @@ -48,14 +67,51 @@ if (TINYOBJLOADER_BUILD_OBJ_STICHER) ) endif() +#Write CMake package config files +include(CMakePackageConfigHelpers) + +configure_package_config_file( + tinyobjloader-config.cmake.in + tinyobjloader-config.cmake + INSTALL_DESTINATION + ${TINYOBJLOADER_CMAKE_DIR} + PATH_VARS + TINYOBJLOADER_INCLUDE_DIR + TINYOBJLOADER_LIBRARY_DIR + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) + +write_basic_package_version_file(tinyobjloader-config-version.cmake + VERSION + ${TINYOBJLOADER_VERSION} + COMPATIBILITY + SameMajorVersion + ) + #Installation install ( TARGETS tinyobjloader + EXPORT ${PROJECT_NAME}-targets DESTINATION - lib + ${TINYOBJLOADER_LIBRARY_DIR} + PUBLIC_HEADER DESTINATION + ${TINYOBJLOADER_INCLUDE_DIR} + RUNTIME DESTINATION + bin + ) +install ( EXPORT + ${PROJECT_NAME}-targets + DESTINATION + ${TINYOBJLOADER_LIBRARY_DIR} ) install ( FILES tiny_obj_loader.h DESTINATION - include + ${TINYOBJLOADER_INCLUDE_DIR} + ) +install ( FILES + "${CMAKE_CURRENT_BINARY_DIR}/tinyobjloader-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/tinyobjloader-config-version.cmake" + DESTINATION + ${TINYOBJLOADER_CMAKE_DIR} ) diff --git a/tinyobjloader-config.cmake.in b/tinyobjloader-config.cmake.in new file mode 100644 index 0000000..2d6b3e3 --- /dev/null +++ b/tinyobjloader-config.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +set(TINYOBJLOADER_VERSION "@TINYOBJLOADER_VERSION@") + +set_and_check(TINYOBJLOADER_INCLUDE_DIRS "@PACKAGE_TINYOBJLOADER_INCLUDE_DIR@") +set_and_check(TINYOBJLOADER_LIBRARY_DIRS "@PACKAGE_TINYOBJLOADER_LIBRARY_DIR@") +set(TINYOBJLOADER_LIBRARIES tinyobjloader) + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake") From e88016c63f814ceaa84127273cfd1002a1922209 Mon Sep 17 00:00:00 2001 From: Jamie Snape Date: Mon, 19 Dec 2016 11:45:00 -0500 Subject: [PATCH 2/2] Write and install pkg-config file --- CMakeLists.txt | 9 +++++++++ tinyobjloader.pc.in | 15 +++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 tinyobjloader.pc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 956c0c2..0ebd0af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,6 +28,7 @@ set(tinyobjloader-examples-objsticher set(TINYOBJLOADER_CMAKE_DIR lib/cmake) set(TINYOBJLOADER_INCLUDE_DIR include) set(TINYOBJLOADER_LIBRARY_DIR lib) +set(TINYOBJLOADER_PKGCONFIG_DIR lib/pkgconfig) option(TINYOBJLOADER_BUILD_TEST_LOADER "Build Example Loader Application" OFF) option(TINYOBJLOADER_COMPILATION_SHARED "Build as shared library" OFF) @@ -88,6 +89,9 @@ write_basic_package_version_file(tinyobjloader-config-version.cmake SameMajorVersion ) +#pkg-config file +configure_file(tinyobjloader.pc.in tinyobjloader.pc @ONLY) + #Installation install ( TARGETS tinyobjloader @@ -115,3 +119,8 @@ install ( FILES DESTINATION ${TINYOBJLOADER_CMAKE_DIR} ) +install ( FILES + "${CMAKE_CURRENT_BINARY_DIR}/tinyobjloader.pc" + DESTINATION + ${TINYOBJLOADER_PKGCONFIG_DIR} + ) diff --git a/tinyobjloader.pc.in b/tinyobjloader.pc.in new file mode 100644 index 0000000..7585fee --- /dev/null +++ b/tinyobjloader.pc.in @@ -0,0 +1,15 @@ +# Generated by CMake @CMAKE_VERSION@ for @PROJECT_NAME@. Any changes to this +# file will be overwritten by the next CMake run. The input file was +# tinyobjloader.pc.in. + +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${prefix}/@TINYOBJLOADER_LIBRARY_DIR@ +includedir=${prefix}/@TINYOBJLOADER_INCLUDE_DIR@ + +Name: @PROJECT_NAME@ +Description: Tiny but powerful single file wavefront obj loader +URL: https://syoyo.github.io/tinyobjloader/ +Version: @TINYOBJLOADER_VERSION@ +Libs: -L${libdir} -ltinyobjloader +Cflags: -I${includedir}