consult changelog
[catalyst.git] / catalyst
1 #!/usr/bin/python
2 # Copyright 1999-2004 Gentoo Technologies, Inc.
3 # Distributed under the terms of the GNU General Public License v2
4 # $Header: /var/cvsroot/gentoo/src/catalyst/catalyst,v 1.35 2004/05/17 01:21:17 zhen Exp $
5
6 import os,sys,imp,string
7
8 def usage():
9         print "Usage: catalyst [-f file] [variable=value ...]"
10         print " -h --help               print this usage and exit"
11         print " -v --version            display version information"
12         print " -f --file               read specified file for build instructions"
13         print " variable=value          specify a variable/value pair"
14
15 def vers():
16         print "Gentoo catalyst, version "+version
17         print "Copyright 2003-2004 Gentoo Technologies, Inc."
18         print "Distributed under the GNU General Public License version 2"
19
20 version="1.0.7"
21
22 if len(sys.argv)==1 or sys.argv[1] in ["-h","--help"]:
23         usage()
24         sys.exit(1)
25 elif sys.argv[1] in ["-v","--version"]:
26         vers()
27         sys.exit(1)
28 if os.getuid()!=0:
29         #non-root callers can't go any further than here. 
30         print "catalyst: This script requires root privileges to operate."
31         sys.exit(1)
32
33 myspec={}
34 myconf={}
35 myconffile="/etc/catalyst/catalyst.conf"
36 if os.environ.has_key("clst_conf"):
37         if not os.path.exists(os.environ["clst_conf"]):
38                 print "catalyst: Unable to find config file specified in env var 'clst_conf'"
39                 sys.exit(1)
40         myconffile=os.environ["clst_conf"]
41         
42 if os.path.exists(myconffile):
43         try:
44                 execfile(myconffile,myconf,myconf)
45         except:
46                 print "catalyst: Unable to parse "+myconffile+" config file (syntax error)"
47                 sys.exit(1)
48
49 confdefaults={ "storedir":"/var/tmp/catalyst","sharedir":"/usr/share/catalyst","distdir":"/usr/portage/distfiles",
50 "portdir":"/usr/portage","options":""}
51
52 for x in confdefaults.keys():
53         if myconf.has_key(x):
54                 print "Setting",x,"to config file value \""+myconf[x]+"\""
55                 myspec[x]=myconf[x]
56         else:
57                 print "Setting",x,"to default value \""+confdefaults[x]+"\""
58                 myspec[x]=confdefaults[x]
59
60 #This allows plugins (and this code) to import modules in the /modules dir
61 sys.path.append(myspec["sharedir"]+"/modules")
62 targetmap={}
63 try:
64         from catalyst_support import *
65         for x in required_build_targets:
66                 try:
67                         fh=open(myspec["sharedir"]+"/modules/"+x+".py")
68                         module=imp.load_module(x,fh,"modules/"+x+".py",(".py","r",imp.PY_SOURCE))
69                         fh.close()
70                 except IOError:
71                         msg("Can't find "+x+".py plugin in "+myspec.settings["sharedir"]+"/modules/")
72         
73         for x in valid_build_targets:
74                 try:
75                         fh=open(myspec["sharedir"]+"/modules/"+x+".py")
76                         module=imp.load_module(x,fh,"modules/"+x+".py",(".py","r",imp.PY_SOURCE))
77                         module.register(targetmap)
78                         fh.close()
79                 except IOError:
80                         msg("Can't find "+x+".py plugin in "+myspec.settings["sharedir"]+"/modules/")
81
82 except ImportError:
83         print "catalyst: python modules not found in "+myspec["sharedir"]+"/modules; exiting."
84         sys.exit(1)
85
86 if "ccache" in string.split(myspec["options"]):
87         print "Compiler cache support enabled."
88         myspec["CCACHE"]="1"
89
90 if "pkgcache" in string.split(myspec["options"]):
91         print "Package cache support enabled."
92         myspec["PKGCACHE"]="1"
93
94 if "distcc" in string.split(myspec["options"]):
95         print "Distcc support enabled."
96         myspec["DISTCC"]="1"
97
98 if myconf.has_key("envscript"):
99         print "Envscript support enabled."
100         myspec["ENVSCRIPT"]=myconf["envscript"]
101         
102 if sys.argv[1] in ["-f", "--file" ]:
103         try:
104                 addlargs=read_spec(sys.argv[2])
105         except:
106                 sys.exit(1)
107         unparsedargs=sys.argv[3:]
108 else:
109         addlargs={}
110         unparsedargs=sys.argv[1:]
111 try:
112         arg_parse(myspec,addlargs,unparsedargs)
113         if not targetmap.has_key(myspec["target"]):
114                 raise CatalystError,"Target \""+myspec["target"]+"\" not available."
115         mytarget=targetmap[myspec["target"]](myspec,addlargs)
116         
117         mytarget.run()
118 except CatalystError:
119         sys.exit(1)