application_package.dart 2.28 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5 6
// @dart = 2.8

7 8 9 10
import 'package:meta/meta.dart';

import '../application_package.dart';
import '../base/file_system.dart';
11
import '../base/utils.dart';
12
import '../build_info.dart';
13
import '../cmake.dart';
14
import '../cmake_project.dart';
15
import '../globals_null_migrated.dart' as globals;
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

abstract class WindowsApp extends ApplicationPackage {
  WindowsApp({@required String projectBundleId}) : super(id: projectBundleId);

  /// Creates a new [WindowsApp] from a windows sub project.
  factory WindowsApp.fromWindowsProject(WindowsProject project) {
    return BuildableWindowsApp(
      project: project,
    );
  }

  /// Creates a new [WindowsApp] from an existing executable.
  ///
  /// `applicationBinary` is the path to the executable.
  factory WindowsApp.fromPrebuiltApp(FileSystemEntity applicationBinary) {
    return PrebuiltWindowsApp(
      executable: applicationBinary.path,
    );
  }

  @override
  String get displayName => id;

  String executable(BuildMode buildMode);
}

class PrebuiltWindowsApp extends WindowsApp {
  PrebuiltWindowsApp({
    @required String executable,
  }) : _executable = executable,
       super(projectBundleId: executable);

  final String _executable;

  @override
  String executable(BuildMode buildMode) => _executable;

  @override
  String get name => _executable;
}

class BuildableWindowsApp extends WindowsApp {
  BuildableWindowsApp({
    @required this.project,
60
  }) : super(projectBundleId: project.parent.manifest.appName);
61 62 63 64 65

  final WindowsProject project;

  @override
  String executable(BuildMode buildMode) {
66
    final String binaryName = getCmakeExecutableName(project);
67
    return globals.fs.path.join(
68
        getWindowsBuildDirectory(),
69
        'runner',
70
        toTitleCase(getNameForBuildMode(buildMode)),
71 72
        '$binaryName.exe',
    );
73 74 75
  }

  @override
76
  String get name => project.parent.manifest.appName;
77
}
78 79 80 81 82 83 84 85 86 87 88

class BuildableUwpApp extends ApplicationPackage {
  BuildableUwpApp({@required this.project}) : super(id: project.packageGuid);

  final WindowsUwpProject project;

  String get projectVersion => project.packageVersion;

  @override
  String get name => getCmakeExecutableName(project);
}