blob: ecb465c139403df4a054c36a33fae72f3eefc9fa [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// ignore_for_file: avoid_print
// Generates the pigeon output files needed for platform_test tests.
//
// Eventually this may get more options to control which files are generated,
// but for now it always generates everything needed for the platform unit
// tests.
import 'dart:io' show Platform, exit;
import 'package:args/args.dart';
import 'package:path/path.dart' as p;
import 'shared/generation.dart';
const String _helpFlag = 'help';
const String _formatFlag = 'format';
const String _noFormatFlag = 'no-format';
const String _files = 'files';
const String _test = 'test';
const String _example = 'example';
const List<String> _fileGroups = <String>[_test, _example];
Future<void> main(List<String> args) async {
final ArgParser parser = ArgParser()
..addFlag(
_formatFlag,
abbr: 'f',
help:
'Autoformat after generation. This flag is no longer needed, as this behavior is the default',
defaultsTo: true,
hide: true,
)
..addFlag(
_noFormatFlag,
abbr: 'n',
help: 'Do not autoformat after generation.',
)
..addFlag(_helpFlag,
negatable: false, abbr: 'h', help: 'Print this reference.')
..addMultiOption(_files,
help:
'Select specific groups of files to generate; $_test or $_example. Defaults to both.',
allowed: _fileGroups);
final ArgResults argResults = parser.parse(args);
if (argResults.wasParsed(_helpFlag)) {
print('''
usage: dart run tool/generate.dart [options]
${parser.usage}''');
exit(0);
}
final String baseDir = p.dirname(p.dirname(Platform.script.toFilePath()));
final List<String> toGenerate = argResults.wasParsed(_files)
? argResults[_files] as List<String>
: _fileGroups;
if (toGenerate.contains(_test)) {
print('Generating platform_test/ output...');
final int generateExitCode = await generateTestPigeons(baseDir: baseDir);
if (generateExitCode == 0) {
print('Generation complete!');
} else {
print('Generation failed; see above for errors.');
exit(generateExitCode);
}
}
if (toGenerate.contains(_example)) {
print('Generating example/ output...');
final int generateExitCode = await generateExamplePigeons();
if (generateExitCode == 0) {
print('Generation complete!');
} else {
print('Generation failed; see above for errors.');
exit(generateExitCode);
}
}
if (!argResults.wasParsed(_noFormatFlag)) {
print('Formatting generated output...');
final int formatExitCode =
await formatAllFiles(repositoryRoot: p.dirname(p.dirname(baseDir)));
if (formatExitCode != 0) {
print('Formatting failed; see above for errors.');
exit(formatExitCode);
}
}
}