[M73 Dev][EFL] Fix errors to generate ninja files
[platform/framework/web/chromium-efl.git] / packaging / chromium-efl.spec
1 Name: chromium-efl
2 Summary: Chromium EFL
3 # Set by by scripts/update-chromium-version.sh
4 %define ChromiumVersion 71.0.3578.0
5 %define Week 1
6 Version: %{ChromiumVersion}.%{Week}
7 Release: 1
8 # The 'Group' should be specified as one of the following valid group list.
9 # https://wiki.tizen.org/wiki/Packaging/Guidelines#Group_Tag
10 Group: Web Framework/Web Engine
11 # The 'License' should be specified as some of the following known license list.
12 # http://spdx.org/licenses/
13 License: LGPL-2.1 or BSD-2-Clause
14
15 Source0: %{name}-%{version}.tar.gz
16 Source1: content_shell.in
17
18 %if 0%{?_nodebug}
19 %global __debug_install_post %{nil}
20 %global debug_package %{nil}
21 %endif
22
23 %if 0%{?_enable_unittests}
24 %define _debug_mode 1
25 %endif
26
27 %define _smp_mflags -j%(echo $((`/usr/bin/getconf _NPROCESSORS_ONLN` / 2)))
28
29 %define tizen_version %{tizen_version_major}%{tizen_version_minor}
30
31 Requires: /usr/bin/systemctl
32 Requires(post): /sbin/ldconfig
33 Requires(post): xkeyboard-config
34 Requires(postun): /sbin/ldconfig
35
36 BuildRequires: binutils-gold
37 BuildRequires: bison, edje-tools, expat-devel, flex, gettext, gperf, libcap-devel
38 BuildRequires: libjpeg-turbo-devel, ninja, perl, python, python-xml, which
39 BuildRequires: pkgconfig(capi-appfw-application)
40 BuildRequires: pkgconfig(capi-location-manager)
41 BuildRequires: pkgconfig(capi-media-audio-io)
42 BuildRequires: pkgconfig(capi-media-camera)
43 BuildRequires: pkgconfig(capi-media-player)
44 BuildRequires: pkgconfig(capi-media-tool)
45 BuildRequires: pkgconfig(capi-system-device)
46 BuildRequires: pkgconfig(capi-system-info)
47 BuildRequires: pkgconfig(capi-system-sensor)
48 BuildRequires: pkgconfig(capi-system-system-settings)
49 BuildRequires: pkgconfig(dlog)
50 BuildRequires: pkgconfig(ecore)
51 BuildRequires: pkgconfig(ecore-evas)
52 BuildRequires: pkgconfig(ecore-imf)
53 BuildRequires: pkgconfig(ecore-imf-evas)
54 BuildRequires: pkgconfig(ecore-input)
55 BuildRequires: pkgconfig(efl-extension)
56 BuildRequires: pkgconfig(elementary)
57 BuildRequires: pkgconfig(evas)
58 BuildRequires: pkgconfig(feedback)
59 BuildRequires: pkgconfig(fontconfig)
60 BuildRequires: pkgconfig(freetype2)
61 BuildRequires: pkgconfig(gles20)
62 BuildRequires: pkgconfig(glib-2.0)
63 BuildRequires: pkgconfig(gstreamer-1.0)
64 BuildRequires: pkgconfig(gstreamer-app-1.0)
65 BuildRequires: pkgconfig(gstreamer-plugins-base-1.0)
66 BuildRequires: pkgconfig(harfbuzz)
67 BuildRequires: pkgconfig(icu-i18n)
68 BuildRequires: pkgconfig(libdrm)
69 BuildRequires: pkgconfig(libevent)
70 BuildRequires: pkgconfig(libexif)
71 BuildRequires: pkgconfig(libffi)
72 BuildRequires: pkgconfig(libpng)
73 BuildRequires: pkgconfig(libpulse)
74 BuildRequires: pkgconfig(libtbm)
75 BuildRequires: pkgconfig(libtzplatform-config)
76 BuildRequires: pkgconfig(libudev)
77 BuildRequires: pkgconfig(libusb-1.0)
78 BuildRequires: pkgconfig(libxml-2.0)
79 BuildRequires: pkgconfig(libxslt)
80 BuildRequires: pkgconfig(minizip)
81 BuildRequires: pkgconfig(mm-player)
82 BuildRequires: pkgconfig(nspr)
83 BuildRequires: pkgconfig(nss)
84 BuildRequires: pkgconfig(openssl)
85 BuildRequires: pkgconfig(scim)
86 BuildRequires: pkgconfig(security-manager)
87 BuildRequires: pkgconfig(sqlite3)
88 BuildRequires: pkgconfig(tts)
89 BuildRequires: pkgconfig(ui-gadget-1)
90 BuildRequires: pkgconfig(vconf)
91 BuildRequires: pkgconfig(zlib)
92
93 # Applied python acceleration for generating gyp files.
94 %ifarch armv7l
95 BuildRequires: python-accel-armv7l-cross-arm
96 %endif
97 %ifarch aarch64
98 BuildRequires: python-accel-aarch64-cross-aarch64
99 %endif
100
101 %if "%{?_with_wayland}" == "1"
102 %if %{tizen_version} >= 50
103 BuildRequires: pkgconfig(ecore-wl2)
104 %else
105 BuildRequires: pkgconfig(ecore-wayland)
106 %endif
107 BuildRequires: pkgconfig(wayland-egl)
108 %else
109 BuildRequires: pkgconfig(ecore-x)
110 BuildRequires: pkgconfig(libdri2)
111 BuildRequires: pkgconfig(x11)
112 BuildRequires: pkgconfig(xcomposite)
113 BuildRequires: pkgconfig(xcursor)
114 BuildRequires: pkgconfig(xext)
115 BuildRequires: pkgconfig(xi)
116 BuildRequires: pkgconfig(xrandr)
117 BuildRequires: pkgconfig(xt)
118 BuildRequires: pkgconfig(xfixes)
119 BuildRequires: pkgconfig(xtst)
120 %endif
121
122 %if "%{?tizen_profile_name}" == "tv"
123 BuildRequires: pkgconfig(vd-win-util)
124 %endif
125
126 # TODO(youngsoo): The binutils-gold crashes mini_browser on the Tizen v3.0 ARM 64 bit images.
127 #                 Once fixed, use binutils-gold for all targets on Tizen v3.0.
128 %ifnarch aarch64 %{arm} # [M48_2564] Temporary excluding arm architecture for fixing memory issue
129                         #            FIXME: http://web.sec.samsung.net/bugzilla/show_bug.cgi?id=15383
130 BuildRequires: binutils-gold
131 %endif
132
133 %ifarch armv7l
134 %define ARCHITECTURE armv7l
135 %endif
136 %ifarch aarch64
137 %define ARCHITECTURE aarch64
138 %endif
139 %ifarch i586 i686
140 %define ARCHITECTURE ix86
141 %endif
142 %ifarch x86_64
143 %define ARCHITECTURE x86_64
144 %endif
145
146 %if ("%{?tizen_profile_name}" == "tv" && "%{?_clang}" == "1") || ("%{?tizen_profile_name}" != "tv" && "%{?_gcc}" != "1" && "%{ARCHITECTURE}" == "armv7l")
147 %define __use_clang 1
148 %else
149 %define __use_clang 0
150 %endif
151
152 %if %{__use_clang} == 1
153 BuildRequires: libatomic
154 %endif
155
156 %description
157 Browser Engine based on Chromium EFL (Shared Library)
158
159 %package devel
160 Summary: Chromium EFL
161 Group: Development/Libraries
162 Requires: %{name} = %{version}-%{release}
163 %description devel
164 Browser Engine dev library based on Chromium EFL (development files)
165
166 %if 0%{?_enable_content_shell}
167 %package shell
168 Summary: Chromium EFL port of content_shell application
169 Group: Development/Libraries
170 Requires: %{name} = %{version}-%{release}
171 %description shell
172 Chromium EFL version of content_shell application
173 %endif
174
175 %if 0%{?_enable_unittests}
176 %package unittests
177 Summary: Chromium unittests
178 Group: Development/Libraries
179 Requires: %{name} = %{version}-%{release}
180 %description unittests
181 Chromium unite tests
182 %endif
183
184 %if 0%{?build_ewk_unittests}
185 %package ewktest
186 Summary: Chromium EWK unittests
187 Group: Development/UnitTests
188 Requires: %{name} = %{version}-%{release}
189 %description ewktest
190 Chromium EFL unit test utilities
191 %endif
192
193 # The macros '%TZ_' are valid from tizen v3.0
194 %define _pkgid org.tizen.%{name}
195 %define _icondir %TZ_SYS_RO_APP/%{_pkgid}/shared/res
196 %define _xmldir %TZ_SYS_RO_PACKAGES
197
198 # Directory for internal chromium executable components
199 %global CHROMIUM_EXE_DIR %{_libdir}/%{name}
200 # Constant read only data used by chromium-efl port
201 %global CHROMIUM_DATA_DIR %{_datadir}/%{name}
202 # Chromium unit tests install directory
203 %global CHROMIUM_UNITTESTS_DIR /opt/usr/chromium-unittests/
204 # Directory containing localization files
205 %global CHROMIUM_LOCALE_DIR %{_datadir}/%{name}/locale
206
207 %prep
208 %setup -q
209
210 %build
211 # architecture related configuration + neon temporary workaround
212 %if %{?_skip_ninja:0}%{!?_skip_ninja:1}
213
214 %ifarch %{arm} aarch64
215   export ADDITION_OPTION=" -finline-limit=64 -foptimize-sibling-calls -fno-unwind-tables -fno-exceptions -Os "
216
217   export CFLAGS="$CFLAGS $ADDITION_OPTION"
218   export CXXFLAGS="$CXXFLAGS $ADDITION_OPTION"
219   export FFLAGS="$FFLAGS $ADDITION_OPTION"
220
221   export CFLAGS="$(echo $CFLAGS | sed 's/-mfpu=[a-zA-Z0-9-]*/-mfpu=neon/g')"
222   export CXXFLAGS="$(echo $CXXFLAGS | sed 's/-mfpu=[a-zA-Z0-9-]*/-mfpu=neon/g')"
223   export FFLAGS="$(echo $FFLAGS | sed 's/-mfpu=[a-zA-Z0-9-]*/-mfpu=neon/g')"
224 %else
225   export CFLAGS="$(echo $CFLAGS | sed 's/-Wl,--as-needed//g')"
226   export CXXFLAGS="$(echo $CXXFLAGS | sed 's/-Wl,--as-needed//g')"
227 %endif
228
229 %if 0%{?_nodebug}
230   CFLAGS="$(echo $CFLAGS | sed -E 's/-g[0-9] /-g0 /g')"
231   CXXFLAGS="$(echo $CXXFLAGS | sed -E 's/-g[0-9] /-g0 /g')"
232 %endif
233
234 # The "_repository" flag was changed to "_vd_cfg_target_repository" in tizen 4.0 product tv.
235 %if "%{?tizen_profile_name}" == "tv"
236 %define repo_name %{_vd_cfg_target_repository}
237 %else
238 %define repo_name %{_repository}
239 %endif
240
241 %define OUTPUT_BASE_FOLDER out.tz_v%{tizen_version_major}.%{tizen_version_minor}.%{repo_name}.%{ARCHITECTURE}
242
243 export GN_GENERATOR_OUTPUT=$PWD/%{OUTPUT_BASE_FOLDER}
244
245 #set build mode
246 %global OUTPUT_FOLDER %{OUTPUT_BASE_FOLDER}
247
248 if type ccache &> /dev/null; then
249   source tizen_src/build/ccache_env.sh tizen
250 fi
251
252 %if 0%{!?_skip_gn:1}
253 #gn generate
254 #run standard gn_chromiumefl wrapper
255 ./tizen_src/build/gn_chromiumefl.sh \
256   "is_tizen=true" \
257   "data_dir=\"%{CHROMIUM_DATA_DIR}\"" \
258   "edje_dir=\"%{CHROMIUM_DATA_DIR}/themes\"" \
259   "exe_dir=\"%{CHROMIUM_EXE_DIR}\"" \
260   "tizen_version=%{tizen_version}" \
261   "tizen_version_major=%{tizen_version_major}" \
262   "tizen_version_minor=%{tizen_version_minor}" \
263   "tizen_version_patch=%{tizen_version_patch}" \
264 %if 0%{?_remove_webcore_debug_symbols:1}
265   "remove_webcore_debug_symbols=true" \
266 %endif
267 %if "%{?_with_wayland}" == "1"
268   "use_wayland=true" \
269 %endif
270 %if "%{?_repository}" == "emulator" || "%{?_repository}" == "emulator32-x11"
271   "tizen_emulator_support=true"  \
272 %endif
273 %if "%{?tizen_profile_name}" == "tv"
274   "tizen_product_tv=true" \
275 %endif
276 %if 0%{?component_build}
277  "component=\"shared_library\"" \
278 %endif
279 %if %{__use_clang} == 1
280   "is_clang=true" \
281 %else
282   "is_clang=false" \
283 %endif
284 %endif  # _skip_gn
285
286 ninja %{_smp_mflags} -C "%{OUTPUT_FOLDER}" \
287 %if 0%{?_enable_content_shell}
288   content_shell \
289 %endif
290 %if 0%{?build_ewk_unittests}
291   ewk_unittests \
292 %endif
293   efl_webprocess chromium-ewk efl_webview_app mini_browser ubrowser
294
295 %if 0%{?_enable_unittests}
296 ninja %{_smp_mflags} -C"%{OUTPUT_FOLDER}" angle_unittests env_chromium_unittests cacheinvalidation_unittests \
297   url_unittests sandbox_linux_unittests crypto_unittests sql_unittests accessibility_unittests \
298   gfx_unittests printing_unittests events_unittests ppapi_unittests jingle_unittests \
299   flip_in_mem_edsm_server_unittests breakpad_unittests dbus_unittests libphonenumber_unittests \
300   base_unittests ffmpeg_unittests gin_unittests net_unittests snapshot_unittests \
301   google_apis_unittests
302 # TODO: Fix compilation of the following tests content_unittests cc_unittests shell_dialogs_unittests
303 # gpu_unittests compos9itor_unittests media_unittests
304 %endif
305
306 %endif  # _skip_ninja
307
308 #XXX icudtl.dat is not copied by gyp. Do that manually
309 cp third_party/icu/android/icudtl.dat "%{OUTPUT_FOLDER}"
310
311 # XXX Workaround for using rpmlint with emulator build on Tizen_TV 3.0
312 #
313 # When using this repo http://download.tizen.org/snapshots/tizen/tv/latest/repos/emulator32-x11/packages/
314 # rpmlint-tizen-1.0-6.1 is installed in GBS-ROOT. So, after rpms are built
315 # gbs build script runs rpmlint to test created packages. There is some BUG in
316 # this script and directory /home/abuild/rpmbuild/OTHER/ isn't created. This
317 # directory is required for rpmlint's log file and its lack causes build error.
318 if [ ! -d %{buildroot}/../../OTHER/ -a -f /opt/testing/bin/rpmlint ]; then
319    mkdir -p %{buildroot}/../../OTHER/
320 fi
321
322 %install
323
324 # Generate pkg-confg file
325 mkdir -p "%{OUTPUT_FOLDER}"/pkgconfig/
326 sed -e 's#@CHROMIUM_VERSION@#%{version}#' tizen_src/build/pkgconfig/chromium-efl.pc.in \
327     > "%{OUTPUT_FOLDER}"/pkgconfig/chromium-efl.pc
328
329 install -d "%{buildroot}"%{_bindir}
330 install -d "%{buildroot}"%{_libdir}/pkgconfig
331 install -d "%{buildroot}"%{_includedir}/chromium-ewk
332 install -d "%{buildroot}"%{_includedir}/v8
333 install -d "%{buildroot}%{CHROMIUM_EXE_DIR}"
334 install -d "%{buildroot}%{CHROMIUM_EXE_DIR}"/locales
335 install -d "%{buildroot}%{CHROMIUM_DATA_DIR}"/themes
336
337 # locale for ewk layer
338 cp -r "%{OUTPUT_FOLDER}/locale" "%{buildroot}/%{CHROMIUM_LOCALE_DIR}"
339
340 # locale for chromium layer
341 install -m 0644 "%{OUTPUT_FOLDER}"/locales/efl/*.pak "%{buildroot}%{CHROMIUM_EXE_DIR}"/locales
342
343 install -m 0755 "%{OUTPUT_FOLDER}"/libchromium-ewk.so    "%{buildroot}"%{_libdir}
344
345 install -m 0755 "%{OUTPUT_FOLDER}"/efl_webprocess    "%{buildroot}%{CHROMIUM_EXE_DIR}"
346 install -m 0755 "%{OUTPUT_FOLDER}"/icudtl.dat    "%{buildroot}%{CHROMIUM_EXE_DIR}"
347 install -m 0755 "%{OUTPUT_FOLDER}"/natives_blob.bin  "%{buildroot}%{CHROMIUM_EXE_DIR}"
348 install -m 0755 "%{OUTPUT_FOLDER}"/snapshot_blob.bin "%{buildroot}%{CHROMIUM_EXE_DIR}"
349 install -m 0644 "%{OUTPUT_FOLDER}"/content_shell.pak "%{buildroot}%{CHROMIUM_EXE_DIR}"
350 install -m 0644 "%{OUTPUT_FOLDER}"/resources/*.edj   "%{buildroot}%{CHROMIUM_DATA_DIR}"/themes
351
352 mkdir -p "%{buildroot}"/usr/apps/org.tizen.%{name}/bin
353 install -m 0755 "%{OUTPUT_FOLDER}"/efl_webview_app   "%{buildroot}"/usr/apps/org.tizen.%{name}/bin/
354 install -m 0755 "%{OUTPUT_FOLDER}"/mini_browser      "%{buildroot}"/usr/apps/org.tizen.%{name}/bin/
355 install -m 0755 "%{OUTPUT_FOLDER}"/ubrowser          "%{buildroot}"/usr/apps/org.tizen.%{name}/bin/
356
357 install -d "%{OUTPUT_FOLDER}"/packages
358 install -d %{buildroot}%{_xmldir}
359 sed -e 's#@TIZEN_VERSION@#%{tizen_version_major}.%{tizen_version_minor}#g' \
360     -e 's#@CHROMIUM_VERSION@#%{version}#g' \
361     -e 's#@TZ_SYS_RO_APP@#%{TZ_SYS_RO_APP}#g' \
362     -e 's#@ICON_DIR@#%{_icondir}#g' \
363     tizen_src/ewk/efl_webview_app/%{_pkgid}.xml.in \
364     > %{OUTPUT_FOLDER}/packages/%{_pkgid}.xml
365 install -m 0644 %{OUTPUT_FOLDER}/packages/%{_pkgid}.xml           %{buildroot}%{_xmldir}
366
367 install -d %{buildroot}%{_icondir}
368 install -m 0644 tizen_src/ewk/ubrowser/ubrowser.png               %{buildroot}%{_icondir}
369 install -m 0644 tizen_src/ewk/efl_webview_app/mini_browser.png    %{buildroot}%{_icondir}
370 install -m 0644 tizen_src/ewk/efl_webview_app/efl_webview_app.png %{buildroot}%{_icondir}
371
372 install -m 0644 "%{OUTPUT_FOLDER}"/pkgconfig/*.pc    "%{buildroot}"%{_libdir}/pkgconfig/
373 install -m 0644 tizen_src/ewk/efl_integration/public/*.h                  "%{buildroot}"%{_includedir}/chromium-ewk/
374 install -m 0644 v8/include/*.h "%{buildroot}"%{_includedir}/v8/
375
376 %if 0%{?_enable_content_shell}
377 install -m 0755 "%{OUTPUT_FOLDER}"/content_shell "%{buildroot}%{CHROMIUM_EXE_DIR}"/content_shell
378 sed 's#@binary@#%{CHROMIUM_EXE_DIR}/content_shell#' %{SOURCE1} > "%{buildroot}"%{_bindir}/content_shell
379 %endif
380
381 %if 0%{?_enable_unittests}
382 install -d "%{INSTALL_ROOT}%{CHROMIUM_UNITTESTS_DIR}"
383 for test in "%{OUTPUT_FOLDER}/*_unittests"; do
384   install -m 0755 ${test} "%{INSTALL_ROOT}%{CHROMIUM_UNITTESTS_DIR}"
385 done
386 %endif
387
388 %if 0%{?build_ewk_unittests}
389 mkdir -p %{buildroot}/opt/usr/resources/
390 mkdir -p %{buildroot}/opt/usr/utc_exec/
391 cp -r tizen_src/ewk/unittest/resources/* %{buildroot}/opt/usr/resources/
392 install -m 0644 "%{OUTPUT_FOLDER}"/ewk_unittests %{buildroot}/opt/usr/utc_exec/
393 install -m 0755 tizen_src/ewk/utc_gtest_run.sh %{buildroot}/opt/usr/utc_exec/
394 %endif
395
396 %post
397
398 %postun
399
400 %files
401 %manifest packaging/chromium-efl.manifest
402 /usr/apps/org.tizen.%{name}/bin/efl_webview_app
403 /usr/apps/org.tizen.%{name}/bin/mini_browser
404 /usr/apps/org.tizen.%{name}/bin/ubrowser
405 %{_icondir}/efl_webview_app.png
406 %{_icondir}/mini_browser.png
407 %{_icondir}/ubrowser.png
408 %{_xmldir}/%{_pkgid}.xml
409 %defattr(-,root,root,-)
410 %{_libdir}/libchromium-ewk.so
411 %if "%{?tizen_profile_name}" == "tv"
412 %caps(cap_mac_admin,cap_mac_override,cap_setgid=ei) %{CHROMIUM_EXE_DIR}/efl_webprocess
413 %else
414 %{CHROMIUM_EXE_DIR}/efl_webprocess
415 %endif
416 %{CHROMIUM_EXE_DIR}/icudtl.dat
417 %{CHROMIUM_EXE_DIR}/natives_blob.bin
418 %{CHROMIUM_EXE_DIR}/snapshot_blob.bin
419 %{CHROMIUM_EXE_DIR}/content_shell.pak
420 %{CHROMIUM_EXE_DIR}/locales/*.pak
421 %{CHROMIUM_DATA_DIR}/themes/*.edj
422 %{CHROMIUM_LOCALE_DIR}
423
424 %files devel
425 %defattr(-,root,root,-)
426 %{_includedir}/chromium-ewk/*.h
427 %{_libdir}/pkgconfig/*.pc
428 %{_includedir}/v8/*
429
430 %if 0%{?_enable_content_shell}
431 %files shell
432 %defattr(0755,root,root,-)
433 %{CHROMIUM_EXE_DIR}/content_shell
434 %{_bindir}/content_shell
435 %endif
436
437 %if 0%{?_enable_unittests}
438 %files unittests
439 %defattr(-,root,root,-)
440 %{CHROMIUM_UNITTESTS_DIR}/*
441 %endif
442
443 %if 0%{?build_ewk_unittests}
444 %files ewktest
445 %defattr(-,root,root,-)
446 %manifest ./packaging/chromium-ewktest.manifest
447 /opt/usr/utc_exec/*
448 /opt/usr/resources/*
449 %endif