summaryrefslogtreecommitdiff
path: root/xmake/scripts/platform/linux/uninstall.lua
blob: 468692620edac0cdb28be514c6e36c01dd6ad6e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
--!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        uninstall.lua
--

-- define module: uninstall
local uninstall = uninstall or {}

-- load modules
local os        = require("base/os")
local path      = require("base/path")
local rule      = require("base/rule")
local utils     = require("base/utils")
local string    = require("base/string")
local platform  = require("platform/platform")

-- uninstall target for the library file
function uninstall._done_library(target)

    -- check
    assert(target and target.name and target.archs)

    -- get target info
    local info = target.archs[xmake._ARCH] or target.archs["x86_64"] or target.archs["i386"]
    if not info then return -1 end

    -- check
    assert(info.targetdir and info.targetfile)

    -- remove the target file
    local targetfile = info.targetdir .. "/" .. info.targetfile
    if os.isfile(targetfile) then 
        local ok, errors = os.rm(targetfile) 
        if not ok then
            utils.error(errors)
            return -1
        end
    end

    -- remove config.h
    if info.config_h and os.isfile(info.config_h) then
        local ok, errors = os.rm(info.config_h) 
        if not ok then
            utils.error(errors)
            return -1
        end
    end

    -- remove headers
    if target.headers then
        for _, header in ipairs(target.headers) do
            if os.isfile(header) then
                local ok, errors = os.rm(header) 
                if not ok then
                    utils.error(errors)
                    return -1
                end
            end
        end
    end

    -- ok
    return 1
end

-- uninstall target for the binary file
function uninstall._done_binary(target)

    -- check
    assert(target and target.archs)

    -- get target info
    local info = target.archs[xmake._ARCH] or target.archs["x86_64"] or target.archs["i386"]
    if not info then return -1 end

    -- check
    assert(info.targetdir and info.targetfile)

    -- the target file
    local targetfile = info.targetdir .. "/" .. info.targetfile
    if not os.isfile(targetfile) then return 1 end
    
    -- remove the target file
    local ok, errors = os.rm(targetfile) 
    if not ok then
        utils.error(errors)
        return -1
    end

    -- ok
    return 1
end

-- uninstall target 
function uninstall.main(target)

    -- check
    assert(target and target.kind)

    -- the uninstall scripts
    local uninstallscripts = 
    {
        static = uninstall._done_library
    ,   shared = uninstall._done_library
    ,   binary = uninstall._done_binary
    }

    -- uninstall it
    local uninstallscript = uninstallscripts[target.kind]
    if uninstallscript then return uninstallscript(target) end

    -- continue
    return 0
end

-- return module: uninstall
return uninstall