Changeset 50

Show
Ignore:
Timestamp:
10/15/06 23:38:01 (5 years ago)
Author:
Derek Parnell
Message:

Upload version 3.04 (Build #2571)
modified trunk/Docs/autobuild.html
modified trunk/Docs/change_log.html
modified trunk/Docs/command_line.html
modified trunk/Docs/configuration_file.html
modified trunk/Docs/dlls.html
modified trunk/Docs/introduction.html
modified trunk/Docs/macros.html
modified trunk/Docs/pragmas.html
modified trunk/Docs/profile_file.html
modified trunk/Docs/response_file.html
modified trunk/Docs/rules.html
modified trunk/Docs/switches.html
modified trunk/Docs/todo.html
modified trunk/Docs/User_Manual.html
modified trunk/Source/build.d
modified trunk/Source/build_bn.d
modified trunk/Source/debug.brf
modified trunk/Source/default.rdf
modified trunk/Source/docsrc/autobuild.d
modified trunk/Source/docsrc/change_log.d
modified trunk/Source/docsrc/command_line.d
modified trunk/Source/docsrc/configuration_file.d
modified trunk/Source/docsrc/dlls.d
modified trunk/Source/docsrc/introduction.d
modified trunk/Source/docsrc/macros.d
modified trunk/Source/docsrc/pragmas.d
modified trunk/Source/docsrc/profile_file.d
modified trunk/Source/docsrc/response_file.d
modified trunk/Source/docsrc/rules.d
modified trunk/Source/docsrc/switches.d
modified trunk/Source/docsrc/todo.d
modified trunk/Source/docsrc/um.d
modified trunk/Source/docsrc/User_Manual.d
modified trunk/Source/example_build.cfg
modified trunk/Source/full.brf
modified trunk/Source/nix_dmd_build.cfg
modified trunk/Source/nix_gnu_build.cfg
modified trunk/Source/source.d
modified trunk/Source/source_bn.d
modified trunk/Source/util/fdt.d
modified trunk/Source/util/file2_bn.d
modified trunk/Source/util/fileex.d
modified trunk/Source/util/fileex_bn.d
modified trunk/Source/util/linetoken_bn.d
modified trunk/Source/util/pathex.d
modified trunk/Source/util/pathex_bn.d
modified trunk/Source/util/str.d
modified trunk/Source/util/str_bn.d
modified trunk/Source/win_dmd_build.cfg
modified trunk/Source/win_gnu_build.cfg
added downloads/bud-3.04.doc.zip
added downloads/bud-3.04.src.zip
added downloads/bud_win_3.04.dbg.exe
added downloads/bud_win_3.04.exe
added trunk/Source/util/series.d

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Docs/User_Manual.html

    r49 r50  
    1010 
    1111 
    12 <p class="page_title">Build Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
     12<p class="page_title"><i>Bud</i> Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
    1313                 <br> <a href="User_Manual.html#toc"><span class="tocref">(table of contents)</span></a></p> 
    1414                 <h1 class="topic"><a name="description">Topic: Description</a></h1> 
    15 <div class="section">Build is a tool to assist building applications and libraries written 
     15<div class="section"><i>Bud</i> is a tool to assist building applications and libraries written 
    1616using the D programming language. 
    1717</div> 
     
    1919 
    2020<h1 class="abstract">Abstract</h1><p class="abstract">It is an effective replacement for 
    21 the general 'make' tools. The primary difference between <i>Build</i> and 
    22 other tools is that <i>Build</i> does not need you to create and maintain 
     21the general 'make' tools. The primary difference between <i>Bud</i> and 
     22other tools is that <i>Bud</i> does not need you to create and maintain 
    2323'makefiles'. Instead, it analyses the source code files to determine 
    2424all dependancies and constructs the appropriate calls to the compiler, 
    2525linker and librarian. 
    2626<br/>&nbsp;<br/> 
    27 The aim of <i>Build</i> is to create a target file from the source file(s) 
     27The aim of <i>Bud</i> is to create a target file from the source file(s) 
    2828supplied to it. This is usually an executable file but could also be 
    2929a library. In both cases, source files are converted to object files, and 
     
    4141 
    4242    <li><a href="pragmas.html">Pragmas</a></li> 
    43         <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_build">Build</a></span></li> 
    44         <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_build_def">Build Def</a></span></li> 
    45         <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_export_version">Export Version</a></span></li> 
    46         <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_ignore">Ignore</a></span></li> 
    47         <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_include">Include</a></span></li> 
    48         <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_link">Link</a></span></li> 
    49         <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_nolink">Nolink</a></span></li> 
    50         <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_target">Target</a></span></li> 
     43        <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_build">build</a></span></li> 
     44        <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_build_def">build def</a></span></li> 
     45        <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_export_version">export version</a></span></li> 
     46        <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_ignore">ignore</a></span></li> 
     47        <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_include">include</a></span></li> 
     48        <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_link">link</a></span></li> 
     49        <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_nolink">nolink</a></span></li> 
     50        <li class="indent"><span class="subtoc"><a href="pragmas.html#pragma_target">target</a></span></li> 
    5151 
    52     <li><a href="autobuild.html">Auto Build Number</a></li> 
     52    <li><a href="autobuild.html">Automatic build number</a></li> 
    5353 
    5454    <li><a href="rules.html">Rule Definition File</a></li> 
     
    6262        <li class="indent"><span class="subtoc"><a href="switches.html#switch_allobj">-allobj</a></span></li> 
    6363        <li class="indent"><span class="subtoc"><a href="switches.html#switch_autowinlibs">-AutoWinLibs</a></span></li> 
     64        <li class="indent"><span class="subtoc"><a href="switches.html#switch_BCFPATH">-BCFPATH</a></span></li> 
    6465        <li class="indent"><span class="subtoc"><a href="switches.html#switch_CFPATH">-CFPATH</a></span></li> 
    6566        <li class="indent"><span class="subtoc"><a href="switches.html#switch_cleanup">-clean</a></span></li> 
     
    6768        <li class="indent"><span class="subtoc"><a href="switches.html#switch_DCPATH">-DCPATH</a></span></li> 
    6869        <li class="indent"><span class="subtoc"><a href="switches.html#switch_dll">-dll</a></span></li> 
     70        <li class="indent"><span class="subtoc"><a href="switches.html#switch_emptyargs">-emptyargs</a></span></li> 
    6971        <li class="indent"><span class="subtoc"><a href="switches.html#switch_exec">-exec&lt;args&gt;</a></span></li> 
     72        <li class="indent"><span class="subtoc"><a href="switches.html#switch_explicit">-explicit</a></span></li> 
    7073        <li class="indent"><span class="subtoc"><a href="switches.html#switch_full">-full</a></span></li> 
    7174        <li class="indent"><span class="subtoc"><a href="switches.html#switch_gui">-gui</a></span></li> 
     
    9598        <li class="indent"><span class="subtoc"><a href="switches.html#switch_uses">-uses</a></span></li> 
    9699        <li class="indent"><span class="subtoc"><a href="switches.html#switch_UMB">-UMB</a></span></li> 
     100        <li class="indent"><span class="subtoc"><a href="switches.html#switch_usefinal">-usefinal=&lt;yes/no&gt;</a></span></li> 
    97101        <li class="indent"><span class="subtoc"><a href="switches.html#switch_v">-v (lowercase)</a></span></li> 
    98102        <li class="indent"><span class="subtoc"><a href="switches.html#switch_V">-V (uppercase)</a></span></li> 
     
    111115<div class="section"><h2 class="section"><a name="authors">Authors:<span class="secdef">Derek Parnell - Melbourne</span></a></h2></div> 
    112116<div class="section"><h2 class="section"><a name="create">Initial Creation:<span class="secdef">January 2005</span></a></h2></div> 
    113 <div class="section"><h2 class="section"><a name="version">Version:<span class="secdef">3.03</span></a></h2></div> 
    114 <div class="section"><h2 class="section"><a name="date">Date:<span class="secdef">20 September 2006</span></a></h2></div> 
     117<div class="section"><h2 class="section"><a name="version">Version:<span class="secdef">3.04</span></a></h2></div> 
     118<div class="section"><h2 class="section"><a name="date">Date:<span class="secdef">16 October 2006</span></a></h2></div> 
    115119<div class="section"><h2 class="section"><a name="license">License:</a></h2> 
    116120<pre class="cite">This software is provided 'as-is', without any express or implied 
     
    139143 
    140144 
    141                  <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Wed Sep 20 16:04:49 2006 
     145                 <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Mon Oct 16 11:03:25 2006 
    142146 </span></div> 
    143147                 </body> 
  • trunk/Docs/autobuild.html

    r49 r50  
    1010 
    1111 
    12 <p class="page_title">Build Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
     12<p class="page_title">Bud Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
    1313                 <br> <a href="User_Manual.html#toc"><span class="tocref">(table of contents)</span></a></p> 
    14                  <h1 class="topic"><a name="autobuild">Topic: Auto Build Number</a></h1> 
    15 <div class="section">Automatically Incremented Build Numbering for Modules 
     14                 <h1 class="topic"><a name="autobuild">Topic: Automatic build number</a></h1> 
     15<div class="section">Automatically incremented build numbering for Modules 
    1616You can optionally specify that the <i>build</i> utility automatically 
    1717increments a build number for any module. You do this by supplying 
     
    3737You can access the build number from within the module thus ... <br> 
    3838 
    39 <pre class="code">writefln("Build number is %d", auto_build_number); 
     39<pre class="code">writefln("The application build number is %d", auto_build_number); 
    4040</pre> 
    4141You can access the build numbers of other modules in you application 
     
    5454The "_bn.d" file created by <i>build</i> for this module would look like ... <br> 
    5555<pre class="code">module parser_bn; 
    56 /// This file is automatically maintained by the BUILD utility, 
     56/// This file is automatically maintained by the Bud utility, 
    5757/// Please refrain from manually editing it. 
    5858long auto_build_number = 77; 
     
    6060 
    6161Of course the number <i>77</i> is just an example. This number would actually 
    62  start at 1 and increment whenever <i>Build</i> needed to create a new object 
     62 start at 1 and increment whenever <i>Bud</i> needed to create a new object 
    6363file for the module. 
    6464</div> 
     
    6666 
    6767 
    68                  <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Wed Sep 20 16:04:49 2006 
     68                 <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Mon Oct 16 11:03:25 2006 
    6969 </span></div> 
    7070                 </body> 
  • trunk/Docs/change_log.html

    r49 r50  
    1414                 <h1 class="topic"><a name="change_log">Topic: Change Log</a></h1> 
    1515<div class="section">A list of changes and fixes that have been made. 
     16 
     17<h3 class="subsection"><a name="">v3.04 -- /October/2006 </a></h3> 
     18<div class="list"><ul>    <li class="item">** <b>FIX:</b> Correctly handle INIT:CompilerExe from configuration file 
     19       
     20    <li class="item">** <b>FIX:</b> Correctly handles version platform statements. 
     21       
     22    <li class="item">** <b>FIX:</b> Correctly handles the #! arguments. 
     23       
     24    <li class="item">** <b>FIX:</b> Sets default OutFileSwitch for GDC to "-o " 
     25       
     26    <li class="item">** <b>FIX:</b> Sets default Shared Library Extension for unix to "so" 
     27       
     28    <li class="item">** <b>FIX:</b> Sets default Linker 'lib' switch for GNU tools to "-l" 
     29       
     30    <li class="item">** <b>FIX:</b> The auto-build-number facility has been repaired. 
     31       
     32    <li class="item">** <b>FIX:</b> No longer runs any FINAL commands if the compile failed. 
     33       
     34    <li class="item">** <b>FIX: Ticket #38</b> Now correctly handles paths enclosed in quotes. 
     35       
     36    <li class="item">** <b>ENH:</b> A new <i>-explicit</i> switch will cause only the 
     37    files explicitly named on the command line to be compiled. All other 
     38    files, such as imported ones, are processed but not compiled. 
     39     
     40    <li class="item">** <b>ENH:</b> A new <i>-usefinal</i> switch to control the usage of 
     41    FINAL statements defined in the configuration file. 
     42     
     43    <li class="item">** <b>ENH:</b> A new <i>-emptyargs</i> switch to control whether or 
     44    not to abort if there are any empty arguments on the command line. 
     45     
     46    <li class="item">** <b>ENH:</b> A new <i>-BCFPATH</i> switch to define an alternative 
     47    location for <i>Bud</i> configuration files. This can also be supplied as 
     48    an environment switch. 
     49     
     50</ul></div> 
    1651 
    1752<h3 class="subsection"><a name="">v3.03 -- 20/September/2006 </a></h3> 
     
    118153     
    119154    <li class="item">** <b>FIX: Ticket #9 </b> Now, if the output file created by the 
    120      rule ends with the library extention, it is presented to the linker 
     155     rule ends with the library extension, it is presented to the linker 
    121156     as a library rather than an object file. 
    122157     
     
    142177    'std' modules. 
    143178 
    144     <li class="item">** <b>ENH: </b> Any file name on the command line with an extention 
    145      of <i>".brf" </i> will be used as a <a href="response_file.html">Build Response File</a> 
     179    <li class="item">** <b>ENH: </b> Any file name on the command line with an extension 
     180     of <i>".brf" </i> will be used as a <a href="response_file.html"><i>Bud</i> Response File</a> 
    146181     
    147182 
    148183    <li class="item">** <b>ENH: </b> If there is nothing on the command line and the 
    149184    file 'build.brf' exists in the current directory, then it will be 
    150     used as the <a href="response_file.html">Build Response File</a> for this run. 
     185    used as the <a href="response_file.html"><i>Bud</i> Response File</a> for this run. 
    151186     
    152187 
     
    216251 
    217252<h3 class="subsection"><a name="">v2.10 -- 06/Apr/2006 </a></h3> 
    218 <div class="list"><ul>    <li class="item">** <b>FIX: </b> The default Build Response File invoked when just 
     253<div class="list"><ul>    <li class="item">** <b>FIX: </b> The default <i>Bud</i> Response File invoked when just 
    219254    placing '@' on the command line is now correctly named "build.brf" 
    220255    <li class="item">** <b>ENH: </b>  For Windows environments, command line files can now use 
     
    223258    invoked via DMD.  
    224259    <li class="item">** <b>ENH: </b> You can now specify the default linker switches in 
    225     the Build Configuration File.  
     260    the <i>Bud</i> Configuration File.  
    226261    <li class="item">** <b>ENH: </b> Using the new switch <i>-PP </i>, you can now 
    227262    specify additional paths to search for files. 
     
    654689</div> 
    655690 
    656                  <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Wed Sep 20 16:04:49 2006 
     691                 <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Mon Oct 16 11:03:25 2006 
    657692 </span></div> 
    658693                 </body> 
  • trunk/Docs/command_line.html

    r49 r50  
    1010 
    1111 
    12 <p class="page_title">Build Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
     12<p class="page_title"><i>Bud</i> Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
    1313                 <br> <a href="User_Manual.html#toc"><span class="tocref">(table of contents)</span></a></p> 
    1414                 <h1 class="topic"><a name="command_line">Topic: Command Line</a></h1> 
    15 <div class="section">The <i>Build</i> utility supplies the source file and optional switches via 
    16 the command line. The typical format of the <i>Build</i> utility's command 
     15<div class="section">The <i>Bud</i> utility supplies the source file and optional switches via 
     16the command line. The typical format of the <i>Bud</i> utility's command 
    1717line is ... 
    1818<pre class="code">      <b>build</b> &lt;sourcefile&gt; [&lt;switches&gt; ] [&lt;otherfiles&gt; ] 
     
    2121You can however specify the files and switches in any order you like. 
    2222<br/>&nbsp;<br/> 
    23 Normally you would only supply a single file name to <i>Build</i>, that being 
     23Normally you would only supply a single file name to <i>Bud</i>, that being 
    2424 the source file of the top-level file in the application. Typically 
    2525 the one that has the 'main()' or 'WinMain()' function, though this is 
     
    3232If you run the utility without any files and without any switches, it 
    3333 display a <i>help</i> screen with some details about the switches. That looks 
    34  something like this ... 
     34 something similar to this ... 
    3535<pre class="code">  Path and Version : C:\Program Files\build.exe v3.6(339) 
    3636  Usage: build sourcefile [options objectfiles libraries] 
     
    9898                  Note that the default for Windows <i>DigitalMars</i> is to use a response file 
    9999                  but for all other environments it is to use command line arguments. 
    100     <b>-info</b>      Displays the version and path of the Build application 
     100    <b>-info</b>      Displays the version and path of the <i>Bud</i> application 
    101101    <b>-help</b>      Displays the full 'usage' help text. 
    102102    <b>-h</b>         Same as /-help, displays the full 'usage' help text. 
     
    128128 
    129129 
    130                  <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Wed Sep 20 16:04:49 2006 
     130                 <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Mon Oct 16 11:03:25 2006 
    131131 </span></div> 
    132132                 </body> 
  • trunk/Docs/configuration_file.html

    r49 r50  
    55                 <link rel="stylesheet" type="text/css" href="style.css" title="standard" > 
    66                 <link rel="alternate stylesheet" type="text/css" href="none.css" title="none" > 
    7                  <title>User Manual for BUILD</title> 
     7                 <title>User Manual for Bud</title> 
    88                 </head> 
    9                  <body><h1>User Manual for BUILD</h1><!-- Generated by Ddoc from configuration_file.d --> 
    10  
    11  
    12 <p class="page_title">Build Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
     9                 <body><h1>User Manual for Bud</h1><!-- Generated by Ddoc from configuration_file.d --> 
     10 
     11 
     12<p class="page_title"><i>Bud</i> Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
    1313                 <br> <a href="User_Manual.html#toc"><span class="tocref">(table of contents)</span></a></p> 
    1414                 <h1 class="topic"><a name="configuration_file">Topic: Configuration File</a></h1> 
    1515<div class="section">The utility's configuration file is used to specify your default options 
    1616for the utility. The file is called <b>build.cfg</b>. You can have from zero 
    17 to three configuration files because the <i>Build</i> utility looks in each 
    18 of three places for a configuration file, and it uses each one that it finds. 
    19 It looks in the folder that <i>Build</i> is installed, then in the folder 
     17to four configuration files because the <i>Bud</i> utility looks in each 
     18of four places for a configuration file, and it uses each one that it finds. 
     19It looks in the folder that <i>Bud</i> is installed, then in a user defined 
     20alternative path (defined by -BCFPATH switch), then in the folder 
    2021that the compiler is installed, and finally in the current folder. 
     22<br/>&nbsp;<br/> 
     23<b>Note:</b> The alternative location is optional. It can be specified in 
     24an environment switch called BCFPATH or in a command line switch 
     25of the same name, -BCFPATH. 
    2126<br/>&nbsp;<br/> 
    2227The configuration file consists of one or more command lines. 
     
    8186</pre> 
    8287<div class="indent"><div class="section">The identifiers for the settable strings are detailed below.</div> 
    83 <div class="tabrow1">ExeExtention</div><div class="tabrow2">The file extention for executable files. <span class="eg">Example: "exe"</span></div> 
    84 <div class="tabrow1">LibExtention</div><div class="tabrow2">The file extention for library files.<span class="eg">Example: "lib"</span></div> 
    85 <div class="tabrow1">ObjExtention</div><div class="tabrow2">The file extention for object files.<span class="eg">Example: "obj"</span></div> 
    86 <div class="tabrow1">ShrLibExtention</div><div class="tabrow2">The file extention for shared libraries files.<span class="eg">Example: "dll"</span></div> 
    87 <div class="tabrow1">SrcExtention   </div><div class="tabrow2">The file extention for D source files.<span class="eg">Example: "d"</span></div> 
    88 <div class="tabrow1">MacroExtention </div><div class="tabrow2"> The file extention for macro files.<span class="eg">Example: "mac"</span></div> 
    89 <div class="tabrow1">DdocExtention  </div><div class="tabrow2">The file extention for D Documentation files.<span class="eg">Example: "ddoc"</span></div> 
     88<div class="tabrow1">ExeExtension</div><div class="tabrow2">The file extension for executable files. <span class="eg">Example: "exe"</span></div> 
     89<div class="tabrow1">LibExtension</div><div class="tabrow2">The file extension for library files.<span class="eg">Example: "lib"</span></div> 
     90<div class="tabrow1">ObjExtension</div><div class="tabrow2">The file extension for object files.<span class="eg">Example: "obj"</span></div> 
     91<div class="tabrow1">ShrLibExtension</div><div class="tabrow2">The file extension for shared libraries files.<span class="eg">Example: "dll"</span></div> 
     92<div class="tabrow1">SrcExtension   </div><div class="tabrow2">The file extension for D source files.<span class="eg">Example: "d"</span></div> 
     93<div class="tabrow1">MacroExtension </div><div class="tabrow2"> The file extension for macro files.<span class="eg">Example: "mac"</span></div> 
     94<div class="tabrow1">DdocExtension  </div><div class="tabrow2">The file extension for D Documentation files.<span class="eg">Example: "ddoc"</span></div> 
    9095<div class="tabrow1">CompilerExe    </div><div class="tabrow2">The file name of the compiler.<span class="eg">Example: "dmd.exe"</span></div> 
    9196<div class="tabrow1">CompileOnly    </div><div class="tabrow2">The switch that is passed to the compiler to tell 
     
    124129                          you don't specify any CompilerDefs, "-op" is 
    125130                          assumed.</div> 
    126 <div class="tabrow1">OutFileSwitch  </div><div class="tabrow2">The switch tells <i>Build</i> 
     131<div class="tabrow1">OutFileSwitch  </div><div class="tabrow2">The switch tells <i>Bud</i> 
    127132                          where to create the executable file. <span class="eg">Example: "-of"</span></div> 
    128133<div class="tabrow1">ImportPath     </div><div class="tabrow2">This is the switch for the compiler to tell it where 
     
    139144                          to insert symbolic debugging information into 
    140145                          the executable.<span class="eg">Example: "/co"</span></div> 
    141 <div class="tabrow1">BuildImportPath</div><div class="tabrow2">This is the switch for <i>Build</i> to tell it 
     146<div class="tabrow1">BuildImportPath</div><div class="tabrow2">This is the switch for <i>Bud</i> to tell it 
    142147                          a path to scan for imported modules. <span class="eg">Example: "-I"</span></div> 
    143 <div class="tabrow1">ImportPathDelim</div><div class="tabrow2">This is the switch for <i>Build</i> to tell it 
     148<div class="tabrow1">ImportPathDelim</div><div class="tabrow2">This is the switch for <i>Bud</i> to tell it 
    144149                          which character is used to delimit paths on 
    145150                          a BuildImportPath list. <span class="eg">Example: ";"</span></div> 
    146 <div class="tabrow1">OutputPath     </div><div class="tabrow2">This is the switch for <i>Build</i> to tell it 
     151<div class="tabrow1">OutputPath     </div><div class="tabrow2">This is the switch for <i>Bud</i> to tell it 
    147152                          the path to use for all temporary output files. <span class="eg">Example: "-od"</span></div> 
    148 <div class="tabrow1">RunSwitch      </div><div class="tabrow2">This is the switch for <i>Build</i> to tell it 
     153<div class="tabrow1">RunSwitch      </div><div class="tabrow2">This is the switch for <i>Bud</i> to tell it 
    149154                          to run the application once it successfully 
    150155                          compiles. <span class="eg">Example: "-exec"</span></div> 
     
    153158                          by a 'LIBCMD=' in the configuration file or 
    154159                          on the commandline. <span class="eg">Example: "c:\tools\"</span></div> 
    155 <div class="tabrow1">ResponseExt    </div><div class="tabrow2">This is the file extention that Build will use 
     160<div class="tabrow1">ResponseExt    </div><div class="tabrow2">This is the file extension that <i>Bud</i> will use 
    156161                          for its response files. <span class="eg">Example: "brf"</span></div> 
    157 <div class="tabrow1">DefResponseFile</div><div class="tabrow2">This is the name of <i>Build's</i> default 
     162<div class="tabrow1">DefResponseFile</div><div class="tabrow2">This is the name of the <i>Bud</i> default 
    158163                          response file. <span class="eg">Example: "build.brf"</span></div> 
    159 <div class="tabrow1">RDFName        </div><div class="tabrow2">This is the name of <i>Build's</i> default 
     164<div class="tabrow1">RDFName        </div><div class="tabrow2">This is the name of the <i>Bud</i> default 
    160165                          Rules Definition File. <span class="eg">Example: "default.rdf"</span></div> 
    161 <div class="tabrow1">DefMacroDefFile</div><div class="tabrow2">This is the name of <i>Build's</i> default 
     166<div class="tabrow1">DefMacroDefFile</div><div class="tabrow2">This is the name of the <i>Bud</i> default 
    162167                          Macro Definition File. <span class="eg">Example: "build.mdf"</span></div> 
    163168<div class="tabrow1">LinkerStdOut   </div><div class="tabrow2">This is the commandline option given to the linker 
    164                           when the <i>Build</i> commandline has the <i>"-silent"</i> 
     169                          when the <i>Bud</i> commandline has the <i>"-silent"</i> 
    165170                          switch. <span class="eg">Example: "&gt;nul"</span></div> 
    166171<div class="tabrow1">IgnoredModules </div><div class="tabrow2">This is a comma delimited list of modules or packages 
    167                           to ignore. <i>Build</i> will not scan these modules and 
     172                          to ignore. <i>Bud</i> will not scan these modules and 
    168173                          packages for dependancies. <span class="eg">Example: "std,dfl,dui"</span> 
    169174                          If none is specified by this configuration item then 
     
    200205                          </ul></div> 
    201206</div> 
    202 <div class="tabrow1">PathId         </div><div class="tabrow2">The name of the environment symbol used by <i>Build</i> 
     207<div class="tabrow1">PathId         </div><div class="tabrow2">The name of the environment symbol used by <i>Bud</i> 
    203208                          when scanning for executables. <span class="eg">Example: "PATH"</span></div> 
    204 <div class="tabrow1">HomePathId     </div><div class="tabrow2">The name of the environment symbol used by <i>Build</i> 
     209<div class="tabrow1">HomePathId     </div><div class="tabrow2">The name of the environment symbol used by <i>Bud</i> 
    205210                          when scanning for configuration file. <span class="eg">Example: "HOME"</span></div> 
    206 <div class="tabrow1">EtcPath        </div><div class="tabrow2">The name of an alternative path used by <i>Build</i> 
     211<div class="tabrow1">EtcPath        </div><div class="tabrow2">The name of an alternative path used by <i>Bud</i> 
    207212                          when scanning for configuration file. <span class="eg">Example: "c:\etc\"</span></div> 
    208 <div class="tabrow1">GenDebugInfo   </div><div class="tabrow2">The switch that tells <i>Build</i> and the compiler 
     213<div class="tabrow1">GenDebugInfo   </div><div class="tabrow2">The switch that tells <i>Bud</i> and the compiler 
    209214                          to insert debugging information into the object 
    210215                          files. <span class="eg">Example: "-g"</span></div> 
    211 <div class="tabrow1">ModOutPrefix   </div><div class="tabrow2">If the <i>Build</i> switch <i><span class="quote">&quot;-modules&quot;</span></i> was 
    212                           used, this defines the string which <i>Build</i> will 
     216<div class="tabrow1">ModOutPrefix   </div><div class="tabrow2">If the <i>Bud</i> switch <i><span class="quote">&quot;-modules&quot;</span></i> was 
     217                          used, this defines the string which <i>Bud</i> will 
    213218                          begin the Modules List output file with. 
    214219                          <span class="eg">Example: "MODULES = \n"</span></div> 
    215 <div class="tabrow1">ModOutSuffix   </div><div class="tabrow2">If the <i>Build</i> switch <i><span class="quote">&quot;-modules&quot;</span></i> was 
    216                           used, this defines the string which <i>Build</i> will 
     220<div class="tabrow1">ModOutSuffix   </div><div class="tabrow2">If the <i>Bud</i> switch <i><span class="quote">&quot;-modules&quot;</span></i> was 
     221                          used, this defines the string which <i>Bud</i> will 
    217222                          end the Modules List output file with. 
    218223                          <span class="eg">Example: ""</span></div> 
    219 <div class="tabrow1">ModOutBody     </div><div class="tabrow2">If the <i>Build</i> switch <i><span class="quote">&quot;-modules&quot;</span></i> was 
    220                           used, this defines the string which <i>Build</i> will 
     224<div class="tabrow1">ModOutBody     </div><div class="tabrow2">If the <i>Bud</i> switch <i><span class="quote">&quot;-modules&quot;</span></i> was 
     225                          used, this defines the string which <i>Bud</i> will 
    221226                          use as a template for each module being listed. 
    222227                          <span class="eg">Example: "   $(MODULE {mod})"</span> <br/>&nbsp;<br/> 
     
    224229                          name and {src} will be replaced with the source 
    225230                          file's name.</div> 
    226 <div class="tabrow1">ModOutDelim    </div><div class="tabrow2">If the <i>Build</i> switch <i><span class="quote">&quot;-modules&quot;</span></i> was 
    227                           used, this defines the string which <i>Build</i> will 
     231<div class="tabrow1">ModOutDelim    </div><div class="tabrow2">If the <i>Bud</i> switch <i><span class="quote">&quot;-modules&quot;</span></i> was 
     232                          used, this defines the string which <i>Bud</i> will 
    228233                          insert in between each listed module. 
    229234                          <span class="eg">Example: "\n"</span></div> 
    230 <div class="tabrow1">ModOutFile     </div><div class="tabrow2">If the <i>Build</i> switch <i><span class="quote">&quot;-modules&quot;</span></i> was 
     235<div class="tabrow1">ModOutFile     </div><div class="tabrow2">If the <i>Bud</i> switch <i><span class="quote">&quot;-modules&quot;</span></i> was 
    231236                          used, this defines the output file's suffix. This 
    232237                          is only used if the <i><span class="quote">&quot;-modules&quot;</span></i> switch 
     
    255260</div> 
    256261 
    257 <p><span class="example"><i>Example:</i> </span></p><pre class="code">INIT:MacroExtention = bmc 
     262<p><span class="example"><i>Example:</i> </span></p><pre class="code">INIT:MacroExtension = bmc 
    258263INIT:LinkerPath = /u2/qwerty/ 
    259264INIT:AssumedLibs = c,kde,mgui 
     
    263268<table class="conftab">  <thead class="confthead">    <td class="confthcell"><i>INIT:</i> item</td><td class="confthcell">DigitalMars-Windows</td><td class="confthcell">GDC-Windows</td><td class="confthcell">DigitalMars-Unix</td><td class="confthcell">GDC-Unix</td> 
    264269  </thead> 
    265   <tr class="confrow"><td class="confcell"><strong>ExeExtention</strong>&nbsp;</td><td class="confcell">exe&nbsp;</td><td class="confcell">exe&nbsp;</td><td class="confcell">&nbsp;</td><td class="confcell">&nbsp;</td></tr> 
    266   <tr class="confrow"><td class="confcell"><strong>LibExtention</strong>&nbsp;</td><td class="confcell">lib&nbsp;</td><td class="confcell">lib&nbsp;</td><td class="confcell">a&nbsp;</td><td class="confcell">a&nbsp;</td></tr> 
    267   <tr class="confrow"><td class="confcell"><strong>ObjExtention</strong>&nbsp;</td><td class="confcell">obj&nbsp;</td><td class="confcell">obj&nbsp;</td><td class="confcell">o&nbsp;</td><td class="confcell">o&nbsp;</td></tr> 
    268   <tr class="confrow"><td class="confcell"><strong>ShrLibExtention</strong>&nbsp;</td><td class="confcell">dll&nbsp;</td><td class="confcell">dll&nbsp;</td><td class="confcell">s&nbsp;</td><td class="confcell">s&nbsp;</td></tr> 
    269   <tr class="confrow"><td class="confcell"><strong>SrcExtention</strong>&nbsp;</td><td class="confcell">d&nbsp;</td><td class="confcell">d&nbsp;</td><td class="confcell">d&nbsp;</td><td class="confcell">d&nbsp;</td></tr> 
    270   <tr class="confrow"><td class="confcell"><strong>MacroExtention</strong>&nbsp;</td><td class="confcell">mac&nbsp;</td><td class="confcell">mac&nbsp;</td><td class="confcell">mac&nbsp;</td><td class="confcell">mac&nbsp;</td></tr> 
    271   <tr class="confrow"><td class="confcell"><strong>DdocExtention</strong>&nbsp;</td><td class="confcell">ddoc&nbsp;</td><td class="confcell">ddoc&nbsp;</td><td class="confcell">ddoc&nbsp;</td><td class="confcell">ddoc&nbsp;</td></tr> 
     270  <tr class="confrow"><td class="confcell"><strong>ExeExtension</strong>&nbsp;</td><td class="confcell">exe&nbsp;</td><td class="confcell">exe&nbsp;</td><td class="confcell">&nbsp;</td><td class="confcell">&nbsp;</td></tr> 
     271  <tr class="confrow"><td class="confcell"><strong>LibExtension</strong>&nbsp;</td><td class="confcell">lib&nbsp;</td><td class="confcell">lib&nbsp;</td><td class="confcell">a&nbsp;</td><td class="confcell">a&nbsp;</td></tr> 
     272  <tr class="confrow"><td class="confcell"><strong>ObjExtension</strong>&nbsp;</td><td class="confcell">obj&nbsp;</td><td class="confcell">obj&nbsp;</td><td class="confcell">o&nbsp;</td><td class="confcell">o&nbsp;</td></tr> 
     273  <tr class="confrow"><td class="confcell"><strong>ShrLibExtension</strong>&nbsp;</td><td class="confcell">dll&nbsp;</td><td class="confcell">dll&nbsp;</td><td class="confcell">s&nbsp;</td><td class="confcell">s&nbsp;</td></tr> 
     274  <tr class="confrow"><td class="confcell"><strong>SrcExtension</strong>&nbsp;</td><td class="confcell">d&nbsp;</td><td class="confcell">d&nbsp;</td><td class="confcell">d&nbsp;</td><td class="confcell">d&nbsp;</td></tr> 
     275  <tr class="confrow"><td class="confcell"><strong>MacroExtension</strong>&nbsp;</td><td class="confcell">mac&nbsp;</td><td class="confcell">mac&nbsp;</td><td class="confcell">mac&nbsp;</td><td class="confcell">mac&nbsp;</td></tr> 
     276  <tr class="confrow"><td class="confcell"><strong>DdocExtension</strong>&nbsp;</td><td class="confcell">ddoc&nbsp;</td><td class="confcell">ddoc&nbsp;</td><td class="confcell">ddoc&nbsp;</td><td class="confcell">ddoc&nbsp;</td></tr> 
    272277  <tr class="confrow"><td class="confcell"><strong>CompilerExe</strong>&nbsp;</td><td class="confcell">dmd.exe&nbsp;</td><td class="confcell">gdc.exe&nbsp;</td><td class="confcell">dmd&nbsp;</td><td class="confcell">gdc&nbsp;</td></tr> 
    273278  <tr class="confrow"><td class="confcell"><strong>CompileOnly</strong>&nbsp;</td><td class="confcell">-c&nbsp;</td><td class="confcell">-c&nbsp;</td><td class="confcell">-c&nbsp;</td><td class="confcell">-c&nbsp;</td></tr> 
     
    420425 
    421426 
    422                  <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Wed Sep 20 16:04:49 2006 
     427                 <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Mon Oct 16 11:03:25 2006 
    423428 </span></div> 
    424429                 </body> 
  • trunk/Docs/dlls.html

    r49 r50  
    1010 
    1111 
    12 <p class="page_title">Build Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
     12<p class="page_title"><i>Bud</i> Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
    1313                 <br> <a href="User_Manual.html#toc"><span class="tocref">(table of contents)</span></a></p> 
    1414                 <h1 class="topic"><a name="dll_libraries">Topic: DLL Libraries</a></h1> 
    15 <div class="section"><h2 class="short_title">How to create a DLL library using Build.</h2> 
     15<div class="section"><h2 class="short_title">How to create a DLL library using <i>Bud</i>.</h2> 
    1616<br> 
    17 When Build finds a <b>DllMain()</b> function, or the <b>-dll</b> switch is used, it 
     17When <i>Bud</i> finds a <b>DllMain()</b> function, or the <b>-dll</b> switch is used, it 
    1818creates a special type of Module Definition file, and sets the target to 
    1919to be a DLL file. The Module Definition file generated takes the form ... 
     
    3030Also, if you have the program <b>implib</b> in your path, it will be run 
    3131after the DLL file is created, in order to also create a <b>.lib</b> 
    32 library to interface with the DLL. Build currently supports both the 
     32library to interface with the DLL. <i>Bud</i> currently supports both the 
    3333<i>DigitalMars</i> version and the <i>Borland (Inprise)</i> version of <b>implib</b>. 
    3434</div> 
     
    3636 
    3737 
    38                  <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Wed Sep 20 16:04:49 2006 
     38                 <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Mon Oct 16 11:03:25 2006 
    3939 </span></div> 
    4040                 </body> 
  • trunk/Docs/introduction.html

    r49 r50  
    1010 
    1111 
    12 <p class="page_title">Build Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
     12<p class="page_title"><i>Bud</i> Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
    1313                 <br> <a href="User_Manual.html#toc"><span class="tocref">(table of contents)</span></a></p> 
    1414                 <h1 class="topic"><a name="introduction">Topic: Introduction</a></h1> 
     
    2828 
    2929 
    30                  <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Wed Sep 20 16:04:49 2006 
     30                 <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Mon Oct 16 11:03:25 2006 
    3131 </span></div> 
    3232                 </body> 
  • trunk/Docs/macros.html

    r49 r50  
    1010 
    1111 
    12 <p class="page_title">Build Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
     12<p class="page_title"><i>Bud</i> Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
    1313                 <br> <a href="User_Manual.html#toc"><span class="tocref">(table of contents)</span></a></p> 
    1414                 <h1 class="topic"><a name="macros">Topic: Macros</a></h1> 
    15 <div class="section">The <i>macro</i> system in Build works by transforming the contents of a file, 
     15<div class="section">The <i>macro</i> system in <i>Bud</i> works by transforming the contents of a file, 
    1616via the use of special commands, into a new file that will be 
    1717compiled. 
    1818<br/>&nbsp;<br/> 
    1919The macro system is fairly restricted for now but a much more powerful 
    20 facility will be available in subsequent releases of Build. However, in spite 
     20facility will be available in subsequent releases of <i>Bud</i>. However, in spite 
    2121of this, a lot can be achieved by the current macro facility. 
    2222<br/>&nbsp;<br/> 
     
    2424 
    2525<div class="section"><b>How it Works</b><br> 
    26 Build firstly examines the default Macro Definition File (MDF) 
     26<i>Bud</i> firstly examines the default Macro Definition File (MDF) 
    2727and preprocesses 
    2828the defined special commands in preparation for any macro files it may be 
     
    137137</pre> 
    138138Additionally there is another command that is only recognized when embedded 
    139 in a macro file. This is the <b>output</b> command. It tells <i>Build</i> what 
     139in a macro file. This is the <b>output</b> command. It tells <i>Bud</i> what 
    140140name to use for the transformed file. 
    141141<p><span class="example"><i>Example:</i> Send output to another file</span></p><pre class="code">@output ../result/mytest.d 
     
    143143If the <b>output</b> command is not found in a file, the transformed file 
    144144is assumed to tbe the same name as the macro file but with ".d" as 
    145 the extention. In other words, "test.mac" when transformed becomes "test.d". 
     145the extension. In other words, "test.mac" when transformed becomes "test.d". 
    146146<br/>&nbsp;<br/> 
    147147It is important to note that <b>all</b> embedded macro commands are removed from 
     
    151151 
    152152 
    153                  <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Wed Sep 20 16:04:49 2006 
     153                 <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Mon Oct 16 11:03:25 2006 
    154154 </span></div> 
    155155                 </body> 
  • trunk/Docs/pragmas.html

    r49 r50  
    1010 
    1111 
    12 <p class="page_title">Build Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
     12<p class="page_title"><i>Bud</i> Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
    1313                 <br> <a href="User_Manual.html#toc"><span class="tocref">(table of contents)</span></a></p> 
    1414                 <h1 class="topic"><a name="pragmas">Topic: Pragmas</a></h1> 
     
    6161<div class="section"><h2 class="section"><a name="pragma_ignore">pragma: ignore</a></h2> 
    6262This identifies that the current module is not to be passed to 
    63 the compiler or linker. It is however scanned by Build and can thus 
    64 contain Build pragma directives and import statements. This would be 
     63the compiler or linker. It is however scanned by <i>Bud</i> and can thus 
     64contain <i>Bud</i> pragma directives and import statements. This would be 
    6565used to create a special <i>all.d</i> file to pull in all the modules 
    6666for a library or program. 
     
    7878This identifies a required file which is not otherwise imported. 
    7979In some applications, especially ones converted over from C, it is 
    80 possible that the file on the <i>Build</i> command line does not directly 
     80possible that the file on the <i>Bud</i> command line does not directly 
    8181or indirectly import a required file. In those situations, you can 
    8282use this pragma to tell build to include it in the compilation checking 
     
    144144<br/>&nbsp;<br/> 
    145145The utility searches for the <i>FILENAME</i> in the currently defined 'import' 
    146 paths and if doesn't exist, <i>Build</i> will abort. 
     146paths and if doesn't exist, <i>Bud</i> will abort. 
    147147<br/>&nbsp;<br/> 
    148148The <i>OPTIONS</i> can be included if you need to pass any special values 
     
    156156replaced with <i>-wc -x</i> and <i>abc.hp</i> respectively. 
    157157<br/>&nbsp;<br/> 
    158 There are some OPTIONS that have a special meaning to <i>Build</i>. 
     158There are some OPTIONS that have a special meaning to <i>Bud</i>. 
    159159<dl><dt>rule=&lt;name&gt;</dt><dd>This identifies the name of the rule to use. 
    160 If this isn't supplied, the rule is found by matching the file extention 
     160If this isn't supplied, the rule is found by matching the file extension 
    161161on the <i>FILENAME</i> against the <i>in=</i> and <i>out=</i> file types in 
    162162each rule definition.</dd> 
     
    177177By default, the output file from the external tool is added to the linkage 
    178178set of files, and the input file is ignored. These behaviours can be changed 
    179 by options in the <a href="rules.html">Rule definition</a>. It is possible to tell <i>Build</i> to 
     179by options in the <a href="rules.html">Rule definition</a>. It is possible to tell <i>Bud</i> to 
    180180compile, link or ignore the input file and/or the output file. 
    181181<br/>&nbsp;<br/> 
     
    243243 
    244244 
    245                  <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Wed Sep 20 16:04:49 2006 
     245                 <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Mon Oct 16 11:03:25 2006 
    246246 </span></div> 
    247247                 </body> 
  • trunk/Docs/profile_file.html

    r49 r50  
    1010 
    1111 
    12 <p class="page_title">Build Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
     12<p class="page_title"><i>Bud</i> Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
    1313                 <br> <a href="User_Manual.html#toc"><span class="tocref">(table of contents)</span></a></p> 
    1414                 <h1 class="topic"><a name="profile_file">Topic: Profile File</a></h1> 
    1515<div class="section">The utility's profile is used to specify various values 
    1616for the utility. The file is called <b>build.pfl</b>. You can have from zero 
    17 to three profile files because the <i>Build</i> utility looks in each 
     17to three profile files because the <i>Bud</i> utility looks in each 
    1818of three places for a profile file, and it uses each one that it finds. 
    19 It looks in the folder that <i>Build</i> is installed, then in the folder 
     19It looks in the folder that <i>Bud</i> is installed, then in the folder 
    2020that the compiler is installed, and finally in the current folder. 
    2121<br/>&nbsp;<br/> 
     
    100100 
    101101 
    102                  <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Wed Sep 20 16:04:49 2006 
     102                 <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Mon Oct 16 11:03:25 2006 
    103103 </span></div> 
    104104                 </body> 
  • trunk/Docs/response_file.html

    r49 r50  
    1010 
    1111 
    12 <p class="page_title">Build Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
     12<p class="page_title"><i>Bud</i> Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
    1313                 <br> <a href="User_Manual.html#toc"><span class="tocref">(table of contents)</span></a></p> 
    1414                 <h1 class="topic"><a name="response_file">Topic: Response File</a></h1> 
     
    5050 
    5151 
    52                  <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Wed Sep 20 16:04:49 2006 
     52                 <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Mon Oct 16 11:03:25 2006 
    5353 </span></div> 
    5454                 </body> 
  • trunk/Docs/rules.html

    r49 r50  
    1010 
    1111 
    12 <p class="page_title">Build Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
     12<p class="page_title"><i>Bud</i> Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
    1313                 <br> <a href="User_Manual.html#toc"><span class="tocref">(table of contents)</span></a></p> 
    1414                 <h1 class="topic"><a name="rule_definition_file">Topic: Rule Definition File</a></h1> 
     
    2222The default Rule Definition File is called <span class="quote">&quot;default.rdf&quot;</span> but this 
    2323can be changed in the <a href="configuration_file.html">Configuration File</a>. 
    24 If you don't specify a full path to the file, <i>Build</i> searches for it. 
    25 It first first looks in the directory where <i>Build</i> is installed, and if 
     24If you don't specify a full path to the file, <i>Bud</i> searches for it. 
     25It first first looks in the directory where <i>Bud</i> is installed, and if 
    2626it is not found there, the scans throught the directories in the 
    2727PATH environment symbol. 
     
    3939  <tr class="row">     <td class="cell">tool=&lt;command pattern&gt;&nbsp;</td> <td class="cell">Yes&nbsp;</td> <td class="cell">Defines the command line to use.&nbsp;</td> 
    4040     </tr> 
    41   <tr class="row">     <td class="cell">in=&lt;extention&gt;&nbsp;</td> <td class="cell">No&nbsp;</td> <td class="cell">Specifies the file type (extension) of the input file&nbsp;</td> 
     41  <tr class="row">     <td class="cell">in=&lt;extension&gt;&nbsp;</td> <td class="cell">No&nbsp;</td> <td class="cell">Specifies the file type (extension) of the input file&nbsp;</td> 
    4242     </tr> 
    43   <tr class="row">     <td class="cell">out=&lt;extention&gt;&nbsp;</td> <td class="cell">No&nbsp;</td> <td class="cell">Specifies the file type (extension) of the output file&nbsp;</td> 
     43  <tr class="row">     <td class="cell">out=&lt;extension&gt;&nbsp;</td> <td class="cell">No&nbsp;</td> <td class="cell">Specifies the file type (extension) of the output file&nbsp;</td> 
    4444     </tr> 
    4545  <tr class="row">     <td class="cell">in_use=&lt;usage code&gt;&nbsp;</td> <td class="cell">No&nbsp;</td> 
     
    6464in braces. At compile time, the tokens are replaced by replacement text 
    6565taken from the <b>pragma(build)</b> statement that invoked the rule. In addition, 
    66 <i>Build</i> also generates some reserved tokens. 
     66<i>Bud</i> also generates some reserved tokens. 
    6767<table class="table"><thead class="thead"><tr class="row"><td class="thcell">Reserved Token&nbsp;</td> <td class="thcell">Usage&nbsp;</td></tr> 
    6868</thead> 
     
    7575</table> 
    7676<p class="note"><span class="noteid">NOTE:</span><span class="notebody"> *This is everything up to but not including the final '.' character in the name.</span></p> 
    77 <i>Build</i> ensures that the outfile's path will exist before the tool 
     77<i>Bud</i> ensures that the outfile's path will exist before the tool 
    7878is run. 
    7979<p><span class="example"><i>Example:</i> Sample RDF</span></p><pre class="code">----- Windows Resource Compiler -------- 
     
    9898 
    9999 
    100                  <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Wed Sep 20 16:04:49 2006 
     100                 <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Mon Oct 16 11:03:25 2006 
    101101 </span></div> 
    102102                 </body> 
  • trunk/Docs/switches.html

    r49 r50  
    1010 
    1111 
    12 <p class="page_title">Build Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
     12<p class="page_title"><i>Bud</i> Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
    1313                 <br> <a href="User_Manual.html#toc"><span class="tocref">(table of contents)</span></a></p> 
    1414                 <h1 class="topic"><a name="switches">Topic: Switches</a></h1> 
    15 <div class="section"><i>Build</i> supports a number of command line switches to control its 
     15<div class="section"><i>Bud</i> supports a number of command line switches to control its 
    1616default assumptions. All switches begin with a <b>'-'</b>. Any switch that 
    1717begins with a double dash <b>'--'</b> has the effect of cancelling that 
     
    3636<h2 class="section"><a name="switch_v">switch: -v<span class="secdef">Global verbose mode</span></a></h2> 
    3737<div class="indent"><br> 
    38 Sets <i>verbose</i> mode on for both <i>Build</i> and for the compiler. 
     38Sets <i>verbose</i> mode on for both <i>Bud</i> and for the compiler. 
    3939</div> 
    4040 
    4141<h2 class="section"><a name="switch_V">switch: -V<span class="secdef">Normal verbose mode</span></a></h2> 
    4242<div class="indent"><br> 
    43 Set <i>verbose</i> mode on for just <i>Build</i> and <b>not</b> for the compiler. 
     43Set <i>verbose</i> mode on for just <i>Bud</i> and <b>not</b> for the compiler. 
     44</div> 
     45 
     46<h2 class="section"><a name="switch_explicit">switch: -explicit<span class="secdef">Process only explicitly named files</span></a></h2> 
     47<div class="indent"><br> 
     48Normally, the utility will compile not only the files named in the command line, 
     49but also any file named in <i>import</i> statements if they require it. This 
     50switch will force the utility to only compile files named on the 
     51command line. 
     52<p><span class="example"><i>Example:</i> Only compile the two files named</span></p><pre class="code">build fileone.d filetwo.d -explicit 
     53</pre> 
     54</div> 
     55 
     56<h2 class="section"><a name="switch_usefinal">switch: -usefinal<span class="secdef">Allow the processing of 
     57 'FINAL' processing</span></a></h2> 
     58<div class="indent"><br> 
     59By default, all the <i>FINAL</i> commands found in the configuration files 
     60are processed after successful compilation. You can control whether you 
     61want this or not by using this switch. 
     62<p><span class="example"><i>Example:</i> Prevent processing of FINAL commands</span></p><pre class="code">-usefinal=no 
     63</pre> 
     64<p><span class="example"><i>Example:</i> Ensure processing of FINAL commands (default)</span></p><pre class="code">-usefinal=yes 
     65</pre> 
     66</div> 
     67 
     68<h2 class="section"><a name="switch_emptyargs">switch: -emptyargs<span class="secdef">Ignore empty commandline arguments</span></a></h2> 
     69<div class="indent"><br> 
     70By default, if <i>Bud</i> comes across any empty arguments from either the commandline 
     71or configuration file, they are simply ignored. However by setting this switch 
     72to 'yes', you can force <i>Bud</i> to abort if it finds an empty argument. 
     73<p><span class="example"><i>Example:</i> Abort on finding an empty argument</span></p><pre class="code">-emptyargs=no 
     74</pre> 
     75<p><span class="example"><i>Example:</i> Ignore empty arguments (default)</span></p><pre class="code">-emptyargs=yes 
     76</pre> 
    4477</div> 
    4578 
     
    5184<h2 class="section"><a name="switch_DCPATH">switch: -DCPATH<span class="secdef">Identifies where the compiler has been installed.</span></a></h2> 
    5285<div class="indent"><br> 
    53 Normally, <i>Build</i> scans the PATH environment symbol to find where the 
     86Normally, <i>Bud</i> scans the PATH environment symbol to find where the 
    5487 D compiler is located. However, if you need to use the compiler from 
    55  a different location, you would use this switch to tell <i>Build</i> where 
     88 a different location, you would use this switch to tell <i>Bud</i> where 
    5689 it is. 
    5790 
     
    68101<h2 class="section"><a name="switch_CFPATH">switch: -CFPATH<span class="secdef">Identifies where the D config file has been installed.</span></a></h2> 
    69102<div class="indent"><br> 
    70 Normally, <i>Build</i> looks in the same place that the compiler is 
     103Normally, <i>Bud</i> looks in the same place that the compiler is 
    71104 installed in, but if you need to use a different configuration 
    72  path from that, you would use this switch to tell <i>Build</i> where 
     105 path from that, you would use this switch to tell <i>Bud</i> where 
    73106 it is. 
    74107 
     
    77110</div> 
    78111 
     112<h2 class="section"><a name="switch_BCFPATH">switch: -BCFPATH<span class="secdef">Identifies where a <i>Bud</i> config file has been installed.</span></a></h2> 
     113<div class="indent"><br> 
     114<i>Bud</i> looks for configuration files in the following places... <br> 
     115<div class="list"><ul>  <li class="item">The directory that the utility is installed in 
     116  <li class="item">The directory defined by this switch -BCFPATH or the BCFPATH environment switch 
     117  <li class="item">The directory that the compiler is installed in 
     118  <li class="item">The current directory 
     119  </ul></div> 
     120<p><span class="example"><i>Example:</i> </span></p><pre class="code">  -BCFPATHc:\myproject\configs 
     121</pre> 
     122</div> 
     123 
    79124<h2 class="section"><a name="switch_full">switch: -full<span class="secdef">Causes all source files to be compiled.</span></a></h2> 
    80125<div class="indent"><br> 
    81 Normally, <i>Build</i> only compiles a source file if it's object file 
     126Normally, <i>Bud</i> only compiles a source file if it's object file 
    82127is out of date or missing. This switch forces all source files to be 
    83128recompiled, even if not strictly required. 
     
    88133<h2 class="section"><a name="switch_link">switch: -link<span class="secdef">Forces the linker to be called instead of the librarian.</span></a></h2> 
    89134<div class="indent"><br> 
    90 Normally, if <i>Build</i> does not find a <b>main()</b> or <b>WinMain()</b> function 
     135Normally, if <i>Bud</i> does not find a <b>main()</b> or <b>WinMain()</b> function 
    91136 in the source files, it creates a library to contain the object 
    92 files. But when this switch is used, <i>Build</i> will attempt to 
     137files. But when this switch is used, <i>Bud</i> will attempt to 
    93138 create an application by calling the linker rather than the librarian. 
    94139 
     
    125170<h2 class="section"><a name="switch_nolink">switch: -nolink<span class="secdef">Ensures that the linker is not called.</span></a></h2> 
    126171<div class="indent"><br> 
    127 Normally, if <i>Build</i> finds a <b>main()</b> or <b>WinMain()</b> function, it 
     172Normally, if <i>Bud</i> finds a <b>main()</b> or <b>WinMain()</b> function, it 
    128173tries to create an application by calling the linker. If you use 
    129174this switch however, the linker will not be called. 
     
    137182<h2 class="section"><a name="switch_lib">switch: -lib<span class="secdef">Forces the object files to be placed in a library.</span></a></h2> 
    138183<div class="indent"><br> 
    139 Normally, if <i>Build</i> finds a <b>main()</b> or <b>WinMain()</b> function, it 
     184Normally, if <i>Bud</i> finds a <b>main()</b> or <b>WinMain()</b> function, it 
    140185tries to create an application by calling the linker. But if you 
    141186use this switch, the librarian is called instead of the linker. 
     
    149194 and  switches.</span></a></h2> 
    150195<div class="indent"><br> 
    151 Normally <i>Build</i> tries to create either an executable or a library file. 
     196Normally <i>Bud</i> tries to create either an executable or a library file. 
    152197However sometimes you just need the object files to be created. 
    153198This switch is literally the same has if you had placed both -nolink and 
     
    159204<h2 class="section"><a name="switch_nolib">switch: -nolib<span class="secdef">Ensures that the object files are not used to form a library.</span></a></h2> 
    160205<div class="indent"><br> 
    161 Normally, if <i>Build</i> does not find a <b>main()</b> or a <b>WinMain()</b> function, 
     206Normally, if <i>Bud</i> does not find a <b>main()</b> or a <b>WinMain()</b> function, 
    162207it calls the librarian to create a library for your object files. 
    163208But if you use this switch, the librarian is not called. 
     
    166211<h2 class="section"><a name="switch_allobj">switch: -allobj<span class="secdef">Ensures that all object files are added to a library.</span></a></h2> 
    167212<div class="indent"><br> 
    168 Normally, <i>Build</i> will only create a library using the object files 
     213Normally, <i>Bud</i> will only create a library using the object files 
    169214that are in the same directory as the new library. You would use 
    170215this switch if you wanted all object files created by this build 
     
    174219<h2 class="section"><a name="switch_cleanup">switch: -cleanup<span class="secdef">Ensures that all working files created during the run are removed.</span></a></h2> 
    175220<div class="indent"><br> 
    176 Normally, <i>Build</i> does not delete any object files or working files 
    177 when it finishes a session. You can use this switch to have <i>Build</i> 
     221Normally, <i>Bud</i> does not delete any object files or working files 
     222when it finishes a session. You can use this switch to have <i>Bud</i> 
    178223clean up after itself. This will remove all object files created 
    179224in this run, plus any temporary work files. 
     
    255300     Adds a project path to the source search list.</span></a></h2> 
    256301<div class="indent"><br> 
    257 This is used to add a path that will be searched when <i>Build</i> is 
     302This is used to add a path that will be searched when <i>Bud</i> is 
    258303looking for source files that are only supplied with relative paths. 
    259304<br/>&nbsp;<br/> 
     
    265310<p><span class="example"><i>Example:</i> </span></p><pre class="code">build editor codeparser -PPc:\projects\myeditor\source 
    266311</pre> 
    267 In the above example, <i>Build</i> will look for 'editor.d' and 'codeparser.d' 
     312In the above example, <i>Bud</i> will look for 'editor.d' and 'codeparser.d' 
    268313first in the current directory and then, if it didn't find them, in the 
    269314folder 'c:\projects\myeditor\source'. 
     
    295340<span class="nb"><strong>Note:</strong> This only applies to Windows environment.</span> 
    296341<br/>&nbsp;<br/> 
    297 Normally, if <i>Build</i> finds a <b>DllMain()</b> function it automatically 
     342Normally, if <i>Bud</i> finds a <b>DllMain()</b> function it automatically 
    298343creates a DLL library. However, if you need to force a DLL 
    299344library to be created instead of a normal library, you would use this switch. 
     
    305350<span class="nb"><strong>Note:</strong> This only applies to Windows environment.</span> 
    306351<br/>&nbsp;<br/> 
    307 Normally, if <i>Build</i> finds a <b>WinMain()</b> function it automatically 
     352Normally, if <i>Bud</i> finds a <b>WinMain()</b> function it automatically 
    308353creates a GUI application. However, if you need to force a GUI 
    309354application, you would use this switch. 
     
    314359for Windows NT, 2000, and ME, and 5.0 for Windows XP. 
    315360<br/>&nbsp;<br/> 
    316 By default, <i>Build</i> uses the version of Windows it is running under. 
    317 </div> 
    318  
    319 <h2 class="section"><a name="switch_info">switch: -info<span class="secdef">Displays information about Build.</span></a></h2> 
    320 <div class="indent"><br> 
    321 Displays the version and path of the <i>Build</i> application. 
     361By default, <i>Bud</i> uses the version of Windows it is running under. 
     362</div> 
     363 
     364<h2 class="section"><a name="switch_info">switch: -info<span class="secdef">Displays information about <i>Bud</i>.</span></a></h2> 
     365<div class="indent"><br> 
     366Displays the version and path of the <i>Bud</i> application. 
    322367<p><span class="example"><i>Example:</i> </span></p><pre class="code">Path and Version : y:\util\build.exe v2.9(1197) 
    323368  built on Wed Aug 10 11:03:42 2005 
     
    328373<div class="indent"><br> 
    329374This displays the commandline syntax, including all the switches, used 
    330 to run <i>Build</i>. 
     375to run <i>Bud</i>. 
    331376<br/>&nbsp;<br/> 
    332377This has the aliases of <b>-h</b> and <b>-?</b> 
     
    356401    Identifies a module or package to ignore.</span></a></h2> 
    357402<div class="indent"><br> 
    358 Normally, <i>Build</i> assumes that all imported modules are available 
     403Normally, <i>Bud</i> assumes that all imported modules are available 
    359404to be recompiled if required. You would use this switch if you explictly 
    360 did not want <i>Build</i> to recompile a module. 
     405did not want <i>Bud</i> to recompile a module. 
    361406 
    362407<span class="nb"><strong>Note:</strong> The <i>Phobos</i> package of modules is automatically ignored. This 
    363 means that <i>Build</i> does not try to recompile phobos.</span> 
     408means that <i>Bud</i> does not try to recompile phobos.</span> 
    364409 
    365410<p><span class="example"><i>Example:</i> ignore the module (or package) called 'parser'</span></p><pre class="code">-Xparser 
     
    382427    Identifies the target name to build.</span></a></h2> 
    383428<div class="indent"><br> 
    384 Normally, <i>Build</i> derives the target name from the first file name 
     429Normally, <i>Bud</i> derives the target name from the first file name 
    385430on the command line, or from the pragma(target) if present. 
    386431If however, you wish to override that, use this switch. 
     
    406451   Give Windows libraries to linker</span></a></h2> 
    407452<div class="indent"><br> 
    408 By default, when creating a Windows GUI application, <i>Build</i> will 
     453By default, when creating a Windows GUI application, <i>Bud</i> will 
    409454supply a list of commonly used windows libraries to the linker. However, 
    410455if for some reason you do not want this to happen, you can use this switch 
    411456to disable that. <br/>&nbsp;<br/> 
    412 <b>Note:</b> that this switch is not valid for Posix editions of <i>Build</i>. 
     457<b>Note:</b> that this switch is not valid for Posix editions of <i>Bud</i>. 
    413458</div> 
    414459 
     
    418463Use this switch to cause a Module List File to be created. This 
    419464file will contain a list of all the module names processed by 
    420 <i>Build</i>. You can use the Configuration File to specify the 
     465<i>Bud</i>. You can use the Configuration File to specify the 
    421466layout of this file, but by default the file will look like 
    422467a Ddoc macro definition ... 
     
    434479    Create the Uses/Used-By cross reference file.</span></a></h2> 
    435480<div class="indent"><br> 
    436 This causes <i>Build</i> to create a file that details the modules that 
     481This causes <i>Bud</i> to create a file that details the modules that 
    437482are used by a module and the modules that uses a module. 
    438483<br/>&nbsp;<br/> 
    439484You can optionally specify a name for the cross reference file. If you 
    440485don't then the name of the cross reference file takes the Target file's 
    441 base name and adds the extention ".use". 
     486base name and adds the extension ".use". 
    442487<br/>&nbsp;<br/> 
    443488The file is in two sections. The first, headed by the line <span class="quote">&quot;[USES]&quot;</span> 
     
    471516    Determines where the linker expects the object files.</span></a></h2> 
    472517<div class="indent"><br> 
    473 For <b>DMD</b> environments, <i>Build</i> expects that object files will be created 
     518For <b>DMD</b> environments, <i>Bud</i> expects that object files will be created 
    474519in the same directory as the source file, or in the directory 
    475520specified in any <a href="#switch_od">-od</a> switch. However, this switch 
    476 can tell <i>Build</i> to expect them in the current directory. 
    477 <br/>&nbsp;<br/> 
    478 For <b>GDC</b> environments, <i>Build</i> expects that object files will be created 
    479 in the current directory. However  this switch can tell <i>Build</i> to expect 
     521can tell <i>Bud</i> to expect them in the current directory. 
     522<br/>&nbsp;<br/> 
     523For <b>GDC</b> environments, <i>Bud</i> expects that object files will be created 
     524in the current directory. However  this switch can tell <i>Bud</i> to expect 
    480525then to be in same directory as the source file, or in the directory 
    481526specified in any <a href="#switch_od">-od</a> switch. 
     
    497542 
    498543 
    499                  <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Wed Sep 20 16:04:49 2006 
     544                 <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Mon Oct 16 11:03:25 2006 
    500545 </span></div> 
    501546                 </body> 
  • trunk/Docs/todo.html

    r49 r50  
    1010 
    1111 
    12 <p class="page_title">Build Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
     12<p class="page_title"><i>Bud</i> Utility <span class="page_title">&copy; 2006, Derek Parnell, Melbourne</span> 
    1313                 <br> <a href="User_Manual.html#toc"><span class="tocref">(table of contents)</span></a></p> 
    1414                 <h1 class="topic"><a name="todo">Topic: Things Still To Do</a></h1> 
     
    3939 
    4040 
    41                  <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Wed Sep 20 16:04:49 2006 
     41                 <hr><div class="footnote"><span class="footnote">Generated by Ddoc, Mon Oct 16 11:03:25 2006 
    4242 </span></div> 
    4343                 </body> 
  • trunk/Source/build.d

    r49 r50  
    66 Authors: Derek Parnell, Melbourne 
    77 Initial Creation: January 2005 
    8  Version: 3.03 
    9  Date: September 2006 
     8 Version: 3.04 
     9 Date: October 2006 
    1010 License: 
    1111        This software is provided 'as-is', without any express or implied 
     
    4040    version(Windows) { 
    4141        // OptLink Definition File 
    42         pragma (build_def, "VERSION 3.03"); 
     42        pragma (build_def, "VERSION 3.04"); 
    4343    } 
    4444} 
     
    4646 
    4747private{ 
     48    alias char[] string; 
    4849    // --------- imports ---------------- 
    4950    static import source;          // Source File class 
     
    7273    } 
    7374 
    74     version(linux) 
     75    else version(linux) 
    7576    { 
    7677        static import std.c.linux.linux; 
    7778    } 
    7879 
    79     version(darwin) 
     80    else version(darwin) 
    8081    { 
    8182        static import std.c.darwin.darwin; 
     
    9091    class BuildException : Error 
    9192    { 
    92         this(char[] pMsg) 
     93        this(string pMsg) 
    9394        { 
    9495            super (vAppName ~ ":" ~ pMsg); 
     
    101102    // --------- internal strings ---------------- 
    102103    version(Windows) { 
    103         char[] vExeExtention=`exe`; 
    104         char[] vLibExtention=`lib`; 
    105         char[] vObjExtention=`obj`; 
    106         char[] vShrLibExtention=`dll`; 
    107         char[] vLinkerStdOut = ">nul"; 
     104        string vExeExtension=`exe`; 
     105        string vLibExtension=`lib`; 
     106        string vObjExtension=`obj`; 
     107        string vShrLibExtension=`dll`; 
     108        string vLinkerStdOut = ">nul"; 
    108109    } 
    109110 
    110111    version(Posix) { 
    111         char[] vExeExtention=``; 
    112         char[] vLibExtention=`a`; 
    113         char[] vObjExtention=`o`; 
    114         char[] vShrLibExtention=`s`; 
    115         char[] vLinkerStdOut = ">/dev/null"; 
    116     } 
    117     char[] vSrcExtention=`d`; 
    118     char[] vSrcDInterfaceExt = `di`; 
    119     char[] vMacroExtention=`mac`; 
    120     char[] vDdocExtention=`ddoc`; 
     112        string vExeExtension=``; 
     113        string vLibExtension=`a`; 
     114        string vObjExtension=`o`; 
     115        string vShrLibExtension=`so`; 
     116        string vLinkerStdOut = ">/dev/null"; 
     117    } 
     118    string vSrcExtension=`d`; 
     119    string vSrcDInterfaceExt = `di`; 
     120    string vMacroExtension=`mac`; 
     121    string vDdocExtension=`ddoc`; 
    121122 
    122123    // ---------- Module scoped globals ----------- 
    123124    version(DigitalMars) { 
    124125        version(Windows) { 
    125             char[] vCompilerExe=`dmd.exe`; 
    126             char[] vCompileOnly = `-c`; 
    127             char[] vLinkerExe=`link.exe`; 
     126            string vCompilerExe=`dmd.exe`; 
     127            string vCompileOnly = `-c`; 
     128            string vLinkerExe=`link.exe`; 
    128129            bool   vPostSwitches = true; 
    129130            bool   vAppendLinkSwitches = true; 
    130             char[] vArgDelim = ","; 
    131             char[] vArgFileDelim = "+"; 
    132             char[] vConfigFile=`sc.ini`; 
    133             char[] vCompilerPath=``; 
    134             char[] vLinkerPath=``; 
    135             char[] vLinkerDefs=`/noi/map`; 
    136             char[] vConfigPath=``; 
    137             char[] vLibPaths = ``; 
    138             char[] vConfigSep = ";"; 
    139             char[] vLibrarian = `lib.exe`; 
    140             char[] vLibrarianOpts = `-c -p256`; 
    141             char[] vHomePathId = "HOME"; 
    142             char[] vEtcPath    = ""; 
    143             char[] vSymInfoSwitch = "/co"; 
    144             char[] vOutFileSwitch = "-of"; 
     131            string vArgDelim = ","; 
     132            string vArgFileDelim = "+"; 
     133            string vConfigFile=`sc.ini`; 
     134            string vCompilerPath=``; 
     135            string vLinkerPath=``; 
     136            string vLinkerDefs=`/noi/map`; 
     137            string vConfigPath=``; 
     138            string vLibPaths = ``; 
     139            string vConfigSep = ";"; 
     140            string vLibrarian = `lib.exe`; 
     141            string vLibrarianOpts = `-c -p256`; 
     142            string vHomePathId = "HOME"; 
     143            string vEtcPath    = ""; 
     144            string vSymInfoSwitch = "/co"; 
     145            string vOutFileSwitch = "-of"; 
     146            string vLinkLibSwitch = ""; 
    145147        } 
    146148 
    147149        version(Posix) { 
    148             char[] vCompilerExe=`dmd`; 
    149             char[] vCompileOnly= `-c`; 
    150             char[] vLinkerExe=`gcc`; 
     150            string vCompilerExe=`dmd`; 
     151            string vCompileOnly= `-c`; 
     152            string vLinkerExe=`gcc`; 
    151153            bool   vPostSwitches = false; 
    152154            bool   vAppendLinkSwitches = false; 
    153             char[] vArgDelim = " "; 
    154             char[] vArgFileDelim = " "; 
    155             char[] vConfigFile=`dmd.conf`; 
    156             char[] vCompilerPath=``; 
    157             char[] vLinkerPath=``; 
    158             char[] vLinkerDefs=``; 
    159             char[] vConfigPath=`/etc/`; 
    160             char[] vLibPaths = ``; 
    161             char[] vConfigSep = ":"; 
    162             char[] vLibrarian = `ar`; 
    163             char[] vLibrarianOpts = `-r`; 
    164             char[] vHomePathId = "HOME"; 
    165             char[] vEtcPath    = "/etc/"; 
    166             char[] vSymInfoSwitch = "-g"; 
    167             char[] vOutFileSwitch = "-o "; 
    168         } 
    169  
    170         char[]     vVersionSwitch = "-version"; 
    171         char[]     vDebugSwitch = "-debug"; 
    172         char[][]   vCompilerDefs; 
    173         char[]     vImportPath = "-I"; 
     155            string vArgDelim = " "; 
     156            string vArgFileDelim = " "; 
     157            string vConfigFile=`dmd.conf`; 
     158            string vCompilerPath=``; 
     159            string vLinkerPath=``; 
     160            string vLinkerDefs=``; 
     161            string vConfigPath=`/etc/`; 
     162            string vLibPaths = ``; 
     163            string vConfigSep = ":"; 
     164            string vLibrarian = `ar`; 
     165            string vLibrarianOpts = `-r`; 
     166            string vHomePathId = "HOME"; 
     167            string vEtcPath    = "/etc/"; 
     168            string vSymInfoSwitch = "-g"; 
     169            string vOutFileSwitch = "-o "; 
     170            string vLinkLibSwitch = "-l"; 
     171        } 
     172 
     173        string     vVersionSwitch = "-version"; 
     174        string     vDebugSwitch = "-debug"; 
     175        string[]   vCompilerDefs; 
     176        string     vImportPath = "-I"; 
    174177        bool       vUseModBaseName = false; 
    175         char[]     vLinkLibSwitch = ""; 
    176178    } 
    177179 
    178180    version(GNU) { 
    179181        version(Windows) { 
    180             char[] vCompilerExe=`gdc.exe`; 
    181             char[] vCompileOnly= `-c`; 
    182             char[] vLinkerExe=`gdc.exe`; 
     182            string vCompilerExe=`gdc.exe`; 
     183            string vCompileOnly= `-c`; 
     184            string vLinkerExe=`gdc.exe`; 
    183185            bool   vPostSwitches = false; 
    184186            bool   vAppendLinkSwitches = false; 
    185             char[] vArgDelim = " "; 
    186             char[] vArgFileDelim = " "; 
    187             char[] vConfigFile=null; 
    188             char[] vCompilerPath=``; 
    189             char[] vLinkerPath=``; 
    190             char[] vLinkerDefs=``; 
    191             char[] vConfigPath=null; 
    192             char[] vLibPaths = ``; 
    193             char[] vConfigSep = ";"; 
    194             char[] vLibrarian = `ar.exe`; 
    195             char[] vLibrarianOpts = `-c`; 
    196             char[] vLinkLibSwitch = "-l"; 
    197             char[] vHomePathId = "HOME"; 
    198             char[] vEtcPath    = ""; 
     187            string vArgDelim = " "; 
     188            string vArgFileDelim = " "; 
     189            string vConfigFile=null; 
     190            string vCompilerPath=``; 
     191            string vLinkerPath=``; 
     192            string vLinkerDefs=``; 
     193            string vConfigPath=null; 
     194            string vLibPaths = ``; 
     195            string vConfigSep = ";"; 
     196            string vLibrarian = `ar.exe`; 
     197            string vLibrarianOpts = `-c`; 
     198            string vLinkLibSwitch = "-l"; 
     199            string vHomePathId = "HOME"; 
     200            string vEtcPath    = ""; 
    199201        } 
    200202 
    201203        version(Posix) { 
    202             char[] vCompilerExe=`gdc`; 
    203             char[] vCompileOnly= `-c`; 
    204             char[] vLinkerExe=`gdc`; 
     204            string vCompilerExe=`gdc`; 
     205            string vCompileOnly= `-c`; 
     206            string vLinkerExe=`gdc`; 
    205207            bool   vPostSwitches = false; 
    206208            bool   vAppendLinkSwitches = false; 
    207             char[] vArgDelim = " "; 
    208             char[] vArgFileDelim = " "; 
    209             char[] vConfigFile=null; 
    210             char[] vCompilerPath=``; 
    211             char[] vLinkerPath=``; 
    212             char[] vLinkerDefs=``; 
    213             char[] vConfigPath=null; 
    214             char[] vLibPaths = ``; 
    215             char[] vConfigSep = ":"; 
    216             char[] vLibrarian = `ar`; 
    217             char[] vLibrarianOpts = `-r`; 
    218             char[] vLinkLibSwitch = "-l"; 
    219             char[] vHomePathId = "HOME"; 
    220             char[] vEtcPath    = "/etc/"; 
    221         } 
    222         char[]     vVersionSwitch = "-fversion"; 
    223         char[]     vDebugSwitch = "-fdebug"; 
    224         char[]     vOutFileSwitch = "-of "; 
    225         char[][]   vCompilerDefs; 
    226         char[]     vImportPath = "-I "; 
    227         char[]     vSymInfoSwitch = "-g"; 
     209            string vArgDelim = " "; 
     210            string vArgFileDelim = " "; 
     211            string vConfigFile=null; 
     212            string vCompilerPath=``; 
     213            string vLinkerPath=``; 
     214            string vLinkerDefs=``; 
     215            string vConfigPath=null; 
     216            string vLibPaths = ``; 
     217            string vConfigSep = ":"; 
     218            string vLibrarian = `ar`; 
     219            string vLibrarianOpts = `-r`; 
     220            string vLinkLibSwitch = "-l"; 
     221            string vHomePathId = "HOME"; 
     222            string vEtcPath    = "/etc/"; 
     223        } 
     224        string     vVersionSwitch = "-fversion"; 
     225        string     vDebugSwitch = "-fdebug"; 
     226        string     vOutFileSwitch = "-o "; 
     227        string[]   vCompilerDefs; 
     228        string     vImportPath = "-I "; 
     229        string     vSymInfoSwitch = "-g"; 
    228230        /* GDC places object files in the directory from which it is called */ 
    229231        bool       vUseModBaseName = true; 
    230232    } 
    231233 
    232     char[]       vOverrideConfigPath = ""; 
    233     char[]       vBuildImportPath = "-I"; 
    234     char[]       vImportPathDelim = ";"; 
    235     char[]       vOutputPath = "-od"; 
    236     char[]       vRunSwitch = "-exec"; 
    237     char[]       vLibrarianPath = ""; 
    238     char[]*      vDelayedValue = null; 
    239     char[]       vTemporaryPath = ""; 
    240     char[]       vLibPathSwitch = "-L"; 
    241     char[]       vMapSwitch = "-M"; 
    242     char[]       vGenDebugInfo = "-g"; 
    243     char[]       vResponseExt = "brf"; 
    244     char[]       vDefResponseFile = "build.brf"; 
    245     char[]       vDefMacroDefFile = "build.mdf"; 
    246     char[]       vUtilsConfigFile = "build.cfg"; 
    247     char[]       vPathId = "PATH";   // Used to locate the environment symbol 
    248  
    249     char[]       vModOutPrefix = "MODULES = \n"; 
    250     char[]       vModOutSuffix = ""; 
    251     char[]       vModOutBody   = "    $(MODULE {mod})\n"; 
    252     char[]       vModOutDelim  = ""; 
    253     char[]       vModOutFile   = "_modules.ddoc"; 
    254  
    255     char[][]     vFinalProc; 
     234    string       vCFGPath = ``; 
     235    string       vOverrideConfigPath = ""; 
     236    string       vBuildImportPath = "-I"; 
     237    string       vImportPathDelim = ";"; 
     238    string       vOutputPath = "-od"; 
     239    string       vRunSwitch = "-exec"; 
     240    string       vLibrarianPath = ""; 
     241    string*      vDelayedValue = null; 
     242    string       vTemporaryPath = ""; 
     243    string       vLibPathSwitch = "-L"; 
     244    string       vMapSwitch = "-M"; 
     245    string       vGenDebugInfo = "-g"; 
     246    string       vResponseExt = "brf"; 
     247    string       vDefResponseFile = "build.brf"; 
     248    string       vDefMacroDefFile = "build.mdf"; 
     249    string       vUtilsConfigFile = "build.cfg"; 
     250    string       vPathId = "PATH";   // Used to locate the environment symbol 
     251 
     252    string       vModOutPrefix = "MODULES = \n"; 
     253    string       vModOutSuffix = ""; 
     254    string       vModOutBody   = "    $(MODULE {mod})\n"; 
     255    string       vModOutDelim  = ""; 
     256    string       vModOutFile   = "_modules.ddoc"; 
     257 
     258    string[]     vFinalProc; 
    256259 
    257260    Bool         vTestRun; 
     261    Bool         vExplicit; 
    258262    Bool         vScanImports; 
    259263    Bool         vNoLink; 
     
    272276    Bool         vUseResponseFile; 
    273277    Bool         vConsoleApp; 
    274  
    275     char[]       vUsesOutput; 
    276     char[]       vSymbolOutName; 
    277     char[]       vRunParms; 
    278     char[]       vTargetExe; 
    279     char[][]     vImportRoots; 
    280     char[][]     vModulesToIgnore; 
    281     char[][]     vModulesToNotice; 
    282     char[][]     vBuildDef; 
    283     char[][]     vDefaultLibs; 
     278    Bool         vUseFinal; 
     279    Bool         vEmptyArgs; 
     280 
     281    string       vUsesOutput; 
     282    string       vSymbolOutName; 
     283    string       vRunParms; 
     284    string       vTargetExe; 
     285    string[]     vImportRoots; 
     286    string[]     vModulesToIgnore; 
     287    string[]     vModulesToNotice; 
     288    string[]     vBuildDef; 
     289    string[]     vDefaultLibs; 
    284290    LibOpt       vLibraryAction = LibOpt.Implicit; 
    285     char[]       vAppPath; 
    286     char[]       vAppName; 
    287     char[]       vAppVersion = "3.03"; 
    288     char[]       vTargetName;           // Output name from first file name. 
    289     char[]       vPragmaTargetName;     // Output name from pragma. 
    290     char[]       vCommandTargetName;    // Output name from switches. 
    291     char[][]     vCmdLineSourceFiles;   // List of source files from command line 
    292     bool[char[]] vLinkFiles;            // List of non-source files from command line 
    293     char[][]     vCombinedArgs;         // All the args are gathered here prior to processing. 
    294     char[][]     vBuildArgs;            // Arguments passed to build 
    295     char[][]     vCompilerArgs;         // Arguments passed to compiler 
    296     char[][]     vSourceScanList;       // The list of places to find source files. 
    297     bool[char[]] vResourceFileTypes; 
    298     char[][]     vUDResTypes; 
     291    string       vAppPath; 
     292    string       vAppName; 
     293    string       vAppVersion = "3.04"; 
     294    string       vTargetName;           // Output name from first file name. 
     295    string       vPragmaTargetName;     // Output name from pragma. 
     296    string       vCommandTargetName;    // Output name from switches. 
     297    string[]     vCmdLineSourceFiles;   // List of source files from command line 
     298    bool[string] vLinkFiles;            // List of non-source files from command line 
     299    string[]     vCombinedArgs;         // All the args are gathered here prior to processing. 
     300    string[]     vBuildArgs;            // Arguments passed to build 
     301    string[]     vCompilerArgs;         // Arguments passed to compiler 
     302    string[]     vSourceScanList;       // The list of places to find source files. 
     303    bool[string] vResourceFileTypes; 
     304    string[]     vUDResTypes; 
    299305 
    300306 
    301307    version(Windows) 
    302308    { 
    303         char[]       vWinVer = ""; 
     309        string       vWinVer = ""; 
    304310        ubyte        vWinVerNum; 
    305311        bool         vAutoWinLibs = true; 
     
    319325    vNoLink = False; 
    320326    vTestRun = False; 
     327    vExplicit = False; 
    321328    vScanImports = False; 
     329    vUseFinal = True; 
     330    vEmptyArgs = True; 
    322331    vForceCompile = False; 
    323332    vSilent = False; 
     
    380389    std.stdio.writefln("             version of the compiler."); 
    381390    std.stdio.writefln("  -CFPATH<path> <path> is where the D config file has been installed."); 
     391    std.stdio.writefln("  -BCFPATH<path> <path> is where the Build config file has been installed."); 
    382392    std.stdio.writefln("  -full      Causes all source files, except ignored modules,"); 
    383393    std.stdio.writefln("              to be compiled."); 
     
    413423   } 
    414424 
     425    std.stdio.writefln("  -explicit  Only compile files explicitly named on the command line."); 
     426    std.stdio.writefln("             All other files, such as imported ones, are not compiled."); 
    415427    std.stdio.writefln("  -LIBOPT<opt> Allows you to pass <opt> to the librarian."); 
    416428    std.stdio.writefln("  -LIBPATH=<pathlist> Used to add a semi-colon delimited list"); 
     
    426438    std.stdio.writefln("               -R will reverse the current usage."); 
    427439    std.stdio.writefln("  -PP<path>  Add a path to the Source Search List"); 
     440    std.stdio.writefln("  -usefinal=<Yes|No> Indicates whether to use any FINAL processes"); 
     441    std.stdio.writefln("              defined in the configuration file."); 
     442    std.stdio.writefln("               -usefinal=Yes will cause the FINAL to be used. This is the default"); 
     443    std.stdio.writefln("               -usefinal=No will prevent the FINAL from being used."); 
    428444 
    429445  version(UseResponseFile) 
     
    532548 
    533549    // Examine any link file dependancies too. 
    534     foreach(int idx, char[] lFileName; vLinkFiles.keys) 
     550    foreach(int idx, string lFileName; vLinkFiles.keys) 
    535551    { 
    536552        util.fdt.FileDateTime lLinkTime = new util.fdt.FileDateTime(lFileName); 
     
    579595    Bool        lLinking; 
    580596    Bool        lBuildRequired; 
    581     char[][]    lFilesToLink; 
    582     char[][]    lFilesToCompile; 
     597    string[]    lFilesToLink; 
     598    string[]    lFilesToCompile; 
    583599    int         lRunResult; 
    584     char[]      lTargetName; 
    585     char[]      lTargetDir; 
     600    string      lTargetName; 
     601    string      lTargetDir; 
    586602    util.fdt.FileDateTime lTargetTime; 
    587603    util.fdt.FileDateTime lMostRecentTime; 
    588604    auto source.Source[]    lNonLinkingSources; 
    589     char[]      lDResponseFileName; 
    590     char[]      lLinkResponseFileName; 
    591     char[]      lLResponseFileName; 
    592     char[]      lDefName; 
    593     char[]      lOutText; 
    594     char[]      lCompilerOpts; 
    595     char[]      lSourcesToCompile; 
    596     char[]      lCommand; 
    597     char[][]    lObjectFiles; 
    598     char[][]    lLibraryFiles; 
     605    string      lDResponseFileName; 
     606    string      lLinkResponseFileName; 
     607    string      lLResponseFileName; 
     608    string      lDefName; 
     609    string      lOutText; 
     610    string      lCompilerOpts; 
     611    string      lSourcesToCompile; 
     612    string      lCommand; 
     613    string[]    lObjectFiles; 
     614    string[]    lLibraryFiles; 
    599615 
    600616 
     
    604620 
    605621    // Examine each supplied source file. 
    606     foreach( char[] lFile; vCmdLineSourceFiles) 
     622    foreach( string lFile; vCmdLineSourceFiles) 
    607623    { 
    608624        lFile = GetFullPathname(lFile, vSourceScanList); 
    609         if (std.path.getExt(lFile) == vMacroExtention) 
     625        if (std.path.getExt(lFile) == vMacroExtension) 
    610626        { 
    611627            version(BuildVerbose) 
     
    615631            } 
    616632 
    617             char[] lAltFile = std.path.addExt( lFile, vSrcExtention); // Make it a D source file. 
     633            string lAltFile = std.path.addExt( lFile, vSrcExtension); // Make it a D source file. 
    618634            if (util.macro.ConvertFile(lFile, "build", lAltFile)) 
    619635                lFile = lAltFile; 
     
    692708    if (vLibraryAction == LibOpt.Build) 
    693709        // Target is a library. 
    694         lTargetName = util.pathex.ReplaceExtention(vTargetName, vLibExtention); 
     710        lTargetName = util.pathex.ReplaceExtension(vTargetName, vLibExtension); 
    695711 
    696712    else if (vNoLink == False) 
     
    699715            if (source.Source.WasMainDLL) 
    700716                // Target is a shared library. 
    701                 lTargetName = util.pathex.ReplaceExtention(vTargetName, vShrLibExtention); 
     717                lTargetName = util.pathex.ReplaceExtension(vTargetName, vShrLibExtension); 
    702718            else 
    703719            { 
    704720                // Target is an executable 
    705                 lTargetName = util.pathex.ReplaceExtention(vTargetName, vExeExtention); 
     721                lTargetName = util.pathex.ReplaceExtension(vTargetName, vExeExtension); 
    706722                vTargetExe = lTargetName; 
    707723            } 
     
    711727            // so assume they know what they are doing and also assume an 
    712728            // executable is required. 
    713             lTargetName = util.pathex.ReplaceExtention(vTargetName, vExeExtention); 
     729            lTargetName = util.pathex.ReplaceExtension(vTargetName, vExeExtension); 
    714730            vTargetExe = lTargetName; 
    715731        } 
     
    773789        // No files to compile, just link files, so collect 
    774790        // all the object files to link in. 
    775         foreach( char[] lFileName; vLinkFiles.keys) 
     791        foreach( string lFileName; vLinkFiles.keys) 
    776792        { 
    777793            // Only include OBJECT files. 
    778             if (util.str.ends(lFileName , vObjExtention) == True) 
     794            if (util.str.ends(lFileName , vObjExtension) == True) 
    779795                lFilesToLink ~= lFileName; 
    780796        } 
     
    804820                // Check each source to see if we need to recompile it. 
    805821                Bool lNeedsCompiling; 
    806                 char[] lShortFileName; 
    807                 char[] lFileType; 
     822                string lShortFileName; 
     823                string lFileType; 
    808824 
    809825                lNeedsCompiling = vForceCompile; 
     
    814830                lShortFileName = util.pathex.AbbreviateFileName(lCurrentSource.FileName); 
    815831                lFileType = std.path.getExt(lShortFileName); 
    816                 if (lFileType != vSrcExtention && lFileType != vDdocExtention) 
     832                if (lFileType != vSrcExtension && lFileType != vDdocExtension) 
    817833                    return 0; 
    818834 
    819835                // Only source files are examined from here on. 
    820                 if (lCurrentSource.NoLink || lFileType == vDdocExtention) 
     836                if (lCurrentSource.NoLink || lFileType == vDdocExtension) 
    821837                { 
    822838                    lNonLinkingSources ~= lCurrentSource; 
     
    848864                    lBuildRequired = True; 
    849865                    lCompiling = True; 
    850                     lFilesToCompile ~= lShortFileName; 
     866 
     867                    if (lCurrentSource.NoCompile == false) 
     868                        lFilesToCompile ~= lShortFileName; 
    851869 
    852870                    // Check to see if I'm allowed to link this file. 
     
    885903    } 
    886904 
    887     foreach(char[] lFileName; lFilesToCompile) 
     905    foreach(string lFileName; lFilesToCompile) 
    888906    { 
    889907        lSourcesToCompile ~= util.str.enquote(lFileName) ~ "\n"; 
     
    934952        if ((vNoDef == False) && (vBuildDef.length > 0)) 
    935953        { 
    936             lDefName = util.pathex.ReplaceExtention(lTargetName, "def"); 
     954            lDefName = util.pathex.ReplaceExtension(lTargetName, "def"); 
    937955            if (vTemporaryPath.length != 0) 
    938956            { 
     
    947965    // Add any library and any external object files required. 
    948966    lLibraryFiles.length = 0; 
    949     foreach (char[] lFileName; vLinkFiles.keys) 
    950     { 
    951         char[] lCmdItem; 
     967    foreach (string lFileName; vLinkFiles.keys) 
     968    { 
     969        string lCmdItem; 
    952970 
    953971        if (lFileName.length > 0) 
    954972        { 
    955973            lCmdItem = lFileName; 
    956             if ( util.str.ends(lCmdItem, "." ~ vLibExtention) == True) 
    957             { 
    958                 // Cut off extention. 
    959                 lCmdItem.length = lCmdItem.length - vLibExtention.length - 1; 
     974            if ( util.str.ends(lCmdItem, "." ~ vLibExtension) == True) 
     975            { 
     976                // Cut off extension. 
     977                lCmdItem.length = lCmdItem.length - vLibExtension.length - 1; 
    960978                lLibraryFiles ~= lCmdItem; 
    961979            } 
     
    973991        { 
    974992            // Ok, I have some compiling to do! 
    975             char[] lCommandLine; 
     993            string lCommandLine; 
    976994 
    977995            lCommandLine = GatherCompilerArgs(lLinking) ~ lSourcesToCompile; 
     
    979997            if (vUseResponseFile == True) 
    980998            { 
    981                 lDResponseFileName = util.pathex.ReplaceExtention(lTargetName, "rsp"); 
     999                lDResponseFileName = util.pathex.ReplaceExtension(lTargetName, "rsp"); 
    9821000                if (vTemporaryPath.length != 0) 
    9831001                { 
     
    10091027        if ( (lRunResult == 0) && (lFilesToLink.length > 0) && (lLinking == True)) 
    10101028        { 
    1011             char[] lCommandLine; 
    1012             char[] lLinkerSwitches; 
     1029            string lCommandLine; 
     1030            string lLinkerSwitches; 
    10131031            Bool IsMapping = False; 
    10141032 
     
    10201038                    vUDResTypes ~= "res"; 
    10211039                } 
    1022                 foreach( char[] lResType; vUDResTypes) 
     1040                foreach( string lResType; vUDResTypes) 
    10231041                { 
    10241042                    vResourceFileTypes[lResType] = true; 
     
    10311049            { 
    10321050                // Transfer linker switches from Compiler switches. 
    1033                 foreach (char[] lCompileArg; vCompilerArgs) 
     1051                foreach (string lCompileArg; vCompilerArgs) 
    10341052                { 
    10351053                    if (util.str.begins(lCompileArg, "-L") == True) 
     
    10381056                    } 
    10391057                } 
    1040                 foreach( char[] lSwitch; std.string.split(vLinkerDefs ~ lLinkerSwitches, "/")) 
     1058                foreach( string lSwitch; std.string.split(vLinkerDefs ~ lLinkerSwitches, "/")) 
    10411059                { 
    10421060                    if (lSwitch == "nomap") 
     
    10511069 
    10521070                // (1) Gather the object file names 
    1053                 foreach(char[] lFile; lFilesToLink) 
    1054                 { 
    1055                     // Only include OBJECT files. 
    1056                     if (std.path.getExt(lFile) == vObjExtention) 
    1057                         lCommandLine ~= lFile ~ vArgFileDelim; 
    1058                 } 
    1059                 if (lCommandLine.length > 0) 
    1060                     lCommandLine[$-1] = '\n'; 
     1071                { 
     1072                    int lCnt = 0; 
     1073                    foreach(string lFile; lFilesToLink) 
     1074                    { 
     1075                        // Only include OBJECT files. 
     1076                        if (std.path.getExt(lFile) == vObjExtension) 
     1077                        { 
     1078                            if (lCnt > 0) 
     1079                                lCommandLine ~= vArgFileDelim; 
     1080                            lCommandLine ~= lFile; 
     1081                            lCnt++; 
     1082                        } 
     1083                    } 
     1084                    lCommandLine ~= "\n"; 
     1085                } 
    10611086 
    10621087                // (2) Set the output file name 
     
    10651090                // (3) Set the map name 
    10661091                if (IsMapping == True) 
    1067                     lCommandLine ~= util.pathex.ReplaceExtention(lTargetName, "map"); 
     1092                    lCommandLine ~= util.pathex.ReplaceExtension(lTargetName, "map"); 
    10681093 
    10691094                lCommandLine ~= "\n"; 
     
    10741099                if (lLibraryFiles.length > 0) 
    10751100                { 
    1076                     foreach( char[] lLib; lLibraryFiles) 
    1077                     { 
    1078                         lLib =  std.path.addExt(lLib, vLibExtention); 
    1079                         lCommandLine ~= vLinkLibSwitch ~ util.str.enquote(lLib) ~ "\n"; 
    1080                     } 
    1081                 } 
    1082                 else 
    1083                     lCommandLine ~= "\n"; 
     1101                    foreach( int i, string lLib; lLibraryFiles) 
     1102                    { 
     1103                        lLib =  std.path.addExt(lLib, vLibExtension); 
     1104                        if (i > 0) 
     1105                            lCommandLine ~= vArgFileDelim; 
     1106                        lCommandLine ~= vLinkLibSwitch ~ 
     1107                                        util.str.enquote(lLib); 
     1108                    } 
     1109                } 
     1110                lCommandLine ~= "\n"; 
    10841111 
    10851112                // Include the explictly named libraries. 
     
    11061133                // (6) Gather the resource file names 
    11071134                { 
    1108                     int lCnt
    1109  
    1110                     foreach(char[] lFile; lFilesToLink) 
    1111                     { 
    1112                         char[] lExt; 
     1135                    int lCnt = 0
     1136 
     1137                    foreach(string lFile; lFilesToLink) 
     1138                    { 
     1139                        string lExt; 
    11131140 
    11141141                        lExt = std.path.getExt(lFile); 
    1115                         lCnt = 0; 
    1116                         // Only include fiels with the correct extention type. 
     1142                        // Only include fiels with the correct extension type. 
    11171143                        if (lExt in vResourceFileTypes) 
    11181144                        { 
     1145                            if (lCnt > 0) 
     1146                                lCommandLine ~= vArgFileDelim; 
    11191147                            lCommandLine ~= lFile; 
    11201148                            lCnt++; 
    11211149                        } 
    1122                         if (lCnt > 0) 
    1123                             lCommandLine ~= vArgFileDelim; 
    1124                     } 
    1125                     if (lCnt > 0) 
    1126                         lCommandLine[$-1] = '\n'; 
    1127                     else 
    1128                         lCommandLine ~= "\n"; 
     1150                    } 
     1151                    lCommandLine ~= "\n"; 
    11291152                } 
    11301153 
     
    11361159            { 
    11371160                // Transfer linker switches from Compiler switches. 
    1138                 foreach (char[] lCompileArg; vCompilerArgs) 
     1161                foreach (string lCompileArg; vCompilerArgs) 
    11391162                { 
    11401163                    if (util.str.begins(lCompileArg, "-L") == True) 
     
    11451168 
    11461169                // (1) Gather the object and resource file names 
    1147                 foreach(char[] lFile; lFilesToLink) 
     1170                foreach(string lFile; lFilesToLink) 
    11481171                { 
    11491172                    lCommandLine ~= lFile ~ "\n"; 
     
    11591182                // (4) Gather the libraries names. 
    11601183                // Include the default libraries first. 
    1161                 foreach( char[] lLib; vDefaultLibs ~ lLibraryFiles) 
     1184                foreach( string lLib; vDefaultLibs ~ lLibraryFiles) 
    11621185                { 
    11631186                    lCommandLine ~= vLinkLibSwitch ~ util.str.enquote(lLib) ~ "\n"; 
     
    11761199                    } 
    11771200 
    1178                     char[][] lLibPaths; 
     1201                    string[] lLibPaths; 
    11791202                    lLibPaths = std.string.split(vLibPaths, vConfigSep); 
    1180                     foreach(char[] lLib; lLibPaths) 
     1203                    foreach(string lLib; lLibPaths) 
    11811204                    { 
    11821205                        if (lLib.length > 0) 
     
    11911214            if (vUseResponseFile == True) 
    11921215            { 
    1193                 lLinkResponseFileName = util.pathex.ReplaceExtention(lTargetName, "ksp"); 
     1216                lLinkResponseFileName = util.pathex.ReplaceExtension(lTargetName, "ksp"); 
    11941217                if (vTemporaryPath.length != 0) 
    11951218                { 
     
    12611284    if ( (source.Source.WasMainDLL)  && (lRunResult == 0) ) 
    12621285    { 
    1263         char[] lTargetFileName; 
    1264         char[] lImpLibPath; 
    1265         char[] lImpLibArgs; 
     1286        string lTargetFileName; 
     1287        string lImpLibPath; 
     1288        string lImpLibArgs; 
    12661289        ulong[] lImpManf; 
    12671290 
     
    12921315        lOutText ~= lTargetName ~  std.path.linesep;  // Create a new library 
    12931316 
    1294         foreach( char[] lFileName; lFilesToLink) 
    1295         { 
    1296             char[] lFileDir; 
     1317        foreach( string lFileName; lFilesToLink) 
     1318        { 
     1319            string lFileDir; 
    12971320 
    12981321            lFileDir = std.path.getDirName(lFileName); 
    12991322            if ((vAllObjects == True) || lFileDir == "" || lFileDir == lTargetDir) 
    13001323            { 
    1301                 if (lFileName.length > 1 + vSrcExtention.length) 
    1302                 { 
    1303                     if (lFileName[$-vSrcExtention.length .. $] == vSrcExtention) 
    1304                     { 
    1305                         lFileName = lFileName[0..$-vSrcExtention.length] ~ vObjExtention; 
     1324                if (lFileName.length > 1 + vSrcExtension.length) 
     1325                { 
     1326                    if (lFileName[$-vSrcExtension.length .. $] == vSrcExtension) 
     1327                    { 
     1328                        lFileName = lFileName[0..$-vSrcExtension.length] ~ vObjExtension; 
    13061329                    } 
    13071330                } 
     
    13141337        { 
    13151338            if (vUseResponseFile == True) { 
    1316                 lLResponseFileName = util.pathex.ReplaceExtention(lTargetName, "lsp"); 
     1339                lLResponseFileName = util.pathex.ReplaceExtension(lTargetName, "lsp"); 
    13171340                if (vTemporaryPath.length != 0) 
    13181341                { 
     
    13401363    if (vCleanup == True) 
    13411364    { 
    1342         char[][] lHitList; 
     1365        string[] lHitList; 
    13431366 
    13441367        version(BuildVerbose) 
     
    13681391 
    13691392        // Possible ones created by compiler, linker, and librarian. 
    1370         lHitList ~= util.pathex.ReplaceExtention(lTargetName, "map"); 
    1371         lHitList ~= util.pathex.ReplaceExtention(lTargetName, "bak"); 
    1372         lHitList ~= util.pathex.ReplaceExtention(lTargetName, "lst"); 
    1373  
    1374         foreach(char[] lFilename; lHitList) 
     1393        lHitList ~= util.pathex.ReplaceExtension(lTargetName, "map"); 
     1394        lHitList ~= util.pathex.ReplaceExtension(lTargetName, "bak"); 
     1395        lHitList ~= util.pathex.ReplaceExtension(lTargetName, "lst"); 
     1396 
     1397        foreach(string lFilename; lHitList) 
    13751398        { 
    13761399            if (lFilename.length > 0) 
     
    13901413    } 
    13911414 
    1392     foreach(char[] lFinal; vFinalProc) 
    1393     { 
    1394         char[] lCommandLine; 
    1395  
    1396         lCommandLine = util.str.Expand(lFinal, "Target=" ~ lTargetName ~ 
    1397                                                ",TargetPath=" ~ std.path.getDirName(lTargetName) ~ 
    1398                                                ",TargetBase=" ~ std.path.getBaseName(lTargetName) 
    1399                          ); 
    1400         if (lCommandLine.length > 0) 
    1401         { 
    1402             util.fileex.RunCommand(lCommandLine); 
    1403         } 
    1404     } 
     1415    if (lRunResult == 0 && (vUseFinal == True)) 
     1416    { 
     1417        foreach(string lFinal; vFinalProc) 
     1418        { 
     1419            string lCommandLine; 
     1420            lCommandLine = util.str.Expand(lFinal, "Target=" ~ lTargetName ~ 
     1421                                                   ",TargetPath=" ~ std.path.getDirName(lTargetName) ~ 
     1422                                                   ",TargetBase=" ~ std.path.getBaseName(lTargetName) 
     1423                             ); 
     1424            if (lCommandLine.length > 0) 
     1425            { 
     1426                lRunResult = util.fileex.RunCommand(lCommandLine); 
     1427                if (lRunResult != 0) 
     1428                    break; 
     1429            } 
     1430        } 
     1431    } 
     1432 
    14051433    return lRunResult; 
    14061434 
     
    14111439// ------------------------------------------- 
    14121440{ 
    1413     char[] lOutText; 
     1441    string lOutText; 
    14141442 
    14151443    foreach(char [] lRoot; vImportRoots) 
     
    14221450 
    14231451    // Build command files for compilation. 
    1424     foreach (char[] lCompileArg; vCompilerArgs) 
     1452    foreach (string lCompileArg; vCompilerArgs) 
    14251453    { 
    14261454        // Ignore empty args 
     
    14671495 
    14681496// ------------------------------------------- 
    1469 char[][] ModulesToIgnore() 
     1497string[] ModulesToIgnore() 
    14701498// ------------------------------------------- 
    14711499{ 
     
    14751503 
    14761504// ------------------------------------------- 
    1477 void AddLink(char[] pPath) 
     1505void AddLink(string pPath) 
    14781506// ------------------------------------------- 
    14791507{ 
     
    14851513 
    14861514// ------------------------------------------- 
    1487 void AddTarget(char[] pPath) 
     1515void AddTarget(string pPath) 
    14881516// ------------------------------------------- 
    14891517{ 
     
    15091537 
    15101538// ------------------------------------------- 
    1511 void AddBuildDef(char[] pText, bool pReplace = false) 
     1539void AddBuildDef(string pText, bool pReplace = false) 
    15121540// ------------------------------------------- 
    15131541{ 
    15141542    int lPos; 
    1515     char[] lLowerText; 
    1516     static uint[ char[] ] lElementIdx; 
     1543    string lLowerText; 
     1544    static uint[ string ] lElementIdx; 
    15171545 
    15181546    if (vNoDef == True) 
     
    15381566 
    15391567// ------------------------------------------- 
    1540 void AddCompilerArg(char[] pArg) 
     1568void AddCompilerArg(string pArg) 
    15411569// ------------------------------------------- 
    15421570{ 
     
    15531581 
    15541582        lFound = false; 
    1555         foreach(char[] lArg; vCompilerArgs) 
     1583        foreach(string lArg; vCompilerArgs) 
    15561584        { 
    15571585            if (lArg == pArg) 
     
    15671595 
    15681596// ------------------------------------------- 
    1569 char[] AddRoot(char[] pRootName) 
     1597string AddRoot(string pRootName) 
    15701598// ------------------------------------------- 
    15711599{ 
    1572     static bool [char[]] lRootHash; 
    1573     char[] lFullName; 
    1574     char[] lSearchName; 
     1600    static bool [string] lRootHash; 
     1601    string lFullName; 
     1602    string lSearchName; 
    15751603 
    15761604    if(pRootName.length == 0) 
     
    15961624} 
    15971625 
    1598 char[][] GetImportRoots() 
     1626string[] GetImportRoots() 
    15991627{ 
    16001628    return vImportRoots; 
    16011629} 
    16021630 
    1603 void Process_DFLAGS(char[] pText) 
     1631void Process_DFLAGS(string pText) 
    16041632{ 
    16051633    int      lPos; 
    16061634    int      lEndPos; 
    1607     char[]   lRootName; 
    1608     char[][] lRoots; 
    1609     char[][] lArgs; 
     1635    string   lRootName; 
     1636    string[] lRoots; 
     1637    string[] lArgs; 
    16101638    int      lArg; 
    16111639    bool     lInArg; 
     
    16511679    } 
    16521680 
    1653     foreach(char[] lSwitch; lArgs) 
     1681    foreach(string lSwitch; lArgs) 
    16541682    { 
    16551683        if ((lSwitch.length > 0) && (lSwitch[0] == '-')) 
     
    16731701            { 
    16741702                lRoots = std.string.split(lSwitch[2..length], vConfigSep); 
    1675                 foreach(char[] lRoot; lRoots) 
     1703                foreach(string lRoot; lRoots) 
    16761704                { 
    16771705                    lRootName = AddRoot(lRoot); 
     
    17051733                } 
    17061734 
    1707                 if (util.str.IsLike(lSwitch,  std.utf.toUTF32(vOutputPath ~ "*")) == True) 
    1708                 { 
    1709                     char[] lbRoot; 
     1735                if (util.str.IsLike(lSwitch,  vOutputPath ~ "*") == True) 
     1736                { 
     1737                    string lbRoot; 
    17101738 
    17111739                    vTemporaryPath = lSwitch[vOutputPath.length .. $]; 
     
    17441772// ------------------------------------------- 
    17451773{ 
    1746     char[]   lSymValue; 
     1774    string   lSymValue; 
    17471775 
    17481776    // Check for a environment flag before config file. 
     
    17641792// ------------------------------------------- 
    17651793{ 
    1766     char[]   lConfigPath; 
    1767     char[][] lTextLines; 
     1794    string   lConfigPath; 
     1795    string[] lTextLines; 
    17681796    int      lPos; 
    17691797 
     
    17831811            std.stdio.writefln("Reading from config: %s", lConfigPath); 
    17841812    } 
    1785     util.fileex.GetTextLines(lConfigPath, lTextLines, util.fileex.GetOpt.Exists); 
    1786  
    1787  
    1788     foreach(int i, char[] lLine; lTextLines) 
     1813    lTextLines = util.fileex.GetTextLines(lConfigPath, util.fileex.GetOpt.Exists); 
     1814 
     1815 
     1816    foreach(int i, string lLine; lTextLines) 
    17891817    { 
    17901818        // Strip off trailing whitespace. 
     
    18111839        if(lPos == 0) 
    18121840        { 
    1813             char[][] lPaths; 
     1841            string[] lPaths; 
    18141842            lLine = lLine[lPos+4 .. length]; 
    18151843            lPaths.length = 1; 
     
    18301858            } 
    18311859 
    1832             foreach( char[] lPath; lPaths) 
     1860            foreach( string lPath; lPaths) 
    18331861            { 
    18341862                if (lPath.length > 0) 
     
    18721900 
    18731901 
    1874 void SetFileLocation(char[] pCmdValue, inout char[] pFilePath, inout char[] pFileExe, char[] pType) 
     1902void SetFileLocation(string pCmdValue, inout string pFilePath, inout string pFileExe, string pType) 
    18751903{ 
    1876     char[] lCmdValue; 
     1904    string lCmdValue; 
    18771905    int lPos; 
    18781906 
     
    18851913    } 
    18861914 
    1887     if (vExeExtention.length > 0) 
     1915    if (vExeExtension.length > 0) 
    18881916    { 
    18891917        if (std.path.getExt(lCmdValue).length == 0) 
    1890             lCmdValue ~= "." ~ vExeExtention; 
     1918            lCmdValue ~= "." ~ vExeExtension; 
    18911919    } 
    18921920 
     
    19181946// Display each entry in the supplied list. 
    19191947// ------------------------------------------- 
    1920 void DisplayItems(char[][] pList, char[] pTitle = "") 
     1948void DisplayItems(string[] pList, string pTitle = "") 
    19211949// ------------------------------------------- 
    19221950{ 
     
    19251953            std.stdio.writefln("\n%s",pTitle); 
    19261954 
    1927         foreach(int lIndex, char[] lListEntry; pList) { 
     1955        foreach(int lIndex, string lListEntry; pList) { 
    19281956            std.stdio.writefln(" [%2d]: %s",lIndex,lListEntry); 
    19291957        } 
     
    19321960 
    19331961// ------------------------------------------- 
    1934 void DisplayItems(source.ExternRef[] pList, char[] pTitle = "") 
     1962void DisplayItems(source.ExternRef[] pList, string pTitle = "") 
    19351963// ------------------------------------------- 
    19361964{ 
     
    19431971            std.stdio.writef(" [%2d]: %s",lIndex,lListEntry.FilePath); 
    19441972            if (lListEntry.ToolOpts.length > 0) 
    1945                 foreach(char[] lOpt; lListEntry.ToolOpts) 
     1973                foreach(string lOpt; lListEntry.ToolOpts) 
    19461974                    std.stdio.writef(" [%s]",lOpt); 
    19471975            std.stdio.writefln(""); 
     
    19511979 
    19521980// ------------------------------------------- 
    1953 void DisplayItems(CmdLineArg[] pList, char[] pTitle = "") 
     1981void DisplayItems(CmdLineArg[] pList, string pTitle = "") 
    19541982// ------------------------------------------- 
    19551983{ 
     
    19742002 
    19752003// ------------------------------------------------ 
    1976 char[] GetAppPath() 
     2004string GetAppPath() 
    19772005{ 
    19782006    return vAppPath.dup; 
     
    19802008 
    19812009// ------------------------------------------------ 
    1982 char[] GetFullPathnameScan(char[] pFileName, int pScanList) 
     2010string GetFullPathnameScan(string pFileName, int pScanList) 
    19832011// ------------------------------------------- 
    19842012{ 
     
    19902018 
    19912019// ------------------------------------------------ 
    1992 char[] GetFullPathname(char[] pFileName, char[][] pScanList = null) 
     2020string GetFullPathname(string pFileName, string[] pScanList = null) 
    19932021// ------------------------------------------- 
    19942022{ 
    1995     char[] lPossiblePath; 
    1996     char[] lLocalPath; 
    1997     char[] lFileBase; 
    1998     char[][] lFileExtList; 
     2023    string lPossiblePath; 
     2024    string lLocalPath; 
     2025    string lFileBase; 
     2026    string[] lFileExtList; 
    19992027 
    20002028    lFileExtList ~= std.file.getExt(pFileName); 
    2001     if (lFileExtList[0] == vSrcExtention) 
    2002     { 
    2003         lFileExtList ~= vSrcExtention; 
     2029    if (lFileExtList[0] == vSrcExtension) 
     2030    { 
     2031        lFileExtList ~= vSrcExtension; 
    20042032        lFileExtList[0] = vSrcDInterfaceExt; 
    20052033    } 
    20062034    lFileBase = std.path.getName(pFileName); 
    2007     foreach (char[] lExt; lFileExtList) 
    2008     { 
    2009         char[] lTestFileName; 
     2035    foreach (string lExt; lFileExtList) 
     2036    { 
     2037        string lTestFileName; 
    20102038 
    20112039        lTestFileName = lFileBase ~ "." ~ lExt; 
     
    20132041        { 
    20142042            // Do explicit scanning of supplied paths. 
    2015             foreach(char[] lNextRoot; pScanList) { 
     2043            foreach(string lNextRoot; pScanList) { 
    20162044                lPossiblePath = ( lNextRoot ~ lTestFileName ); 
    20172045                if(util.file2.FileExists(lPossiblePath)) { 
     
    20312059 
    20322060        // Examine each known import root to see if the file lives there. 
    2033         foreach(char[] lNextRoot; vImportRoots) 
     2061        foreach(string lNextRoot; vImportRoots) 
    20342062        { 
    20352063            lPossiblePath = ( lNextRoot ~ lTestFileName ); 
     
    20442072} 
    20452073 
    2046 void RemoveRecdArg(char[] pArg) 
     2074void RemoveRecdArg(string pArg) 
    20472075{ 
    20482076    // Remove all matching received args. 
     
    20662094 
    20672095// ------------------------------- 
    2068 void ExamineArgs(char[][] pArgGroup) 
     2096void ExamineArgs(string[] pArgGroup) 
    20692097// ------------------------------- 
    20702098{ 
     
    20752103            pArgGroup[j][0..2] == "--") 
    20762104        { 
    2077             char[] lArg; 
     2105            string lArg; 
    20782106            lArg = pArgGroup[j][1..$]; 
    20792107            for(int i = j-1; i >= 0; i--) 
     
    20972125    } 
    20982126 
    2099     foreach(char[] lArg; pArgGroup) 
     2127    foreach(string lArg; pArgGroup) 
    21002128    { 
    21012129        if (lArg.length > 0) 
     
    21132141 
    21142142// ------------------------------------------- 
    2115 int main(char[][] pArgs) 
     2143int main(string[] pArgs) 
    21162144// ------------------------------------------- 
    21172145{ 
    21182146    int lBuildResult; 
    2119     char[] lCompPath; 
     2147    string lCompPath; 
    21202148    bool lSetPath = false; 
    21212149 
     
    21372165    source.vPathId          = vPathId; 
    21382166    util.fileex.vPathId     = vPathId; 
    2139     util.fileex.vExeExtention = vExeExtention; 
    2140  
     2167    util.fileex.vExeExtension = vExeExtension; 
     2168 
     2169    // Strip off application's path from arglist. 
     2170    vAppPath = pArgs[0]; 
     2171    vAppName = std.path.getBaseName(vAppPath); 
     2172    version (Windows) 
     2173    { 
     2174        int DotPos; 
     2175        DotPos = std.string.rfind(vAppName, '.'); 
     2176        if (DotPos != -1) 
     2177        { 
     2178            vAppName.length = DotPos; 
     2179        } 
     2180    } 
     2181    util.str.SetEnv("@S", std.path.getDirName(vAppPath)); 
     2182 
     2183    pArgs=pArgs[1..pArgs.length]; 
     2184    if (pArgs.length == 0) { 
     2185        if (util.file2.FileExists(vDefResponseFile) == false) 
     2186        { 
     2187            // No other arguments so show usage message. 
     2188            DisplayUsage (); 
     2189            return 0; 
     2190        } 
     2191        else 
     2192        { 
     2193            pArgs ~= "@" ~ vDefResponseFile; 
     2194        } 
     2195    } 
     2196 
     2197 
     2198    vCFGPath = util.str.GetEnv("BCFPATH"); 
     2199    GatherArgs( pArgs ); 
     2200    version(BuildVerbose) 
     2201    { 
     2202        source.vVerboseMode = vVerbose; 
     2203 
     2204        util.fileex.vVerbose = vVerbose; 
     2205 
     2206        if (vVerbose == True) 
     2207            std.stdio.writefln("*** build v%s (build %d)***", vAppVersion, build_bn.auto_build_number); 
     2208    } 
     2209 
     2210    ExamineArgs( vCombinedArgs ); 
    21412211 
    21422212    // Scan the PATH env symbol to locate the D compiler. 
     2213    if (vExeExtension.length > 0 && std.path.getExt(vCompilerExe).length == 0) 
     2214    { 
     2215        vCompilerExe = std.path.addExt(vCompilerExe, vExeExtension); 
     2216    } 
    21432217    lCompPath = util.pathex.FindFileInPathList(vPathId, vCompilerExe); 
    21442218    if (lCompPath.length > 0){ 
     
    21562230    } 
    21572231 
    2158     // Strip off application's path from arglist. 
    2159     vAppPath = pArgs[0]; 
    2160     vAppName = std.path.getBaseName(vAppPath); 
    2161     version (Windows) 
    2162     { 
    2163         int DotPos; 
    2164         DotPos = std.string.rfind(vAppName, '.'); 
    2165         if (DotPos != -1) 
    2166         { 
    2167             vAppName.length = DotPos; 
    2168         } 
    2169     } 
    2170     util.str.SetEnv("@S", std.path.getDirName(vAppPath)); 
    2171  
    2172     pArgs=pArgs[1..pArgs.length]; 
    2173     if (pArgs.length == 0) { 
    2174         if (util.file2.FileExists(vDefResponseFile) == false) 
    2175         { 
    2176             // No other arguments so show usage message. 
    2177             DisplayUsage (); 
    2178             return 0; 
    2179         } 
    2180         else 
    2181         { 
    2182             pArgs ~= "@" ~ vDefResponseFile; 
    2183         } 
    2184     } 
    2185  
    2186  
    2187     GatherArgs( pArgs ); 
    2188     version(BuildVerbose) 
    2189     { 
    2190         source.vVerboseMode = vVerbose; 
    2191  
    2192         util.fileex.vVerbose = vVerbose; 
    2193  
    2194         if (vVerbose == True) 
    2195             std.stdio.writefln("*** build v%s (build %d)***", vAppVersion, build_bn.auto_build_number); 
    2196     } 
    2197  
    2198     ExamineArgs( vCombinedArgs ); 
    2199  
    22002232    util.fileex.vTestRun = vTestRun; 
    22012233    source.mCollectUses  = vCollectUses; 
    22022234    source.vForceCompile = vForceCompile; 
    22032235    source.ObjWritePath  = vTemporaryPath; 
     2236    source.vExplicit     = vExplicit; 
    22042237 
    22052238    // Grab the external macro definitions unless otherwise told not to. 
     
    22452278    if (vConfigFile.length > 0) 
    22462279    { 
    2247         char[][] lPotentialPaths; 
     2280        string[] lPotentialPaths; 
    22482281 
    22492282        lPotentialPaths ~= "." ~ std.path.sep; 
     
    22512284        version(Windows) 
    22522285        { 
    2253             char[] lTemp; 
     2286            string lTemp; 
    22542287            lTemp = util.str.GetEnv("HOMEDRIVE"); 
    22552288            if (lTemp.length > 0) 
     
    22582291            } 
    22592292        } 
     2293        if (vOverrideConfigPath.length > 0) 
     2294            lPotentialPaths ~= vOverrideConfigPath; 
    22602295        lPotentialPaths ~= vCompilerPath; 
    22612296        if (vEtcPath.length > 0) 
    22622297            lPotentialPaths ~= vEtcPath; 
    22632298 
    2264         foreach( char[] p; lPotentialPaths) 
     2299        foreach( int lCnt, string p; lPotentialPaths) 
    22652300        { 
    22662301            if (p.length > 0) 
     
    22752310                } 
    22762311            } 
    2277         } 
    2278     } 
    2279  
    2280     if (vExeExtention.length > 0) 
     2312            if (lCnt+1 == lPotentialPaths.length) 
     2313            { 
     2314                // Scan all paths for config file but couldn't find one. 
     2315                throw new BuildException( std.string.format("Unable to find Config File '%s' in \n%s", 
     2316                         vConfigFile, lPotentialPaths)); 
     2317            } 
     2318        } 
     2319    } 
     2320 
     2321    if (vExeExtension.length > 0) 
    22812322    { 
    22822323        if (std.path.getExt(vCompilerExe).length == 0) 
    2283             vCompilerExe ~= "." ~ vExeExtention; 
     2324            vCompilerExe ~= "." ~ vExeExtension; 
    22842325    } 
    22852326    if (util.file2.FileExists(vCompilerPath ~ vCompilerExe) == false) 
     
    23262367 
    23272368    // Rationalize the ignored modules list. 
    2328     foreach(char[] m; vModulesToNotice) { 
     2369    foreach(string m; vModulesToNotice) { 
    23292370        for (int i=0; i < vModulesToIgnore.length; i++) { 
    23302371            if (vModulesToIgnore[i] == m) { 
     
    23432384 
    23442385    // List all missing files (if any). 
    2345     foreach( char[] lFile; vCmdLineSourceFiles) 
     2386    foreach( string lFile; vCmdLineSourceFiles) 
    23462387    { 
    23472388        if (! util.file2.FileExists( GetFullPathname(lFile, vSourceScanList)) ) 
     
    23822423    if(vSymbols == True) 
    23832424    { 
    2384         char[] lSymbolData; 
     2425        string lSymbolData; 
    23852426        int lModuleCount; 
    2386         char[] lSymbolOutName; 
     2427        string lSymbolOutName; 
    23872428 
    23882429        source.Source.AllFiles( 
     
    24372478    if (vCollectUses == True) 
    24382479    { 
    2439         char[] lPrevLine; 
    2440         char[] lFile; 
     2480        string lPrevLine; 
     2481        string lFile; 
    24412482 
    24422483        lPrevLine.length = 0; 
    24432484        lFile ~= "[USES]\n"; 
    2444         foreach(char[] lLine; source.Source.Uses.sort) 
     2485        foreach(string lLine; source.Source.Uses.sort) 
    24452486        { 
    24462487            if (lLine != lPrevLine) 
     
    24532494        lPrevLine.length = 0; 
    24542495        lFile ~= "[USEDBY]\n"; 
    2455         foreach(char[] lLine; source.Source.UsedBy.sort) 
     2496        foreach(string lLine; source.Source.UsedBy.sort) 
    24562497        { 
    24572498            if (lLine != lPrevLine) 
     
    24962537} 
    24972538 
    2498 void ProcessResponseFile(char[] pArg, Bool pVerbose) 
     2539void ProcessResponseFile(string pArg, Bool pVerbose) 
    24992540{ 
    25002541    // A response file is being used. 
    2501     char[] lRespFileName; 
    2502     char[][] lRespLines; 
     2542    string lRespFileName; 
     2543    string[] lRespLines; 
    25032544 
    25042545    if (pArg.length == 0) 
     
    25232564 
    25242565    lRespLines = util.fileex.GetTextLines(lRespFileName, util.fileex.GetOpt.Exists); 
    2525     foreach(char[] lArg; lRespLines) 
     2566    foreach(string lArg; lRespLines) 
    25262567    { 
    25272568        // Locate any comment text in the line. 
     
    25482589struct CmdLineArg 
    25492590{ 
    2550     char[] ArgText; 
     2591    string ArgText; 
    25512592    Bool   CompilerArg; 
    25522593    Bool   DFlag; 
     
    25542595CmdLineArg[] vReceivedArgs; 
    25552596 
    2556 void ProcessCmdLineArg( char[] pArg ) 
     2597void ProcessCmdLineArg( string pArg ) 
    25572598{ 
    2558     static char[] lImportSwitch; 
     2599    static string lImportSwitch; 
    25592600 
    25602601    // Handle a version switch on the command line by 
    25612602    if(util.str.begins(pArg, vVersionSwitch) == True) 
    25622603    { 
    2563         char[] lVersionString; 
     2604        string lVersionString; 
    25642605 
    25652606        lVersionString=pArg [vVersionSwitch.length .. $]; 
     
    25772618    else if(util.str.begins(pArg, vDebugSwitch) == True) 
    25782619    { 
    2579         char[] lDebugString; 
     2620        string lDebugString; 
    25802621 
    25812622        lDebugString = pArg [vDebugSwitch.length .. $]; 
     
    26772718            break; 
    26782719 
     2720        case "-explicit": 
     2721            vExplicit = True; 
     2722            // Not passed thru. 
     2723            break; 
     2724 
    26792725        case "-cleanup": 
    26802726            // drop through ... 
     
    27062752 
    27072753                // Test for Librarian options. 
    2708                 if (util.str.IsLike(pArg, "-LIBOPT*"d) == True) 
     2754                if (util.str.IsLike(pArg, "-LIBOPT*"c) == True) 
    27092755                { 
    27102756                    vLibrarianOpts ~= " " ~ pArg[7..$].dup; 
     
    27212767                if (util.str.begins(pArg, "-CFG=") == True) 
    27222768                { 
    2723                     char[] lFile; 
    2724                     char[] lSubSection; 
    2725                     char[][] lLocalArgs; 
     2769                    string lFile; 
     2770                    string lSubSection; 
     2771                    string[] lLocalArgs; 
    27262772                    lFile = pArg[5..$]; 
    27272773                    lSubSection = ""; 
     
    27422788 
    27432789                // Check if a list of modules has been requested. 
    2744                 if (util.str.IsLike(pArg, "-modules*"d) == True) 
     2790                if (util.str.IsLike(pArg, "-modules*"c) == True) 
    27452791                { 
    27462792                    vSymbols = True; 
     
    27622808 
    27632809                // Test for alternate install locations. 
    2764                 if (util.str.IsLike(pArg, "-DCPATH?*"d) == True) 
    2765                 { 
    2766                     char[] lNewPath = pArg[7..length].dup; 
     2810                if (util.str.IsLike(pArg, "-DCPATH?*"c) == True) 
     2811                { 
     2812                    string lNewPath = pArg[7..length].dup; 
    27672813                    if (util.str.ends(lNewPath, std.path.sep) == False) 
    27682814                        lNewPath ~= std.path.sep; 
     
    27782824                } 
    27792825 
    2780                 if (util.str.IsLike(pArg,  "-CFPATH?*"d) == True) 
    2781                 { 
    2782                     char[] lNewPath = pArg[7..length].dup; 
     2826                if (util.str.IsLike(pArg,  "-CFPATH?*"c) == True) 
     2827                { 
     2828                    string lNewPath = pArg[7..length].dup; 
    27832829                    if (util.str.ends(lNewPath, std.path.sep) == False) 
    27842830                        lNewPath ~= std.path.sep; 
     
    27942840                } 
    27952841 
    2796                 if (util.str.IsLike(pArg,  "-PP?*"d) == True) 
    2797                 { 
    2798                     char[] lNewPath = pArg[3..length].dup; 
     2842                if (util.str.IsLike(pArg,  "-BCFPATH?*"c) == True) 
     2843                { 
     2844                    string lNewPath = pArg[8..length].dup; 
     2845                    if (util.str.ends(lNewPath, std.path.sep) == False) 
     2846                        lNewPath ~= std.path.sep; 
     2847                    version(BuildVerbose) 
     2848                    { 
     2849                        if (vVerbose == True) 
     2850                            std.stdio.writefln("BCFPATH was '%s' now '%s'", vCFGPath, lNewPath); 
     2851                    } 
     2852                    vCFGPath = lNewPath; 
     2853                    break; 
     2854 
     2855                } 
     2856 
     2857                if (util.str.IsLike(pArg,  "-PP?*"c) == True) 
     2858                { 
     2859                    string lNewPath = pArg[3..length].dup; 
    27992860                    version(BuildVerbose) 
    28002861                    { 
     
    28102871                } 
    28112872 
    2812                 if (util.str.IsLike(pArg,  "-RDF?*"d) == True) 
     2873                if (util.str.IsLike(pArg,  "-RDF?*"c) == True) 
    28132874                { 
    28142875                    version(BuildVerbose) 
     
    28232884                } 
    28242885 
    2825                 if (util.str.IsLike(pArg,  "-MDF?*"d) == True) 
     2886                if (util.str.IsLike(pArg,  "-MDF?*"c) == True) 
    28262887                { 
    28272888                    version(BuildVerbose) 
     
    28442905                { 
    28452906                    char [] lRoot; 
    2846                     foreach(char[] lCmdRoot; std.string.split(pArg[vBuildImportPath.length .. $], 
     2907                    foreach(string lCmdRoot; std.string.split(pArg[vBuildImportPath.length .. $], 
    28472908                                                        vImportPathDelim)) 
    28482909                    { 
     
    28602921                } 
    28612922 
    2862                 if (util.str.IsLike(pArg,  std.utf.toUTF32(vRunSwitch ~ "*")) == True) 
     2923                if (util.str.IsLike(pArg,  vRunSwitch ~ "*") == True) 
    28632924                { 
    28642925                    vRunParms ~= pArg[vRunSwitch.length .. $] ~ " "; 
     
    28672928                } 
    28682929 
    2869                 if (util.str.IsLike(pArg, "-uses*"d) == True) 
     2930                if (util.str.IsLike(pArg, "-uses*"c) == True) 
    28702931                { 
    28712932 
     
    28812942                } 
    28822943 
    2883                 if (util.str.IsLike(pArg, "-UMB*"d) == True) 
     2944                if (util.str.IsLike(pArg, "-UMB*"c) == True) 
    28842945                { 
    28852946 
     
    28902951                version(Windows) 
    28912952                { 
    2892                 if (util.str.IsLike(pArg, "-AutoWinLibs*"d) == True) 
     2953                if (util.str.IsLike(pArg, "-AutoWinLibs*"c) == True) 
    28932954                { 
    28942955 
     
    28972958                } 
    28982959                } 
     2960 
     2961                if (util.str.IsLike(pArg, "-usefinal*"c) == True) 
     2962                { 
     2963 
     2964                    vUseFinal = new Bool(util.str.YesNo(pArg, true)); 
     2965                    break; 
     2966                } 
     2967 
     2968                if (util.str.IsLike(pArg, "-emptyargs*"c) == True) 
     2969                { 
     2970 
     2971                    vEmptyArgs = new Bool(util.str.YesNo(pArg, true)); 
     2972                    break; 
     2973                } 
     2974 
     2975 
    28992976                // Special check for Object Write Path 
    29002977                version(DigitalMars) 
    29012978                { 
    2902                 if (util.str.IsLike(pArg,  std.utf.toUTF32(vOutputPath ~ "*")) == True) 
    2903                 { 
    2904                     char[] lRoot; 
     2979                if (util.str.IsLike(pArg,  vOutputPath ~ "*") == True) 
     2980                { 
     2981                    string lRoot; 
    29052982 
    29062983                    vTemporaryPath = pArg[vOutputPath.length .. $]; 
     
    29283005                } 
    29293006 
    2930                 if (util.str.IsLike(pArg,  "-X?*"d) == True) 
     3007                if (util.str.IsLike(pArg,  "-X?*"c) == True) 
    29313008                { 
    29323009                    // Modules to ignore (eg. -Xmylib) 
     
    29353012                } 
    29363013 
    2937                 if (util.str.IsLike(pArg,  "-M?*"d) == True) 
     3014                if (util.str.IsLike(pArg,  "-M?*"c) == True) 
    29383015                { 
    29393016                    // Modules to notice (eg. -Mphobos) 
     
    29423019                } 
    29433020 
    2944                 if (util.str.IsLike(pArg,  "-T?*"d) == True) 
     3021                if (util.str.IsLike(pArg,  "-T?*"c) == True) 
    29453022                { 
    29463023                    // Target name (eg. -Ttestapp) 
    29473024 
    2948                     vCommandTargetName = util.str.Expand(pArg[2..$], 
     3025                    if (vCommandTargetName.length > 0) 
     3026                    { 
     3027                        vCommandTargetName = util.str.Expand(pArg[2..$], 
    29493028                                                         "Target=" ~ 
    29503029                                                 util.pathex.GetBaseName(vCommandTargetName)); 
     3030                    } 
     3031                    else 
     3032                        vCommandTargetName = pArg[2..$].dup; 
     3033 
    29513034                    break; 
    29523035                } 
     
    29723055                } 
    29733056 
    2974                 if (util.str.IsLike(pArg,  "-R*"d) == True) 
     3057                if (util.str.IsLike(pArg,  "-R*"c) == True) 
    29753058                { 
    29763059                    char lValue; 
     
    29843067 
    29853068                version(Windows) { 
    2986                     if (util.str.IsLike(pArg,  "-gui*"d) == True) 
     3069                    if (util.str.IsLike(pArg,  "-gui*"c) == True) 
    29873070                    { 
    29883071                        source.Source.WasMainGUI = true; 
     
    30143097                    { 
    30153098                        char [] lRoot; 
    3016                         foreach(char[] lCmdRoot; std.string.split(pArg, ";")) 
     3099                        foreach(string lCmdRoot; std.string.split(pArg, ";")) 
    30173100                        { 
    30183101                            lRoot = AddRoot(lCmdRoot); 
     
    30453128                if (lArgExt == "") 
    30463129                { 
    3047                        pArg ~= "." ~ vSrcExtention; 
     3130                       pArg ~= "." ~ vSrcExtension; 
    30483131                       vCmdLineSourceFiles ~= pArg; 
    30493132                } 
    3050                 else if (lArgExt == vSrcExtention || 
    3051                            lArgExt == vMacroExtention || 
    3052                            lArgExt == vDdocExtention) 
     3133                else if (lArgExt == vSrcExtension || 
     3134                           lArgExt == vMacroExtension || 
     3135                           lArgExt == vDdocExtension) 
    30533136                { 
    30543137                       vCmdLineSourceFiles ~= pArg; 
     
    30633146 
    30643147                if(vTargetName is null && 
    3065                     ((std.path.getExt(pArg) == vSrcExtention) || 
    3066                      (std.path.getExt(pArg) == vMacroExtention) 
     3148                    ((std.path.getExt(pArg) == vSrcExtension) || 
     3149                     (std.path.getExt(pArg) == vMacroExtension) 
    30673150                    ) 
    30683151                  ) 
    30693152                { 
    3070                    vTargetName = pArg
     3153                   vTargetName = std.path.getName(pArg.dup)
    30713154                    version(BuildVerbose) 
    30723155                    { 
    30733156                        if(vVerbose == True) 
    3074                             std.stdio.writefln("Default target is '%s'", std.path.getName(vTargetName)); 
     3157                            std.stdio.writefln("Default target is '%s'", vTargetName); 
    30753158                    } 
    30763159                } 
     
    30813164} 
    30823165 
    3083 void GatherOneArg( char[] pArg, inout char[][] pArgGroup ) 
     3166void GatherOneArg( string pArg, inout string[] pArgGroup ) 
    30843167{ 
    3085     static bool[char[]] lKnownArgs; 
     3168    static bool[string] lKnownArgs; 
    30863169 
    30873170    pArg = std.string.strip(pArg); 
    30883171    if (pArg.length == 0) 
    3089         return; 
     3172    { 
     3173        if (vEmptyArgs == False) 
     3174            throw new BuildException("Empty arguments are not allowed"); 
     3175        else 
     3176            return; 
     3177    } 
    30903178 
    30913179    version(BuildVerbose) 
     
    31373225} 
    31383226 
    3139 void GatherArgs( char[][] pArgs ) 
     3227void GatherArgs( string[] pArgs ) 
    31403228{ 
    31413229    /* This collects together all the original command line arguments, 
     
    32043292 
    32053293    // Collect from original command line. 
    3206     foreach( char[] lArg; vCompilerDefs ~ pArgs) 
    3207     { 
    3208         GatherOneArg( lArg, vCombinedArgs ); 
     3294    foreach( string lArg; vCompilerDefs ~ pArgs) 
     3295    { 
     3296        string[] lSplitArgs; 
     3297 
     3298        lSplitArgs = std.string.split(lArg); 
     3299        foreach(string lOneArg; lSplitArgs) 
     3300        { 
     3301            GatherOneArg( lOneArg, vCombinedArgs ); 
     3302        } 
    32093303    } 
    32103304 
     
    32243318} 
    32253319 
    3226 void ProcessOneMacroDef(Bool pVerbose, char[] pPath) 
     3320void ProcessOneMacroDef(Bool pVerbose, string pPath) 
    32273321{ 
    3228     char[] lMacroDefFileName; 
    3229     char[][] lMacroDefLines; 
    3230     char[][] lMessages; 
    3231  
    3232     static bool[ char[] ] lUsedPaths; 
     3322    string lMacroDefFileName; 
     3323    string[] lMacroDefLines; 
     3324    string[] lMessages; 
     3325 
     3326    static bool[ string ] lUsedPaths; 
    32333327 
    32343328    lMacroDefFileName = pPath.dup; 
     
    32573351        if (pVerbose == True) 
    32583352        { 
    3259             foreach(char[] lMsg; lMessages) 
     3353            foreach(string lMsg; lMessages) 
    32603354            { 
    32613355                std.stdio.writefln("%s", lMsg); 
     
    32663360} 
    32673361 
    3268 void ProcessBuildConfig(char[] pArg, Bool pVerbose, inout char[][] pArgGroup) 
     3362void ProcessBuildConfig(string pArg, Bool pVerbose, inout string[] pArgGroup) 
    32693363{ 
    32703364    // From build.exe location 
    32713365    ProcessOneBuildConfig(pArg, pVerbose, std.path.getDirName(vAppPath), pArgGroup); 
    32723366 
    3273     // From compiler location 
     3367    // From alternate location 
     3368    if (vCFGPath.length > 0) 
     3369        ProcessOneBuildConfig(pArg, pVerbose, vCFGPath, pArgGroup); 
     3370 
     3371    // compiler path 
    32743372    ProcessOneBuildConfig(pArg, pVerbose, vCompilerPath, pArgGroup); 
    32753373 
     
    32793377} 
    32803378 
    3281 void ProcessOneBuildConfig(char[] pArg, Bool pVerbose, char[] pPath, inout char[][] pArgGroup) 
     3379void ProcessOneBuildConfig(string pArg, Bool pVerbose, string pPath, inout string[] pArgGroup) 
    32823380{ 
    3283     char[] lConfigFileName; 
    3284     char[][] lConfigLines; 
     3381    string lConfigFileName; 
     3382    string[] lConfigLines; 
    32853383    bool lFoundGroup; 
    3286     static bool[ char[] ] lUsedPaths; 
     3384    static bool[ string ] lUsedPaths; 
    32873385 
    32883386    version(BuildVerbose) 
     
    33033401    } 
    33043402 
     3403    lConfigFileName = util.pathex.CanonicalPath(lConfigFileName, false); 
    33053404    if (pArg.length == 0) 
    33063405        pArg = "+"; 
     
    33223421    } 
    33233422 
    3324     foreach(char[] lArg; lConfigLines) 
     3423    foreach(string lArg; lConfigLines) 
    33253424    { 
    33263425        if (lArg.length == 0) 
     
    34363535} 
    34373536 
    3438 void SetInternalString(char[] pCommand) 
     3537void SetInternalString(string pCommand) 
    34393538{ 
    3440     char[] lName; 
    3441     char[] lValue; 
     3539    string lName; 
     3540    string lValue; 
    34423541    int lPos; 
    34433542 
     
    34653564    switch(lName) 
    34663565    { 
    3467         case "ExeExtention"    : { vExeExtention     = lValue.dup; 
    3468                                    util.fileex.vExeExtention = vExeExtention; 
     3566        case "ExeExtension"    : { vExeExtension     = lValue.dup; 
     3567                                   util.fileex.vExeExtension = vExeExtension; 
    34693568                                   break; 
    34703569                                 } 
    3471         case "LibExtention"    : { vLibExtention     = lValue.dup; break; } 
    3472         case "ObjExtention"    : { vObjExtention     = lValue.dup; break; } 
    3473         case "ShrLibExtention" : { vShrLibExtention  = lValue.dup; break; } 
    3474         case "SrcExtention"    : { vSrcExtention     = lValue.dup; break; } 
    3475         case "MacroExtention"  : { vMacroExtention   = lValue.dup; break; } 
    3476         case "DdocExtention"   : { vDdocExtention    = lValue.dup; break; } 
     3570        case "LibExtension"    : { vLibExtension     = lValue.dup; break; } 
     3571        case "ObjExtension"    : { vObjExtension     = lValue.dup; break; } 
     3572        case "ShrLibExtension" : { vShrLibExtension  = lValue.dup; break; } 
     3573        case "SrcExtension"    : { vSrcExtension     = lValue.dup; break; } 
     3574        case "MacroExtension"  : { vMacroExtension   = lValue.dup; break; } 
     3575        case "DdocExtension"   : { vDdocExtension    = lValue.dup; break; } 
    34773576        case "CompilerExe"     : { vCompilerExe      = lValue.dup; break; } 
    34783577        case "CompileOnly"     : { vCompileOnly      = lValue.dup; break; } 
     
    34803579        case "ConfigFile"      : { vConfigFile       = lValue.dup; break; } 
    34813580        case "CompilerPath"    : { vCompilerPath     = lValue.dup; 
    3482                                    util.str.SetEnv("@D", std.path.getDirName(vCompilerPath)); 
     3581                                   if (vCompilerPath.length > 0) 
     3582                                   { 
     3583                                    if (util.str.ends(vCompilerPath, std.path.sep) == False) 
     3584                                        vCompilerPath ~= std.path.sep; 
     3585                                    util.str.SetEnv("@D", std.path.getDirName(vCompilerPath)); 
     3586                                   } 
    34833587                                   break; } 
    34843588        case "LinkerPath"      : { vLinkerPath       = lValue.dup; break; } 
    34853589        case "LinkerDefs"      : { vLinkerDefs       = lValue.dup; break; } 
    34863590        case "ConfigPath"      : { vOverrideConfigPath       = lValue.dup; 
    3487                                    util.str.SetEnv("@P", std.path.getDirName(vOverrideConfigPath)); 
     3591                                   if (vOverrideConfigPath.length > 0) 
     3592                                   { 
     3593                                    if (util.str.ends(vOverrideConfigPath, std.path.sep) == False) 
     3594                                        vOverrideConfigPath ~= std.path.sep; 
     3595                                    util.str.SetEnv("@P", std.path.getDirName(vOverrideConfigPath)); 
     3596                                   } 
    34883597                                   break; } 
    34893598        case "LibPaths"        : { vLibPaths         = lValue.dup; break; } 
     
    35303639        case "ArgDelim"        : { vArgDelim         = lValue.dup; break; } 
    35313640        case "ArgFileDelim"    : { vArgFileDelim     = lValue.dup; break; } 
     3641        // These cater for spelling mistakes used in an earlier version. 
     3642        case "ExeExtention"    : { vExeExtension     = lValue.dup; 
     3643                                   util.fileex.vExeExtension = vExeExtension; 
     3644                                   break; 
     3645                                 } 
     3646        case "LibExtention"    : { vLibExtension     = lValue.dup; break; } 
     3647        case "ObjExtention"    : { vObjExtension     = lValue.dup; break; } 
     3648        case "ShrLibExtention" : { vShrLibExtension  = lValue.dup; break; } 
     3649        case "SrcExtention"    : { vSrcExtension     = lValue.dup; break; } 
     3650        case "MacroExtention"  : { vMacroExtension   = lValue.dup; break; } 
     3651        case "DdocExtention"   : { vDdocExtension    = lValue.dup; break; } 
    35323652        default: 
    35333653            std.stdio.writefln("Set Internal String '%s' ignored ... unknown name.", pCommand); 
  • trunk/Source/build_bn.d

    r49 r50  
    22// This file is automatically maintained by the BUILD utility, 
    33// Please refrain from manually editing it. 
    4 long auto_build_number = 2371
     4long auto_build_number = 2514
  • trunk/Source/debug.brf

    r36 r50  
    11# This creates the 'debugging' edition of Build 
    22build.d         # Starting file. 
     3-Tbud 
    34+dbg 
    45# --Derek Parnell-- May 07, 2005 10:43:00 PM 
  • trunk/Source/default.rdf

    r48 r50  
    1818TEST 
    1919------------------------------------- 
    20 rule=tes
    21 in=
     20rule=DInden
     21in=i
    2222out=d 
    23 tool=mklines {@IN} {@OUT} 
    24 use_in=compile 
    25 use_out=compile 
    26  
     23tool=dindent {@IN} {@OUT} 
     24out_use=compile 
  • trunk/Source/docsrc/User_Manual.d

    r49 r50  
    33$(TOPIC_H description, Description) 
    44$(SECTION 
    5 Build is a tool to assist building applications and libraries written 
     5$(I Bud) is a tool to assist building applications and libraries written 
    66using the D programming language. 
    77) 
     
    1010$(ABSTRACT 
    1111It is an effective replacement for 
    12 the general 'make' tools. The primary difference between $(I Build) and 
    13 other tools is that $(I Build) does not need you to create and maintain 
     12the general 'make' tools. The primary difference between $(I Bud) and 
     13other tools is that $(I Bud) does not need you to create and maintain 
    1414'makefiles'. Instead, it analyses the source code files to determine 
    1515all dependancies and constructs the appropriate calls to the compiler, 
    1616linker and librarian. 
    1717$(BL) 
    18 The aim of $(I Build) is to create a target file from the source file(s) 
     18The aim of $(I Bud) is to create a target file from the source file(s) 
    1919supplied to it. This is usually an executable file but could also be 
    2020a library. In both cases, source files are converted to object files, and 
     
    3333 
    3434    $(TOC pragmas, Pragmas) 
    35         $(TOC_SUB pragmas,pragma_build, Build) 
    36         $(TOC_SUB pragmas,pragma_build_def, Build Def) 
    37         $(TOC_SUB pragmas,pragma_export_version, Export Version) 
    38         $(TOC_SUB pragmas,pragma_ignore, Ignore) 
    39         $(TOC_SUB pragmas,pragma_include, Include) 
    40         $(TOC_SUB pragmas,pragma_link, Link) 
    41         $(TOC_SUB pragmas,pragma_nolink, Nolink) 
    42         $(TOC_SUB pragmas,pragma_target, Target) 
     35        $(TOC_SUB pragmas,pragma_build, build) 
     36        $(TOC_SUB pragmas,pragma_build_def, build def) 
     37        $(TOC_SUB pragmas,pragma_export_version, export version) 
     38        $(TOC_SUB pragmas,pragma_ignore, ignore) 
     39        $(TOC_SUB pragmas,pragma_include, include) 
     40        $(TOC_SUB pragmas,pragma_link, link) 
     41        $(TOC_SUB pragmas,pragma_nolink, nolink) 
     42        $(TOC_SUB pragmas,pragma_target, target) 
    4343 
    44     $(TOC autobuild, Auto Build Number) 
     44    $(TOC autobuild, Automatic build number) 
    4545 
    4646    $(TOC rules, Rule Definition File) 
     
    5454        $(TOC_SUB switches,switch_allobj,-allobj) 
    5555        $(TOC_SUB switches,switch_autowinlibs,-AutoWinLibs) 
     56        $(TOC_SUB switches,switch_BCFPATH,-BCFPATH) 
    5657        $(TOC_SUB switches,switch_CFPATH,-CFPATH) 
    5758        $(TOC_SUB switches,switch_cleanup,-clean) 
     
    5960        $(TOC_SUB switches,switch_DCPATH,-DCPATH) 
    6061        $(TOC_SUB switches,switch_dll,-dll) 
     62        $(TOC_SUB switches,switch_emptyargs,-emptyargs) 
    6163        $(TOC_SUB switches,switch_exec,-exec$(ANG args)) 
     64        $(TOC_SUB switches,switch_explicit,-explicit) 
    6265        $(TOC_SUB switches,switch_full,-full) 
    6366        $(TOC_SUB switches,switch_gui,-gui) 
     
    8790        $(TOC_SUB switches,switch_uses, -uses) 
    8891        $(TOC_SUB switches,switch_UMB, -UMB) 
     92        $(TOC_SUB switches,switch_usefinal,-usefinal=$(ANG yes/no)) 
    8993        $(TOC_SUB switches,switch_v,-v (lowercase)) 
    9094        $(TOC_SUB switches,switch_V,-V (uppercase)) 
     
    103107$(SECTION $(SECTIONDEF_H authors, Authors:, Derek Parnell - Melbourne)) 
    104108$(SECTION $(SECTIONDEF_H create, Initial Creation:, January 2005)) 
    105 $(SECTION $(SECTIONDEF_H version, Version:, 3.03)) 
    106 $(SECTION $(SECTIONDEF_H date, Date:, 20 September 2006)) 
     109$(SECTION $(SECTIONDEF_H version, Version:, 3.04)) 
     110$(SECTION $(SECTIONDEF_H date, Date:, 16 October 2006)) 
    107111$(SECTION $(SECTION_H license, License:) 
    108112$(CITE 
     
    134138Macros: 
    135139 Copyright = &copy; 2006, Derek Parnell, Melbourne 
    136  Title = User Manual for BUILD 
    137  Product = Build Utility 
     140 Title = User Manual for Bud 
     141 Product = $(I Bud) Utility 
  • trunk/Source/docsrc/autobuild.d

    r41 r50  
    11Ddoc 
    22 
    3 $(TOPIC_H autobuild,Auto Build Number) 
     3$(TOPIC_H autobuild,Automatic build number) 
    44$(SECTION 
    5 Automatically Incremented Build Numbering for Modules 
     5Automatically incremented build numbering for Modules 
    66You can optionally specify that the $(I build) utility automatically 
    77increments a build number for any module. You do this by supplying 
     
    3131 
    3232$(CODE 
    33 writefln("Build number is %d", auto_build_number); 
     33writefln("The application build number is %d", auto_build_number); 
    3434) 
    3535You can access the build numbers of other modules in you application 
     
    5050$(CODE 
    5151module parser_bn; 
    52 /// This file is automatically maintained by the BUILD utility, 
     52/// This file is automatically maintained by the Bud utility, 
    5353/// Please refrain from manually editing it. 
    5454long auto_build_number = 77; 
     
    5656 
    5757Of course the number $(I 77) is just an example. This number would actually 
    58  start at 1 and increment whenever $(I Build) needed to create a new object 
     58 start at 1 and increment whenever $(I Bud) needed to create a new object 
    5959file for the module. 
    6060) 
     
    6363Macros: 
    6464 Copyright = &copy; 2006, Derek Parnell, Melbourne 
    65  Title = User Manual for BUILD 
    66  Product = Build Utility 
     65 Title = User Manual for Bud 
     66 Product = Bud Utility 
  • trunk/Source/docsrc/change_log.d

    r49 r50  
    44$(SECTION 
    55A list of changes and fixes that have been made. 
     6 
     7$(SUBSECTION_H ,v3.04 -- /October/2006 ) 
     8$(LIST 
     9    $(ITEM ** $(B FIX:) Correctly handle INIT:CompilerExe from configuration file 
     10      ) 
     11    $(ITEM ** $(B FIX:) Correctly handles version platform statements. 
     12      ) 
     13    $(ITEM ** $(B FIX:) Correctly handles the #! arguments. 
     14      ) 
     15    $(ITEM ** $(B FIX:) Sets default OutFileSwitch for GDC to "-o " 
     16      ) 
     17    $(ITEM ** $(B FIX:) Sets default Shared Library Extension for unix to "so" 
     18      ) 
     19    $(ITEM ** $(B FIX:) Sets default Linker 'lib' switch for GNU tools to "-l" 
     20      ) 
     21    $(ITEM ** $(B FIX:) The auto-build-number facility has been repaired. 
     22      ) 
     23    $(ITEM ** $(B FIX:) No longer runs any FINAL commands if the compile failed. 
     24      ) 
     25    $(ITEM ** $(B FIX: Ticket #38) Now correctly handles paths enclosed in quotes. 
     26      ) 
     27    $(ITEM ** $(B ENH:) A new $(I -explicit) switch will cause only the 
     28    files explicitly named on the command line to be compiled. All other 
     29    files, such as imported ones, are processed but not compiled. 
     30    ) 
     31    $(ITEM ** $(B ENH:) A new $(I -usefinal) switch to control the usage of 
     32    FINAL statements defined in the configuration file. 
     33    ) 
     34    $(ITEM ** $(B ENH:) A new $(I -emptyargs) switch to control whether or 
     35    not to abort if there are any empty arguments on the command line. 
     36    ) 
     37    $(ITEM ** $(B ENH:) A new $(I -BCFPATH) switch to define an alternative 
     38    location for $(I Bud) configuration files. This can also be supplied as 
     39    an environment switch. 
     40    ) 
     41) 
    642 
    743$(SUBSECTION_H ,v3.03 -- 20/September/2006 ) 
     
    112148    ) 
    113149    $(ITEM ** $(B FIX: Ticket #9 ) Now, if the output file created by the 
    114      rule ends with the library extention, it is presented to the linker 
     150     rule ends with the library extension, it is presented to the linker 
    115151     as a library rather than an object file. 
    116152    ) 
     
    136172    'std' modules.) 
    137173 
    138     $(ITEM ** $(B ENH: ) Any file name on the command line with an extention 
    139      of $(I ".brf" ) will be used as a $(EXREF response_file.html, Build Response File) 
     174    $(ITEM ** $(B ENH: ) Any file name on the command line with an extension 
     175     of $(I ".brf" ) will be used as a $(EXREF response_file.html, $(I Bud) Response File) 
    140176    ) 
    141177 
    142178    $(ITEM ** $(B ENH: ) If there is nothing on the command line and the 
    143179    file 'build.brf' exists in the current directory, then it will be 
    144     used as the $(EXREF response_file.html, Build Response File) for this run. 
     180    used as the $(EXREF response_file.html, $(I Bud) Response File) for this run. 
    145181    ) 
    146182 
     
    213249$(SUBSECTION_H ,v2.10 -- 06/Apr/2006 ) 
    214250$(LIST 
    215     $(ITEM ** $(B FIX: ) The default Build Response File invoked when just 
     251    $(ITEM ** $(B FIX: ) The default $(I Bud) Response File invoked when just 
    216252    placing '@' on the command line is now correctly named "build.brf") 
    217253    $(ITEM ** $(B ENH: )  For Windows environments, command line files can now use 
     
    220256    invoked via DMD. ) 
    221257    $(ITEM ** $(B ENH: ) You can now specify the default linker switches in 
    222     the Build Configuration File. ) 
     258    the $(I Bud) Configuration File. ) 
    223259    $(ITEM ** $(B ENH: ) Using the new switch $(I -PP ), you can now 
    224260    specify additional paths to search for files.) 
  • trunk/Source/docsrc/command_line.d

    r45 r50  
    33$(TOPIC_H command_line,Command Line) 
    44$(SECTION 
    5 The $(I Build) utility supplies the source file and optional switches via 
    6 the command line. The typical format of the $(I Build) utility's command 
     5The $(I Bud) utility supplies the source file and optional switches via 
     6the command line. The typical format of the $(I Bud) utility's command 
    77line is ... 
    88$(CODE 
     
    1212You can however specify the files and switches in any order you like. 
    1313$(BL) 
    14 Normally you would only supply a single file name to $(I Build), that being 
     14Normally you would only supply a single file name to $(I Bud), that being 
    1515 the source file of the top-level file in the application. Typically 
    1616 the one that has the 'main()' or 'WinMain()' function, though this is 
     
    2323If you run the utility without any files and without any switches, it 
    2424 display a $(I help) screen with some details about the switches. That looks 
    25  something like this ... 
     25 something similar to this ... 
    2626$(CODE 
    2727  Path and Version : C:\Program Files\build.exe v3.6(339) 
     
    9090                  Note that the default for Windows $(I DigitalMars) is to use a response file 
    9191                  but for all other environments it is to use command line arguments. 
    92     $(B -info)      Displays the version and path of the Build application 
     92    $(B -info)      Displays the version and path of the $(I Bud) application 
    9393    $(B -help)      Displays the full 'usage' help text. 
    9494    $(B -h)         Same as /-help, displays the full 'usage' help text. 
     
    121121Macros: 
    122122 Copyright = &copy; 2006, Derek Parnell, Melbourne 
    123  Title = User Manual for BUILD 
    124  Product = Build Utility 
     123 Title = User Manual for Bud 
     124 Product = $(I Bud) Utility 
  • trunk/Source/docsrc/configuration_file.d

    r49 r50  
    55The utility's configuration file is used to specify your default options 
    66for the utility. The file is called $(B build.cfg). You can have from zero 
    7 to three configuration files because the $(I Build) utility looks in each 
    8 of three places for a configuration file, and it uses each one that it finds. 
    9 It looks in the folder that $(I Build) is installed, then in the folder 
     7to four configuration files because the $(I Bud) utility looks in each 
     8of four places for a configuration file, and it uses each one that it finds. 
     9It looks in the folder that $(I Bud) is installed, then in a user defined 
     10alternative path (defined by -BCFPATH switch), then in the folder 
    1011that the compiler is installed, and finally in the current folder. 
     12$(BL) 
     13$(B Note:) The alternative location is optional. It can be specified in 
     14an environment switch called BCFPATH or in a command line switch 
     15of the same name, -BCFPATH. 
    1116$(BL) 
    1217The configuration file consists of one or more command lines. 
     
    8489$(INDENT 
    8590$(SECTION The identifiers for the settable strings are detailed below.) 
    86 $(TABROW ExeExtention, The file extention for executable files. $(EG exe)) 
    87 $(TABROW LibExtention, The file extention for library files.$(EG lib)) 
    88 $(TABROW ObjExtention, The file extention for object files.$(EG obj)) 
    89 $(TABROW ShrLibExtention, The file extention for shared libraries files.$(EG dll)) 
    90 $(TABROW SrcExtention   , The file extention for D source files.$(EG d)) 
    91 $(TABROW MacroExtention ,  The file extention for macro files.$(EG mac)) 
    92 $(TABROW DdocExtention  , The file extention for D Documentation files.$(EG ddoc)) 
     91$(TABROW ExeExtension, The file extension for executable files. $(EG exe)) 
     92$(TABROW LibExtension, The file extension for library files.$(EG lib)) 
     93$(TABROW ObjExtension, The file extension for object files.$(EG obj)) 
     94$(TABROW ShrLibExtension, The file extension for shared libraries files.$(EG dll)) 
     95$(TABROW SrcExtension   , The file extension for D source files.$(EG d)) 
     96$(TABROW MacroExtension ,  The file extension for macro files.$(EG mac)) 
     97$(TABROW DdocExtension  , The file extension for D Documentation files.$(EG ddoc)) 
    9398$(TABROW CompilerExe    , The file name of the compiler.$(EG dmd.exe)) 
    9499$(TABROW CompileOnly    , The switch that is passed to the compiler to tell 
     
    127132                          you don't specify any CompilerDefs, "-op" is 
    128133                          assumed.) 
    129 $(TABROW OutFileSwitch  , The switch tells $(I Build) 
     134$(TABROW OutFileSwitch  , The switch tells $(I Bud) 
    130135                          where to create the executable file. $(EG -of)) 
    131136$(TABROW ImportPath     , This is the switch for the compiler to tell it where 
     
    142147                          to insert symbolic debugging information into 
    143148                          the executable.$(EG /co)) 
    144 $(TABROW BuildImportPath, This is the switch for $(I Build) to tell it 
     149$(TABROW BuildImportPath, This is the switch for $(I Bud) to tell it 
    145150                          a path to scan for imported modules. $(EG -I)) 
    146 $(TABROW ImportPathDelim, This is the switch for $(I Build) to tell it 
     151$(TABROW ImportPathDelim, This is the switch for $(I Bud) to tell it 
    147152                          which character is used to delimit paths on 
    148153                          a BuildImportPath list. $(EG ;)) 
    149 $(TABROW OutputPath     , This is the switch for $(I Build) to tell it 
     154$(TABROW OutputPath     , This is the switch for $(I Bud) to tell it 
    150155                          the path to use for all temporary output files. $(EG -od)) 
    151 $(TABROW RunSwitch      , This is the switch for $(I Build) to tell it 
     156$(TABROW RunSwitch      , This is the switch for $(I Bud) to tell it 
    152157                          to run the application once it successfully 
    153158                          compiles. $(EG -exec)) 
     
    156161                          by a 'LIBCMD=' in the configuration file or 
    157162                          on the commandline. $(EG c:\tools\)) 
    158 $(TABROW ResponseExt    , This is the file extention that Build will use 
     163$(TABROW ResponseExt    , This is the file extension that $(I Bud) will use 
    159164                          for its response files. $(EG brf)) 
    160 $(TABROW DefResponseFile, This is the name of $(I Build's) default 
     165$(TABROW DefResponseFile, This is the name of the $(I Bud) default 
    161166                          response file. $(EG build.brf)) 
    162 $(TABROW RDFName        , This is the name of $(I Build's) default 
     167$(TABROW RDFName        , This is the name of the $(I Bud) default 
    163168                          Rules Definition File. $(EG default.rdf)) 
    164 $(TABROW DefMacroDefFile, This is the name of $(I Build's) default 
     169$(TABROW DefMacroDefFile, This is the name of the $(I Bud) default 
    165170                          Macro Definition File. $(EG build.mdf)) 
    166171$(TABROW LinkerStdOut   , This is the commandline option given to the linker 
    167                           when the $(I Build) commandline has the $(I "-silent") 
     172                          when the $(I Bud) commandline has the $(I "-silent") 
    168173                          switch. $(EG >nul)) 
    169174$(TABROW IgnoredModules , This is a comma delimited list of modules or packages 
    170                           to ignore. $(I Build) will not scan these modules and 
     175                          to ignore. $(I Bud) will not scan these modules and 
    171176                          packages for dependancies. $(EG std,dfl,dui) 
    172177                          If none is specified by this configuration item then 
     
    205210                          ) 
    206211) 
    207 $(TABROW PathId         , The name of the environment symbol used by $(I Build) 
     212$(TABROW PathId         , The name of the environment symbol used by $(I Bud) 
    208213                          when scanning for executables. $(EG PATH)) 
    209 $(TABROW HomePathId     , The name of the environment symbol used by $(I Build) 
     214$(TABROW HomePathId     , The name of the environment symbol used by $(I Bud) 
    210215                          when scanning for configuration file. $(EG HOME)) 
    211 $(TABROW EtcPath        , The name of an alternative path used by $(I Build) 
     216$(TABROW EtcPath        , The name of an alternative path used by $(I Bud) 
    212217                          when scanning for configuration file. $(EG c:\etc\)) 
    213 $(TABROW GenDebugInfo   , The switch that tells $(I Build) and the compiler 
     218$(TABROW GenDebugInfo   , The switch that tells $(I Bud) and the compiler 
    214219                          to insert debugging information into the object 
    215220                          files. $(EG -g)) 
    216 $(TABROW ModOutPrefix   , If the $(I Build) switch $(I $(QUOTE -modules)) was 
    217                           used, this defines the string which $(I Build) will 
     221$(TABROW ModOutPrefix   , If the $(I Bud) switch $(I $(QUOTE -modules)) was 
     222                          used, this defines the string which $(I Bud) will 
    218223                          begin the Modules List output file with. 
    219224                          $(EG  MODULES = \n)) 
    220 $(TABROW ModOutSuffix   , If the $(I Build) switch $(I $(QUOTE -modules)) was 
    221                           used, this defines the string which $(I Build) will 
     225$(TABROW ModOutSuffix   , If the $(I Bud) switch $(I $(QUOTE -modules)) was 
     226                          used, this defines the string which $(I Bud) will 
    222227                          end the Modules List output file with. 
    223228                          $(EG  )) 
    224 $(TABROW ModOutBody     , If the $(I Build) switch $(I $(QUOTE -modules)) was 
    225                           used, this defines the string which $(I Build) will 
     229$(TABROW ModOutBody     , If the $(I Bud) switch $(I $(QUOTE -modules)) was 
     230                          used, this defines the string which $(I Bud) will 
    226231                          use as a template for each module being listed. 
    227232                          $(EG     $(DOLLAR)(MODULE {mod})) $(BL) 
     
    229234                          name and {src} will be replaced with the source 
    230235                          file's name.) 
    231 $(TABROW ModOutDelim    , If the $(I Build) switch $(I $(QUOTE -modules)) was 
    232                           used, this defines the string which $(I Build) will 
     236$(TABROW ModOutDelim    , If the $(I Bud) switch $(I $(QUOTE -modules)) was 
     237                          used, this defines the string which $(I Bud) will 
    233238                          insert in between each listed module. 
    234239                          $(EG \n)) 
    235 $(TABROW ModOutFile     , If the $(I Build) switch $(I $(QUOTE -modules)) was 
     240$(TABROW ModOutFile     , If the $(I Bud) switch $(I $(QUOTE -modules)) was 
    236241                          used, this defines the output file's suffix. This 
    237242                          is only used if the $(I $(QUOTE -modules)) switch 
     
    261266 
    262267$(EXAMPLE , 
    263 INIT:MacroExtention = bmc 
     268INIT:MacroExtension = bmc 
    264269INIT:LinkerPath = /u2/qwerty/ 
    265270INIT:AssumedLibs = c,kde,mgui 
     
    271276    $(THCELLS $(I INIT:) item,DigitalMars-Windows,GDC-Windows,DigitalMars-Unix,GDC-Unix) 
    272277  ) 
    273   $(ROW  $(CELLS ExeExtention,exe,exe,,)) 
    274   $(ROW  $(CELLS LibExtention,lib,lib,a,a)) 
    275   $(ROW  $(CELLS ObjExtention,obj,obj,o,o)) 
    276   $(ROW  $(CELLS ShrLibExtention,dll,dll,s,s)) 
    277   $(ROW  $(CELLS SrcExtention,d,d,d,d)) 
    278   $(ROW  $(CELLS MacroExtention,mac,mac,mac,mac)) 
    279   $(ROW  $(CELLS DdocExtention,ddoc,ddoc,ddoc,ddoc)) 
     278  $(ROW  $(CELLS ExeExtension,exe,exe,,)) 
     279  $(ROW  $(CELLS LibExtension,lib,lib,a,a)) 
     280  $(ROW  $(CELLS ObjExtension,obj,obj,o,o)) 
     281  $(ROW  $(CELLS ShrLibExtension,dll,dll,s,s)) 
     282  $(ROW  $(CELLS SrcExtension,d,d,d,d)) 
     283  $(ROW  $(CELLS MacroExtension,mac,mac,mac,mac)) 
     284  $(ROW  $(CELLS DdocExtension,ddoc,ddoc,ddoc,ddoc)) 
    280285  $(ROW  $(CELLS CompilerExe,dmd.exe,gdc.exe,dmd,gdc)) 
    281286  $(ROW  $(CELLS CompileOnly,-c,-c,-c,-c)) 
     
    435440Macros: 
    436441 Copyright = &copy; 2006, Derek Parnell, Melbourne 
    437  Title = User Manual for BUILD 
    438  Product = Build Utility 
     442 Title = User Manual for Bud 
     443 Product = $(I Bud) Utility 
    439444 EG    = <span class="eg">Example: "$0"</span> 
    440445 MYTITLE = $(Title) 
  • trunk/Source/docsrc/dlls.d

    r41 r50  
    33$(TOPIC_H dll_libraries,DLL Libraries) 
    44$(SECTION 
    5 $(SHORT_TITLE How to create a DLL library using Build.) 
     5$(SHORT_TITLE How to create a DLL library using $(I Bud).) 
    66$(BR) 
    7 When Build finds a $(B DllMain()) function, or the $(B -dll) switch is used, it 
     7When $(I Bud) finds a $(B DllMain()) function, or the $(B -dll) switch is used, it 
    88creates a special type of Module Definition file, and sets the target to 
    99to be a DLL file. The Module Definition file generated takes the form ... 
     
    2121Also, if you have the program $(B implib) in your path, it will be run 
    2222after the DLL file is created, in order to also create a $(B .lib) 
    23 library to interface with the DLL. Build currently supports both the