]> git.pld-linux.org Git - packages/hhvm.git/blob - hhvm.spec
provide php(core) = 5.6.0
[packages/hhvm.git] / hhvm.spec
1 # NOTES:
2 # - hphp/runtime/base/runtime-option.cpp evalJitDefault enables jit if /.hhvm-jit exists (yes, in filesystem root)
3 # TODO
4 # - system libmbfl, system xhp, sqlite3
5 # git show HHVM-3.2.0
6 %define         githash 01228273b8cf709aacbd3df1c51b1e690ecebac8
7 %define         folly           09a81a9
8 %define         thirdparty      2234d64
9 Summary:        Virtual Machine, Runtime, and JIT for PHP
10 Name:           hhvm
11 Version:        3.2.0
12 Release:        1
13 License:        PHP 3.01
14 Group:          Development/Languages
15 Source0:        https://github.com/facebook/hhvm/archive/HHVM-%{version}.tar.gz
16 # Source0-md5:  791ca8c56d155a71f948387de8859f98
17 Source2:        https://github.com/facebook/folly/archive/%{folly}/folly-0.1-%{folly}.tar.gz
18 # Source2-md5:  17bc7ee76939cd6a26755588d80313c9
19 Source3:        https://github.com/hhvm/hhvm-third-party/archive/%{thirdparty}/third_party-%{thirdparty}.tar.gz
20 # Source3-md5:  9d40c3fbf1394bb1f03648d7046f8b9c
21 Source4:        %{name}-fcgi.init
22 Source5:        %{name}-fcgi.sysconfig
23 Source100:      get-source.sh
24 Patch0:         cmake-missing-library.patch
25 Patch3:         system-xhp.patch
26 Patch4:         system-libafdt.patch
27 Patch5:         system-folly.patch
28 Patch10:        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}
72 Provides:       php(apache)
73 Provides:       php(apc)
74 Provides:       php(bcmath)
75 Provides:       php(bz2)
76 Provides:       php(calendar)
77 Provides:       php(core) = %{php_version}
78 Provides:       php(ctype)
79 Provides:       php(curl)
80 Provides:       php(date)
81 Provides:       php(debugger)
82 Provides:       php(dom)
83 Provides:       php(exif)
84 Provides:       php(fb)
85 Provides:       php(fileinfo)
86 Provides:       php(filter)
87 Provides:       php(ftp)
88 Provides:       php(gd)
89 Provides:       php(gettext)
90 Provides:       php(hash)
91 Provides:       php(hh)
92 Provides:       php(hhvm.debugger)
93 Provides:       php(hhvm.ini)
94 Provides:       php(hotprofiler)
95 Provides:       php(iconv)
96 Provides:       php(idn)
97 Provides:       php(imagick)
98 Provides:       php(imap)
99 Provides:       php(intl)
100 Provides:       php(json)
101 Provides:       php(ldap)
102 Provides:       php(libxml)
103 Provides:       php(mbstring)
104 Provides:       php(mcrypt)
105 Provides:       php(memcache)
106 Provides:       php(memcached)
107 Provides:       php(misc)
108 Provides:       php(mysql)
109 Provides:       php(mysqli)
110 Provides:       php(oauth)
111 Provides:       php(openssl)
112 Provides:       php(pcntl)
113 Provides:       php(pcre)
114 Provides:       php(pcre_zend_compat)
115 Provides:       php(pdo)
116 Provides:       php(pdo_mysql)
117 Provides:       php(pdo_sqlite)
118 Provides:       php(phar)
119 Provides:       php(posix)
120 Provides:       php(redis)
121 Provides:       php(reflection)
122 Provides:       php(server)
123 Provides:       php(session)
124 Provides:       php(simplexml)
125 Provides:       php(soap)
126 Provides:       php(sockets)
127 Provides:       php(spl)
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)
138 Provides:       php(url)
139 Provides:       php(wddx)
140 Provides:       php(xenon)
141 Provides:       php(xhprof)
142 Provides:       php(xml)
143 Provides:       php(xmlreader)
144 Provides:       php(xmlwriter)
145 Provides:       php(xsl)
146 Provides:       php(yaml)
147 Provides:       php(zip)
148 Provides:       php(zlib)
149 Obsoletes:      hiphop-php < 2.3.2-0.2
150 ExclusiveArch:  %{x8664}
151 BuildRoot:      %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
152
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
157
158 %description
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
166 engine + APC.
167
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.
172
173 %package fcgi
174 Summary:        Init script to start HHVM as FastCGI daemon
175 Group:          Development/Languages/PHP
176 Requires:       %{name} = %{version}-%{release}
177 Provides:       php(fcgi)
178 Requires(post,preun):   /sbin/chkconfig
179 Requires:       rc-scripts
180
181 %description fcgi
182 Init script to start HHVM as FastCGI daemon
183
184 %package program
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
190
191 %description program
192 Package providing /usr/bin/php symlink to PHP CLI.
193
194 %description program -l pl.UTF-8
195 Pakiet dostarczający dowiązanie symboliczne /usr/bin/php do PHP CLI.
196
197 %package devel
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
206 Requires:       zlib-devel
207
208 %description devel
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
211 C++.
212
213 %prep
214 %setup -q -n %{name}-HHVM-%{version} -a2 -a3
215
216 # handle git submodules
217 rmdir third-party
218 mv hhvm-third-party-* third-party
219 rmdir third-party/folly/src
220 mv folly-* third-party/folly/src
221
222 %patch10 -p1
223 #%patch5 -p1
224
225 # prefer ones from system
226 rm CMake/FindBISON.cmake
227 rm CMake/FindFLEX.cmake
228 rm CMake/FindFreetype.cmake
229
230 %if 0
231 %patch0 -p1
232 %patch1 -p1
233 #%patch3 -p1
234 %patch4 -p1
235
236 #rm -rf src/third_party/libmbfl
237 #sed -i -e '/add_subdirectory(third_party\/libmbfl)/d' src/CMakeLists.txt
238
239 rm -rf src/third_party/xhp
240 rm -rf src/third_party/libafdt
241 %endif
242
243 %build
244 # also in: hphp/tools/hphpize/hphpize.cmake
245 API=$(awk '/#define HHVM_API_VERSION/{v=$3; sub(/L$/, "", v); print v}' hphp/runtime/ext/extension.h)
246
247 if [ $API != %{hhvm_api_version} ]; then
248         echo "Set %%define hhvm_api_version to $API and re-run."
249         exit 1
250 fi
251
252 export HPHP_HOME=$(pwd)
253 export HPHP_LIB=$HPHP_HOME/bin
254 install -d $HPHP_LIB
255
256 %undefine       with_ccache
257
258 # asm linking breaks on $CC containing spaces
259 if [[ "%{__cc}" = *ccache* ]]; then
260         cat <<-'EOF' > $HPHP_LIB/gcc
261         #!/bin/sh
262         exec %{__cc} "$@"
263         EOF
264         chmod +x $HPHP_LIB/gcc
265         CC=$HPHP_LIB/gcc
266 fi
267
268 if [[ "%{__cxx}" = *ccache* ]]; then
269         cat <<-'EOF' > $HPHP_LIB/g++
270         #!/bin/sh
271         exec %{__cxx} "$@"
272         EOF
273         chmod +x $HPHP_LIB/g++
274         CXX=$HPHP_LIB/g++
275 fi
276
277 %if 0
278 # out of dir build broken (can't find it's tools)
279 install -d build
280 cd build
281 %endif
282
283 %cmake \
284         -DCMAKE_PREFIX_PATH=%{_prefix} \
285         -DUSE_JEMALLOC=OFF \
286         -DUSE_TCMALLOC=OFF \
287         -DHPHP_NOTEST=ON \
288         ./
289
290 # setup COMPILER_ID/HHVM_REPO_SCHEMA so it doesn't look it up from our package git repo
291 # see hphp/util/generate-buildinfo.sh
292 export COMPILER_ID=HHVM-%{version}-%{release}-%{githash}
293 export HHVM_REPO_SCHEMA=$(date +%N_%s)
294
295 %{__make}
296
297 %install
298 # make install relinks all outputs which is very slow,
299 # so to speedup rebuild, use timestamps to record states
300 #test %{_specdir}/%{name}.spec -nt makeinstall.stamp && %{__rm} -f makeinstall.stamp
301 if [ ! -f makeinstall.stamp -o ! -d $RPM_BUILD_ROOT ]; then
302         rm -rf makeinstall.stamp installed.stamp $RPM_BUILD_ROOT
303
304         %{__make} install \
305                 HPHP_HOME__=$(pwd) \
306                 DESTDIR=$RPM_BUILD_ROOT
307
308         touch makeinstall.stamp
309 fi
310
311 rm -rf $RPM_BUILD_ROOT%{_docdir}
312 if [ ! -f installed.stamp ]; then
313 install -d $RPM_BUILD_ROOT%{_sysconfdir}/%{name}
314 # begin install block
315
316 ln -s hhvm $RPM_BUILD_ROOT%{_bindir}/php
317 ln -s hhvm $RPM_BUILD_ROOT%{_bindir}/hphp
318
319 install -d $RPM_BUILD_ROOT%{_datadir}/%{name}/hdf
320 cp -p hphp/doc/mime.hdf $RPM_BUILD_ROOT%{_datadir}/%{name}/hdf/static.mime-types.hdf
321
322 # install fastcgi initscript
323 install -d $RPM_BUILD_ROOT/etc/{sysconfig,rc.d/init.d}
324 cp -p %{SOURCE4} $RPM_BUILD_ROOT/etc/rc.d/init.d/%{name}-fcgi
325 cp -p %{SOURCE5} $RPM_BUILD_ROOT/etc/sysconfig/%{name}-fcgi
326
327 %if 0
328 # setup -devel
329 install -d $RPM_BUILD_ROOT%{_datadir}/cmake/Modules
330 cp -p CMake/*.cmake $RPM_BUILD_ROOT%{_datadir}/cmake/Modules
331
332 HPHP_HOME=$(pwd)
333 sed -e "
334         /HHVM_INCLUDE_DIRS/ s,$HPHP_HOME,%{_includedir},g
335 " hphp/tools/hphpize/hphpize.cmake > $RPM_BUILD_ROOT%{_datadir}/cmake/Modules/hphpize.cmake
336
337 oIFS=$IFS
338 IFS=";"
339 set -- $(sed -ne 's/set(HHVM_INCLUDE_DIRS "\(.*\)")/\1/p' hphp/tools/hphpize/hphpize.cmake)
340 IFS=$oIFS
341 set -- $(
342         for dir in "$@"; do
343                 [[ "$dir" = $HPHP_HOME/hphp/* ]] && echo $dir
344         done
345 )
346
347 set +x
348 for dir in "$@" \
349         $HPHP_HOME/hphp/runtime \
350         $HPHP_HOME/hphp/util \
351         $HPHP_HOME/hphp/neo \
352         $HPHP_HOME/hphp/system \
353         $HPHP_HOME/hphp/parser \
354 ; do
355         echo "D %{_includedir}${dir#$HPHP_HOME}"
356         find $dir -name '*.h' | while read path; do
357                 file=%{_includedir}${path#$HPHP_HOME}
358                 echo "F $file"
359                 install -Dp $path $RPM_BUILD_ROOT$file
360         done
361 done
362 set -x
363 %endif
364
365 # end of install block
366 touch installed.stamp; fi
367
368 %clean
369 rm -rf $RPM_BUILD_ROOT
370
371 %post   -p /sbin/ldconfig
372 %postun -p /sbin/ldconfig
373
374 %post fcgi
375 /sbin/chkconfig --add %{name}-fcgi
376 %service %{name}-fcgi restart
377
378 %preun fcgi
379 if [ "$1" = "0" ]; then
380         %service -q %{name}-fcgi stop
381         /sbin/chkconfig --del %{name}-fcgi
382 fi
383
384 %files
385 %defattr(644,root,root,755)
386 %doc README.md hphp/NEWS
387 %dir %{_sysconfdir}/%{name}
388 %attr(755,root,root) %{_bindir}/hhvm
389 %attr(755,root,root) %{_bindir}/hphp
390
391 %dir %{_datadir}/%{name}
392 %dir %{_datadir}/%{name}/hdf
393 %{_datadir}/%{name}/hdf/static.mime-types.hdf
394
395 %files fcgi
396 %defattr(644,root,root,755)
397 %attr(754,root,root) /etc/rc.d/init.d/%{name}-fcgi
398 %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/%{name}-fcgi
399
400 %files program
401 %defattr(644,root,root,755)
402 %attr(755,root,root) %{_bindir}/php
403
404 %files devel
405 %defattr(644,root,root,755)
406 %attr(755,root,root) %{_bindir}/hphpize
407 %{_includedir}/hphp
408 %dir %{_prefix}/lib/hphp
409 %{_prefix}/lib/hphp/CMake
410 %{_prefix}/lib/hphp/hphpize
This page took 0.127749 seconds and 3 git commands to generate.