2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / nant / src / Tasks / NantTask.cs
1 // NAnt - A .NET build tool\r
2 // Copyright (C) 2001 Gerry Shaw\r
3 //\r
4 // This program is free software; you can redistribute it and/or modify\r
5 // it under the terms of the GNU General Public License as published by\r
6 // the Free Software Foundation; either version 2 of the License, or\r
7 // (at your option) any later version.\r
8 //\r
9 // This program is distributed in the hope that it will be useful,\r
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12 // GNU General Public License for more details.\r
13 //\r
14 // You should have received a copy of the GNU General Public License\r
15 // along with this program; if not, write to the Free Software\r
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
17 //\r
18 // Gerry Shaw (gerry_shaw@yahoo.com)\r
19 \r
20 namespace SourceForge.NAnt {\r
21 \r
22     using System;\r
23     using System.Collections.Specialized;\r
24     using System.Diagnostics;\r
25     using System.IO;\r
26     using System.Xml;\r
27 \r
28     [TaskName("nant")]\r
29     public class NantTask : Task {\r
30 \r
31         [TaskAttribute("buildfile")]\r
32         string _buildFileName = null;\r
33 \r
34         [TaskAttribute("basedir")]\r
35         string _baseDirectory = null;\r
36 \r
37         // TODO: add support for multiple targets\r
38         [TaskAttribute("target")]\r
39         string _target = null;\r
40 \r
41         protected override void ExecuteTask() {\r
42             string directory = Project.GetFullPath(_baseDirectory);\r
43             string buildFileName = _buildFileName;\r
44             if (buildFileName == null) {\r
45                 buildFileName = Project.FindBuildFileName(directory);\r
46             }\r
47 \r
48             try {\r
49                 Log.WriteLine(LogPrefix + "{0} {1}", buildFileName, _target);\r
50                 Log.Indent();\r
51                 Project project = new Project();\r
52                 project.BaseDirectory = directory;\r
53                 project.BuildFileName = buildFileName;\r
54                 if (_target != null) {\r
55                     project.BuildTargets.Add(_target);\r
56                 }\r
57                 if (!project.Run()) {\r
58                     throw new BuildException("Nested build failed - refer to build log for exact reason.");\r
59                 }\r
60             } finally {\r
61                 Log.Unindent();\r
62             }\r
63         }\r
64     }\r
65 }