Serenity Operating System
at master 59 lines 1.9 kB view raw
1/* 2 * Copyright (c) 2022, Itamar S. <itamar8910@gmail.com> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include "Project.h" 10#include "TerminalWrapper.h" 11#include <AK/Error.h> 12#include <AK/Noncopyable.h> 13#include <LibCore/TempFile.h> 14 15namespace HackStudio { 16class ProjectBuilder { 17 18 AK_MAKE_NONCOPYABLE(ProjectBuilder); 19 20public: 21 ProjectBuilder(NonnullRefPtr<TerminalWrapper>, Project const&); 22 ~ProjectBuilder() = default; 23 24 ErrorOr<void> build(StringView active_file); 25 ErrorOr<void> run(StringView active_file); 26 27private: 28 enum class IsSerenityRepo { 29 No, 30 Yes 31 }; 32 33 ErrorOr<void> build_serenity_component(); 34 ErrorOr<void> run_serenity_component(); 35 ErrorOr<void> initialize_build_directory(); 36 Optional<DeprecatedString> find_cmake_file_for(StringView file_path) const; 37 DeprecatedString generate_cmake_file_content() const; 38 ErrorOr<void> update_active_file(StringView active_file); 39 DeprecatedString build_directory() const; 40 41 struct LibraryInfo { 42 DeprecatedString path; 43 Vector<DeprecatedString> dependencies {}; 44 }; 45 static HashMap<DeprecatedString, NonnullOwnPtr<LibraryInfo>> get_defined_libraries(); 46 static void for_each_library_definition(Function<void(DeprecatedString, DeprecatedString)>); 47 static void for_each_library_dependencies(Function<void(DeprecatedString, Vector<StringView>)>); 48 static ErrorOr<DeprecatedString> component_name(StringView cmake_file_path); 49 static ErrorOr<void> verify_cmake_is_installed(); 50 static ErrorOr<void> verify_make_is_installed(); 51 52 DeprecatedString m_project_root; 53 Project const& m_project; 54 NonnullRefPtr<TerminalWrapper> m_terminal; 55 IsSerenityRepo m_is_serenity { IsSerenityRepo::No }; 56 DeprecatedString m_serenity_component_cmake_file; 57 DeprecatedString m_serenity_component_name; 58}; 59}