Add dev-scripts/build-all.dart

This script builds all our supported configurations.
Useful if you don't have access to KDAB CI, or if you don't want
to wait for the results.
This commit is contained in:
Sergio Martins
2020-12-19 17:51:29 +00:00
parent 8dad079df5
commit 3f661d0322

128
dev-scripts/build-all.dart Normal file
View File

@@ -0,0 +1,128 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> 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 <kddw-source-directory>
*/
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<String> cmakeConfigArguments() {
return [
"-G",
"Ninja",
cmakeVariables,
"-B",
buildDirectory(),
"-S",
s_sourceDirectory,
"--preset=" + name
];
}
List<String> cmakeBuildArguments() {
return ["--build", buildDirectory()];
}
Future<bool> 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<Preset> readPresets(var presetsFile) {
var presets = List<Preset>();
final jsonData = jsonDecode(cmakePresetsJson(presetsFile));
for (var presetData in jsonData['configurePresets']) {
presets.add(Preset.fromJson(presetData));
}
return presets;
}
Future<bool> 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<int> main(List<String> arguments) async {
if (arguments.length != 1) {
print("Usage: build-all.dart <src-directory>");
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;
}