                  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 sufficient 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 \
      protobuf-compiler

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://github.com/google/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://github.com/google/googletest

    Installation:
    $ sudo apt-get install libgtest-dev

  - RE2
    http://github.com/google/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 and testing the library
--------------------------------
  $ cd libphonenumber/cpp
  $ mkdir build
  $ cd build
  $ cmake ..
  $ make
  $ ./libphonenumber_test


Manually installing the library on Mac
--------------------------------------

You can easily install dependencies on Mac using a package manager. In these
instructions we use Homebrew (http://brew.sh).

Install Homebrew package manager and use it to install dependencies:
  $ /usr/bin/ruby -e "$(curl -fsSL \
    https://raw.githubusercontent.com/Homebrew/install/master/install)"
  $ brew install boost cmake icu4c pkg-config protobuf wget

See https://github.com/Homebrew/homebrew/issues/14099 - homebrew does not have
gtest. We don't need to install gtest, we only copy sources. For example:
  $ mkdir ~/googletest_clone
  $ cd ~/googletest_clone
  $ git clone https://github.com/google/googletest.git

Get the libphonenumber source. For example:
  $ mkdir ~/libphonenumber_clone
  $ cd ~/libphonenumber_clone
  $ git clone https://github.com/google/libphonenumber.git

Build and test the library:
  $ cd libphonenumber/cpp
  $ mkdir build
  $ cd build
  Replace XXX in the commands below with the appropriate version number:
  $ cmake \
    -DGTEST_SOURCE_DIR=~/googletest_clone/googletest/googletest/ \
    -DGTEST_INCLUDE_DIR=~/googletest_clone/googletest/googletest/include/ \
    -DICU_UC_INCLUDE_DIR=/usr/local/Cellar/icu4c/XXX/include/ \
    -DICU_UC_LIB=/usr/local/Cellar/icu4c/XXX/lib/libicuuc.dylib \
    -DICU_I18N_INCLUDE_DIR=/usr/local/Cellar/icu4c/XXX/include/ \
    -DICU_I18N_LIB=/usr/local/Cellar/icu4c/XXX/lib/libicui18n.dylib \
    -DUSE_STD_MAP=ON \
    ..
  $ make
  $ ./libphonenumber_test

Optional: Deleting & uninstalling everything again:
  $ cd
  $ rm -rf ~/libphonenumber_clone ~/googletest_clone

  openssl is a dependency of wget and installed with it by Homebrew. If you had
  openssl before installing wget don't uninstall here.
  $ brew uninstall boost cmake icu4c openssl pkg-config protobuf wget

  $ /usr/bin/ruby -e "$(curl -fsSL \
    https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

  Homebrew will have changed permissions at installation. See output of previous
  command for how to change them back, for example:
  $ sudo chmod 0755 /usr/local
  $ sudo chgrp wheel /usr/local


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.dylib
      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)
-----------------------------------------------
We recommend that libphonenumber on Windows be built with Visual Studio 2015
Update 2 (https://www.visualstudio.com/en-us/news/releasenotes/vs2015-update2-vs)
or later.

This enables support of plain UTF-8 source files, for which you also need to specify
the /utf-8 option in build files; see "New Options in VS2015 Update 2" at
https://blogs.msdn.microsoft.com/vcblog/2016/02/22/new-options-for-managing-character-sets-in-the-microsoft-cc-compiler/,
or a Chrome patch for an example:
https://codereview.chromium.org/2488853002/diff/80001/build/config/compiler/BUILD.gn

Without this version and the option, your compilation will have warnings when
setting the codepage for non-Unicode applications on Windows to one of the CJK
code pages, since libphonenumber has UTF-8 strings in source files. While these
are only comments (as opposed to string literals) the warnings can be
suppressed, but we reserve the right to introduce UTF-8 string literals.

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.
