]> git.pld-linux.org Git - packages/hhvm.git/blob - hhvm.spec
add -fcgi package containing initscript to start as fcgi server
[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 libevent2: https://github.com/facebook/hiphop-php/pull/421
5 # - system libmbfl, system xhp, sqlite3
6 %define         githash f951cb8d8812c59344d5322454853b584b668636
7 Summary:        Virtual Machine, Runtime, and JIT for PHP
8 Name:           hhvm
9 Version:        2.3.2
10 Release:        0.19
11 License:        PHP 3.01
12 Group:          Development/Languages
13 Source0:        https://github.com/facebook/hhvm/archive/HHVM-%{version}.tar.gz
14 # Source0-md5:  471961d38ba52c66b7038c556b2b7bd8
15 # need fb.changes.patch, which is available for 1.4 only
16 Source1:        http://www.monkey.org/~provos/libevent-1.4.14b-stable.tar.gz
17 # Source1-md5:  a00e037e4d3f9e4fe9893e8a2d27918c
18 Source2:        https://github.com/facebook/folly/archive/4d6d659/folly-0.1-4d6d659.tar.gz
19 # Source2-md5:  2e7c941f737c8e0a449b8116e7615656
20 Source3:        %{name}-fcgi.init
21 Source4:        %{name}-fcgi.sysconfig
22 Source100:      get-source.sh
23 Patch0:         cmake-missing-library.patch
24 Patch1:         libevent14.patch
25 Patch3:         system-xhp.patch
26 Patch4:         system-libafdt.patch
27 Patch5:         system-folly.patch
28 Patch6:         checksum.patch
29 Patch7:         imap-gss.patch
30 Patch8:         hphpize.patch
31 URL:            http://wiki.github.com/facebook/hiphop-php/
32 BuildRequires:  apr-devel
33 BuildRequires:  autoconf
34 BuildRequires:  binutils-devel
35 BuildRequires:  boost-devel >= 1.50
36 BuildRequires:  cmake >= 2.8.7
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
47 #BuildRequires: libevent-devel >= 1.4.14
48 BuildRequires:  libicu-devel >= 4.2
49 #BuildRequires: libmbfl-devel
50 BuildRequires:  libmcrypt-devel
51 BuildRequires:  libmemcached-devel >= 1.0.4
52 BuildRequires:  libstdc++-devel >= 6:4.3
53 BuildRequires:  libunwind-devel
54 BuildRequires:  libxml2-devel
55 BuildRequires:  mysql-devel
56 BuildRequires:  oniguruma-devel
57 BuildRequires:  openssl-devel
58 BuildRequires:  pcre-devel
59 #BuildRequires: php-xhp-devel >= 1.3.9-6
60 BuildRequires:  readline-devel
61 BuildRequires:  rpmbuild(macros) >= 1.675
62 BuildRequires:  tbb-devel >= 4.0.6000
63 BuildRequires:  zlib-devel
64 # check later, seem unused
65 #BuildRequires: bison >= 2.3
66 #BuildRequires: flex >= 2.5.35
67 #BuildRequires: libafdt-devel >= 0.1.0
68 #BuildRequires: re2c >= 0.13.0
69 Provides:       php(apc)
70 Provides:       php(bcmath)
71 Provides:       php(bz2)
72 Provides:       php(ctype)
73 Provides:       php(curl)
74 Provides:       php(date)
75 Provides:       php(dom)
76 Provides:       php(exif)
77 Provides:       php(fb)
78 Provides:       php(fileinfo)
79 Provides:       php(filter)
80 Provides:       php(gd)
81 Provides:       php(hash)
82 Provides:       php(hotprofiler)
83 Provides:       php(iconv)
84 Provides:       php(icu_num_fmt)
85 Provides:       php(icu_ucsdet)
86 Provides:       php(icu_uspoof)
87 Provides:       php(idn)
88 Provides:       php(imap)
89 Provides:       php(json)
90 Provides:       php(ldap)
91 Provides:       php(mbstring)
92 Provides:       php(mcrypt)
93 Provides:       php(memcache)
94 Provides:       php(memcached)
95 Provides:       php(mysql)
96 Provides:       php(openssl)
97 Provides:       php(pcntl)
98 Provides:       php(pcre)
99 Provides:       php(pdo)
100 Provides:       php(pdo_mysql)
101 Provides:       php(pdo_sqlite)
102 Provides:       php(phar)
103 Provides:       php(posix)
104 Provides:       php(reflection)
105 Provides:       php(server)
106 Provides:       php(session)
107 Provides:       php(simplexml)
108 Provides:       php(soap)
109 Provides:       php(sockets)
110 Provides:       php(spl)
111 Provides:       php(sqlite3)
112 Provides:       php(sysvmsg)
113 Provides:       php(sysvsem)
114 Provides:       php(sysvshm)
115 Provides:       php(thread)
116 Provides:       php(thrift_protocol)
117 Provides:       php(tokenizer)
118 Provides:       php(xhprof)
119 Provides:       php(xml)
120 Provides:       php(xmlreader)
121 Provides:       php(xmlwriter)
122 Provides:       php(zip)
123 Provides:       php(zlib)
124 Obsoletes:      hiphop-php < 2.3.2-0.2
125 ExclusiveArch:  %{x8664}
126 BuildRoot:      %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
127
128 %description
129 HHVM (aka the HipHop Virtual Machine) is a new open-source virtual
130 machine designed for executing programs written in PHP. HHVM uses a
131 just-in-time compilation approach to achieve superior performance
132 while maintaining the flexibility that PHP developers are accustomed
133 to. To date, HHVM (and its predecessor HPHPc before it) has realized
134 over a 9x increase in web request throughput and over a 5x reduction
135 in memory consumption for Facebook compared with the Zend PHP 5.2
136 engine + APC.
137
138 HHVM can be run as a standalone webserver (i.e. without the Apache
139 webserver and the "mod_php" extension). HHVM can also be used together
140 with a FastCGI-based webserver, and work is in progress to make HHVM
141 work smoothly with Apache.
142
143 %package fcgi
144 Summary:        Init script to start HHVM as FastCGI daemon
145 Group:          Development/Languages/PHP
146 Requires:       %{name} = %{version}-%{release}
147 Provides:       php(fcgi)
148 Requires(post,preun):   /sbin/chkconfig
149 Requires:       rc-scripts
150
151 %description fcgi
152 Init script to start HHVM as FastCGI daemon
153
154 %package program
155 Summary:        /usr/bin/php symlink
156 Summary(pl.UTF-8):      Dowiązanie symboliczne /usr/bin/php
157 Group:          Development/Languages/PHP
158 Requires:       %{name} = %{version}-%{release}
159 Obsoletes:      /usr/bin/php
160
161 %description program
162 Package providing /usr/bin/php symlink to PHP CLI.
163
164 %description program -l pl.UTF-8
165 Pakiet dostarczający dowiązanie symboliczne /usr/bin/php do PHP CLI.
166
167 %package devel
168 Summary:        Files for HHVM modules development
169 Group:          Development/Languages/PHP
170 URL:            https://github.com/facebook/hhvm/wiki/Extension-API
171 Requires:       boost-devel >= 1.50
172 Requires:       cmake >= 2.8.5
173 Requires:       glog-devel >= 0.3.2
174 Requires:       libstdc++-devel >= 6:4.3
175 Requires:       tbb-devel >= 4.0.6000
176 Requires:       zlib-devel
177
178 %description devel
179 HHVM provides a set of APIs for adding built-in functionality to the
180 runtime either by way of pure PHP code, or a combination of PHP and
181 C++.
182
183 %prep
184 %setup -q -a1 -a2 -n %{name}-HHVM-%{version}
185
186 mv folly-*/* hphp/submodules/folly
187 # https://github.com/facebook/folly/pull/44
188 sed -i -e '21 d' hphp/third_party/folly/folly/detail/Malloc.h
189
190 %patch6 -p1
191 %patch7 -p1
192 %patch8 -p1
193 #%patch5 -p1
194
195 # prefer ones from system
196 rm CMake/FindBISON.cmake
197 rm CMake/FindBoost.cmake
198 rm CMake/FindFLEX.cmake
199
200 ln -s libevent-1.4.*-stable libevent
201 %{__patch} -d libevent -p1 < hphp/third_party/libevent-1.4.14.fb-changes.diff
202
203 %if 0
204 %patch0 -p1
205 %patch1 -p1
206 #%patch3 -p1
207 %patch4 -p1
208
209 #rm -rf src/third_party/libmbfl
210 #sed -i -e '/add_subdirectory(third_party\/libmbfl)/d' src/CMakeLists.txt
211
212 rm -rf src/third_party/xhp
213 rm -rf src/third_party/libafdt
214 %endif
215
216 %build
217 # build libevent 1.4 with fb patches
218 if [ ! -d libevent/.libs ]; then
219         cd libevent
220         # TODO: should use static linking, but then it fails to detect libraries due missing -lrt
221         %configure \
222                 %{?0:--enable-static} \
223                 %{?0:--disable-shared}
224         %{__make}
225         ln -s .libs lib
226         ln -s . include
227         cd ..
228 fi
229
230 export HPHP_HOME=$(pwd)
231 export HPHP_LIB=$HPHP_HOME/bin
232 install -d $HPHP_LIB
233
234 # asm linking breaks on $CC containing spaces
235 if [[ "%{__cc}" = *ccache* ]]; then
236         cat <<-'EOF' > $HPHP_LIB/gcc
237         #!/bin/sh
238         exec %{__cc} "$@"
239         EOF
240         chmod +x $HPHP_LIB/gcc
241         CC=$HPHP_LIB/gcc
242 fi
243
244 %if 0
245 # out of dir build broken (can't find it's tools)
246 install -d build
247 cd build
248 %endif
249
250 %cmake \
251         -DLIBEVENT_LIB=$HPHP_HOME/libevent/lib/libevent.so \
252         -DLIBEVENT_INCLUDE_DIR=$HPHP_HOME/libevent \
253         -DCMAKE_PREFIX_PATH=%{_prefix} \
254         -DUSE_JEMALLOC=OFF \
255         -DUSE_TCMALLOC=OFF \
256         ./
257
258 # setup COMPILER_ID/HHVM_REPO_SCHEMA so it doesn't look it up from our package git repo
259 # see hphp/util/generate-buildinfo.sh
260 export COMPILER_ID=HPHP-%{version}-%{release}-%{githash}
261 export HHVM_REPO_SCHEMA=$(date +%N_%s)
262
263 %{__make}
264
265 %install
266 rm -rf $RPM_BUILD_ROOT
267 %{__make} install \
268         HPHP_HOME=$(pwd) \
269         DESTDIR=$RPM_BUILD_ROOT
270
271 ln -s hhvm $RPM_BUILD_ROOT%{_bindir}/php
272 ln -s hhvm $RPM_BUILD_ROOT%{_bindir}/hphp
273
274 install -d $RPM_BUILD_ROOT%{_datadir}/%{name}/hdf
275 cp -p hphp/doc/mime.hdf $RPM_BUILD_ROOT%{_datadir}/%{name}/hdf/static.mime-types.hdf
276
277 # install fastcgi initscript
278 install -d $RPM_BUILD_ROOT/etc/{sysconfig,rc.d/init.d}
279 cp -p %{SOURCE3} $RPM_BUILD_ROOT/etc/rc.d/init.d/%{name}-fcgi
280 cp -p %{SOURCE4} $RPM_BUILD_ROOT/etc/sysconfig/%{name}-fcgi
281
282 # install our libevent for now
283 install -d $RPM_BUILD_ROOT%{_libdir}
284 libtool --mode=install install -p libevent/libevent.la $RPM_BUILD_ROOT%{_libdir}
285 %{__rm} $RPM_BUILD_ROOT%{_libdir}/libevent.{a,la,so}
286
287 # setup -devel
288 install -d $RPM_BUILD_ROOT%{_datadir}/cmake/Modules
289 cp -a CMake/* $RPM_BUILD_ROOT%{_datadir}/cmake/Modules
290
291 HPHP_HOME=$(pwd)
292 sed -e "
293         /HHVM_INCLUDE_DIRS/ s,$HPHP_HOME,%{_includedir},g
294 " hphp/tools/hphpize/hphpize.cmake > $RPM_BUILD_ROOT%{_datadir}/cmake/Modules/hphpize.cmake
295
296 oIFS=$IFS
297 IFS=";"
298 set -- $(sed -ne 's/set(HHVM_INCLUDE_DIRS "\(.*\)")/\1/p' hphp/tools/hphpize/hphpize.cmake)
299 IFS=$oIFS
300 set -- $(
301         for dir in "$@"; do
302                 [[ "$dir" = $HPHP_HOME/hphp/* ]] && echo $dir
303         done
304 )
305
306 set +x
307 for dir in "$@" \
308         $HPHP_HOME/hphp/runtime \
309         $HPHP_HOME/hphp/util \
310         $HPHP_HOME/hphp/neo \
311         $HPHP_HOME/hphp/system \
312         $HPHP_HOME/hphp/parser \
313 ; do
314         echo "D %{_includedir}${dir#$HPHP_HOME}"
315         find $dir -name '*.h' | while read path; do
316                 file=%{_includedir}${path#$HPHP_HOME}
317                 echo "F $file"
318                 install -Dp $path $RPM_BUILD_ROOT$file
319         done
320 done
321 set -x
322
323 %clean
324 rm -rf $RPM_BUILD_ROOT
325
326 %post   -p /sbin/ldconfig
327 %postun -p /sbin/ldconfig
328
329 %post fcgi
330 /sbin/chkconfig --add %{name}-fcgi
331 %service %{name}-fcgi restart
332
333 %preun fcgi
334 if [ "$1" = "0" ]; then
335         %service -q %{name}-fcgi stop
336         /sbin/chkconfig --del %{name}-fcgi
337 fi
338
339 %files
340 %defattr(644,root,root,755)
341 %doc README.md hphp/NEWS
342 %attr(755,root,root) %{_bindir}/hhvm
343 %attr(755,root,root) %{_bindir}/hphp
344 %attr(755,root,root) %{_libdir}/libevent-1.4.so.*.*.*
345 %ghost %{_libdir}/libevent-1.4.so.2
346
347 %dir %{_datadir}/%{name}
348 %dir %{_datadir}/%{name}/hdf
349 %{_datadir}/%{name}/hdf/static.mime-types.hdf
350
351 %files fcgi
352 %defattr(644,root,root,755)
353 %attr(754,root,root) /etc/rc.d/init.d/%{name}-fcgi
354 %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/%{name}-fcgi
355
356 %files program
357 %defattr(644,root,root,755)
358 %attr(755,root,root) %{_bindir}/php
359
360 %files devel
361 %defattr(644,root,root,755)
362 %attr(755,root,root) %{_bindir}/hphpize
363 %{_includedir}/hphp
364 %{_datadir}/cmake/Modules/hphpize.cmake
365 %{_datadir}/cmake/Modules/FindCClient.cmake
366 %{_datadir}/cmake/Modules/FindEditline.cmake
367 %{_datadir}/cmake/Modules/FindGD.cmake
368 %{_datadir}/cmake/Modules/FindGlog.cmake
369 %{_datadir}/cmake/Modules/FindICU.cmake
370 %{_datadir}/cmake/Modules/FindLdap.cmake
371 %{_datadir}/cmake/Modules/FindLibAfdt.cmake
372 %{_datadir}/cmake/Modules/FindLibCh.cmake
373 %{_datadir}/cmake/Modules/FindLibDL.cmake
374 %{_datadir}/cmake/Modules/FindLibDwarf.cmake
375 %{_datadir}/cmake/Modules/FindLibElf.cmake
376 %{_datadir}/cmake/Modules/FindLibEvent.cmake
377 %{_datadir}/cmake/Modules/FindLibEvent.cmake.bak
378 %{_datadir}/cmake/Modules/FindLibNuma.cmake
379 %{_datadir}/cmake/Modules/FindLibXed.cmake
380 %{_datadir}/cmake/Modules/FindLibiconv.cmake
381 %{_datadir}/cmake/Modules/FindLibinotify.cmake
382 %{_datadir}/cmake/Modules/FindLibmemcached.cmake
383 %{_datadir}/cmake/Modules/FindLibpam.cmake
384 %{_datadir}/cmake/Modules/FindMcrypt.cmake
385 %{_datadir}/cmake/Modules/FindMySQL.cmake
386 %{_datadir}/cmake/Modules/FindNcurses.cmake
387 %{_datadir}/cmake/Modules/FindONIGURUMA.cmake
388 %{_datadir}/cmake/Modules/FindPCRE.cmake
389 %{_datadir}/cmake/Modules/FindPThread.cmake
390 %{_datadir}/cmake/Modules/FindReadline.cmake
391 %{_datadir}/cmake/Modules/FindTBB.cmake
392 %{_datadir}/cmake/Modules/FollySetup.cmake
393 %{_datadir}/cmake/Modules/HPHPCompiler.cmake
394 %{_datadir}/cmake/Modules/HPHPFindLibs.cmake
395 %{_datadir}/cmake/Modules/HPHPFunctions.cmake
396 %{_datadir}/cmake/Modules/HPHPSetup.cmake
397 %{_datadir}/cmake/Modules/Options.cmake
This page took 0.047081 seconds and 3 git commands to generate.