Skip to content
Browse files

new script for PHP 4 WINDOWS DISTRO only

git-svn-id: http://svn.php.net/repository/pear/pear-core/pear/pear-core/trunk@228181 c90b9560-bf6c-de11-be94-00142212c4b1
  • Loading branch information...
1 parent d596453 commit 0ab2ce4226eea24e8f23c109f3d368cb9e94b97b cellog committed
Showing with 132 additions and 0 deletions.
  1. +132 −0 make-pear-bundle.php
View
132 make-pear-bundle.php
@@ -0,0 +1,132 @@
+#!/usr/bin/php
+<?php # $Id$
+/* piece together a windows pear distro */
+
+if (!$_SERVER['argv'][1]) {
+ echo "Usage: {$_SERVER['argv'][0]} dist_dir\n";
+ exit(1);
+}
+
+$dist_dir = $_SERVER['argv'][1];
+
+/* 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);
+
+} /* }}} */
+
+echo "Creating PEAR in $dist_dir\n";
+
+/* Let's do a PEAR-less pear setup */
+if (!file_exists($dist_dir)) {
+ mkdir($dist_dir);
+}
+if (!file_exists($dist_dir)) {
+ die("could not make $dist_dir");
+}
+mkdir("$dist_dir/PEAR");
+mkdir("$dist_dir/PEAR/go-pear-bundle");
+
+/* grab the bootstrap script */
+echo "Downloading go-pear\n";
+copy("http://pear.php.net/go-pear", "$dist_dir/PEAR/go-pear.php");
+echo "Downloading go-pear.bat\n";
+copy("http://cvs.php.net/viewvc.cgi/pear-core/scripts/go-pear.bat?revision=1.1", "$dist_dir/go-pear.bat");
+
+/* This is a list of packages and versions
+ * that will be used to create the PEAR folder
+ * in the windows snapshot.
+ */
+$packages = array(
+// required packages for the installer
+"PEAR" => "1.5.0",
+"Console_Getopt" => "1.2.1",
+"Archive_Tar" => "1.3.2",
+"Structures_Graph" => "1.0.2",
+
+// required packages for the web frontend
+"PEAR_Frontend_Web" => "0.5.1",
+"HTML_Template_IT" => "1.1.4",
+"Net_UserAgent_Detect" => "2.0.1",
+);
+
+
+/* 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");
+extract_file_from_tarball('Structures_Graph', 'Structures/Graph.php', "$dist_dir/PEAR/go-pear-bundle");
+extract_file_from_tarball('Structures_Graph', 'Structures/Graph/Node.php', "$dist_dir/PEAR/go-pear-bundle");
+extract_file_from_tarball('Structures_Graph', 'Structures/Graph/Manipulator/AcyclicTest.php', "$dist_dir/PEAR/go-pear-bundle");
+extract_file_from_tarball('Structures_Graph', 'Structures/Graph/Manipulator/TopologicalSorter.php', "$dist_dir/PEAR/go-pear-bundle");
+?>

0 comments on commit 0ab2ce4

Please sign in to comment.
Something went wrong with that request. Please try again.