Add armv6j_hardfp
[catalyst.git] / catalyst
index 1cbb9f5d0d21ce5ae778882788b2e42f82df13e3..11b52d90891f56bc287d85a5e468d8d9a576cbe4 100755 (executable)
--- a/catalyst
+++ b/catalyst
@@ -2,7 +2,8 @@
 
 # Maintained in full by:
 # Andrew Gaffney <agaffney@gentoo.org>
-# Chris Gianelloni <wolf31o2@gentoo.org>
+# Chris Gianelloni <wolf31o2@wolf31o2.org>
+# $Id$
 
 import os, sys, getopt
 
@@ -16,10 +17,11 @@ from catalyst.output import *
 from catalyst.error import *
 from catalyst.hash import hash_map
 
-__maintainer__="Chris Gianelloni <wolf31o2@gentoo.org>"
+__maintainer__="Chris Gianelloni <wolf31o2@wolf31o2.org>"
 __version__="2.99"
 
-conf_values={}
+conf_values = {}
+config = catalyst.config.config()
 
 def usage():
        print "Usage catalyst [options] [-C variable=value...] [ -s identifier]"
@@ -48,15 +50,14 @@ def usage():
        print "catalyst -f stage1-specfile.spec"
 
 def show_version():
-       print "Catalyst, version "+__version__
-       print "Copyright 2003-2008 Gentoo Foundation"
-       print "Copyright 2008 various authors"
-       print "Distributed under the GNU General Public License version 2.1\n"
+       msg("Catalyst, version " + __version__)
+       msg("Copyright 2003-2008 Gentoo Foundation")
+       msg("Copyright 2008 various authors")
+       msg("Distributed under the GNU General Public License version 2.1")
 
-def parse_config(myconfig):
+def parse_config():
        # search a couple of different areas for the main config file
        myconf = {}
-       config_file = ""
 
        confdefaults = {
                "storedir": "/var/tmp/catalyst",
@@ -69,17 +70,16 @@ def parse_config(myconfig):
        }
 
        # first, try the one passed (presumably from the cmdline)
-       if myconfig:
-               if os.path.exists(myconfig):
-                       print "Using command line specified Catalyst configuration file, " + myconfig
-                       config_file = myconfig
+       if "config_file" in conf_values:
+               if os.path.exists(conf_values["config_file"]):
+                       msg("Using command line specified Catalyst configuration file, " + conf_values["config_file"])
                else:
-                       die("specified configuration file " + myconfig + " does not exist")
+                       die("specified configuration file " + conf_values["config_file"] + " does not exist")
 
        # next, try the default location
        elif os.path.exists("/etc/catalyst/catalyst.conf"):
-               print "Using default Catalyst configuration file, /etc/catalyst/catalyst.conf"
-               config_file="/etc/catalyst/catalyst.conf"
+               msg("Using default Catalyst configuration file, /etc/catalyst/catalyst.conf")
+               conf_values["config_file"] = "/etc/catalyst/catalyst.conf"
 
        # can't find a config file (we are screwed), so bail out
        else:
@@ -87,25 +87,25 @@ def parse_config(myconfig):
 
        # Load the default config values into myconf
        for x in confdefaults:
-               print "Setting " + x + " to default value \"" + confdefaults[x] + "\""
+               msg("Setting " + x + " to default value '" + confdefaults[x] + "'")
                myconf[x] = confdefaults[x]
 
        # now, try and parse the config file "config_file"
        try:
-               myconfig = catalyst.config.ConfigParser(config_file)
+               myconfig = catalyst.config.ConfigParser(conf_values["config_file"])
                myconf.update(myconfig.get_values())
 
        except:
-               die("Unable to parse configuration file, " + myconfig)
+               die("Unable to parse configuration file, " + conf_values["config_file"])
 
        # now, load up the values into conf_values so that we can use them
        for x in confdefaults.keys():
                if x in myconf:
-                       print "Setting",x,"to config file value \""+myconf[x]+"\""
-                       conf_values[x]=myconf[x]
+                       msg("Setting " + x + " to config file value '" + myconf[x] + "'")
+                       conf_values[x] = myconf[x]
                else:
-                       print "Setting",x,"to default value \""+confdefaults[x]+"\""
-                       conf_values[x]=confdefaults[x]
+                       msg("Setting " + x + " to default value '" + confdefaults[x] + "'")
+                       conf_values[x] = confdefaults[x]
 
        options = (
                ("autoresume", "AUTORESUME", "Autoresuming support enabled."),
@@ -119,7 +119,6 @@ def parse_config(myconfig):
                ("purge", "PURGE", "Purge support enabled."),
                ("seedcache", "SEEDCACHE", "Seed cache support enabled."),
                ("snapcache", "SNAPCACHE", "Snapshot cache support enabled."),
-               ("metadata_overlay", "METADATA_OVERLAY", "Use of metadata_overlay module for portage enabled."),
 #              ("tarball", "TARBALL", "Tarball creation enabled.")
        )
 
@@ -128,79 +127,59 @@ def parse_config(myconfig):
        # parse out the rest of the options from the config file
        for x in options:
                if x[0] in split_options:
-                       print x[2]
+                       msg(x[2])
                        conf_values[x[1]] = "1"
 
        if "digests" in myconf:
-               conf_values["digests"]=myconf["digests"]
+               conf_values["digests"] = myconf["digests"]
+
        if "contents" in myconf:
-               conf_values["contents"]=myconf["contents"]
+               conf_values["contents"] = myconf["contents"]
 
        if "envscript" in myconf:
-               print "Envscript support enabled."
-               conf_values["ENVSCRIPT"]=myconf["envscript"]
-
-def build_target(addlargs, targetmap):
-       try:
-               if not addlargs["target"] in targetmap:
-                       raise CatalystError,"Target \""+addlargs["target"]+"\" not available."
-
-               mytarget=targetmap[addlargs["target"]](conf_values, addlargs)
-
-               mytarget.run()
-
-       except:
-               catalyst.util.print_traceback()
-               warn("Error encountered during run of target " + addlargs["target"])
-               raise
+               msg("Envscript support enabled.")
+               conf_values["ENVSCRIPT"] = myconf["envscript"]
 
 def verify_digest_and_hash_functions():
        # Start checking that digests are valid now that the hash_map was imported from catalyst_support
        if "digests" in conf_values:
                for i in conf_values["digests"].split():
                        if not i in hash_map:
-                               print
-                               print i+" is not a valid digest entry"
-                               print "Valid digest entries:"
-                               print hash_map.keys()
-                               print
-                               print "Catalyst aborting...."
+                               msg()
+                               msg(i + " is not a valid digest entry")
+                               msg("Valid digest entries:")
+                               msg("\n".join(hash_map.keys()))
+                               msg()
+                               msg("Catalyst aborting....")
                                sys.exit(2)
                        if catalyst.util.find_binary(hash_map[i][1]) == None:
-                               print
-                               print "digest="+i
-                               print "\tThe "+hash_map[i][1]+\
-                                       " binary was not found. It needs to be in your system path"
-                               print
-                               print "Catalyst aborting...."
+                               msg()
+                               msg("digest=" + i)
+                               msg("\tThe " + hash_map[i][1] + \
+                                       " binary was not found. It needs to be in your system path")
+                               msg()
+                               msg("Catalyst aborting....")
                                sys.exit(2)
 
        if "hash_function" in conf_values:
                if not conf_values["hash_function"] in hash_map:
-                       print
-                       print conf_values["hash_function"]+" is not a valid hash_function entry"
-                       print "Valid hash_function entries:"
-                       print hash_map.keys()
-                       print
-                       print "Catalyst aborting...."
+                       msg()
+                       msg(conf_values["hash_function"] + " is not a valid hash_function entry")
+                       msg("Valid hash_function entries:")
+                       msg("\n".join(hash_map.keys()))
+                       msg()
+                       msg("Catalyst aborting....")
                        sys.exit(2)
                if catalyst.util.find_binary(hash_map[conf_values["hash_function"]][1]) == None:
-                       print
-                       print "hash_function="+conf_values["hash_function"]
-                       print "\tThe "+hash_map[conf_values["hash_function"]][1]+\
-                               " binary was not found. It needs to be in your system path"
-                       print
-                       print "Catalyst aborting...."
+                       msg()
+                       msg("hash_function=" + conf_values["hash_function"])
+                       msg("\tThe " + hash_map[conf_values["hash_function"]][1] + \
+                               " binary was not found. It needs to be in your system path")
+                       msg()
+                       msg("Catalyst aborting....")
                        sys.exit(2)
 
-if __name__ == "__main__":
-
-       show_version()
-
-       if os.getuid() != 0:
-               # catalyst cannot be run as a normal user due to chroots, mounts, etc
-               die("This script requires root privileges to operate", 2)
-
+def parse_commandline():
        # parse out the command line arguments
        try:
                opts,args = getopt.getopt(sys.argv[1:], "apPhvdc:C:f:FVs:", ["purge", "purgeonly", "help", "version", "debug",\
@@ -211,13 +190,7 @@ if __name__ == "__main__":
                sys.exit(2)
 
        # defaults for commandline opts
-       debug=False
-       verbose=False
-       fetch=False
-       myconfig=""
-       myspecfile=""
-       mycmdline=[]
-       myopts=[]
+       conf_values["command_line"] = []
 
        # check preconditions
        if len(opts) == 0:
@@ -232,7 +205,7 @@ if __name__ == "__main__":
                        sys.exit(1)
 
                if o in ("-V", "--version"):
-                       print "Catalyst version "+__version__
+                       show_version()
                        sys.exit(1)
 
                if o in ("-d", "--debug"):
@@ -240,24 +213,24 @@ if __name__ == "__main__":
                        conf_values["VERBOSE"]="1"
 
                if o in ("-c", "--config"):
-                       myconfig=a
+                       conf_values["config_file"] = a
 
                if o in ("-C", "--cli"):
                        run = True
-                       x=sys.argv.index(o)+1
+                       x = sys.argv.index(o) + 1
                        while x < len(sys.argv):
-                               mycmdline.append(sys.argv[x])
-                               x=x+1
+                               conf_values["command_line"].append(sys.argv[x])
+                               x = x + 1
 
                if o in ("-f", "--file"):
                        run = True
-                       myspecfile=a
+                       conf_values["spec_file"] = a
 
                if o in ("-F", "--fetchonly"):
-                       conf_values["FETCH"]="1"
+                       conf_values["FETCH"] = "1"
 
                if o in ("-v", "--verbose"):
-                       conf_values["VERBOSE"]="1"
+                       conf_values["VERBOSE"] = "1"
 
                if o in ("-s", "--snapshot"):
                        if len(sys.argv) < 3:
@@ -266,8 +239,8 @@ if __name__ == "__main__":
                                sys.exit(2)
                        else:
                                run = True
-                               mycmdline.append("target=snapshot")
-                               mycmdline.append("version_stamp="+a)
+                               conf_values["command_line"].append("target=snapshot")
+                               conf_values["command_line"].append("version_stamp="+a)
 
                if o in ("-p", "--purge"):
                        conf_values["PURGE"] = "1"
@@ -283,50 +256,63 @@ if __name__ == "__main__":
                usage()
                sys.exit(2)
 
-       parse_config(myconfig)
+if __name__ == "__main__":
+
+       show_version()
+
+       if os.getuid() != 0:
+               # catalyst cannot be run as a normal user due to chroots, mounts, etc
+               die("This script requires root privileges to operate", 2)
+
+       parse_commandline()
+
+       parse_config()
 
        verify_digest_and_hash_functions()
 
        targetmap = catalyst.target.build_target_map()
+       spec = catalyst.config.Spec()
 
-       addlargs={}
-
-       if myspecfile:
-               spec = catalyst.config.SpecParser(myspecfile)
-               addlargs.update(spec.get_values())
+       if "spec_file" in conf_values:
+               specparser = catalyst.config.SpecParser(conf_values["spec_file"])
+               spec_values = specparser.get_values()
+               spec.parse_values(spec_values)
 
-       if mycmdline:
+       if "command_line" in conf_values:
                try:
                        cmdline = catalyst.config.ConfigParser()
-                       cmdline.parse_lines(mycmdline)
-                       addlargs.update(cmdline.get_values())
+                       cmdline.parse_lines(conf_values["command_line"])
+                       cmdline_values = cmdline.get_values()
+                       spec.parse_values(cmdline_values)
                except CatalystError:
                        die("Could not parse commandline, exiting.")
 
-       if not "target" in addlargs:
-               raise CatalystError, "Required value \"target\" not specified."
+       config.set_spec(spec)
+       config.set_conf(conf_values)
+       config.set_targetmap(targetmap)
 
        # everything is setup, so the build is a go
        try:
-               build_target(addlargs, targetmap)
+               catalyst.target.build_targets()
 
        except CatalystError:
-               print
-               print "Catalyst aborting...."
+               msg()
+               msg("Catalyst aborting....")
                sys.exit(2)
 
        except KeyboardInterrupt:
-               print "\nCatalyst build aborted due to user interrupt ( Ctrl-C )"
-               print
-               print "Catalyst aborting...."
+               msg()
+               msg("Catalyst build aborted due to user interrupt ( Ctrl-C )")
+               msg()
+               msg("Catalyst aborting....")
                sys.exit(2)
 
        except LockInUse:
-               print "Catalyst aborting...."
+               msg("Catalyst aborting....")
                sys.exit(2)
 
        except:
-               print "Catalyst aborting...."
+               msg("Catalyst aborting....")
                raise
                sys.exit(2)