logo

abstract class

build::BuildCs

sys::Obj
  build::BuildScript
    build::BuildCs
   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  }