summaryrefslogtreecommitdiff
path: root/xmake/scripts/base/clean.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2016-01-14 09:19:14 +0800
committerruki <[email protected]>2016-01-14 09:19:14 +0800
commitcdcf953259aee5e7e1a06855ddbedbaabf585bc9 (patch)
tree47b8e5de10522cca3b67354fa527b3525193e880 /xmake/scripts/base/clean.lua
parent8c50566e7ab2139b9f6c2976b9ce875b7ad11b7a (diff)
rename script directory to core
Diffstat (limited to 'xmake/scripts/base/clean.lua')
-rw-r--r--xmake/scripts/base/clean.lua192
1 files changed, 0 insertions, 192 deletions
diff --git a/xmake/scripts/base/clean.lua b/xmake/scripts/base/clean.lua
deleted file mode 100644
index 9fbb3258a..000000000
--- a/xmake/scripts/base/clean.lua
+++ /dev/null
@@ -1,192 +0,0 @@
---!The Automatic Cross-platform Build Tool
---
--- XMake is free software; you can redistribute it and/or modify
--- it under the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
---
--- XMake is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public License
--- along with XMake;
--- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
---
--- Copyright (C) 2009 - 2015, ruki All rights reserved.
---
--- @author ruki
--- @file clean.lua
---
-
--- define module: clean
-local clean = clean or {}
-
--- load modules
-local os = require("base/os")
-local rule = require("base/rule")
-local utils = require("base/utils")
-local config = require("base/config")
-local project = require("base/project")
-
--- remove the given files or directories
-function clean._remove(filedirs)
-
- -- empty?
- if not filedirs then return true end
-
- -- wrap it first
- filedirs = utils.wrap(filedirs)
- for _, filedir in ipairs(filedirs) do
-
- -- exists? remove it
- if os.exists(filedir) then
- -- remove it
- local ok, errors = os.rm(filedir)
- if not ok then
- -- error
- utils.error(errors)
- return false
- end
- end
- end
-
- -- ok
- return true
-end
-
--- remove the given target name
-function clean._remove_target(target_name, target, mode, buildir)
-
- -- check
- assert(target_name and target)
-
- -- remove the target file
- if not clean._remove(rule.targetfile(target_name, target, buildir)) then
- return false
- end
-
- -- not only remove target file?
- if mode ~= "targets" then
-
- -- remove the object files
- if not clean._remove(rule.objectfiles(target_name, target, rule.sourcefiles(target), buildir)) then
- return false
- end
-
- -- remove the header files
- local _, dstheaders = rule.headerfiles(target)
- if not clean._remove(dstheaders) then
- return false
- end
-
- -- remove the config.h file
- if mode == "all" and target.config_h then
-
- -- translate file path
- local config_h = nil
- if not path.is_absolute(target.config_h) then
- config_h = path.absolute(target.config_h, xmake._PROJECT_DIR)
- else
- config_h = path.translate(target.config_h)
- end
- if not clean._remove(config_h) then
- return false
- end
- end
- end
-
- -- ok
- return true
-end
-
--- remove the given target and all dependent targets
-function clean._remove_target_and_deps(target_name, mode, buildir)
-
- -- the targets
- local targets = project.targets()
- assert(targets)
-
- -- the target
- local target = targets[target_name]
- assert(target)
-
- -- remove the target
- if not clean._remove_target(target_name, target, mode, buildir) then
- return false
- end
-
- -- exists the dependent targets?
- if target.deps then
- local deps = utils.wrap(target.deps)
- for _, dep in ipairs(deps) do
- if not clean._remove_target_and_deps(dep, mode, buildir) then return false end
- end
- end
-
- -- ok
- return true
-end
-
--- remove the target and object files for the given target
---
--- mode:
--- all
--- build
--- targets
---
-function clean.remove(target_name, mode)
-
- -- the build directory
- local buildir = config.get("buildir")
- assert(buildir and mode)
-
- -- the target name
- if target_name and target_name ~= "all" then
- -- remove target
- if not clean._remove_target_and_deps(target_name, mode, buildir) then return false end
- else
-
- -- the targets
- local targets = project.targets()
- assert(targets)
-
- -- remove targets
- for target_name, target in pairs(targets) do
- if not clean._remove_target(target_name, target, mode, buildir) then return false end
- end
- end
-
- -- remove all
- if mode == "all" then
-
- -- remove makefile
- if not clean._remove(rule.makefile()) then
- return false
- end
-
- -- remove the configure directory
- if not clean._remove(config.directory()) then
- return false
- end
-
- -- remove the log file
- if not clean._remove(rule.logfile()) then
- return false
- end
-
- -- remove build directory if be empty
- local buildir = config.get("buildir")
- if os.isdir(buildir) then
- os.rm(buildir, true)
- end
-
- end
-
- -- ok
- return true
-end
-
--- return module: clean
-return clean