
1 // 2 // Copyright (c) 2006, Brian Frank and Andy Frank 3 // Licensed under the Academic Free License version 3.0 4 // 5 // History: 6 // 10 Jan 06 Brian Frank Creation 7 // 8 9 ** 10 ** BuildCs is the base class for build scripts used to manage 11 ** building C# source code into a .NET exe or dll. 12 ** 13 abstract class BuildCs : BuildScript 14 { 15 16 ////////////////////////////////////////////////////////////////////////// 17 // Pod Meta-Data 18 ////////////////////////////////////////////////////////////////////////// 19 20 ** 21 ** Required output file created by the compiler. 22 ** 23 File output := null 24 25 ** 26 ** Required output type. Possible values are 'exe', 27 ** 'winexe', 'library' or 'module'. 28 ** 29 Str targetType := null 30 31 ** 32 ** Required list of directories to compile. All C# source 33 ** files in each directory will be compiled. 34 ** 35 File[] dirs := null 36 37 ** 38 ** List of libraries to link to. 39 ** 40 File[] libs := null 41 42 ////////////////////////////////////////////////////////////////////////// 43 // Setup 44 ////////////////////////////////////////////////////////////////////////// 45 46 ** 47 ** Validate subclass constructor setup required meta-data. 48 ** 49 internal override Void validate() 50 { 51 ok := true 52 ok &= validateReqField("output") 53 ok &= validateReqField("targetType") 54 ok &= validateReqField("dirs") 55 if (!ok) throw FatalBuildErr.make 56 } 57 58 ////////////////////////////////////////////////////////////////////////// 59 // BuildScript 60 ////////////////////////////////////////////////////////////////////////// 61 62 ** 63 ** Default target is `compile`. 64 ** 65 override Target defaultTarget() { return target("compile") } 66 67 ////////////////////////////////////////////////////////////////////////// 68 // Compile 69 ////////////////////////////////////////////////////////////////////////// 70 71 @target="compile C# source into exe or dll" 72 Void compile() 73 { 74 log.info("compile [${scriptDir.name}]") 75 log.indent 76 77 // compile source 78 csc := CompileCs.make(this) 79 csc.output = output 80 csc.targetType = targetType 81 csc.src = dirs 82 csc.libs = libs 83 csc.run 84 85 log.unindent 86 } 87 88 ////////////////////////////////////////////////////////////////////////// 89 // Clean 90 ////////////////////////////////////////////////////////////////////////// 91 92 @target="delete all intermediate and target files" 93 Void clean() 94 { 95 log.info("clean [${scriptDir.name}]") 96 log.indent 97 Delete.make(this, output).run 98 log.unindent 99 } 100 101 ////////////////////////////////////////////////////////////////////////// 102 // Full 103 ////////////////////////////////////////////////////////////////////////// 104 105 @target= "clean+compile" 106 Void full() 107 { 108 clean 109 compile 110 } 111 }