From 7761f8bb3154c7402d36da97e7c2b5a4af0fe3cc Mon Sep 17 00:00:00 2001 From: milahu Date: Sun, 17 Oct 2021 19:02:08 +0200 Subject: [PATCH] cmake: export openvg package in cmake and pkgconfig format --- CMakeLists.txt | 26 +++++++++++---- src/CMakeLists.txt | 80 ++++++++++++++++++++++++++++++++++++++++++--- src/Config.cmake.in | 4 +++ src/openvg.pc.in | 10 ++++++ 4 files changed, 109 insertions(+), 11 deletions(-) create mode 100644 src/Config.cmake.in create mode 100644 src/openvg.pc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 01f2f47..9e30cb7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,13 +1,28 @@ -project(ShivaVG) +cmake_minimum_required(VERSION 3.0) + +project(ShivaVG + VERSION 0.2.1 + LANGUAGES C + DESCRIPTION "The shivavg implementation of openvg" +) + # TODO test on Windows/MSVC # TODO test on Windows/MinGW # TODO separate targets for examples and install target # TODO update INSTALL/README etc -cmake_minimum_required(VERSION 2.8) + include(CheckIncludeFiles) include(CheckLibraryExists) include(CheckTypeSize) + +# make cache variables for install destinations +include(GNUInstallDirs) + +set(CMAKE_C_STANDARD 99) +set(CMAKE_C_STANDARD_REQUIRED ON) + set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules") +set(CMAKE_C_FLAGS "-std=c99") # Processing the generator options # TODO: can we have a master option that will turn others in UI? @@ -35,6 +50,7 @@ if(BUILD_ALL_EXAMPLES) set(BUILD_PATTERN ON) set(BUILD_BLEND ON) set(BUILD_EB ON) + set(BUILD_WARP ON) endif() set(BUILD_EXAMPLES BUILD_VGU OR BUILD_DASH OR BUILD_LINEAR OR BUILD_RADIAL OR BUILD_INTERPOLATE OR BUILD_TIGER OR BUILD_IMAGE OR BUILD_PATTERN OR BUILD_BLEND OR BUILD_EB) @@ -68,8 +84,6 @@ check_include_files(sys/stat.h HAVE_SYS_STAT_H) check_include_files(sys/types.h HAVE_SYS_TYPES_H) check_include_files(unistd.h HAVE_UNISTD_H) check_type_size("void*" SIZEOF_VOID_P) -# TODO the AC_TYPE defines need porting -find_package(ANSIC) # Trying to get the version of the package if(EXISTS "${CMAKE_SOURCE_DIR}/.git") @@ -85,10 +99,10 @@ if(EXISTS "${CMAKE_SOURCE_DIR}/.git") endif() endif() else() - set(PACKAGE_VERSION "Unknown(no git)") + set(PACKAGE_VERSION $PROJECT_VERSION) endif() else() - set(PACKAGE_VERSION "Unknown(off-repo)") + set(PACKAGE_VERSION $PROJECT_VERSION) endif() # Names, strings etc diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 17bbde1..114d66f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,8 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.0) # TODO headers as dependencies # TODO shared/static switch CMake-style -set(libOpenVG_SOURCES + +set(libOpenVG_SOURCES shExtensions.c shArrays.c shVectors.c @@ -25,12 +26,81 @@ set(libOpenVG_HEADERS shPaint.h shGeometry.h shContext.h -) -add_definitions(-std=c99 -pedantic -DHAVE_CONFIG_H) + ) + +add_definitions(-DHAVE_CONFIG_H) include_directories(${OPENGL_INCLUDE_DIR}) # TODO what if OpenGL library has nonstandard location? add_library(OpenVG SHARED ${libOpenVG_SOURCES}) target_link_libraries(OpenVG ${OPENGL_LIBRARIES} -lm) SET_TARGET_PROPERTIES( OpenVG PROPERTIES COMPILE_FLAGS -fPIC) -install(TARGETS OpenVG DESTINATION lib) +# create library +add_library(OpenVG_objlib OBJECT ${libOpenVG_SOURCES}) +set_property(TARGET OpenVG_objlib PROPERTY POSITION_INDEPENDENT_CODE 1) + +# create library +add_library(OpenVGStatic STATIC $) +set_target_properties(OpenVGStatic PROPERTIES LIBRARY_OUTPUT_NAME OpenVG.a) + +# create library +add_library(OpenVG SHARED $) +target_link_libraries(OpenVG ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} -lm) + +# add include directories +target_include_directories(OpenVG + PUBLIC + "$" + "$" +) + +# install the target and create export-set +install(TARGETS OpenVG OpenVGStatic + EXPORT OpenVGTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# header files (include/VG) are installed by ../CMakeLists.txt + +# generate and install export file +install(EXPORT OpenVGTargets + FILE OpenVGTargets.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/OpenVG +) + + + +include(CMakePackageConfigHelpers) + +set(version $PROJECT_VERSION) + +# generate the version file for the config file +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/OpenVGConfigVersion.cmake" + VERSION "${version}" + COMPATIBILITY AnyNewerVersion +) + +# create config file +configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/OpenVGConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/OpenVG + NO_CHECK_REQUIRED_COMPONENTS_MACRO +) + +# install config files +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/OpenVGConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/OpenVGConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/OpenVG +) + + + +# TODO verify +# generate pkgconfig file +set(target1 OpenVG) +configure_file(openvg.pc.in lib/pkgconfig/openvg.pc @ONLY) diff --git a/src/Config.cmake.in b/src/Config.cmake.in new file mode 100644 index 0000000..750d189 --- /dev/null +++ b/src/Config.cmake.in @@ -0,0 +1,4 @@ +@PACKAGE_INIT@ + +set(OpenVG_FOUND True) +include("${CMAKE_CURRENT_LIST_DIR}/OpenVGTargets.cmake") diff --git a/src/openvg.pc.in b/src/openvg.pc.in new file mode 100644 index 0000000..ef7abf9 --- /dev/null +++ b/src/openvg.pc.in @@ -0,0 +1,10 @@ +prefix="@CMAKE_INSTALL_PREFIX@" +exec_prefix="${prefix}" +libdir="${prefix}/lib" +includedir="${prefix}/include" + +Name: @PROJECT_NAME@ +Description: @CMAKE_PROJECT_DESCRIPTION@ +Version: @PROJECT_VERSION@ +Cflags: -I${includedir} +Libs: -L${libdir} -l@target1@