C++ version of the libphonenumber project ========================================= This library is a port of the Java version. This project uses some third-party code: - src/phonenumbers/utf/ sources come from lib9 which is also used in Go. Installing the library on GNU/Linux ----------------------------------- In recent Debian-based distributions you may be able to simply install the libphonenumber library directly. Installing the binary packages: - Use this if you just need to use or link against the library: $ sudo apt-get install libphonenumber6 libphonenumber6-dev Installing the source package: - Use this if you wish to develop or debug the library: $ sudo apt-get source libphonenumber The latest packages can be found on the Debian packages site: https://packages.debian.org/search?searchon=names&keywords=libphonenumber Manually installing the library on GNU/Linux -------------------------------------------- You should only need these instructions if the above instructions do not work. The example command lines below assume that you have a Debian-based GNU/Linux distribution. Other distributions and packaging systems will differ. Quickstart: - In recent Debian-based distributions, it should be sufficent to run: $ sudo apt-get install \ cmake cmake-curses-gui libprotobuf-dev libgtest-dev libre2-dev \ libicu-dev libboost-dev libboost-thread-dev libboost-system-dev If any of these packages fails to install correctly, follow the instructions in the appropriate section below. Requirements: - CMake build system http://www.cmake.org Installation: $ sudo apt-get install cmake Additionally it is recommended you install the ccmake configuration tool: $ sudo apt-get install cmake-curses-gui - Protocol Buffers http://code.google.com/p/protobuf/ Version 2.4 or more recent is required (this is available by default for recent Debian-based GNU/Linux distributions). You can check which version is available: $ apt-cache show libprotobuf-dev Package: libprotobuf-dev Source: protobuf Version: 2.5.0-9ubuntu1 <-- This must be >= 2.4.0 ... Installation: $ sudo apt-get install libprotobuf-dev Note: if your GNU/Linux distribution doesn't provide the needed package, please download and install it manually: $ tar xjf protobuf-2.4.tar.bz2 $ cd protobuf-2.4 $ ./configure && make && sudo make install - Google Test http://code.google.com/p/googletest/ Installation: $ sudo apt-get install libgtest-dev - RE2 http://code.google.com/p/re2/ Installation: $ sudo apt-get install libre2-dev Note that some distributions (notably Ubuntu 10.4) may not include this, so you might need to download and install it manually. Find and download the Debian packages for your system. For example: http://packages.ubuntu.com/utopic/libre2-1 http://packages.ubuntu.com/utopic/libre2-dev You need to download both the libre2-dev and libre2-1 packages. Once downloaded, install them with: $ sudo dpkg -i libre2*.deb If you want to install it from source, it's available via Mercurial at: https://re2.googlecode.com/hg however precise instructions on building and installing are outside the scope of this document. - ICU Installation: $ sudo apt-get install libicu-dev Otherwise you need to download the source tarball for the latest version from: http://site.icu-project.org/download And then extract it via: $ tar xzf icu4c-*-src.tgz Alternatively you can export the SVN repository to the current directory via: $ svn export http://source.icu-project.org/repos/icu/icu/tags/release-XX-y-z/ Having acquired the latest sources, make and install it via: $ cd icu/source $ ./configure && make && sudo make install - Boost Version 1.40 or more recent is required if you need libphonenumber to be thread-safe. If you access libphonenumber from a single thread, you can avoid the Boost dependency by disabling the USE_BOOST CMake option (see Troubleshooting section below for information about ccmake). You can install it very easily on a Debian-based GNU/Linux distribution: $ sudo apt-get install libboost-dev libboost-thread-dev libboost-system-dev Note: Boost Thread is the only library needed at link time. Building the library -------------------- $ cd libphonenumber/cpp $ mkdir build $ cd build $ cmake .. $ make Troubleshooting CMake via ccmake -------------------------------- Follow these instructions if the build steps above don't work for you. - Incorrect protocol buffer library issues If the build process complains that the version of protoc being used is too old or that it cannot find the correct libprotobuf library, you may need to change the library path of the project. This issue should typically only occur in cases where you have two (or more) versions of the protocol buffer libraries installed on your system. This step assumes that you have already manually downloaded and installed the protocol buffer libraries into /usr/local (as described above). To make cmake use the manually installed version of the protocol buffer libraries, install cmake-curses-gui and use ccmake as follows. From within libphonenumber/cpp/build: $ ccmake . You should set the following values: PROTOBUF_INCLUDE_DIR /usr/local/include PROTOBUF_LIB /usr/local/lib/libprotobuf.so PROTOC_BIN /usr/local/bin/protoc Now press 'c' then 'g' to configure the new parameters and exit ccmake. Finally regenerate the make files and rebuild via: $ cmake .. $ make - Protoc binary not executing properly If you still have issues with the protoc binary tool in /usr/local/bin not running correctly (cannot find libprotobuf.so.x) then you may need to configure the LD_LIBRARY_PATH. To do this, as a superuser, add the following file: /etc/ld.so.conf.d/libprotobuf.conf with the contents: # Use the manually installed version of the protocol buffer libraries. /usr/local/lib And then run: $ sudo chmod 644 /etc/ld.so.conf.d/libprotobuf.conf $ sudo ldconfig - Incorrect ICU library issues Similar to the protocol buffer library issue above, it is possible that your build may fail if you have two conflicting versions of the ICU libraries installed on your system. This step assumes that you have already manually downloaded and installed a recent version of the ICU libraries into /usr/local. Install and run the ccmake tool (as described above) and set the following values: ICU_I18N_INCLUDE_DIR /usr/local/include ICU_I18N_LIB /usr/local/lib/libicui18n.so ICU_UC_INCLUDE_DIR /usr/local/include ICU_UC_LIB /usr/local/lib/libicuuc.so Now press 'c' then 'g' to configure the new parameters and exit ccmake. Finally regenerate the make files and rebuild via: $ cmake .. $ make Building the library on Windows (Visual Studio) ----------------------------------------------- The library was tested with Visual Studio 2010. You will need to manually fetch and install the following dependencies: - CMake (tested with v2.8.6): http://cmake.org/cmake/resources/software.html * Download and install the Win32 installer. - Boost (tested with v1.44) from BoostPro: http://www.boostpro.com/download/ * Select all the variants and Boost DateTime and Boost Thread during the installation process. See Linux instructions for information about thread-safety. - GTest (tested with v1.6.0): http://code.google.com/p/googletest/downloads/list * Open msvc/gtest-md.sln with Visual Studio and build the whole solution. - ICU (MSVC binaries, tested with v4.8.1): http://site.icu-project.org/download/48#ICU4C-Download * Simply extract the archive. - Protocol Buffers: http://code.google.com/p/protobuf/downloads/list * Open vsprojects/protobuf.sln with Visual Studio and build the whole solution. Then run cmake-gui and specify the path to the libphonenumber's cpp directory and its build directory which must be created (e.g. cpp/build). When clicking on "Configure", specify the appropriate Visual Studio version (tested with 2010). Then CMake will need your help to locate the dependencies. You will have to set the following variables (this example assumes that you extracted the dependencies to C:/). GTEST_INCLUDE_DIR C:/gtest-1.6.0/include GTEST_LIB C:/gtest-1.6.0/msvc/gtest-md/Release/gtest.lib ICU_I18N_INCLUDE_DIR C:/icu/include ICU_I18N_LIB C:/icu/lib/icuin.lib ICU_UC_INCLUDE_DIR C:/icu/include ICU_UC_LIB C:/icu/lib/icuuc.lib PROTOBUF_INCLUDE_DIR C:/protobuf-2.4.1/src PROTOBUF_LIB C:/protobuf-2.4.1/vsprojects/Release/libprotobuf.lib PROTOC_BIN C:/protobuf-2.4.1/vsprojects/Release/protoc.exe Then you can click on "Configure" again. CMake should have located all the dependencies. Then click on "Generate" to generate the appropriate Visual Studio project. Then open cpp/build/libphonenumber.sln with Visual Studio and build the INSTALL target. As a result the library's headers and binaries should have been installed to C:/Program Files/libphonenumber/. Note that this path can be set by overriding the CMAKE_INSTALL_PREFIX variable with cmake-gui. Supported build parameters -------------------------- Build parameters can be specified invoking CMake with '-DKEY=VALUE' or using a CMake user interface (ccmake or cmake-gui). USE_ALTERNATE_FORMATS = ON | OFF [ON] -- Use alternate formats for the phone number matcher. USE_BOOST = ON | OFF [ON] -- Use Boost. This is only needed in multi-threaded environments that are not Linux and Mac. Libphonenumber relies on Boost for non-POSIX (e.g. Windows) multi-threading. USE_ICU_REGEXP = ON | OFF [ON] -- Use ICU regexp engine. USE_LITE_METADATA = ON | OFF [OFF] -- Generates smaller metadata that doesn't include example numbers. USE_RE2 = ON | OFF [OFF] -- Use RE2. USE_STD_MAP = ON | OFF [OFF] -- Force the use of std::map.