Anonymous avatar Anonymous committed 63e4f28

Initialize Options in a subroutine.

Comments (0)

Files changed (1)

 	sys.exit(0)
 
 
-option_list = []
 
-# Generic routine for to-be-written options, used by multiple options below.
+#
+# After options are initialized, the following variables are
+# filled in:
+#
+option_list = []	# list of Option objects
+short_opts = ""		# string of short (single-character) options
+long_opts = []		# array of long (--) options
+opt_func = {}		# mapping of option strings to functions
 
-def opt_not_yet(opt, arg):
-    sys.stderr.write("Warning:  the %s option is not yet implemented\n" % opt)
+def options_init():
+    """Initialize command-line options processing.
+    
+    This is in a subroutine mainly so we can easily single-step over
+    it in the debugger.
+    """
 
-class Option:
-    """Class for command-line option information.
+    class Option:
+	"""Class for command-line option information.
 
-    This exists to provide a central location for everything
-    describing a command-line option, so that we can change
-    options without having to update the code to handle the
-    option in one place, the -h help message in another place,
-    etc.  There are no methods here, only attributes.
+	This exists to provide a central location for everything
+	describing a command-line option, so that we can change
+	options without having to update the code to handle the
+	option in one place, the -h help message in another place,
+	etc.  There are no methods here, only attributes.
 
-    You can initialize an Option with the following:
+	You can initialize an Option with the following:
 
 	func	The function that will be called when this
 		option is processed on the command line.
 		recognize the option, but it won't show up
 		in the -h output.
 
-    The following attribute is derived from the supplied attributes:
+	The following attribute is derived from the supplied attributes:
 
 	optstring
 		A string, with hyphens, describing the flags
 		for this option, as constructed from the
 		specified short, long and arg attributes.
 
-    All Option objects are stored in the global option_list list,
-    in the order in which they're created.  This is the list
-    that's used to generate -h output, so the order in which the
-    objects are created is the order in which they're printed.
+	All Option objects are stored in the global option_list list,
+	in the order in which they're created.  This is the list
+	that's used to generate -h output, so the order in which the
+	objects are created is the order in which they're printed.
 
-    The upshot is that specifying a command-line option and having
-    everything work correctly is a matter of defining a function to
-    process its command-line argument (set the right flag, update
-    the right value), and then creating an appropriate Option object
-    at the correct point in the code below.
-    """
+	The upshot is that specifying a command-line option and having
+	everything work correctly is a matter of defining a function to
+	process its command-line argument (set the right flag, update
+	the right value), and then creating an appropriate Option object
+	at the correct point in the code below.
+	"""
 
-    def __init__(self, func = None, helpline = None,
+	def __init__(self, func = None, helpline = None,
 		 short = None, long = None, arg = None,
 		 help = None, future = None):
-	self.func = func
-	self.short = short
-	self.long = long
-	self.arg = arg
-	self.help = help
-	opts = []
-	if self.short:
-	    for c in self.short:
+	    self.func = func
+	    self.short = short
+	    self.long = long
+	    self.arg = arg
+	    self.help = help
+	    opts = []
+	    if self.short:
+		for c in self.short:
+		    if arg:
+			c = c + " " + arg
+		    opts = opts + ['-' + c]
+	    if self.long:
+		l = self.long
 		if arg:
-		    c = c + " " + arg
-		opts = opts + ['-' + c]
-	if self.long:
-	    l = self.long
-	    if arg:
-		l = map(lambda x,a=arg: x + "=" + a, self.long)
-	    opts = opts + map(lambda x: '--' + x, l)
-	self.optstring = string.join(opts, ', ')
-	if helpline:
-	    self.helpline = helpline
-	elif help and not future:
-	    if len(self.optstring) <= 26:
-		sep = " " * (28 - len(self.optstring))
+		    l = map(lambda x,a=arg: x + "=" + a, self.long)
+		opts = opts + map(lambda x: '--' + x, l)
+	    self.optstring = string.join(opts, ', ')
+	    if helpline:
+		self.helpline = helpline
+	    elif help and not future:
+		if len(self.optstring) <= 26:
+		    sep = " " * (28 - len(self.optstring))
+		else:
+		    sep = self.helpstring = "\n" + " " * 30
+		self.helpline = "  " + self.optstring + sep + self.help
 	    else:
-		sep = self.helpstring = "\n" + " " * 30
-	    self.helpline = "  " + self.optstring + sep + self.help
-	else:
-	    self.helpline = None
-	global option_list
-	option_list.append(self)
+		self.helpline = None
+	    global option_list
+	    option_list.append(self)
 
-# In the following instantiations, the help string should be no
-# longer than 49 characters.  Use the following as a guide:
-#	help = "1234567890123456789012345678901234567890123456789"
+    # Generic routine for to-be-written options, used by multiple
+    # options below.
 
-def opt_ignore(opt, arg):
-    sys.stderr.write("Warning:  ignoring %s option\n" % opt)
+    def opt_not_yet(opt, arg):
+        sys.stderr.write("Warning:  the %s option is not yet implemented\n"
+			  % opt)
 
-Option(func = opt_ignore,
+    # In the following instantiations, the help string should be no
+    # longer than 49 characters.  Use the following as a guide:
+    #	help = "1234567890123456789012345678901234567890123456789"
+
+    def opt_ignore(opt, arg):
+	sys.stderr.write("Warning:  ignoring %s option\n" % opt)
+
+    Option(func = opt_ignore,
 	short = 'bmSt', long = ['no-keep-going', 'stop', 'touch'],
 	help = "Ignored for compatibility.")
 
-Option(func = opt_not_yet,
+    Option(func = opt_not_yet,
 	short = 'c', long = ['clean', 'remove'],
 	help = "Remove specified targets and dependencies.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	long = ['cache-disable', 'no-cache'],
 	help = "Do not retrieve built targets from Cache.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	long = ['cache-force', 'cache-populate'],
 	help = "Copy already-built targets into the Cache.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	long = ['cache-show'],
 	help = "Print what would have built Cached targets.")
 
-def opt_C(opt, arg):
-    try:
-	os.chdir(arg)
-    except:
-	sys.stderr.write("Could not change directory to 'arg'\n")
+    def opt_C(opt, arg):
+	try:
+	    os.chdir(arg)
+	except:
+	    sys.stderr.write("Could not change directory to 'arg'\n")
 
-Option(func = opt_C,
+    Option(func = opt_C,
 	short = 'C', long = ['directory'], arg = 'DIRECTORY',
 	help = "Change to DIRECTORY before doing anything.")
 
-Option(func = opt_not_yet,
+    Option(func = opt_not_yet,
 	short = 'd',
 	help = "Print file dependency information.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	long = ['debug'], arg = 'FLAGS',
 	help = "Print various types of debugging information.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	short = 'e', long = ['environment-overrides'],
 	help = "Environment variables override makefiles.")
 
-def opt_f(opt, arg):
-    global Scripts
-    Scripts.append(arg)
+    def opt_f(opt, arg):
+	global Scripts
+	Scripts.append(arg)
 
-Option(func = opt_f,
+    Option(func = opt_f,
 	short = 'f', long = ['file', 'makefile', 'sconstruct'], arg = 'FILE',
 	help = "Read FILE as the top-level SConstruct file.")
 
-def opt_help(opt, arg):
-    global local_help
-    local_help = 1
+    def opt_help(opt, arg):
+	global local_help
+	local_help = 1
 
-Option(func = opt_help,
+    Option(func = opt_help,
 	short = 'h', long = ['help'],
 	help = "Print defined help message, or this one.")
 
-def opt_help_options(opt, arg):
-    PrintUsage()
-    sys.exit(0)
+    def opt_help_options(opt, arg):
+	PrintUsage()
+	sys.exit(0)
 
-Option(func = opt_help_options,
+    Option(func = opt_help_options,
 	short = 'H', long = ['help-options'],
 	help = "Print this message and exit.")
 
-Option(func = opt_not_yet,
+    Option(func = opt_not_yet,
 	short = 'i', long = ['ignore-errors'],
 	help = "Ignore errors from build actions.")
 
-Option(func = opt_not_yet,
+    Option(func = opt_not_yet,
 	short = 'I', long = ['include-dir'], arg = 'DIRECTORY',
 	help = "Search DIRECTORY for imported Python modules.")
 
-def opt_j(opt, arg):
-    global num_jobs
-    try:
-        num_jobs = int(arg)
-    except:
-        PrintUsage()
-        sys.exit(1)
+    def opt_j(opt, arg):
+	global num_jobs
+	try:
+            num_jobs = int(arg)
+	except:
+            PrintUsage()
+            sys.exit(1)
 
-    if num_jobs <= 0:
-        PrintUsage()
-        sys.exit(1)
+	if num_jobs <= 0:
+            PrintUsage()
+            sys.exit(1)
 
-Option(func = opt_j,
+    Option(func = opt_j,
 	short = 'j', long = ['jobs'], arg = 'N',
 	help = "Allow N jobs at once.")
 
-Option(func = opt_not_yet,
+    Option(func = opt_not_yet,
 	short = 'k', long = ['keep-going'],
 	help = "Keep going when a target can't be made.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	short = 'l', long = ['load-average', 'max-load'], arg = 'N',
 	help = "Don't start multiple jobs unless load is below N.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	long = ['list-derived'],
 	help = "Don't build; list files that would be built.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	long = ['list-actions'],
 	help = "Don't build; list files and build actions.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	long = ['list-where'],
 	help = "Don't build; list files and where defined.")
 
-def opt_n(opt, arg):
-    scons.Builder.execute_actions = None
+    def opt_n(opt, arg):
+	scons.Builder.execute_actions = None
 
-Option(func = opt_n,
+    Option(func = opt_n,
 	short = 'n', long = ['no-exec', 'just-print', 'dry-run', 'recon'],
 	help = "Don't build; just print commands.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	short = 'o', long = ['old-file', 'assume-old'], arg = 'FILE',
 	help = "Consider FILE to be old; don't rebuild it.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	long = ['override'], arg = 'FILE',
 	help = "Override variables as specified in FILE.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	short = 'p',
 	help = "Print internal environments/objects.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	short = 'q', long = ['question'],
 	help = "Don't build; exit status says if up to date.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	short = 'rR', long = ['no-builtin-rules', 'no-builtin-variables'],
 	help = "Clear default environments and variables.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	long = ['random'],
 	help = "Build dependencies in random order.")
 
-def opt_s(opt, arg):
-    scons.Builder.print_actions = None
+    def opt_s(opt, arg):
+	scons.Builder.print_actions = None
 
-Option(func = opt_s,
+    Option(func = opt_s,
 	short = 's', long = ['silent', 'quiet'],
 	help = "Don't print commands.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	short = 'u', long = ['up', 'search-up'],
 	help = "Search up directory tree for SConstruct.")
 
-def option_v(opt, arg):
-    print "SCons version __VERSION__, by Steven Knight et al."
-    print "Copyright 2001 Steven Knight"
-    sys.exit(0)
+    def option_v(opt, arg):
+	print "SCons version __VERSION__, by Steven Knight et al."
+	print "Copyright 2001 Steven Knight"
+	sys.exit(0)
 
-Option(func = option_v,
+    Option(func = option_v,
 	short = 'v', long = ['version'],
 	help = "Print the SCons version number and exit.")
 
-Option(func = opt_not_yet,
+    Option(func = opt_not_yet,
 	short = 'w', long = ['print-directory'],
 	help = "Print the current directory.")
 
-Option(func = opt_not_yet,
+    Option(func = opt_not_yet,
 	long = ['no-print-directory'],
 	help = "Turn off -w, even if it was turned on implicitly.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	long = ['write-filenames'], arg = 'FILE',
 	help = "Write all filenames examined into FILE.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	short = 'W', long = ['what-if', 'new-file', 'assume-new'], arg = 'FILE',
 	help = "Consider FILE to be changed.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	long = ['warn-undefined-variables'],
 	help = "Warn when an undefined variable is referenced.")
 
-Option(func = opt_not_yet, future = 1,
+    Option(func = opt_not_yet, future = 1,
 	short = 'Y', long = ['repository'], arg = 'REPOSITORY',
 	help = "Search REPOSITORY for source and target files.")
 
-short_opts = ""
-long_opts = []
-opt_func = {}
+    global short_opts
+    global long_opts
+    global opt_func
+    for o in option_list:
+	if o.short:
+	    if o.func:
+		for c in o.short:
+		    opt_func['-' + c] = o.func
+	    short_opts = short_opts + o.short
+	    if o.arg:
+		short_opts = short_opts + ":"
+	if o.long:
+	    if o.func:
+		for l in o.long:
+		    opt_func['--' + l] = o.func
+	    if o.arg:
+		long_opts = long_opts + map(lambda a: a + "=", o.long)
+	    else:
+		long_opts = long_opts + o.long
 
-for o in option_list:
-    if o.short:
-	if o.func:
-	    for c in o.short:
-		opt_func['-' + c] = o.func
-	short_opts = short_opts + o.short
-	if o.arg:
-	    short_opts = short_opts + ":"
-    if o.long:
-	if o.func:
-	    for l in o.long:
-		opt_func['--' + l] = o.func
-	if o.arg:
-	    long_opts = long_opts + map(lambda a: a + "=", o.long)
-	else:
-	    long_opts = long_opts + o.long
+options_init()
 
 
 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.