64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
from __future__ import print_function
|
|
import argparse
|
|
import os
|
|
import re
|
|
import sys
|
|
import subprocess
|
|
|
|
class BuildError(Exception): pass
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('file', nargs='?', default='', help='current filename')
|
|
parser.add_argument('-a', '--all', action='store_true', help='Build all targets')
|
|
parser.add_argument('-i', '--install', action='store_true', help='Install')
|
|
parser.add_argument('-p', '--plugin', action='store_true', help='Build specified plugin')
|
|
|
|
def find_build_folder():
|
|
# search for the one with the most recently modified Makefile
|
|
folder = None
|
|
mtime = 0
|
|
for f in os.listdir('.'):
|
|
if f.startswith('build'):
|
|
makefile = os.path.join(f, 'Makefile')
|
|
if os.path.isfile(makefile) and os.path.getmtime(makefile) > mtime:
|
|
folder = f
|
|
mtime = os.path.getmtime(makefile)
|
|
if not folder:
|
|
raise BuildError('No valid build folder found')
|
|
return folder
|
|
|
|
def get_plugin_name(filename):
|
|
filename = filename.replace('/devel', '')
|
|
match = re.search(r'plugins/(.+?)[/\.]', filename)
|
|
if match:
|
|
return match.group(1)
|
|
|
|
def run_command(cmd):
|
|
print('$ ' + ' '.join(cmd))
|
|
sys.stdout.flush()
|
|
if subprocess.call(cmd) != 0:
|
|
raise BuildError('command execution failed: ' + ' '.join(cmd))
|
|
|
|
def main(args):
|
|
os.chdir(find_build_folder())
|
|
print('Build folder:', os.getcwd())
|
|
cmd = ['make', '-j3']
|
|
|
|
if args.plugin:
|
|
plugin = get_plugin_name(args.file)
|
|
if not plugin:
|
|
raise BuildError('Cannot determine current plugin name from %r' % args.file)
|
|
cmd += [plugin + '/fast']
|
|
|
|
run_command(cmd)
|
|
|
|
if args.install:
|
|
run_command(['make', 'install/fast'])
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
main(parser.parse_args())
|
|
except BuildError as e:
|
|
print('** Error: ' + str(e))
|
|
sys.exit(1)
|