-#!/usr/bin/python
-# Copyright 1999-2005 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo/src/catalyst/catalyst,v 1.110 2005/12/07 21:33:43 wolf31o2 Exp $
+#!/usr/bin/python -OO
# Maintained in full by:
-# Eric Edgar <rocket@gentoo.org>
+# Andrew Gaffney <agaffney@gentoo.org>
# Chris Gianelloni <wolf31o2@gentoo.org>
import os,sys,imp,string,getopt
import pdb
+
__maintainer__="Chris Gianelloni <wolf31o2@gentoo.org>"
-__version__="2.0_rc7"
+__version__="2.0.6_pre17"
conf_values={}
print " -F --fetchonly fetch files only"
print " -h --help print this help message"
print " -p --purge clear tmp dirs,package cache and autoresume flags"
- print " -s --snapshot generate a Portage snapshot"
+ print " -s --snapshot generate a release snapshot"
print " -V --version display version information"
print " -v --verbose verbose output"
print
print "Using the commandline option (-C, --cli) to build a Portage snapshot:"
print "catalyst -C target=snapshot version_stamp=my_date"
print
- print "Using the snapshot option (-s, --snapshot) to build a Portage snapshot:"
- print "catalyst -s 2005.0"
+ print "Using the snapshot option (-s, --snapshot) to build a release snapshot:"
+ print "catalyst -s 20071121"
print
print "Using the specfile option (-f, --file) to build a stage target:"
print "catalyst -f stage1-specfile.spec"
def version():
- print "Gentoo Catalyst, version "+__version__
- print "Copyright 2003-2005 The Gentoo Foundation"
+ print "Catalyst, version "+__version__
+ print "Copyright 2003-2008 Gentoo Foundation"
print "Distributed under the GNU General Public License version 2\n"
-
def parse_config(myconfig):
# search a couple of different areas for the main config file
confdefaults={ "storedir":"/var/tmp/catalyst",\
"sharedir":"/usr/share/catalyst","distdir":"/usr/portage/distfiles",\
"portdir":"/usr/portage","options":"",\
- "snapshot_cache":"/var/tmp/catalyst/snapshot_cache" }
+ "snapshot_cache":"/var/tmp/catalyst/snapshot_cache",\
+ "hash_function":"crc32"}
# first, try the one passed (presumably from the cmdline)
if myconfig:
conf_values[x]=confdefaults[x]
# parse out the rest of the options from the config file
+ if "autoresume" in string.split(conf_values["options"]):
+ print "Autoresuming support enabled."
+ conf_values["AUTORESUME"]="1"
+
if "ccache" in string.split(conf_values["options"]):
print "Compiler cache support enabled."
conf_values["CCACHE"]="1"
- if "pkgcache" in string.split(conf_values["options"]):
- print "Package cache support enabled."
- conf_values["PKGCACHE"]="1"
-
- if "snapcache" in string.split(conf_values["options"]):
- print "Snapshot cache support enabled."
- conf_values["SNAPCACHE"]="1"
-
- if "seedcache" in string.split(conf_values["options"]):
- print "Seed cache support enabled."
- conf_values["SEEDCACHE"]="1"
+ if "clear-autoresume" in string.split(conf_values["options"]):
+ print "Cleaning autoresume flags support enabled."
+ conf_values["CLEAR_AUTORESUME"]="1"
+
+# if "compress" in string.split(conf_values["options"]):
+# print "Compression enabled."
+# conf_values["COMPRESS"]="1"
- if "kerncache" in string.split(conf_values["options"]):
- print "Kernel cache support enabled."
- conf_values["KERNCACHE"]="1"
-
if "distcc" in string.split(conf_values["options"]):
print "Distcc support enabled."
conf_values["DISTCC"]="1"
- if "autoresume" in string.split(conf_values["options"]):
- print "Autoresuming support enabled."
- conf_values["AUTORESUME"]="1"
+ if "icecream" in string.split(conf_values["options"]):
+ print "Icecream compiler cluster support enabled."
+ conf_values["ICECREAM"]="1"
+
+ if "kerncache" in string.split(conf_values["options"]):
+ print "Kernel cache support enabled."
+ conf_values["KERNCACHE"]="1"
+
+ if "pkgcache" in string.split(conf_values["options"]):
+ print "Package cache support enabled."
+ conf_values["PKGCACHE"]="1"
if "purge" in string.split(conf_values["options"]):
print "Purge support enabled."
conf_values["PURGE"]="1"
-
- if "clear-autoresume" in string.split(conf_values["options"]):
- print "Cleaning autoresume flags support enabled."
- conf_values["CLEAR_AUTORESUME"]="1"
-
+
+ if "seedcache" in string.split(conf_values["options"]):
+ print "Seed cache support enabled."
+ conf_values["SEEDCACHE"]="1"
+
+ if "snapcache" in string.split(conf_values["options"]):
+ print "Snapshot cache support enabled."
+ conf_values["SNAPCACHE"]="1"
+
+ if "metadata_overlay" in conf_values["options"].split():
+ print "Use of metadata_overlay module for portage enabled."
+ conf_values["METADATA_OVERLAY"]="1"
+
+# if "tarball" in string.split(conf_values["options"]):
+# print "Tarball creation enabled."
+# conf_values["TARBALL"]="1"
+
+ if myconf.has_key("digests"):
+ conf_values["digests"]=myconf["digests"]
+ if myconf.has_key("contents"):
+ conf_values["contents"]=myconf["contents"]
+
if myconf.has_key("envscript"):
print "Envscript support enabled."
conf_values["ENVSCRIPT"]=myconf["envscript"]
-
- if "md5" in string.split(conf_values["options"]):
- print "MD5 .digests file creation support enabled."
- conf_values["MD5"]="1"
-
- if "sha" in string.split(conf_values["options"]):
- print "SHA .digests file creation support enabled."
- conf_values["SHA"]="1"
def import_modules():
# import catalyst's own modules (i.e. catalyst_support and the arch modules)
targetmap={}
-
+
try:
for x in required_build_targets:
try:
mytarget.run()
except:
+ # TODO: Capture traceback, so we can display this error after printing of the traceback
+ print "!!! catalyst: Error encountered during run of target " + addlargs["target"]
raise
if __name__ == "__main__":
# parse out the command line arguments
try:
- opts,args = getopt.getopt(sys.argv[1:], "apxhvdc:C:f:FVs:", ["purge","help", "version", "debug",\
- "clear_autoresume", "config=", "cli=", "file=", "fetch", "verbose","snapshot="])
+ opts,args = getopt.getopt(sys.argv[1:], "aphvdc:C:f:FVs:", ["purge","help", "version", "debug",\
+ "clear-autoresume", "config=", "cli=", "file=", "fetch", "verbose","snapshot="])
except getopt.GetoptError:
usage()
sys.exit(2)
else:
conf_values["DEBUG"]="1"
+ conf_values["VERBOSE"]="1"
if o in ("-c", "--config"):
if len(sys.argv) < 3:
parse_config(myconfig)
sys.path.append(conf_values["sharedir"]+"/modules")
from catalyst_support import *
-
+
+ # Start checking that digests are valid now that the hash_map was imported from catalyst_support
+ if conf_values.has_key("digests"):
+ for i in conf_values["digests"].split():
+ if not hash_map.has_key(i):
+ print
+ print i+" is not a valid digest entry"
+ print "Valid digest entries:"
+ print hash_map.keys()
+ print
+ print "Catalyst aborting...."
+ sys.exit(2)
+ if 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...."
+ sys.exit(2)
+ if conf_values.has_key("hash_function"):
+ if not hash_map.has_key(conf_values["hash_function"]):
+ 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...."
+ sys.exit(2)
+ if 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...."
+ sys.exit(2)
+
# import the rest of the catalyst modules
targetmap=import_modules()
print "\nCatalyst build aborted due to user interrupt ( Ctrl-C )"
print
print "Catalyst aborting...."
+ sys.exit(2)
except LockInUse:
print "Catalyst aborting...."
sys.exit(2)