File: FindPhonenumber.cmake

package info (click to toggle)
evolution-data-server 3.56.2-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 46,656 kB
  • sloc: ansic: 365,352; xml: 578; cpp: 482; perl: 297; sh: 62; makefile: 60; python: 35; javascript: 29
file content (93 lines) | stat: -rw-r--r-- 3,575 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# FindPhonenumber.cmake
#
# Searches for Google's libphonenumber library
#
# Defines -DWITH_PHONENUMBER=PATH variable, which defaults to OFF.
# The output is:
#    ENABLE_PHONENUMBER - ON, when the libphonenumber is used
#    PHONENUMBER_RAW_INPUT_NEEDED - Whether Parse() or ParseAndKeepRawInput() must be used to get the country-code source
#    PHONENUMBER_DEFINITIONS - definitions to use with target_compile_definitions() and similar commands
#    PHONENUMBER_INCLUDE_DIRS - include directories to use with target_include_directories() and similar commands
#    PHONENUMBER_LIB_DIRS - directory where libphonenumber can be found
#    PHONENUMBER_LDFLAGS - LDFLAGS to use with target_link_libraries() and similar commands

include(PrintableOptions)
include(CheckCXXSourceCompiles)

add_printable_variable_path(WITH_PHONENUMBER "Path prefix where the libphonenumber is installed" OFF)

if(NOT WITH_PHONENUMBER)
	return()
endif(NOT WITH_PHONENUMBER)

set(PHONENUMBER_DEFINITIONS -DI18N_PHONENUMBERS_USE_BOOST CACHE STRING "libphonenumber compile definitions, default is -DI18N_PHONENUMBERS_USE_BOOST")
set(PHONENUMBER_INCLUDE_DIRS)
set(PHONENUMBER_LIB_DIRS)
set(PHONENUMBER_LDFLAGS -lphonenumber)

string(LENGTH "${CMAKE_BINARY_DIR}" bindirlen)
string(LENGTH "${WITH_PHONENUMBER}" maxlen)
if(maxlen LESS bindirlen)
	set(substr "***")
else(maxlen LESS bindirlen)
	string(SUBSTRING "${WITH_PHONENUMBER}" 0 ${bindirlen} substr)
endif(maxlen LESS bindirlen)
string(TOUPPER "${WITH_PHONENUMBER}" optupper)

if(("${optupper}" STREQUAL "ON") OR ("${substr}" STREQUAL "${CMAKE_BINARY_DIR}"))
	set(WITH_PHONENUMBER "ON")
	set(PHONENUMBER_INCLUDE_DIRS "${INCLUDE_INSTALL_DIR}")
	set(PHONENUMBER_LIB_DIRS ${LIB_INSTALL_DIR})
	set(PHONENUMBER_LDFLAGS -L${PHONENUMBER_LIB_DIRS} ${PHONENUMBER_LDFLAGS})
else(("${optupper}" STREQUAL "ON") OR ("${substr}" STREQUAL "${CMAKE_BINARY_DIR}"))
	set(PHONENUMBER_INCLUDE_DIRS "${WITH_PHONENUMBER}/include")
	set(PHONENUMBER_LIB_DIRS ${WITH_PHONENUMBER}/lib${LIB_SUFFIX})
	set(PHONENUMBER_LDFLAGS -L${PHONENUMBER_LIB_DIRS} ${PHONENUMBER_LDFLAGS})
endif(("${optupper}" STREQUAL "ON") OR ("${substr}" STREQUAL "${CMAKE_BINARY_DIR}"))

unset(bindirlen)
unset(maxlen)
unset(substr)
unset(optupper)

set(CMAKE_REQUIRED_DEFINITIONS ${PHONENUMBER_DEFINITIONS})
set(CMAKE_REQUIRED_INCLUDES ${PHONENUMBER_INCLUDE_DIRS})

foreach(lib boost_thread-mt boost_thread)
	set(CMAKE_REQUIRED_LIBRARIES ${PHONENUMBER_LDFLAGS} -l${lib})
	CHECK_CXX_SOURCE_COMPILES("#include <phonenumbers/phonenumberutil.h>

				int main(void) {
					i18n::phonenumbers::PhoneNumberUtil::GetInstance();
					return 0;
				}" phone_number_with_${lib})
	if(phone_number_with_${lib})
		set(ENABLE_PHONENUMBER ON)
		set(PHONENUMBER_LDFLAGS ${CMAKE_REQUIRED_LIBRARIES})
		break()
	endif(phone_number_with_${lib})
endforeach(lib)

if(NOT ENABLE_PHONENUMBER)
	message(FATAL_ERROR "libphonenumber cannot be used. Use -DWITH_PHONENUMBER=PATH to specify the library prefix, or -DWITH_PHONENUMBER=OFF to disable it.")
endif(NOT ENABLE_PHONENUMBER)

CHECK_CXX_SOURCE_COMPILES("#include <phonenumbers/phonenumberutil.h>

			int main(void) {
				namespace pn = i18n::phonenumbers;

				pn::PhoneNumber n;

				if (pn::PhoneNumberUtil::GetInstance ()->
					Parse(\"049(800)46663\", \"DE\", &n) == pn::PhoneNumberUtil::NO_PARSING_ERROR
					&& n.has_country_code_source ()
					&& n.country_code_source () == 49)
					return EXIT_SUCCESS;

				return EXIT_FAILURE;
			}" PHONENUMBER_RAW_INPUT_NEEDED)

unset(CMAKE_REQUIRED_DEFINITIONS)
unset(CMAKE_REQUIRED_INCLUDES)
unset(CMAKE_REQUIRED_LIBRARIES)