
On 20 August 2014 05:47, Masahiro Yamada yamada.m@jp.panasonic.com wrote:
It looks silly to regenerate the boards.cfg even when it is already up to date.
The tool should exit with doing nothing if the boards.cfg is newer than any of defconfig, Kconfig and MAINTAINERS files.
Specify -f (--force) option to get the boards.cfg regenerated regardless its time stamp.
Signed-off-by: Masahiro Yamada yamada.m@jp.panasonic.com
Acked-by: Simon Glass sjg@chromium.org
Great idea.
tools/genboardscfg.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-)
diff --git a/tools/genboardscfg.py b/tools/genboardscfg.py index 13bb424..899db69 100755 --- a/tools/genboardscfg.py +++ b/tools/genboardscfg.py @@ -87,6 +87,51 @@ def get_make_cmd(): sys.exit('GNU Make not found') return ret[0].rstrip()
+def output_is_new():
- """Check if the boards.cfg file is up to date.
- Returns:
True if the boards.cfg file exists and is newer than any of
*_defconfig, MAINTAINERS and Kconfig*. False otherwise.
- """
- try:
ctime = os.path.getctime(BOARD_FILE)
- except OSError, exception:
if exception.errno == errno.ENOENT:
# return False on 'No such file or directory' error
return False
else:
raise
if not os.path.exists(BOARD_FILE) return False
would probably be enough.
- for (dirpath, dirnames, filenames) in os.walk(CONFIG_DIR):
for filename in fnmatch.filter(filenames, '*_defconfig'):
if fnmatch.fnmatch(filename, '.*'):
continue
filepath = os.path.join(dirpath, filename)
if ctime < os.path.getctime(filepath):
return False
- for (dirpath, dirnames, filenames) in os.walk('.'):
for filename in filenames:
if (fnmatch.fnmatch(filename, '*~') or
not fnmatch.fnmatch(filename, 'Kconfig*') and
not filename == 'MAINTAINERS'):
continue
filepath = os.path.join(dirpath, filename)
if ctime < os.path.getctime(filepath):
return False
- # Detect a board that has been removed since the current boards.cfg
- # was generated
- for line in open(BOARD_FILE):
if line[0] == '#' or line == '\n':
continue
defconfig = line.split()[6] + '_defconfig'
if not os.path.exists(os.path.join(CONFIG_DIR, defconfig)):
return False
- return True
### classes ### class MaintainersDatabase:
@@ -507,7 +552,7 @@ class BoardsFileGenerator:
self.in_progress = False
-def gen_boards_cfg(jobs): +def gen_boards_cfg(jobs=1, force=False): """Generate boards.cfg file.
The incomplete boards.cfg is deleted if an error (including
@@ -517,6 +562,10 @@ def gen_boards_cfg(jobs): jobs: The number of jobs to run simultaneously """ check_top_directory()
- if not force and output_is_new():
print "%s is up to date. Nothing to do." % BOARD_FILE
sys.exit(0)
- generator = BoardsFileGenerator() generator.generate(jobs)
@@ -525,7 +574,10 @@ def main(): # Add options here parser.add_option('-j', '--jobs', help='the number of jobs to run simultaneously')
- parser.add_option('-f', '--force', action="store_true", default=False,
(options, args) = parser.parse_args()help='regenerate the output even if it is new')
- if options.jobs: try: jobs = int(options.jobs)
@@ -538,7 +590,8 @@ def main(): except (OSError, ValueError): print 'info: failed to get the number of CPUs. Set jobs to 1' jobs = 1
- gen_boards_cfg(jobs)
- gen_boards_cfg(jobs, force=options.force)
if __name__ == '__main__': main() -- 1.9.1
Regards, Simon