ProjectBuilder.h 1.8 KB

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