Reworking the Linux parts of the doc to be simpler and only give advice
[platform/upstream/libphonenumber.git] / cpp / README
index 4825d1a..96ca037 100644 (file)
@@ -1,24 +1,68 @@
-C++ version of the libphonenumber project.
-Work in progress.
+                  C++ version of the libphonenumber project
+                  =========================================
 
-This is a port of the Java version.
+This library is a port of the Java version.
 
 This project uses some third-party code:
-  - src/base/ sources come from Chromium browser.
-  - src/utf/ sources come from lib9 which is also used in Go.
+  - 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
 
-    You can install it very easily on a Debian-based GNU/Linux distribution:
+    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.
+    Version 2.4 or more recent is required (this is available by default for
+    recent Debian-based GNU/Linux distributions).
 
-    You can install it very easily on a Debian-based GNU/Linux distribution:
+    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,
@@ -30,65 +74,211 @@ Requirements:
   - Google Test
     http://code.google.com/p/googletest/
 
-    You can install it very easily on a Debian-based GNU/Linux distribution:
+    Installation:
     $ sudo apt-get install libgtest-dev
 
   - RE2
     http://code.google.com/p/re2/
 
-    You can install it very easily on Ubuntu Maverick and later:
+    Installation:
     $ sudo apt-get install libre2-dev
 
-    Otherwise if you use a Debian-based distribution you can fetch the Ubuntu
-    package which should work:
-    http://packages.ubuntu.com/maverick/libre2-dev
+    Note that some distributions (notably Ubuntu 10.4) may not include this,
+    so you might need to download and install it manually.
 
-    If you want to install it manually:
-    You need Mercurial to checkout its source code:
-    $ sudo apt-get install mercurial
+    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
 
-    Then checkout, build and install it:
-    $ hg clone https://re2.googlecode.com/hg re2
-    $ cd re2
-    $ make test
-    $ make install
-    $ make testinstall
+    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
-    Version 4.4 or more recent is required.
-    It can be built from sources. You need to download the source tarball at
-    this location:
-    http://site.icu-project.org/download
-    Then you can extract, build and install it this way:
-    $ tar xzf icu4c-4_4_2-src.tgz
+    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
 
-    If you have a Debian-based distribution providing an up-to-date version of
-    ICU, you can install it using apt-get:
-    $ sudo apt-get install libicu-dev
-
   - Boost
-    Version 1.40 or more recent is required.
+    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 libboost1.40-dev libboost-thread1.40-dev
+    $ sudo apt-get install libboost-dev libboost-thread-dev libboost-system-dev
 
     Note: Boost Thread is the only library needed at link time.
 
-How to build libphonenumber C++:
-  $ cd libphonenumber
+
+Building the library
+--------------------
+  $ cd libphonenumber/cpp
   $ mkdir build
   $ cd build
   $ cmake ..
   $ make
 
-Supported build parameters:
+
+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_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.
+  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.