Major code reorganization
[people/meteger/rom-o-matic/.git] / build.php
1 <?php // -*- Mode: PHP; -*-
2
3 // If user chose "Configure" option on form
4 if ( $_GET['A'] == "Configure" ) {
5
6     // Enable  more extensive customization of options
7     require_once "flags.php";
8         
9     exit ();
10
11 // The next conditional includes all other cases except "Get ROM"
12 //   particularly the explicit ($A == "Start Over") case
13 //
14 } else if ( $_GET['A'] != "Get ROM" ) { 
15         
16         // Note that this method of redirections discards all the
17         // configuration flags, which is intentional in this case.
18     // ( To pass through all the flags, we could just 
19     // 'include ( "index.php" );' here )
20
21         $dir = dirname ( $_SERVER['PHP_SELF'] );
22
23         if ( $dir == "." || $dir == "/" ) {
24                 $dir = "";
25         }
26
27         $isHTTPS = ( isset ( $_SERVER["HTTPS"] ) && $_SERVER["HTTPS"] == "on" );
28         $port = ( isset($_SERVER["SERVER_PORT"] ) && 
29                           ( ( !$isHTTPS && $_SERVER["SERVER_PORT"] != "80" ) || 
30                                 ( $isHTTPS  && $_SERVER["SERVER_PORT"] != "443" ) ) );
31
32         $port = ( $port ) ? ':' . $_SERVER["SERVER_PORT"] : '';
33
34         $dest = ( $isHTTPS ? 'https://' : 'http://' ) .
35                 $_SERVER["SERVER_NAME"] . $dir . "/";
36
37         header ( "Location: $dest" );
38
39         // This should normally not be seen, because the "header"
40         // statement above should cause immediate redirection
41         // but just in case...
42
43         echo "Try this: <a href=\"$dest\">$dest</a>";
44
45         exit (); 
46 }
47
48 // OK, we're going to try to use whatever options have been set
49 // to build an image.
50
51 require_once "configinfo.php";
52
53 $flags = get_flags ();
54
55 // (debug) show flags
56 // echo "<p>Flags: </p>";
57 // showflags ( $flags );
58 // exit ();
59
60 // Make temporary copy of src directory
61 $dir = mktempcopy ( "$src_dir", "/tmp" );
62
63 // For debugging
64 // $dir = "/var/romtmp/src";
65
66 // Create a config.h file for this build
67 write_config_file ( "$dir/config.h", "all", $flags );
68 // exec ( "/bin/touch '$dir/config.h' 2>&1", $touchtxt, $status );
69
70 // (debug) show flags
71 // echo "<p>Flags: </p>";
72 // showflags ( $flags );
73 // exit ();
74
75 $nicfile = get_nicfile();
76 $nicfilename = "gpxe-$version-$nicfile";
77 $target = "bin/$nicfile";
78
79 // Make the requested image.  $status is set to 0 on success
80 exec ( "make -C '$dir' '$target' 2>&1", $maketxt, $status );
81
82 // (debugging) take a look at the Make output
83 //echo "<blockquote>"."<pre>";
84 //echo htmlentities ( implode("\n", $maketxt ) );
85 //echo "</pre>"."</blockquote>";
86 // Kill the temporary directory
87 //deltempdir ( $dir );
88 //exit ();
89
90 // Send ROM to browser (with extreme prejudice)
91
92 if ( $status == 0 ) {
93
94     $fp = fopen("$dir/$target", "rb" );
95     if ( $fp > 0 ) {
96
97         $len = filesize ( "$dir/$target" );
98         if ( $len > 0 ) {
99
100             $buf = fread ( $fp, $len );
101             fclose ( $fp );
102             deltempdir ( $dir );
103
104                 //echo "$nicfilename<br>"; exit ();
105
106             // Try to force IE to handle downloading right.
107             Header ( "Cache-control: private");
108             Header ( "Content-Type: application/x-octet-stream; " .
109                      "name=$nicfilename");
110             Header ( "Content-Disposition: attachment; " .
111                      "Filename=$nicfilename");
112             Header ( "Content-Location: $nicfilename");
113             Header ( "Content-Length: $len");
114
115             echo $buf;
116
117             exit ();
118         }
119     }
120 }
121
122 // Remove build directory
123 deltempdir ( $dir );
124
125 // Announce failure if $status from make was non-zero
126
127 $header_title = "ROM-o-matic: $nicfile Build Failed";
128 $html_title   = "$nicfile Build Failed";
129 $description  = "$nicfile ROM driver build failed";
130
131 include_once ( $top_inc );
132
133 ?>
134
135 Build failed.  Status = <? echo $status ?>.
136 <br><br>
137 Following is the output from <code>make</code>:
138 <br><br>
139
140 <blockquote>
141 <pre>
142 <? echo htmlentities ( implode ( "\n", $maketxt ) ); ?>
143 </pre>
144 </blockquote>
145
146 Please let us know that this happened.
147
148 <? include_once $bottom_inc ?>
149
150 <?
151
152 // Local variables:
153 //  c-basic-offset: 4
154 //  c-indent-level: 4
155 //  tab-width: 4
156 // End:
157
158 ?>