3 # Set by by scripts/update-chromium-version.sh
4 %define ChromiumVersion 53.2785.0
6 Version: %{ChromiumVersion}.%{Week}
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
15 Source0: %{name}-%{version}.tar.gz
16 Source1: content_shell.in
19 %global __debug_install_post %{nil}
20 %global debug_package %{nil}
23 %if 0%{?_enable_unittests}
27 %define _smp_mflags -j%(echo $((`/usr/bin/getconf _NPROCESSORS_ONLN` / 2)))
29 # Conditions for OBS build
30 # The OBS build does not support running script 'build_{target}.sh'.
31 # TODO: There is a bug regarding mismatched versions from repository.
32 # So, the versions need to be considered as originally intended versions,
33 # until those versions are fixed by platform team.
34 # 1) The value '2.3' of '%{tizen}' should be '2.4'.
35 # 2) The value '2.0' of '%{tizen}' should be '2.3'.
36 %if "%{tizen}" == "3.0"
37 %define chromium_efl_tizen_version 3.0
39 %if "%{tizen}" == "2.3" || "%{tizen}" == "2.4"
40 %define chromium_efl_tizen_version 2.4
42 %if "%{tizen}" == "2.0"
43 %define chromium_efl_tizen_version 2.3
46 %if %{!?TIZEN_PROFILE_TV:0}%{?TIZEN_PROFILE_TV:1} || "%{!?profile:0}%{?profile}" == "tv"
47 %define chromium_efl_tizen_profile tv
49 %define chromium_efl_tizen_profile mobile
52 # Excluded wearable profile build
53 # Chromium-efl doesn't support the wearable profile
54 %if "%{?tizen_profile_name}" == "wearable"
55 ExcludeArch: %{arm} %ix86 x86_64
58 Requires(post): /sbin/ldconfig
59 Requires(post): xkeyboard-config
60 Requires(postun): /sbin/ldconfig
62 BuildRequires: binutils-gold
63 BuildRequires: bison, edje-tools, expat-devel, flex, gettext, gperf, libcap-devel
64 BuildRequires: libjpeg-turbo-devel, ninja, perl, python, python-xml, which
65 BuildRequires: pkgconfig(capi-appfw-application)
66 BuildRequires: pkgconfig(capi-location-manager)
67 BuildRequires: pkgconfig(capi-media-audio-io)
68 BuildRequires: pkgconfig(capi-media-camera)
69 BuildRequires: pkgconfig(capi-media-player)
70 BuildRequires: pkgconfig(capi-media-tool)
71 BuildRequires: pkgconfig(capi-system-device)
72 BuildRequires: pkgconfig(capi-system-info)
73 BuildRequires: pkgconfig(capi-system-sensor)
74 BuildRequires: pkgconfig(capi-system-system-settings)
75 BuildRequires: pkgconfig(dlog)
76 BuildRequires: pkgconfig(ecore)
77 BuildRequires: pkgconfig(ecore-evas)
78 BuildRequires: pkgconfig(ecore-imf)
79 BuildRequires: pkgconfig(ecore-imf-evas)
80 BuildRequires: pkgconfig(ecore-input)
81 BuildRequires: pkgconfig(efl-extension)
82 BuildRequires: pkgconfig(elementary)
83 BuildRequires: pkgconfig(evas)
84 BuildRequires: pkgconfig(feedback)
85 BuildRequires: pkgconfig(fontconfig)
86 BuildRequires: pkgconfig(freetype2)
87 BuildRequires: pkgconfig(gles20)
88 BuildRequires: pkgconfig(glib-2.0)
89 BuildRequires: pkgconfig(gstreamer-1.0)
90 BuildRequires: pkgconfig(gstreamer-app-1.0)
91 BuildRequires: pkgconfig(gstreamer-plugins-base-1.0)
92 BuildRequires: pkgconfig(harfbuzz)
93 BuildRequires: pkgconfig(icu-i18n)
94 BuildRequires: pkgconfig(libdrm)
95 BuildRequires: pkgconfig(libevent)
96 BuildRequires: pkgconfig(libexif)
97 BuildRequires: pkgconfig(libffi)
98 BuildRequires: pkgconfig(libpng)
99 BuildRequires: pkgconfig(libpulse)
100 BuildRequires: pkgconfig(libtbm)
101 BuildRequires: pkgconfig(libudev)
102 BuildRequires: pkgconfig(libusb-1.0)
103 BuildRequires: pkgconfig(libxml-2.0)
104 BuildRequires: pkgconfig(libxslt)
105 BuildRequires: pkgconfig(minizip)
106 BuildRequires: pkgconfig(mm-player)
107 BuildRequires: pkgconfig(nspr)
108 BuildRequires: pkgconfig(nss)
109 BuildRequires: pkgconfig(openssl)
110 BuildRequires: pkgconfig(scim)
111 BuildRequires: pkgconfig(sqlite3)
112 BuildRequires: pkgconfig(tts)
113 BuildRequires: pkgconfig(ui-gadget-1)
114 BuildRequires: pkgconfig(vconf)
115 BuildRequires: pkgconfig(zlib)
117 # Applied python acceleration for generating gyp files.
118 %if "%{chromium_efl_tizen_version}" == "3.0"
120 BuildRequires: python-accel-armv7l-cross-arm
123 BuildRequires: python-accel-aarch64-cross-aarch64
127 %if "%{?_with_wayland}" == "1"
128 BuildRequires: pkgconfig(ecore-wayland)
129 BuildRequires: pkgconfig(wayland-egl)
131 BuildRequires: pkgconfig(ecore-x)
132 BuildRequires: pkgconfig(libdri2)
133 BuildRequires: pkgconfig(x11)
134 BuildRequires: pkgconfig(xcomposite)
135 BuildRequires: pkgconfig(xcursor)
136 BuildRequires: pkgconfig(xext)
137 BuildRequires: pkgconfig(xi)
138 BuildRequires: pkgconfig(xrandr)
139 BuildRequires: pkgconfig(xt)
140 BuildRequires: pkgconfig(xfixes)
141 BuildRequires: pkgconfig(xtst)
144 %if "%{?chromium_efl_tizen_version}%{!?chromium_efl_tizen_version:0}" == "2.4"
145 BuildRequires: pkgconfig(glesv2)
148 # Version Conditions for Every Targets
149 %if "%{?chromium_efl_tizen_version}%{!?chromium_efl_tizen_version:0}" >= "3.0"
150 BuildRequires: pkgconfig(libtzplatform-config)
154 Browser Engine based on Chromium EFL (Shared Library)
157 Summary: Chromium EFL
158 Group: Development/Libraries
159 Requires: %{name} = %{version}-%{release}
161 Browser Engine dev library based on Chromium EFL (development files)
163 %if 0%{?_enable_content_shell}
165 Summary: Chromium EFL port of content_shell application
166 Group: Development/Libraries
167 Requires: %{name} = %{version}-%{release}
169 Chromium EFL version of content_shell application
172 %if 0%{?_enable_unittests}
174 Summary: Chromium unittests
175 Group: Development/Libraries
176 Requires: %{name} = %{version}-%{release}
177 %description unittests
181 %if 0%{?build_ewk_unittests}
183 Summary: Chromium EWK unittests
184 Group: Development/UnitTests
185 Requires: %{name} = %{version}-%{release}
187 Chromium EFL unit test utilities
190 # The macros '%TZ_' are valid from tizen v3.0
191 %if "%{chromium_efl_tizen_version}" >= "3.0"
192 %define _manifestdir %TZ_SYS_RW_PACKAGES
193 %define _desktop_icondir %TZ_SYS_RW_ICONS/default/small
195 %define _manifestdir /usr/share/packages
196 %define _desktop_icondir /usr/share/icons/default/small
199 # Directory for internal chromium executable components
200 %global CHROMIUM_EXE_DIR %{_libdir}/%{name}
201 # Constant read only data used by chromium-efl port
202 %global CHROMIUM_DATA_DIR %{_datadir}/%{name}
203 # Chromium unit tests install directory
204 %global CHROMIUM_UNITTESTS_DIR /opt/usr/chromium-unittests/
205 # Directory containing localization files
206 %global CHROMIUM_LOCALE_DIR %{_datadir}/%{name}/locale
207 %if "%{chromium_efl_tizen_version}" >= "3.0"
208 %global CHROMIUM_WEBDB_DIR %TZ_SYS_RW_APP/org.tizen.%{name}
210 %global CHROMIUM_WEBDB_DIR /opt/usr/apps/%{name}
217 # architecture related configuration + neon temporary workaround
218 %if %{?_skip_ninja:0}%{!?_skip_ninja:1}
220 %ifarch %{arm} aarch64
221 export ADDITION_OPTION=" -finline-limit=64 -foptimize-sibling-calls -fno-unwind-tables -fno-exceptions -Os "
223 export CFLAGS="$CFLAGS $ADDITION_OPTION"
224 export CXXFLAGS="$CXXFLAGS $ADDITION_OPTION"
225 export FFLAGS="$FFLAGS $ADDITION_OPTION"
227 export CFLAGS="$(echo $CFLAGS | sed 's/-mfpu=[a-zA-Z0-9-]*/-mfpu=neon/g')"
228 export CXXFLAGS="$(echo $CXXFLAGS | sed 's/-mfpu=[a-zA-Z0-9-]*/-mfpu=neon/g')"
229 export FFLAGS="$(echo $FFLAGS | sed 's/-mfpu=[a-zA-Z0-9-]*/-mfpu=neon/g')"
231 export CFLAGS="$(echo $CFLAGS | sed 's/-Wl,--as-needed//g')"
232 export CXXFLAGS="$(echo $CXXFLAGS | sed 's/-Wl,--as-needed//g')"
236 CFLAGS="$(echo $CFLAGS | sed -E 's/-g[0-9] /-g0 /g')"
237 CXXFLAGS="$(echo $CXXFLAGS | sed -E 's/-g[0-9] /-g0 /g')"
240 %if "%{!?chromium_efl_tizen_profile:0}%{?chromium_efl_tizen_profile}" == "mobile"
241 %define OUTPUT_BUILD_PROFILE_TARGET mobile
243 %define OUTPUT_BUILD_PROFILE_TARGET tv
247 %define ARCHITECTURE armv7l
250 %define ARCHITECTURE aarch64
253 %define ARCHITECTURE ix86
256 %define ARCHITECTURE x86_64
259 # The "_repository" flag was changed to "_vd_cfg_target_repository" in tizen 4.0 product tv.
260 %if "%{?TIZEN_PRODUCT_TV}" == "1"
261 %define repo_name %{_vd_cfg_target_repository}
263 %define repo_name %{_repository}
266 %define OUTPUT_BASE_FOLDER out.tz_v%{tizen_version_major}.%{tizen_version_minor}.%{repo_name}.%{ARCHITECTURE}
268 export GN_GENERATOR_OUTPUT=$PWD/%{OUTPUT_BASE_FOLDER}
271 %global OUTPUT_FOLDER %{OUTPUT_BASE_FOLDER}
273 if type ccache &> /dev/null; then
274 source tizen_src/build/ccache_env.sh %{OUTPUT_BUILD_PROFILE_TARGET}
279 #run standard gn_chromiumefl wrapper
280 ./tizen_src/build/gn_chromiumefl.sh \
281 "data_dir=\"%{CHROMIUM_DATA_DIR}\"" \
282 "edje_dir=\"%{CHROMIUM_DATA_DIR}/themes\"" \
283 "exe_dir=\"%{CHROMIUM_EXE_DIR}\"" \
284 "locale_dir=\"%{CHROMIUM_LOCALE_DIR}\"" \
285 %if 0%{?_remove_webcore_debug_symbols:1}
286 "remove_webcore_debug_symbols=true" \
288 %if 0%{?chromium_efl_tizen_version:1}
289 "chromium_efl_tizen_version=%{gn_chromium_efl_tizen_version}" \
291 %if "%{?_with_wayland}" == "1"
294 %if "%{?_repository}" == "emulator" || "%{?_repository}" == "emulator32-x11"
295 "tizen_emulator_support=true" \
297 %if 0%{?component_build}
298 "component=\"shared_library\"" \
303 ninja %{_smp_mflags} -C"%{OUTPUT_FOLDER}" \
304 %if 0%{?_enable_content_shell}
307 %if 0%{?build_ewk_unittests}
310 efl_webprocess chromium-ewk efl_webview_app mini_browser ubrowser
312 %if 0%{?_enable_unittests}
313 ninja %{_smp_mflags} -C"%{OUTPUT_FOLDER}" angle_unittests env_chromium_unittests cacheinvalidation_unittests \
314 url_unittests sandbox_linux_unittests crypto_unittests sql_unittests accessibility_unittests \
315 gfx_unittests printing_unittests events_unittests ppapi_unittests jingle_unittests \
316 flip_in_mem_edsm_server_unittests breakpad_unittests dbus_unittests libphonenumber_unittests \
317 base_unittests ffmpeg_unittests gin_unittests net_unittests snapshot_unittests \
318 google_apis_unittests
319 # TODO: Fix compilation of the following tests content_unittests cc_unittests shell_dialogs_unittests
320 # gpu_unittests compos9itor_unittests media_unittests
325 #XXX icudtl.dat is not copied by gyp. Do that manually
326 cp third_party/icu/android/icudtl.dat "%{OUTPUT_FOLDER}"
328 # XXX Workaround for using rpmlint with emulator build on Tizen_TV 3.0
330 # When using this repo http://download.tizen.org/snapshots/tizen/tv/latest/repos/emulator32-x11/packages/
331 # rpmlint-tizen-1.0-6.1 is installed in GBS-ROOT. So, after rpms are built
332 # gbs build script runs rpmlint to test created packages. There is some BUG in
333 # this script and directory /home/abuild/rpmbuild/OTHER/ isn't created. This
334 # directory is required for rpmlint's log file and its lack causes build error.
335 %if "%{?chromium_efl_tizen_version}%{!?chromium_efl_tizen_version:0}" == "3.0"
336 if [ ! -d %{buildroot}/../../OTHER/ -a -f /opt/testing/bin/rpmlint ]; then
337 mkdir -p %{buildroot}/../../OTHER/
343 # Generate pkg-confg file
344 mkdir -p "%{OUTPUT_FOLDER}"/pkgconfig/
345 sed -e 's#?VERSION?#%{version}#' tizen_src/build/pkgconfig/chromium-efl.pc.in \
346 > "%{OUTPUT_FOLDER}"/pkgconfig/chromium-efl.pc
348 %if "%{?chromium_efl_tizen_version}%{!?chromium_efl_tizen_version:0}" != "3.0"
349 install -d "%{buildroot}"%{_sysconfdir}/smack/accesses2.d
351 install -d "%{buildroot}"%{_bindir}
352 install -d "%{buildroot}"%{_libdir}/pkgconfig
353 install -d "%{buildroot}"%{_includedir}/chromium-ewk
354 install -d "%{buildroot}"%{_includedir}/v8
355 install -d "%{buildroot}%{CHROMIUM_EXE_DIR}"
356 install -d "%{buildroot}%{CHROMIUM_DATA_DIR}"/themes
358 cp -r "%{OUTPUT_FOLDER}/locale" "%{buildroot}/%{CHROMIUM_LOCALE_DIR}"
360 install -m 0755 "%{OUTPUT_FOLDER}"/libchromium-ewk.so "%{buildroot}"%{_libdir}
362 install -m 0755 "%{OUTPUT_FOLDER}"/efl_webprocess "%{buildroot}%{CHROMIUM_EXE_DIR}"
363 install -m 0755 "%{OUTPUT_FOLDER}"/icudtl.dat "%{buildroot}%{CHROMIUM_EXE_DIR}"
364 install -m 0755 "%{OUTPUT_FOLDER}"/natives_blob.bin "%{buildroot}%{CHROMIUM_EXE_DIR}"
365 install -m 0755 "%{OUTPUT_FOLDER}"/snapshot_blob.bin "%{buildroot}%{CHROMIUM_EXE_DIR}"
366 install -m 0755 "%{OUTPUT_FOLDER}"/content_shell.pak "%{buildroot}%{CHROMIUM_EXE_DIR}"
367 install -m 0644 "%{OUTPUT_FOLDER}"/resources/*.edj "%{buildroot}%{CHROMIUM_DATA_DIR}"/themes
370 %if "%{?chromium_efl_tizen_version}%{!?chromium_efl_tizen_version:0}" == "3.0"
371 mkdir -p "%{buildroot}"/usr/apps/org.tizen.%{name}/bin
372 install -m 0755 "%{OUTPUT_FOLDER}"/efl_webview_app "%{buildroot}"/usr/apps/org.tizen.%{name}/bin/
373 install -m 0755 "%{OUTPUT_FOLDER}"/mini_browser "%{buildroot}"/usr/apps/org.tizen.%{name}/bin/
374 install -m 0755 "%{OUTPUT_FOLDER}"/ubrowser "%{buildroot}"/usr/apps/org.tizen.%{name}/bin/
376 install -d "%{buildroot}"/usr/share/packages
377 install -m 0644 tizen_src/ewk/efl_webview_app/chromium-efl_v3.0.xml "%{buildroot}"/usr/share/packages
378 install -m 0644 tizen_src/ewk/efl_webview_app/ubrowser_v3.0.xml "%{buildroot}"/usr/share/packages
380 mkdir -p "%{buildroot}"/usr/apps/org.tizen.%{name}/res/icons
381 install -d "%{buildroot}"/usr/share/icons
382 install -m 0644 tizen_src/ewk/efl_webview_app/mini-browser.png "%{buildroot}"/usr/apps/org.tizen.%{name}/res/icons
383 %else # for Tizen v2.X
384 install -m 0755 "%{OUTPUT_FOLDER}"/efl_webview_app "%{buildroot}"%{_bindir}
385 install -m 0755 "%{OUTPUT_FOLDER}"/mini_browser "%{buildroot}"%{_bindir}
386 install -m 0755 "%{OUTPUT_FOLDER}"/ubrowser "%{buildroot}"%{_bindir}
388 install -d "%{buildroot}"/opt/share/packages
389 install -m 0644 tizen_src/ewk/efl_webview_app/chromium-efl.xml "%{buildroot}"/opt/share/packages
390 install -m 0644 tizen_src/ewk/efl_webview_app/ubrowser.xml "%{buildroot}"/opt/share/packages
392 install -d "%{buildroot}"/opt/share/icons
393 install -m 0644 tizen_src/ewk/efl_webview_app/mini-browser.png "%{buildroot}"/opt/share/icons
396 install -m 0644 "%{OUTPUT_FOLDER}"/pkgconfig/*.pc "%{buildroot}"%{_libdir}/pkgconfig/
397 install -m 0644 tizen_src/ewk/efl_integration/public/*.h "%{buildroot}"%{_includedir}/chromium-ewk/
398 install -m 0644 v8/include/*.h "%{buildroot}"%{_includedir}/v8/
400 %if 0%{?_enable_content_shell}
401 install -m 0755 "%{OUTPUT_FOLDER}"/content_shell "%{buildroot}%{CHROMIUM_EXE_DIR}"/content_shell
402 sed 's#@binary@#%{CHROMIUM_EXE_DIR}/content_shell#' %{SOURCE1} > "%{buildroot}"%{_bindir}/content_shell
405 %if 0%{?_enable_unittests}
406 install -d "%{INSTALL_ROOT}%{CHROMIUM_UNITTESTS_DIR}"
407 for test in "%{OUTPUT_FOLDER}/*_unittests"; do
408 install -m 0755 ${test} "%{INSTALL_ROOT}%{CHROMIUM_UNITTESTS_DIR}"
412 %if 0%{?build_ewk_unittests}
413 mkdir -p %{buildroot}/opt/usr/resources/
414 mkdir -p %{buildroot}/opt/usr/utc_exec/
415 cp -r tizen_src/ewk/unittest/resources/* %{buildroot}/opt/usr/resources/
416 install -m 0644 "%{OUTPUT_FOLDER}"/ewk_unittests %{buildroot}/opt/usr/utc_exec/
417 install -m 0755 tizen_src/ewk/utc_gtest_run.sh %{buildroot}/opt/usr/utc_exec/
424 # CHROMIUM_WEBDB_DIR is a default path when application doesn't have own installation path.
425 # For example, mini-browser doesn't have own install path, in that case, mini-browser will
426 # use "/opt/usr/apps/chromium-efl/data" for HTML5 File System, Local Storage and so on.
427 # However, reference browser should have own installation path (e.g. /opt/usr/apps/com.samsung.browser/data),
428 # the reference browser should process similar work in order to support HTML5 Local Storage,
429 # File System and so on.
431 mkdir -p %{CHROMIUM_WEBDB_DIR}/data/
432 # The path is for multi-user by default on tizen v3.0.
433 %if "%{chromium_efl_tizen_version}" == "2.4"
434 chown -R app:app %{CHROMIUM_WEBDB_DIR}/data
437 mkdir -p %{_desktop_icondir}
438 mkdir -p %{_manifestdir}
444 %if "%{?chromium_efl_tizen_version}%{!?chromium_efl_tizen_version:0}" == "3.0"
445 %manifest packaging/chromium-efl_v3.0.manifest
446 /usr/apps/org.tizen.%{name}/bin/efl_webview_app
447 /usr/apps/org.tizen.%{name}/bin/mini_browser
448 /usr/apps/org.tizen.%{name}/bin/ubrowser
449 /usr/share/packages/chromium-efl_v3.0.xml
450 /usr/share/packages/ubrowser_v3.0.xml
451 /usr/apps/org.tizen.%{name}/res/icons/mini-browser.png
452 %else # for Tizen v2.X
453 %manifest packaging/%{name}.manifest
454 %{_bindir}/efl_webview_app
455 %{_bindir}/mini_browser
457 /opt/share/packages/chromium-efl.xml
458 /opt/share/packages/ubrowser.xml
459 /opt/share/icons/mini-browser.png
461 %defattr(-,root,root,-)
462 %{_libdir}/libchromium-ewk.so
463 %{CHROMIUM_EXE_DIR}/efl_webprocess
464 %{CHROMIUM_EXE_DIR}/icudtl.dat
465 %{CHROMIUM_EXE_DIR}/natives_blob.bin
466 %{CHROMIUM_EXE_DIR}/snapshot_blob.bin
467 %{CHROMIUM_EXE_DIR}/content_shell.pak
468 %{CHROMIUM_DATA_DIR}/themes/*.edj
469 %{CHROMIUM_LOCALE_DIR}
472 %defattr(-,root,root,-)
473 %{_includedir}/chromium-ewk/*.h
474 %{_libdir}/pkgconfig/*.pc
477 %if 0%{?_enable_content_shell}
479 %defattr(0755,root,root,-)
480 %{CHROMIUM_EXE_DIR}/content_shell
481 %{_bindir}/content_shell
484 %if 0%{?_enable_unittests}
486 %defattr(-,root,root,-)
487 %{CHROMIUM_UNITTESTS_DIR}/*
490 %if 0%{?build_ewk_unittests}
492 %defattr(-,root,root,-)
493 %manifest ./packaging/chromium-ewktest.manifest