#pragma once #include "cmake.hpp" #include "meson.hpp" #include #include namespace Project { class Build { public: virtual ~Build() {} boost::filesystem::path project_path; virtual boost::filesystem::path get_default_path(); virtual bool update_default(bool force = false) { return false; } virtual boost::filesystem::path get_debug_path(); virtual bool update_debug(bool force = false) { return false; } virtual std::string get_compile_command() { return std::string(); } virtual boost::filesystem::path get_executable(const boost::filesystem::path &path) { return boost::filesystem::path(); } /// Returns false if an invalid build is found, true otherwise even when build is not found. virtual bool is_valid(const boost::filesystem::path &build_path) const { return true; } std::vector get_exclude_folders(); static std::unique_ptr create(const boost::filesystem::path &path); }; class CMakeBuild : public Build { ::CMake cmake; public: CMakeBuild(const boost::filesystem::path &path); bool update_default(bool force = false) override; bool update_debug(bool force = false) override; std::string get_compile_command() override; boost::filesystem::path get_executable(const boost::filesystem::path &path) override; bool is_valid(const boost::filesystem::path &build_path) const override; }; class MesonBuild : public Build { Meson meson; public: MesonBuild(const boost::filesystem::path &path); bool update_default(bool force = false) override; bool update_debug(bool force = false) override; std::string get_compile_command() override; boost::filesystem::path get_executable(const boost::filesystem::path &path) override; bool is_valid(const boost::filesystem::path &build_path) const override; }; class CompileCommandsBuild : public Build { public: }; class CompileCommandsInProjectRootBuild : public Build { public: boost::filesystem::path get_default_path() override { return project_path; }; }; class CargoBuild : public Build { public: boost::filesystem::path get_default_path() override { return project_path / "target" / "debug"; } bool update_default(bool force = false) override; boost::filesystem::path get_debug_path() override { return get_default_path(); } bool update_debug(bool force = false) override; std::string get_compile_command() override; boost::filesystem::path get_executable(const boost::filesystem::path &path) override; }; class NpmBuild : public Build { }; class PythonMain : public Build { }; class GoBuild : public Build { }; } // namespace Project