mirror of
https://github.com/tesseract-ocr/tesseract.git
synced 2025-01-18 06:30:14 +08:00
Merge pull request #107 from egorpugin/master
Initial CMake build system implementation
This commit is contained in:
commit
dd8c129973
3
.gitignore
vendored
3
.gitignore
vendored
@ -71,3 +71,6 @@ training/wordlist2dawg
|
||||
tesseract_opencl_profile_devices.dat
|
||||
kernel*.bin
|
||||
|
||||
# build dirs
|
||||
/build*
|
||||
/win*
|
45
.travis.yml
Normal file
45
.travis.yml
Normal file
@ -0,0 +1,45 @@
|
||||
language: cpp
|
||||
|
||||
notifications:
|
||||
email: false
|
||||
|
||||
sudo: required
|
||||
|
||||
os:
|
||||
- linux
|
||||
- osx
|
||||
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- gcc-4.8
|
||||
- g++-4.8
|
||||
|
||||
before_install:
|
||||
- if [[ $TRAVIS_OS_NAME == linux ]]; then LINUX=true; fi
|
||||
- if [[ $TRAVIS_OS_NAME == osx ]]; then OSX=true; fi
|
||||
|
||||
- if [[ $OSX ]]; then brew update; fi
|
||||
|
||||
install:
|
||||
- if [[ $OSX ]]; then brew install icu4c pango; brew link --force gettext; fi
|
||||
- if [[ $OSX ]]; then export ICU_ROOT=/usr/local/opt/icu4c ; fi
|
||||
- wget http://www.cmake.org/files/v3.3/cmake-3.3.1-Linux-x86_64.sh
|
||||
- sudo sh cmake-3.3.1-Linux-x86_64.sh --skip-license --prefix=/usr
|
||||
- wget -O leptonica.zip https://github.com/egorpugin/leptonica/archive/master.zip
|
||||
- unzip leptonica.zip -d .
|
||||
- cmake -Hleptonica-master -Bleptonica-master/build
|
||||
- make -C leptonica-master/build
|
||||
- if [[ $LINUX && "$CXX" = "g++" ]]; then export CXX="g++-4.8" CC="gcc-4.8"; fi
|
||||
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- cmake .. -DLeptonica_DIR=leptonica-master/build
|
||||
- make
|
215
CMakeLists.txt
Normal file
215
CMakeLists.txt
Normal file
@ -0,0 +1,215 @@
|
||||
#
|
||||
# tesseract
|
||||
#
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# cmake settings
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
cmake_minimum_required(VERSION 2.8.11)
|
||||
|
||||
# In-source builds are disabled.
|
||||
if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
|
||||
message(FATAL_ERROR
|
||||
"CMake generation is not possible within the source directory!"
|
||||
"\n Remove the CMakeCache.txt file and try again from another folder, e.g.:"
|
||||
"\n "
|
||||
"\n rm CMakeCache.txt"
|
||||
"\n mkdir build"
|
||||
"\n cd build"
|
||||
"\n cmake .."
|
||||
)
|
||||
endif()
|
||||
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_SOURCE_DIR}/cmake")
|
||||
|
||||
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${EXECUTABLE_OUTPUT_PATH}")
|
||||
|
||||
# Use solution folders.
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMake Targets")
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# project settings
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
project(tesseract C CXX)
|
||||
|
||||
set(VERSION_MAJOR 3)
|
||||
set(VERSION_MINOR 05)
|
||||
set(VERSION_PLAIN ${VERSION_MAJOR}.${VERSION_MINOR})
|
||||
|
||||
find_package(Leptonica 1.72 REQUIRED)
|
||||
|
||||
find_package(ICU COMPONENTS uc i18n)
|
||||
find_package(OpenCL QUIET)
|
||||
find_package(PkgConfig)
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# compiler and linker
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
set(LIBRARY_TYPE SHARED)
|
||||
if (STATIC)
|
||||
set(LIBRARY_TYPE)
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
if (MSVC)
|
||||
add_definitions(-D_SCL_SECURE_NO_WARNINGS)
|
||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W0")
|
||||
endif()
|
||||
|
||||
set(LIB_Ws2_32 Ws2_32)
|
||||
endif()
|
||||
|
||||
if (CYGWIN)
|
||||
add_definitions(-D__CYGWIN__)
|
||||
endif()
|
||||
|
||||
if (UNIX)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11")
|
||||
|
||||
set(LIB_pthread pthread)
|
||||
endif()
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# configure
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
set(AUTOCONFIG_SRC ${CMAKE_BINARY_DIR}/config_auto.h.in)
|
||||
set(AUTOCONFIG ${CMAKE_BINARY_DIR}/config_auto.h)
|
||||
|
||||
include(Configure)
|
||||
|
||||
configure_file(${AUTOCONFIG_SRC} ${AUTOCONFIG} @ONLY)
|
||||
|
||||
set(INCLUDE_DIR ${CMAKE_SOURCE_DIR}/api)
|
||||
|
||||
configure_file(
|
||||
${CMAKE_SOURCE_DIR}/cmake/templates/TesseractConfig-version.cmake.in
|
||||
${CMAKE_BINARY_DIR}/TesseractConfig-version.cmake @ONLY)
|
||||
configure_file(
|
||||
${CMAKE_SOURCE_DIR}/cmake/templates/TesseractConfig.cmake.in
|
||||
${CMAKE_BINARY_DIR}/TesseractConfig.cmake @ONLY)
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# build
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
include(BuildFunctions)
|
||||
include(SourceGroups)
|
||||
|
||||
add_definitions(-DHAVE_CONFIG_H)
|
||||
add_definitions(-D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1)
|
||||
add_definitions(-DUSE_STD_NAMESPACE=1)
|
||||
add_definitions(-DWINDLLNAME="libtesseract${VERSION_MAJOR}${VERSION_MINOR}.dll")
|
||||
|
||||
include_directories(${Leptonica_INCLUDE_DIRS})
|
||||
|
||||
include_directories(${CMAKE_BINARY_DIR})
|
||||
|
||||
include_directories(api)
|
||||
include_directories(ccmain)
|
||||
include_directories(ccstruct)
|
||||
include_directories(ccutil)
|
||||
include_directories(classify)
|
||||
include_directories(cube)
|
||||
include_directories(cutil)
|
||||
include_directories(dict)
|
||||
include_directories(neural_networks/runtime)
|
||||
include_directories(opencl)
|
||||
include_directories(textord)
|
||||
include_directories(vs2010/port)
|
||||
include_directories(viewer)
|
||||
include_directories(wordrec)
|
||||
|
||||
########################################
|
||||
# LIBRARY tesseract
|
||||
########################################
|
||||
|
||||
|
||||
file(GLOB tesseract_src
|
||||
"ccmain/*.cpp"
|
||||
"ccstruct/*.cpp"
|
||||
"ccutil/*.cpp"
|
||||
"classify/*.cpp"
|
||||
"cube/*.cpp"
|
||||
"cutil/*.cpp"
|
||||
"dict/*.cpp"
|
||||
"neural_networks/runtime/*.cpp"
|
||||
"opencl/*.cpp"
|
||||
"textord/*.cpp"
|
||||
"viewer/*.cpp"
|
||||
"wordrec/*.cpp"
|
||||
)
|
||||
file(GLOB tesseract_hdr
|
||||
"api/*.h"
|
||||
"ccmain/*.h"
|
||||
"ccstruct/*.h"
|
||||
"ccutil/*.h"
|
||||
"classify/*.h"
|
||||
"cube/*.h"
|
||||
"cutil/*.h"
|
||||
"dict/*.h"
|
||||
"neural_networks/runtime/*.h"
|
||||
"opencl/*.h"
|
||||
"textord/*.h"
|
||||
"viewer/*.h"
|
||||
"wordrec/*.h"
|
||||
)
|
||||
if (WIN32)
|
||||
file(GLOB tesseract_win32_src "vs2010/port/*.cpp")
|
||||
file(GLOB tesseract_win32_hdr "vs2010/port/*.h")
|
||||
set(tesseract_src ${tesseract_src} ${tesseract_win32_src})
|
||||
set(tesseract_hdr ${tesseract_hdr} ${tesseract_win32_hdr})
|
||||
endif()
|
||||
|
||||
set(tesseract_src ${tesseract_src}
|
||||
api/baseapi.cpp
|
||||
api/capi.cpp
|
||||
api/renderer.cpp
|
||||
api/pdfrenderer.cpp
|
||||
)
|
||||
|
||||
add_library (tesseract ${LIBRARY_TYPE} ${tesseract_src} ${tesseract_hdr})
|
||||
if (NOT STATIC)
|
||||
target_compile_definitions (tesseract PUBLIC -DTESS_EXPORTS)
|
||||
endif()
|
||||
target_link_libraries (tesseract ${Leptonica_LIBRARIES} ${LIB_Ws2_32} ${LIB_pthread})
|
||||
set_target_properties (tesseract PROPERTIES OUTPUT_NAME tesseract${VERSION_MAJOR}${VERSION_MINOR})
|
||||
set_target_properties (tesseract PROPERTIES DEBUG_OUTPUT_NAME tesseract${VERSION_MAJOR}${VERSION_MINOR}d)
|
||||
export(TARGETS tesseract FILE ${CMAKE_BINARY_DIR}/TesseractTargets.cmake)
|
||||
|
||||
|
||||
########################################
|
||||
# EXECUTABLE tesseractmain
|
||||
########################################
|
||||
|
||||
set(tesseractmain_src
|
||||
api/tesseractmain.cpp
|
||||
vs2010/tesseract/resource.h
|
||||
vs2010/tesseract/tesseract.rc
|
||||
)
|
||||
add_executable (tesseractmain ${tesseractmain_src})
|
||||
target_link_libraries (tesseractmain tesseract)
|
||||
|
||||
########################################
|
||||
|
||||
add_subdirectory(training)
|
||||
|
||||
###############################################################################
|
@ -1,3 +1,6 @@
|
||||
[![Build Status](https://travis-ci.org/egorpugin/tesseract.svg?branch=master)](https://travis-ci.org/egorpugin/tesseract)
|
||||
[![Build status](https://ci.appveyor.com/api/projects/status/34s8gu4md3i9s93k?svg=true)](https://ci.appveyor.com/project/egorpugin/tesseract)
|
||||
|
||||
Note that this is possibly out-of-date version of the wiki ReadMe,
|
||||
which is located at:
|
||||
|
||||
|
24
appveyor.yml
Normal file
24
appveyor.yml
Normal file
@ -0,0 +1,24 @@
|
||||
os: Visual Studio 2015
|
||||
|
||||
platform:
|
||||
- Win32
|
||||
- Win64
|
||||
|
||||
configuration:
|
||||
- Debug
|
||||
|
||||
before_build:
|
||||
- if %platform%==Win32 set generator=Visual Studio 14
|
||||
- if %platform%==Win64 set generator=Visual Studio 14 Win64
|
||||
- if %platform%==Win32 set vcplatform=Win32
|
||||
- if %platform%==Win64 set vcplatform=x64
|
||||
- ps: Start-FileDownload 'https://github.com/egorpugin/leptonica/archive/master.zip' -FileName leptonica.zip
|
||||
- 7z x leptonica.zip
|
||||
- cmake -Hleptonica-master -Bleptonica-master/build -G "%generator%"
|
||||
- msbuild leptonica-master/build/leptonica.sln /p:Platform=%vcplatform% /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
|
||||
|
||||
build_script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- cmake .. -G "%generator%" -DLeptonica_DIR=leptonica-master/build -DSTATIC=1
|
||||
- msbuild tesseract.sln /p:Platform=%vcplatform% /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
|
@ -47,7 +47,7 @@
|
||||
#define SIGNED signed
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
|
14
cmake/BuildFunctions.cmake
Normal file
14
cmake/BuildFunctions.cmake
Normal file
@ -0,0 +1,14 @@
|
||||
################################################################################
|
||||
#
|
||||
# macros and functions
|
||||
#
|
||||
################################################################################
|
||||
|
||||
########################################
|
||||
# FUNCTION project_group
|
||||
########################################
|
||||
function(project_group target name)
|
||||
set_target_properties(${target} PROPERTIES FOLDER ${name})
|
||||
endfunction(project_group)
|
||||
|
||||
################################################################################
|
134
cmake/Configure.cmake
Normal file
134
cmake/Configure.cmake
Normal file
@ -0,0 +1,134 @@
|
||||
################################################################################
|
||||
#
|
||||
# configure
|
||||
#
|
||||
################################################################################
|
||||
|
||||
########################################
|
||||
# FUNCTION check_includes
|
||||
########################################
|
||||
function(check_includes files)
|
||||
foreach(F ${${files}})
|
||||
set(name ${F})
|
||||
string(REPLACE "-" "_" name ${name})
|
||||
string(REPLACE "." "_" name ${name})
|
||||
string(REPLACE "/" "_" name ${name})
|
||||
string(TOUPPER ${name} name)
|
||||
check_include_files(${F} HAVE_${name})
|
||||
file(APPEND ${AUTOCONFIG_SRC} "/* Define to 1 if you have the <${F}> header file. */\n")
|
||||
file(APPEND ${AUTOCONFIG_SRC} "#cmakedefine HAVE_${name} 1\n")
|
||||
file(APPEND ${AUTOCONFIG_SRC} "\n")
|
||||
endforeach()
|
||||
endfunction(check_includes)
|
||||
|
||||
########################################
|
||||
# FUNCTION check_functions
|
||||
########################################
|
||||
function(check_functions functions)
|
||||
foreach(F ${${functions}})
|
||||
set(name ${F})
|
||||
string(TOUPPER ${name} name)
|
||||
check_function_exists(${F} HAVE_${name})
|
||||
file(APPEND ${AUTOCONFIG_SRC} "/* Define to 1 if you have the `${F}' function. */\n")
|
||||
file(APPEND ${AUTOCONFIG_SRC} "#cmakedefine HAVE_${name} 1\n")
|
||||
file(APPEND ${AUTOCONFIG_SRC} "\n")
|
||||
endforeach()
|
||||
endfunction(check_functions)
|
||||
|
||||
########################################
|
||||
# FUNCTION check_types
|
||||
########################################
|
||||
function(check_types types)
|
||||
foreach(T ${${types}})
|
||||
set(name ${T})
|
||||
string(REPLACE " " "_" name ${name})
|
||||
string(REPLACE "-" "_" name ${name})
|
||||
string(REPLACE "." "_" name ${name})
|
||||
string(REPLACE "/" "_" name ${name})
|
||||
string(TOUPPER ${name} name)
|
||||
check_type_size(${T} HAVE_${name})
|
||||
file(APPEND ${AUTOCONFIG_SRC} "/* Define to 1 if the system has the type `${T}'. */\n")
|
||||
file(APPEND ${AUTOCONFIG_SRC} "#cmakedefine HAVE_${name} 1\n")
|
||||
file(APPEND ${AUTOCONFIG_SRC} "\n")
|
||||
endforeach()
|
||||
endfunction(check_types)
|
||||
|
||||
########################################
|
||||
|
||||
file(WRITE ${AUTOCONFIG_SRC})
|
||||
|
||||
include(CheckCSourceCompiles)
|
||||
include(CheckCSourceRuns)
|
||||
include(CheckCXXSourceCompiles)
|
||||
include(CheckCXXSourceRuns)
|
||||
include(CheckFunctionExists)
|
||||
include(CheckIncludeFiles)
|
||||
include(CheckLibraryExists)
|
||||
include(CheckPrototypeDefinition)
|
||||
include(CheckStructHasMember)
|
||||
include(CheckSymbolExists)
|
||||
include(CheckTypeSize)
|
||||
include(TestBigEndian)
|
||||
|
||||
set(include_files_list
|
||||
dlfcn.h
|
||||
inttypes.h
|
||||
limits.h
|
||||
malloc.h
|
||||
memory.h
|
||||
stdbool.h
|
||||
stdint.h
|
||||
stdlib.h
|
||||
strings.h
|
||||
string.h
|
||||
sys/ipc.h
|
||||
sys/shm.h
|
||||
sys/stat.h
|
||||
sys/types.h
|
||||
sys/wait.h
|
||||
tiffio.h
|
||||
unistd.h
|
||||
|
||||
cairo/cairo-version.h
|
||||
CL/cl.h
|
||||
OpenCL/cl.h
|
||||
pango-1.0/pango/pango-features.h
|
||||
unicode/uchar.h
|
||||
)
|
||||
check_includes(include_files_list)
|
||||
|
||||
set(functions_list
|
||||
getline
|
||||
snprintf
|
||||
)
|
||||
check_functions(functions_list)
|
||||
|
||||
set(types_list
|
||||
"long long int"
|
||||
mbstate_t
|
||||
wchar_t
|
||||
_Bool
|
||||
)
|
||||
check_types(types_list)
|
||||
|
||||
check_c_source_compiles("#include <sys/time.h>\n#include <time.h>\nmain(){}" TIME_WITH_SYS_TIME)
|
||||
|
||||
test_big_endian(WORDS_BIGENDIAN)
|
||||
|
||||
set(STDC_HEADERS 1)
|
||||
|
||||
file(APPEND ${AUTOCONFIG_SRC} "
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#cmakedefine STDC_HEADERS 1
|
||||
|
||||
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
|
||||
significant byte first (like Motorola and SPARC, unlike Intel). */
|
||||
#cmakedefine WORDS_BIGENDIAN 1
|
||||
|
||||
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
|
||||
#cmakedefine TIME_WITH_SYS_TIME 1
|
||||
")
|
||||
|
||||
########################################
|
||||
|
||||
################################################################################
|
314
cmake/FindICU.cmake
Normal file
314
cmake/FindICU.cmake
Normal file
@ -0,0 +1,314 @@
|
||||
# This module can find the International Components for Unicode (ICU) Library
|
||||
#
|
||||
# Requirements:
|
||||
# - CMake >= 2.8.3 (for new version of find_package_handle_standard_args)
|
||||
#
|
||||
# The following variables will be defined for your use:
|
||||
# - ICU_FOUND : were all of your specified components found (include dependencies)?
|
||||
# - ICU_INCLUDE_DIRS : ICU include directory
|
||||
# - ICU_LIBRARIES : ICU libraries
|
||||
# - ICU_VERSION : complete version of ICU (x.y.z)
|
||||
# - ICU_MAJOR_VERSION : major version of ICU
|
||||
# - ICU_MINOR_VERSION : minor version of ICU
|
||||
# - ICU_PATCH_VERSION : patch version of ICU
|
||||
# - ICU_<COMPONENT>_FOUND : were <COMPONENT> found? (FALSE for non specified component if it is not a dependency)
|
||||
#
|
||||
# For windows or non standard installation, define ICU_ROOT variable to point to the root installation of ICU. Two ways:
|
||||
# - run cmake with -DICU_ROOT=<PATH>
|
||||
# - define an environment variable with the same name before running cmake
|
||||
# With cmake-gui, before pressing "Configure":
|
||||
# 1) Press "Add Entry" button
|
||||
# 2) Add a new entry defined as:
|
||||
# - Name: ICU_ROOT
|
||||
# - Type: choose PATH in the selection list
|
||||
# - Press "..." button and select the root installation of ICU
|
||||
#
|
||||
# Example Usage:
|
||||
#
|
||||
# 1. Copy this file in the root of your project source directory
|
||||
# 2. Then, tell CMake to search this non-standard module in your project directory by adding to your CMakeLists.txt:
|
||||
# set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
|
||||
# 3. Finally call find_package() once, here are some examples to pick from
|
||||
#
|
||||
# Require ICU 4.4 or later
|
||||
# find_package(ICU 4.4 REQUIRED)
|
||||
#
|
||||
# if(ICU_FOUND)
|
||||
# include_directories(${ICU_INCLUDE_DIRS})
|
||||
# add_executable(myapp myapp.c)
|
||||
# target_link_libraries(myapp ${ICU_LIBRARIES})
|
||||
# endif(ICU_FOUND)
|
||||
|
||||
#=============================================================================
|
||||
# Copyright (c) 2011-2013, julp
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#=============================================================================
|
||||
|
||||
find_package(PkgConfig QUIET)
|
||||
|
||||
########## Private ##########
|
||||
if(NOT DEFINED ICU_PUBLIC_VAR_NS)
|
||||
set(ICU_PUBLIC_VAR_NS "ICU") # Prefix for all ICU relative public variables
|
||||
endif(NOT DEFINED ICU_PUBLIC_VAR_NS)
|
||||
if(NOT DEFINED ICU_PRIVATE_VAR_NS)
|
||||
set(ICU_PRIVATE_VAR_NS "_${ICU_PUBLIC_VAR_NS}") # Prefix for all ICU relative internal variables
|
||||
endif(NOT DEFINED ICU_PRIVATE_VAR_NS)
|
||||
if(NOT DEFINED PC_ICU_PRIVATE_VAR_NS)
|
||||
set(PC_ICU_PRIVATE_VAR_NS "_PC${ICU_PRIVATE_VAR_NS}") # Prefix for all pkg-config relative internal variables
|
||||
endif(NOT DEFINED PC_ICU_PRIVATE_VAR_NS)
|
||||
|
||||
function(icudebug _VARNAME)
|
||||
if(${ICU_PUBLIC_VAR_NS}_DEBUG)
|
||||
if(DEFINED ${ICU_PUBLIC_VAR_NS}_${_VARNAME})
|
||||
message("${ICU_PUBLIC_VAR_NS}_${_VARNAME} = ${${ICU_PUBLIC_VAR_NS}_${_VARNAME}}")
|
||||
else(DEFINED ${ICU_PUBLIC_VAR_NS}_${_VARNAME})
|
||||
message("${ICU_PUBLIC_VAR_NS}_${_VARNAME} = <UNDEFINED>")
|
||||
endif(DEFINED ${ICU_PUBLIC_VAR_NS}_${_VARNAME})
|
||||
endif(${ICU_PUBLIC_VAR_NS}_DEBUG)
|
||||
endfunction(icudebug)
|
||||
|
||||
set(${ICU_PRIVATE_VAR_NS}_ROOT "")
|
||||
if(DEFINED ENV{ICU_ROOT})
|
||||
set(${ICU_PRIVATE_VAR_NS}_ROOT "$ENV{ICU_ROOT}")
|
||||
endif(DEFINED ENV{ICU_ROOT})
|
||||
if (DEFINED ICU_ROOT)
|
||||
set(${ICU_PRIVATE_VAR_NS}_ROOT "${ICU_ROOT}")
|
||||
endif(DEFINED ICU_ROOT)
|
||||
|
||||
set(${ICU_PRIVATE_VAR_NS}_BIN_SUFFIXES )
|
||||
set(${ICU_PRIVATE_VAR_NS}_LIB_SUFFIXES )
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
list(APPEND ${ICU_PRIVATE_VAR_NS}_BIN_SUFFIXES "bin64")
|
||||
list(APPEND ${ICU_PRIVATE_VAR_NS}_LIB_SUFFIXES "lib64")
|
||||
endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
list(APPEND ${ICU_PRIVATE_VAR_NS}_BIN_SUFFIXES "bin")
|
||||
list(APPEND ${ICU_PRIVATE_VAR_NS}_LIB_SUFFIXES "lib")
|
||||
|
||||
set(${ICU_PRIVATE_VAR_NS}_COMPONENTS )
|
||||
# <icu component name> <library name 1> ... <library name N>
|
||||
macro(icu_declare_component _NAME)
|
||||
list(APPEND ${ICU_PRIVATE_VAR_NS}_COMPONENTS ${_NAME})
|
||||
set("${ICU_PRIVATE_VAR_NS}_COMPONENTS_${_NAME}" ${ARGN})
|
||||
endmacro(icu_declare_component)
|
||||
|
||||
icu_declare_component(data icudata)
|
||||
icu_declare_component(uc icuuc) # Common and Data libraries
|
||||
icu_declare_component(i18n icui18n icuin) # Internationalization library
|
||||
icu_declare_component(io icuio ustdio) # Stream and I/O Library
|
||||
icu_declare_component(le icule) # Layout library
|
||||
icu_declare_component(lx iculx) # Paragraph Layout library
|
||||
|
||||
########## Public ##########
|
||||
set(${ICU_PUBLIC_VAR_NS}_FOUND TRUE)
|
||||
set(${ICU_PUBLIC_VAR_NS}_LIBRARIES )
|
||||
set(${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS )
|
||||
set(${ICU_PUBLIC_VAR_NS}_C_FLAGS "")
|
||||
set(${ICU_PUBLIC_VAR_NS}_CXX_FLAGS "")
|
||||
set(${ICU_PUBLIC_VAR_NS}_CPP_FLAGS "")
|
||||
set(${ICU_PUBLIC_VAR_NS}_C_SHARED_FLAGS "")
|
||||
set(${ICU_PUBLIC_VAR_NS}_CXX_SHARED_FLAGS "")
|
||||
set(${ICU_PUBLIC_VAR_NS}_CPP_SHARED_FLAGS "")
|
||||
foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT ${${ICU_PRIVATE_VAR_NS}_COMPONENTS})
|
||||
string(TOUPPER "${${ICU_PRIVATE_VAR_NS}_COMPONENT}" ${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT)
|
||||
set("${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_FOUND" FALSE) # may be done in the icu_declare_component macro
|
||||
endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT)
|
||||
|
||||
# Check components
|
||||
if(NOT ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS) # uc required at least
|
||||
set(${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS uc)
|
||||
else(NOT ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS)
|
||||
list(APPEND ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS uc)
|
||||
list(REMOVE_DUPLICATES ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS)
|
||||
foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT ${${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS})
|
||||
if(NOT DEFINED ${ICU_PRIVATE_VAR_NS}_COMPONENTS_${${ICU_PRIVATE_VAR_NS}_COMPONENT})
|
||||
message(FATAL_ERROR "Unknown ICU component: ${${ICU_PRIVATE_VAR_NS}_COMPONENT}")
|
||||
endif(NOT DEFINED ${ICU_PRIVATE_VAR_NS}_COMPONENTS_${${ICU_PRIVATE_VAR_NS}_COMPONENT})
|
||||
endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT)
|
||||
endif(NOT ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS)
|
||||
|
||||
# Includes
|
||||
find_path(
|
||||
${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS
|
||||
NAMES unicode/utypes.h utypes.h
|
||||
HINTS ${${ICU_PRIVATE_VAR_NS}_ROOT}
|
||||
PATH_SUFFIXES "include"
|
||||
DOC "Include directories for ICU"
|
||||
)
|
||||
|
||||
if(${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS)
|
||||
########## <part to keep synced with tests/version/CMakeLists.txt> ##########
|
||||
if(EXISTS "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/unicode/uvernum.h") # ICU >= 4
|
||||
file(READ "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/unicode/uvernum.h" ${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS)
|
||||
elseif(EXISTS "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/unicode/uversion.h") # ICU [2;4[
|
||||
file(READ "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/unicode/uversion.h" ${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS)
|
||||
elseif(EXISTS "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/unicode/utypes.h") # ICU [1.4;2[
|
||||
file(READ "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/unicode/utypes.h" ${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS)
|
||||
elseif(EXISTS "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/utypes.h") # ICU 1.3
|
||||
file(READ "${${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS}/utypes.h" ${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS)
|
||||
else()
|
||||
message(FATAL_ERROR "ICU version header not found")
|
||||
endif()
|
||||
|
||||
if(${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS MATCHES ".*# *define *ICU_VERSION *\"([0-9]+)\".*") # ICU 1.3
|
||||
# [1.3;1.4[ as #define ICU_VERSION "3" (no patch version, ie all 1.3.X versions will be detected as 1.3.0)
|
||||
set(${ICU_PUBLIC_VAR_NS}_MAJOR_VERSION "1")
|
||||
set(${ICU_PUBLIC_VAR_NS}_MINOR_VERSION "${CMAKE_MATCH_1}")
|
||||
set(${ICU_PUBLIC_VAR_NS}_PATCH_VERSION "0")
|
||||
elseif(${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS MATCHES ".*# *define *U_ICU_VERSION_MAJOR_NUM *([0-9]+).*")
|
||||
#
|
||||
# Since version 4.9.1, ICU release version numbering was totaly changed, see:
|
||||
# - http://site.icu-project.org/download/49
|
||||
# - http://userguide.icu-project.org/design#TOC-Version-Numbers-in-ICU
|
||||
#
|
||||
set(${ICU_PUBLIC_VAR_NS}_MAJOR_VERSION "${CMAKE_MATCH_1}")
|
||||
string(REGEX REPLACE ".*# *define *U_ICU_VERSION_MINOR_NUM *([0-9]+).*" "\\1" ${ICU_PUBLIC_VAR_NS}_MINOR_VERSION "${${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS}")
|
||||
string(REGEX REPLACE ".*# *define *U_ICU_VERSION_PATCHLEVEL_NUM *([0-9]+).*" "\\1" ${ICU_PUBLIC_VAR_NS}_PATCH_VERSION "${${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS}")
|
||||
elseif(${ICU_PRIVATE_VAR_NS}_VERSION_HEADER_CONTENTS MATCHES ".*# *define *U_ICU_VERSION *\"(([0-9]+)(\\.[0-9]+)*)\".*") # ICU [1.4;1.8[
|
||||
# [1.4;1.8[ as #define U_ICU_VERSION "1.4.1.2" but it seems that some 1.4.1(?:\.\d)? have releasing error and appears as 1.4.0
|
||||
set(${ICU_PRIVATE_VAR_NS}_FULL_VERSION "${CMAKE_MATCH_1}") # copy CMAKE_MATCH_1, no longer valid on the following if
|
||||
if(${ICU_PRIVATE_VAR_NS}_FULL_VERSION MATCHES "^([0-9]+)\\.([0-9]+)$")
|
||||
set(${ICU_PUBLIC_VAR_NS}_MAJOR_VERSION "${CMAKE_MATCH_1}")
|
||||
set(${ICU_PUBLIC_VAR_NS}_MINOR_VERSION "${CMAKE_MATCH_2}")
|
||||
set(${ICU_PUBLIC_VAR_NS}_PATCH_VERSION "0")
|
||||
elseif(${ICU_PRIVATE_VAR_NS}_FULL_VERSION MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)")
|
||||
set(${ICU_PUBLIC_VAR_NS}_MAJOR_VERSION "${CMAKE_MATCH_1}")
|
||||
set(${ICU_PUBLIC_VAR_NS}_MINOR_VERSION "${CMAKE_MATCH_2}")
|
||||
set(${ICU_PUBLIC_VAR_NS}_PATCH_VERSION "${CMAKE_MATCH_3}")
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "failed to detect ICU version")
|
||||
endif()
|
||||
set(${ICU_PUBLIC_VAR_NS}_VERSION "${${ICU_PUBLIC_VAR_NS}_MAJOR_VERSION}.${${ICU_PUBLIC_VAR_NS}_MINOR_VERSION}.${${ICU_PUBLIC_VAR_NS}_PATCH_VERSION}")
|
||||
########## </part to keep synced with tests/version/CMakeLists.txt> ##########
|
||||
|
||||
# Check dependencies (implies pkg-config)
|
||||
if(PKG_CONFIG_FOUND)
|
||||
set(${ICU_PRIVATE_VAR_NS}_COMPONENTS_DUP ${${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS})
|
||||
foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT ${${ICU_PRIVATE_VAR_NS}_COMPONENTS_DUP})
|
||||
pkg_check_modules(PC_ICU_PRIVATE_VAR_NS "icu-${${ICU_PRIVATE_VAR_NS}_COMPONENT}" QUIET)
|
||||
|
||||
if(${PC_ICU_PRIVATE_VAR_NS}_FOUND)
|
||||
foreach(${PC_ICU_PRIVATE_VAR_NS}_LIBRARY ${PC_ICU_LIBRARIES})
|
||||
string(REGEX REPLACE "^icu" "" ${PC_ICU_PRIVATE_VAR_NS}_STRIPPED_LIBRARY ${${PC_ICU_PRIVATE_VAR_NS}_LIBRARY})
|
||||
list(APPEND ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS ${${PC_ICU_PRIVATE_VAR_NS}_STRIPPED_LIBRARY})
|
||||
endforeach(${PC_ICU_PRIVATE_VAR_NS}_LIBRARY)
|
||||
endif(${PC_ICU_PRIVATE_VAR_NS}_FOUND)
|
||||
endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT)
|
||||
list(REMOVE_DUPLICATES ${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS)
|
||||
endif(PKG_CONFIG_FOUND)
|
||||
|
||||
# Check libraries
|
||||
foreach(${ICU_PRIVATE_VAR_NS}_COMPONENT ${${ICU_PUBLIC_VAR_NS}_FIND_COMPONENTS})
|
||||
set(${ICU_PRIVATE_VAR_NS}_POSSIBLE_RELEASE_NAMES )
|
||||
set(${ICU_PRIVATE_VAR_NS}_POSSIBLE_DEBUG_NAMES )
|
||||
foreach(${ICU_PRIVATE_VAR_NS}_BASE_NAME ${${ICU_PRIVATE_VAR_NS}_COMPONENTS_${${ICU_PRIVATE_VAR_NS}_COMPONENT}})
|
||||
list(APPEND ${ICU_PRIVATE_VAR_NS}_POSSIBLE_RELEASE_NAMES "${${ICU_PRIVATE_VAR_NS}_BASE_NAME}")
|
||||
list(APPEND ${ICU_PRIVATE_VAR_NS}_POSSIBLE_DEBUG_NAMES "${${ICU_PRIVATE_VAR_NS}_BASE_NAME}d")
|
||||
list(APPEND ${ICU_PRIVATE_VAR_NS}_POSSIBLE_RELEASE_NAMES "${${ICU_PRIVATE_VAR_NS}_BASE_NAME}${ICU_MAJOR_VERSION}${ICU_MINOR_VERSION}")
|
||||
list(APPEND ${ICU_PRIVATE_VAR_NS}_POSSIBLE_DEBUG_NAMES "${${ICU_PRIVATE_VAR_NS}_BASE_NAME}${ICU_MAJOR_VERSION}${ICU_MINOR_VERSION}d")
|
||||
endforeach(${ICU_PRIVATE_VAR_NS}_BASE_NAME)
|
||||
|
||||
find_library(
|
||||
${ICU_PRIVATE_VAR_NS}_LIB_RELEASE_${${ICU_PRIVATE_VAR_NS}_COMPONENT}
|
||||
NAMES ${${ICU_PRIVATE_VAR_NS}_POSSIBLE_RELEASE_NAMES}
|
||||
HINTS ${${ICU_PRIVATE_VAR_NS}_ROOT}
|
||||
PATH_SUFFIXES ${_ICU_LIB_SUFFIXES}
|
||||
DOC "Release libraries for ICU"
|
||||
)
|
||||
find_library(
|
||||
${ICU_PRIVATE_VAR_NS}_LIB_DEBUG_${${ICU_PRIVATE_VAR_NS}_COMPONENT}
|
||||
NAMES ${${ICU_PRIVATE_VAR_NS}_POSSIBLE_DEBUG_NAMES}
|
||||
HINTS ${${ICU_PRIVATE_VAR_NS}_ROOT}
|
||||
PATH_SUFFIXES ${_ICU_LIB_SUFFIXES}
|
||||
DOC "Debug libraries for ICU"
|
||||
)
|
||||
|
||||
string(TOUPPER "${${ICU_PRIVATE_VAR_NS}_COMPONENT}" ${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT)
|
||||
if(NOT ${ICU_PRIVATE_VAR_NS}_LIB_RELEASE_${${ICU_PRIVATE_VAR_NS}_COMPONENT} AND NOT ${ICU_PRIVATE_VAR_NS}_LIB_DEBUG_${${ICU_PRIVATE_VAR_NS}_COMPONENT}) # both not found
|
||||
set("${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_FOUND" FALSE)
|
||||
set("${ICU_PUBLIC_VAR_NS}_FOUND" FALSE)
|
||||
else(NOT ${ICU_PRIVATE_VAR_NS}_LIB_RELEASE_${${ICU_PRIVATE_VAR_NS}_COMPONENT} AND NOT ${ICU_PRIVATE_VAR_NS}_LIB_DEBUG_${${ICU_PRIVATE_VAR_NS}_COMPONENT}) # one or both found
|
||||
set("${ICU_PUBLIC_VAR_NS}_${${ICU_PRIVATE_VAR_NS}_UPPER_COMPONENT}_FOUND" TRUE)
|
||||
if(NOT ${ICU_PRIVATE_VAR_NS}_LIB_RELEASE_${${ICU_PRIVATE_VAR_NS}_COMPONENT}) # release not found => we are in debug
|
||||
set(${ICU_PRIVATE_VAR_NS}_LIB_${${ICU_PRIVATE_VAR_NS}_COMPONENT} "${${ICU_PRIVATE_VAR_NS}_LIB_DEBUG_${${ICU_PRIVATE_VAR_NS}_COMPONENT}}")
|
||||
elseif(NOT ${ICU_PRIVATE_VAR_NS}_LIB_DEBUG_${${ICU_PRIVATE_VAR_NS}_COMPONENT}) # debug not found => we are in release
|
||||
set(${ICU_PRIVATE_VAR_NS}_LIB_${${ICU_PRIVATE_VAR_NS}_COMPONENT} "${${ICU_PRIVATE_VAR_NS}_LIB_RELEASE_${${ICU_PRIVATE_VAR_NS}_COMPONENT}}")
|
||||
else() # both found
|
||||
set(
|
||||
${ICU_PRIVATE_VAR_NS}_LIB_${${ICU_PRIVATE_VAR_NS}_COMPONENT}
|
||||
optimized ${${ICU_PRIVATE_VAR_NS}_LIB_RELEASE_${${ICU_PRIVATE_VAR_NS}_COMPONENT}}
|
||||
debug ${${ICU_PRIVATE_VAR_NS}_LIB_DEBUG_${${ICU_PRIVATE_VAR_NS}_COMPONENT}}
|
||||
)
|
||||
endif()
|
||||
list(APPEND ${ICU_PUBLIC_VAR_NS}_LIBRARIES ${${ICU_PRIVATE_VAR_NS}_LIB_${${ICU_PRIVATE_VAR_NS}_COMPONENT}})
|
||||
endif(NOT ${ICU_PRIVATE_VAR_NS}_LIB_RELEASE_${${ICU_PRIVATE_VAR_NS}_COMPONENT} AND NOT ${ICU_PRIVATE_VAR_NS}_LIB_DEBUG_${${ICU_PRIVATE_VAR_NS}_COMPONENT})
|
||||
endforeach(${ICU_PRIVATE_VAR_NS}_COMPONENT)
|
||||
|
||||
# Try to find out compiler flags
|
||||
find_program(${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE icu-config HINTS ${${ICU_PRIVATE_VAR_NS}_ROOT})
|
||||
if(${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE)
|
||||
execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cflags OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_C_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cxxflags OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_CXX_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cppflags OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_CPP_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cflags-dynamic OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_C_SHARED_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cxxflags-dynamic OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_CXX_SHARED_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND ${${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE} --cppflags-dynamic OUTPUT_VARIABLE ${ICU_PUBLIC_VAR_NS}_CPP_SHARED_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
endif(${ICU_PUBLIC_VAR_NS}_CONFIG_EXECUTABLE)
|
||||
|
||||
# Check find_package arguments
|
||||
include(FindPackageHandleStandardArgs)
|
||||
if(${ICU_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${ICU_PUBLIC_VAR_NS}_FIND_QUIETLY)
|
||||
find_package_handle_standard_args(
|
||||
${ICU_PUBLIC_VAR_NS}
|
||||
REQUIRED_VARS ${ICU_PUBLIC_VAR_NS}_LIBRARIES ${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS
|
||||
VERSION_VAR ${ICU_PUBLIC_VAR_NS}_VERSION
|
||||
)
|
||||
else(${ICU_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${ICU_PUBLIC_VAR_NS}_FIND_QUIETLY)
|
||||
find_package_handle_standard_args(${ICU_PUBLIC_VAR_NS} "ICU not found" ${ICU_PUBLIC_VAR_NS}_LIBRARIES ${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS)
|
||||
endif(${ICU_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${ICU_PUBLIC_VAR_NS}_FIND_QUIETLY)
|
||||
else(${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS)
|
||||
set("${ICU_PUBLIC_VAR_NS}_FOUND" FALSE)
|
||||
if(${ICU_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${ICU_PUBLIC_VAR_NS}_FIND_QUIETLY)
|
||||
message(FATAL_ERROR "Could not find ICU include directory")
|
||||
endif(${ICU_PUBLIC_VAR_NS}_FIND_REQUIRED AND NOT ${ICU_PUBLIC_VAR_NS}_FIND_QUIETLY)
|
||||
endif(${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS)
|
||||
|
||||
mark_as_advanced(
|
||||
${ICU_PUBLIC_VAR_NS}_INCLUDE_DIRS
|
||||
${ICU_PUBLIC_VAR_NS}_LIBRARIES
|
||||
)
|
||||
|
||||
# IN (args)
|
||||
icudebug("FIND_COMPONENTS")
|
||||
icudebug("FIND_REQUIRED")
|
||||
icudebug("FIND_QUIETLY")
|
||||
icudebug("FIND_VERSION")
|
||||
# OUT
|
||||
# Found
|
||||
icudebug("FOUND")
|
||||
icudebug("UC_FOUND")
|
||||
icudebug("I18N_FOUND")
|
||||
icudebug("IO_FOUND")
|
||||
icudebug("LE_FOUND")
|
||||
icudebug("LX_FOUND")
|
||||
icudebug("DATA_FOUND")
|
||||
# Flags
|
||||
icudebug("C_FLAGS")
|
||||
icudebug("CPP_FLAGS")
|
||||
icudebug("CXX_FLAGS")
|
||||
icudebug("C_SHARED_FLAGS")
|
||||
icudebug("CPP_SHARED_FLAGS")
|
||||
icudebug("CXX_SHARED_FLAGS")
|
||||
# Linking
|
||||
icudebug("INCLUDE_DIRS")
|
||||
icudebug("LIBRARIES")
|
||||
# Version
|
||||
icudebug("MAJOR_VERSION")
|
||||
icudebug("MINOR_VERSION")
|
||||
icudebug("PATCH_VERSION")
|
||||
icudebug("VERSION")
|
29
cmake/SourceGroups.cmake
Normal file
29
cmake/SourceGroups.cmake
Normal file
@ -0,0 +1,29 @@
|
||||
#include(SourceGroups)
|
||||
|
||||
set(SSRC ${CMAKE_SOURCE_DIR})
|
||||
set(BSRC ${CMAKE_BINARY_DIR})
|
||||
|
||||
set(_CPP ".*\\.cpp")
|
||||
set(CPP "${_CPP}$")
|
||||
|
||||
set(_H ".*\\.h")
|
||||
set(H "${_H}$")
|
||||
|
||||
set(H_CPP "(${H}|${CPP})")
|
||||
|
||||
source_group("Resource files" ".*\\.(rc|ico)")
|
||||
|
||||
source_group("api" "${SSRC}/api/${H_CPP}")
|
||||
source_group("ccmain" "${SSRC}/ccmain/${H_CPP}")
|
||||
source_group("ccstruct" "${SSRC}/ccstruct/${H_CPP}")
|
||||
source_group("ccutil" "${SSRC}/ccutil/${H_CPP}")
|
||||
source_group("classify" "${SSRC}/classify/${H_CPP}")
|
||||
source_group("cube" "${SSRC}/cube/${H_CPP}")
|
||||
source_group("cutil" "${SSRC}/cutil/${H_CPP}")
|
||||
source_group("dict" "${SSRC}/dict/${H_CPP}")
|
||||
source_group("neural" "${SSRC}/neural_networks/runtime/${H_CPP}")
|
||||
source_group("opencl" "${SSRC}/opencl/${H_CPP}")
|
||||
source_group("textord" "${SSRC}/textord/${H_CPP}")
|
||||
source_group("viewer" "${SSRC}/viewer/${H_CPP}")
|
||||
source_group("port" "${SSRC}/vs2010/port/${H_CPP}")
|
||||
source_group("wordrec" "${SSRC}/wordrec/${H_CPP}")
|
14
cmake/templates/TesseractConfig-version.cmake.in
Normal file
14
cmake/templates/TesseractConfig-version.cmake.in
Normal file
@ -0,0 +1,14 @@
|
||||
set(Tesseract_VERSION @VERSION_PLAIN@)
|
||||
set(PACKAGE_VERSION ${Tesseract_VERSION})
|
||||
|
||||
set(PACKAGE_VERSION_EXACT False)
|
||||
set(PACKAGE_VERSION_COMPATIBLE False)
|
||||
|
||||
if(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
|
||||
set(PACKAGE_VERSION_EXACT True)
|
||||
set(PACKAGE_VERSION_COMPATIBLE True)
|
||||
endif()
|
||||
|
||||
if(PACKAGE_FIND_VERSION VERSION_LESS PACKAGE_VERSION)
|
||||
set(PACKAGE_VERSION_COMPATIBLE True)
|
||||
endif()
|
43
cmake/templates/TesseractConfig.cmake.in
Normal file
43
cmake/templates/TesseractConfig.cmake.in
Normal file
@ -0,0 +1,43 @@
|
||||
# ===================================================================================
|
||||
# The Tesseract CMake configuration file
|
||||
#
|
||||
# ** File generated automatically, do not modify **
|
||||
#
|
||||
# Usage from an external project:
|
||||
# In your CMakeLists.txt, add these lines:
|
||||
#
|
||||
# find_package(Tesseract REQUIRED)
|
||||
# include_directories(${Tesseract_INCLUDE_DIRS})
|
||||
# target_link_libraries(MY_TARGET_NAME ${Tesseract_LIBRARIES})
|
||||
#
|
||||
# This file will define the following variables:
|
||||
# - Tesseract_LIBRARIES : The list of all imported targets for OpenCV modules.
|
||||
# - Tesseract_INCLUDE_DIRS : The Tesseract include directories.
|
||||
# - Tesseract_VERSION : The version of this Tesseract build: "@VERSION_PLAIN@"
|
||||
# - Tesseract_VERSION_MAJOR : Major version part of Tesseract_VERSION: "@VERSION_MAJOR@"
|
||||
# - Tesseract_VERSION_MINOR : Minor version part of Tesseract_VERSION: "@VERSION_MINOR@"
|
||||
#
|
||||
# ===================================================================================
|
||||
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/TesseractTargets.cmake)
|
||||
|
||||
# ======================================================
|
||||
# Version variables:
|
||||
# ======================================================
|
||||
|
||||
SET(Tesseract_VERSION @VERSION_PLAIN@)
|
||||
SET(Tesseract_VERSION_MAJOR @VERSION_MAJOR@)
|
||||
SET(Tesseract_VERSION_MINOR @VERSION_MINOR@)
|
||||
|
||||
# ======================================================
|
||||
# Include directories to add to the user project:
|
||||
# ======================================================
|
||||
|
||||
# Provide the include directories to the caller
|
||||
set(Tesseract_INCLUDE_DIRS @INCLUDE_DIR@)
|
||||
|
||||
# ====================================================================
|
||||
# Link libraries:
|
||||
# ====================================================================
|
||||
|
||||
set(Tesseract_LIBRARIES tesseract)
|
189
training/CMakeLists.txt
Normal file
189
training/CMakeLists.txt
Normal file
@ -0,0 +1,189 @@
|
||||
#
|
||||
# tesseract
|
||||
#
|
||||
|
||||
if (STATIC OR NOT (WIN32 OR CYGWIN))
|
||||
|
||||
########################################
|
||||
# LIBRARY tessopt
|
||||
########################################
|
||||
|
||||
add_library (tessopt tessopt.cpp tessopt.h)
|
||||
project_group (tessopt "Training Tools")
|
||||
|
||||
|
||||
########################################
|
||||
# LIBRARY common_training
|
||||
########################################
|
||||
|
||||
set(common_training_src
|
||||
commandlineflags.cpp
|
||||
commontraining.cpp
|
||||
)
|
||||
set(common_training_hdr
|
||||
commandlineflags.h
|
||||
commontraining.h
|
||||
)
|
||||
add_library (common_training ${common_training_src} ${common_training_hdr})
|
||||
target_link_libraries (common_training tesseract tessopt)
|
||||
project_group (common_training "Training Tools")
|
||||
|
||||
|
||||
########################################
|
||||
# EXECUTABLE ambiguous_words
|
||||
########################################
|
||||
|
||||
add_executable (ambiguous_words ambiguous_words.cpp)
|
||||
target_link_libraries (ambiguous_words tesseract)
|
||||
project_group (ambiguous_words "Training Tools")
|
||||
|
||||
|
||||
########################################
|
||||
# EXECUTABLE classifier_tester
|
||||
########################################
|
||||
|
||||
add_executable (classifier_tester classifier_tester.cpp)
|
||||
target_link_libraries (classifier_tester common_training)
|
||||
project_group (classifier_tester "Training Tools")
|
||||
|
||||
|
||||
########################################
|
||||
# EXECUTABLE combine_tessdata
|
||||
########################################
|
||||
|
||||
add_executable (combine_tessdata combine_tessdata.cpp)
|
||||
target_link_libraries (combine_tessdata tesseract)
|
||||
project_group (combine_tessdata "Training Tools")
|
||||
|
||||
|
||||
########################################
|
||||
# EXECUTABLE cntraining
|
||||
########################################
|
||||
|
||||
add_executable (cntraining cntraining.cpp)
|
||||
target_link_libraries (cntraining common_training)
|
||||
project_group (cntraining "Training Tools")
|
||||
|
||||
|
||||
########################################
|
||||
# EXECUTABLE dawg2wordlist
|
||||
########################################
|
||||
|
||||
add_executable (dawg2wordlist dawg2wordlist.cpp)
|
||||
target_link_libraries (dawg2wordlist tesseract)
|
||||
project_group (dawg2wordlist "Training Tools")
|
||||
|
||||
|
||||
########################################
|
||||
# EXECUTABLE mftraining
|
||||
########################################
|
||||
|
||||
add_executable (mftraining mftraining.cpp mergenf.cpp mergenf.h)
|
||||
target_link_libraries (mftraining common_training)
|
||||
project_group (mftraining "Training Tools")
|
||||
|
||||
|
||||
########################################
|
||||
# EXECUTABLE shapeclustering
|
||||
########################################
|
||||
|
||||
add_executable (shapeclustering shapeclustering.cpp)
|
||||
target_link_libraries (shapeclustering common_training)
|
||||
project_group (shapeclustering "Training Tools")
|
||||
|
||||
|
||||
########################################
|
||||
# EXECUTABLE unicharset_extractor
|
||||
########################################
|
||||
|
||||
add_executable (unicharset_extractor unicharset_extractor.cpp)
|
||||
target_link_libraries (unicharset_extractor tesseract tessopt)
|
||||
project_group (unicharset_extractor "Training Tools")
|
||||
|
||||
|
||||
########################################
|
||||
# EXECUTABLE wordlist2dawg
|
||||
########################################
|
||||
|
||||
add_executable (wordlist2dawg wordlist2dawg.cpp)
|
||||
target_link_libraries (wordlist2dawg tesseract)
|
||||
project_group (wordlist2dawg "Training Tools")
|
||||
|
||||
|
||||
########################################
|
||||
# EXECUTABLE set_unicharset_properties
|
||||
########################################
|
||||
|
||||
if (ICU_FOUND)
|
||||
|
||||
include_directories(${ICU_INCLUDE_DIRS})
|
||||
|
||||
add_executable (set_unicharset_properties
|
||||
set_unicharset_properties.cpp
|
||||
unicharset_training_utils.cpp
|
||||
unicharset_training_utils.h
|
||||
fileio.cpp
|
||||
fileio.h
|
||||
normstrngs.cpp
|
||||
normstrngs.h
|
||||
icuerrorcode.h
|
||||
)
|
||||
target_link_libraries (set_unicharset_properties common_training ${ICU_LIBRARIES})
|
||||
project_group (set_unicharset_properties "Training Tools")
|
||||
|
||||
|
||||
########################################
|
||||
# EXECUTABLE text2image
|
||||
########################################
|
||||
|
||||
if (PKG_CONFIG_FOUND)
|
||||
|
||||
pkg_check_modules(Pango REQUIRED pango)
|
||||
pkg_check_modules(Cairo REQUIRED cairo)
|
||||
pkg_check_modules(PangoFt2 REQUIRED pangoft2)
|
||||
pkg_check_modules(PangoCairo REQUIRED pangocairo)
|
||||
pkg_check_modules(FontConfig REQUIRED fontconfig)
|
||||
|
||||
set(text2image_src
|
||||
text2image.cpp
|
||||
boxchar.cpp
|
||||
boxchar.h
|
||||
degradeimage.cpp
|
||||
degradeimage.h
|
||||
fileio.cpp
|
||||
fileio.h
|
||||
ligature_table.cpp
|
||||
ligature_table.h
|
||||
normstrngs.cpp
|
||||
normstrngs.h
|
||||
pango_font_info.cpp
|
||||
pango_font_info.h
|
||||
stringrenderer.cpp
|
||||
stringrenderer.h
|
||||
tlog.cpp
|
||||
tlog.h
|
||||
util.h
|
||||
icuerrorcode.h
|
||||
)
|
||||
if (CYGWIN)
|
||||
set(text2image_src ${text2image_src} ../vs2010/port/strcasestr.cpp)
|
||||
endif()
|
||||
|
||||
add_executable (text2image ${text2image_src})
|
||||
target_include_directories (text2image BEFORE PRIVATE ${Cairo_INCLUDE_DIRS} ${Pango_INCLUDE_DIRS})
|
||||
target_compile_definitions (text2image PRIVATE -DPANGO_ENABLE_ENGINE)
|
||||
target_link_libraries (text2image tesseract common_training
|
||||
${ICU_LIBRARIES}
|
||||
${Pango_LIBRARIES}
|
||||
${Cairo_LIBRARIES}
|
||||
${PangoCairo_LIBRARIES}
|
||||
${PangoFt2_LIBRARIES}
|
||||
${FontConfig_LIBRARIES}
|
||||
)
|
||||
project_group (text2image "Training Tools")
|
||||
|
||||
endif(PKG_CONFIG_FOUND)
|
||||
endif(ICU_FOUND)
|
||||
endif(STATIC OR NOT (WIN32 OR CYGWIN))
|
||||
|
||||
###############################################################################
|
Loading…
Reference in New Issue
Block a user