| // Copyright 2014 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. |
| |
| import 'base/file_system.dart'; |
| import 'base/utils.dart'; |
| import 'platform_plugins.dart'; |
| import 'project.dart'; |
| |
| /// Represents a CMake-based sub-project. |
| /// |
| /// This defines interfaces common to Windows and Linux projects. |
| abstract class CmakeBasedProject { |
| /// The parent of this project. |
| FlutterProject get parent; |
| |
| /// Whether the subproject (either Windows or Linux) exists in the Flutter project. |
| bool existsSync(); |
| |
| /// The native project CMake specification. |
| File get cmakeFile; |
| |
| /// Contains definitions for the Flutter library and the tool. |
| File get managedCmakeFile; |
| |
| /// Contains definitions for FLUTTER_ROOT, LOCAL_ENGINE, and more flags for |
| /// the build. |
| File get generatedCmakeConfigFile; |
| |
| /// Included CMake with rules and variables for plugin builds. |
| File get generatedPluginCmakeFile; |
| |
| /// The directory to write plugin symlinks. |
| Directory get pluginSymlinkDirectory; |
| } |
| |
| /// The Windows sub project. |
| class WindowsProject extends FlutterProjectPlatform implements CmakeBasedProject { |
| WindowsProject.fromFlutter(this.parent); |
| |
| @override |
| final FlutterProject parent; |
| |
| @override |
| String get pluginConfigKey => WindowsPlugin.kConfigKey; |
| |
| String get _childDirectory => 'windows'; |
| |
| @override |
| bool existsSync() => _editableDirectory.existsSync() && cmakeFile.existsSync(); |
| |
| @override |
| File get cmakeFile => _editableDirectory.childFile('CMakeLists.txt'); |
| |
| @override |
| File get managedCmakeFile => managedDirectory.childFile('CMakeLists.txt'); |
| |
| @override |
| File get generatedCmakeConfigFile => ephemeralDirectory.childFile('generated_config.cmake'); |
| |
| @override |
| File get generatedPluginCmakeFile => managedDirectory.childFile('generated_plugins.cmake'); |
| |
| @override |
| Directory get pluginSymlinkDirectory => ephemeralDirectory.childDirectory('.plugin_symlinks'); |
| |
| Directory get _editableDirectory => parent.directory.childDirectory(_childDirectory); |
| |
| /// The directory in the project that is managed by Flutter. As much as |
| /// possible, files that are edited by Flutter tooling after initial project |
| /// creation should live here. |
| Directory get managedDirectory => _editableDirectory.childDirectory('flutter'); |
| |
| /// The subdirectory of [managedDirectory] that contains files that are |
| /// generated on the fly. All generated files that are not intended to be |
| /// checked in should live here. |
| Directory get ephemeralDirectory => managedDirectory.childDirectory('ephemeral'); |
| |
| Future<void> ensureReadyForPlatformSpecificTooling() async {} |
| } |
| |
| /// The Linux sub project. |
| class LinuxProject extends FlutterProjectPlatform implements CmakeBasedProject { |
| LinuxProject.fromFlutter(this.parent); |
| |
| @override |
| final FlutterProject parent; |
| |
| @override |
| String get pluginConfigKey => LinuxPlugin.kConfigKey; |
| |
| static final RegExp _applicationIdPattern = RegExp(r'''^\s*set\s*\(\s*APPLICATION_ID\s*"(.*)"\s*\)\s*$'''); |
| |
| Directory get _editableDirectory => parent.directory.childDirectory('linux'); |
| |
| /// The directory in the project that is managed by Flutter. As much as |
| /// possible, files that are edited by Flutter tooling after initial project |
| /// creation should live here. |
| Directory get managedDirectory => _editableDirectory.childDirectory('flutter'); |
| |
| /// The subdirectory of [managedDirectory] that contains files that are |
| /// generated on the fly. All generated files that are not intended to be |
| /// checked in should live here. |
| Directory get ephemeralDirectory => managedDirectory.childDirectory('ephemeral'); |
| |
| @override |
| bool existsSync() => _editableDirectory.existsSync(); |
| |
| @override |
| File get cmakeFile => _editableDirectory.childFile('CMakeLists.txt'); |
| |
| @override |
| File get managedCmakeFile => managedDirectory.childFile('CMakeLists.txt'); |
| |
| @override |
| File get generatedCmakeConfigFile => ephemeralDirectory.childFile('generated_config.cmake'); |
| |
| @override |
| File get generatedPluginCmakeFile => managedDirectory.childFile('generated_plugins.cmake'); |
| |
| @override |
| Directory get pluginSymlinkDirectory => ephemeralDirectory.childDirectory('.plugin_symlinks'); |
| |
| Future<void> ensureReadyForPlatformSpecificTooling() async {} |
| |
| String? get applicationId { |
| return firstMatchInFile(cmakeFile, _applicationIdPattern)?.group(1); |
| } |
| } |