From 0adbe5e0d16988c21ed17616b5cab3b38b516700 Mon Sep 17 00:00:00 2001 From: Nicholas O'Connor Date: Mon, 27 Mar 2017 21:03:35 -0700 Subject: [PATCH] build types, untested recursive_remove function in fs --- CMakeLists.txt | 10 ++++++++++ cogrc | 2 +- include/fs.hpp | 1 + src/fs.cpp | 17 +++++++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c47ed2..e0514e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,16 @@ project(cellar CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_FLAGS -pipe) +set(CMAKE_CXX_FLAGS_DEBUG -O0 -g) +set(CMAKE_CXX_FLAGS_RELEASE -O2) +set(CMAKE_CXX_FLAGS_RELWITHDBGINFO ${CMAKE_CXX_FLAGS_RELEASE} -g) + +if(NOT CMAKE_BUILD_TYPE) + message(STATUS "Assuming this is a release build. -DCMAKE_BUILD_TYPE=Debug otherwise.") + set(CMAKE_BUILD_TYPE Release FORCE) +endif(NOT CMAKE_BUILD_TYPE) + # local cmake modules set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/Modules) diff --git a/cogrc b/cogrc index 3f3aeda..4e5d210 100644 --- a/cogrc +++ b/cogrc @@ -1,3 +1,3 @@ [version] release=no -release_version=00 +release_version=0.1 diff --git a/include/fs.hpp b/include/fs.hpp index 097312b..071ddb9 100644 --- a/include/fs.hpp +++ b/include/fs.hpp @@ -11,6 +11,7 @@ namespace cellar { namespace fs { extern vector listdir(string path); extern bool recursive_copy(string, string); + extern bool recursive_remove(string); } } diff --git a/src/fs.cpp b/src/fs.cpp index 9004938..073dfec 100644 --- a/src/fs.cpp +++ b/src/fs.cpp @@ -46,3 +46,20 @@ bool cellar::fs::recursive_copy(string src, string dst) { return true; } + +bool cellar::fs::recursive_remove(string target) { + if (!filesystem::exists(target)) { return false; } + + for (string itemrel : cellar::fs::listdir(target)) { + string itemabs = target + "/" + itemrel; + + auto itemstat = filesystem::symlink_status(itemabs); + + if (filesystem::is_directory(itemstat)) { recursive_remove(itemabs); } + else { filesystem::remove(itemabs); } + } + + filesystem::remove(target); + + return true; +}