|
|
|
@ -69,6 +69,7 @@ function (find_required_program NAME FILENAME DESCRIPTION) |
|
|
|
endfunction (find_required_program) |
|
|
|
|
|
|
|
# Options that can be passed to CMake using 'cmake -DKEY=VALUE'. |
|
|
|
option ("BUILD_GEOCODER" "Build the offline phone number geocoder" "ON") |
|
|
|
option ("USE_ICU_REGEXP" "Use ICU regexp engine" "ON") |
|
|
|
option ("USE_LITE_METADATA" "Use lite metadata" "OFF") |
|
|
|
option ("USE_RE2" "Use RE2" "OFF") |
|
|
|
@ -99,8 +100,8 @@ check_library_version (PC_ICU_UC icu-uc>=4.4) |
|
|
|
|
|
|
|
set (ICU_INCLUDE_DIR ${ICU_UC_INCLUDE_DIR}) |
|
|
|
set (ICU_LIB ${ICU_UC_LIB}) |
|
|
|
# If ICU regexp engine is used, use icui18n as well. |
|
|
|
if (${USE_ICU_REGEXP} STREQUAL "ON") |
|
|
|
# If ICU regexp engine is used or if the geocoder is built, use icui18n as well. |
|
|
|
if (${USE_ICU_REGEXP} STREQUAL "ON" OR ${BUILD_GEOCODER} STREQUAL "ON") |
|
|
|
find_required_library (ICU_I18N unicode/regex.h icui18n "ICU") |
|
|
|
check_library_version (PC_ICU_I18N icu-i18n>=4.4) |
|
|
|
list (APPEND ICU_INCLUDE_DIR ${ICU_I18N_INCLUDE_DIR}) |
|
|
|
@ -149,43 +150,34 @@ add_custom_command ( |
|
|
|
DEPENDS ${PROTOBUF_SOURCES} |
|
|
|
) |
|
|
|
|
|
|
|
add_custom_target ( |
|
|
|
generate-sources |
|
|
|
|
|
|
|
DEPENDS ${PROTOBUF_OUTPUT} |
|
|
|
COMMENT "Generating Protocol Buffers code" |
|
|
|
) |
|
|
|
|
|
|
|
# Geocoding data cpp file generation |
|
|
|
set (TOOLS_DIR "${CMAKE_CURRENT_BINARY_DIR}/tools") |
|
|
|
add_subdirectory("${CMAKE_SOURCE_DIR}/../tools/cpp" "${TOOLS_DIR}") |
|
|
|
if (${BUILD_GEOCODER} STREQUAL "ON") |
|
|
|
# Geocoding data cpp file generation |
|
|
|
set (TOOLS_DIR "${CMAKE_CURRENT_BINARY_DIR}/tools") |
|
|
|
add_subdirectory("${CMAKE_SOURCE_DIR}/../tools/cpp" "${TOOLS_DIR}") |
|
|
|
|
|
|
|
set (GEOCODING_DIR "${RESOURCES_DIR}/geocoding") |
|
|
|
file (GLOB_RECURSE GEOCODING_SOURCES "${GEOCODING_DIR}/*.txt") |
|
|
|
set (GEOCODING_DIR "${RESOURCES_DIR}/geocoding") |
|
|
|
file (GLOB_RECURSE GEOCODING_SOURCES "${GEOCODING_DIR}/*.txt") |
|
|
|
|
|
|
|
set (GEOCODING_DATA_OUTPUT |
|
|
|
"${CMAKE_SOURCE_DIR}/src/phonenumbers/geocoding/geocoding_data.cc" |
|
|
|
) |
|
|
|
set (GEOCODING_DATA_OUTPUT |
|
|
|
"${CMAKE_SOURCE_DIR}/src/phonenumbers/geocoding/geocoding_data.cc" |
|
|
|
) |
|
|
|
|
|
|
|
add_custom_command ( |
|
|
|
COMMAND generate_geocoding_data "${GEOCODING_DIR}" "${GEOCODING_DATA_OUTPUT}" |
|
|
|
add_custom_command ( |
|
|
|
COMMAND generate_geocoding_data "${GEOCODING_DIR}" |
|
|
|
"${GEOCODING_DATA_OUTPUT}" |
|
|
|
|
|
|
|
OUTPUT ${GEOCODING_DATA_OUTPUT} |
|
|
|
DEPENDS ${GEOCODING_SOURCES} |
|
|
|
generate_geocoding_data |
|
|
|
COMMENT "Generating geocoding data code" |
|
|
|
) |
|
|
|
OUTPUT ${GEOCODING_DATA_OUTPUT} |
|
|
|
DEPENDS ${GEOCODING_SOURCES} |
|
|
|
generate_geocoding_data |
|
|
|
COMMENT "Generating geocoding data code" |
|
|
|
) |
|
|
|
endif () |
|
|
|
|
|
|
|
set ( |
|
|
|
SOURCES |
|
|
|
"src/base/string_piece.cc" |
|
|
|
"src/phonenumbers/asyoutypeformatter.cc" |
|
|
|
"src/phonenumbers/default_logger.cc" |
|
|
|
"src/phonenumbers/geocoding/area_code_map.cc" |
|
|
|
"src/phonenumbers/geocoding/default_map_storage.cc" |
|
|
|
"src/phonenumbers/geocoding/geocoding_data.cc" |
|
|
|
"src/phonenumbers/geocoding/mapping_file_provider.cc" |
|
|
|
"src/phonenumbers/geocoding/phonenumber_offline_geocoder.cc" |
|
|
|
"src/phonenumbers/logger.cc" |
|
|
|
"src/phonenumbers/phonemetadata.pb.cc" # Generated by Protocol Buffers. |
|
|
|
"src/phonenumbers/phonenumber.cc" |
|
|
|
@ -201,6 +193,17 @@ set ( |
|
|
|
"src/phonenumbers/utf/unilib.cc" |
|
|
|
) |
|
|
|
|
|
|
|
if (${BUILD_GEOCODER} STREQUAL "ON") |
|
|
|
set ( |
|
|
|
GEOCODING_SOURCES |
|
|
|
"src/phonenumbers/geocoding/area_code_map.cc" |
|
|
|
"src/phonenumbers/geocoding/default_map_storage.cc" |
|
|
|
"src/phonenumbers/geocoding/geocoding_data.cc" |
|
|
|
"src/phonenumbers/geocoding/mapping_file_provider.cc" |
|
|
|
"src/phonenumbers/geocoding/phonenumber_offline_geocoder.cc" |
|
|
|
) |
|
|
|
endif () |
|
|
|
|
|
|
|
# Add regexp engine-dependent sources. ICU is used by default. |
|
|
|
if (${USE_RE2} STREQUAL "ON") |
|
|
|
# Add a flag to select the right regexp factory implementation used by |
|
|
|
@ -221,8 +224,12 @@ if (${USE_ICU_REGEXP} STREQUAL "ON") |
|
|
|
endif () |
|
|
|
|
|
|
|
# Library sources excluding the metadata files, since special metadata is used |
|
|
|
# for unit-testing. |
|
|
|
# for unit-testing. Note that a single testing library is built for both |
|
|
|
# libphonenumber and geocoding. |
|
|
|
set (TESTING_LIBRARY_SOURCES ${SOURCES}) |
|
|
|
if (${BUILD_GEOCODER} STREQUAL "ON") |
|
|
|
list (APPEND TESTING_LIBRARY_SOURCES ${GEOCODING_SOURCES}) |
|
|
|
endif () |
|
|
|
|
|
|
|
# Add metadata code generation targets. |
|
|
|
|
|
|
|
@ -304,11 +311,23 @@ include_directories ("src") |
|
|
|
|
|
|
|
# Build a static library (without -fPIC). |
|
|
|
add_library (phonenumber STATIC ${SOURCES}) |
|
|
|
add_dependencies (phonenumber generate-sources ${METADATA_TARGET}) |
|
|
|
if (${USE_ICU_REGEXP} STREQUAL "ON") |
|
|
|
add_dependencies (phonenumber ${ALT_FORMAT_METADATA_TARGET}) |
|
|
|
endif () |
|
|
|
|
|
|
|
if (${BUILD_GEOCODER} STREQUAL "ON") |
|
|
|
add_library (geocoding STATIC ${GEOCODING_SOURCES}) |
|
|
|
# The geocoder doesn't use RE2 so there is no reason not to build a shared |
|
|
|
# library for it. |
|
|
|
add_library (geocoding-shared SHARED ${GEOCODING_SOURCES}) |
|
|
|
set_target_properties (geocoding-shared |
|
|
|
PROPERTIES |
|
|
|
OUTPUT_NAME "geocoding" |
|
|
|
PREFIX "lib" |
|
|
|
SOVERSION ${libphonenumber_VERSION_MAJOR} |
|
|
|
VERSION ${libphonenumber_VERSION_MAJOR}.${libphonenumber_VERSION_MINOR}) |
|
|
|
endif () |
|
|
|
|
|
|
|
# Build a shared library (with -fPIC). |
|
|
|
set (BUILD_SHARED_LIB true) |
|
|
|
|
|
|
|
@ -324,7 +343,6 @@ endif () |
|
|
|
|
|
|
|
if (BUILD_SHARED_LIB) |
|
|
|
add_library (phonenumber-shared SHARED ${SOURCES}) |
|
|
|
add_dependencies (phonenumber-shared generate-sources ${METADATA_TARGET}) |
|
|
|
if (${USE_ICU_REGEXP} STREQUAL "ON") |
|
|
|
add_dependencies (phonenumber ${ALT_FORMAT_METADATA_TARGET}) |
|
|
|
endif () |
|
|
|
@ -336,51 +354,61 @@ if (BUILD_SHARED_LIB) |
|
|
|
VERSION ${libphonenumber_VERSION_MAJOR}.${libphonenumber_VERSION_MINOR}) |
|
|
|
endif () |
|
|
|
|
|
|
|
set (LIBRARY_DEPS ${PROTOBUF_LIB} ${ICU_LIB} ${Boost_LIBRARIES}) |
|
|
|
# Libraries used by both libphonenumber and libgeocoding. |
|
|
|
set (COMMON_DEPS ${ICU_LIB}) |
|
|
|
|
|
|
|
set (LIBRARY_DEPS ${PROTOBUF_LIB} ${Boost_LIBRARIES}) |
|
|
|
|
|
|
|
if (${USE_RE2} STREQUAL "ON") |
|
|
|
list (APPEND LIBRARY_DEPS ${RE2_LIB}) |
|
|
|
endif () |
|
|
|
|
|
|
|
if (APPLE) |
|
|
|
list (APPEND LIBRARY_DEPS ${COREFOUNDATION_LIB} ${FOUNDATION_LIB}) |
|
|
|
list (APPEND COMMON_DEPS ${COREFOUNDATION_LIB} ${FOUNDATION_LIB}) |
|
|
|
endif () |
|
|
|
|
|
|
|
list (APPEND LIBRARY_DEPS ${COMMON_DEPS}) |
|
|
|
|
|
|
|
target_link_libraries (phonenumber ${LIBRARY_DEPS}) |
|
|
|
|
|
|
|
if (BUILD_SHARED_LIB) |
|
|
|
target_link_libraries (phonenumber-shared ${LIBRARY_DEPS}) |
|
|
|
endif () |
|
|
|
|
|
|
|
if (${BUILD_GEOCODER} STREQUAL "ON") |
|
|
|
list (APPEND GEOCODER_DEPS ${COMMON_DEPS}) |
|
|
|
# Note that the subset of base/ on which the geocoder relies is implemented |
|
|
|
# on top of Boost header-only libraries (e.g. scoped_ptr.hpp). |
|
|
|
target_link_libraries (geocoding ${LIBRARY_DEPS}) |
|
|
|
target_link_libraries (geocoding-shared ${LIBRARY_DEPS}) |
|
|
|
endif () |
|
|
|
|
|
|
|
# Build a specific library for testing purposes. |
|
|
|
add_library (phonenumber_testing STATIC ${TESTING_LIBRARY_SOURCES}) |
|
|
|
target_link_libraries (phonenumber_testing ${LIBRARY_DEPS}) |
|
|
|
add_dependencies (phonenumber_testing generate-sources ${TEST_METADATA_TARGET}) |
|
|
|
|
|
|
|
# Test geocoding data cpp files generation |
|
|
|
set (GEOCODING_TEST_DIR "${RESOURCES_DIR}/test/geocoding") |
|
|
|
file (GLOB_RECURSE GEOCODING_TEST_SOURCES "${GEOCODING_TEST_DIR}/*.txt") |
|
|
|
if (${BUILD_GEOCODER} STREQUAL "ON") |
|
|
|
# Test geocoding data cpp files generation. |
|
|
|
set (GEOCODING_TEST_DIR "${RESOURCES_DIR}/test/geocoding") |
|
|
|
file (GLOB_RECURSE GEOCODING_TEST_SOURCES "${GEOCODING_TEST_DIR}/*.txt") |
|
|
|
|
|
|
|
set (GEOCODING_TEST_DATA_OUTPUT |
|
|
|
"${CMAKE_SOURCE_DIR}/test/phonenumbers/geocoding/geocoding_test_data.cc" |
|
|
|
) |
|
|
|
set (GEOCODING_TEST_DATA_OUTPUT |
|
|
|
"${CMAKE_SOURCE_DIR}/test/phonenumbers/geocoding/geocoding_test_data.cc" |
|
|
|
) |
|
|
|
|
|
|
|
add_custom_command ( |
|
|
|
COMMAND generate_geocoding_data "${GEOCODING_TEST_DIR}" |
|
|
|
"${GEOCODING_TEST_DATA_OUTPUT}" "_test" |
|
|
|
add_custom_command ( |
|
|
|
COMMAND generate_geocoding_data "${GEOCODING_TEST_DIR}" |
|
|
|
"${GEOCODING_TEST_DATA_OUTPUT}" "_test" |
|
|
|
|
|
|
|
OUTPUT ${GEOCODING_TEST_DATA_OUTPUT} |
|
|
|
DEPENDS ${GEOCODING_TEST_SOURCES} generate_geocoding_data |
|
|
|
COMMENT "Generating geocoding test data code" |
|
|
|
) |
|
|
|
endif () |
|
|
|
|
|
|
|
OUTPUT ${GEOCODING_TEST_DATA_OUTPUT} |
|
|
|
DEPENDS ${GEOCODING_TEST_SOURCES} generate_geocoding_data |
|
|
|
COMMENT "Generating geocoding test data code" |
|
|
|
) |
|
|
|
|
|
|
|
set (TEST_SOURCES |
|
|
|
"test/phonenumbers/asyoutypeformatter_test.cc" |
|
|
|
"test/phonenumbers/geocoding/area_code_map_test.cc" |
|
|
|
"test/phonenumbers/geocoding/geocoding_data_test.cc" |
|
|
|
"test/phonenumbers/geocoding/geocoding_test_data.cc" |
|
|
|
"test/phonenumbers/geocoding/mapping_file_provider_test.cc" |
|
|
|
"test/phonenumbers/geocoding/phonenumber_offline_geocoder_test.cc" |
|
|
|
"test/phonenumbers/logger_test.cc" |
|
|
|
"test/phonenumbers/phonenumberutil_test.cc" |
|
|
|
"test/phonenumbers/regexp_adapter_test.cc" |
|
|
|
@ -392,6 +420,18 @@ set (TEST_SOURCES |
|
|
|
"test/phonenumbers/unicodestring_test.cc" |
|
|
|
"test/phonenumbers/utf/unicodetext_test.cc" |
|
|
|
) |
|
|
|
|
|
|
|
if (${BUILD_GEOCODER} STREQUAL "ON") |
|
|
|
set (GEOCODING_TEST_SOURCES |
|
|
|
"test/phonenumbers/geocoding/area_code_map_test.cc" |
|
|
|
"test/phonenumbers/geocoding/geocoding_data_test.cc" |
|
|
|
"test/phonenumbers/geocoding/geocoding_test_data.cc" |
|
|
|
"test/phonenumbers/geocoding/mapping_file_provider_test.cc" |
|
|
|
"test/phonenumbers/geocoding/phonenumber_offline_geocoder_test.cc" |
|
|
|
) |
|
|
|
list (APPEND TEST_SOURCES ${GEOCODING_TEST_SOURCES}) |
|
|
|
endif () |
|
|
|
|
|
|
|
if (${USE_ICU_REGEXP} STREQUAL "ON") |
|
|
|
# Add the phone number matcher tests. |
|
|
|
list (APPEND TEST_SOURCES "test/phonenumbers/phonenumbermatch_test.cc") |
|
|
|
@ -408,12 +448,21 @@ if (NOT WIN32) |
|
|
|
endif () |
|
|
|
|
|
|
|
target_link_libraries (libphonenumber_test ${TEST_LIBS}) |
|
|
|
add_custom_target (test |
|
|
|
COMMAND generate_geocoding_data_test |
|
|
|
COMMAND libphonenumber_test |
|
|
|
|
|
|
|
DEPENDS generate_geocoding_data_test libphonenumber_test |
|
|
|
) |
|
|
|
# Unfortunately add_custom_target() can't accept a single command provided as a |
|
|
|
# list of commands. |
|
|
|
if (${BUILD_GEOCODER} STREQUAL "ON") |
|
|
|
add_custom_target (test |
|
|
|
COMMAND generate_geocoding_data_test |
|
|
|
COMMAND libphonenumber_test |
|
|
|
DEPENDS generate_geocoding_data_test libphonenumber_test |
|
|
|
) |
|
|
|
else () |
|
|
|
add_custom_target (test |
|
|
|
COMMAND libphonenumber_test |
|
|
|
DEPENDS libphonenumber_test |
|
|
|
) |
|
|
|
endif () |
|
|
|
|
|
|
|
# Install rules. |
|
|
|
install (FILES |
|
|
|
@ -443,6 +492,13 @@ if (${USE_ICU_REGEXP} STREQUAL "ON") |
|
|
|
) |
|
|
|
endif () |
|
|
|
|
|
|
|
if (${BUILD_GEOCODER} STREQUAL "ON") |
|
|
|
install (FILES |
|
|
|
"src/phonenumbers/geocoding/phonenumber_offline_geocoder.h" |
|
|
|
DESTINATION include/phonenumbers/geocoding |
|
|
|
) |
|
|
|
endif () |
|
|
|
|
|
|
|
install (FILES "src/base/basictypes.h" DESTINATION include/base/) |
|
|
|
|
|
|
|
install (FILES |
|
|
|
@ -460,3 +516,19 @@ if (BUILD_SHARED_LIB) |
|
|
|
install (TARGETS phonenumber-shared LIBRARY DESTINATION lib/ ARCHIVE |
|
|
|
DESTINATION lib/) |
|
|
|
endif () |
|
|
|
|
|
|
|
if (${BUILD_GEOCODER} STREQUAL "ON") |
|
|
|
install (TARGETS geocoding LIBRARY DESTINATION lib/ ARCHIVE DESTINATION lib/) |
|
|
|
install (TARGETS geocoding-shared LIBRARY DESTINATION lib/ ARCHIVE |
|
|
|
DESTINATION lib/) |
|
|
|
endif () |
|
|
|
|
|
|
|
# Build an example program using geocoding, mainly to make sure that both |
|
|
|
# libraries are built properly. |
|
|
|
if (${BUILD_GEOCODER} STREQUAL "ON") |
|
|
|
add_executable ( |
|
|
|
geocoding_test_program |
|
|
|
"test/phonenumbers/geocoding/geocoding_test_program.cc" |
|
|
|
) |
|
|
|
target_link_libraries (geocoding_test_program geocoding phonenumber) |
|
|
|
endif () |