                  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 libphonenumber8 libphonenumber-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 3.6.1 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: 3.6.1-9ubuntu1   <-- This must be >= 3.6.1
    ...

    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:
    More details can be found at its official page:
    https://github.com/protocolbuffers/protobuf

  - 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

  - A thread synchronization solution or more recent is required if you need
    libphonenumber to be thread-safe. Supported solution are:
	- Boost Version 1.40 or more recent
	- Posix Thread. Linux or Apple (ios/mac) detection is automatic. On other
        Posix environnement, uses -DUSE_POSIX_THREAD = ON
    - C++ 2011 (and later) std::mutex. Uses -DUSE_STDMUTEX = ON to enable
        automatic C++ 2011 detection (if you prefer Posix or Win32 solution).
    - Windows Win32 synchronization API.		

	If you access libphonenumber from a single thread, you don't need one of
    these solution.

    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-3.6.1/src
PROTOBUF_LIB              C:/protobuf-3.6.1/vsprojects/Release/libprotobuf.lib
PROTOC_BIN                C:/protobuf-3.6.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, non-Windows and non-C++ 2011
                                            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_POSIX_THREAD      = ON | OFF [OFF] -- Use Posix thread for multi-threading.
  USE_RE2               = ON | OFF [OFF] -- Use RE2.
  USE_STD_MAP           = ON | OFF [OFF] -- Force the use of std::map.
  USE_STDMUTEX          = ON | OFF [OFF] -- Detect and use C++2011 for multi-threading.
  REGENERATE_METADATA   = ON | OFF [ON]  -- When this is set to OFF it will skip
                                            regenerating the metadata with
                                            BuildMetadataCppFromXml. Since the
                                            metadata is included in the source
                                            tree anyway, it is beneficial for
                                            packagers to turn this OFF: it saves
                                            some time, and it also makes it
                                            unnecessary to have java in the build
                                            environment. 
