71c77ad91e70a9204960968b9aa25789fd9ea600
[platform/framework/web/chromium-efl.git] / tizen_src / packaging / crosswalk-bin.spec
1 # adjust compression algorithm to speed up RPMS creation
2 # source RPM and debug RPMS are big and take too much time
3 # when using standard (lzma) compression
4 %define _source_payload w3.gzdio
5 %define _binary_payload w3.gzdio
6
7 Name:           crosswalk-bin
8 Version:        15.44.2403.0
9 Release:        0
10 Summary:        Chromium-based app runtime
11 License:        (BSD-3-Clause and LGPL-2.1+)
12 Group:          Web Framework/Web Run Time
13 Url:            https://github.com/otcshare/crosswalk
14 Source:         %{name}-%{version}.tar.gz
15
16 # Provided for compatibility for a while.
17 Provides:       crosswalk
18
19 %if 0%{?nodebug}
20 %global __debug_install_post %{nil}
21 %global debug_package %{nil}
22 %endif
23
24 BuildRequires:  binutils-gold
25 BuildRequires:  bison
26 BuildRequires:  bzip2-devel
27 BuildRequires:  chromium-efl-libs
28 BuildRequires:  elfutils
29 BuildRequires:  expat-devel
30 BuildRequires:  flex
31 BuildRequires:  gperf
32 BuildRequires:  libcap-devel
33 BuildRequires:  libelf-devel
34 BuildRequires:  ninja
35 BuildRequires:  perl
36 BuildRequires:  pkgconfig(ail)
37 BuildRequires:  pkgconfig(aul)
38 BuildRequires:  pkgconfig(alsa)
39 BuildRequires:  pkgconfig(appcore-common)
40 BuildRequires:  pkgconfig(bundle)
41 BuildRequires:  pkgconfig(cairo)
42 BuildRequires:  pkgconfig(capi-appfw-application)
43 BuildRequires:  pkgconfig(capi-location-manager)
44 BuildRequires:  pkgconfig(dbus-1)
45 BuildRequires:  pkgconfig(fontconfig)
46 BuildRequires:  pkgconfig(freetype2)
47 BuildRequires:  pkgconfig(gles20)
48 BuildRequires:  pkgconfig(glib-2.0)
49 BuildRequires:  pkgconfig(haptic)
50 BuildRequires:  pkgconfig(icu-i18n)
51 BuildRequires:  pkgconfig(libdrm)
52 BuildRequires:  pkgconfig(libexif)
53 BuildRequires:  pkgconfig(libpci)
54 BuildRequires:  pkgconfig(libpulse)
55 BuildRequires:  pkgconfig(libtzplatform-config)
56 BuildRequires:  pkgconfig(libudev)
57 BuildRequires:  pkgconfig(libxml-2.0)
58 BuildRequires:  pkgconfig(libxslt)
59 BuildRequires:  pkgconfig(nss)
60 BuildRequires:  pkgconfig(pkgmgr)
61 BuildRequires:  pkgconfig(pkgmgr-info)
62 BuildRequires:  pkgconfig(pkgmgr-installer)
63 BuildRequires:  pkgconfig(pkgmgr-parser)
64 BuildRequires:  pkgconfig(protobuf)
65 BuildRequires:  pkgconfig(secure-storage)
66 BuildRequires:  pkgconfig(sensor)
67 BuildRequires:  pkgconfig(vconf)
68 BuildRequires:  pkgconfig(xmlsec1)
69 BuildRequires:  python
70 BuildRequires:  python-xml
71 BuildRequires:  which
72 BuildRequires:  yasm
73 Requires:       ca-certificates-tizen
74 Requires:       ss-server
75
76 # chromium-efl/chromium_src dependencies.
77 BuildRequires:  pkgconfig(capi-media-audio-io)
78 BuildRequires:  pkgconfig(capi-media-camera)
79 BuildRequires:  pkgconfig(capi-media-player)
80 BuildRequires:  pkgconfig(capi-media-tool)
81 BuildRequires:  pkgconfig(capi-system-sensor)
82 BuildRequires:  pkgconfig(capi-system-device)
83 BuildRequires:  pkgconfig(capi-system-system-settings)
84 BuildRequires:  pkgconfig(ecore)
85 BuildRequires:  pkgconfig(ecore-evas)
86 BuildRequires:  pkgconfig(ecore-imf)
87 BuildRequires:  pkgconfig(ecore-imf-evas)
88 BuildRequires:  pkgconfig(ecore-input)
89 BuildRequires:  pkgconfig(efl-extension)
90 BuildRequires:  pkgconfig(elementary)
91 BuildRequires:  pkgconfig(evas)
92 BuildRequires:  pkgconfig(flac)
93 BuildRequires:  pkgconfig(gstreamer-1.0)
94 BuildRequires:  pkgconfig(gstreamer-plugins-base-1.0)
95 BuildRequires:  pkgconfig(gstreamer-app-1.0)
96 BuildRequires:  pkgconfig(harfbuzz)
97 BuildRequires:  pkgconfig(libtbm)
98 BuildRequires:  pkgconfig(minizip)
99 BuildRequires:  pkgconfig(nspr)
100 BuildRequires:  pkgconfig(openssl)
101 BuildRequires:  pkgconfig(speex)
102 BuildRequires:  pkgconfig(tts)
103 BuildRequires:  pkgconfig(vconf)
104
105 # Applied python acceleration for generating gyp files.
106 %if "%{chromium_efl_tizen_version}" == "3.0"
107 %ifarch armv7l
108 BuildRequires: python-accel-armv7l-cross-arm
109 %endif
110 %ifarch aarch64
111 BuildRequires: python-accel-aarch64-cross-aarch64
112 %endif
113 %endif
114
115 %description
116 Crosswalk is an app runtime based on Chromium. It is an open source project started by the Intel Open Source Technology Center (http://www.01.org).
117
118 %define _manifestdir %TZ_SYS_RO_PACKAGES
119 %define _manifestdir_ro %TZ_SYS_RO_PACKAGE
120 %define _desktop_icondir %TZ_SYS_RW_ICONS/default/small
121 %define _desktop_icondir_ro %TZ_SYS_RO_ICONS/default/small
122 %define _dbusservicedir /usr/share/dbus-1/services
123 %define _systemduserservicedir /usr/lib/systemd/user
124
125 %prep
126 %setup -q
127
128 %build
129
130 # Stop unconditionally passing -Wall to the compiler. Chromium has its own
131 # mechanisms for deciding which parts of the code need -Wall and which need it
132 # to be left out (since several pieces are built with -Werror). At least in
133 # M39, this is preventing the "rtc_base" target from being built because it
134 # does not expect -Wall to be passed to the compiler (see webrtc issue 3307).
135 export CXXFLAGS=`echo $CXXFLAGS | sed s,-Wall,,g`
136
137 # Do not use -finline-functions: it breaks the build because it causes -Wall to
138 # warn about some conditions that cannot really be reached (ie. variables that
139 # may be used uninitialized while in fact thay cannot be uninitialized). See
140 # TC-2299.
141 export CXXFLAGS=`echo $CXXFLAGS | sed s,-finline-functions,,g`
142
143 # For ffmpeg on ia32. The original CFLAGS set by the gyp and config files in
144 # src/third_party/ffmpeg already pass -O2 -fomit-frame-pointer, but Tizen's
145 # CFLAGS end up appending -fno-omit-frame-pointer. See http://crbug.com/37246
146 export CFLAGS=`echo $CFLAGS | sed s,-fno-omit-frame-pointer,,g`
147
148 # Building the RPM in the GBS chroot fails with errors such as
149 #   /usr/lib/gcc/i586-tizen-linux/4.7/../../../../i586-tizen-linux/bin/ld:
150 #       failed to set dynamic section sizes: Memory exhausted
151 # For now, work around it by passing a GNU ld-specific flag that optimizes the
152 # linker for memory usage.
153 export LDFLAGS="${LDFLAGS} -Wl,--no-keep-memory"
154
155 # Support building in a non-standard directory, possibly outside %{_builddir}.
156 # Since the build root is erased every time a new build is performed, one way
157 # to avoid losing the build directory is to specify a location outside the
158 # build root to the BUILDDIR_NAME definition, such as "/var/tmp/xwalk-build"
159 # (remember all paths are still inside the chroot):
160 #    gbs build --define 'BUILDDIR_NAME /some/path'
161 BUILDDIR_NAME="%{?BUILDDIR_NAME}"
162 if [ -n "${BUILDDIR_NAME}" ]; then
163    mkdir -p "${BUILDDIR_NAME}"
164    ln -s "${BUILDDIR_NAME}" "%{OUTPUT_FOLDER}"
165 fi
166
167 # For building for arm in OBS, we need :
168 # -> to unset sysroot value.
169 # sysroot variable is automatically set for cross compilation to use arm-sysroot provided by Chromium project
170 # sysroot usage is not needed, we need to use arm libraries from the virtualized environment.
171 #
172 # Crosswalk build fails if the fpu selected in the gcc option is different from neon in case of arm7 compilation
173 # So force it.
174 %ifarch %{arm}
175 export CFLAGS=`echo $CFLAGS | sed s,-mfpu=vfpv3,-mfpu=neon,g`
176 export CXXFLAGS=`echo $CXXFLAGS | sed s,-mfpu=vfpv3,-mfpu=neon,g`
177 export FFLAGS=`echo $FFLAGS | sed s,-mfpu=vfpv3,-mfpu=neon,g`
178 %endif
179
180 # We are relying on our libraries already being installed, we need to pass -L
181 # to avoid libraries with the same name from being picked up instead (and also
182 # to tell GCC/ld where to look for them).
183 export LDFLAGS="${LDFLAGS} -L%{_libdir}/chromium-efl-libs/lib"
184
185 ###### start of block copied/adapted from chromium-efl.spec
186
187 tizen_src/build/apply_patches.sh --crosswalk-bin
188 trap 'tizen_src/build/apply_patches.sh -r --crosswalk-bin' EXIT
189
190 %if "%{tizen}" == "3.0"
191 %define chromium_efl_tizen_version 3.0
192 %endif
193 %if "%{tizen}" == "2.3" || "%{tizen}" == "2.4"
194 %define chromium_efl_tizen_version 2.4
195 %endif
196 %if "%{tizen}" == "2.0"
197 %define chromium_efl_tizen_version 2.3
198 %endif
199
200 %if %{!?TIZEN_PROFILE_TV:0}%{?TIZEN_PROFILE_TV:1} || "%{!?profile:0}%{?profile}" == "tv"
201 %define chromium_efl_tizen_profile tv
202 %else
203 %define chromium_efl_tizen_profile mobile
204 %endif
205
206 %if 0%{?nodebug}
207   CFLAGS=$(echo $CFLAGS | sed 's/-g[0-9]*/ /g')
208   CXXFLAGS=$(echo $CXXFLAGS | sed 's/-g[0-9]*/ /g')
209 %endif
210
211 %if "%{!?chromium_efl_tizen_profile:0}%{?chromium_efl_tizen_profile}" == "mobile"
212   %define OUTPUT_BUILD_PROFILE_TARGET mobile
213 %else
214   %define OUTPUT_BUILD_PROFILE_TARGET tv
215 %endif
216
217 # The variable chromium-efl_tizen_version and _repository are essentially needed for build.
218 # Therefore, if the variable is not defined, it explicitly raises exception here.
219 %define OUTPUT_BASE_FOLDER out.tz_v%{chromium_efl_tizen_version}.%{OUTPUT_BUILD_PROFILE_TARGET}.%{_repository}.libs
220 export GYP_GENERATOR_OUTPUT=$PWD/%{OUTPUT_BASE_FOLDER}
221
222 #set build mode
223 %if 0%{?_debug_mode}
224   %global OUTPUT_FOLDER %{OUTPUT_BASE_FOLDER}/Debug
225 %else
226   %global OUTPUT_FOLDER %{OUTPUT_BASE_FOLDER}/Release
227 %endif
228 %global XWALK_GEN %{OUTPUT_FOLDER}/xwalk_gen
229
230 mkdir -p "%{XWALK_GEN}"
231 sed "s/@VERSION@/%{version}/g" xwalk/packaging/crosswalk.xml.in > "%{XWALK_GEN}"/crosswalk.xml
232 cp -a xwalk/packaging/crosswalk-bin.manifest "%{XWALK_GEN}/crosswalk.manifest"
233 cp -a xwalk/packaging/crosswalk.png "%{XWALK_GEN}"
234 cp -a xwalk/LICENSE "%{XWALK_GEN}"/LICENSE.xwalk
235 cp -a AUTHORS "%{XWALK_GEN}"/AUTHORS.chromium
236 cp -a LICENSE "%{XWALK_GEN}"/LICENSE.chromium
237
238 export GYP_GENERATORS="ninja"
239
240 %if %{?_skip_gyp:0}%{!?_skip_gyp:1}
241 ./tizen_src/build/gyp_chromiumefl.sh \
242    --xwalk \
243   -Dbuilding_crosswalk_bin=1 \
244   -Dbuilding_strategy="crosswalk-bin" \
245   -Dcomponent=shared_library \
246 %if 0%{?_remove_webcore_debug_symbols:1}
247   -Dremove_webcore_debug_symbols=1 \
248 %endif
249 %if 0%{?chromium_efl_tizen_version:1}
250   -Dchromium_efl_tizen_version=%{chromium_efl_tizen_version} \
251 %endif
252 %if "%{?_with_wayland}" == "1"
253   -Duse_wayland=1 \
254 %endif
255 %if "%{?_repository}" == "emulator" || "%{?_repository}" == "emulator32-x11"
256   -Dtizen_emulator_support=1  \
257 %endif
258   -Dtizen_"%{OUTPUT_BUILD_PROFILE_TARGET}"=1 \
259   -Dbuilding_for_tizen_"%{OUTPUT_BUILD_PROFILE_TARGET}"=1
260 %endif
261
262 %if %{?_skip_ninja:0}%{!?_skip_ninja:1}
263 NINJA_TARGETS="xwalk xwalk_application_tools"
264
265 %ifarch %{arm}
266 tizen_src/build/prebuild/ninja.arm %{_smp_mflags} -C"%{OUTPUT_FOLDER}" \
267 %else
268 %ifarch aarch64
269 tizen_src/build/prebuild/ninja-linux64 -v %{_smp_mflags} -C"%{OUTPUT_FOLDER}" \
270 %else
271 tizen_src/build/prebuild/ninja %{_smp_mflags} -C"%{OUTPUT_FOLDER}" \
272 %endif
273 %endif
274    ${NINJA_TARGETS}
275 %endif
276
277 # XXX Workaround for using rpmlint with gbs build on Tizen 3.0
278 #
279 # When using the latest snapshot repo on http://download.tizen.org/snapshots
280 # rpmlint-tizen-1.0-6.1 is installed in GBS-ROOT. So, after rpms are built
281 # gbs build script runs rpmlint to test created packages. There is some BUG in
282 # this script and directory /home/abuild/rpmbuild/OTHER/ isn't created. This
283 # directory is required for rpmlint's log file and its lack causes build error.
284 %if "%{?chromium_efl_tizen_version}%{!?chromium_efl_tizen_version:0}" == "3.0"
285 if [ ! -d %{buildroot}/../../OTHER/ -a -f /opt/testing/bin/rpmlint ]; then
286    mkdir -p %{buildroot}/../../OTHER/
287 fi
288 %endif
289
290 ###### end of block copied/adapted from chromium-efl.spec
291
292 %install
293 # Binaries.
294 install -m 0755 -p -D %{OUTPUT_FOLDER}/xwalk %{buildroot}%{_libdir}/xwalk/xwalk
295 install -m 0755 -p -D %{OUTPUT_FOLDER}/xwalk_backend %{buildroot}%{_libdir}/xwalk/xwalk_backend
296
297 %define CHROMIUM_EFL_LIBS_INSTALL_FOLDER chromium-efl-libs
298
299 # Supporting libraries and resources.
300 install -m 0644 -p -D %{OUTPUT_FOLDER}/lib/libxwalk_backend_lib.so %{buildroot}%{_libdir}/%{CHROMIUM_EFL_LIBS_INSTALL_FOLDER}/lib/libxwalk_backend_lib.so
301 install -m 0644 -p -D %{OUTPUT_FOLDER}/xwalk.pak %{buildroot}%{_libdir}/xwalk/xwalk.pak
302 install -d %{buildroot}%{_datadir}/xwalk
303 install -m 0644 -p -D xwalk/application/common/tizen/configuration/*.xsd %{buildroot}%{_datadir}/xwalk
304
305 # Register xwalk to the package manager.
306 install -m 0644 -p -D %{XWALK_GEN}/crosswalk.xml %{buildroot}%{_manifestdir}/crosswalk.xml
307 install -m 0644 -p -D %{XWALK_GEN}/crosswalk.png %{buildroot}%{_desktop_icondir}/crosswalk.png
308
309 %post
310 mkdir -p %{_desktop_icondir_ro}
311 mkdir -p %{_manifestdir_ro}
312
313 ln -sf %{_libdir}/%{CHROMIUM_EFL_LIBS_INSTALL_FOLDER}/lib/libxwalk_backend_lib.so /etc/package-manager/backendlib/libxpk.so
314 ln -sf %{_libdir}/%{CHROMIUM_EFL_LIBS_INSTALL_FOLDER}/lib/libxwalk_backend_lib.so /etc/package-manager/backendlib/libwgt.so
315 ln -sf %{_libdir}/xwalk/xwalk_backend /etc/package-manager/backend/xpk
316 ln -sf %{_libdir}/xwalk/xwalk_backend /etc/package-manager/backend/wgt
317
318 %preun
319 if [ $1 -eq 0 ] ; then
320  # don't remove if we are upgrade the rpm package
321 [ -L /etc/package-manager/backendlib/libxpk.so ] && rm /etc/package-manager/backendlib/libxpk.so
322 [ -L /etc/package-manager/backendlib/libwgt.so ] && rm /etc/package-manager/backendlib/libwgt.so
323 [ -L /etc/package-manager/backend/xpk ] && rm /etc/package-manager/backend/xpk
324 [ -L /etc/package-manager/backend/wgt ] && rm /etc/package-manager/backend/wgt
325 fi
326
327 %files
328 %manifest %{XWALK_GEN}/crosswalk.manifest
329 %license %{XWALK_GEN}/AUTHORS.chromium %{XWALK_GEN}/LICENSE.chromium %{XWALK_GEN}/LICENSE.xwalk
330 %{_libdir}/%{CHROMIUM_EFL_LIBS_INSTALL_FOLDER}/lib/libxwalk_backend_lib.so
331 %{_libdir}/xwalk/xwalk
332 %{_libdir}/xwalk/xwalk.pak
333 %{_libdir}/xwalk/xwalk_backend
334 %{_manifestdir}/crosswalk.xml
335 %{_desktop_icondir}/crosswalk.png
336 %{_datadir}/xwalk/*