diff --git a/src/config.cc b/src/config.cc index e79e0328a8265ea6d1a6726fb0e738c2a9dfa498..9a24295ffa81aa9b913a11963225d56397ad2ae4 100644 --- a/src/config.cc +++ b/src/config.cc @@ -190,6 +190,7 @@ void Config::read(const boost::property_tree::ptree &cfg) { theme.variant = cfg.get("gtk_theme.variant"); theme.font = cfg.get("gtk_theme.font"); + project.default_build_system = cfg.get("project.default_build_system"); project.default_build_path = cfg.get("project.default_build_path"); project.debug_build_path = cfg.get("project.debug_build_path"); project.cmake.command = cfg.get("project.cmake.command"); diff --git a/src/config.h b/src/config.h index b744516111cb07b305a0cf8bc42f0ec3391a9171..ec1ffacdad5ceb258e7540a65275e83fb9f998ee 100644 --- a/src/config.h +++ b/src/config.h @@ -40,6 +40,7 @@ public: std::string compile_command; }; + std::string default_build_system; std::string default_build_path; std::string debug_build_path; CMake cmake; diff --git a/src/window.cc b/src/window.cc index a211046f6c701b53f8c945c54cbc3b00775457a7..f69331ff3fcc8656661844714ad43a816760dd57 100644 --- a/src/window.cc +++ b/src/window.cc @@ -267,11 +267,21 @@ void Window::set_menu_actions() { if(chr == ' ') chr = '_'; } - auto cmakelists_path = project_path / "CMakeLists.txt"; + boost::filesystem::path buildsys_path; + std::string buildsys; + // Depending on default_build_system, generate build configuration + if(Config::get().project.default_build_system == "cmake") { + buildsys_path = project_path / "CMakeLists.txt"; + buildsys = "cmake_minimum_required(VERSION 2.8)\n\nproject(" + project_name + ")\n\nset(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS} -std=c11 -Wall -Wextra\")\n\nadd_executable(" + project_name + " main.c)\n"; + } + else if(Config::get().project.default_build_system == "meson") { + buildsys_path = project_path / "meson.build"; + buildsys = "project('" + project_name + "', 'c')\nexecutable('" + project_name + "', 'main.c')\n"; + } auto c_main_path = project_path / "main.c"; auto clang_format_path = project_path / ".clang-format"; - if(boost::filesystem::exists(cmakelists_path)) { - Terminal::get().print("Error: " + cmakelists_path.string() + " already exists.\n", true); + if(boost::filesystem::exists(buildsys_path)) { + Terminal::get().print("Error: " + buildsys_path.string() + " already exists.\n", true); return; } if(boost::filesystem::exists(c_main_path)) { @@ -282,10 +292,9 @@ void Window::set_menu_actions() { Terminal::get().print("Error: " + clang_format_path.string() + " already exists.\n", true); return; } - std::string cmakelists = "cmake_minimum_required(VERSION 2.8)\n\nproject(" + project_name + ")\n\nset(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS} -std=c11 -Wall -Wextra\")\n\nadd_executable(" + project_name + " main.c)\n"; std::string c_main = "#include \n\nint main() {\n printf(\"Hello World!\\n\");\n}\n"; std::string clang_format = "IndentWidth: 2\nAccessModifierOffset: -2\nUseTab: Never\nColumnLimit: 0\n"; - if(filesystem::write(cmakelists_path, cmakelists) && filesystem::write(c_main_path, c_main) && filesystem::write(clang_format_path, clang_format)) { + if(filesystem::write(buildsys_path, buildsys) && filesystem::write(c_main_path, c_main) && filesystem::write(clang_format_path, clang_format)) { Directories::get().open(project_path); Notebook::get().open(c_main_path); Directories::get().update(); @@ -303,11 +312,21 @@ void Window::set_menu_actions() { if(chr == ' ') chr = '_'; } - auto cmakelists_path = project_path / "CMakeLists.txt"; + boost::filesystem::path buildsys_path; + std::string buildsys; + // Depending on default_build_system, generate build configuration + if(Config::get().project.default_build_system == "cmake") { + buildsys_path = project_path / "CMakeLists.txt"; + buildsys = "cmake_minimum_required(VERSION 2.8)\n\nproject(" + project_name + ")\n\nset(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -std=c++1y -Wall -Wextra\")\n\nadd_executable(" + project_name + " main.cpp)\n"; + } + else if(Config::get().project.default_build_system == "meson") { + buildsys_path = project_path / "meson.build"; + buildsys = "project('" + project_name + "', 'cpp')\nexecutable('" + project_name + "', 'main.cpp')\n"; + } auto cpp_main_path = project_path / "main.cpp"; auto clang_format_path = project_path / ".clang-format"; - if(boost::filesystem::exists(cmakelists_path)) { - Terminal::get().print("Error: " + cmakelists_path.string() + " already exists.\n", true); + if(boost::filesystem::exists(buildsys_path)) { + Terminal::get().print("Error: " + buildsys_path.string() + " already exists.\n", true); return; } if(boost::filesystem::exists(cpp_main_path)) { @@ -318,10 +337,9 @@ void Window::set_menu_actions() { Terminal::get().print("Error: " + clang_format_path.string() + " already exists.\n", true); return; } - std::string cmakelists = "cmake_minimum_required(VERSION 2.8)\n\nproject(" + project_name + ")\n\nset(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -std=c++1y -Wall -Wextra\")\n\nadd_executable(" + project_name + " main.cpp)\n"; std::string cpp_main = "#include \n\nint main() {\n std::cout << \"Hello World!\\n\";\n}\n"; std::string clang_format = "IndentWidth: 2\nAccessModifierOffset: -2\nUseTab: Never\nColumnLimit: 0\nNamespaceIndentation: All\n"; - if(filesystem::write(cmakelists_path, cmakelists) && filesystem::write(cpp_main_path, cpp_main) && filesystem::write(clang_format_path, clang_format)) { + if(filesystem::write(buildsys_path, buildsys) && filesystem::write(cpp_main_path, cpp_main) && filesystem::write(clang_format_path, clang_format)) { Directories::get().open(project_path); Notebook::get().open(cpp_main_path); Directories::get().update();