1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
  
30
  
31
  
32
  
33
  
34
  
35
  
36
  
37
  
38
  
39
  
40
  
41
  
42
  
43
  
44
  
45
  
46
  
47
  
48
  
49
  
50
  
51
  
52
  
53
  
54
  
55
  
56
  
57
  
58
  
59
  
60
  
61
  
62
  
63
  
64
  
65
  
66
  
67
  
68
  
69
  
70
  
71
  
72
  
73
  
74
  
75
  
/* 
|| This file is part of Pike. For copyright information see COPYRIGHT. 
|| Pike is distributed under GPL, LGPL and MPL. See the file COPYING 
|| for more information. 
|| $Id: dumpmaster.pike,v 1.11 2003/05/07 10:49:00 grubba Exp $ 
*/ 
 
string fr; 
 
array encoded=({}); 
 
void handle_error(mixed err) 
{ 
  foreach(encoded, mixed o) 
    { 
      werror("***Failed to encode %t: %O\n",o,o); 
#if constant(_describe) 
      _describe(o); 
#endif 
    } 
 
  werror("%O\n",err); 
} 
 
void compile_error(string file,int line,string err) 
{ 
  werror("%s:%s:%s\n", file, line?(string)line:"-", err); 
} 
 
string fakeroot(string s) 
{ 
 if(fr) s=fr+combine_path(getcwd(),s); 
 return s; 
} 
 
string read_file(string s) 
{ 
  return _static_modules.___files()->Fd(fakeroot(s),"r")->read(); 
} 
 
program compile_file(string file) 
{ 
  return compile(cpp(read_file(file),file)); 
} 
 
class Codec 
{ 
  string nameof(mixed x) 
  { 
    if(mixed tmp=search(all_constants(),x))  return tmp; 
    switch(x) 
    { 
#define CONST(X) case X: return #X 
      CONST(_static_modules.___files.Stat); 
      CONST(_static_modules.Builtin.__backend); 
    } 
    encoded+=({x}); 
    return UNDEFINED; 
  }  
} 
 
void _main(array(string) argv, array(string) env) 
{ 
  foreach(argv[1..sizeof(argv)-2], string f) 
    sscanf(f, "--fakeroot=%s", fr); 
     
  program p=compile_file(argv[-1]); 
  string s=encode_value(p, Codec()); 
  _static_modules.___files()->Fd(fakeroot(argv[-1]) + ".o","wct")->write(s); 
  exit(0); 
} 
 
mixed resolv() { return UNDEFINED; }