#! /usr/bin/env python
# Part of the A-A-P recipe executive: The main function.
# Copyright (C) 2002 Stichting NLnet Labs
# Permission to copy and use this file is specified in the file COPYING.
# If this file is missing you can find it here:
http://www.a-a-p.org/COPYING
# Main Python code that executes an A-A-P recipe
import sys
from traceback import print_exc
# Each phase of executing a recipe is done by one module
from DoAddDef import doadddef
from DoArgs import doargs
from DoBuild import dobuild
from DoRead import doread
from Cache import dump_cache
from Error import *
from Sign import sign_write_all
from Util import *
import Global
from Message import *
# Globals
exit_status = 0 # exit status, default is zero (success)
def error_msg(msg):
"""print an error message and set the exit status to one"""
global exit_status
msg_error(msg)
if exit_status == 0:
exit_status = 1
def main():
"""
The main function to execute an A-A-P recipe.
"""
# We require Python 1.5 or later.
if sys.version[0] == '1' and string.atoi(sys.version[2]) < 5:
print "A-A-P requires Python version 1.5 or later."
sys.exit(1)
# When started with a relative path and changing directories we still need
# to be able to find our modules.
if not os.path.isabs(sys.argv[0]):
dir, tail = os.path.split(os.path.abspath(sys.argv[0]))
sys.path.append(dir)
# Internationalisation inits: setlocale and gettext.
i18n_init()
#
# Do the main work.
#
global exit_status
try:
# 1. Process the command line arguments.
Global.cmd_args = doargs()
if Global.cmd_args.has_option("verbose"):
Global.cmd_args.printit()
# 2. Read the recipe and included recipes. Assignments and commands
# are executed directly, rules and dependencies are stored.
# "work" is a Work object with collected items from the recipe.
work = doread()
# 3. Add the default rules and dependencies
doadddef(work)
# 4. Build each target.
dobuild(work)
except SystemExit, r:
exit_status = r
except KeyboardInterrupt:
error_msg(_("Interrupted"))
except UserError, e:
error_msg(e.args)
except SyntaxError, e:
error_msg(_("Syntax error:") + str(e))
print_exc()
except:
error_msg(_("Internal Error"))
print_exc()
# Dump entries for the downloaded files.
dump_cache()
# Dump the sign files.
sign_write_all()
sys.exit(exit_status)
# When executed directly, call the main function.
if __name__ == '__main__':
main()
# vim: set sw=4 sts=4 tw=79 fo+=l: