@ -16,15 +16,13 @@
cmake_minimum_required ( VERSION 3.11 )
project ( libphonenumber VERSION 8.13.0 )
# P i c k t h e C + + s t a n d a r d t o c o m p i l e w i t h .
# A b s e i l c u r r e n t l y s u p p o r t s C + + 1 1 , C + + 1 4 , a n d C + + 1 7 .
set ( CMAKE_CXX_STANDARD 11 CACHE STRING "C++ standard used to compile this project" )
set ( CMAKE_CXX_STANDARD_REQUIRED ON )
project ( libphonenumber )
set ( libphonenumber_VERSION_MAJOR 8 )
set ( libphonenumber_VERSION_MINOR 13 )
set ( libphonenumber_VERSION_PATCH 0 )
set ( CMAKE_POSITION_INDEPENDENT_CODE TRUE )
if ( 32BIT )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32" )
@ -36,8 +34,8 @@ endif ()
# H e l p e r f u n c t i o n s d e a l i n g w i t h f i n d i n g l i b r a r i e s a n d p r o g r a m s t h i s l i b r a r y
# d e p e n d s o n .
include ( FetchContent )
include ( GNUInstallDirs )
include ( ../tools/cpp/gtest.cmake )
function ( print_error DESCRIPTION FILE )
message ( FATAL_ERROR
@ -83,25 +81,54 @@ function (find_required_program NAME FILENAME DESCRIPTION)
endfunction ( find_required_program )
# O p t i o n s t h a t c a n b e p a s s e d t o C M a k e u s i n g ' c m a k e - D K E Y = V A L U E ' .
option ( "BUILD_GEOCODER" "Build the offline phone number geocoder" "ON" )
option ( "REGENERATE_METADATA" "Regenerate metadata instead of using it from the source tree" "ON" )
option ( "USE_ALTERNATE_FORMATS" "Use alternate formats" "ON" )
option ( "USE_PROTOBUF_LITE" "Link to protobuf-lite" "OFF" )
option ( "USE_BOOST" "Use Boost" "ON" )
option ( "USE_ICU_REGEXP" "Use ICU regexp engine" "ON" )
option ( "USE_LITE_METADATA" "Use lite metadata" "OFF" )
option ( "USE_RE2" "Use RE2" "OFF" )
option ( "USE_STD_MAP" "Force the use of std::map" "OFF" )
option ( "BUILD_STATIC_LIB" "Build static libraries" "ON" )
option ( "USE_STDMUTEX" "Use C++ 2011 std::mutex for multi-threading" "OFF" )
option ( "USE_POSIX_THREAD" "Use Posix api for multi-threading" "OFF" )
if ( ${ USE_ALTERNATE_FORMATS } STREQUAL "ON" )
option ( BUILD_GEOCODER "Build the offline phone number geocoder" ON )
option ( REGENERATE_METADATA "Regenerate metadata instead of using it from the source tree" ON )
option ( USE_ALTERNATE_FORMATS "Use alternate formats" ON )
option ( USE_PROTOBUF_LITE "Link to protobuf-lite" OFF )
option ( USE_BOOST "Use Boost" ON )
option ( USE_ICU_REGEXP "Use ICU regexp engine" ON )
option ( USE_LITE_METADATA "Use lite metadata" OFF )
option ( USE_RE2 "Use RE2" OFF )
option ( USE_STD_MAP "Force the use of std::map" OFF )
option ( BUILD_STATIC_LIB "Build static libraries" ON )
option ( BUILD_SHARED_LIBS "Build shared libraries" ON )
option ( BUILD_TESTING "Build testing" ON )
option ( USE_STDMUTEX "Use C++ 2011 std::mutex for multi-threading" OFF )
option ( USE_POSIX_THREAD "Use Posix api for multi-threading" OFF )
if ( USE_ALTERNATE_FORMATS )
add_definitions ( "-DI18N_PHONENUMBERS_USE_ALTERNATE_FORMATS" )
endif ( )
# F i n d a l l t h e r e q u i r e d l i b r a r i e s a n d p r o g r a m s .
if ( ${ USE_BOOST } STREQUAL "ON" )
find_package ( absl )
if ( NOT absl_FOUND )
# D o w n l o a d i n g t h e a b s e i l s o u r c e s a t p a r t i c u l a r v e r s i o n t o n o t c a t c h u p
# w i t h i t s n e w b u i l d r e q u i r e m e n t s l i k e m i n C + + 1 4 i s m a n d a t e d i n t h a t l i b .
FetchContent_Declare (
a b s e i l - c p p
G I T _ R E P O S I T O R Y h t t p s : / / g i t h u b . c o m / a b s e i l / a b s e i l - c p p . g i t
G I T _ T A G 2 7 3 2 9 2 d
)
# B u i l d i n g t h e a b s e i l b i n a r i e s
FetchContent_GetProperties ( abseil-cpp )
if ( NOT abseil-cpp_POPULATED )
FetchContent_Populate ( abseil-cpp )
endif ( )
if ( NOT abseil-cpp_POPULATED )
message ( FATAL_ERROR "Could not build abseil-cpp binaries." )
endif ( )
# S a f e g u a r d i n g a g a i n s t a n y p o t e n t i a l l i n k e r r o r s a s m e n t i o n e d i n
# h t t p s : / / g i t h u b . c o m / a b s e i l / a b s e i l - c p p / i s s u e s / 2 2 5
set ( CMAKE_POSITION_INDEPENDENT_CODE TRUE )
add_subdirectory ( ${ abseil-cpp_SOURCE_DIR } ${ abseil-cpp_BINARY_DIR } )
endif ( )
if ( USE_BOOST )
add_definitions ( "-DI18N_PHONENUMBERS_USE_BOOST" )
if ( WIN32 )
set ( Boost_USE_STATIC_LIBS ON )
@ -113,26 +140,29 @@ if (${USE_BOOST} STREQUAL "ON")
include_directories ( ${ Boost_INCLUDE_DIRS } )
endif ( )
if ( ${ USE_STDMUTEX } STREQUAL "ON" )
if ( USE_STDMUTEX )
add_definitions ( "-DI18N_PHONENUMBERS_USE_STDMUTEX" )
endif ( )
if ( ${ USE_POSIX_THREAD } STREQUAL "ON" )
if ( USE_POSIX_THREAD )
add_definitions ( "-DI18N_PHONENUMBERS_HAVE_POSIX_THREAD" )
find_package ( Threads REQUIRED )
endif ( )
if ( ${ USE_BOOST } STREQUAL "OFF" AND ${ USE_STDMUTEX } STREQUAL "OFF" )
if ( ( NOT USE_BOOST ) AND ( NOT USE_STDMUTEX ) )
find_package ( Threads )
endif ( )
find_or_build_gtest ( )
if ( BUILD_TESTING )
include ( ../tools/cpp/gtest.cmake )
find_or_build_gtest ( )
endif ( )
if ( ${ USE_RE2 } STREQUAL "ON" )
if ( USE_RE2 )
find_required_library ( RE2 re2/re2.h re2 "Google RE2" )
endif ( )
if ( ${ USE_PROTOBUF_LITE } STREQUAL "ON" )
if ( USE_PROTOBUF_LITE )
find_required_library ( PROTOBUF google/protobuf/message_lite.h protobuf-lite
" G o o g l e P r o t o c o l B u f f e r s " )
check_library_version ( PC_PROTOBUF protobuf-lite>=2.4 )
@ -148,7 +178,7 @@ check_library_version (PC_ICU_UC icu-uc>=4.4)
set ( ICU_INCLUDE_DIR ${ ICU_UC_INCLUDE_DIR } )
set ( ICU_LIB ${ ICU_UC_LIB } )
# I f I C U r e g e x p e n g i n e i s u s e d o r i f t h e g e o c o d e r i s b u i l t , u s e i c u i 1 8 n a s w e l l .
if ( ${ USE_ICU_REGEXP } STREQUAL "ON" OR ${ BUILD_GEOCODER } STREQUAL "ON" )
if ( USE_ICU_REGEXP OR BUILD_GEOCODER )
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 } )
@ -158,7 +188,7 @@ endif ()
find_required_program ( PROTOC protoc
" G o o g l e P r o t o c o l B u f f e r s compiler ( protoc ) " )
if ( ${ REGENERATE_METADATA } STREQUAL "ON" )
if ( REGENERATE_METADATA )
find_required_program ( JAVA java
" J a v a R u n t i m e E n v i r o n m e n t " )
endif ( )
@ -166,12 +196,12 @@ endif ()
if ( APPLE )
FIND_LIBRARY ( COREFOUNDATION_LIB CoreFoundation )
FIND_LIBRARY ( FOUNDATION_LIB Foundation )
set ( CMAKE_MACOSX_RPATH " OFF" )
set ( CMAKE_MACOSX_RPATH OFF )
set ( CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS
" $ { C M A K E _ S H A R E D _ L I B R A R Y _ C R E A T E _ C X X _ F L A G S } - u n d e f i n e d d y n a m i c _ l o o k u p " )
endif ( )
if ( ${ USE_STD_MAP } STREQUAL "OFF" )
if ( NOT USE_STD_MAP )
INCLUDE ( CheckIncludeFileCXX )
CHECK_INCLUDE_FILE_CXX ( "tr1/unordered_map" HAVE_CXX_TR1_UNORDERED_MAP )
if ( HAVE_CXX_TR1_UNORDERED_MAP )
@ -202,9 +232,7 @@ add_custom_command (
D E P E N D S $ { P R O T O B U F _ S O U R C E S }
)
if ( ${ BUILD_GEOCODER } STREQUAL "ON" )
find_package ( absl )
if ( BUILD_GEOCODER )
# G e o c o d i n g d a t a c p p f i l e g e n e r a t i o n
set ( TOOLS_DIR "${CMAKE_CURRENT_BINARY_DIR}/tools" )
add_subdirectory ( "${CMAKE_CURRENT_SOURCE_DIR}/../tools/cpp" "${TOOLS_DIR}" )
@ -248,7 +276,7 @@ set (
" s r c / p h o n e n u m b e r s / u t f / u n i l i b . c c "
)
if ( ${ BUILD_GEOCODER } STREQUAL "ON" )
if ( BUILD_GEOCODER )
set (
G E O C O D I N G _ S O U R C E S
" s r c / p h o n e n u m b e r s / g e o c o d i n g / a r e a _ c o d e _ m a p . c c "
@ -261,7 +289,7 @@ if (${BUILD_GEOCODER} STREQUAL "ON")
endif ( )
# A d d r e g e x p e n g i n e - d e p e n d e n t s o u r c e s . I C U i s u s e d b y d e f a u l t .
if ( ${ USE_RE2 } STREQUAL "ON" )
if ( USE_RE2 )
# A d d a f l a g t o s e l e c t t h e r i g h t r e g e x p f a c t o r y i m p l e m e n t a t i o n u s e d b y
# r e g e x p _ f a c t o r y . h a n d r e g e x p _ a d a p t e r _ t e s t . c c .
# W h e n b o t h I C U r e g e x p a n d R E 2 a r e d e f i n e d , t h e r e g e x p e n g i n e a d a p t e r d e f a u l t s
@ -270,13 +298,13 @@ if (${USE_RE2} STREQUAL "ON")
list ( APPEND SOURCES "src/phonenumbers/regexp_adapter_re2.cc" )
endif ( )
if ( ${ USE_ICU_REGEXP } STREQUAL "ON" )
if ( USE_ICU_REGEXP )
add_definitions ( "-DI18N_PHONENUMBERS_USE_ICU_REGEXP" )
list ( APPEND SOURCES "src/phonenumbers/regexp_adapter_icu.cc" )
# T h e p h o n e n u m b e r m a t c h e r n e e d s I C U .
list ( APPEND SOURCES "src/phonenumbers/phonenumbermatch.cc" )
list ( APPEND SOURCES "src/phonenumbers/phonenumbermatcher.cc" )
if ( ${ USE_ALTERNATE_FORMATS } STREQUAL "ON" )
if ( USE_ALTERNATE_FORMATS )
list ( APPEND SOURCES "src/phonenumbers/alternate_format.cc" )
endif ( )
endif ( )
@ -285,7 +313,7 @@ endif ()
# f o r u n i t - t e s t i n g . N o t e t h a t a s i n g l e t e s t i n g l i b r a r y i s b u i l t f o r b o t h
# l i b p h o n e n u m b e r a n d g e o c o d i n g .
set ( TESTING_LIBRARY_SOURCES ${ SOURCES } )
if ( ${ BUILD_GEOCODER } STREQUAL "ON" )
if ( BUILD_GEOCODER )
list ( APPEND TESTING_LIBRARY_SOURCES ${ GEOCODING_SOURCES } )
endif ( )
@ -293,17 +321,13 @@ endif ()
# T h i s f u n c t i o n i s i n v o k e d t o c r e a t e m e t a d a t a , t e s t m e t a d a t a a n d l i t e m e t a d a t a
# c o d e g e n e r a t i o n t a r g e t s .
function ( add_metadata_gen_target TARGET_NAME
X M L _ F I L E
M E T A D A T A _ T Y P E
M E T A D A T A _ H E A D E R )
function ( add_metadata_gen_target TARGET_NAME XML_FILE METADATA_TYPE METADATA_HEADER )
set ( METADATA_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/phonenumbers" )
set ( GEN_OUTPUT "${METADATA_SOURCE_DIR}/${METADATA_TYPE}.cc"
" $ { M E T A D A T A _ S O U R C E _ D I R } / $ { M E T A D A T A _ H E A D E R } . h " )
set ( GEN_OUTPUT "${METADATA_SOURCE_DIR}/${METADATA_TYPE}.cc" "${METADATA_SOURCE_DIR}/${METADATA_HEADER}.h" )
set ( JAR_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../tools/java/cpp-build/target" )
set ( JAR_PATH "${JAR_PATH}/cpp-build-1.0-SNAPSHOT-jar-with-dependencies.jar" )
if ( ${ REGENERATE_METADATA } STREQUAL "ON" )
if ( REGENERATE_METADATA )
add_custom_command (
C O M M A N D $ { J A V A _ B I N } - j a r
$ { J A R _ P A T H } B u i l d M e t a d a t a C p p F r o m X m l $ { X M L _ F I L E }
@ -330,7 +354,7 @@ function (add_metadata_gen_target TARGET_NAME
)
endfunction ( add_metadata_gen_target )
if ( ${ USE_LITE_METADATA } STREQUAL "ON" )
if ( USE_LITE_METADATA )
# A d d t h e l i t e m e t a d a t a g e n e r a t i o n t a r g e t .
set ( METADATA_TARGET "generate-lite-metadata" )
add_metadata_gen_target (
@ -358,7 +382,7 @@ add_metadata_gen_target (
$ { T E S T _ M E T A D A T A _ T A R G E T }
" $ { R E S O U R C E S _ D I R } / P h o n e N u m b e r M e t a d a t a F o r T e s t i n g . x m l "
" t e s t _ m e t a d a t a "
" t e s t _ m e t a d a t a "
" m e t a d a t a "
)
list ( APPEND TESTING_LIBRARY_SOURCES "src/phonenumbers/test_metadata.cc" )
@ -374,8 +398,8 @@ add_metadata_gen_target (
list ( APPEND SOURCES "src/phonenumbers/short_metadata.cc" )
list ( APPEND TESTING_LIBRARY_SOURCES "src/phonenumbers/short_metadata.cc" )
if ( ${ USE_ICU_REGEXP } STREQUAL "ON" )
if ( ${ USE_ALTERNATE_FORMATS } STREQUAL "ON" )
if ( USE_ICU_REGEXP )
if ( USE_ALTERNATE_FORMATS )
# A d d a l t e r n a t e f o r m a t m e t a d a t a g e n e r a t i o n f o r t h e p h o n e n u m b e r m a t c h e r .
set ( ALT_FORMAT_METADATA_TARGET "generate-alt-format-metadata" )
add_metadata_gen_target (
@ -393,81 +417,21 @@ endif ()
include_directories ( "src" )
if ( ${ BUILD_STATIC_LIB } STREQUAL "ON" )
# B u i l d a s t a t i c library ( without -fPIC ) .
add_library ( phonenumber STATIC ${ SOURCES } )
if ( ${ BUILD_GEOCODER } STREQUAL "ON" )
add_dependencies ( phonenumber generate_geocoding_data )
endif ( )
if ( ${ USE_ICU_REGEXP } STREQUAL "ON" )
if ( ${ USE_ALTERNATE_FORMATS } STREQUAL "ON" )
add_dependencies ( phonenumber ${ ALT_FORMAT_METADATA_TARGET } )
endif ( )
endif ( )
endif ( )
if ( ${ BUILD_GEOCODER } STREQUAL "ON" )
if ( ${ BUILD_STATIC_LIB } STREQUAL "ON" )
add_library ( geocoding STATIC ${ GEOCODING_SOURCES } )
add_dependencies ( geocoding generate_geocoding_data )
endif ( )
# T h e g e o c o d e r d o e s n ' t u s e R E 2 s o t h e r e i s n o r e a s o n n o t t o b u i l d a s h a r e d
# l i b r a r y f o r i t .
add_library ( geocoding-shared SHARED ${ GEOCODING_SOURCES } )
add_dependencies ( geocoding-shared generate_geocoding_data )
set_target_properties ( geocoding-shared
P R O P E R T I E S
O U T P U T _ N A M E " g e o c o d i n g "
P R E F I X " l i b "
S O V E R S I O N $ { l i b p h o n e n u m b e r _ V E R S I O N _ M A J O R }
V E R S I O N $ { l i b p h o n e n u m b e r _ V E R S I O N _ M A J O R } . $ { l i b p h o n e n u m b e r _ V E R S I O N _ M I N O R } )
endif ( )
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# C o l l a t e d e p e n d e n c i e s
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# B u i l d a s h a r e d library ( with -fPIC ) .
set ( BUILD_SHARED_LIB true )
set ( LIBRARY_DEPS ${ ICU_LIB } ${ PROTOBUF_LIB } absl::node_hash_set absl::strings absl::synchronization )
if ( ${ USE_RE2 } STREQUAL "ON" )
# R E 2 i s n o t a l w a y s a v a i l a b l e a s a s h a r e d library ( e.g: package provided by
# U b u n t u ) t h e r e f o r e d i s a b l e t h e s h a r e d l i b r a r y b u i l d i n t h i s c a s e .
if ( ${ RE2_LIB } MATCHES ".*\\.a" )
message ( WARNING
" R E 2 n o t a v a i l a b l e a s a s h a r e d l i b r a r y , s h a r e d l i b r a r y b u i l d d i s a b l e d " )
set ( BUILD_SHARED_LIB false )
endif ( )
endif ( )
if ( BUILD_SHARED_LIB )
add_library ( phonenumber-shared SHARED ${ SOURCES } )
if ( ${ BUILD_GEOCODER } STREQUAL "ON" )
add_dependencies ( phonenumber-shared generate_geocoding_data )
endif ( )
if ( ${ USE_ICU_REGEXP } STREQUAL "ON" )
if ( ${ USE_ALTERNATE_FORMATS } STREQUAL "ON" )
add_dependencies ( phonenumber-shared ${ ALT_FORMAT_METADATA_TARGET } )
endif ( )
endif ( )
set_target_properties ( phonenumber-shared
P R O P E R T I E S
O U T P U T _ N A M E " p h o n e n u m b e r "
P R E F I X " l i b "
S O V E R S I O N $ { l i b p h o n e n u m b e r _ V E R S I O N _ M A J O R }
V E R S I O N $ { l i b p h o n e n u m b e r _ V E R S I O N _ M A J O R } . $ { l i b p h o n e n u m b e r _ V E R S I O N _ M I N O R } )
endif ( )
# L i b r a r i e s u s e d b y b o t h l i b p h o n e n u m b e r a n d l i b g e o c o d i n g .
set ( COMMON_DEPS ${ ICU_LIB } )
set ( LIBRARY_DEPS ${ PROTOBUF_LIB } )
if ( ${ USE_BOOST } STREQUAL "ON" )
if ( USE_BOOST )
list ( APPEND LIBRARY_DEPS ${ Boost_LIBRARIES } )
endif ( )
if ( ${ USE_RE2 } STREQUAL "ON" )
if ( USE_RE2 )
list ( APPEND LIBRARY_DEPS ${ RE2_LIB } )
endif ( )
if ( ${ USE_POSIX_THREAD } STREQUAL "ON" OR ( ( APPLE OR UNIX ) AND ${ USE_BOOST } STREQUAL "OFF" AND ${ USE_STDMUTEX } STREQUAL "OFF" ) )
if ( USE_POSIX_THREAD OR ( ( APPLE OR UNIX ) AND ( NOT ( USE_BOOST OR USE_STDMUTEX ) ) ) )
if ( CMAKE_USE_PTHREADS_INIT )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread" )
endif ( )
@ -476,119 +440,188 @@ if (${USE_POSIX_THREAD} STREQUAL "ON" OR ((APPLE OR UNIX) AND ${USE_BOOST} STREQ
endif ( )
endif ( )
# S a f e g u a r d i n g a g a i n s t a n y p o t e n t i a l l i n k e r r o r s a s m e n t i o n e d i n
# h t t p s : / / g i t h u b . c o m / a b s e i l / a b s e i l - c p p / i s s u e s / 2 2 5
set ( CMAKE_POSITION_INDEPENDENT_CODE TRUE )
list ( APPEND LIBRARY_DEPS absl::node_hash_set absl::strings absl::synchronization )
if ( APPLE )
list ( APPEND COMMON _DEPS ${ COREFOUNDATION_LIB } ${ FOUNDATION_LIB } )
list ( APPEND LIBRARY_DEPS ${ COREFOUNDATION_LIB } ${ FOUNDATION_LIB } )
endif ( )
list ( APPEND LIBRARY_DEPS ${ COMMON_DEPS } )
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# B u i l d l i b r a r i e s
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if ( ${ BUILD_STATIC_LIB } STREQUAL "ON" )
if ( BUILD_STATIC_LIB )
# B u i l d a s t a t i c library ( without -fPIC ) .
add_library ( phonenumber STATIC ${ SOURCES } )
target_link_libraries ( phonenumber ${ LIBRARY_DEPS } )
target_include_directories ( phonenumber PUBLIC $< INSTALL_INTERFACE:include > )
if ( BUILD_GEOCODER )
add_library ( geocoding STATIC ${ GEOCODING_SOURCES } )
target_link_libraries ( geocoding ${ LIBRARY_DEPS } )
target_include_directories ( geocoding PUBLIC $< INSTALL_INTERFACE:include > )
add_dependencies ( geocoding generate_geocoding_data )
add_dependencies ( phonenumber generate_geocoding_data )
endif ( )
if ( USE_ICU_REGEXP AND USE_ALTERNATE_FORMATS )
add_dependencies ( phonenumber ${ ALT_FORMAT_METADATA_TARGET } )
endif ( )
endif ( )
if ( BUILD_SHARED_LIB )
if ( BUILD_SHARED_LIBS )
# B u i l d a s h a r e d library ( with -fPIC ) .
add_library ( phonenumber-shared SHARED ${ SOURCES } )
target_link_libraries ( phonenumber-shared ${ LIBRARY_DEPS } )
endif ( )
target_include_directories ( phonenumber-shared PUBLIC $< INSTALL_INTERFACE:include > )
if ( ${ BUILD_GEOCODER } STREQUAL "ON" )
list ( APPEND GEOCODER_DEPS ${ COMMON_DEPS } )
# N o t e t h a t t h e s u b s e t o f b a s e / o n w h i c h t h e g e o c o d e r r e l i e s i s i m p l e m e n t e d
# o n t o p o f B o o s t h e a d e r - o n l y libraries ( e.g. scoped_ptr.hpp ) .
target_link_libraries ( geocoding ${ LIBRARY_DEPS } )
target_link_libraries ( geocoding-shared ${ LIBRARY_DEPS } )
endif ( )
set_target_properties ( phonenumber-shared
P R O P E R T I E S
O U T P U T _ N A M E " p h o n e n u m b e r "
P R E F I X " l i b "
S O V E R S I O N $ { l i b p h o n e n u m b e r _ V E R S I O N _ M A J O R }
V E R S I O N $ { l i b p h o n e n u m b e r _ V E R S I O N _ M A J O R } . $ { l i b p h o n e n u m b e r _ V E R S I O N _ M I N O R } )
# B u i l d a s p e c i f i c l i b r a r y f o r t e s t i n g p u r p o s e s .
add_library ( phonenumber_testing STATIC ${ TESTING_LIBRARY_SOURCES } )
if ( ${ BUILD_GEOCODER } STREQUAL "ON" )
add_dependencies ( phonenumber_testing generate_geocoding_data )
if ( USE_ICU_REGEXP AND USE_ALTERNATE_FORMATS )
add_dependencies ( phonenumber-shared ${ ALT_FORMAT_METADATA_TARGET } )
endif ( )
if ( BUILD_GEOCODER )
add_library ( geocoding-shared SHARED ${ GEOCODING_SOURCES } )
target_link_libraries ( geocoding-shared ${ LIBRARY_DEPS } )
target_include_directories ( geocoding-shared PUBLIC $< INSTALL_INTERFACE:include > )
add_dependencies ( geocoding-shared generate_geocoding_data )
add_dependencies ( phonenumber-shared generate_geocoding_data )
set_target_properties ( geocoding-shared
P R O P E R T I E S
O U T P U T _ N A M E " g e o c o d i n g "
P R E F I X " l i b "
S O V E R S I O N $ { l i b p h o n e n u m b e r _ V E R S I O N _ M A J O R }
V E R S I O N $ { l i b p h o n e n u m b e r _ V E R S I O N _ M A J O R } . $ { l i b p h o n e n u m b e r _ V E R S I O N _ M I N O R } )
endif ( )
endif ( )
target_link_libraries ( phonenumber_testing ${ LIBRARY_DEPS } )
if ( ${ BUILD_GEOCODER } STREQUAL "ON" )
# T e s t g e o c o d i n g d a t a c p p f i l e s g e n e r a t i o n .
set ( GEOCODING_TEST_DIR "${RESOURCES_DIR}/test/geocoding" )
file ( GLOB_RECURSE GEOCODING_TEST_SOURCES "${GEOCODING_TEST_DIR}/*.txt" )
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# B u i l d t e s t i n g l i b r a r y
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
set ( GEOCODING_TEST_DATA_OUTPUT
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / t e s t / p h o n e n u m b e r s / g e o c o d i n g / g e o c o d i n g _ t e s t _ d a t a . c c "
)
if ( BUILD_TESTING )
add_library ( phonenumber_testing STATIC ${ TESTING_LIBRARY_SOURCES } )
if ( BUILD_GEOCODER )
add_dependencies ( phonenumber_testing generate_geocoding_data )
endif ( )
target_link_libraries ( phonenumber_testing ${ LIBRARY_DEPS } )
add_custom_command (
C O M M A N D g e n e r a t e _ g e o c o d i n g _ d a t a " $ { G E O C O D I N G _ T E S T _ D I R } "
" $ { G E O C O D I N G _ T E S T _ D A T A _ O U T P U T } " " _ t e s t "
if ( BUILD_GEOCODER )
# T e s t g e o c o d i n g d a t a c p p f i l e s g e n e r a t i o n .
set ( GEOCODING_TEST_DIR "${RESOURCES_DIR}/test/geocoding" )
file ( GLOB_RECURSE GEOCODING_TEST_SOURCES "${GEOCODING_TEST_DIR}/*.txt" )
O U T P U T $ { G E O C O D I N G _ T E S T _ D A T A _ O U T P U T }
D E P E N D S $ { G E O C O D I N G _ T E S T _ S O U R C E S } g e n e r a t e _ g e o c o d i n g _ d a t a
C O M M E N T " G e n e r a t i n g g e o c o d i n g t e s t d a t a c o d e "
)
endif ( )
set ( GEOCODING_TEST_DATA_OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/test/phonenumbers/geocoding/geocoding_test_data.cc" )
add_custom_command (
C O M M A N D g e n e r a t e _ g e o c o d i n g _ d a t a " $ { G E O C O D I N G _ T E S T _ D I R } " " $ { G E O C O D I N G _ T E S T _ D A T A _ O U T P U T } " " _ t e s t "
O U T P U T $ { G E O C O D I N G _ T E S T _ D A T A _ O U T P U T }
D E P E N D S $ { G E O C O D I N G _ T E S T _ S O U R C E S } g e n e r a t e _ g e o c o d i n g _ d a t a
C O M M E N T " G e n e r a t i n g g e o c o d i n g t e s t d a t a c o d e "
)
endif ( )
set ( TEST_SOURCES
" t e s t / p h o n e n u m b e r s / a s y o u t y p e f o r m a t t e r _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / l o g g e r _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / m a t c h e r _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / p h o n e n u m b e r u t i l _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / r e g e x p _ a d a p t e r _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / r e g e x p _ c a c h e _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / r u n _ t e s t s . c c "
" t e s t / p h o n e n u m b e r s / s h o r t n u m b e r i n f o _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / s t r i n g u t i l _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / t e s t _ u t i l . c c "
" t e s t / p h o n e n u m b e r s / u n i c o d e s t r i n g _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / u t f / u n i c o d e t e x t _ t e s t . c c "
)
set ( TEST_SOURCES
" t e s t / p h o n e n u m b e r s / a s y o u t y p e f o r m a t t e r _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / l o g g e r _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / m a t c h e r _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / p h o n e n u m b e r u t i l _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / r e g e x p _ a d a p t e r _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / r e g e x p _ c a c h e _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / r u n _ t e s t s . c c "
" t e s t / p h o n e n u m b e r s / s h o r t n u m b e r i n f o _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / s t r i n g u t i l _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / t e s t _ u t i l . c c "
" t e s t / p h o n e n u m b e r s / u n i c o d e s t r i n g _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / u t f / u n i c o d e t e x t _ t e s t . c c " )
if ( BUILD_GEOCODER )
set ( GEOCODING_TEST_SOURCES
" t e s t / p h o n e n u m b e r s / g e o c o d i n g / a r e a _ c o d e _ m a p _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / g e o c o d i n g / g e o c o d i n g _ d a t a _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / g e o c o d i n g / g e o c o d i n g _ t e s t _ d a t a . c c "
" t e s t / p h o n e n u m b e r s / g e o c o d i n g / m a p p i n g _ f i l e _ p r o v i d e r _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / g e o c o d i n g / p h o n e n u m b e r _ o f f l i n e _ g e o c o d e r _ t e s t . c c " )
list ( APPEND TEST_SOURCES ${ GEOCODING_TEST_SOURCES } )
endif ( )
if ( ${ BUILD_GEOCODER } STREQUAL "ON" )
set ( GEOCODING_TEST_SOURCES
" t e s t / p h o n e n u m b e r s / g e o c o d i n g / a r e a _ c o d e _ m a p _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / g e o c o d i n g / g e o c o d i n g _ d a t a _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / g e o c o d i n g / g e o c o d i n g _ t e s t _ d a t a . c c "
" t e s t / p h o n e n u m b e r s / g e o c o d i n g / m a p p i n g _ f i l e _ p r o v i d e r _ t e s t . c c "
" t e s t / p h o n e n u m b e r s / g e o c o d i n g / p h o n e n u m b e r _ o f f l i n e _ g e o c o d e r _ t e s t . c c "
)
list ( APPEND TEST_SOURCES ${ GEOCODING_TEST_SOURCES } )
endif ( )
if ( USE_ICU_REGEXP )
# A d d t h e p h o n e n u m b e r m a t c h e r t e s t s .
list ( APPEND TEST_SOURCES "test/phonenumbers/phonenumbermatch_test.cc" )
list ( APPEND TEST_SOURCES "test/phonenumbers/phonenumbermatcher_test.cc" )
endif ( )
if ( ${ USE_ICU_REGEXP } STREQUAL "ON" )
# A d d t h e p h o n e n u m b e r m a t c h e r t e s t s .
list ( APPEND TEST_SOURCES "test/phonenumbers/phonenumbermatch_test.cc" )
list ( APPEND TEST_SOURCES "test/phonenumbers/phonenumbermatcher_test.cc" )
endif ( )
# B u i l d t h e t e s t i n g b i n a r y .
include_directories ( "test" )
add_executable ( libphonenumber_test ${ TEST_SOURCES } )
set ( TEST_LIBS phonenumber_testing ${ GTEST_LIB } )
# B u i l d t h e t e s t i n g b i n a r y .
include_directories ( "test" )
add_executable ( libphonenumber_test ${ TEST_SOURCES } )
set ( TEST_LIBS phonenumber_testing ${ GTEST_LIB } )
if ( NOT WIN32 )
list ( APPEND TEST_LIBS pthread )
endif ( )
if ( NOT WIN32 )
list ( APPEND TEST_LIBS pthread )
endif ( )
target_link_libraries ( libphonenumber_test ${ TEST_LIBS } )
target_link_libraries ( libphonenumber_test ${ TEST_LIBS } )
# U n f o r t u n a t e l y add_custom_target ( ) c a n ' t a c c e p t a s i n g l e c o m m a n d p r o v i d e d a s a
# l i s t o f c o m m a n d s .
if ( BUILD_GEOCODER )
add_custom_target ( tests
C O M M A N D g e n e r a t e _ g e o c o d i n g _ d a t a _ t e s t
C O M M A N D l i b p h o n e n u m b e r _ t e s t
D E P E N D S g e n e r a t e _ g e o c o d i n g _ d a t a _ t e s t l i b p h o n e n u m b e r _ t e s t
)
else ( )
add_custom_target ( tests
C O M M A N D l i b p h o n e n u m b e r _ t e s t
D E P E N D S l i b p h o n e n u m b e r _ t e s t
)
endif ( )
# U n f o r t u n a t e l y add_custom_target ( ) c a n ' t a c c e p t a s i n g l e c o m m a n d p r o v i d e d a s a
# l i s t o f c o m m a n d s .
if ( ${ BUILD_GEOCODER } STREQUAL "ON" )
add_custom_target ( tests
C O M M A N D g e n e r a t e _ g e o c o d i n g _ d a t a _ t e s t
C O M M A N D l i b p h o n e n u m b e r _ t e s t
D E P E N D S g e n e r a t e _ g e o c o d i n g _ d a t a _ t e s t l i b p h o n e n u m b e r _ t e s t
)
else ( )
add_custom_target ( tests
C O M M A N D l i b p h o n e n u m b e r _ t e s t
D E P E N D S l i b p h o n e n u m b e r _ t e s t
)
endif ( )
# B u i l d a n e x a m p l e p r o g r a m u s i n g g e o c o d i n g , m a i n l y t o m a k e s u r e t h a t b o t h
# l i b r a r i e s a r e b u i l t p r o p e r l y .
if ( BUILD_GEOCODER )
add_executable ( geocoding_test_program "test/phonenumbers/geocoding/geocoding_test_program.cc" )
target_link_libraries ( geocoding_test_program geocoding phonenumber )
endif ( )
endif ( )
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# I n s t a l l b u i l t l i b r a r i e s
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
set ( BUILT_LIBS )
set ( targets_export_name "${PROJECT_NAME}-targets" )
if ( BUILD_STATIC_LIB )
list ( APPEND BUILT_LIBS phonenumber )
if ( BUILD_GEOCODER )
list ( APPEND BUILT_LIBS geocoding )
endif ( )
endif ( )
if ( BUILD_SHARED_LIBS )
list ( APPEND BUILT_LIBS phonenumber-shared )
if ( BUILD_GEOCODER )
list ( APPEND BUILT_LIBS geocoding-shared )
endif ( )
endif ( )
install (
T A R G E T S $ { B U I L T _ L I B S }
E X P O R T " $ { t a r g e t s _ e x p o r t _ n a m e } "
L I B R A R Y D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ L I B D I R } "
A R C H I V E D E S T I N A T I O N " $ { C M A K E _ I N S T A L L _ L I B D I R } " )
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# I n s t a l l h e a d e r s
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# I n s t a l l r u l e s .
install ( FILES
" s r c / p h o n e n u m b e r s / a s y o u t y p e f o r m a t t e r . h "
" s r c / p h o n e n u m b e r s / c a l l b a c k . h "
@ -608,7 +641,7 @@ install (FILES
install ( FILES "src/phonenumbers/utf/unicodetext.h"
D E S T I N A T I O N i n c l u d e / p h o n e n u m b e r s / u t f / )
if ( ${ USE_ICU_REGEXP } STREQUAL "ON" )
if ( USE_ICU_REGEXP )
# I n s t a l l t h e p h o n e n u m b e r m a t c h e r h e a d e r s .
install ( FILES
" s r c / p h o n e n u m b e r s / p h o n e n u m b e r m a t c h . h "
@ -618,7 +651,7 @@ if (${USE_ICU_REGEXP} STREQUAL "ON")
)
endif ( )
if ( ${ BUILD_GEOCODER } STREQUAL "ON" )
if ( BUILD_GEOCODER )
install ( FILES
" s r c / p h o n e n u m b e r s / g e o c o d i n g / p h o n e n u m b e r _ o f f l i n e _ g e o c o d e r . h "
D E S T I N A T I O N i n c l u d e / p h o n e n u m b e r s / g e o c o d i n g
@ -654,34 +687,29 @@ install (FILES
" s r c / p h o n e n u m b e r s / b a s e / s y n c h r o n i z a t i o n / l o c k _ w i n 3 2 . h "
D E S T I N A T I O N i n c l u d e / p h o n e n u m b e r s / b a s e / s y n c h r o n i z a t i o n / )
set ( LIBDIR ${ CMAKE_INSTALL_LIBDIR } )
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# B u i l d a n d i n s t a l l c m a k e c o n f i g f i l e s
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if ( ${ BUILD_STATIC_LIB } STREQUAL "ON" )
install ( TARGETS phonenumber LIBRARY DESTINATION ${ LIBDIR } ARCHIVE DESTINATION ${ LIBDIR } )
endif ( )
include ( CMakePackageConfigHelpers )
if ( BUILD_SHARED_LIB )
install ( TARGETS phonenumber-shared LIBRARY DESTINATION ${ LIBDIR } ARCHIVE
D E S T I N A T I O N $ { L I B D I R } )
endif ( )
set ( config_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" )
set ( version_config "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" )
set ( project_config "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" )
if ( ${ BUILD_GEOCODER } STREQUAL "ON" )
install ( TARGETS geocoding LIBRARY DESTINATION ${ LIBDIR } ARCHIVE DESTINATION ${ LIBDIR } )
install ( TARGETS geocoding-shared LIBRARY DESTINATION ${ LIBDIR } ARCHIVE
D E S T I N A T I O N $ { L I B D I R } )
endif ( )
# l i b p h o n e n u m b e r - c o n f i g - v e r s i o n . c m a k e
write_basic_package_version_file ( "${version_config}" COMPATIBILITY SameMajorVersion )
# B u i l d a n e x a m p l e p r o g r a m u s i n g g e o c o d i n g , m a i n l y t o m a k e s u r e t h a t b o t h
# l i b r a r i e s a r e b u i l t p r o p e r l y .
if ( ${ BUILD_GEOCODER } STREQUAL "ON" )
add_executable (
g e o c o d i n g _ t e s t _ p r o g r a m
" t e s t / p h o n e n u m b e r s / g e o c o d i n g / g e o c o d i n g _ t e s t _ p r o g r a m . c c "
)
target_link_libraries ( geocoding_test_program geocoding phonenumber )
endif ( )
# l i b p h o n e n u m b e r - c o n f i g . c m a k e
configure_package_config_file ( "cmake/config.cmake.in" "${project_config}" INSTALL_DESTINATION "${config_install_dir}" )
install ( FILES "${project_config}" "${version_config}" DESTINATION "${config_install_dir}" )
install ( EXPORT "${targets_export_name}" NAMESPACE ${ PROJECT_NAME } :: DESTINATION "${config_install_dir}" )
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# B u i l d a n R P M
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
set ( CPACK_PACKAGE_VERSION ${ libphonenumber_VERSION_MAJOR } . ${ libphonenumber_VERSION_MINOR } . ${ libphonenumber_VERSION_PATCH } )
set ( CPACK_GENERATOR "RPM" )
set ( CPACK_PACKAGE_NAME "libphonenumber" )