/* 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; }