1 #!/usr/bin/php -dphar.readonly=0
4 ini_set("display_errors", 0);
5 ini_set("log_errors", 1);
7 $what = !empty($argv[1]) ?
$argv[1] : "latest";
10 function fail($pkg, $ver, $skp, $fmt) {
11 $msg = call_user_func_array("sprintf", array_slice(func_get_args(), 3));
12 fprintf(STDERR
, "FAILURE: %s-%s, %s; skipping next time\n", $pkg, $ver, $msg);
16 function wait(&$pids) {
18 switch ($pid = pcntl_wait($status)) {
25 if (pcntl_wifexited($status) && ($rc = pcntl_wexitstatus($status))) {
26 fail($pkg, $ver, $skp, "exit code: %d", $rc);
27 } elseif (pcntl_wifsignaled($status) && ($rc = pcntl_wtermsig($status))) {
28 fail($pkg, $ver, $skp, "signal: %d", $rc);
30 printf("SUCCESS: %s-%s\n", $pkg, $ver);
37 function work($url, $dir) {
38 is_dir($dir) ||
mkdir($dir, 0777, true);
39 require_once __DIR__
."/../vendor/autoload.php";
40 $packager = new pharext\Packager
;
50 if (($sxe = simplexml_load_file("http://pecl.php.net/feeds/$what.rss"))) {
51 foreach ($sxe->item
as $item) {
52 $url = (string) $item->link
;
53 $pkg = basename(dirname($url));
54 $ver = basename($url);
55 $skp = sprintf("%s/../build/%s-%s.skip", __DIR__
, $pkg, $ver);
56 $ext = sprintf("%s/../public/phars/%s/%s-%s.ext.phar", __DIR__
, $pkg, $pkg, $ver);
59 if (!is_file($skp) && !is_file($ext)) {
60 switch ($pid = pcntl_fork()) {
67 $pids[$pid] = compact("url", "pkg", "ver", "skp", "ext", "dir");
72 if (count($pids) > 5) {