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