Nix upstreaming - Adding build files and supporting scripts
[WebKit-https.git] / Source / cmake / OptionsNix.cmake
1 # Nix uses a different way to set/unset default features based on WK bug 110717 (not yet landed).
2 # So the implementation, i.e. the next two macros, was moved to here to keep a minimal as possible
3 # interference on other ports until some day when/if bug 110717 get landed.
4
5 # Compute and set default values for feature defines
6 macro(WEBKIT_OPTION_DEFAULTS _port)
7     # Use the preprocessor to get the default values for feature defines
8     EXEC_PROGRAM("gcc -E -P -dM -DBUILDING_${_port}__ -I ${CMAKE_SOURCE_DIR}/Source/WTF ${CMAKE_SOURCE_DIR}/Source/WTF/wtf/Platform.h | grep '^#define ENABLE_\\w\\+ [01]$' | cut -d' ' -f2-3 | sort" OUTPUT_VARIABLE DEFINITIONS)
9     string(REGEX MATCHALL "([^\n]+|[^\n]+$)" DEFINITIONS_LIST ${DEFINITIONS})
10
11     foreach (DEFINITION ${DEFINITIONS_LIST})
12         string(REGEX REPLACE "^([^ ]+) ([^ ]+)$" "\\1" DEFINITION_NAME "${DEFINITION}")
13         string(REGEX REPLACE "^([^ ]+) ([^ ]+)$" "\\2" DEFINITION_VALUE "${DEFINITION}")
14         WEBKIT_OPTION_DEFINE(${DEFINITION_NAME} "Toggle ${DEFINITION_NAME}" ${DEFINITION_VALUE})
15         option(${DEFINITION_NAME} "Toggle ${DEFINITION_NAME}" ${DEFINITION_VALUE})
16     endforeach ()
17 endmacro()
18
19 # Show WebKit options summary and add -DFOOBAR to each option with a value different from the default value.
20 macro(PROCESS_WEBKIT_OPTIONS)
21     message(STATUS "Enabled features:")
22
23     set(_MAX_FEATURE_LENGTH 0)
24     foreach (_name ${_WEBKIT_AVAILABLE_OPTIONS})
25         string(LENGTH ${_name} _NAME_LENGTH)
26         if (_NAME_LENGTH GREATER _MAX_FEATURE_LENGTH)
27             set(_MAX_FEATURE_LENGTH ${_NAME_LENGTH})
28         endif ()
29     endforeach ()
30
31     set(_SHOULD_PRINT_POINTS OFF)
32     foreach (_name ${_WEBKIT_AVAILABLE_OPTIONS})
33         string(LENGTH ${_name} _NAME_LENGTH)
34
35         set(_MESSAGE " ${_name} ")
36
37         if (_SHOULD_PRINT_POINTS)
38             foreach (IGNORE RANGE ${_NAME_LENGTH} ${_MAX_FEATURE_LENGTH})
39                 set(_MESSAGE "${_MESSAGE} ")
40             endforeach ()
41             set(_SHOULD_PRINT_POINTS OFF)
42         else ()
43             foreach (IGNORE RANGE ${_NAME_LENGTH} ${_MAX_FEATURE_LENGTH})
44                 set(_MESSAGE "${_MESSAGE}.")
45             endforeach ()
46             set(_SHOULD_PRINT_POINTS ON)
47         endif ()
48
49         if (${_name})
50             list(APPEND FEATURE_DEFINES ${_name})
51             set(FEATURE_DEFINES_WITH_SPACE_SEPARATOR "${FEATURE_DEFINES_WITH_SPACE_SEPARATOR} ${_name}")
52         endif ()
53
54         set(_MESSAGE "${_MESSAGE} ${${_name}}")
55         message(STATUS "${_MESSAGE}")
56     endforeach ()
57
58     # Add add_definitions to values different from the defaults
59     foreach (_name ${_WEBKIT_AVAILABLE_OPTIONS})
60         # Convert values from ON/OFF to 1/0 because
61         # CMake says "1 EQUAL ON" is false.
62         if (${_WEBKIT_AVAILABLE_OPTIONS_INITALVALUE_${_name}})
63             set(_a 1)
64         else ()
65             set(_a 0)
66         endif ()
67         if (${${_name}})
68             set(_b 1)
69         else ()
70             set(_b 0)
71         endif ()
72         if (NOT _a EQUAL _b)
73             add_definitions("-D${_name}=${_b}")
74         endif ()
75     endforeach ()
76 endmacro()
77
78 set(PROJECT_VERSION_MAJOR 0)
79 set(PROJECT_VERSION_MINOR 1)
80 set(PROJECT_VERSION_PATCH 0)
81 set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
82
83 if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
84     # Use -femit-struct-debug-baseonly to reduce the size of WebCore static library
85     set(CMAKE_CXX_FLAGS_DEBUG "-g -femit-struct-debug-baseonly" CACHE STRING "Flags used by the compiler during debug builds." FORCE)
86 endif ()
87
88 set(SHARED_CORE 0)
89 set(ENABLE_WEBKIT 0)
90 set(ENABLE_WEBKIT2 1)
91
92 set(WebKit2_OUTPUT_NAME WebKitNix)
93
94 add_definitions(-DBUILDING_NIX__=1)
95
96 find_package(Cairo 1.12.8 REQUIRED)
97 find_package(Fontconfig 2.8.0 REQUIRED)
98 find_package(Freetype REQUIRED)
99 find_package(GLIB 2.36.0 REQUIRED COMPONENTS gio gobject gmodule gthread)
100 find_package(HarfBuzz)
101 find_package(ICU REQUIRED)
102 find_package(JPEG REQUIRED)
103 find_package(LibXml2 2.6 REQUIRED)
104 find_package(LibXslt 1.1.7 REQUIRED)
105 find_package(PNG REQUIRED)
106 find_package(Sqlite REQUIRED)
107 find_package(Threads REQUIRED)
108 find_package(ZLIB REQUIRED)
109
110 # Variable that must exists on CMake space
111 # to keep common CMake files working as desired for us
112 set(WTF_USE_ICU_UNICODE ON)
113 set(WTF_USE_LEVELDB ON)
114 set(ENABLE_API_TESTS ON)
115
116 WEBKIT_OPTION_DEFAULTS("NIX")
117 WEBKIT_OPTION_DEFINE(WTF_USE_OPENGL_ES_2 "Use EGL + OpenGLES2" OFF)
118 WEBKIT_OPTION_DEFINE(WTF_USE_CURL "Use libCurl as network backend" OFF)
119
120 if (WTF_USE_CURL)
121     find_package(CURL REQUIRED)
122     set(REQUIRED_NETWORK libcurl)
123 else ()
124     find_package(LibSoup 2.42.0 REQUIRED)
125     set(REQUIRED_NETWORK libsoup-2.4)
126 endif ()
127
128 if (WTF_USE_OPENGL_ES_2)
129     find_package(OpenGLES2 REQUIRED)
130     find_package(EGL REQUIRED)
131     set(WTF_USE_EGL ON)
132     add_definitions(-DWTF_USE_OPENGL_ES_2=1)
133 else ()
134     find_package(X11 REQUIRED)
135     find_package(OpenGL REQUIRED)
136     add_definitions(-DHAVE_GLX=1)
137 endif ()
138
139 if (NOT ENABLE_SVG)
140     set(ENABLE_SVG_FONTS OFF)
141 endif ()
142
143 PROCESS_WEBKIT_OPTIONS()
144
145
146