1 /**********************************************************************
2 * Premake - clean.c
3 * The cleanup target.
4 *
5 * Copyright (c) 2002-2005 Jason Perkins and the Premake project
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License in the file LICENSE.txt for details.
16 **********************************************************************/
17
18 #include <stdio.h>
19 #include <string.h>
20 #include "premake.h"
21
22 static char buffer[8192];
23
24
clean()25 int clean()
26 {
27 int i, j;
28
29 puts("Removing all project and intermediate files...");
30
31 /* VS.NET 200x */
32 io_remove(path_join(prj_get_path(), prj_get_name(), "sln"));
33 io_remove(path_join(prj_get_path(), prj_get_name(), "suo"));
34
35 /* VS6 */
36 io_remove(path_join(prj_get_path(), prj_get_name(), "ncb"));
37 io_remove(path_join(prj_get_path(), prj_get_name(), "dsw"));
38 io_remove(path_join(prj_get_path(), prj_get_name(), "opt"));
39
40 /* GNU */
41 io_remove(path_join(prj_get_path(), "Makefile", ""));
42
43 /* SharpDevelop */
44 io_remove(path_join(prj_get_path(), prj_get_name(), "cmbx"));
45
46 /* MonoDevelop */
47 io_remove(path_join(prj_get_path(), prj_get_name(), "mdsx"));
48 io_remove(path_join(prj_get_path(), prj_get_name(), "mds"));
49 io_remove(path_join(prj_get_path(), prj_get_name(), "userprefs"));
50 io_remove(path_join(prj_get_path(), "make", "sh"));
51
52 /* Code::Blocks - CodeLite */
53 io_remove(path_join(prj_get_path(), prj_get_name(), "workspace"));
54
55 for (i = 0; i < prj_get_numpackages(); ++i)
56 {
57 char cwd[8192];
58 MaskHandle mask;
59
60 prj_select_package(i);
61
62 strcpy(cwd, io_getcwd());
63 io_chdir(prj_get_pkgpath());
64
65 for (j = 0; j < prj_get_numconfigs(); ++j)
66 {
67 prj_select_config(j);
68
69 /* POSIX shared lib */
70 strcpy(buffer, prj_get_prefix() != NULL ? prj_get_prefix() : "lib");
71 strcat(buffer, path_getbasename(prj_get_target()));
72 strcat(buffer, ".");
73 strcat(buffer, prj_get_extension() != NULL ? prj_get_extension() : "so");
74 io_remove(path_join(prj_get_outdir(), buffer, ""));
75
76 /* POSIX executable */
77 strcpy(buffer, prj_get_prefix() != NULL ? prj_get_prefix() : "");
78 strcat(buffer, path_getbasename(prj_get_target()));
79 io_remove(path_join(prj_get_outdir(), buffer, ""));
80
81 /* Windows executable */
82 io_remove(path_join(prj_get_outdir(), buffer, "exe"));
83
84 /* .NET assembly manifest */
85 io_remove(path_join(prj_get_outdir(), buffer, "exe.manifest"));
86
87 /* DLL or assembly */
88 io_remove(path_join(prj_get_outdir(), buffer, "dll"));
89
90 /* Windows static library */
91 io_remove(path_join(prj_get_outdir(), buffer, "lib"));
92
93 /* Visual Studio symbol file */
94 io_remove(path_join(prj_get_outdir(), buffer, "pdb"));
95
96 /* Visual Studio incremental link file */
97 io_remove(path_join(prj_get_outdir(), buffer, "ilk"));
98
99 /* Visual Studio VSHOST */
100 io_remove(path_join(prj_get_outdir(), buffer, "vshost.exe"));
101
102 /* Windows DLL exports library */
103 io_remove(path_join(prj_get_libdir(), buffer, "lib"));
104 io_remove(path_join(prj_get_libdir(), buffer, "exp"));
105
106 /* Mono debugger symbols */
107 io_remove(path_join(prj_get_outdir(), buffer, "exe.mdb"));
108 io_remove(path_join(prj_get_outdir(), buffer, "dll.mdb"));
109
110 /* All */
111 io_rmdir(".", prj_get_objdir());
112 }
113
114 /* VS.NET 2005 */
115 strcpy(g_buffer, path_join(".", prj_get_pkgname(), "vcproj.*.user"));
116 mask = io_mask_open(g_buffer);
117 while (io_mask_getnext(mask))
118 io_remove(io_mask_getname(mask));
119 io_mask_close(mask);
120
121 strcpy(g_buffer, path_join(".", prj_get_pkgname(), "csproj.*.user"));
122 mask = io_mask_open(g_buffer);
123 while (io_mask_getnext(mask))
124 io_remove(io_mask_getname(mask));
125 io_mask_close(mask);
126
127 /* VS.NET 200x */
128 io_remove(path_join(".", prj_get_pkgname(), "csproj"));
129 io_remove(path_join(".", prj_get_pkgname(), "csproj.user"));
130 io_remove(path_join(".", prj_get_pkgname(), "csproj.webinfo"));
131 io_remove(path_join(".", prj_get_pkgname(), "vcproj"));
132
133 /* VS6 */
134 io_remove(path_join(".", prj_get_pkgname(), "dsp"));
135 io_remove(path_join(".", prj_get_pkgname(), "plg"));
136
137 /* GNU */
138 io_remove(path_join(".", "Makefile", ""));
139 io_remove(path_join(".", prj_get_pkgname(), "make"));
140
141 /* SharpDevelop */
142 io_remove(path_join(".", prj_get_pkgname(), "prjx"));
143
144 /* MonoDevelop */
145 io_remove(path_join(".", prj_get_pkgname(), "cmbx"));
146 io_remove(path_join(".", prj_get_pkgname(), "mdp"));
147 io_remove(path_join(".", "Makefile", prj_get_pkgname()));
148 io_remove(path_join(".", prj_get_pkgname(), "pidb"));
149
150 /* Code::Blocks */
151 io_remove(path_join(".", prj_get_pkgname(), "cbp"));
152 io_remove(path_join(".", prj_get_pkgname(), "depend"));
153 io_remove(path_join(".", prj_get_pkgname(), "layout"));
154
155 /* CodeLite */
156 io_remove(path_join(".", prj_get_pkgname(), "project"));
157 io_remove(path_join(".", prj_get_pkgname(), "mk"));
158 io_remove(path_join(".", prj_get_pkgname(), "list"));
159 io_remove(path_join(".", prj_get_pkgname(), "out"));
160 io_remove(path_join(".", prj_get_pkgname(), "tags"));
161
162 /* All */
163 if (prj_get_pkgobjdir() != NULL)
164 io_rmdir(".", prj_get_pkgobjdir());
165
166 io_chdir(cwd);
167 }
168
169 return 1;
170 }
171