#!/usr/bin/env python import argparse import logging import os import shutil import sys from distutils.spawn import find_executable from subprocess import call def parse_args(): arg_parser = argparse.ArgumentParser() arg_parser.add_argument( '-a', '--audio-driver', help='Audio driver to build (Windows only, default: %(default)s)') arg_parser.add_argument( '--cmake', default=find_executable("cmake"), help='Path to CMake executable (default: %(default)s)') arg_parser.add_argument( '-c', '--configuration', help='Build configuration to use (not supported by IDE generators)') arg_parser.add_argument( '-g', '--generator', help='CMake generator to use (default: Determined by CMake)') arg_parser.add_argument( '-f', '--flags', help='Additional CMake flags') arg_parser.add_argument( '--thread-description', help='Set thread description. (Windows only)') return arg_parser.parse_args(sys.argv[1:]) def build_cmake_args(args): if args.cmake is None: logging.error('CMake not found, please use the --cmake option') return None cmake_args = [] cmake_args.append(args.cmake) if args.generator is not None: cmake_args.append('-G') cmake_args.append(args.generator) if args.configuration is not None: cmake_args.append('-DCMAKE_BUILD_TYPE=' + args.configuration) if args.flags is not None: cmake_args.append(args.flags) if sys.platform == 'win32': if args.audio_driver is None or args.audio_driver == 'Asio': cmake_args.append('-DLINK_BUILD_ASIO=ON') else: cmake_args.append('-DLINK_BUILD_ASIO=OFF') if args.thread_description == 'ON': cmake_args.append('-DLINK_WINDOWS_SETTHREADDESCRIPTION=ON') elif 'linux' in sys.platform: if args.audio_driver == 'Jack': cmake_args.append('-DLINK_BUILD_JACK=ON') # This must always be last cmake_args.append('..') return cmake_args def configure(args): scripts_dir = os.path.dirname(os.path.realpath(__file__)) root_dir = os.path.join(scripts_dir, os.pardir) build_dir = os.path.join(root_dir, 'build') if os.path.exists(build_dir): logging.info('Removing existing build directory') shutil.rmtree(build_dir) logging.debug('Creating build directory') os.mkdir(build_dir) os.chdir(build_dir) cmake_args = build_cmake_args(args) if cmake_args is None: return 1 logging.info('Running CMake') return call(cmake_args) if __name__ == '__main__': logging.basicConfig(format='%(message)s', level=logging.INFO, stream=sys.stdout) sys.exit(configure(parse_args()))