2 # - hphp/runtime/base/runtime-option.cpp evalJitDefault enables jit if /.hhvm-jit exists (yes, in filesystem root)
3 # - patch /usr/lib/hphp/CMake/HPHPIZEFunctions.cmake for %{_libdir}/hhvm as extension dir
5 # - system libmbfl, system xhp, sqlite3
7 %define githash 01228273b8cf709aacbd3df1c51b1e690ecebac8
9 %define thirdparty 2234d64
10 Summary: Virtual Machine, Runtime, and JIT for PHP
15 Group: Development/Languages
16 Source0: https://github.com/facebook/hhvm/archive/HHVM-%{version}.tar.gz
17 # Source0-md5: 791ca8c56d155a71f948387de8859f98
18 Source2: https://github.com/facebook/folly/archive/%{folly}/folly-0.1-%{folly}.tar.gz
19 # Source2-md5: 17bc7ee76939cd6a26755588d80313c9
20 Source3: https://github.com/hhvm/hhvm-third-party/archive/%{thirdparty}/third_party-%{thirdparty}.tar.gz
21 # Source3-md5: 9d40c3fbf1394bb1f03648d7046f8b9c
22 Source4: %{name}-fcgi.init
23 Source5: %{name}-fcgi.sysconfig
25 Source100: get-source.sh
27 Patch1: no-debug.patch
29 URL: https://github.com/facebook/hhvm/wiki
30 BuildRequires: ImageMagick-devel
31 BuildRequires: a52dec-libs-devel
32 BuildRequires: apr-devel
33 BuildRequires: autoconf
34 BuildRequires: binutils-devel
35 BuildRequires: boost-devel >= 1.50
36 BuildRequires: cmake >= 2.8.5
37 BuildRequires: curl-devel >= 7.29.0
38 BuildRequires: elfutils-devel
39 BuildRequires: expat-devel
40 BuildRequires: gcc >= 6:4.6.0
41 BuildRequires: gd-devel
42 BuildRequires: glog-devel >= 0.3.2
43 BuildRequires: imap-devel >= 1:2007
44 #BuildRequires: jemalloc-devel >= 3.0.0
45 BuildRequires: libcap-devel
46 BuildRequires: libdwarf-devel >= 20130729
47 BuildRequires: libicu-devel >= 4.2
48 #BuildRequires: libmbfl-devel
49 BuildRequires: libmcrypt-devel
50 BuildRequires: libmemcached-devel >= 1.0.4
51 BuildRequires: libstdc++-devel >= 6:4.8
52 BuildRequires: libunwind-devel
53 BuildRequires: libxml2-devel
54 BuildRequires: libxslt-devel
55 BuildRequires: mysql-devel
56 BuildRequires: ocaml-findlib
57 BuildRequires: oniguruma-devel
58 BuildRequires: openssl-devel
59 BuildRequires: pcre-devel
60 #BuildRequires: php-xhp-devel >= 1.3.9-6
61 BuildRequires: readline-devel
62 BuildRequires: rpmbuild(macros) >= 1.675
63 BuildRequires: tbb-devel >= 4.0.6000
64 BuildRequires: zlib-devel
65 # check later, seem unused
66 #BuildRequires: bison >= 2.3
67 #BuildRequires: flex >= 2.5.35
68 #BuildRequires: libafdt-devel >= 0.1.0
69 #BuildRequires: re2c >= 0.13.0
70 # foreach (get_loaded_extensions() as $ext) printf("Provides:\tphp(%s)\n", strtolower($ext));
71 Provides: %{name}(api) = %{hhvm_api_version}
76 Provides: php(calendar)
77 Provides: php(core) = %{php_version}
81 Provides: php(debugger)
85 Provides: php(fileinfo)
89 Provides: php(gettext)
92 Provides: php(hhvm.debugger)
93 Provides: php(hhvm.ini)
94 Provides: php(hotprofiler)
97 Provides: php(imagick)
102 Provides: php(libxml)
103 Provides: php(mbstring)
104 Provides: php(mcrypt)
105 Provides: php(memcache)
106 Provides: php(memcached)
109 Provides: php(mysqli)
111 Provides: php(openssl)
114 Provides: php(pcre_zend_compat)
116 Provides: php(pdo_mysql)
117 Provides: php(pdo_sqlite)
121 Provides: php(reflection)
122 Provides: php(server)
123 Provides: php(session)
124 Provides: php(simplexml)
126 Provides: php(sockets)
128 Provides: php(sqlite3)
129 Provides: php(standard)
130 Provides: php(standard_zend_compat)
131 Provides: php(stream)
132 Provides: php(sysvmsg)
133 Provides: php(sysvsem)
134 Provides: php(sysvshm)
135 Provides: php(thread)
136 Provides: php(thrift_protocol)
137 Provides: php(tokenizer)
141 Provides: php(xhprof)
143 Provides: php(xmlreader)
144 Provides: php(xmlwriter)
149 Obsoletes: hiphop-php < 2.3.2-0.2
150 ExclusiveArch: %{x8664}
151 BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
153 # must be in sync with source. extra check ensuring that it is so is done in %%build
154 %define hhvm_api_version 20140702
155 # hphp/system/idl/constants.idl.json defines it as 5.6.99-hhvm, but use some saner value
156 %define php_version 5.6.0
159 HHVM (aka the HipHop Virtual Machine) is a new open-source virtual
160 machine designed for executing programs written in PHP. HHVM uses a
161 just-in-time compilation approach to achieve superior performance
162 while maintaining the flexibility that PHP developers are accustomed
163 to. To date, HHVM (and its predecessor HPHPc before it) has realized
164 over a 9x increase in web request throughput and over a 5x reduction
165 in memory consumption for Facebook compared with the Zend PHP 5.2
168 HHVM can be run as a standalone webserver (i.e. without the Apache
169 webserver and the "mod_php" extension). HHVM can also be used together
170 with a FastCGI-based webserver, and work is in progress to make HHVM
171 work smoothly with Apache.
174 Summary: Init script to start HHVM as FastCGI daemon
175 Group: Development/Languages/PHP
176 Requires: %{name} = %{version}-%{release}
178 Requires(post,preun): /sbin/chkconfig
182 Init script to start HHVM as FastCGI daemon
185 Summary: /usr/bin/php symlink
186 Summary(pl.UTF-8): Dowiązanie symboliczne /usr/bin/php
187 Group: Development/Languages/PHP
188 Requires: %{name} = %{version}-%{release}
189 Obsoletes: /usr/bin/php
192 Package providing /usr/bin/php symlink to PHP CLI.
194 %description program -l pl.UTF-8
195 Pakiet dostarczający dowiązanie symboliczne /usr/bin/php do PHP CLI.
198 Summary: Files for HHVM modules development
199 Group: Development/Languages/PHP
200 URL: https://github.com/facebook/hhvm/wiki/Extension-API
201 Requires: boost-devel >= 1.50
202 Requires: cmake >= 2.8.5
203 Requires: glog-devel >= 0.3.2
204 Requires: libstdc++-devel >= 6:4.3
205 Requires: tbb-devel >= 4.0.6000
209 HHVM provides a set of APIs for adding built-in functionality to the
210 runtime either by way of pure PHP code, or a combination of PHP and
214 %setup -q -n %{name}-HHVM-%{version} -a2 -a3
216 # handle git submodules
218 mv hhvm-third-party-* third-party
219 rmdir third-party/folly/src
220 mv folly-* third-party/folly/src
226 # prefer ones from system
227 rm CMake/FindBISON.cmake
228 rm CMake/FindFLEX.cmake
229 rm CMake/FindFreetype.cmake
232 # also in: hphp/tools/hphpize/hphpize.cmake
233 API=$(awk '/#define HHVM_API_VERSION/{v=$3; sub(/L$/, "", v); print v}' hphp/runtime/ext/extension.h)
235 if [ $API != %{hhvm_api_version} ]; then
236 echo "Set %%define hhvm_api_version to $API and re-run."
240 # out of dir build broken (can't find it's tools)
244 # handle cmake & ccache
245 # http://stackoverflow.com/questions/1815688/how-to-use-ccache-with-cmakec
246 # ASM fix: http://lists.busybox.net/pipermail/buildroot/2013-March/069436.html
247 if [[ "%{__cc}" = *ccache* ]]; then
251 -DCMAKE_C_COMPILER="ccache" -DCMAKE_C_COMPILER_ARG1="${cc#ccache }" \
252 -DCMAKE_CXX_COMPILER="ccache" -DCMAKE_CXX_COMPILER_ARG1="${cxx#ccache }" \
253 -DCMAKE_ASM_COMPILER="${cc#ccache }" \
259 -DCMAKE_PREFIX_PATH=%{_prefix} \
267 # setup COMPILER_ID/HHVM_REPO_SCHEMA so it doesn't look it up from our package git repo
268 # see hphp/util/generate-buildinfo.sh
269 export COMPILER_ID=HHVM-%{version}-%{release}-g%{githash}
270 export HHVM_REPO_SCHEMA=$(date +%N_%s)
275 # make install relinks all outputs which is very slow,
276 # so to speedup rebuild, use timestamps to record states
277 #test %{_specdir}/%{name}.spec -nt makeinstall.stamp && %{__rm} -f makeinstall.stamp
278 if [ ! -f makeinstall.stamp -o ! -d $RPM_BUILD_ROOT ]; then
279 rm -rf makeinstall.stamp installed.stamp $RPM_BUILD_ROOT
281 %{__make} install -C build \
283 DESTDIR=$RPM_BUILD_ROOT
285 touch makeinstall.stamp
288 rm -rf $RPM_BUILD_ROOT%{_docdir}
289 if [ ! -f installed.stamp ]; then
290 # begin install block
292 install -d $RPM_BUILD_ROOT{%{_sysconfdir}/%{name},%{_libdir}/%{name}}
293 cp -p %{SOURCE6} $RPM_BUILD_ROOT%{_sysconfdir}/%{name}
295 ln -s hhvm $RPM_BUILD_ROOT%{_bindir}/php
296 ln -s hhvm $RPM_BUILD_ROOT%{_bindir}/hphp
298 install -d $RPM_BUILD_ROOT%{_datadir}/%{name}/hdf
299 cp -p hphp/doc/mime.hdf $RPM_BUILD_ROOT%{_datadir}/%{name}/hdf/static.mime-types.hdf
301 # install fastcgi initscript
302 install -d $RPM_BUILD_ROOT/etc/{sysconfig,rc.d/init.d}
303 cp -p %{SOURCE4} $RPM_BUILD_ROOT/etc/rc.d/init.d/%{name}-fcgi
304 cp -p %{SOURCE5} $RPM_BUILD_ROOT/etc/sysconfig/%{name}-fcgi
306 install -p hphp/hack/bin/hh_{server,client} $RPM_BUILD_ROOT%{_bindir}
310 install -d $RPM_BUILD_ROOT%{_datadir}/cmake/Modules
311 cp -p CMake/*.cmake $RPM_BUILD_ROOT%{_datadir}/cmake/Modules
315 /HHVM_INCLUDE_DIRS/ s,$HPHP_HOME,%{_includedir},g
316 " hphp/tools/hphpize/hphpize.cmake > $RPM_BUILD_ROOT%{_datadir}/cmake/Modules/hphpize.cmake
320 set -- $(sed -ne 's/set(HHVM_INCLUDE_DIRS "\(.*\)")/\1/p' hphp/tools/hphpize/hphpize.cmake)
324 [[ "$dir" = $HPHP_HOME/hphp/* ]] && echo $dir
330 $HPHP_HOME/hphp/runtime \
331 $HPHP_HOME/hphp/util \
332 $HPHP_HOME/hphp/neo \
333 $HPHP_HOME/hphp/system \
334 $HPHP_HOME/hphp/parser \
336 echo "D %{_includedir}${dir#$HPHP_HOME}"
337 find $dir -name '*.h' | while read path; do
338 file=%{_includedir}${path#$HPHP_HOME}
340 install -Dp $path $RPM_BUILD_ROOT$file
346 # end of install block
347 touch installed.stamp; fi
350 rm -rf $RPM_BUILD_ROOT
352 %post -p /sbin/ldconfig
353 %postun -p /sbin/ldconfig
356 /sbin/chkconfig --add %{name}-fcgi
357 %service %{name}-fcgi restart
360 if [ "$1" = "0" ]; then
361 %service -q %{name}-fcgi stop
362 /sbin/chkconfig --del %{name}-fcgi
366 %defattr(644,root,root,755)
367 %doc README.md hphp/NEWS
368 %dir %{_sysconfdir}/%{name}
369 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/php.ini
370 %attr(755,root,root) %{_bindir}/hhvm
371 %attr(755,root,root) %{_bindir}/hphp
372 %attr(755,root,root) %{_bindir}/hh_client
373 %attr(755,root,root) %{_bindir}/hh_server
375 %dir %{_datadir}/%{name}
376 %dir %{_datadir}/%{name}/hdf
377 %{_datadir}/%{name}/hdf/static.mime-types.hdf
380 %dir %{_libdir}/%{name}
383 %defattr(644,root,root,755)
384 %attr(754,root,root) /etc/rc.d/init.d/%{name}-fcgi
385 %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/%{name}-fcgi
388 %defattr(644,root,root,755)
389 %attr(755,root,root) %{_bindir}/php
392 %defattr(644,root,root,755)
393 %attr(755,root,root) %{_bindir}/hphpize
395 %dir %{_prefix}/lib/hphp
396 %{_prefix}/lib/hphp/CMake
397 %{_prefix}/lib/hphp/hphpize