diff --git a/dev-scripts/build-all.dart b/dev-scripts/build-all.dart new file mode 100644 index 00000000..1b15d927 --- /dev/null +++ b/dev-scripts/build-all.dart @@ -0,0 +1,128 @@ +/* + This file is part of KDDockWidgets. + + SPDX-FileCopyrightText: 2020 Klarälvdalens Datakonsult AB, a KDAB Group company + Author: Sérgio Martins + + SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only + + Contact KDAB at for commercial licensing options. +*/ + +/** + * This is an helper script which simply reads CMakePresets.json and builds those + * presets. It's just for quickly checking that every supported setup builds + * without having to wait for CI (or in case you don't have access to KDAB CI) + * + * Usage: + * $ dart build-all.dart + */ + +import 'dart:io'; +import 'dart:convert'; + +String s_sourceDirectory = ""; + +class Preset { + final String name; + final String buildDir; + String cmakeVariables = ""; + Preset.fromJson(var jsonData) + : name = jsonData['name'], + buildDir = jsonData['binaryDir'] { + final varsData = jsonData['cacheVariables']; + varsData.forEach((k, v) => cmakeVariables += ' -D' + k + '=' + v); + } + + String buildDirectory() { + return buildDir.replaceAll("\${sourceDir}", s_sourceDirectory); + } + + List cmakeConfigArguments() { + return [ + "-G", + "Ninja", + cmakeVariables, + "-B", + buildDirectory(), + "-S", + s_sourceDirectory, + "--preset=" + name + ]; + } + + List cmakeBuildArguments() { + return ["--build", buildDirectory()]; + } + + Future build() async { + if (!await runCMake(cmakeConfigArguments())) { + return false; + } + + if (!await runCMake(cmakeBuildArguments())) { + return false; + } + + return true; + } +} + +/// Returns the contents of the CMakePresets.json file +String cmakePresetsJson(presetsFile) { + var file = File(presetsFile); + if (!file.existsSync()) { + throw Exception('Not existent file'); + } + return file.readAsStringSync(); +} + +List readPresets(var presetsFile) { + var presets = List(); + + final jsonData = jsonDecode(cmakePresetsJson(presetsFile)); + for (var presetData in jsonData['configurePresets']) { + presets.add(Preset.fromJson(presetData)); + } + return presets; +} + +Future runCMake(var cmd) async { + print("Running: cmake " + cmd.join(' ')); + ProcessResult result = await Process.run('cmake', cmd); + if (result.exitCode != 0) { + print(result.stdout); + print(result.stderr); + return false; + } + + return true; +} + +Future main(List arguments) async { + if (arguments.length != 1) { + print("Usage: build-all.dart "); + return 1; + } + + s_sourceDirectory = arguments[0]; + final presetsFile = s_sourceDirectory + '/CMakePresets.json'; + + if (FileSystemEntity.typeSync(presetsFile) == FileSystemEntityType.notFound) { + print('ERROR: CMakePresets.json file not found in the source directory'); + return 1; + } + + var presets = readPresets(presetsFile); + for (var preset in presets) { + if (preset.name == 'python') + continue; // TODO: blacklisted as it's not building on my setup yet + + if (!await preset.build()) { + return 1; + } + } + + print("Success!!"); + return 0; +}