more general module loading; do not use __dict__ directly
[mass-build.git] / mass_build.py
index 93ae5a3280408cc800c7b4fa9a21e35e1021535e..c5f4dddf9a1f11fbbab85b882baa3dc824b067f4 100755 (executable)
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 
 # 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
 
 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):
 # an entire Project
 class Project:
        def __init__(self, folder, config):
@@ -51,7 +60,7 @@ class Project:
 
 # read command-line arguments
 parser = argparse.ArgumentParser(description='Update and build a bunch of stuff')
 
 # 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",
                     dest="config", default="mass-build.conf",
                     help="mass-build config file")
 parser.add_argument("--reconfigure",
@@ -78,11 +87,8 @@ args = parser.parse_args()
 if args.reset_source and not args.update:
        raise Exception("Can not reset sources without doing an update")
 
 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
 
 # initialise variables holding the configuration
 allProjects = OrderedDict() # all projects
@@ -91,7 +97,7 @@ workProjects = [] # projects we work on
 
 # copy all items which don't exist below, except for those in the exclude list
 def inherit(subConfig, superConfig, exclude = ('name', '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]
 
                if (not name in subConfig) and (not name in exclude):
                        subConfig[name] = superConfig[name]