Merge pull request #2120 from zhaojuntao/Add-tools-silent

[tools] pyconfig 增加 silent 模式,不显示窗口但可以更新 .config 和 rtconfig.h
This commit is contained in:
Bernard Xiong 2018-12-26 13:03:27 +08:00 committed by GitHub
commit 9255a44375
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 83 additions and 10 deletions

View File

@ -131,7 +131,7 @@ def GenCconfigFile(env, BuildOptions):
f = open('cconfig.h', 'r') f = open('cconfig.h', 'r')
if f: if f:
contents = f.read() contents = f.read()
f.close(); f.close()
prep = PatchedPreProcessor() prep = PatchedPreProcessor()
prep.process_contents(contents) prep.process_contents(contents)
@ -349,8 +349,20 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
action = 'store_true', action = 'store_true',
default = False, default = False,
help = 'make menuconfig for RT-Thread BSP') help = 'make menuconfig for RT-Thread BSP')
if GetOption('pyconfig'): AddOption('--pyconfig-silent',
dest = 'pyconfig_silent',
action = 'store_true',
default = False,
help = 'Don`t show pyconfig window')
if GetOption('pyconfig_silent'):
from menuconfig import pyconfig_silent
pyconfig_silent(Rtt_Root)
exit(0)
elif GetOption('pyconfig'):
from menuconfig import pyconfig from menuconfig import pyconfig
pyconfig(Rtt_Root) pyconfig(Rtt_Root)
exit(0) exit(0)

View File

@ -251,3 +251,31 @@ def pyconfig(RTT_ROOT):
if mtime != mtime2: if mtime != mtime2:
mk_rtconfig(fn) mk_rtconfig(fn)
# pyconfig_silent for windows and linux
def pyconfig_silent(RTT_ROOT):
import pymenuconfig
print("In pyconfig silent mode. Don`t display menuconfig window.")
touch_env()
env_dir = get_env_dir()
os.environ['PKGS_ROOT'] = os.path.join(env_dir, 'packages')
fn = '.config'
if os.path.isfile(fn):
mtime = os.path.getmtime(fn)
else:
mtime = -1
pymenuconfig.main(['--kconfig', 'Kconfig', '--config', '.config', '--silent', 'True'])
if os.path.isfile(fn):
mtime2 = os.path.getmtime(fn)
else:
mtime2 = -1
# make rtconfig.h
if mtime != mtime2:
mk_rtconfig(fn)

View File

@ -543,8 +543,11 @@ class MenuConfig(object):
('Save as', ACTION_SAVE_AS), ('Save as', ACTION_SAVE_AS),
) )
def __init__(self, kconfig): def __init__(self, kconfig, __silent=None):
self.kconfig = kconfig self.kconfig = kconfig
self.__silent = __silent
if self.__silent is True:
return
# Instantiate Tk widgets # Instantiate Tk widgets
self.root = tk.Tk() self.root = tk.Tk()
@ -728,6 +731,8 @@ class MenuConfig(object):
def _close_window(self): def _close_window(self):
if self.prevent_losing_changes(): if self.prevent_losing_changes():
print('Exiting..') print('Exiting..')
if self.__silent is True:
return
self.root.destroy() self.root.destroy()
def _action_exit(self): def _action_exit(self):
@ -949,6 +954,8 @@ class MenuConfig(object):
- current config path - current config path
- status string (see set_status_string()) - status string (see set_status_string())
""" """
if self.__silent is True:
return
self.tk_status.set('{} [{}] {}'.format( self.tk_status.set('{} [{}] {}'.format(
'<UNSAVED>' if self.unsaved_changes else '', '<UNSAVED>' if self.unsaved_changes else '',
self.config_path if self.config_path else '', self.config_path if self.config_path else '',
@ -1017,6 +1024,10 @@ class MenuConfig(object):
self.mark_as_changed() self.mark_as_changed()
if not self.unsaved_changes: if not self.unsaved_changes:
return True return True
if self.__silent:
saved = self.save_config()
return saved
res = messagebox.askyesnocancel( res = messagebox.askyesnocancel(
parent=self.root, parent=self.root,
title='Unsaved changes', title='Unsaved changes',
@ -1056,11 +1067,13 @@ class MenuConfig(object):
self.kconfig.load_config(path) self.kconfig.load_config(path)
except IOError as e: except IOError as e:
self.set_status_string('Failed to load: \'{}\''.format(path)) self.set_status_string('Failed to load: \'{}\''.format(path))
self.refresh_display() if not self.__silent:
self.refresh_display()
print('Failed to load config \'{}\': {}'.format(path, e)) print('Failed to load config \'{}\': {}'.format(path, e))
return False return False
self.set_status_string('Opened config') self.set_status_string('Opened config')
self.refresh_display() if not self.__silent:
self.refresh_display()
return True return True
def save_config(self, force_file_dialog=False): def save_config(self, force_file_dialog=False):
@ -1154,19 +1167,39 @@ def main(argv=None):
type=str, type=str,
help='path to .config file to load' help='path to .config file to load'
) )
if "--silent" in argv:
parser.add_argument(
'--silent',
dest = '_silent_',
type=str,
help='silent mode, not show window'
)
args = parser.parse_args(argv) args = parser.parse_args(argv)
kconfig_path = args.kconfig kconfig_path = args.kconfig
config_path = args.config config_path = args.config
# Verify that Kconfig file exists # Verify that Kconfig file exists
if not os.path.isfile(kconfig_path): if not os.path.isfile(kconfig_path):
raise RuntimeError('\'{}\': no such file'.format(kconfig_path)) raise RuntimeError('\'{}\': no such file'.format(kconfig_path))
# Parse Kconfig files # Parse Kconfig files
kconf = kconfiglib.Kconfig(filename=kconfig_path) kconf = kconfiglib.Kconfig(filename=kconfig_path)
mc = MenuConfig(kconf)
# If config file was specified, load it if "--silent" not in argv:
if config_path: print("In normal mode. Will show menuconfig window.")
mc.open_config(config_path) mc = MenuConfig(kconf)
tk.mainloop() # If config file was specified, load it
if config_path:
mc.open_config(config_path)
print("Enter mainloop. Waiting...")
tk.mainloop()
else:
print("In silent mode. Don`t show menuconfig window.")
mc = MenuConfig(kconf, True)
# If config file was specified, load it
if config_path:
mc.open_config(config_path)
mc._close_window()
if __name__ == '__main__': if __name__ == '__main__':