From 7ef0515f8b5bea6d2bcbed9a89df197487555eb0 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Thu, 14 Jun 2018 04:17:34 +0200 Subject: [PATCH] vs: Add convenience script to create a Visual Studio --- scripts/conan/create_vs_solution.py | 68 +++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100755 scripts/conan/create_vs_solution.py diff --git a/scripts/conan/create_vs_solution.py b/scripts/conan/create_vs_solution.py new file mode 100755 index 000000000..1423c4471 --- /dev/null +++ b/scripts/conan/create_vs_solution.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 + +import argparse +from pathlib import Path +import platform +import subprocess +import sys + +from conans.client import conan_api + + +openrw_path = Path(__file__).resolve().parents[2] +windows_profile = openrw_path / 'scripts' / 'conan' / 'windows' +cmake_generator_lookup = { + 2015: 'Visual Studio 14 2015', + 2017: 'Visual Studio 15 2017', +} +architectures = ['x64', 'x86'] + + +def to_cmake_generator(vs_version, arch): + cmake_generator = cmake_generator_lookup[vs_version] + if arch == 'x64': + cmake_generator = '{} Win64'.format(cmake_generator) + return cmake_generator + + +def create_solution(path, vs_version, arch): + conan, _, _ = conan_api.ConanAPIV1.factory() + conan.remote_add(remote='bincrafters', url='https://api.bintray.com/conan/bincrafters/public-conan', force=True) + conan.install(path=openrw_path, profile_name=windows_profile, generators=('cmake_multi',), + options=('openrw:viewer=False', ), settings=('build_type=Debug', ), install_folder=path) + conan.install(path=openrw_path, profile_name=windows_profile, generators=('cmake_multi',), + options=('openrw:viewer=False', ), settings=('build_type=Release', ), install_folder=path) + cmake_generator = to_cmake_generator(vs_version=vs_version, arch=arch) + subprocess.run([ + 'cmake', '-DUSE_CONAN=1', '-DBOOST_STATIC=TRUE', '-DBUILD_TESTS=1', + '-G{}'.format(cmake_generator), str(openrw_path), + ], cwd=path, check=True) + + +def main(): + parser = argparse.ArgumentParser(description='Create a Visual Studio solution for OpenRW.') + parser.add_argument('path', nargs='?', default=Path(), metavar='PATH', type=Path, help='Location to the solution') + parser.add_argument('-v', default=max(cmake_generator_lookup.keys()), choices=list(cmake_generator_lookup.keys()), + metavar='VERSION', dest='vs_version', + help='Version of Visual Studio (choices={})'.format(list(cmake_generator_lookup.keys()))) + parser.add_argument('-a', default=architectures[0], choices=architectures, metavar='ARCH', dest='arch', + help='Architecture to build (choices={})'.format(architectures)) + ns = parser.parse_args() + + if platform.system() != 'Windows': + print('This script can only generate Visual Studio solutions for Windows.', file=sys.stderr) + sys.exit(1) + + path = ns.path.resolve() + arch = ns.arch + vs_version = ns.vs_version + + print('Solution directory: {}'.format(path)) + print('Architecture: {}'.format(arch)) + print('Visual Studio version: {}'.format(vs_version)) + + create_solution(path=path, vs_version=vs_version, arch=arch) + + +if __name__ == '__main__': + main()