summaryrefslogtreecommitdiff
path: root/win32/build/mkdist.php
diff options
context:
space:
mode:
authorWez Furlong <wez@php.net>2004-04-08 13:36:11 +0000
committerWez Furlong <wez@php.net>2004-04-08 13:36:11 +0000
commit5e8d0919cf6f1f498085efabb5ac4f3a98d946aa (patch)
tree79e3ce5315ee3d1da5c203c6db20da65e27e3eaf /win32/build/mkdist.php
parent61144768ede0dcc3f7b0f5ce20d3d3da39d5b4e2 (diff)
downloadphp-git-5e8d0919cf6f1f498085efabb5ac4f3a98d946aa.tar.gz
Add code to fetch the pear bundle based on pear/go-pear-list.php
For the moment, this is turned off, but it should be turned on ready for the next RC. (waiting for feedback from Edin and the PEAR guys)
Diffstat (limited to 'win32/build/mkdist.php')
-rw-r--r--win32/build/mkdist.php105
1 files changed, 103 insertions, 2 deletions
diff --git a/win32/build/mkdist.php b/win32/build/mkdist.php
index bb8017af82..fd8ad4ae44 100644
--- a/win32/build/mkdist.php
+++ b/win32/build/mkdist.php
@@ -134,6 +134,66 @@ function copy_text_file($source, $dest)
fclose($fp);
}
+/* very light-weight function to extract a single named file from
+ * a gzipped tarball. This makes assumptions about the files
+ * based on the PEAR info set in $packages. */
+function extract_file_from_tarball($pkg, $filename, $dest_dir) /* {{{ */
+{
+ global $packages;
+
+ $name = $pkg . '-' . $packages[$pkg];
+ $tarball = $dest_dir . "/" . $name . '.tgz';
+ $filename = $name . '/' . $filename;
+ $destfilename = $dest_dir . "/" . basename($filename);
+
+ $fp = gzopen($tarball, 'rb');
+
+ $done = false;
+ do {
+ /* read the header */
+ $hdr_data = gzread($fp, 512);
+ if (strlen($hdr_data) == 0)
+ break;
+ $checksum = 0;
+ for ($i = 0; $i < 148; $i++)
+ $checksum += ord($hdr_data{$i});
+ for ($i = 148; $i < 156; $i++)
+ $checksum += 32;
+ for ($i = 156; $i < 512; $i++)
+ $checksum += ord($hdr_data{$i});
+
+ $hdr = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", $hdr_data);
+
+ $hdr['checksum'] = octdec(trim($hdr['checksum']));
+
+ if ($hdr['checksum'] != $checksum) {
+ echo "Checksum for $tarball $hdr[filename] is invalid\n";
+ print_r($hdr);
+ return;
+ }
+
+ $hdr['size'] = octdec(trim($hdr['size']));
+ echo "File: $hdr[filename] $hdr[size]\n";
+
+ if ($filename == $hdr['filename']) {
+ echo "Found the file we want\n";
+ $dest = fopen($destfilename, 'wb');
+ $x = stream_copy_to_stream($fp, $dest, $hdr['size']);
+ fclose($dest);
+ echo "Wrote $x bytes into $destfilename\n";
+ break;
+ }
+
+ /* skip body of the file */
+ $size = 512 * ceil((int)$hdr['size'] / 512);
+ echo "Skipping $size bytes\n";
+ gzseek($fp, gztell($fp) + $size);
+
+ } while (!$done);
+
+} /* }}} */
+
+
/* the core dll */
copy("$build_dir/php.exe", "$dist_dir/php.exe");
copy("$build_dir/$phpdll", "$dist_dir/$phpdll");
@@ -271,6 +331,45 @@ function copy_dir($source, $dest)
closedir($d);
}
+/* change this next line to true to use good-old
+ * hand-assembled go-pear-bundle from the snapshot template */
+$use_pear_template = true;
+
+if (!$use_pear_template) {
+ /* Let's do a PEAR-less pear setup */
+ mkdir("$dist_dir/PEAR");
+ mkdir("$dist_dir/PEAR/go-pear-bundle");
+
+ /* grab the bootstrap script */
+ echo "Downloading go-pear\n";
+ copy("http://go-pear.org/", "$dist_dir/PEAR/go-pear.php");
+
+ /* import the package list -- sets $packages variable */
+ include "pear/go-pear-list.php";
+
+ /* download the packages into the destination */
+ echo "Fetching packages\n";
+
+ foreach ($packages as $name => $version) {
+ $filename = "$name-$version.tgz";
+ $destfilename = "$dist_dir/PEAR/go-pear-bundle/$filename";
+ if (file_exists($destfilename))
+ continue;
+ $url = "http://pear.php.net/get/$filename";
+ echo "Downloading $name from $url\n";
+ flush();
+ copy($url, $destfilename);
+ }
+
+ echo "Download complete. Extracting bootstrap files\n";
+
+ /* Now, we want PEAR.php, Getopt.php (Console_Getopt) and Tar.php (Archive_Tar)
+ * broken out of the tarballs */
+ extract_file_from_tarball('PEAR', 'PEAR.php', "$dist_dir/PEAR/go-pear-bundle");
+ extract_file_from_tarball('Archive_Tar', 'Archive/Tar.php', "$dist_dir/PEAR/go-pear-bundle");
+ extract_file_from_tarball('Console_Getopt', 'Console/Getopt.php', "$dist_dir/PEAR/go-pear-bundle");
+}
+
/* add extras from the template dir */
if (file_exists($snapshot_template)) {
$items = glob("$snapshot_template/*");
@@ -282,8 +381,10 @@ if (file_exists($snapshot_template)) {
if ($bi == 'dlls' || $bi == 'symbols') {
continue;
} else if ($bi == 'PEAR') {
- /* copy to top level */
- copy_dir($item, "$dist_dir/$bi");
+ if ($use_pear_template) {
+ /* copy to top level */
+ copy_dir($item, "$dist_dir/$bi");
+ }
} else {
/* copy that dir into extras */
copy_dir($item, "$dist_dir/extras/$bi");