]>
Commit | Line | Data |
---|---|---|
1 | # | |
2 | # Conditional build: | |
3 | %bcond_without system_dconv # system double-conversion | |
4 | %bcond_without system_sqlite # system sqlite3 | |
5 | %bcond_without system_lz4 # system lz4 | |
6 | %bcond_without system_fastlz # system fastlz | |
7 | %bcond_with system_libafdt # system libafdt | |
8 | %bcond_without system_libzip # system libzip | |
9 | # cotire breaks sqlite3 on builders: https://github.com/facebook/hhvm/issues/4524 | |
10 | %bcond_with cotire # cotire (compile time reducer): Speed up the build by precompiling headers | |
11 | ||
12 | # TODO | |
13 | # - system xhp | |
14 | # - system proxygen | |
15 | # - system thrift | |
16 | ||
17 | # NOTES: | |
18 | # - hphp/runtime/base/runtime-option.cpp evalJitDefault enables jit if /.hhvm-jit exists (yes, in filesystem root) | |
19 | ||
20 | # must be in sync with source. extra check ensuring that it is so is done in %%build | |
21 | %define hhvm_api_version 20140829 | |
22 | # hphp/system/idl/constants.idl.json defines it as 5.6.99-hhvm, but use some saner value | |
23 | %define php_version 5.6.0 | |
24 | ||
25 | # git show HHVM-3.3.7 | |
26 | %define githash e0344cb6ab126e50e611332f03f447f586cc763a | |
27 | # these hashes are git submodules (be sure to check them on proper branch) | |
28 | # GIT_DIR=third-party/.git git log -1 | |
29 | %define thirdparty bf581f8 | |
30 | # GIT_DIR=third-party/folly/src/.git git log -1 | |
31 | %define folly 6e46d46 | |
32 | Summary: Virtual Machine, Runtime, and JIT for PHP | |
33 | Name: hhvm | |
34 | # we prefer LTS versions | |
35 | # see http://hhvm.com/blog/6083/hhvm-long-term-support | |
36 | Version: 3.3.7 | |
37 | Release: 13 | |
38 | License: PHP 3.01 and BSD | |
39 | Group: Development/Languages | |
40 | Source0: https://github.com/facebook/hhvm/archive/HHVM-%{version}.tar.gz | |
41 | # Source0-md5: 8df12eef8702515498d6a6caab6e4b7d | |
42 | Source2: https://github.com/facebook/folly/archive/%{folly}/folly-3.2-%{folly}.tar.gz | |
43 | # Source2-md5: c4bdbea4c0ffe0650d12d9ff370b8255 | |
44 | Source3: https://github.com/hhvm/hhvm-third-party/archive/%{thirdparty}/third_party-%{thirdparty}.tar.gz | |
45 | # Source3-md5: 17210db0b2211c63d911076e02aab487 | |
46 | Source5: %{name}-fcgi.init | |
47 | Source6: %{name}-fcgi.sysconfig | |
48 | Source7: php.ini | |
49 | Source100: get-source.sh | |
50 | Patch1: no-debug.patch | |
51 | Patch2: hphpize.patch | |
52 | Patch3: MAX.patch | |
53 | Patch4: system-thirdparty.patch | |
54 | Patch5: cmake.patch | |
55 | Patch6: libvpx2.patch | |
56 | Patch7: gcc5.patch | |
57 | Patch8: cxx.patch | |
58 | Patch9: gcc6.patch | |
59 | Patch10: libevent-2.1.patch | |
60 | Patch11: icu59.patch | |
61 | URL: https://github.com/facebook/hhvm/wiki | |
62 | BuildRequires: ImageMagick-devel | |
63 | BuildRequires: a52dec-libs-devel | |
64 | BuildRequires: apr-devel | |
65 | BuildRequires: autoconf | |
66 | BuildRequires: binutils-devel | |
67 | # CMake/HPHPFindLibs.cmake:364 - FIND_LIBRARY (BFD_LIB libbfd.a) | |
68 | BuildRequires: binutils-static | |
69 | BuildRequires: boost-devel >= 1.50 | |
70 | BuildRequires: cmake >= 2.8.5 | |
71 | BuildRequires: curl-devel >= 7.29.0 | |
72 | %{?with_system_dconv:BuildRequires: double-conversion-devel >= 1.1.1} | |
73 | BuildRequires: elfutils-devel | |
74 | BuildRequires: expat-devel | |
75 | %{?with_system_fastlz:BuildRequires: fastlz-devel >= 0.1.0-0.r12} | |
76 | BuildRequires: gcc >= 6:4.6.0 | |
77 | BuildRequires: gd-devel | |
78 | BuildRequires: glog-devel >= 0.3.2 | |
79 | BuildRequires: imap-devel >= 1:2007 | |
80 | #BuildRequires: jemalloc-devel >= 3.0.0 | |
81 | %{?with_system_libafdt:BuildRequires: libafdt-devel >= 0.1.0} | |
82 | BuildRequires: libcap-devel | |
83 | BuildRequires: libdwarf-devel >= 20130729 | |
84 | BuildRequires: libicu-devel >= 4.2 | |
85 | #BuildRequires: libmbfl-devel | |
86 | BuildRequires: libmcrypt-devel | |
87 | BuildRequires: libmemcached-devel >= 1.0.4 | |
88 | BuildRequires: libstdc++-devel >= 6:4.8 | |
89 | BuildRequires: libunwind-devel | |
90 | BuildRequires: libxml2-devel | |
91 | BuildRequires: libxslt-devel | |
92 | %{?with_system_libzip:BuildRequires: libzip-devel >= 0.11.2} | |
93 | %{?with_system_lz4:BuildRequires: lz4-devel >= 0.0-1.r119} | |
94 | BuildRequires: mysql-devel | |
95 | BuildRequires: ocaml-findlib | |
96 | BuildRequires: oniguruma-devel | |
97 | BuildRequires: openssl-devel | |
98 | BuildRequires: pcre-devel >= 8.32 | |
99 | #BuildRequires: php-xhp-devel >= 1.3.9-6 | |
100 | BuildRequires: readline-devel | |
101 | BuildRequires: rpmbuild(macros) >= 1.675 | |
102 | %{?with_system_sqlite:BuildRequires: sqlite3-devel >= 3.7.15.2} | |
103 | BuildRequires: tbb-devel >= 4.0.6000 | |
104 | BuildRequires: zlib-devel | |
105 | # check later, seem unused | |
106 | #BuildRequires: bison >= 2.3 | |
107 | #BuildRequires: flex >= 2.5.35 | |
108 | BuildRequires: libafdt-devel >= 0.1.0 | |
109 | #BuildRequires: re2c >= 0.13.0 | |
110 | BuildConflicts: ImageMagick6-devel | |
111 | Provides: %{name}(api) = %{hhvm_api_version} | |
112 | Provides: php(core) = %{php_version} | |
113 | # foreach (get_loaded_extensions() as $ext) printf("Provides:\tphp(%s)\n", strtolower($ext)); | |
114 | Provides: php(apc) | |
115 | Provides: php(bcmath) | |
116 | Provides: php(bz2) | |
117 | Provides: php(calendar) | |
118 | Provides: php(ctype) | |
119 | Provides: php(curl) | |
120 | Provides: php(date) | |
121 | Provides: php(debugger) | |
122 | Provides: php(dom) | |
123 | Provides: php(enum) | |
124 | Provides: php(exif) | |
125 | Provides: php(fb) | |
126 | Provides: php(fileinfo) | |
127 | Provides: php(filter) | |
128 | Provides: php(ftp) | |
129 | Provides: php(gd) | |
130 | Provides: php(gettext) | |
131 | Provides: php(gmp) | |
132 | Provides: php(hash) | |
133 | Provides: php(hh) | |
134 | Provides: php(hhvm.debugger) | |
135 | Provides: php(hhvm.ini) | |
136 | Provides: php(hotprofiler) | |
137 | Provides: php(iconv) | |
138 | Provides: php(idn) | |
139 | Provides: php(imagick) | |
140 | Provides: php(imap) | |
141 | Provides: php(intl) | |
142 | Provides: php(json) | |
143 | Provides: php(ldap) | |
144 | Provides: php(libxml) | |
145 | Provides: php(mail) | |
146 | Provides: php(mailparse) | |
147 | Provides: php(mbstring) | |
148 | Provides: php(mcrypt) | |
149 | Provides: php(memcache) | |
150 | Provides: php(memcached) | |
151 | Provides: php(mysql) | |
152 | Provides: php(mysqli) | |
153 | Provides: php(oauth) | |
154 | Provides: php(openssl) | |
155 | Provides: php(pcntl) | |
156 | Provides: php(pcre) | |
157 | Provides: php(pcre_zend_compat) | |
158 | Provides: php(pdo) | |
159 | Provides: php(pdo_mysql) | |
160 | Provides: php(pdo_sqlite) | |
161 | Provides: php(phar) | |
162 | Provides: php(posix) | |
163 | Provides: php(redis) | |
164 | Provides: php(reflection) | |
165 | Provides: php(server) | |
166 | Provides: php(session) | |
167 | Provides: php(simplexml) | |
168 | Provides: php(soap) | |
169 | Provides: php(sockets) | |
170 | Provides: php(spl) | |
171 | Provides: php(sqlite3) | |
172 | Provides: php(standard) | |
173 | Provides: php(standard_zend_compat) | |
174 | Provides: php(stream) | |
175 | Provides: php(sysvmsg) | |
176 | Provides: php(sysvsem) | |
177 | Provides: php(sysvshm) | |
178 | Provides: php(thread) | |
179 | Provides: php(thrift_protocol) | |
180 | Provides: php(tokenizer) | |
181 | Provides: php(url) | |
182 | Provides: php(wddx) | |
183 | Provides: php(xenon) | |
184 | Provides: php(xhprof) | |
185 | Provides: php(xml) | |
186 | Provides: php(xmlreader) | |
187 | Provides: php(xmlwriter) | |
188 | Provides: php(xsl) | |
189 | Provides: php(yaml) | |
190 | Provides: php(zip) | |
191 | Provides: php(zlib) | |
192 | Obsoletes: hiphop-php < 2.3.2-0.2 | |
193 | ExclusiveArch: %{x8664} | |
194 | BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) | |
195 | ||
196 | ||
197 | %define hhvm_extensiondir %{_libdir}/hhvm | |
198 | ||
199 | %description | |
200 | HHVM (aka the HipHop Virtual Machine) is a new open-source virtual | |
201 | machine designed for executing programs written in PHP. HHVM uses a | |
202 | just-in-time compilation approach to achieve superior performance | |
203 | while maintaining the flexibility that PHP developers are accustomed | |
204 | to. To date, HHVM (and its predecessor HPHPc before it) has realized | |
205 | over a 9x increase in web request throughput and over a 5x reduction | |
206 | in memory consumption for Facebook compared with the Zend PHP 5.2 | |
207 | engine + APC. | |
208 | ||
209 | HHVM can be run as a standalone webserver (i.e. without the Apache | |
210 | webserver and the "mod_php" extension). HHVM can also be used together | |
211 | with a FastCGI-based webserver, and work is in progress to make HHVM | |
212 | work smoothly with Apache. | |
213 | ||
214 | %package fcgi | |
215 | Summary: Init script to start HHVM as FastCGI daemon | |
216 | Group: Development/Languages/PHP | |
217 | Requires: %{name} = %{version}-%{release} | |
218 | Provides: php(fcgi) | |
219 | Requires(post,preun): /sbin/chkconfig | |
220 | Requires: rc-scripts | |
221 | ||
222 | %description fcgi | |
223 | Init script to start HHVM as FastCGI daemon | |
224 | ||
225 | %package program | |
226 | Summary: /usr/bin/php symlink | |
227 | Summary(pl.UTF-8): Dowiązanie symboliczne /usr/bin/php | |
228 | Group: Development/Languages/PHP | |
229 | Requires: %{name} = %{version}-%{release} | |
230 | Obsoletes: /usr/bin/php | |
231 | ||
232 | %description program | |
233 | Package providing /usr/bin/php symlink to PHP CLI. | |
234 | ||
235 | %description program -l pl.UTF-8 | |
236 | Pakiet dostarczający dowiązanie symboliczne /usr/bin/php do PHP CLI. | |
237 | ||
238 | %package devel | |
239 | Summary: Files for HHVM modules development | |
240 | Group: Development/Languages/PHP | |
241 | URL: https://github.com/facebook/hhvm/wiki/Extension-API | |
242 | Requires: boost-devel >= 1.50 | |
243 | Requires: cmake >= 2.8.5 | |
244 | Requires: glog-devel >= 0.3.2 | |
245 | Requires: libstdc++-devel >= 6:4.3 | |
246 | Requires: tbb-devel >= 4.0.6000 | |
247 | Requires: zlib-devel | |
248 | ||
249 | %description devel | |
250 | HHVM provides a set of APIs for adding built-in functionality to the | |
251 | runtime either by way of pure PHP code, or a combination of PHP and | |
252 | C++. | |
253 | ||
254 | %prep | |
255 | %setup -q -n %{name}-HHVM-%{version} -a2 -a3 | |
256 | ||
257 | # handle git submodules | |
258 | rmdir third-party | |
259 | mv hhvm-third-party-* third-party | |
260 | rmdir third-party/folly/src | |
261 | mv folly-* third-party/folly/src | |
262 | ||
263 | %patch1 -p1 | |
264 | %patch2 -p1 | |
265 | %patch3 -p1 | |
266 | %patch4 -p1 | |
267 | #%patch5 -p1 | |
268 | %patch6 -p1 | |
269 | %patch7 -p1 | |
270 | %patch8 -p1 | |
271 | %patch9 -p1 | |
272 | %patch10 -p1 | |
273 | %patch11 -p1 | |
274 | ||
275 | # prefer ones from system | |
276 | rm CMake/FindBISON.cmake | |
277 | rm CMake/FindFLEX.cmake | |
278 | rm CMake/FindFreetype.cmake | |
279 | ||
280 | # ensure system libs get used | |
281 | cd third-party | |
282 | rm -r pcre \ | |
283 | %{?with_system_sqlite:libsqlite3} \ | |
284 | %{?with_system_lz4:lz4} \ | |
285 | %{?with_system_dconv:double-conversion} \ | |
286 | %{?with_system_fastlz:fastlz} \ | |
287 | %{?with_system_libafdt:libafdt} \ | |
288 | %{?with_system_libzip:libzip} \ | |
289 | %{nil} | |
290 | ||
291 | %build | |
292 | # also in: hphp/tools/hphpize/hphpize.cmake | |
293 | API=$(awk '/#define HHVM_API_VERSION/{v=$3; sub(/L$/, "", v); print v}' hphp/runtime/ext/extension.h) | |
294 | ||
295 | if [ $API != %{hhvm_api_version} ]; then | |
296 | echo "Set %%define hhvm_api_version to $API and re-run." | |
297 | exit 1 | |
298 | fi | |
299 | ||
300 | export CXXFLAGS="%{rpmcxxflags} -fpermissive -I/usr/include/lz4" | |
301 | ||
302 | # out of dir build broken (can't find it's tools, or headers) | |
303 | #install -d build | |
304 | #cd build | |
305 | ||
306 | # handle cmake & ccache | |
307 | # http://stackoverflow.com/questions/1815688/how-to-use-ccache-with-cmake | |
308 | # ASM fix: http://lists.busybox.net/pipermail/buildroot/2013-March/069436.html | |
309 | if [[ "%{__cc}" = *ccache* ]]; then | |
310 | cc="%{__cc}" | |
311 | cxx="%{__cxx}" | |
312 | ccache=" | |
313 | -DCMAKE_C_COMPILER="ccache" -DCMAKE_C_COMPILER_ARG1="${cc#ccache }" \ | |
314 | -DCMAKE_CXX_COMPILER="ccache" -DCMAKE_CXX_COMPILER_ARG1="${cxx#ccache }" \ | |
315 | -DCMAKE_ASM_COMPILER="${cc#ccache }" \ | |
316 | " | |
317 | fi | |
318 | ||
319 | %cmake \ | |
320 | $ccache \ | |
321 | -DCMAKE_PREFIX_PATH=%{_prefix} \ | |
322 | -DHHVM_DYNAMIC_EXTENSION_DIR=%{hhvm_extensiondir} \ | |
323 | -DUSE_JEMALLOC=OFF \ | |
324 | -DUSE_TCMALLOC=OFF \ | |
325 | -DTEST_BIN=OFF \ | |
326 | -DENABLE_COTIRE=%{!?with_cotire:OFF}%{?with_cotire:ON} \ | |
327 | . | |
328 | ||
329 | # setup COMPILER_ID/HHVM_REPO_SCHEMA so it doesn't look it up from our package git repo | |
330 | # see hphp/util/generate-buildinfo.sh | |
331 | export COMPILER_ID=HHVM-%{version}-%{release}-g%{githash} | |
332 | export HHVM_REPO_SCHEMA=$(date +%N_%s) | |
333 | ||
334 | %{__make} | |
335 | ||
336 | %install | |
337 | # make install relinks all outputs which is very slow, | |
338 | # so to speedup rebuild, use timestamps to record states | |
339 | #test %{_specdir}/%{name}.spec -nt makeinstall.stamp && %{__rm} -f makeinstall.stamp | |
340 | if [ ! -f makeinstall.stamp -o ! -d $RPM_BUILD_ROOT ]; then | |
341 | rm -rf makeinstall.stamp installed.stamp $RPM_BUILD_ROOT | |
342 | ||
343 | %{__make} install \ | |
344 | DESTDIR=$RPM_BUILD_ROOT | |
345 | ||
346 | touch makeinstall.stamp | |
347 | fi | |
348 | ||
349 | rm -rf $RPM_BUILD_ROOT%{_docdir} | |
350 | if [ ! -f installed.stamp ]; then | |
351 | # begin install block | |
352 | ||
353 | # fix broken cmake rules | |
354 | # TODO: fix cmake rules | |
355 | if [ -d $RPM_BUILD_ROOT%{_prefix}/usr ]; then | |
356 | cp -a $RPM_BUILD_ROOT%{_prefix}/usr/* $RPM_BUILD_ROOT%{_prefix} | |
357 | rm -rf $RPM_BUILD_ROOT%{_prefix}/usr | |
358 | fi | |
359 | ||
360 | install -d $RPM_BUILD_ROOT{%{_sysconfdir}/%{name},%{_libdir}/%{name}} | |
361 | cp -p %{SOURCE7} $RPM_BUILD_ROOT%{_sysconfdir}/%{name} | |
362 | ||
363 | ln -s hhvm $RPM_BUILD_ROOT%{_bindir}/php | |
364 | ln -s hhvm $RPM_BUILD_ROOT%{_bindir}/hphp | |
365 | ||
366 | install -d $RPM_BUILD_ROOT%{_datadir}/%{name}/hdf | |
367 | cp -p hphp/doc/mime.hdf $RPM_BUILD_ROOT%{_datadir}/%{name}/hdf/static.mime-types.hdf | |
368 | ||
369 | # install fastcgi initscript | |
370 | install -d $RPM_BUILD_ROOT/etc/{sysconfig,rc.d/init.d} | |
371 | cp -p %{SOURCE5} $RPM_BUILD_ROOT/etc/rc.d/init.d/%{name}-fcgi | |
372 | cp -p %{SOURCE6} $RPM_BUILD_ROOT/etc/sysconfig/%{name}-fcgi | |
373 | ||
374 | install -p hphp/hack/bin/hh_{server,client} $RPM_BUILD_ROOT%{_bindir} | |
375 | ||
376 | # end of install block | |
377 | touch installed.stamp; fi | |
378 | ||
379 | %clean | |
380 | rm -rf $RPM_BUILD_ROOT | |
381 | ||
382 | %post -p /sbin/ldconfig | |
383 | %postun -p /sbin/ldconfig | |
384 | ||
385 | %post fcgi | |
386 | /sbin/chkconfig --add %{name}-fcgi | |
387 | %service %{name}-fcgi restart | |
388 | ||
389 | %preun fcgi | |
390 | if [ "$1" = "0" ]; then | |
391 | %service -q %{name}-fcgi stop | |
392 | /sbin/chkconfig --del %{name}-fcgi | |
393 | fi | |
394 | ||
395 | %files | |
396 | %defattr(644,root,root,755) | |
397 | %doc README.md hphp/NEWS | |
398 | %dir %{_sysconfdir}/%{name} | |
399 | %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/php.ini | |
400 | %attr(755,root,root) %{_bindir}/hhvm | |
401 | %attr(755,root,root) %{_bindir}/hphp | |
402 | %attr(755,root,root) %{_bindir}/hh_client | |
403 | %attr(755,root,root) %{_bindir}/hh_server | |
404 | ||
405 | %dir %{_datadir}/%{name} | |
406 | %dir %{_datadir}/%{name}/hdf | |
407 | %{_datadir}/%{name}/hdf/static.mime-types.hdf | |
408 | ||
409 | # dir for extensions | |
410 | %dir %{_libdir}/%{name} | |
411 | ||
412 | %files fcgi | |
413 | %defattr(644,root,root,755) | |
414 | %attr(754,root,root) /etc/rc.d/init.d/%{name}-fcgi | |
415 | %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/%{name}-fcgi | |
416 | ||
417 | %files program | |
418 | %defattr(644,root,root,755) | |
419 | %attr(755,root,root) %{_bindir}/php | |
420 | ||
421 | %files devel | |
422 | %defattr(644,root,root,755) | |
423 | %attr(755,root,root) %{_bindir}/hphpize | |
424 | %{_includedir}/hphp | |
425 | %dir %{_libdir}/hhvm | |
426 | %{_libdir}/hhvm/CMake | |
427 | %{_libdir}/hhvm/hphpize |