array( "pdlib.cc", "pdlib.php", "php_pdlib.h", "config.{m4,w32}", "src/*.{cc,h}", "dlib/**/*.{cpp,h}", "dlib/**/**/*.{cpp,h}", "dlib/**/**/**/*.{cpp,h}", ), 'test' => array( "tests/*.{phpt}", ), 'doc' => array( "README*", "LICENSE", "CREDITS", ) ); $files = array(); foreach($dirs as $role => $patterns) { foreach ($patterns as $pattern) { foreach (glob($pattern, GLOB_BRACE) as $file) { $files[$file] = $role; } } } ksort($files); return $files; } function format_open_dir($dir, $tab) { return sprintf('%s', str_repeat(" ", $tab), $dir); } function format_close_dir($tab) { return sprintf("%s", str_repeat(" ", $tab)); } function format_file($filename, $tab, $role) { return sprintf('%s', str_repeat(" ", $tab+1), $role, $filename); } function make_tree($files) { $retval = array(); $lastdir = "."; $tab = 2; $retval[] = format_open_dir("/", $tab); foreach($files as $file => $role) { $dir = dirname($file); $filename = basename($file); if ($dir != $lastdir) { $currdir = explode("/", $dir); $prevdir = explode("/", $lastdir); foreach($currdir as $n => $d) { if (isset($prevdir[$n]) && $prevdir[$n] == $d) { /* In case we are shorter then previous */ $n++; continue; } break; } if ($lastdir != ".") { foreach(array_reverse(array_slice($prevdir, $n)) as $close) { $retval[] = format_close_dir($tab--); } } foreach(array_slice($currdir, $n) as $open) { $retval[] = format_open_dir($open, ++$tab); } } $retval[] = format_file($filename, $tab, $role); $lastdir = $dir; } foreach(array_reverse(explode("/", $lastdir)) as $close) { $retval[] = format_close_dir($tab--); } $retval[] = format_close_dir($tab); return $retval; } function usage() { global $argv; echo "Usage:\n\t"; echo $argv[0], " \n"; exit(1); } if ($argc != 3) { usage(); } $VERSION = $argv[1]; $STABILITY = $argv[2]; /* 0.x.y. are developmental releases and cannot be stable */ if ((int)$VERSION < 1) { $STABILITY = "devel"; } /* A release candidate is a "beta" stability in terms of PECL */ if (stristr($VERSION, '-rc') !== false) { $STABILITY = "beta"; } verify_stability($STABILITY); verify_version($VERSION, $STABILITY); $currtime = new DateTime('now', new DateTimeZone('UTC')); $DATE = $currtime->format('Y-m-d'); $TIME = $currtime->format('H:i:s'); $TREE = make_tree(get_files()); $contents = file_get_contents(__DIR__ . "/package.xml.in"); $REPLACE = array( "%RELEASE_DATE%" => $DATE, "%RELEASE_TIME%" => $TIME, "%RELEASE_VERSION%" => $VERSION, "%RELEASE_STABILITY%" => $STABILITY, "%RELEASE_FILES%" => join("\n", $TREE), ); $contents = str_replace(array_keys($REPLACE), array_values($REPLACE), $contents); file_put_contents(__DIR__ . "/../package.xml", $contents); echo "Wrote package.xml\n";