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