blob: db426426236150ec0113cd9a1f9ff79500a9e076 [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Very primitive arguments parser for the generator commands.
import 'dart:io';
typedef Flags = ({
bool verbose,
bool update,
bool dryrun,
bool optimize,
bool acceptLicenseChange,
File? targetFile,
});
Flags parseArgs(
List<String> args,
String toolName, {
bool allowOptimize = false,
bool allowFile = true,
}) {
var update = false;
var dryrun = false;
var verbose = false;
var optimize = false;
var acceptLicenseChange = false;
File? output;
for (var arg in args) {
if (arg == '-h' || arg == '--help') {
stderr
..writeln(
"Usage: $toolName.dart [-u] ${allowOptimize ? "[-i|-o] " : ""}[-n]"
"${allowFile ? " <targetFile>" : ""}",
)
..writeln('-h | --help : Print this help and exit')
..writeln('-u | --update : Fetch new data files')
..writeln('--accept-license : Accept a changed license')
..writeln(
'-n | --dryrun : Write to stdout instead of target file',
);
if (allowOptimize) {
stderr.writeln(
'-o | -i | --optimize : Optimize size parameters for tables',
);
}
stderr.writeln('-v | --verbose : Print more information');
if (allowFile) {
stderr.writeln('If no target file is given, writes to stdout.');
}
exit(0);
} else if (arg == '-u' || arg == '--update') {
update = true;
} else if (arg == '-n' || arg == '--dryrun') {
dryrun = true;
} else if (arg == '-v' || arg == '--verbose') {
verbose = true;
} else if (arg == '--accept-license') {
acceptLicenseChange = true;
} else if (allowOptimize && arg == '-o' ||
arg == '-i' ||
arg.startsWith('--opt')) {
// Try to find a better size for the table.
// No need to do this unless the representation changes or
// the input tables are updated.
// The current value is optimal for the data and representation used.
optimize = true;
} else if (arg.startsWith('-') || !allowFile) {
stderr.writeln('Unrecognized flag: $arg');
} else {
output = File(arg);
}
}
return (
acceptLicenseChange: acceptLicenseChange,
dryrun: dryrun,
optimize: optimize,
targetFile: output,
update: update,
verbose: verbose,
);
}