1#!/usr/local/bin/python3.8 2# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai 3 4 5__license__ = 'GPL v3' 6__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>' 7__docformat__ = 'restructuredtext en' 8 9import sys, os 10 11 12def check_version_info(minver=(3, 7, 0)): 13 vi = sys.version_info 14 if vi < minver: 15 def fmt(v): 16 return '.'.join(map(str, v[:3])) 17 exit('calibre requires Python >= {}. Current Python version: {}'.format(fmt(minver), fmt(vi))) 18 19 20check_version_info() 21 22sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) 23 24import setup.commands as commands 25from setup import prints, get_warnings 26 27 28def option_parser(): 29 import optparse 30 parser = optparse.OptionParser() 31 parser.add_option( 32 '-c', 33 '--clean', 34 default=False, 35 action='store_true', 36 help=('Instead of running the command delete all files generated ' 37 'by the command')) 38 parser.add_option( 39 '--clean-backups', 40 default=False, 41 action='store_true', 42 help='Delete all backup files from the source tree') 43 parser.add_option( 44 '--clean-all', 45 default=False, 46 action='store_true', 47 help='Delete all machine generated files from the source tree') 48 return parser 49 50 51def clean_backups(): 52 for root, _, files in os.walk('.'): 53 for name in files: 54 for t in ('.pyc', '.pyo', '~', '.swp', '.swo'): 55 if name.endswith(t): 56 os.remove(os.path.join(root, name)) 57 58 59def main(args=sys.argv): 60 if len(args) == 1 or args[1] in ('-h', '--help'): 61 print('Usage: python', args[0], 'command', '[options]') 62 print('\nWhere command is one of:') 63 print() 64 for x in sorted(commands.__all__): 65 print('{:20} -'.format(x), end=' ') 66 c = getattr(commands, x) 67 desc = getattr(c, 'short_description', c.description) 68 print(desc) 69 70 print('\nTo get help on a particular command, run:') 71 print('\tpython', args[0], 'command -h') 72 return 1 73 74 command = args[1] 75 if command not in commands.__all__: 76 print(command, 'is not a recognized command.') 77 print('Valid commands:', ', '.join(commands.__all__)) 78 return 1 79 80 command = getattr(commands, command) 81 82 parser = option_parser() 83 command.add_all_options(parser) 84 parser.set_usage( 85 'Usage: python setup.py {} [options]\n\n'.format(args[1]) + command.description) 86 87 opts, args = parser.parse_args(args) 88 opts.cli_args = args[2:] 89 90 if opts.clean_backups: 91 clean_backups() 92 93 if opts.clean: 94 prints('Cleaning', args[1]) 95 command.clean() 96 return 0 97 98 if opts.clean_all: 99 for cmd in commands.__all__: 100 prints('Cleaning', cmd) 101 getattr(commands, cmd).clean() 102 return 0 103 104 command.run_all(opts) 105 106 warnings = get_warnings() 107 if warnings: 108 print() 109 prints('There were', len(warnings), 'warning(s):') 110 print() 111 for args, kwargs in warnings: 112 prints('*', *args, **kwargs) 113 print() 114 115 return 0 116 117 118if __name__ == '__main__': 119 sys.exit(main()) 120