Fix building of training tools in shared configuration.

This commit is contained in:
Egor Pugin 2016-12-17 16:19:35 +03:00
parent fc13f964b8
commit 442b5b731a
8 changed files with 86 additions and 59 deletions

View File

@ -54,11 +54,15 @@ if(NOT EXISTS ${PROJECT_SOURCE_DIR}/.cppan)
find_package(Leptonica ${MINIMUM_LEPTONICA_VERSION} REQUIRED CONFIG) find_package(Leptonica ${MINIMUM_LEPTONICA_VERSION} REQUIRED CONFIG)
endif() endif()
else() else()
if (STATIC)
set(CPPAN_BUILD_SHARED_LIBS 0)
else()
set(CPPAN_BUILD_SHARED_LIBS 1)
endif()
add_subdirectory(.cppan) add_subdirectory(.cppan)
endif() endif()
find_package(OpenCL QUIET) find_package(OpenCL QUIET)
find_package(PkgConfig)
############################################################################### ###############################################################################
# #
@ -203,7 +207,11 @@ set(tesseract_src ${tesseract_src}
add_library (tesseract ${LIBRARY_TYPE} ${tesseract_src} ${tesseract_hdr}) add_library (tesseract ${LIBRARY_TYPE} ${tesseract_src} ${tesseract_hdr})
if (NOT STATIC) if (NOT STATIC)
target_compile_definitions (tesseract PUBLIC -DTESS_EXPORTS) target_compile_definitions (tesseract
PRIVATE -DTESS_EXPORTS
INTERFACE -DTESS_IMPORTS
)
set_target_properties (tesseract PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS True)
endif() endif()
target_link_libraries (tesseract ${LIB_Ws2_32} ${LIB_pthread}) target_link_libraries (tesseract ${LIB_Ws2_32} ${LIB_pthread})
set_target_properties (tesseract PROPERTIES VERSION ${VERSION_MAJOR}.${VERSION_MINOR_0}.${VERSION_MINOR_1}) set_target_properties (tesseract PROPERTIES VERSION ${VERSION_MAJOR}.${VERSION_MINOR_0}.${VERSION_MINOR_1})
@ -217,7 +225,8 @@ if (NOT CPPAN_BUILD)
target_link_libraries (tesseract ${Leptonica_LIBRARIES}) target_link_libraries (tesseract ${Leptonica_LIBRARIES})
export(TARGETS tesseract FILE ${CMAKE_BINARY_DIR}/TesseractTargets.cmake) export(TARGETS tesseract FILE ${CMAKE_BINARY_DIR}/TesseractTargets.cmake)
else() else()
target_link_libraries (tesseract cppan) target_link_libraries (tesseract pvt.cppan.demo.leptonica)
add_dependencies (tesseract cppan)
file(WRITE ${CMAKE_BINARY_DIR}/TesseractTargets.cmake "include(${CMAKE_BINARY_DIR}/cppan.cmake)\n") file(WRITE ${CMAKE_BINARY_DIR}/TesseractTargets.cmake "include(${CMAKE_BINARY_DIR}/cppan.cmake)\n")
export(TARGETS tesseract APPEND FILE ${CMAKE_BINARY_DIR}/TesseractTargets.cmake) export(TARGETS tesseract APPEND FILE ${CMAKE_BINARY_DIR}/TesseractTargets.cmake)
endif() endif()

View File

@ -141,7 +141,7 @@ class UNICHARSET {
// Custom list of characters and their ligature forms (UTF8) // Custom list of characters and their ligature forms (UTF8)
// These map to unicode values in the private use area (PUC) and are supported // These map to unicode values in the private use area (PUC) and are supported
// by only few font families (eg. Wyld, Adobe Caslon Pro). // by only few font families (eg. Wyld, Adobe Caslon Pro).
static const char* kCustomLigatures[][2]; static TESS_API const char* kCustomLigatures[][2];
// List of strings for the SpecialUnicharCodes. Keep in sync with the enum. // List of strings for the SpecialUnicharCodes. Keep in sync with the enum.
static const char* kSpecialUnicharCodes[SPECIAL_UNICHAR_CODES_COUNT]; static const char* kSpecialUnicharCodes[SPECIAL_UNICHAR_CODES_COUNT];

View File

@ -77,7 +77,7 @@ int ShortNameToFeatureType(const FEATURE_DEFS_STRUCT &FeatureDefs,
Global Data Definitions and Declarations Global Data Definitions and Declarations
----------------------------------------------------------------------------**/ ----------------------------------------------------------------------------**/
extern const FEATURE_DESC_STRUCT MicroFeatureDesc; extern const FEATURE_DESC_STRUCT MicroFeatureDesc;
extern const FEATURE_DESC_STRUCT PicoFeatDesc; extern TESS_API const FEATURE_DESC_STRUCT PicoFeatDesc;
extern const FEATURE_DESC_STRUCT CharNormDesc; extern const FEATURE_DESC_STRUCT CharNormDesc;
extern const FEATURE_DESC_STRUCT OutlineFeatDesc; extern const FEATURE_DESC_STRUCT OutlineFeatDesc;
extern const FEATURE_DESC_STRUCT IntFeatDesc; extern const FEATURE_DESC_STRUCT IntFeatDesc;

View File

@ -61,5 +61,5 @@ extern double_VAR_H(classify_pico_feature_length, 0.05, "Pico Feature Length");
/**---------------------------------------------------------------------------- /**----------------------------------------------------------------------------
Global Data Definitions and Declarations Global Data Definitions and Declarations
----------------------------------------------------------------------------**/ ----------------------------------------------------------------------------**/
extern FLOAT32 PicoFeatureLength; extern TESS_API FLOAT32 PicoFeatureLength;
#endif #endif

View File

@ -122,10 +122,14 @@ options:
- WINDLLNAME="tesseract" - WINDLLNAME="tesseract"
shared: shared:
definitions: definitions:
public: TESS_EXPORTS private:
- TESS_EXPORTS
interface:
- TESS_IMPORTS
dependencies: dependencies:
private: private:
# tesseract uses leptonica only internally pvt.cppan.demo.leptonica: master
# and does not expose its interface to users # only for training tools, move to them later
pvt.cppan.demo.leptonica: master pvt.cppan.demo.unicode.icu.i18n: "*"

View File

@ -402,7 +402,7 @@ class Trie : public Dawg {
EDGE_VECTOR* backward_edges, EDGE_VECTOR* backward_edges,
NODE_MARKER reduced_nodes); NODE_MARKER reduced_nodes);
/** /**
* Order num_edges of consequtive EDGE_RECORDS in the given EDGE_VECTOR in * Order num_edges of consequtive EDGE_RECORDS in the given EDGE_VECTOR in
* increasing order of unichar ids. This function is normally called * increasing order of unichar ids. This function is normally called
* for all edges in a single node, and since number of edges in each node * for all edges in a single node, and since number of edges in each node

View File

@ -2,56 +2,62 @@
# tesseract # tesseract
# #
if (STATIC OR NOT (WIN32 OR CYGWIN)) if (NOT CPPAN_BUILD AND NOT (WIN32 OR CYGWIN))
return()
endif()
if (CPPAN_BUILD)
set(ICU_FOUND 1)
endif()
# experimental # experimental
if (MSVC) if (MSVC AND NOT CPPAN_BUILD)
include(CheckTypeSize)
check_type_size("void *" SIZEOF_VOID_P)
include(CheckTypeSize) if (SIZEOF_VOID_P EQUAL 8)
check_type_size("void *" SIZEOF_VOID_P) set(X64 1)
set(ARCH_DIR_NAME 64)
elseif (SIZEOF_VOID_P EQUAL 4)
set(X86 1)
set(ARCH_DIR_NAME 32)
else()
message(FATAL_ERROR "Cannot determine target architecture")
endif()
if (SIZEOF_VOID_P EQUAL 8) set(icu_dir "${CMAKE_CURRENT_BINARY_DIR}/icu")
set(X64 1) set(icu_archive "${icu_dir}/icu${ARCH_DIR_NAME}.zip")
set(ARCH_DIR_NAME 64)
elseif (SIZEOF_VOID_P EQUAL 4) if (X86)
set(X86 1) set(icu_hash 45167a240b60e36b59a87eda23490ce4)
set(ARCH_DIR_NAME 32) else()
else() set(icu_hash 480c72491576c048de1218c3c5519399)
message(FATAL_ERROR "Cannot determine target architecture") endif()
message(STATUS "Downloading latest ICU binaries")
file(DOWNLOAD
"http://download.icu-project.org/files/icu4c/56.1/icu4c-56_1-Win${ARCH_DIR_NAME}-msvc10.zip"
"${icu_archive}"
SHOW_PROGRESS
INACTIVITY_TIMEOUT 60 # seconds
EXPECTED_HASH MD5=${icu_hash}
)
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xz "${icu_archive}"
WORKING_DIRECTORY "${icu_dir}"
RESULT_VARIABLE __result
)
if(NOT __result EQUAL 0)
message(FATAL_ERROR "error ${__result}")
endif()
set(ICU_ROOT ${icu_dir}/icu)
endif() endif()
set(icu_dir "${CMAKE_CURRENT_BINARY_DIR}/icu")
set(icu_archive "${icu_dir}/icu${ARCH_DIR_NAME}.zip")
if (X86)
set(icu_hash 45167a240b60e36b59a87eda23490ce4)
else()
set(icu_hash 480c72491576c048de1218c3c5519399)
endif()
message(STATUS "Downloading latest ICU binaries")
file(DOWNLOAD
"http://download.icu-project.org/files/icu4c/56.1/icu4c-56_1-Win${ARCH_DIR_NAME}-msvc10.zip"
"${icu_archive}"
SHOW_PROGRESS
INACTIVITY_TIMEOUT 60 # seconds
EXPECTED_HASH MD5=${icu_hash}
)
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xz "${icu_archive}"
WORKING_DIRECTORY "${icu_dir}"
RESULT_VARIABLE __result
)
if(NOT __result EQUAL 0)
message(FATAL_ERROR "error ${__result}")
endif()
set(ICU_ROOT ${icu_dir}/icu)
endif(MSVC)
# experimental # experimental
if (NOT CPPAN_BUILD)
find_package(ICU COMPONENTS uc i18n) find_package(ICU COMPONENTS uc i18n)
endif()
######################################## ########################################
# LIBRARY tessopt # LIBRARY tessopt
@ -159,7 +165,9 @@ project_group (wordlist2dawg "Training Tools")
if (ICU_FOUND) if (ICU_FOUND)
if (NOT CPPAN_BUILD)
include_directories(${ICU_INCLUDE_DIRS}) include_directories(${ICU_INCLUDE_DIRS})
endif()
######################################## ########################################
# LIBRARY unicharset_training # LIBRARY unicharset_training
@ -177,7 +185,11 @@ set(unicharset_training_src
unicharset_training_utils.h unicharset_training_utils.h
) )
add_library (unicharset_training ${unicharset_training_src}) add_library (unicharset_training ${unicharset_training_src})
if (NOT CPPAN_BUILD)
target_link_libraries (unicharset_training common_training ${ICU_LIBRARIES}) target_link_libraries (unicharset_training common_training ${ICU_LIBRARIES})
else()
target_link_libraries (unicharset_training common_training pvt.cppan.demo.unicode.icu.i18n)
endif()
project_group (unicharset_training "Training Tools") project_group (unicharset_training "Training Tools")
@ -198,6 +210,7 @@ add_executable (lstmtraining lstmtraining.cpp)
target_link_libraries (lstmtraining unicharset_training) target_link_libraries (lstmtraining unicharset_training)
project_group (lstmtraining "Training Tools") project_group (lstmtraining "Training Tools")
######################################## ########################################
# EXECUTABLE set_unicharset_properties # EXECUTABLE set_unicharset_properties
######################################## ########################################
@ -211,6 +224,10 @@ project_group (set_unicharset_properties "Training Tools")
# EXECUTABLE text2image # EXECUTABLE text2image
######################################## ########################################
if (NOT CPPAN_BUILD)
find_package(PkgConfig)
endif()
if (PKG_CONFIG_FOUND) if (PKG_CONFIG_FOUND)
pkg_check_modules(Pango REQUIRED pango) pkg_check_modules(Pango REQUIRED pango)
@ -246,7 +263,6 @@ add_executable (text2image ${text2image_src})
target_include_directories (text2image BEFORE PRIVATE ${Cairo_INCLUDE_DIRS} ${Pango_INCLUDE_DIRS}) target_include_directories (text2image BEFORE PRIVATE ${Cairo_INCLUDE_DIRS} ${Pango_INCLUDE_DIRS})
target_compile_definitions (text2image PRIVATE -DPANGO_ENABLE_ENGINE) target_compile_definitions (text2image PRIVATE -DPANGO_ENABLE_ENGINE)
target_link_libraries (text2image tesseract unicharset_training target_link_libraries (text2image tesseract unicharset_training
${ICU_LIBRARIES}
${Pango_LIBRARIES} ${Pango_LIBRARIES}
${Cairo_LIBRARIES} ${Cairo_LIBRARIES}
${PangoCairo_LIBRARIES} ${PangoCairo_LIBRARIES}
@ -257,6 +273,5 @@ project_group (text2image "Training Tools")
endif(PKG_CONFIG_FOUND) endif(PKG_CONFIG_FOUND)
endif(ICU_FOUND) endif(ICU_FOUND)
endif(STATIC OR NOT (WIN32 OR CYGWIN))
############################################################################### ###############################################################################

View File

@ -33,7 +33,6 @@
#include <string.h> #include <string.h>
#include <math.h> #include <math.h>
/*-------------------once in subfeat---------------------------------*/ /*-------------------once in subfeat---------------------------------*/
double_VAR(training_angle_match_scale, 1.0, "Angle Match Scale ..."); double_VAR(training_angle_match_scale, 1.0, "Angle Match Scale ...");
@ -199,9 +198,9 @@ int FindClosestExistingProto(CLASS_TYPE Class, int NumMerged[],
* *
* @param New new proto to be filled in * @param New new proto to be filled in
* @param Old old proto to be converted * @param Old old proto to be converted
* *
* Globals: none * Globals: none
* *
* Exceptions: none * Exceptions: none
* History: Mon Nov 26 09:45:39 1990, DSJ, Created. * History: Mon Nov 26 09:45:39 1990, DSJ, Created.
*/ */