[Tizen][dev] Fix TV build
[platform/framework/web/chromium-efl.git] / tizen_src / packaging / chromium-efl.spec
1 %if 0%{?nodebug}
2 %global __debug_install_post %{nil}
3 %global debug_package %{nil}
4 %endif
5
6 %if 0%{?_enable_unittests}
7 %define _debug_mode 1
8 %endif
9
10 Name: org.tizen.chromium-efl
11 Summary: Chromium EFL
12 # Set by by scripts/update-chromium-version.sh
13 %define ChromiumVersion 39.2150.0
14 %define Week 34
15 Version: %{ChromiumVersion}.%{Week}
16 Release: 1
17 Group: Applications/Internet
18 License: LGPLv2.1 or BSD
19
20 Source0: %{name}-%{version}.tar.gz
21
22 Requires(post): /sbin/ldconfig
23 Requires(post): xkeyboard-config
24 Requires(postun): /sbin/ldconfig
25 BuildRequires: which, vi, python, python-xml, bison, flex, gperf, gettext, perl, edje-bin
26 BuildRequires: libjpeg-turbo-devel, expat-devel, libhaptic, libcap-devel
27 BuildRequires: pkgconfig(glesv2)
28 BuildRequires: pkgconfig(libpulse)
29 BuildRequires: pkgconfig(recordproto)
30 BuildRequires: pkgconfig(nss)
31 BuildRequires: pkgconfig(gconf-2.0)
32 BuildRequires: pkgconfig(libpci)
33 BuildRequires: pkgconfig(pangocairo)
34 BuildRequires: pkgconfig(libudev)
35 BuildRequires: pkgconfig(fontconfig)
36 BuildRequires: pkgconfig(freetype2)
37 BuildRequires: pkgconfig(glib-2.0)
38 BuildRequires: pkgconfig(harfbuzz)
39 BuildRequires: pkgconfig(icu-i18n)
40 BuildRequires: pkgconfig(openssl)
41 BuildRequires: pkgconfig(libxml-2.0)
42 BuildRequires: pkgconfig(libxslt)
43 BuildRequires: pkgconfig(sqlite3)
44 BuildRequires: pkgconfig(capi-appfw-application)
45 BuildRequires: pkgconfig(capi-system-sensor)
46 BuildRequires: pkgconfig(capi-system-info)
47 BuildRequires: pkgconfig(capi-system-device)
48 BuildRequires: pkgconfig(capi-location-manager)
49 BuildRequires: pkgconfig(location)
50 BuildRequires: pkgconfig(gles20)
51 BuildRequires: pkgconfig(libpng12)
52 BuildRequires: pkgconfig(libusb-1.0)
53 BuildRequires: pkgconfig(speex)
54 BuildRequires: pkgconfig(flac)
55 BuildRequires: pkgconfig(minizip)
56 BuildRequires: pkgconfig(xrandr)
57 BuildRequires: pkgconfig(xcomposite)
58 BuildRequires: pkgconfig(xext)
59 BuildRequires: pkgconfig(xi)
60 BuildRequires: pkgconfig(xt)
61 BuildRequires: pkgconfig(xfixes)
62 BuildRequires: pkgconfig(xtst)
63 BuildRequires: pkgconfig(xdamage)
64 BuildRequires: pkgconfig(xcursor)
65 BuildRequires: pkgconfig(libdrm)
66 BuildRequires: pkgconfig(ecore)
67 BuildRequires: pkgconfig(evas)
68 BuildRequires: pkgconfig(ecore-x)
69 BuildRequires: pkgconfig(ecore-evas)
70 BuildRequires: pkgconfig(ecore-input)
71 BuildRequires: pkgconfig(ecore-imf-evas)
72 BuildRequires: pkgconfig(elementary)
73 BuildRequires: pkgconfig(ui-gadget-1)
74 BuildRequires: pkgconfig(libexif)
75 BuildRequires: pkgconfig(nspr)
76 BuildRequires: pkgconfig(zlib)
77 %if %{!?TIZEN_PROFILE_TV:1}%{?TIZEN_PROFILE_TV:0}
78 BuildRequires: bzip2-devel
79 BuildRequires: pkgconfig(vpx)
80 BuildRequires: pkgconfig(efl-assist)
81 BuildRequires: pkgconfig(capi-network-connection)
82 BuildRequires: pkgconfig(capi-telephony-network-info)
83 %endif
84 BuildRequires: pkgconfig(gstreamer-0.10)
85 BuildRequires: pkgconfig(gstreamer-plugins-base-0.10)
86 BuildRequires: pkgconfig(gstreamer-app-0.10)
87 BuildRequires: pkgconfig(capi-media-camera)
88 BuildRequires: pkgconfig(capi-media-audio-io)
89 BuildRequires: pkgconfig(vconf)
90 BuildRequires: pkgconfig(libdri2)
91 BuildRequires: pkgconfig(libtbm)
92 BuildRequires: pkgconfig(x11)
93 BuildRequires: pkgconfig(feedback)
94
95 %description
96 Browser Engine based on Chromium EFL (Shared Library)
97
98 %package devel
99 Summary: Chromium EFL
100 Group: Development/Libraries
101 Requires: %{name} = %{version}-%{release}
102 %description devel
103 Browser Engine dev library based on Chromium EFL (developement files)
104
105 %if 0%{?_enable_unittests}
106 %package unittests
107 Summary: Chromium unittests
108 Group: Development/Libraries
109 Requires: %{name} = %{version}-%{release}
110 %description unittests
111 Chromium unite tests
112 %endif
113
114 # Directory for internal chromium executable components
115 %global CHROMIUM_EXE_DIR %{_libdir}/%{name}
116 # Constant read only data used by chromium-efl port
117 %global CHROMIUM_DATA_DIR %{_datadir}/%{name}
118 # Web Databse read write data used by chromium-efl port
119 %global CHROMIUM_WEBDB_DIR /opt/usr/apps/%{name}
120 # Chromium unit tests install directory
121 %global CHROMIUM_UNITTESTS_DIR /opt/usr/chromium-unittests/
122
123 %prep
124 %setup -q
125
126 %build
127
128 # workaround for new nss library : search it in /usr/lib first, rather than /lib (system nss)
129 export LD_RUN_PATH=%{_libdir}
130 #/usr/lib
131
132 # architecture related configuration + neon temporary workaround
133 %ifarch %{arm}
134   export CFLAGS="$(echo $CFLAGS | sed 's/-mfpu=[a-zA-Z0-9-]*/-mfpu=neon/g')"
135   export CXXFLAGS="$(echo $CXXFLAGS | sed 's/-mfpu=[a-zA-Z0-9-]*/-mfpu=neon/g')"
136   export FFLAGS="$(echo $FFLAGS | sed 's/-mfpu=[a-zA-Z0-9-]*/-mfpu=neon/g')"
137   %define EFL_TARGET arm
138 %else
139   export CFLAGS="$(echo $CFLAGS | sed 's/-Wl,--as-needed//g')"
140   export CXXFLAGS="$(echo $CXXFLAGS | sed 's/-Wl,--as-needed//g')"
141   %if 0%{?simulator}
142     %define EFL_TARGET emulator
143   %else
144     %define EFL_TARGET i386
145   %endif
146 %endif
147
148 %if 0%{?nodebug}
149   CFLAGS=$(echo $CFLAGS | sed 's/ -g / /')
150   CXXFLAGS=$(echo $CXXFLAGS | sed 's/ -g / /')
151 %endif
152
153 %if %{!?TIZEN_PROFILE_TV:1}%{?TIZEN_PROFILE_TV:0}
154   %define OUTPUT_BUILD_PROFILE_TARGET mobile
155 %else
156   %define OUTPUT_BUILD_PROFILE_TARGET tv
157 %endif
158
159 %define OUTPUT_BASE_FOLDER out.%{OUTPUT_BUILD_PROFILE_TARGET}.%{EFL_TARGET}
160
161 #set build mode
162 %if 0%{?_debug_mode}
163   %global OUTPUT_FOLDER %{OUTPUT_BASE_FOLDER}/Debug
164 %else
165   %global OUTPUT_FOLDER %{OUTPUT_BASE_FOLDER}/Release
166 %endif
167
168 # Building the RPM in the GBS chroot fails with errors such as
169 #   /usr/lib/gcc/i586-tizen-linux/4.7/../../../../i586-tizen-linux/bin/ld:
170 #       failed to set dynamic section sizes: Memory exhausted
171 # For now, work around it by passing a GNU ld-specific flag that optimizes the
172 # linker for memory usage. See bugs:
173 #   - http://107.108.218.239/bugzilla/show_bug.cgi?id=6457
174 #   - http://107.108.218.239/bugzilla/show_bug.cgi?id=6629
175 export LDFLAGS="${LDFLAGS} -Wl,--no-keep-memory"
176
177 if type ccache &> /dev/null; then
178   source build/ccache_env.sh %{OUTPUT_BUILD_PROFILE_TARGET}
179 fi
180
181 #gyp generate
182 %if %{?_skip_gyp:0}%{!?_skip_gyp:1}
183 #run standard gyp_chromiumefl wrapper
184    ./build/gyp_chromiumefl.sh \
185   -Dexe_dir="%{CHROMIUM_EXE_DIR}" \
186   -Ddata_dir="%{CHROMIUM_DATA_DIR}" \
187   -Dedje_dir="%{CHROMIUM_DATA_DIR}"/themes \
188 %if 0%{?_remove_webcore_debug_symbols:1}
189   -Dremove_webcore_debug_symbols=1 \
190 %endif
191 %if 0%{?chromium_efl_tizen_version:1}
192   -Dchromium_efl_tizen_version=%{chromium_efl_tizen_version} \
193 %endif
194   -Dwebdb_dir="%{CHROMIUM_WEBDB_DIR}"/data/db \
195   -Dbuilding_for_tizen_"%{OUTPUT_BUILD_PROFILE_TARGET}"=1
196 %endif
197
198 build/prebuild/ninja %{_smp_mflags} -C"%{OUTPUT_FOLDER}"
199
200 %if 0%{?_enable_unittests}
201 ninja %{_smp_mflags} -C"%{OUTPUT_FOLDER}" angle_unittests env_chromium_unittests cacheinvalidation_unittests \
202   url_unittests sandbox_linux_unittests crypto_unittests sql_unittests accessibility_unittests \
203   gfx_unittests printing_unittests events_unittests ppapi_unittests jingle_unittests \
204   flip_in_mem_edsm_server_unittests breakpad_unittests dbus_unittests libphonenumber_unittests \
205   base_unittests ffmpeg_unittests gin_unittests net_unittests snapshot_unittests \
206   google_apis_unittests
207 # TODO: Fix compilation of the following tests content_unittests cc_unittests shell_dialogs_unittests
208 # gpu_unittests compositor_unittests media_unittests
209 %endif
210
211 %install
212 install -d "%{buildroot}"%{_sysconfdir}/smack/accesses2.d
213 install -d "%{buildroot}"%{_libdir}/pkgconfig
214 install -d "%{buildroot}"%{_includedir}/v8
215 install -d "%{buildroot}%{CHROMIUM_EXE_DIR}"
216 install -d "%{buildroot}%{CHROMIUM_DATA_DIR}"/themes
217
218 install -m 0755 "%{OUTPUT_FOLDER}"/lib/libchromium-efl.so    "%{buildroot}"%{_libdir}
219
220 install -m 0755 "%{OUTPUT_FOLDER}"/libffmpegsumo.so  "%{buildroot}%{CHROMIUM_EXE_DIR}"
221 install -m 0755 "%{OUTPUT_FOLDER}"/efl_webprocess    "%{buildroot}%{CHROMIUM_EXE_DIR}"
222 install -m 0755 "%{OUTPUT_FOLDER}"/content_shell.pak "%{buildroot}%{CHROMIUM_EXE_DIR}"
223 install -m 0644 "%{OUTPUT_FOLDER}"/resources/*.edj   "%{buildroot}%{CHROMIUM_DATA_DIR}"/themes
224
225 install -m 0644 "%{OUTPUT_FOLDER}"/pkgconfig/*.pc    "%{buildroot}"%{_libdir}/pkgconfig/
226 install -m 0644 src/v8/include/*.h                   "%{buildroot}"%{_includedir}/v8/
227
228 %if 0%{?_enable_unittests}
229 install -d "%{INSTALL_ROOT}%{CHROMIUM_UNITTESTS_DIR}"
230 for test in "%{OUTPUT_FOLDER}/*_unittests"; do
231   install -m 0755 ${test} "%{INSTALL_ROOT}%{CHROMIUM_UNITTESTS_DIR}"
232 done
233 %endif
234
235 %post
236 # apply smack rule
237 smack_reload.sh
238
239 # create webdatabase directory
240 mkdir -p %{CHROMIUM_WEBDB_DIR}/data/db/
241
242 # create dummy webdatabase
243 if [ ! -f %{CHROMIUM_WEBDB_DIR}/data/db/FormData.db ];
244 then
245     sqlite3 %{CHROMIUM_WEBDB_DIR}/data/db/FormData.db 'PRAGMA journal_mode=PERSIST;
246     create table dummy_table(id integer primary key);'
247 fi
248 if [ ! -f %{CHROMIUM_WEBDB_DIR}/data/db/LoginData.db ];
249 then
250     sqlite3 %{CHROMIUM_WEBDB_DIR}/data/db/LoginData.db 'PRAGMA journal_mode=PERSIST;
251     create table dummy_table(id integer primary key);'
252 fi
253
254 # change db file owner & permission
255 chmod 660 %{CHROMIUM_WEBDB_DIR}/data/db/FormData.db
256 chmod 660 %{CHROMIUM_WEBDB_DIR}/data/db/FormData.db-journal
257 chmod 660 %{CHROMIUM_WEBDB_DIR}/data/db/LoginData.db
258 chmod 660 %{CHROMIUM_WEBDB_DIR}/data/db/LoginData.db-journal
259
260 chown -R 5000:5000 %{CHROMIUM_WEBDB_DIR}/
261
262 # Apply SMACK label to database files
263 if [ -f /usr/lib/rpm-plugins/msm.so ]
264 then
265     chsmack -a 'chromium-efl' %{CHROMIUM_WEBDB_DIR}/data/db/*.db*
266 fi
267
268 %postun
269
270 %files
271 %manifest packaging/%{name}.manifest
272 %defattr(-,root,root,-)
273 %{_libdir}/libchromium-efl.so
274 %{CHROMIUM_EXE_DIR}/efl_webprocess
275 %{CHROMIUM_EXE_DIR}/libffmpegsumo.so
276 %{CHROMIUM_EXE_DIR}/content_shell.pak
277 %{CHROMIUM_DATA_DIR}/themes/*.edj
278
279 %files devel
280 %defattr(-,root,root,-)
281 %{_includedir}/v8/*
282 %{_libdir}/pkgconfig/*.pc
283
284 %if 0%{?_enable_unittests}
285 %files unittests
286 %defattr(-,root,root,-)
287 %{CHROMIUM_UNITTESTS_DIR}/*
288 %endif