summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt120
1 files changed, 100 insertions, 20 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1d4d3a7..1a9871d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,10 +1,10 @@
-
-cmake_minimum_required(VERSION 2.8)
-# required for exports? cmake_minimum_required (VERSION 2.8.6)
-project(oniguruma C)
+cmake_minimum_required(VERSION 3.1)
+project(oniguruma VERSION 6.8.2)
set(PACKAGE onig)
-set(PACKAGE_VERSION "6.8.1")
+set(PACKAGE_VERSION ${PROJECT_VERSION})
+
+option(BUILD_SHARED_LIBS "Build shared libraries" ON)
set(USE_CRNL_AS_LINE_TERMINATOR 0)
set(VERSION ${PACKAGE_VERSION})
@@ -23,7 +23,6 @@ elseif(CMAKE_COMPILER_IS_GNUCC)
endif()
-include(cmake/dist.cmake)
include(CheckCSourceCompiles)
include(CheckIncludeFiles)
include(CheckFunctionExists)
@@ -54,10 +53,6 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.cmake.in ${CMAKE_CURRENT
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/oniguruma.pc.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/oniguruma.pc @ONLY)
-
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-
set(_SRCS src/regint.h src/regparse.h src/regenc.h src/st.h
src/regerror.c src/regparse.c src/regext.c src/regcomp.c src/regexec.c
src/reggnu.c src/regenc.c src/regsyntax.c src/regtrav.c src/regversion.c
@@ -73,15 +68,100 @@ set(_SRCS src/regint.h src/regparse.h src/regenc.h src/st.h
src/unicode_unfold_key.c
src/unicode_fold1_key.c src/unicode_fold2_key.c src/unicode_fold3_key.c)
-
add_library(onig ${_SRCS})
-
-install_library(onig)
-
-install_header(src/oniguruma.h src/onigposix.h src/oniggnu.h)
-
-install_doc(doc/API doc/API.ja doc/RE doc/RE.ja doc/FAQ doc/FAQ.ja doc/CALLOUTS.BUILTIN doc/CALLOUTS.BUILTIN.ja doc/UNICODE_PROPERTIES)
-install_data(AUTHORS COPYING HISTORY README.md)
-
+target_include_directories(onig PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
+
+# Installation (https://github.com/forexample/package-example)
+
+# Introduce variables:
+# * CMAKE_INSTALL_LIBDIR
+# * CMAKE_INSTALL_BINDIR
+# * CMAKE_INSTALL_INCLUDEDIR
+include(GNUInstallDirs)
+
+# Layout. This works for all platforms:
+# * <prefix>/lib*/cmake/<PROJECT-NAME>
+# * <prefix>/lib*/
+# * <prefix>/include/
+set(config_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
+
+set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated")
+
+# Configuration
+set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake")
+set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake")
+set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
+set(namespace "${PROJECT_NAME}::")
+
+# Include module with fuction 'write_basic_package_version_file'
+include(CMakePackageConfigHelpers)
+
+# Configure '<PROJECT-NAME>ConfigVersion.cmake'
+# Use:
+# * PROJECT_VERSION
+write_basic_package_version_file(
+ "${version_config}" COMPATIBILITY SameMajorVersion
+)
+
+# Configure '<PROJECT-NAME>Config.cmake'
+# Use variables:
+# * TARGETS_EXPORT_NAME
+# * PROJECT_NAME
+configure_package_config_file(
+ "cmake/Config.cmake.in"
+ "${project_config}"
+ INSTALL_DESTINATION "${config_install_dir}"
+)
+
+# Targets:
+# * <prefix>/lib/libonig.a
+# * header location after install: <prefix>/include/
+# * headers can be included by C code `#include <oniguruma.h>`
+install(
+ TARGETS onig
+ EXPORT "${TARGETS_EXPORT_NAME}"
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+ INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
+)
+
+# Headers:
+# * src/oniguruma.h -> <prefix>/include/oniguruma
+install(
+ FILES src/oniguruma.h src/onigposix.h src/oniggnu.h
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
+)
+
+# Config
+# * <prefix>/lib/cmake/oniguruma/onigurumaConfig.cmake
+# * <prefix>/lib/cmake/oniguruma/onigurumaConfigVersion.cmake
+install(
+ FILES "${project_config}" "${version_config}"
+ DESTINATION "${config_install_dir}"
+)
+
+# Config
+# * <prefix>/lib/cmake/oniguruma/onigurumaTargets.cmake
+install(
+ EXPORT "${TARGETS_EXPORT_NAME}"
+ NAMESPACE "${namespace}"
+ DESTINATION "${config_install_dir}"
+)
+
+# Documentation (uses onig not oniguruma for directory)
+install(FILES doc/API doc/API.ja doc/RE doc/RE.ja doc/FAQ doc/FAQ.ja
+ doc/CALLOUTS.BUILTIN doc/CALLOUTS.BUILTIN.ja
+ doc/CALLOUTS.API doc/CALLOUTS.API.ja
+ doc/UNICODE_PROPERTIES
+ DESTINATION "${CMAKE_INSTALL_DATADIR}/${PACKAGE_NAME}")
+
+# Other files (uses onig not oniguruma for directory)
+install(FILES AUTHORS COPYING HISTORY README.md
+ DESTINATION "${CMAKE_INSTALL_DATADIR}/${PACKAGE_NAME}")
+
+# pkg-config
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/oniguruma.pc
- DESTINATION lib/pkgconfig)
+ DESTINATION lib/pkgconfig)