Skip to content

Commit

Permalink
Initial CMake implementation.
Browse files Browse the repository at this point in the history
  • Loading branch information
egorpugin committed Sep 5, 2015
1 parent 73b2898 commit 56a5195
Show file tree
Hide file tree
Showing 5 changed files with 405 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,6 @@ training/wordlist2dawg
tesseract_opencl_profile_devices.dat
kernel*.bin

# build dirs
/build*
/win*
211 changes: 211 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
#
# tesseract
#

###############################################################################
#
# cmake settings
#
###############################################################################

cmake_minimum_required(VERSION 2.8.12)

# 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)

###############################################################################
#
# 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()
endif()

###############################################################################
#
# configure
#
###############################################################################

set(AUTOCONFIG_SRC ${CMAKE_BINARY_DIR}/config_auto.h.in)
set(AUTOCONFIG ${CMAKE_BINARY_DIR}/src/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
#
###############################################################################

########################################
# FUNCTION build_dir
########################################
function(build_dir target_name)
if (${ARGC} GREATER 1)
set(dir ${ARGV1})
else()
set(dir ${target_name})
endif()
file(GLOB ${dir}_src "${dir}/*.cpp")
file(GLOB ${dir}_hdr "${dir}/*.h")
add_library(${target_name} ${${dir}_src} ${${dir}_hdr})
endfunction(build_dir)
########################################

add_definitions(-D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1)
add_definitions(-DUSE_STD_NAMESPACE=1)
add_definitions(-DWINDLLNAME="libtesseract${VERSION_MAJOR}${VERSION_MINOR}.dll")
add_definitions(-DTESS_EXPORTS)

include_directories(${Leptonica_INCLUDE_DIRS})

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 api
########################################

set(api_src
api/baseapi.cpp
api/capi.cpp
api/renderer.cpp
api/pdfrenderer.cpp
)
file(GLOB api_hdr "api/*.h")
add_library(api ${api_src} ${api_hdr})


########################################

########################################
# LIBRARIES tesseract
########################################

build_dir(main ccmain)
build_dir(struct ccstruct)
build_dir(ccutil)
build_dir(classify)
build_dir(cube)
build_dir(cutil)
build_dir(dict)
build_dir(neural neural_networks/runtime)
build_dir(opencl)
build_dir(textord)
build_dir(viewer)
build_dir(port vs2010/port)
build_dir(wordrec)


########################################
# LIBRARY tesseract
########################################

add_library (tesseract ${LIBRARY_TYPE} ${tesseract_src} ${tesseract_hdr})
target_link_libraries (tesseract
PRIVATE
main
struct
ccutil
classify
cube
cutil
dict
neural
opencl
textord
viewer
port
wordrec

PUBLIC
${Leptonica_LIBRARIES}
Ws2_32
)
set_target_properties (tesseract PROPERTIES OUTPUT_NAME libtesseract${VERSION_MAJOR}${VERSION_MINOR})
set_target_properties (tesseract PROPERTIES DEBUG_OUTPUT_NAME libtesseract${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)

###############################################################################
134 changes: 134 additions & 0 deletions cmake/Configure.cmake
Original file line number Diff line number Diff line change
@@ -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)

########################################

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
memory.h
stdint.h
stdlib.h
strings.h
string.h
sys/stat.h
sys/types.h
unistd.h

openjpeg-2.0/openjpeg.h
openjpeg-2.1/openjpeg.h
openjpeg-2.2/openjpeg.h
)
check_includes(include_files_list)

set(functions_list
fmemopen
)
check_functions(functions_list)

test_big_endian(WORDS_BIGENDIAN)

set(STDC_HEADERS 1)

if (GIF_FOUND)
set(HAVE_LIBGIF 1)
endif()

if (JPEG_FOUND)
set(HAVE_LIBJPEG 1)
endif()

if (PNG_FOUND)
set(HAVE_LIBPNG 1)
endif()

if (TIFF_FOUND)
set(HAVE_LIBTIFF 1)
endif()

if (ZLIB_FOUND)
set(HAVE_LIBZ 1)
endif()

file(APPEND ${AUTOCONFIG_SRC} "
/* Define to 1 if you have the ANSI C header files. */
#cmakedefine STDC_HEADERS 1
/* Define to 1 if you have giflib. */
#cmakedefine HAVE_LIBGIF 1
/* Define to 1 if you have libopenjp2. */
#cmakedefine HAVE_LIBJP2K 1
/* Define to 1 if you have jpeg. */
#cmakedefine HAVE_LIBJPEG 1
/* Define to 1 if you have libpng. */
#cmakedefine HAVE_LIBPNG 1
/* Define to 1 if you have libtiff. */
#cmakedefine HAVE_LIBTIFF 1
/* Define to 1 if you have libwebp. */
#cmakedefine HAVE_LIBWEBP 1
/* Define to 1 if you have zlib. */
#cmakedefine HAVE_LIBZ 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
")

########################################

################################################################################
14 changes: 14 additions & 0 deletions cmake/templates/TesseractConfig-version.cmake.in
Original file line number Diff line number Diff line change
@@ -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()
Loading

0 comments on commit 56a5195

Please sign in to comment.