blob: a2a5e5607491b13109a8c31ca407526ca5ff9e6a [file] [log] [blame]
David Beaumont14dc2152014-11-28 15:49:34 +00001 C++ version of the libphonenumber project
2 =========================================
Philip Liarda3802a32011-02-22 08:04:03 +00003
David Beaumont14dc2152014-11-28 15:49:34 +00004This library is a port of the Java version.
Philip Liarda3802a32011-02-22 08:04:03 +00005
6This project uses some third-party code:
Philippe Liardae165b12011-11-30 10:42:30 +00007 - src/phonenumbers/utf/ sources come from lib9 which is also used in Go.
Philip Liarda3802a32011-02-22 08:04:03 +00008
Philippe Liardb9a0d782011-12-07 14:52:33 +00009
David Beaumont14dc2152014-11-28 15:49:34 +000010Installing the library on GNU/Linux
11-----------------------------------
12In recent Debian-based distributions you may be able to simply install the
13libphonenumber library directly.
14
15Installing the binary packages:
16 - Use this if you just need to use or link against the library:
17 $ sudo apt-get install libphonenumber6 libphonenumber6-dev
18
19Installing the source package:
20 - Use this if you wish to develop or debug the library:
21 $ sudo apt-get source libphonenumber
22
23The latest packages can be found on the Debian packages site:
24 https://packages.debian.org/search?searchon=names&keywords=libphonenumber
25
26
27Manually installing the library on GNU/Linux
28--------------------------------------------
29You should only need these instructions if the above instructions do not work.
30
31The example command lines below assume that you have a Debian-based GNU/Linux
32distribution. Other distributions and packaging systems will differ.
33
34Quickstart:
35 - In recent Debian-based distributions, it should be sufficent to run:
36 $ sudo apt-get install \
37 cmake cmake-curses-gui libprotobuf-dev libgtest-dev libre2-dev \
38 libicu-dev libboost-dev libboost-thread-dev libboost-system-dev
39
40If any of these packages fails to install correctly, follow the instructions
41in the appropriate section below.
42
Philip Liarda3802a32011-02-22 08:04:03 +000043Requirements:
44 - CMake build system
45 http://www.cmake.org
46
David Beaumont14dc2152014-11-28 15:49:34 +000047 Installation:
Philip Liarda3802a32011-02-22 08:04:03 +000048 $ sudo apt-get install cmake
49
David Beaumont1b31d8e2012-07-19 13:31:07 +000050 Additionally it is recommended you install the ccmake configuration tool:
51 $ sudo apt-get install cmake-curses-gui
52
Philip Liardff0ef172011-03-04 08:43:24 +000053 - Protocol Buffers
54 http://code.google.com/p/protobuf/
David Beaumont14dc2152014-11-28 15:49:34 +000055 Version 2.4 or more recent is required (this is available by default for
56 recent Debian-based GNU/Linux distributions).
Philip Liardff0ef172011-03-04 08:43:24 +000057
David Beaumont14dc2152014-11-28 15:49:34 +000058 You can check which version is available:
59 $ apt-cache show libprotobuf-dev
60 Package: libprotobuf-dev
61 Source: protobuf
62 Version: 2.5.0-9ubuntu1 <-- This must be >= 2.4.0
63 ...
64
65 Installation:
Philip Liardff0ef172011-03-04 08:43:24 +000066 $ sudo apt-get install libprotobuf-dev
67
Shaopeng Jia4628c702011-03-24 09:10:31 +000068 Note: if your GNU/Linux distribution doesn't provide the needed package,
69 please download and install it manually:
70 $ tar xjf protobuf-2.4.tar.bz2
71 $ cd protobuf-2.4
72 $ ./configure && make && sudo make install
73
Philip Liardff0ef172011-03-04 08:43:24 +000074 - Google Test
75 http://code.google.com/p/googletest/
76
David Beaumont14dc2152014-11-28 15:49:34 +000077 Installation:
Philip Liardff0ef172011-03-04 08:43:24 +000078 $ sudo apt-get install libgtest-dev
79
Philip Liarda3802a32011-02-22 08:04:03 +000080 - RE2
81 http://code.google.com/p/re2/
82
David Beaumont14dc2152014-11-28 15:49:34 +000083 Installation:
Philip Liarda3802a32011-02-22 08:04:03 +000084 $ sudo apt-get install libre2-dev
85
David Beaumont14dc2152014-11-28 15:49:34 +000086 Note that some distributions (notably Ubuntu 10.4) may not include this,
87 so you might need to download and install it manually.
Philip Liarda3802a32011-02-22 08:04:03 +000088
David Beaumont14dc2152014-11-28 15:49:34 +000089 Find and download the Debian packages for your system. For example:
90 http://packages.ubuntu.com/utopic/libre2-1
91 http://packages.ubuntu.com/utopic/libre2-dev
Philip Liarda3802a32011-02-22 08:04:03 +000092
David Beaumont14dc2152014-11-28 15:49:34 +000093 You need to download both the libre2-dev and libre2-1 packages.
94 Once downloaded, install them with:
95 $ sudo dpkg -i libre2*.deb
96
97 If you want to install it from source, it's available via Mercurial at:
98 https://re2.googlecode.com/hg
99 however precise instructions on building and installing are outside the
100 scope of this document.
Philip Liarda3802a32011-02-22 08:04:03 +0000101
Philip Liard8e7e1b92011-03-03 14:35:27 +0000102 - ICU
David Beaumont14dc2152014-11-28 15:49:34 +0000103 Installation:
David Beaumont1b31d8e2012-07-19 13:31:07 +0000104 $ sudo apt-get install libicu-dev
105
106 Otherwise you need to download the source tarball for the latest version
107 from:
108 http://site.icu-project.org/download
109 And then extract it via:
David Beaumont14dc2152014-11-28 15:49:34 +0000110 $ tar xzf icu4c-*-src.tgz
David Beaumont1b31d8e2012-07-19 13:31:07 +0000111
112 Alternatively you can export the SVN repository to the current directory
113 via:
David Beaumont14dc2152014-11-28 15:49:34 +0000114 $ svn export http://source.icu-project.org/repos/icu/icu/tags/release-XX-y-z/
David Beaumont1b31d8e2012-07-19 13:31:07 +0000115
116 Having acquired the latest sources, make and install it via:
Philip Liard69921332011-06-06 08:15:16 +0000117 $ cd icu/source
118 $ ./configure && make && sudo make install
Philip Liard8e7e1b92011-03-03 14:35:27 +0000119
Philip Liard486cbd92011-06-07 14:41:10 +0000120 - Boost
Philippe Liard9f0d77e2013-04-30 12:08:05 +0000121 Version 1.40 or more recent is required if you need libphonenumber to be
122 thread-safe. If you access libphonenumber from a single thread, you can
123 avoid the Boost dependency by disabling the USE_BOOST CMake option (see
124 Troubleshooting section below for information about ccmake).
Philip Liard486cbd92011-06-07 14:41:10 +0000125
126 You can install it very easily on a Debian-based GNU/Linux distribution:
David Beaumont14dc2152014-11-28 15:49:34 +0000127 $ sudo apt-get install libboost-dev libboost-thread-dev libboost-system-dev
Philip Liard486cbd92011-06-07 14:41:10 +0000128
129 Note: Boost Thread is the only library needed at link time.
Philip Liarda3802a32011-02-22 08:04:03 +0000130
David Beaumont14dc2152014-11-28 15:49:34 +0000131
David Beaumonta34ddc92015-03-06 13:53:07 +0100132Building and testing the library
133--------------------------------
David Beaumont1b31d8e2012-07-19 13:31:07 +0000134 $ cd libphonenumber/cpp
Philip Liarda3802a32011-02-22 08:04:03 +0000135 $ mkdir build
136 $ cd build
Philippe Liard7b30af62011-09-21 17:43:54 +0000137 $ cmake ..
Philip Liarda3802a32011-02-22 08:04:03 +0000138 $ make
David Beaumonta34ddc92015-03-06 13:53:07 +0100139 $ ./libphonenumber_test
David Beaumont14dc2152014-11-28 15:49:34 +0000140
141Troubleshooting CMake via ccmake
142--------------------------------
David Beaumont1b31d8e2012-07-19 13:31:07 +0000143 Follow these instructions if the build steps above don't work for you.
144
145 - Incorrect protocol buffer library issues
146 If the build process complains that the version of protoc being used is too
147 old or that it cannot find the correct libprotobuf library, you may need to
148 change the library path of the project.
149
150 This issue should typically only occur in cases where you have two (or more)
151 versions of the protocol buffer libraries installed on your system. This
152 step assumes that you have already manually downloaded and installed the
153 protocol buffer libraries into /usr/local (as described above).
154
155 To make cmake use the manually installed version of the protocol buffer
156 libraries, install cmake-curses-gui and use ccmake as follows.
157
158 From within libphonenumber/cpp/build:
159 $ ccmake .
160
161 You should set the following values:
162 PROTOBUF_INCLUDE_DIR /usr/local/include
163 PROTOBUF_LIB /usr/local/lib/libprotobuf.so
164 PROTOC_BIN /usr/local/bin/protoc
165
166 Now press 'c' then 'g' to configure the new parameters and exit ccmake.
167 Finally regenerate the make files and rebuild via:
168 $ cmake ..
169 $ make
170
171 - Protoc binary not executing properly
172 If you still have issues with the protoc binary tool in /usr/local/bin not
173 running correctly (cannot find libprotobuf.so.x) then you may need to
174 configure the LD_LIBRARY_PATH. To do this, as a superuser, add the following
175 file:
176 /etc/ld.so.conf.d/libprotobuf.conf
177
178 with the contents:
179 # Use the manually installed version of the protocol buffer libraries.
180 /usr/local/lib
181
182 And then run:
183 $ sudo chmod 644 /etc/ld.so.conf.d/libprotobuf.conf
184 $ sudo ldconfig
185
186 - Incorrect ICU library issues
187 Similar to the protocol buffer library issue above, it is possible that your
188 build may fail if you have two conflicting versions of the ICU libraries
189 installed on your system. This step assumes that you have already manually
190 downloaded and installed a recent version of the ICU libraries into
191 /usr/local.
192
193 Install and run the ccmake tool (as described above) and set the following
194 values:
195 ICU_I18N_INCLUDE_DIR /usr/local/include
196 ICU_I18N_LIB /usr/local/lib/libicui18n.so
197 ICU_UC_INCLUDE_DIR /usr/local/include
198 ICU_UC_LIB /usr/local/lib/libicuuc.so
199
200 Now press 'c' then 'g' to configure the new parameters and exit ccmake.
201 Finally regenerate the make files and rebuild via:
202 $ cmake ..
203 $ make
Philippe Liardb9a0d782011-12-07 14:52:33 +0000204
205Building the library on Windows (Visual Studio)
206-----------------------------------------------
207The library was tested with Visual Studio 2010.
208
209You will need to manually fetch and install the following dependencies:
210 - CMake (tested with v2.8.6):
211 http://cmake.org/cmake/resources/software.html
212 * Download and install the Win32 installer.
213
214 - Boost (tested with v1.44) from BoostPro:
215 http://www.boostpro.com/download/
216 * Select all the variants and Boost DateTime and Boost Thread during the
217 installation process.
Philippe Liard9f0d77e2013-04-30 12:08:05 +0000218 See Linux instructions for information about thread-safety.
Philippe Liardb9a0d782011-12-07 14:52:33 +0000219
220 - GTest (tested with v1.6.0):
221 http://code.google.com/p/googletest/downloads/list
222 * Open msvc/gtest-md.sln with Visual Studio and build the whole solution.
223
224 - ICU (MSVC binaries, tested with v4.8.1):
225 http://site.icu-project.org/download/48#ICU4C-Download
226 * Simply extract the archive.
227
228 - Protocol Buffers:
229 http://code.google.com/p/protobuf/downloads/list
230 * Open vsprojects/protobuf.sln with Visual Studio and build the whole
231 solution.
232
233Then run cmake-gui and specify the path to the libphonenumber's cpp directory
234and its build directory which must be created (e.g. cpp/build).
235
236When clicking on "Configure", specify the appropriate Visual Studio version
237(tested with 2010).
238
239Then CMake will need your help to locate the dependencies. You will have to set
240the following variables (this example assumes that you extracted the
241dependencies to C:/).
242
243GTEST_INCLUDE_DIR C:/gtest-1.6.0/include
244GTEST_LIB C:/gtest-1.6.0/msvc/gtest-md/Release/gtest.lib
245
246ICU_I18N_INCLUDE_DIR C:/icu/include
247ICU_I18N_LIB C:/icu/lib/icuin.lib
248
249ICU_UC_INCLUDE_DIR C:/icu/include
250ICU_UC_LIB C:/icu/lib/icuuc.lib
251
252PROTOBUF_INCLUDE_DIR C:/protobuf-2.4.1/src
253PROTOBUF_LIB C:/protobuf-2.4.1/vsprojects/Release/libprotobuf.lib
254PROTOC_BIN C:/protobuf-2.4.1/vsprojects/Release/protoc.exe
255
256Then you can click on "Configure" again. CMake should have located all the
257dependencies.
258Then click on "Generate" to generate the appropriate Visual Studio project.
259Then open cpp/build/libphonenumber.sln with Visual Studio and build the INSTALL
260target.
261
262As a result the library's headers and binaries should have been installed to
263C:/Program Files/libphonenumber/.
264Note that this path can be set by overriding the CMAKE_INSTALL_PREFIX variable
265with cmake-gui.
266
267Supported build parameters
268--------------------------
Philip Liardb36c48f2011-05-09 15:04:24 +0000269 Build parameters can be specified invoking CMake with '-DKEY=VALUE' or using a
270 CMake user interface (ccmake or cmake-gui).
271
Philippe Liardb8a13bf2013-05-07 12:59:58 +0000272 USE_ALTERNATE_FORMATS = ON | OFF [ON] -- Use alternate formats for the phone
273 number matcher.
274 USE_BOOST = ON | OFF [ON] -- Use Boost. This is only needed in
Philippe Liardc2f27522013-06-17 11:53:01 +0000275 multi-threaded environments that
276 are not Linux and Mac.
277 Libphonenumber relies on Boost for
278 non-POSIX (e.g. Windows)
279 multi-threading.
Philippe Liardb8a13bf2013-05-07 12:59:58 +0000280 USE_ICU_REGEXP = ON | OFF [ON] -- Use ICU regexp engine.
281 USE_LITE_METADATA = ON | OFF [OFF] -- Generates smaller metadata that
282 doesn't include example numbers.
283 USE_RE2 = ON | OFF [OFF] -- Use RE2.
284 USE_STD_MAP = ON | OFF [OFF] -- Force the use of std::map.