mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
160 lines
4.5 KiB
Dart
160 lines
4.5 KiB
Dart
// Copyright 2016 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'dart:async';
|
|
import 'dart:io';
|
|
|
|
import 'package:path/path.dart' as path;
|
|
|
|
import '../base/os.dart';
|
|
import '../base/process.dart';
|
|
import '../cache.dart';
|
|
import '../doctor.dart';
|
|
import '../globals.dart';
|
|
import '../runner/flutter_command.dart';
|
|
|
|
/// This setup command will install dependencies necessary for Flutter development.
|
|
///
|
|
/// This is a hidden command, and is currently designed to work in a custom kiosk
|
|
/// environment, but may be generalized in the future.
|
|
class SetupCommand extends FlutterCommand {
|
|
SetupCommand({ this.hidden: false });
|
|
|
|
@override
|
|
final String name = 'setup';
|
|
|
|
@override
|
|
final String description = 'Setup a machine to support Flutter development.';
|
|
|
|
@override
|
|
final bool hidden;
|
|
|
|
@override
|
|
bool get requiresProjectRoot => false;
|
|
|
|
@override
|
|
Future<int> runInProject() async {
|
|
printStatus('Running Flutter setup...');
|
|
|
|
// setup brew on mac
|
|
if (os.isMacOS) {
|
|
printStatus('\nChecking brew:');
|
|
|
|
if (os.which('brew') == null) {
|
|
printError('homebrew is not installed; please install at http://brew.sh/.');
|
|
} else {
|
|
printStatus('brew is installed.');
|
|
|
|
await runCommandAndStreamOutput(<String>['brew', 'install', 'ideviceinstaller']);
|
|
await runCommandAndStreamOutput(<String>['brew', 'install', 'ios-deploy']);
|
|
}
|
|
}
|
|
|
|
// setup atom
|
|
printStatus('\nChecking Atom:');
|
|
String apmPath = os.which('apm')?.path;
|
|
if (apmPath == null && FileSystemEntity.isFileSync('/usr/local/bin/apm'))
|
|
apmPath = '/usr/local/bin/apm';
|
|
if (apmPath == null && FileSystemEntity.isFileSync('/usr/bin/apm'))
|
|
apmPath = '/usr/bin/apm';
|
|
if (apmPath == null) {
|
|
final String expectedLocation = '/Applications/Atom.app/Contents/Resources/app/apm/bin/apm';
|
|
if (FileSystemEntity.isFileSync(expectedLocation))
|
|
apmPath = expectedLocation;
|
|
}
|
|
|
|
if (apmPath == null) {
|
|
printError('Unable to locate the Atom installation.');
|
|
} else {
|
|
printStatus('apm command available at $apmPath');
|
|
|
|
AtomValidator atomValidator = new AtomValidator();
|
|
|
|
if (!atomValidator.hasPackage('dartlang'))
|
|
await runCommandAndStreamOutput(<String>[apmPath, 'install', 'dartlang']);
|
|
else
|
|
printStatus('dartlang plugin installed');
|
|
|
|
if (!atomValidator.hasPackage('flutter'))
|
|
await runCommandAndStreamOutput(<String>[apmPath, 'install', 'flutter']);
|
|
else
|
|
printStatus('flutter plugin installed');
|
|
|
|
// Set up the ~/.atom/config.cson file - make sure the path the the
|
|
// flutter and dart sdks are correct.
|
|
_updateAtomConfigFile();
|
|
}
|
|
|
|
// run doctor
|
|
printStatus('\nFlutter doctor:');
|
|
bool goodInstall = doctor.diagnose();
|
|
|
|
// Validate that flutter is available on the path.
|
|
if (os.which('flutter') == null) {
|
|
printError(
|
|
'\nThe flutter command is not available on the path.\n'
|
|
'Please set up your PATH environment variable to point to the flutter/bin directory.'
|
|
);
|
|
} else {
|
|
printStatus('\nThe flutter command is available on the path.');
|
|
}
|
|
|
|
if (goodInstall)
|
|
printStatus('\nFlutter setup complete!');
|
|
|
|
return goodInstall ? 0 : 1;
|
|
}
|
|
|
|
// Quick-and-dirty manipulation of the cson file.
|
|
void _updateAtomConfigFile() {
|
|
// flutter:
|
|
// flutterRoot: "..."
|
|
// dartlang:
|
|
// sdkLocation: "..."
|
|
|
|
String flutterRoot = path.normalize(path.absolute(Cache.flutterRoot));
|
|
String sdkLocation = path.join(flutterRoot, 'bin/cache/dart-sdk');
|
|
|
|
File file = AtomValidator.getConfigFile();
|
|
|
|
if (file.existsSync()) {
|
|
String cson = file.readAsStringSync();
|
|
cson = cson.trimRight() + '\n';
|
|
|
|
List<String> lines = cson.split('\n').map((String line) => line.trim()).toList();
|
|
|
|
if (!lines.contains('flutter:')) {
|
|
cson += '''
|
|
flutter:
|
|
flutterRoot: "$flutterRoot"
|
|
''';
|
|
}
|
|
|
|
if (!lines.contains('dartlang:')) {
|
|
cson += '''
|
|
dartlang:
|
|
sdkLocation: "$sdkLocation"
|
|
''';
|
|
}
|
|
|
|
if (cson.trim() != file.readAsStringSync().trim()) {
|
|
printStatus('Updating ${file.path}');
|
|
file.writeAsStringSync(cson);
|
|
}
|
|
} else {
|
|
// Create a new config file.
|
|
printStatus('Creating ${file.path}');
|
|
|
|
String cson = '''
|
|
"*":
|
|
flutter:
|
|
flutterRoot: "$flutterRoot"
|
|
dartlang:
|
|
sdkLocation: "$sdkLocation"
|
|
''';
|
|
file.writeAsStringSync(cson);
|
|
}
|
|
}
|
|
}
|