Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 132 lines (108 sloc) 4.241 kb
0ab2ce42 » cellog
2007-01-27 new script for PHP 4 WINDOWS DISTRO only
1 #!/usr/bin/php
2 <?php # $Id$
3 /* piece together a windows pear distro */
4
5 if (!$_SERVER['argv'][1]) {
6 echo "Usage: {$_SERVER['argv'][0]} dist_dir\n";
7 exit(1);
8 }
9
10 $dist_dir = $_SERVER['argv'][1];
11
12 /* very light-weight function to extract a single named file from
13 * a gzipped tarball. This makes assumptions about the files
14 * based on the PEAR info set in $packages. */
15 function extract_file_from_tarball($pkg, $filename, $dest_dir) /* {{{ */
16 {
17 global $packages;
18
19 $name = $pkg . '-' . $packages[$pkg];
20 $tarball = $dest_dir . "/" . $name . '.tgz';
21 $filename = $name . '/' . $filename;
22 $destfilename = $dest_dir . "/" . basename($filename);
23
24 $fp = gzopen($tarball, 'rb');
25
26 $done = false;
27 do {
28 /* read the header */
29 $hdr_data = gzread($fp, 512);
30 if (strlen($hdr_data) == 0)
31 break;
32 $checksum = 0;
33 for ($i = 0; $i < 148; $i++)
34 $checksum += ord($hdr_data{$i});
35 for ($i = 148; $i < 156; $i++)
36 $checksum += 32;
37 for ($i = 156; $i < 512; $i++)
38 $checksum += ord($hdr_data{$i});
39
40 $hdr = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", $hdr_data);
41
42 $hdr['checksum'] = octdec(trim($hdr['checksum']));
43
44 if ($hdr['checksum'] != $checksum) {
45 echo "Checksum for $tarball $hdr[filename] is invalid\n";
46 print_r($hdr);
47 return;
48 }
49
50 $hdr['size'] = octdec(trim($hdr['size']));
51 echo "File: $hdr[filename] $hdr[size]\n";
52
53 if ($filename == $hdr['filename']) {
54 echo "Found the file we want\n";
55 $dest = fopen($destfilename, 'wb');
56 $x = stream_copy_to_stream($fp, $dest, $hdr['size']);
57 fclose($dest);
58 echo "Wrote $x bytes into $destfilename\n";
59 break;
60 }
61
62 /* skip body of the file */
63 $size = 512 * ceil((int)$hdr['size'] / 512);
64 echo "Skipping $size bytes\n";
65 gzseek($fp, gztell($fp) + $size);
66
67 } while (!$done);
68
69 } /* }}} */
70
71 echo "Creating PEAR in $dist_dir\n";
72
73 /* Let's do a PEAR-less pear setup */
74 if (!file_exists($dist_dir)) {
75 mkdir($dist_dir);
76 }
77 if (!file_exists($dist_dir)) {
78 die("could not make $dist_dir");
79 }
80 mkdir("$dist_dir/PEAR");
81 mkdir("$dist_dir/PEAR/go-pear-bundle");
82
83 /* grab the bootstrap script */
84 echo "Downloading go-pear\n";
85 copy("http://pear.php.net/go-pear", "$dist_dir/PEAR/go-pear.php");
86 echo "Downloading go-pear.bat\n";
87 copy("http://cvs.php.net/viewvc.cgi/pear-core/scripts/go-pear.bat?revision=1.1", "$dist_dir/go-pear.bat");
88
89 /* This is a list of packages and versions
90 * that will be used to create the PEAR folder
91 * in the windows snapshot.
92 */
93 $packages = array(
94 // required packages for the installer
a5413012 » cellog
2007-03-05 use PEAR 1.5.1
95 "PEAR" => "1.5.1",
0ab2ce42 » cellog
2007-01-27 new script for PHP 4 WINDOWS DISTRO only
96 "Console_Getopt" => "1.2.1",
97 "Archive_Tar" => "1.3.2",
98 "Structures_Graph" => "1.0.2",
99
100 // required packages for the web frontend
101 "PEAR_Frontend_Web" => "0.5.1",
102 "HTML_Template_IT" => "1.1.4",
103 "Net_UserAgent_Detect" => "2.0.1",
104 );
105
106
107 /* download the packages into the destination */
108 echo "Fetching packages\n";
109
110 foreach ($packages as $name => $version) {
111 $filename = "$name-$version.tgz";
112 $destfilename = "$dist_dir/PEAR/go-pear-bundle/$filename";
113 if (file_exists($destfilename))
114 continue;
115 $url = "http://pear.php.net/get/$filename";
116 echo "Downloading $name from $url\n";
117 flush();
118 copy($url, $destfilename);
119 }
120
121 echo "Download complete. Extracting bootstrap files\n";
122
123 /* Now, we want PEAR.php, Getopt.php (Console_Getopt) and Tar.php (Archive_Tar)
124 * broken out of the tarballs */
125 extract_file_from_tarball('PEAR', 'PEAR.php', "$dist_dir/PEAR/go-pear-bundle");
126 extract_file_from_tarball('Archive_Tar', 'Archive/Tar.php', "$dist_dir/PEAR/go-pear-bundle");
127 extract_file_from_tarball('Console_Getopt', 'Console/Getopt.php', "$dist_dir/PEAR/go-pear-bundle");
128 extract_file_from_tarball('Structures_Graph', 'Structures/Graph.php', "$dist_dir/PEAR/go-pear-bundle");
129 extract_file_from_tarball('Structures_Graph', 'Structures/Graph/Node.php', "$dist_dir/PEAR/go-pear-bundle");
130 extract_file_from_tarball('Structures_Graph', 'Structures/Graph/Manipulator/AcyclicTest.php', "$dist_dir/PEAR/go-pear-bundle");
131 extract_file_from_tarball('Structures_Graph', 'Structures/Graph/Manipulator/TopologicalSorter.php', "$dist_dir/PEAR/go-pear-bundle");
132 ?>
Something went wrong with that request. Please try again.