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

import '../application_package.dart';
import '../base/file_system.dart';
import '../build_info.dart';
8
import '../cmake.dart';
9
import '../cmake_project.dart';
10
import '../globals_null_migrated.dart' as globals;
11 12

abstract class LinuxApp extends ApplicationPackage {
13
  LinuxApp({required String projectBundleId}) : super(id: projectBundleId);
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

  /// Creates a new [LinuxApp] from a linux sub project.
  factory LinuxApp.fromLinuxProject(LinuxProject project) {
    return BuildableLinuxApp(
      project: project,
    );
  }

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

  @override
  String get displayName => id;

  String executable(BuildMode buildMode);
}

class PrebuiltLinuxApp extends LinuxApp {
  PrebuiltLinuxApp({
39
    required String executable,
40 41 42 43 44 45 46 47 48 49 50 51 52
  }) : _executable = executable,
       super(projectBundleId: executable);

  final String _executable;

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

  @override
  String get name => _executable;
}

class BuildableLinuxApp extends LinuxApp {
53
  BuildableLinuxApp({required this.project}) : super(projectBundleId: project.parent.manifest.appName);
54 55 56 57 58

  final LinuxProject project;

  @override
  String executable(BuildMode buildMode) {
59
    final String? binaryName = getCmakeExecutableName(project);
60 61 62 63 64 65
    return globals.fs.path.join(
        getLinuxBuildDirectory(),
        getNameForBuildMode(buildMode),
        'bundle',
        binaryName,
    );
66 67 68
  }

  @override
69
  String get name => project.parent.manifest.appName;
70
}