[U-Boot] [PATCH 6/7] tools/genboardscfg.py: check if the boards.cfg is up to date
Simon Glass
sjg at chromium.org
Wed Aug 20 21:13:13 CEST 2014
On 20 August 2014 05:47, Masahiro Yamada <yamada.m at 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 at jp.panasonic.com>
Acked-by: Simon Glass <sjg at 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,
> + help='regenerate the output even if it is new')
> (options, args) = parser.parse_args()
> +
> 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
More information about the U-Boot
mailing list