# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-import vcs, build_system, imp
+import vcs, build_system
import argparse, os, sys, subprocess
from collections import OrderedDict
+# helper funcrions
+def load_module(name, path, write_bytecode = False):
+ import importlib.machinery
+ old_val = sys.dont_write_bytecode
+ sys.dont_write_bytecode = not write_bytecode
+ module = importlib.machinery.SourceFileLoader(name, path).load_module()
+ sys.dont_write_bytecode = old_val
+ return module
+
# an entire Project
class Project:
def __init__(self, folder, config):
# read command-line arguments
parser = argparse.ArgumentParser(description='Update and build a bunch of stuff')
-parser.add_argument("-c, --config",
+parser.add_argument("-c", "--config",
dest="config", default="mass-build.conf",
help="mass-build config file")
parser.add_argument("--reconfigure",
if args.reset_source and not args.update:
raise Exception("Can not reset sources without doing an update")
-# load config
-old_val = sys.dont_write_bytecode
-sys.dont_write_bytecode = True
-config = imp.load_source('config', args.config).__dict__
-sys.dont_write_bytecode = old_val
+# load config as dictionary
+config = vars(load_module('config', args.config))
# initialise variables holding the configuration
allProjects = OrderedDict() # all projects
# copy all items which don't exist below, except for those in the exclude list
def inherit(subConfig, superConfig, exclude = ('name', 'projects')):
- for name in list(superConfig.keys()):
+ for name in superConfig.keys():
if (not name in subConfig) and (not name in exclude):
subConfig[name] = superConfig[name]