|
@@ -85,6 +85,52 @@ 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 as exception:
|
|
|
+ if exception.errno == errno.ENOENT:
|
|
|
+ # return False on 'No such file or directory' error
|
|
|
+ return False
|
|
|
+ else:
|
|
|
+ raise
|
|
|
+
|
|
|
+ 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
|
|
|
+ with open(BOARD_FILE) as f:
|
|
|
+ for line in f:
|
|
|
+ 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:
|
|
|
|
|
@@ -503,7 +549,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
|
|
@@ -513,6 +559,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)
|
|
|
|
|
@@ -521,7 +571,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)
|
|
@@ -534,7 +587,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()
|