[cmake] Add FindUtfcpp.cmake

it will look for utfcpp in the standard system paths, UTFCPP_PATH,
and lib/utfcpp/v2_0/source.

This allows the use of utfcpp in:

  * standard locations such as /usr/include on distributions shipping
  utfcpp

  * custom locations for users via UTFCPP_PATH

  * the source tree using the default location of the utfcpp
    git submodule, .i.e lib/utfcpp/v2_0

Signed-off-by: Alexis Hildebrandt <afh@surryhill.net>
This commit is contained in:
Alexis Hildebrandt 2015-01-11 12:10:00 +01:00
parent cc0b32d9bc
commit 1d7dd3e082
2 changed files with 43 additions and 3 deletions

View file

@ -11,6 +11,9 @@ set(Ledger_VERSION_MINOR 1)
set(Ledger_VERSION_PATCH 0)
set(Ledger_VERSION_DATE 20141005)
# Point CMake at any custom modules we may ship
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
enable_testing()
add_definitions(-std=c++11)
@ -236,13 +239,20 @@ endmacro(add_ledger_library_dependencies _target)
########################################################################
include(FindUtfcpp)
if (UTFCPP_FOUND)
include_directories("${UTFCPP_INCLUDE_DIR}")
else()
message(FATAL_ERROR "Missing required header file: utf8.h\n"
"Define UTFCPP_PATH or install utfcpp locally into the source tree below lib/utfcpp/."
)
endif()
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
# add the binary tree to the search path for include files so that we will
# find TutorialConfig.h
include_directories("${PROJECT_SOURCE_DIR}/lib")
include_directories("${PROJECT_SOURCE_DIR}/lib/utfcpp/v2_0/source")
# find system.hh
include_directories("${PROJECT_BINARY_DIR}")
configure_file(

30
cmake/FindUtfcpp.cmake Normal file
View file

@ -0,0 +1,30 @@
# - Try to find utfcpp
# Once done, this will define
#
# UTFCPP_FOUND - system has utfcpp's utf8.h
# UTFCPP_PATH - the utfcpp include directories
include(CheckCXXSourceCompiles)
set(UTFCPP_FOUND FALSE)
find_path(UTFCPP_INCLUDE_DIR
NAMES utf8.h
HINTS "${UTFCPP_PATH}" "${PROJECT_SOURCE_DIR}/lib/utfcpp/v2_0/source"
)
if (UTFCPP_INCLUDE_DIR)
set(CMAKE_REQUIRED_INCLUDES "${UTFCPP_INCLUDE_DIR}")
set(UTFCPP_FOUND TRUE)
endif()
check_cxx_source_compiles("
#include <string>
#include \"utf8.h\"
int main(int argc, char** argv) {
std::string input = std::string(\"utfcpp\");
const char * p = input.c_str();
std::size_t len = input.length();
utf8::is_valid(p, p + len);
}" HAVE_WORKING_UTFCPP)