summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorphilip.liard@gmail.com <philip.liard@gmail.com@ee073f10-1060-11df-b6a4-87a95322a99c>2012-12-13 14:33:48 +0000
committerphilip.liard@gmail.com <philip.liard@gmail.com@ee073f10-1060-11df-b6a4-87a95322a99c>2012-12-13 14:33:48 +0000
commitffab1f8f870b3f6780ac00eb0004df8061240a31 (patch)
tree01264a82e08ba541ac325160b7568a437ec8bb06
parent071c94b2d0caf94183610aef88eb54c4e68ccc80 (diff)
downloadandroid_external_libphonenumbergoogle-ffab1f8f870b3f6780ac00eb0004df8061240a31.tar.gz
android_external_libphonenumbergoogle-ffab1f8f870b3f6780ac00eb0004df8061240a31.tar.bz2
android_external_libphonenumbergoogle-ffab1f8f870b3f6780ac00eb0004df8061240a31.zip
CPP: Build a separate library for geocoding.
Review URL: https://codereview.appspot.com/6820067 git-svn-id: http://libphonenumber.googlecode.com/svn/trunk@549 ee073f10-1060-11df-b6a4-87a95322a99c
-rw-r--r--cpp/CMakeLists.txt188
-rw-r--r--cpp/test/phonenumbers/geocoding/geocoding_test_program.cc43
2 files changed, 173 insertions, 58 deletions
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index 0b782ed..cee2a53 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -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 ()
diff --git a/cpp/test/phonenumbers/geocoding/geocoding_test_program.cc b/cpp/test/phonenumbers/geocoding/geocoding_test_program.cc
new file mode 100644
index 0000000..dec55a4
--- /dev/null
+++ b/cpp/test/phonenumbers/geocoding/geocoding_test_program.cc
@@ -0,0 +1,43 @@
+// Copyright (C) 2012 The Libphonenumber Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Sample program using the geocoding functionality. This is used to test that
+// the geocoding library is compiled correctly.
+
+#include <cassert>
+#include <iostream>
+#include <string>
+
+#include "phonenumbers/geocoding/phonenumber_offline_geocoder.h"
+#include "phonenumbers/phonenumber.pb.h"
+#include "phonenumbers/phonenumberutil.h"
+
+using i18n::phonenumbers::PhoneNumber;
+using i18n::phonenumbers::PhoneNumberOfflineGeocoder;
+using i18n::phonenumbers::PhoneNumberUtil;
+
+int main() {
+ PhoneNumber number;
+ const PhoneNumberUtil& phone_util = *PhoneNumberUtil::GetInstance();
+ const PhoneNumberUtil::ErrorType status = phone_util.Parse(
+ "16502530000", "US", &number);
+ assert(status == PhoneNumberUtil::NO_PARSING_ERROR);
+
+ const std::string description =
+ PhoneNumberOfflineGeocoder().GetDescriptionForNumber(
+ number, icu::Locale("en", "GB"));
+ std::cout << description << std::endl;
+ assert(description == "Mountain View, CA");
+ return 0;
+}