Changeset 36

Show
Ignore:
Timestamp:
05/07/05 09:46:04 (7 years ago)
Author:
Derek Parnell
Message:

Upload of v2.07 (build #912)

see Docs/CHANGE_LOG.htm for details.
modified trunk/Docs/AUTO_BUILD_NUMBER.htm
modified trunk/Docs/CHANGE_LOG.htm
modified trunk/Docs/COMMAND_LINE.htm
modified trunk/Docs/DLL_LIBRARIES.htm
modified trunk/Docs/index.htm
modified trunk/Docs/PRAGMA.htm
modified trunk/Docs/RESPONSE_FILE.htm
modified trunk/Docs/RULE_DEFINITION_FILE.htm
modified trunk/Docs/SWITCHES.htm
modified trunk/Docs/TO_DO.htm
modified trunk/Source/build.d
modified trunk/Source/build_bn.d
modified trunk/Source/debug.brf
modified trunk/Source/full.brf
modified trunk/Source/source_bn.d
modified trunk/Source/util/BMscanner.d
added downloads/build-2.07.doc.zip
added downloads/build-2.07.src.zip
added downloads/build_win_2.07.exe
added trunk/Docs/CONFIGURATION_FILE.htm
added trunk/Source/build.cfg

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Docs/AUTO_BUILD_NUMBER.htm

    r35 r36  
    22<head> 
    33<!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 
    4 <!-- on 2005/05/04 at 17h47m11 --> 
     4<!-- on 2005/05/07 at 22h40m00 --> 
    55<style>h4 {text-align: right}</style> 
    66<title></title> 
  • trunk/Docs/CHANGE_LOG.htm

    r35 r36  
    22<head> 
    33<!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 
    4 <!-- on 2005/05/04 at 17h47m11 --> 
     4<!-- on 2005/05/07 at 22h40m00 --> 
    55<style>h4 {text-align: right}</style> 
    66<title></title> 
     
    1212<p><h3>A list of changes and fixes that have been made. 
    1313</h3><br> 
     14<p> 
     15 <strong> -- v2.07 -- 06/May/2005 </strong> 
     16<ul> 
     17 <li> ** <strong>ENH</strong>: New switch <em>-nodef</em> to prevent the utility from 
     18automatically creating a Module Definition File (.def) 
     19 <li> ** <strong>ENH</strong>: You can now specify default, and special, settings for 
     20the utility's command line. These are placed in a text configuration file called 
     21 <strong>build.cfg</strong>. The utility first looks in the same directory as the 
     22utility's executable for the configuration file. After processing any 
     23configuration file found there, it then looks in the same directory as 
     24the compiler for a configuration file (build.cfg) and processes it if 
     25found. 
     26 <li> ** <strong>ENH</strong>: To support special command line settings that may be 
     27specified in the utility's configuration file(s), you can indicate 
     28one or more setting groups on the command line. These take the format of 
     29+groupname. The configuration file(s) are scanned for special group settings 
     30after the default ones have been processed. 
     31 <li> ** <strong>ENH</strong>: To remove an earlier specified command line switch, you 
     32can prepend it with a hyphen. This new feature may be needed when command 
     33line switches can come from multiple sources (the original command line, 
     34utility response files, and utility configuration files), and you need 
     35 to remove a switch that may have been provided by some other source. <br> 
     36For example to negate an earlier "-unittest" switch you code add "--unittest" 
     37to the command line. 
     38 <li> ** <strong>ENH</strong>: New switch <em>-od</em> is used to nominate a directory for 
     39temporary files. For the DigitalMars compiler, this also is used as the location 
     40to create object files. 
     41 </ul>  
    1442<p> 
    1543 <strong> -- v2.06 -- 04/May/2005 </strong> 
  • trunk/Docs/COMMAND_LINE.htm

    r35 r36  
    22<head> 
    33<!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 
    4 <!-- on 2005/05/04 at 17h47m11 --> 
     4<!-- on 2005/05/07 at 22h40m00 --> 
    55<style>h4 {text-align: right}</style> 
    66<title></title> 
     
    9191 <strong>-?   </strong>      Same as -help, displays the full 'usage' help text. 
    9292 <strong>-silent</strong>    Avoids unnecessary messages being displayed. 
     93 <strong>-od&lt;path&gt;</strong>  Nominate the directory where temporary (work) files 
     94are to be created. By default they are created in 
     95the same directory as the target file. 
     96 <strong>-nodef</strong>     Prevents a Module Definition File being automatically created. 
     97 This will override any pragma(/build_def) statements in the  
     98source code. 
    9399 <strong>[...]</strong>      All other options, objectfiles and libraries are 
    94100passed to the compiler 
  • trunk/Docs/DLL_LIBRARIES.htm

    r35 r36  
    22<head> 
    33<!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 
    4 <!-- on 2005/05/04 at 17h47m11 --> 
     4<!-- on 2005/05/07 at 22h40m00 --> 
    55<style>h4 {text-align: right}</style> 
    66<title></title> 
     
    2323</pre> 
    2424<p> 
    25 You can replace any of these by explicitly coding a pragma(build_def) 
     25 You can replace any of these by explicitly coding a pragma(/build_def)  
    2626with different options than these defaults shown here. 
    2727<p> 
  • trunk/Docs/PRAGMA.htm

    r35 r36  
    22<head> 
    33<!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 
    4 <!-- on 2005/05/04 at 17h47m11 --> 
     4<!-- on 2005/05/07 at 22h40m00 --> 
    55<style>h4 {text-align: right}</style> 
    66<title></title> 
  • trunk/Docs/RESPONSE_FILE.htm

    r35 r36  
    22<head> 
    33<!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 
    4 <!-- on 2005/05/04 at 17h47m11 --> 
     4<!-- on 2005/05/07 at 22h40m00 --> 
    55<style>h4 {text-align: right}</style> 
    66<title></title> 
  • trunk/Docs/RULE_DEFINITION_FILE.htm

    r35 r36  
    22<head> 
    33<!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 
    4 <!-- on 2005/05/04 at 17h47m11 --> 
     4<!-- on 2005/05/07 at 22h40m00 --> 
    55<style>h4 {text-align: right}</style> 
    66<title></title> 
  • trunk/Docs/SWITCHES.htm

    r35 r36  
    22<head> 
    33<!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 
    4 <!-- on 2005/05/04 at 17h47m11 --> 
     4<!-- on 2005/05/07 at 22h40m00 --> 
    55<style>h4 {text-align: right}</style> 
    66<title></title> 
     
    2828<li><a href="#_M"><i>switch</i> -M</a> &nbsp;&nbsp;Identifies a module or a package to notice (not ignore) 
    2929<li><a href="#_NAMES"><i>switch</i> -names</a> &nbsp;&nbsp;Displays the names of the files used in building the target. 
     30<li><a href="#_NODEF"><i>switch</i> -nodef</a> &nbsp;&nbsp;Prevent a Module Definition File being created. 
    3031<li><a href="#_NOLIB"><i>switch</i> -nolib</a> &nbsp;&nbsp;Ensures that the object files are not used to form a library. 
    3132<li><a href="#_NOLINK"><i>switch</i> -nolink</a> &nbsp;&nbsp; Ensures that the linker is not called. 
    3233<li><a href="#_OBJ"><i>switch</i> -obj</a> &nbsp;&nbsp; Shorthand for using both <a href="#_NOLINK">-nolink</a> and <a href="#_NOLIB">-nolib</a> switches. 
     34<li><a href="#_OD"><i>switch</i> -od</a> &nbsp;&nbsp;Nominates the temporary file directory. 
    3335<li><a href="#_R"><i>switch</i> -R</a> &nbsp;&nbsp;Determines if the compiler tools use a response file or not. 
    3436<li><a href="#_RDF"><i>switch</i> -RDF</a> &nbsp;&nbsp; Defines a file to override the default <a href="RULE_DEFINITION_FILE.htm#RULE_DEFINITION_FILE">Rule Definition File</a> 
     
    3638<li><a href="#_T"><i>switch</i> -T</a> &nbsp;&nbsp;Identifies the target name to build. 
    3739<li><a href="#_TEST"><i>switch</i> -test</a> &nbsp;&nbsp;Does a test run only. No compiling, linking or library work is done. 
     40<li><a href="#_V"><i>switch</i> -v</a> &nbsp;&nbsp; Set <em>verbose</em> mode on for both <em>build</em> and for the compiler 
    3841<li><a href="#_V"><i>switch</i> -V</a> &nbsp;&nbsp; Set <em>verbose</em> mode on for just <em>build</em> and not for the compiler 
    39 <li><a href="#_V"><i>switch</i> -v</a> &nbsp;&nbsp; Set <em>verbose</em> mode on for both <em>build</em> and for the compiler 
    4042<li><a href="#_X"><i>switch</i> -X</a> &nbsp;&nbsp;Identifies a module or package to ignore 
    4143<hr> 
     
    6365<a href="#_M">-M</a>, 
    6466<a href="#_NAMES">-names</a>, 
    65 <a href="#_NOLIB">-nolib</a>, 
    66 <a href="#_NOLINK">-nolink</a>, 
    67 <a href="#_OBJ">-obj</a>, 
    68 <a href="#_R">-R</a>, 
    69 <a href="#_RDF">-RDF</a>, 
    70 <a href="#_SILENT">-silent</a>, 
    71 <a href="#_T">-T</a>, 
    72 <a href="#_TEST">-test</a>, 
    73 <a href="#_V">-V</a>, 
    74 <a href="#_V">-v</a>, 
     67<a href="#_NODEF">-nodef</a>, 
     68<a href="#_NOLIB">-nolib</a>, 
     69<a href="#_NOLINK">-nolink</a>, 
     70<a href="#_OBJ">-obj</a>, 
     71<a href="#_OD">-od</a>, 
     72<a href="#_R">-R</a>, 
     73<a href="#_RDF">-RDF</a>, 
     74<a href="#_SILENT">-silent</a>, 
     75<a href="#_T">-T</a>, 
     76<a href="#_TEST">-test</a>, 
     77<a href="#_V">-v</a>, 
     78<a href="#_V">-V</a>, 
    7579<a href="#_X">-X</a> 
    7680<hr> 
     
    103107<a href="#_M">-M</a>, 
    104108<a href="#_NAMES">-names</a>, 
    105 <a href="#_NOLIB">-nolib</a>, 
    106 <a href="#_NOLINK">-nolink</a>, 
    107 <a href="#_OBJ">-obj</a>, 
    108 <a href="#_R">-R</a>, 
    109 <a href="#_RDF">-RDF</a>, 
    110 <a href="#_SILENT">-silent</a>, 
    111 <a href="#_T">-T</a>, 
    112 <a href="#_TEST">-test</a>, 
    113 <a href="#_V">-V</a>, 
    114 <a href="#_V">-v</a>, 
     109<a href="#_NODEF">-nodef</a>, 
     110<a href="#_NOLIB">-nolib</a>, 
     111<a href="#_NOLINK">-nolink</a>, 
     112<a href="#_OBJ">-obj</a>, 
     113<a href="#_OD">-od</a>, 
     114<a href="#_R">-R</a>, 
     115<a href="#_RDF">-RDF</a>, 
     116<a href="#_SILENT">-silent</a>, 
     117<a href="#_T">-T</a>, 
     118<a href="#_TEST">-test</a>, 
     119<a href="#_V">-v</a>, 
     120<a href="#_V">-V</a>, 
    115121<a href="#_X">-X</a> 
    116122<hr> 
     
    140146<a href="#_M">-M</a>, 
    141147<a href="#_NAMES">-names</a>, 
    142 <a href="#_NOLIB">-nolib</a>, 
    143 <a href="#_NOLINK">-nolink</a>, 
    144 <a href="#_OBJ">-obj</a>, 
    145 <a href="#_R">-R</a>, 
    146 <a href="#_RDF">-RDF</a>, 
    147 <a href="#_SILENT">-silent</a>, 
    148 <a href="#_T">-T</a>, 
    149 <a href="#_TEST">-test</a>, 
    150 <a href="#_V">-V</a>, 
    151 <a href="#_V">-v</a>, 
     148<a href="#_NODEF">-nodef</a>, 
     149<a href="#_NOLIB">-nolib</a>, 
     150<a href="#_NOLINK">-nolink</a>, 
     151<a href="#_OBJ">-obj</a>, 
     152<a href="#_OD">-od</a>, 
     153<a href="#_R">-R</a>, 
     154<a href="#_RDF">-RDF</a>, 
     155<a href="#_SILENT">-silent</a>, 
     156<a href="#_T">-T</a>, 
     157<a href="#_TEST">-test</a>, 
     158<a href="#_V">-v</a>, 
     159<a href="#_V">-V</a>, 
    152160<a href="#_X">-X</a> 
    153161<hr> 
     
    186194<a href="#_M">-M</a>, 
    187195<a href="#_NAMES">-names</a>, 
    188 <a href="#_NOLIB">-nolib</a>, 
    189 <a href="#_NOLINK">-nolink</a>, 
    190 <a href="#_OBJ">-obj</a>, 
    191 <a href="#_R">-R</a>, 
    192 <a href="#_RDF">-RDF</a>, 
    193 <a href="#_SILENT">-silent</a>, 
    194 <a href="#_T">-T</a>, 
    195 <a href="#_TEST">-test</a>, 
    196 <a href="#_V">-V</a>, 
    197 <a href="#_V">-v</a>, 
     196<a href="#_NODEF">-nodef</a>, 
     197<a href="#_NOLIB">-nolib</a>, 
     198<a href="#_NOLINK">-nolink</a>, 
     199<a href="#_OBJ">-obj</a>, 
     200<a href="#_OD">-od</a>, 
     201<a href="#_R">-R</a>, 
     202<a href="#_RDF">-RDF</a>, 
     203<a href="#_SILENT">-silent</a>, 
     204<a href="#_T">-T</a>, 
     205<a href="#_TEST">-test</a>, 
     206<a href="#_V">-v</a>, 
     207<a href="#_V">-V</a>, 
    198208<a href="#_X">-X</a> 
    199209<hr> 
     
    222232<a href="#_M">-M</a>, 
    223233<a href="#_NAMES">-names</a>, 
    224 <a href="#_NOLIB">-nolib</a>, 
    225 <a href="#_NOLINK">-nolink</a>, 
    226 <a href="#_OBJ">-obj</a>, 
    227 <a href="#_R">-R</a>, 
    228 <a href="#_RDF">-RDF</a>, 
    229 <a href="#_SILENT">-silent</a>, 
    230 <a href="#_T">-T</a>, 
    231 <a href="#_TEST">-test</a>, 
    232 <a href="#_V">-V</a>, 
    233 <a href="#_V">-v</a>, 
     234<a href="#_NODEF">-nodef</a>, 
     235<a href="#_NOLIB">-nolib</a>, 
     236<a href="#_NOLINK">-nolink</a>, 
     237<a href="#_OBJ">-obj</a>, 
     238<a href="#_OD">-od</a>, 
     239<a href="#_R">-R</a>, 
     240<a href="#_RDF">-RDF</a>, 
     241<a href="#_SILENT">-silent</a>, 
     242<a href="#_T">-T</a>, 
     243<a href="#_TEST">-test</a>, 
     244<a href="#_V">-v</a>, 
     245<a href="#_V">-V</a>, 
    234246<a href="#_X">-X</a> 
    235247<hr> 
     
    258270<a href="#_M">-M</a>, 
    259271<a href="#_NAMES">-names</a>, 
    260 <a href="#_NOLIB">-nolib</a>, 
    261 <a href="#_NOLINK">-nolink</a>, 
    262 <a href="#_OBJ">-obj</a>, 
    263 <a href="#_R">-R</a>, 
    264 <a href="#_RDF">-RDF</a>, 
    265 <a href="#_SILENT">-silent</a>, 
    266 <a href="#_T">-T</a>, 
    267 <a href="#_TEST">-test</a>, 
    268 <a href="#_V">-V</a>, 
    269 <a href="#_V">-v</a>, 
     272<a href="#_NODEF">-nodef</a>, 
     273<a href="#_NOLIB">-nolib</a>, 
     274<a href="#_NOLINK">-nolink</a>, 
     275<a href="#_OBJ">-obj</a>, 
     276<a href="#_OD">-od</a>, 
     277<a href="#_R">-R</a>, 
     278<a href="#_RDF">-RDF</a>, 
     279<a href="#_SILENT">-silent</a>, 
     280<a href="#_T">-T</a>, 
     281<a href="#_TEST">-test</a>, 
     282<a href="#_V">-v</a>, 
     283<a href="#_V">-V</a>, 
    270284<a href="#_X">-X</a> 
    271285<hr> 
     
    301315<a href="#_M">-M</a>, 
    302316<a href="#_NAMES">-names</a>, 
    303 <a href="#_NOLIB">-nolib</a>, 
    304 <a href="#_NOLINK">-nolink</a>, 
    305 <a href="#_OBJ">-obj</a>, 
    306 <a href="#_R">-R</a>, 
    307 <a href="#_RDF">-RDF</a>, 
    308 <a href="#_SILENT">-silent</a>, 
    309 <a href="#_T">-T</a>, 
    310 <a href="#_TEST">-test</a>, 
    311 <a href="#_V">-V</a>, 
    312 <a href="#_V">-v</a>, 
     317<a href="#_NODEF">-nodef</a>, 
     318<a href="#_NOLIB">-nolib</a>, 
     319<a href="#_NOLINK">-nolink</a>, 
     320<a href="#_OBJ">-obj</a>, 
     321<a href="#_OD">-od</a>, 
     322<a href="#_R">-R</a>, 
     323<a href="#_RDF">-RDF</a>, 
     324<a href="#_SILENT">-silent</a>, 
     325<a href="#_T">-T</a>, 
     326<a href="#_TEST">-test</a>, 
     327<a href="#_V">-v</a>, 
     328<a href="#_V">-V</a>, 
    313329<a href="#_X">-X</a> 
    314330<hr> 
     
    333349<a href="#_M">-M</a>, 
    334350<a href="#_NAMES">-names</a>, 
    335 <a href="#_NOLIB">-nolib</a>, 
    336 <a href="#_NOLINK">-nolink</a>, 
    337 <a href="#_OBJ">-obj</a>, 
    338 <a href="#_R">-R</a>, 
    339 <a href="#_RDF">-RDF</a>, 
    340 <a href="#_SILENT">-silent</a>, 
    341 <a href="#_T">-T</a>, 
    342 <a href="#_TEST">-test</a>, 
    343 <a href="#_V">-V</a>, 
    344 <a href="#_V">-v</a>, 
     351<a href="#_NODEF">-nodef</a>, 
     352<a href="#_NOLIB">-nolib</a>, 
     353<a href="#_NOLINK">-nolink</a>, 
     354<a href="#_OBJ">-obj</a>, 
     355<a href="#_OD">-od</a>, 
     356<a href="#_R">-R</a>, 
     357<a href="#_RDF">-RDF</a>, 
     358<a href="#_SILENT">-silent</a>, 
     359<a href="#_T">-T</a>, 
     360<a href="#_TEST">-test</a>, 
     361<a href="#_V">-v</a>, 
     362<a href="#_V">-V</a>, 
    345363<a href="#_X">-X</a> 
    346364<hr> 
     
    364382<a href="#_M">-M</a>, 
    365383<a href="#_NAMES">-names</a>, 
    366 <a href="#_NOLIB">-nolib</a>, 
    367 <a href="#_NOLINK">-nolink</a>, 
    368 <a href="#_OBJ">-obj</a>, 
    369 <a href="#_R">-R</a>, 
    370 <a href="#_RDF">-RDF</a>, 
    371 <a href="#_SILENT">-silent</a>, 
    372 <a href="#_T">-T</a>, 
    373 <a href="#_TEST">-test</a>, 
    374 <a href="#_V">-V</a>, 
    375 <a href="#_V">-v</a>, 
     384<a href="#_NODEF">-nodef</a>, 
     385<a href="#_NOLIB">-nolib</a>, 
     386<a href="#_NOLINK">-nolink</a>, 
     387<a href="#_OBJ">-obj</a>, 
     388<a href="#_OD">-od</a>, 
     389<a href="#_R">-R</a>, 
     390<a href="#_RDF">-RDF</a>, 
     391<a href="#_SILENT">-silent</a>, 
     392<a href="#_T">-T</a>, 
     393<a href="#_TEST">-test</a>, 
     394<a href="#_V">-v</a>, 
     395<a href="#_V">-V</a>, 
    376396<a href="#_X">-X</a> 
    377397<hr> 
     
    402422<a href="#_M">-M</a>, 
    403423<a href="#_NAMES">-names</a>, 
    404 <a href="#_NOLIB">-nolib</a>, 
    405 <a href="#_NOLINK">-nolink</a>, 
    406 <a href="#_OBJ">-obj</a>, 
    407 <a href="#_R">-R</a>, 
    408 <a href="#_RDF">-RDF</a>, 
    409 <a href="#_SILENT">-silent</a>, 
    410 <a href="#_T">-T</a>, 
    411 <a href="#_TEST">-test</a>, 
    412 <a href="#_V">-V</a>, 
    413 <a href="#_V">-v</a>, 
     424<a href="#_NODEF">-nodef</a>, 
     425<a href="#_NOLIB">-nolib</a>, 
     426<a href="#_NOLINK">-nolink</a>, 
     427<a href="#_OBJ">-obj</a>, 
     428<a href="#_OD">-od</a>, 
     429<a href="#_R">-R</a>, 
     430<a href="#_RDF">-RDF</a>, 
     431<a href="#_SILENT">-silent</a>, 
     432<a href="#_T">-T</a>, 
     433<a href="#_TEST">-test</a>, 
     434<a href="#_V">-v</a>, 
     435<a href="#_V">-V</a>, 
    414436<a href="#_X">-X</a> 
    415437<hr> 
     
    441463<a href="#_M">-M</a>, 
    442464<a href="#_NAMES">-names</a>, 
    443 <a href="#_NOLIB">-nolib</a>, 
    444 <a href="#_NOLINK">-nolink</a>, 
    445 <a href="#_OBJ">-obj</a>, 
    446 <a href="#_R">-R</a>, 
    447 <a href="#_RDF">-RDF</a>, 
    448 <a href="#_SILENT">-silent</a>, 
    449 <a href="#_T">-T</a>, 
    450 <a href="#_TEST">-test</a>, 
    451 <a href="#_V">-V</a>, 
    452 <a href="#_V">-v</a>, 
     465<a href="#_NODEF">-nodef</a>, 
     466<a href="#_NOLIB">-nolib</a>, 
     467<a href="#_NOLINK">-nolink</a>, 
     468<a href="#_OBJ">-obj</a>, 
     469<a href="#_OD">-od</a>, 
     470<a href="#_R">-R</a>, 
     471<a href="#_RDF">-RDF</a>, 
     472<a href="#_SILENT">-silent</a>, 
     473<a href="#_T">-T</a>, 
     474<a href="#_TEST">-test</a>, 
     475<a href="#_V">-v</a>, 
     476<a href="#_V">-V</a>, 
    453477<a href="#_X">-X</a> 
    454478<hr> 
     
    479503<a href="#_M">-M</a>, 
    480504<a href="#_NAMES">-names</a>, 
    481 <a href="#_NOLIB">-nolib</a>, 
    482 <a href="#_NOLINK">-nolink</a>, 
    483 <a href="#_OBJ">-obj</a>, 
    484 <a href="#_R">-R</a>, 
    485 <a href="#_RDF">-RDF</a>, 
    486 <a href="#_SILENT">-silent</a>, 
    487 <a href="#_T">-T</a>, 
    488 <a href="#_TEST">-test</a>, 
    489 <a href="#_V">-V</a>, 
    490 <a href="#_V">-v</a>, 
     505<a href="#_NODEF">-nodef</a>, 
     506<a href="#_NOLIB">-nolib</a>, 
     507<a href="#_NOLINK">-nolink</a>, 
     508<a href="#_OBJ">-obj</a>, 
     509<a href="#_OD">-od</a>, 
     510<a href="#_R">-R</a>, 
     511<a href="#_RDF">-RDF</a>, 
     512<a href="#_SILENT">-silent</a>, 
     513<a href="#_T">-T</a>, 
     514<a href="#_TEST">-test</a>, 
     515<a href="#_V">-v</a>, 
     516<a href="#_V">-V</a>, 
    491517<a href="#_X">-X</a> 
    492518<hr> 
     
    519545<a href="#_LINK">-link</a>, 
    520546<a href="#_NAMES">-names</a>, 
    521 <a href="#_NOLIB">-nolib</a>, 
    522 <a href="#_NOLINK">-nolink</a>, 
    523 <a href="#_OBJ">-obj</a>, 
    524 <a href="#_R">-R</a>, 
    525 <a href="#_RDF">-RDF</a>, 
    526 <a href="#_SILENT">-silent</a>, 
    527 <a href="#_T">-T</a>, 
    528 <a href="#_TEST">-test</a>, 
    529 <a href="#_V">-V</a>, 
    530 <a href="#_V">-v</a>, 
     547<a href="#_NODEF">-nodef</a>, 
     548<a href="#_NOLIB">-nolib</a>, 
     549<a href="#_NOLINK">-nolink</a>, 
     550<a href="#_OBJ">-obj</a>, 
     551<a href="#_OD">-od</a>, 
     552<a href="#_R">-R</a>, 
     553<a href="#_RDF">-RDF</a>, 
     554<a href="#_SILENT">-silent</a>, 
     555<a href="#_T">-T</a>, 
     556<a href="#_TEST">-test</a>, 
     557<a href="#_V">-v</a>, 
     558<a href="#_V">-V</a>, 
    531559<a href="#_X">-X</a> 
    532560<hr> 
     
    550578<a href="#_LINK">-link</a>, 
    551579<a href="#_M">-M</a>, 
    552 <a href="#_NOLIB">-nolib</a>, 
    553 <a href="#_NOLINK">-nolink</a>, 
    554 <a href="#_OBJ">-obj</a>, 
    555 <a href="#_R">-R</a>, 
    556 <a href="#_RDF">-RDF</a>, 
    557 <a href="#_SILENT">-silent</a>, 
    558 <a href="#_T">-T</a>, 
    559 <a href="#_TEST">-test</a>, 
    560 <a href="#_V">-V</a>, 
    561 <a href="#_V">-v</a>, 
     580<a href="#_NODEF">-nodef</a>, 
     581<a href="#_NOLIB">-nolib</a>, 
     582<a href="#_NOLINK">-nolink</a>, 
     583<a href="#_OBJ">-obj</a>, 
     584<a href="#_OD">-od</a>, 
     585<a href="#_R">-R</a>, 
     586<a href="#_RDF">-RDF</a>, 
     587<a href="#_SILENT">-silent</a>, 
     588<a href="#_T">-T</a>, 
     589<a href="#_TEST">-test</a>, 
     590<a href="#_V">-v</a>, 
     591<a href="#_V">-V</a>, 
     592<a href="#_X">-X</a> 
     593<hr> 
     594<h4><br> 
     595<a href="index.htm#makedocTOC">Table of Contents</a></h4> 
     596<h2><a name="_NODEF">[<i>switch</i>]<br>-nodef</a> </h2> 
     597<h3>Prevent a Module Definition File being created.</h3> 
     598Category: <a href="#SWITCHES">Switches</a><br> 
     599<p><p>Normally, the utility will automatically create a Module Definition File 
     600for the linker. This will typically contain the EXETYPE command and any other 
     601 commands as specified in any pragma(/build_def) statements found in the source files.  
     602If you specify this switch, you will have to provide your own Module Definition 
     603File or its equivalent on the command line. 
     604<p>See Also:  
     605<a href="#_ALLOBJ">-allobj</a>, 
     606<a href="#_CFPATH">-CFPATH</a>, 
     607<a href="#_CLEANUP">-cleanup</a>, 
     608<a href="#_DCPATH">-DCPATH</a>, 
     609<a href="#_DLL">-dll</a>, 
     610<a href="#_FULL">-full</a>, 
     611<a href="#_GUI">-gui</a>, 
     612<a href="#_HELP">-help</a>, 
     613<a href="#_INFO">-info</a>, 
     614<a href="#_LIB">-lib</a>, 
     615<a href="#_LIBOPT">-LIBOPT</a>, 
     616<a href="#_LINK">-link</a>, 
     617<a href="#_M">-M</a>, 
     618<a href="#_NAMES">-names</a>, 
     619<a href="#_NOLIB">-nolib</a>, 
     620<a href="#_NOLINK">-nolink</a>, 
     621<a href="#_OBJ">-obj</a>, 
     622<a href="#_OD">-od</a>, 
     623<a href="#_R">-R</a>, 
     624<a href="#_RDF">-RDF</a>, 
     625<a href="#_SILENT">-silent</a>, 
     626<a href="#_T">-T</a>, 
     627<a href="#_TEST">-test</a>, 
     628<a href="#_V">-v</a>, 
     629<a href="#_V">-V</a>, 
    562630<a href="#_X">-X</a> 
    563631<hr> 
     
    588656<a href="#_M">-M</a>, 
    589657<a href="#_NAMES">-names</a>, 
    590 <a href="#_NOLINK">-nolink</a>, 
    591 <a href="#_OBJ">-obj</a>, 
    592 <a href="#_R">-R</a>, 
    593 <a href="#_RDF">-RDF</a>, 
    594 <a href="#_SILENT">-silent</a>, 
    595 <a href="#_T">-T</a>, 
    596 <a href="#_TEST">-test</a>, 
    597 <a href="#_V">-V</a>, 
    598 <a href="#_V">-v</a>, 
     658<a href="#_NODEF">-nodef</a>, 
     659<a href="#_NOLINK">-nolink</a>, 
     660<a href="#_OBJ">-obj</a>, 
     661<a href="#_OD">-od</a>, 
     662<a href="#_R">-R</a>, 
     663<a href="#_RDF">-RDF</a>, 
     664<a href="#_SILENT">-silent</a>, 
     665<a href="#_T">-T</a>, 
     666<a href="#_TEST">-test</a>, 
     667<a href="#_V">-v</a>, 
     668<a href="#_V">-V</a>, 
    599669<a href="#_X">-X</a> 
    600670<hr> 
     
    627697<a href="#_M">-M</a>, 
    628698<a href="#_NAMES">-names</a>, 
    629 <a href="#_NOLIB">-nolib</a>, 
    630 <a href="#_OBJ">-obj</a>, 
    631 <a href="#_R">-R</a>, 
    632 <a href="#_RDF">-RDF</a>, 
    633 <a href="#_SILENT">-silent</a>, 
    634 <a href="#_T">-T</a>, 
    635 <a href="#_TEST">-test</a>, 
    636 <a href="#_V">-V</a>, 
    637 <a href="#_V">-v</a>, 
     699<a href="#_NODEF">-nodef</a>, 
     700<a href="#_NOLIB">-nolib</a>, 
     701<a href="#_OBJ">-obj</a>, 
     702<a href="#_OD">-od</a>, 
     703<a href="#_R">-R</a>, 
     704<a href="#_RDF">-RDF</a>, 
     705<a href="#_SILENT">-silent</a>, 
     706<a href="#_T">-T</a>, 
     707<a href="#_TEST">-test</a>, 
     708<a href="#_V">-v</a>, 
     709<a href="#_V">-V</a>, 
    638710<a href="#_X">-X</a> 
    639711<hr> 
     
    662734<a href="#_M">-M</a>, 
    663735<a href="#_NAMES">-names</a>, 
    664 <a href="#_NOLIB">-nolib</a>, 
    665 <a href="#_NOLINK">-nolink</a>, 
    666 <a href="#_R">-R</a>, 
    667 <a href="#_RDF">-RDF</a>, 
    668 <a href="#_SILENT">-silent</a>, 
    669 <a href="#_T">-T</a>, 
    670 <a href="#_TEST">-test</a>, 
    671 <a href="#_V">-V</a>, 
    672 <a href="#_V">-v</a>, 
     736<a href="#_NODEF">-nodef</a>, 
     737<a href="#_NOLIB">-nolib</a>, 
     738<a href="#_NOLINK">-nolink</a>, 
     739<a href="#_OD">-od</a>, 
     740<a href="#_R">-R</a>, 
     741<a href="#_RDF">-RDF</a>, 
     742<a href="#_SILENT">-silent</a>, 
     743<a href="#_T">-T</a>, 
     744<a href="#_TEST">-test</a>, 
     745<a href="#_V">-v</a>, 
     746<a href="#_V">-V</a>, 
     747<a href="#_X">-X</a> 
     748<hr> 
     749<h4><br> 
     750<a href="index.htm#makedocTOC">Table of Contents</a></h4> 
     751<h2><a name="_OD">[<i>switch</i>]<br>-od</a> </h2> 
     752<h3>Nominates the temporary file directory.</h3> 
     753Category: <a href="#SWITCHES">Switches</a><br> 
     754<p><p>By default, the utility creates any work files in the same directory 
     755as the target file. You can use this switch to nominate an alternative 
     756location for these files. The directory is created if it doesn't exist. 
     757<p> 
     758For the DigitalMars compiler, this also specifies the top-level 
     759location where object files are created. By default, object files 
     760are created in the same directory as the corresponding source file. 
     761<p> 
     762Example: 
     763<pre> 
     764-odC:\temp\workarea 
     765</pre> 
     766<p>See Also:  
     767<a href="#_ALLOBJ">-allobj</a>, 
     768<a href="#_CFPATH">-CFPATH</a>, 
     769<a href="#_CLEANUP">-cleanup</a>, 
     770<a href="#_DCPATH">-DCPATH</a>, 
     771<a href="#_DLL">-dll</a>, 
     772<a href="#_FULL">-full</a>, 
     773<a href="#_GUI">-gui</a>, 
     774<a href="#_HELP">-help</a>, 
     775<a href="#_INFO">-info</a>, 
     776<a href="#_LIB">-lib</a>, 
     777<a href="#_LIBOPT">-LIBOPT</a>, 
     778<a href="#_LINK">-link</a>, 
     779<a href="#_M">-M</a>, 
     780<a href="#_NAMES">-names</a>, 
     781<a href="#_NODEF">-nodef</a>, 
     782<a href="#_NOLIB">-nolib</a>, 
     783<a href="#_NOLINK">-nolink</a>, 
     784<a href="#_OBJ">-obj</a>, 
     785<a href="#_R">-R</a>, 
     786<a href="#_RDF">-RDF</a>, 
     787<a href="#_SILENT">-silent</a>, 
     788<a href="#_T">-T</a>, 
     789<a href="#_TEST">-test</a>, 
     790<a href="#_V">-v</a>, 
     791<a href="#_V">-V</a>, 
    673792<a href="#_X">-X</a> 
    674793<hr> 
     
    730849<a href="#_M">-M</a>, 
    731850<a href="#_NAMES">-names</a>, 
    732 <a href="#_NOLIB">-nolib</a>, 
    733 <a href="#_NOLINK">-nolink</a>, 
    734 <a href="#_OBJ">-obj</a>, 
    735 <a href="#_RDF">-RDF</a>, 
    736 <a href="#_SILENT">-silent</a>, 
    737 <a href="#_T">-T</a>, 
    738 <a href="#_TEST">-test</a>, 
    739 <a href="#_V">-V</a>, 
    740 <a href="#_V">-v</a>, 
     851<a href="#_NODEF">-nodef</a>, 
     852<a href="#_NOLIB">-nolib</a>, 
     853<a href="#_NOLINK">-nolink</a>, 
     854<a href="#_OBJ">-obj</a>, 
     855<a href="#_OD">-od</a>, 
     856<a href="#_RDF">-RDF</a>, 
     857<a href="#_SILENT">-silent</a>, 
     858<a href="#_T">-T</a>, 
     859<a href="#_TEST">-test</a>, 
     860<a href="#_V">-v</a>, 
     861<a href="#_V">-V</a>, 
    741862<a href="#_X">-X</a> 
    742863<hr> 
     
    768889<a href="#_M">-M</a>, 
    769890<a href="#_NAMES">-names</a>, 
    770 <a href="#_NOLIB">-nolib</a>, 
    771 <a href="#_NOLINK">-nolink</a>, 
    772 <a href="#_OBJ">-obj</a>, 
    773 <a href="#_R">-R</a>, 
    774 <a href="#_SILENT">-silent</a>, 
    775 <a href="#_T">-T</a>, 
    776 <a href="#_TEST">-test</a>, 
    777 <a href="#_V">-V</a>, 
    778 <a href="#_V">-v</a>, 
     891<a href="#_NODEF">-nodef</a>, 
     892<a href="#_NOLIB">-nolib</a>, 
     893<a href="#_NOLINK">-nolink</a>, 
     894<a href="#_OBJ">-obj</a>, 
     895<a href="#_OD">-od</a>, 
     896<a href="#_R">-R</a>, 
     897<a href="#_SILENT">-silent</a>, 
     898<a href="#_T">-T</a>, 
     899<a href="#_TEST">-test</a>, 
     900<a href="#_V">-v</a>, 
     901<a href="#_V">-V</a>, 
    779902<a href="#_X">-X</a> 
    780903<hr> 
     
    801924<a href="#_M">-M</a>, 
    802925<a href="#_NAMES">-names</a>, 
    803 <a href="#_NOLIB">-nolib</a>, 
    804 <a href="#_NOLINK">-nolink</a>, 
    805 <a href="#_OBJ">-obj</a>, 
    806 <a href="#_R">-R</a>, 
    807 <a href="#_RDF">-RDF</a>, 
    808 <a href="#_T">-T</a>, 
    809 <a href="#_TEST">-test</a>, 
    810 <a href="#_V">-V</a>, 
    811 <a href="#_V">-v</a>, 
     926<a href="#_NODEF">-nodef</a>, 
     927<a href="#_NOLIB">-nolib</a>, 
     928<a href="#_NOLINK">-nolink</a>, 
     929<a href="#_OBJ">-obj</a>, 
     930<a href="#_OD">-od</a>, 
     931<a href="#_R">-R</a>, 
     932<a href="#_RDF">-RDF</a>, 
     933<a href="#_T">-T</a>, 
     934<a href="#_TEST">-test</a>, 
     935<a href="#_V">-v</a>, 
     936<a href="#_V">-V</a>, 
    812937<a href="#_X">-X</a> 
    813938<hr> 
     
    847972<a href="#_M">-M</a>, 
    848973<a href="#_NAMES">-names</a>, 
    849 <a href="#_NOLIB">-nolib</a>, 
    850 <a href="#_NOLINK">-nolink</a>, 
    851 <a href="#_OBJ">-obj</a>, 
    852 <a href="#_R">-R</a>, 
    853 <a href="#_RDF">-RDF</a>, 
    854 <a href="#_SILENT">-silent</a>, 
    855 <a href="#_TEST">-test</a>, 
    856 <a href="#_V">-V</a>, 
    857 <a href="#_V">-v</a>, 
     974<a href="#_NODEF">-nodef</a>, 
     975<a href="#_NOLIB">-nolib</a>, 
     976<a href="#_NOLINK">-nolink</a>, 
     977<a href="#_OBJ">-obj</a>, 
     978<a href="#_OD">-od</a>, 
     979<a href="#_R">-R</a>, 
     980<a href="#_RDF">-RDF</a>, 
     981<a href="#_SILENT">-silent</a>, 
     982<a href="#_TEST">-test</a>, 
     983<a href="#_V">-v</a>, 
     984<a href="#_V">-V</a>, 
    858985<a href="#_X">-X</a> 
    859986<hr> 
     
    8801007<a href="#_M">-M</a>, 
    8811008<a href="#_NAMES">-names</a>, 
    882 <a href="#_NOLIB">-nolib</a>, 
    883 <a href="#_NOLINK">-nolink</a>, 
    884 <a href="#_OBJ">-obj</a>, 
    885 <a href="#_R">-R</a>, 
    886 <a href="#_RDF">-RDF</a>, 
    887 <a href="#_SILENT">-silent</a>, 
    888 <a href="#_T">-T</a>, 
    889 <a href="#_V">-V</a>, 
    890 <a href="#_V">-v</a>, 
     1009<a href="#_NODEF">-nodef</a>, 
     1010<a href="#_NOLIB">-nolib</a>, 
     1011<a href="#_NOLINK">-nolink</a>, 
     1012<a href="#_OBJ">-obj</a>, 
     1013<a href="#_OD">-od</a>, 
     1014<a href="#_R">-R</a>, 
     1015<a href="#_RDF">-RDF</a>, 
     1016<a href="#_SILENT">-silent</a>, 
     1017<a href="#_T">-T</a>, 
     1018<a href="#_V">-v</a>, 
     1019<a href="#_V">-V</a>, 
     1020<a href="#_X">-X</a> 
     1021<hr> 
     1022<h4><br> 
     1023<a href="index.htm#makedocTOC">Table of Contents</a></h4> 
     1024<h2><a name="_V">[<i>switch</i>]<br>-v</a> </h2> 
     1025<h3> Set <em>verbose</em> mode on for both <em>build</em> and for the compiler</h3> 
     1026Category: <a href="#SWITCHES">Switches</a><br> 
     1027<p><p><p>See Also:  
     1028<a href="#_ALLOBJ">-allobj</a>, 
     1029<a href="#_CFPATH">-CFPATH</a>, 
     1030<a href="#_CLEANUP">-cleanup</a>, 
     1031<a href="#_DCPATH">-DCPATH</a>, 
     1032<a href="#_DLL">-dll</a>, 
     1033<a href="#_FULL">-full</a>, 
     1034<a href="#_GUI">-gui</a>, 
     1035<a href="#_HELP">-help</a>, 
     1036<a href="#_INFO">-info</a>, 
     1037<a href="#_LIB">-lib</a>, 
     1038<a href="#_LIBOPT">-LIBOPT</a>, 
     1039<a href="#_LINK">-link</a>, 
     1040<a href="#_M">-M</a>, 
     1041<a href="#_NAMES">-names</a>, 
     1042<a href="#_NODEF">-nodef</a>, 
     1043<a href="#_NOLIB">-nolib</a>, 
     1044<a href="#_NOLINK">-nolink</a>, 
     1045<a href="#_OBJ">-obj</a>, 
     1046<a href="#_OD">-od</a>, 
     1047<a href="#_R">-R</a>, 
     1048<a href="#_RDF">-RDF</a>, 
     1049<a href="#_SILENT">-silent</a>, 
     1050<a href="#_T">-T</a>, 
     1051<a href="#_TEST">-test</a>, 
     1052<a href="#_V">-V</a>, 
    8911053<a href="#_X">-X</a> 
    8921054<hr> 
     
    9111073<a href="#_M">-M</a>, 
    9121074<a href="#_NAMES">-names</a>, 
    913 <a href="#_NOLIB">-nolib</a>, 
    914 <a href="#_NOLINK">-nolink</a>, 
    915 <a href="#_OBJ">-obj</a>, 
    916 <a href="#_R">-R</a>, 
    917 <a href="#_RDF">-RDF</a>, 
    918 <a href="#_SILENT">-silent</a>, 
    919 <a href="#_T">-T</a>, 
    920 <a href="#_TEST">-test</a>, 
    921 <a href="#_V">-v</a>, 
    922 <a href="#_X">-X</a> 
    923 <hr> 
    924 <h4><br> 
    925 <a href="index.htm#makedocTOC">Table of Contents</a></h4> 
    926 <h2><a name="_V">[<i>switch</i>]<br>-v</a> </h2> 
    927 <h3> Set <em>verbose</em> mode on for both <em>build</em> and for the compiler</h3> 
    928 Category: <a href="#SWITCHES">Switches</a><br> 
    929 <p><p><p>See Also:  
    930 <a href="#_ALLOBJ">-allobj</a>, 
    931 <a href="#_CFPATH">-CFPATH</a>, 
    932 <a href="#_CLEANUP">-cleanup</a>, 
    933 <a href="#_DCPATH">-DCPATH</a>, 
    934 <a href="#_DLL">-dll</a>, 
    935 <a href="#_FULL">-full</a>, 
    936 <a href="#_GUI">-gui</a>, 
    937 <a href="#_HELP">-help</a>, 
    938 <a href="#_INFO">-info</a>, 
    939 <a href="#_LIB">-lib</a>, 
    940 <a href="#_LIBOPT">-LIBOPT</a>, 
    941 <a href="#_LINK">-link</a>, 
    942 <a href="#_M">-M</a>, 
    943 <a href="#_NAMES">-names</a>, 
    944 <a href="#_NOLIB">-nolib</a>, 
    945 <a href="#_NOLINK">-nolink</a>, 
    946 <a href="#_OBJ">-obj</a>, 
    947 <a href="#_R">-R</a>, 
    948 <a href="#_RDF">-RDF</a>, 
    949 <a href="#_SILENT">-silent</a>, 
    950 <a href="#_T">-T</a>, 
    951 <a href="#_TEST">-test</a>, 
    952 <a href="#_V">-V</a>, 
     1075<a href="#_NODEF">-nodef</a>, 
     1076<a href="#_NOLIB">-nolib</a>, 
     1077<a href="#_NOLINK">-nolink</a>, 
     1078<a href="#_OBJ">-obj</a>, 
     1079<a href="#_OD">-od</a>, 
     1080<a href="#_R">-R</a>, 
     1081<a href="#_RDF">-RDF</a>, 
     1082<a href="#_SILENT">-silent</a>, 
     1083<a href="#_T">-T</a>, 
     1084<a href="#_TEST">-test</a>, 
     1085<a href="#_V">-v</a>, 
    9531086<a href="#_X">-X</a> 
    9541087<hr> 
     
    9841117<a href="#_M">-M</a>, 
    9851118<a href="#_NAMES">-names</a>, 
    986 <a href="#_NOLIB">-nolib</a>, 
    987 <a href="#_NOLINK">-nolink</a>, 
    988 <a href="#_OBJ">-obj</a>, 
    989 <a href="#_R">-R</a>, 
    990 <a href="#_RDF">-RDF</a>, 
    991 <a href="#_SILENT">-silent</a>, 
    992 <a href="#_T">-T</a>, 
    993 <a href="#_TEST">-test</a>, 
    994 <a href="#_V">-V</a>, 
    995 <a href="#_V">-v</a> 
    996 <hr> 
     1119<a href="#_NODEF">-nodef</a>, 
     1120<a href="#_NOLIB">-nolib</a>, 
     1121<a href="#_NOLINK">-nolink</a>, 
     1122<a href="#_OBJ">-obj</a>, 
     1123<a href="#_OD">-od</a>, 
     1124<a href="#_R">-R</a>, 
     1125<a href="#_RDF">-RDF</a>, 
     1126<a href="#_SILENT">-silent</a>, 
     1127<a href="#_T">-T</a>, 
     1128<a href="#_TEST">-test</a>, 
     1129<a href="#_V">-v</a>, 
     1130<a href="#_V">-V</a> 
     1131<hr> 
  • trunk/Docs/TO_DO.htm

    r35 r36  
    22<head> 
    33<!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 
    4 <!-- on 2005/05/04 at 17h47m11 --> 
     4<!-- on 2005/05/07 at 22h40m00 --> 
    55<style>h4 {text-align: right}</style> 
    66<title></title> 
  • trunk/Docs/index.htm

    r35 r36  
    22<head> 
    33<!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 
    4 <!-- on 2005/05/04 at 17h47m11 --> 
     4<!-- on 2005/05/07 at 22h40m00 --> 
    55<style>h4 {text-align: right}</style> 
    66<title></title> 
     
    3232<tr><td><a href="COMMAND_LINE.htm#COMMAND_LINE">Command Line</a></td><td> The <em>build</em> utility supplies the source file and optional switches via the command line. 
    3333</td></tr> 
     34<tr><td><a href="CONFIGURATION_FILE.htm#CONFIGURATION_FILE">Configuration File</a></td><td>The utility configuration file is used to specify your default options for the utility. 
     35</td></tr> 
    3436<tr><td><a href="DLL_LIBRARIES.htm#DLL_LIBRARIES">DLL Libraries</a></td><td>How to create a DLL library using Build. 
    3537</td></tr> 
     
    6062<a href="SWITCHES.htm#_M">-M</a>  [<i><code>switch</code></i>] Identifies a module or a package to notice (not ignore)<br> 
    6163<a href="SWITCHES.htm#_NAMES">-names</a>  [<i><code>switch</code></i>] Displays the names of the files used in building the target.<br> 
     64<a href="SWITCHES.htm#_NODEF">-nodef</a>  [<i><code>switch</code></i>] Prevent a Module Definition File being created.<br> 
    6265<a href="SWITCHES.htm#_NOLIB">-nolib</a>  [<i><code>switch</code></i>] Ensures that the object files are not used to form a library.<br> 
    6366<a href="SWITCHES.htm#_NOLINK">-nolink</a>  [<i><code>switch</code></i>]  Ensures that the linker is not called.<br> 
    6467<a href="SWITCHES.htm#_OBJ">-obj</a>  [<i><code>switch</code></i>]  Shorthand for using both <a href="#_NOLINK">-nolink</a> and <a href="#_NOLIB">-nolib</a> switches.<br> 
     68<a href="SWITCHES.htm#_OD">-od</a>  [<i><code>switch</code></i>] Nominates the temporary file directory.<br> 
    6569<a href="SWITCHES.htm#_R">-R</a>  [<i><code>switch</code></i>] Determines if the compiler tools use a response file or not.<br> 
    6670<a href="SWITCHES.htm#_RDF">-RDF</a>  [<i><code>switch</code></i>]  Defines a file to override the default <a href="RULE_DEFINITION_FILE.htm#RULE_DEFINITION_FILE">Rule Definition File</a><br> 
     
    7680<a href="CHANGE_LOG.htm#CHANGE_LOG">Change Log</a> <br> 
    7781<a href="COMMAND_LINE.htm#COMMAND_LINE">Command Line</a> <br> 
     82<a href="CONFIGURATION_FILE.htm#CONFIGURATION_FILE">Configuration File</a> <br> 
    7883<a href="DLL_LIBRARIES.htm#DLL_LIBRARIES">DLL Libraries</a> <br> 
    7984<a href="PRAGMA.htm#INCLUDE">include</a>  [<i><code>pragma</code></i>] This identifies a required file which is not otherwise imported.<br> 
  • trunk/Source/build.d

    r35 r36  
    5353__ /info 
    5454__ A list of changes and fixes that have been made. 
     55__ 
     56__ /b"-- v2.07 -- 06/May/2005" 
     57__ <ul> 
     58__ /li ** /b ENH: New switch /i"-nodef" to prevent the utility from 
     59__ automatically creating a Module Definition File (.def) 
     60__ /li ** /b ENH: You can now specify default, and special, settings for 
     61__ the utility's command line. These are placed in a text configuration file called 
     62__ /b"build.cfg". The utility first looks in the same directory as the 
     63__ utility's executable for the configuration file. After processing any 
     64__ configuration file found there, it then looks in the same directory as 
     65__ the compiler for a configuration file (build.cfg) and processes it if 
     66__ found. 
     67__ /li ** /b ENH: To support special command line settings that may be 
     68__ specified in the utility's configuration file(s), you can indicate 
     69__ one or more setting groups on the command line. These take the format of 
     70__ +groupname. The configuration file(s) are scanned for special group settings 
     71__ after the default ones have been processed. 
     72__ /li ** /b ENH: To remove an earlier specified command line switch, you 
     73__ can prepend it with a hyphen. This new feature may be needed when command 
     74__ line switches can come from multiple sources (the original command line, 
     75__ utility response files, and utility configuration files), and you need 
     76__ to remove a switch that may have been provided by some other source. /n 
     77__ For example to negate an earlier "-unittest" switch you code add "--unittest" 
     78__ to the command line. 
     79__ /li ** /b ENH: New switch /i"-od" is used to nominate a directory for 
     80__ temporary files. For the DigitalMars compiler, this also is used as the location 
     81__ to create object files. 
     82__ </ul> 
    5583__ 
    5684__  /b"-- v2.06 -- 04/May/2005" 
     
    333361    version(Windows) { 
    334362        // OptLink Definition File 
    335         pragma (build_def, "VERSION 2.06"); 
     363        pragma (build_def, "VERSION 2.07"); 
    336364    } 
    337365} 
     
    422450        char[]     vVersionSwitch = "-version="; 
    423451        char[]     vKeepPathSwitch = "-op"; 
    424         char[]     vObjWritePathSwitch = "-od"; 
    425452        char[]     vOutFileSwitch = "-of"; 
    426453        char[]     vImportPathSwitch = "-I"; 
     
    456483    } 
    457484 
     485    char[]       vTemporaryPathSwitch = "-od"; 
    458486    char[]       vLibrarianPath = ""; 
    459487    char[]*      vDelayedValue = null; 
    460     char[]       vObjWritePath = ""; 
     488    char[]       vTemporaryPath = ""; 
    461489    bool         vTestRun = false; 
    462490    bool         vNoLink = false; 
     
    467495    bool         vNames = false; 
    468496    bool         vAllObjects = false; 
     497    bool         vNoDef = false; 
    469498    char[][]     vImportRoots; 
    470499    char[][]     vModulesToIgnore; 
     
    478507    char[]       vAppPath; 
    479508    char[]       vAppName; 
    480     char[]       vAppVersion = "2.06"; 
     509    char[]       vAppVersion = "2.07"; 
    481510    char[]       vTargetName;           // Output name from first file name. 
    482511    char[]       vPragmaTargetName;     // Output name from pragma. 
     
    484513    char[][]     vCmdLineFiles;         // List of source files from command line 
    485514    bool[char[]] vLinkFiles;            // List of non-source files from command line 
     515    char[][]     vCombinedArgs;         // All the args are gathered here prior to processing. 
    486516    char[][]     vBuildArgs;            // Arguments passed to build 
    487517    char[][]     vCompilerArgs;         // Arguments passed to compiler 
     
    503533 
    504534    alias util.bmscanner.BMScan!(char).BMScan bmfind; 
     535    alias util.bmscanner.BMScan!(char).BMScanElement bmfind_elem; 
    505536} 
    506537 
     
    534565        vUseResponseFile = false; 
    535566     } 
     567} 
     568 
     569 
     570//------------------------------------------------------- 
     571bool begins(char[] pString, char[] pSubString) 
     572//------------------------------------------------------- 
     573{ 
     574    if (pString.length < pSubString.length) 
     575        return false; 
     576    if (pSubString.length == 0) 
     577        return false; 
     578 
     579    if (pString[0..pSubString.length] == pSubString) 
     580        return true; 
     581    return false; 
    536582} 
    537583 
     
    613659    writefln("               ** The default is to use command line arguments"); } 
    614660 
     661    writefln("  -od<path>  Nominate the directory where temporary (work) files"); 
     662    writefln("             are to be created. By default they are created in"); 
     663    writefln("             the same directory as the target file."); 
    615664    writefln("  -X<module> Modules/Packages to ignore (eg. -Xmylib)"); 
    616665    writefln("  -M<module> Modules/Packages to notice (eg. -Mphobos)"); 
     
    622671    writefln("  -?        Same as -help, displays the full 'usage' help text."); 
    623672    writefln("  -silent   Avoids unnecessary messages being displayed."); 
    624     writefln("  -info      Displays the version and path of the Build application"); 
     673    writefln("  -info      Displays the version and path of the Build application."); 
     674    writefln("  -nodef    Prevents a Module Definition File from being created."); 
    625675    writefln("  [...]      All other options, objectfiles and libraries are"); 
    626676    writefln("              passed to the compiler"); 
     
    747797}; 
    748798 
     799//------------------------------------------------------- 
    749800Rule[] LoadRules() 
     801//------------------------------------------------------- 
    750802{ 
    751803    Rule[] lRules; 
     
    787839} 
    788840 
     841//------------------------------------------------------- 
    789842int ProcessExternal( ExternRef pRef) 
     843//------------------------------------------------------- 
    790844{ 
    791845    int lResult = -1; 
     
    10171071    } 
    10181072 
    1019     char[] lResponseFileName; 
     1073    char[] lDResponseFileName; 
     1074    char[] lLResponseFileName; 
     1075    char[] lDefName; 
    10201076    char[] lOutText; 
    10211077    char[] lCommand; 
     
    11171173    } 
    11181174 
    1119     if (vBuildDef.length > 0) { 
    1120         char[] lDefName; 
     1175    if ((vNoDef == false) && (vBuildDef.length > 0)) { 
    11211176 
    11221177        lDefName = ReplaceExtention(vTargetName, "def"); 
     1178        if (vTemporaryPath.length != 0) 
     1179        { 
     1180            lDefName = vTemporaryPath ~ std.path.getBaseName(lDefName); 
     1181        } 
    11231182        util.fileex.CreateTextFile(lDefName, vBuildDef); 
    11241183 
     
    11901249 
    11911250        if (vUseResponseFile) { 
    1192             lResponseFileName = ReplaceExtention(vTargetName, "rsp"); 
    1193             util.fileex.CreateTextFile(lResponseFileName,lOutText); 
    1194             lCommand = vCompilerPath ~ vCompiler ~ " @" ~ lResponseFileName; 
     1251            lDResponseFileName = ReplaceExtention(vTargetName, "rsp"); 
     1252            if (vTemporaryPath.length != 0) 
     1253            { 
     1254                lDResponseFileName = vTemporaryPath ~ std.path.getBaseName(lDResponseFileName); 
     1255            } 
     1256            util.fileex.CreateTextFile(lDResponseFileName,lOutText); 
     1257            lCommand = vCompilerPath ~ vCompiler ~ " @" ~ lDResponseFileName; 
    11951258        } 
    11961259        else 
     
    12631326 
    12641327        if (vUseResponseFile) { 
    1265             lResponseFileName = ReplaceExtention(vTargetName, "lsp"); 
    1266             util.fileex.CreateTextFile(lResponseFileName,lOutText); 
    1267             lCommand = vLibrarianPath ~ vLibrarian ~ " @" ~ lResponseFileName; 
     1328            lLResponseFileName = ReplaceExtention(vTargetName, "lsp"); 
     1329            if (vTemporaryPath.length != 0) 
     1330            { 
     1331                lLResponseFileName = vTemporaryPath ~ std.path.getBaseName(lLResponseFileName); 
     1332            } 
     1333            util.fileex.CreateTextFile(lLResponseFileName,lOutText); 
     1334            lCommand = vLibrarianPath ~ vLibrarian ~ " @" ~ lLResponseFileName; 
    12681335        } 
    12691336        else 
     
    12961363        } 
    12971364 
    1298         lHitList ~= ReplaceExtention(vTargetName, "rsp"); 
    1299         lHitList ~= ReplaceExtention(vTargetName, "lsp"); 
     1365        // Build's own temprary files. 
     1366        lHitList ~= lDResponseFileName; 
     1367        lHitList ~= lLResponseFileName; 
     1368        lHitList ~= lDefName; 
     1369 
     1370        // Possible ones created by compiler, linker, and librarian. 
    13001371        lHitList ~= ReplaceExtention(vTargetName, "map"); 
    1301         lHitList ~= ReplaceExtention(vTargetName, "def"); 
    13021372        lHitList ~= ReplaceExtention(vTargetName, "bak"); 
    13031373        lHitList ~= ReplaceExtention(vTargetName, "lst"); 
     
    13051375        foreach(char[] lFilename; lHitList) 
    13061376        { 
    1307             if (util.fileex.FileExists( lFilename )
     1377            if (lFilename.length > 0
    13081378            { 
    1309                 if (vVerbose) { 
    1310                     writefln("  removing %s", lFilename); 
    1311                 } 
    1312                 std.file.remove(lFilename); 
     1379                if (util.fileex.FileExists( lFilename ) ) 
     1380                { 
     1381                    if (vVerbose) { 
     1382                        writefln("  removing %s", lFilename); 
     1383                    } 
     1384                    std.file.remove(lFilename); 
     1385                } 
    13131386            } 
    13141387        } 
     
    14061479    static uint[ char[] ] lElementIdx; 
    14071480 
     1481    if (vNoDef == true) 
     1482        return; 
     1483 
    14081484    lLowerText = std.string.tolower(pText); 
    14091485 
     
    14781554                if (lSymName == "@P") 
    14791555                { 
    1480                     // Special symbol that refers to the configuration file's directory. 
     1556                    // Special symbol that refers to the DMD configuration file's directory. 
    14811557                    lSymName = (vConfigPath ? vConfigPath[0..length-1] : ""); 
     1558                } 
     1559                else if (lSymName == "@D") 
     1560                { 
     1561                    // Special symbol that refers to the compiler's file's directory. 
     1562                    lSymName = (vCompilerPath ? vCompilerPath[0..length-1] : ""); 
    14821563                } 
    14831564                else 
     
    16021683                } 
    16031684 
    1604                 version(DigitalMars) 
    1605                 { 
    1606                 if (util.str.IsLike(lSwitch,  std.utf.toUTF32(vObjWritePathSwitch ~ "*"))) 
     1685                if (util.str.IsLike(lSwitch,  std.utf.toUTF32(vTemporaryPathSwitch ~ "*"))) 
    16071686                { 
    16081687                    char[] lbRoot; 
    16091688 
    1610                     vObjWritePath = lSwitch[vObjWritePathSwitch.length .. $]; 
    1611                     if (vObjWritePath.length > 0 && vObjWritePath[$-1..$] != std.path.sep) 
    1612                         vObjWritePath ~= std.path.sep; 
    1613  
    1614                     lbRoot = AddRoot(vObjWritePath); 
    1615                     if (lbRoot.length > 0){ 
    1616                         if(vVerbose) { 
    1617                                 writefln("Added root from config file Object Write Path = %s",lbRoot); 
     1689                    vTemporaryPath = lSwitch[vTemporaryPathSwitch.length .. $]; 
     1690                    if (vTemporaryPath.length > 0 && vTemporaryPath[$-1..$] != std.path.sep) 
     1691                        vTemporaryPath ~= std.path.sep; 
     1692 
     1693                    version(DigitalMars) 
     1694                    { 
     1695                        lbRoot = AddRoot(vTemporaryPath); 
     1696                        if (lbRoot.length > 0){ 
     1697                            if(vVerbose) { 
     1698                                    writefln("Added root from config file Object Write Path = %s",lbRoot); 
     1699                            } 
     1700                            util.pathex.MakePath(lbRoot); 
    16181701                        } 
    1619                         util.pathex.MakePath(lbRoot); 
    16201702                    } 
    16211703 
    16221704                    vBuildArgs ~= lSwitch; 
    16231705                    // This one actually *is* passed thru. 
    1624                 } 
    16251706                } 
    16261707 
     
    17771858    if (pList.length > 0) { 
    17781859        if (pTitle.length > 0) 
    1779             writefln("%s",pTitle); 
     1860            writefln("\n%s",pTitle); 
    17801861 
    17811862        foreach(int lIndex, char[] lListEntry; pList) { 
     
    17911872    if (pList.length > 0) { 
    17921873        if (pTitle.length > 0) 
    1793             writefln("%s",pTitle); 
     1874            writefln("\n%s",pTitle); 
    17941875 
    17951876        foreach(int lIndex, ExternRef lListEntry; pList) 
     
    18051886 
    18061887// ------------------------------------------------ 
    1807 char[] GetObjWritePath() 
     1888char[] GetTemporaryPath() 
    18081889{ 
    1809     return vObjWritePath; 
     1890    return vTemporaryPath; 
    18101891} 
    18111892 
     
    19001981 
    19011982// ------------------------------------------- 
    1902 int main (char[][] args) 
     1983int main(char[][] pArgs) 
    19031984// ------------------------------------------- 
    19041985{ 
    19051986    int lBuildResult; 
    19061987    char[] lCompPath; 
     1988    bool lSetPath = false; 
    19071989 
    19081990    /* Set routine addresses in the Source module. This allows 
     
    19212003    source.IsActiveVersion  = &IsActiveVersion; 
    19222004    source.GetFullPathname  = &GetFullPathname; 
    1923     source.GetObjWritePath  = &GetObjWritePath; 
     2005    source.GetObjWritePath  = &GetTemporaryPath; 
    19242006 
    19252007    // Scan the PATH env symbol to locate the D compiler. 
     
    19342016    } 
    19352017 
     2018    if (vCompilerPath.length == 0) 
     2019    { 
     2020        vCompilerPath = util.pathex.GetInitCurDir; 
     2021        lSetPath = true; 
     2022    } 
     2023 
    19362024    // Strip off application's path from arglist. 
    1937     vAppPath=args[0]; 
     2025    vAppPath=pArgs[0]; 
    19382026    vAppName=getBaseName(vAppPath); 
    19392027    version (Windows) 
     
    19472035    } 
    19482036 
    1949     args=args[1..args.length]; 
    1950     if (args.length == 0) { 
    1951         // No other args so show usage message. 
     2037    pArgs=pArgs[1..pArgs.length]; 
     2038    if (pArgs.length == 0) { 
     2039        // No other arguments so show usage message. 
    19522040        DisplayUsage (); 
    19532041        return 0; 
     
    19552043    else { 
    19562044    SetKnownVersions(); 
    1957     foreach(char[] arg; args) { 
    1958         ProcessCmdLineArg( arg, true); // Just scan for verbose option first. 
    1959     } 
     2045 
     2046    GatherArgs( pArgs ); 
    19602047 
    19612048    if (vVerbose){ 
    19622049        writefln("*** build v%s (build %d)***", vAppVersion, build_bn.auto_build_number); 
    19632050    } 
    1964     foreach(char[] arg; args) { 
    1965         ProcessCmdLineArg( arg ); 
     2051 
     2052    foreach(char[] lArg; vCombinedArgs) { 
     2053        ProcessCmdLineArg( lArg ); 
    19662054    } 
    19672055 
     
    19732061        writefln("Current Dir '%s'", util.pathex.GetInitCurDir()); 
    19742062 
    1975     if (vCompilerPath.length == 0
     2063    if (lSetPath
    19762064    { 
    1977         vCompilerPath = util.pathex.GetInitCurDir; 
    19782065        if (vVerbose) 
    19792066        { 
     
    20702157        if(vVerbose) { 
    20712158            writefln(""); 
    2072             DisplayItems(vBuildArgs,     "\nbuild args: ..............."); 
    2073             DisplayItems(vCompilerArgs,  "\ncompiler args: ................"); 
    2074             DisplayItems(vCmdLineFiles,  "\ncommand line files: ..............."); 
     2159            DisplayItems(vBuildArgs,      "build args: ..............."); 
     2160            DisplayItems(vCompilerArgs,  "compiler args: ................"); 
     2161            DisplayItems(vCmdLineFiles,  "command line files: ..............."); 
    20752162            DisplayItems(Source.SourceIndex.keys, 
    2076                                          "\ndeclared source files: ..............."); 
    2077             DisplayItems(vLinkFiles.keys,"\nlink files: ..............."); 
    2078             DisplayItems(vExternals,"\nexternally built files: ..............."); 
    2079             DisplayItems(vImportRoots,   "\nimport roots: ................."); 
    2080             DisplayItems(vModulesToIgnore,"\nignored packages: ................."); 
    2081             DisplayItems(vModulesToNotice,"\nnoticed package: ................."); 
     2163                                          "declared source files: ..............."); 
     2164            DisplayItems(vLinkFiles.keys, "link files: ..............."); 
     2165            DisplayItems(vExternals,      "externally built files: ..............."); 
     2166            DisplayItems(vImportRoots,    "import roots: ................."); 
     2167            DisplayItems(vModulesToIgnore,"ignored packages: ................."); 
     2168            DisplayItems(vModulesToNotice,"noticed package: ................."); 
    20822169        } 
    20832170 
     
    20882175} 
    20892176 
    2090 void ProcessResponseFile(char[] pArg, bool pPhase, bool pVerbose) 
     2177void ProcessResponseFile(char[] pArg, bool pVerbose) 
    20912178{ 
    20922179    // A response file is being used. 
     
    21182205        } 
    21192206 
    2120         lArg = std.string.stripr(lArg); 
     2207        lArg = std.string.strip(lArg); 
    21212208        if (lArg.length > 1){ 
    21222209            if (pVerbose) 
    21232210                writefln("Response file arg: %s", lArg); 
    2124             ProcessCmdLineArg( lArg, pPhase ); 
    2125         } 
    2126     } 
    2127 } 
    2128  
    2129 void ProcessCmdLineArg( char[] pArg, bool pPhase = false
     2211            GatherOneArg( lArg ); 
     2212        } 
     2213    } 
     2214} 
     2215 
     2216void ProcessCmdLineArg( char[] pArg
    21302217{ 
    21312218    char[] lNewPath; 
    21322219 
    2133     if (pPhase == true) 
    2134     { 
    2135         if( pArg == "-v" ) { 
    2136             vVerbose = true; 
    2137             source.mVerboseMode = true; 
    2138  
    2139         } else if( pArg == "-V" ) { 
    2140             vVerbose = true; 
    2141             source.mVerboseMode = true; 
    2142  
    2143         } else if (pArg[0] == '@'){ 
    2144             ProcessResponseFile(pArg, pPhase, false); 
    2145         } 
    2146  
    2147     } else { 
    2148  
    2149         if(pArg.length>9) { 
    2150             if(util.str.IsLike(pArg, vVersionSwitch ~ "*")) { 
    2151                 char[] lVersionString; 
    2152  
    2153                 lVersionString=pArg [9 .. pArg.length]; 
    2154                 if (std.ctype.isdigit (lVersionString [0])) { 
    2155                     // Note that even though we capture this here, 
    2156                     // version levels are not yet implemented in the 
    2157                     // source scanner. 
    2158                    vVersionLevel = atoi (lVersionString); 
    2159                 } else { 
    2160                    vActiveVersions [lVersionString] = true; 
    2161                 } 
     2220    if(pArg.length>9) { 
     2221        if(util.str.IsLike(pArg, vVersionSwitch ~ "*")) { 
     2222            char[] lVersionString; 
     2223 
     2224            lVersionString=pArg [9 .. pArg.length]; 
     2225            if (std.ctype.isdigit (lVersionString [0])) { 
     2226                // Note that even though we capture this here, 
     2227                // version levels are not yet implemented in the 
     2228                // source scanner. 
     2229               vVersionLevel = atoi (lVersionString); 
     2230            } else { 
     2231               vActiveVersions [lVersionString] = true; 
    21622232            } 
    21632233        } 
    2164  
    2165  
    2166  
    2167         switch(pArg) { 
    2168             case "-full": 
    2169                 vForceCompile = true; 
    2170                 vBuildArgs ~= pArg; 
    2171                 // Not passed thru. 
    2172                 break; 
    2173  
    2174             case "-link": 
    2175                 Source.WasMainFound = true; 
    2176                 vBuildArgs ~= pArg; 
    2177                 // Not passed thru. 
    2178                 break; 
    2179  
    2180             case "-nolink": 
    2181                 vNoLink = true; 
    2182                 vBuildArgs ~= pArg; 
    2183                 // Not passed thru. 
    2184                 break; 
    2185  
    2186             case "-lib": 
    2187                 vLibraryAction = LibOpt.Build; 
    2188                 vBuildArgs ~= pArg; 
    2189                 // Not passed thru. 
    2190                 break; 
    2191  
    2192             case "-nolib": 
    2193                 vLibraryAction = LibOpt.DontBuild; 
    2194                 vBuildArgs ~= pArg; 
    2195                 // Not passed thru. 
    2196                 break; 
    2197  
    2198             case "-obj": 
    2199                 vLibraryAction = LibOpt.DontBuild; 
    2200                 vNoLink = true; 
    2201                 vBuildArgs ~= pArg; 
    2202                 // Not passed thru. 
    2203                 break; 
    2204  
    2205             case "-nounittest": 
    2206                 // Not passed thru. Deprecated switch is now ignored. 
    2207                 if (vSilent == false) 
    2208                     writefln("Note: '-nounittest' ignored. This switch is no longer used."); 
    2209                 break; 
    2210  
    2211             case "-info": 
    2212                 DisplayUsage(false); 
    2213                 vBuildArgs ~= pArg; 
    2214                 // Not passed thru. 
    2215                 break; 
    2216  
    2217             case "-silent": 
    2218                 vSilent = true; 
    2219                 vBuildArgs ~= pArg; 
    2220                 // Not passed thru. 
    2221                 break; 
    2222  
    2223             case "-help": 
    2224             case "-h": 
    2225             case "-?": 
    2226                 DisplayUsage(); 
    2227                 vBuildArgs ~= pArg; 
    2228                 // Not passed thru. 
    2229                 break; 
    2230  
    2231             case "-allobj": 
    2232                 vAllObjects = true; 
    2233                 vBuildArgs ~= pArg; 
    2234                 // Not passed thru. 
    2235                 break; 
    2236  
    2237             case "-test": 
    2238                 vTestRun = true; 
    2239                 vBuildArgs ~= pArg; 
    2240                 // Not passed thru. 
    2241                 break; 
    2242  
    2243             case "-cleanup": 
    2244                 // drop through ... 
    2245             case "-clean": 
    2246                 vCleanup = true; 
    2247                 vBuildArgs ~= pArg; 
    2248                 // Not passed thru. 
    2249                 break; 
    2250  
    2251             case "-V": /* we need verbose status earlier */ 
    2252                 vBuildArgs ~= pArg; 
    2253                 // Not passed thru. 
    2254                 break; 
    2255  
    2256             case "-names": 
    2257                 vBuildArgs ~= pArg; 
    2258                 vNames = true; 
    2259                 // Not passed thru. 
    2260                 break; 
    2261  
    2262             default: 
    2263                 if (pArg.length > 0) 
    2264                 { 
    2265                 if (pArg[0] == '-') { 
    2266                     // Test for Librarian options. 
    2267                     if (util.str.IsLike(pArg, cast(dchar[])"-LIBOPT*")) 
    2268                     { 
    2269                         vLibrarianOpts ~= " " ~ pArg[7..$].dup; 
    2270                         vBuildArgs ~= pArg; 
    2271                         break; 
    2272  
    2273                     } 
    2274  
    2275                     // Test for alternate install locations. 
    2276                     if (util.str.IsLike(pArg, cast(dchar[])"-DCPATH*")) 
    2277                     { 
    2278                         lNewPath = pArg[7..length].dup; 
    2279                         if (vCompilerPath == vConfigPath) 
    2280                         { 
    2281                             if (vVerbose) 
    2282                                 writefln("CFPATH was %s now %s", vConfigPath, lNewPath); 
    2283                             vConfigPath = lNewPath; 
    2284                         } 
    2285                         if (vVerbose) 
    2286                             writefln("DCPATH was %s now %s", vCompilerPath, lNewPath); 
    2287                         vCompilerPath = lNewPath; 
    2288                         vBuildArgs ~= pArg; 
    2289                         break; 
    2290  
    2291                     } 
    2292  
    2293                     if (util.str.IsLike(pArg,  cast(dchar[])"-CFPATH*")) 
     2234    } 
     2235 
     2236 
     2237 
     2238    switch(pArg) { 
     2239        case "-full": 
     2240            vForceCompile = true; 
     2241            vBuildArgs ~= pArg; 
     2242            // Not passed thru. 
     2243            break; 
     2244 
     2245        case "-link": 
     2246            Source.WasMainFound = true; 
     2247            vBuildArgs ~= pArg; 
     2248            // Not passed thru. 
     2249            break; 
     2250 
     2251        case "-nolink": 
     2252            vNoLink = true; 
     2253            vBuildArgs ~= pArg; 
     2254            // Not passed thru. 
     2255            break; 
     2256 
     2257        case "-lib": 
     2258            vLibraryAction = LibOpt.Build; 
     2259            vBuildArgs ~= pArg; 
     2260            // Not passed thru. 
     2261            break; 
     2262 
     2263        case "-nolib": 
     2264            vLibraryAction = LibOpt.DontBuild; 
     2265            vBuildArgs ~= pArg; 
     2266            // Not passed thru. 
     2267            break; 
     2268 
     2269        case "-obj": 
     2270            vLibraryAction = LibOpt.DontBuild; 
     2271            vNoLink = true; 
     2272            vBuildArgs ~= pArg; 
     2273            // Not passed thru. 
     2274            break; 
     2275 
     2276        case "-nounittest": 
     2277            // Not passed thru. Deprecated switch is now ignored. 
     2278            if (vSilent == false) 
     2279                writefln("Note: '-nounittest' ignored. This switch is no longer used."); 
     2280            break; 
     2281 
     2282        case "-info": 
     2283            DisplayUsage(false); 
     2284            vBuildArgs ~= pArg; 
     2285            // Not passed thru. 
     2286            break; 
     2287 
     2288        case "-silent": 
     2289            vSilent = true; 
     2290            vBuildArgs ~= pArg; 
     2291            // Not passed thru. 
     2292            break; 
     2293 
     2294        case "-nodef": 
     2295            vNoDef = true; 
     2296            vBuildArgs ~= pArg; 
     2297            // Not passed thru. 
     2298            break; 
     2299 
     2300        case "-help": 
     2301        case "-h": 
     2302        case "-?": 
     2303            DisplayUsage(); 
     2304            vBuildArgs ~= pArg; 
     2305            // Not passed thru. 
     2306            break; 
     2307 
     2308        case "-allobj": 
     2309            vAllObjects = true; 
     2310            vBuildArgs ~= pArg; 
     2311            // Not passed thru. 
     2312            break; 
     2313 
     2314        case "-test": 
     2315            vTestRun = true; 
     2316            vBuildArgs ~= pArg; 
     2317            // Not passed thru. 
     2318            break; 
     2319 
     2320        case "-cleanup": 
     2321            // drop through ... 
     2322        case "-clean": 
     2323            vCleanup = true; 
     2324            vBuildArgs ~= pArg; 
     2325            // Not passed thru. 
     2326            break; 
     2327 
     2328        case "-V": /* we need verbose status earlier */ 
     2329            vBuildArgs ~= pArg; 
     2330            // Not passed thru. 
     2331            break; 
     2332 
     2333        case "-names": 
     2334            vBuildArgs ~= pArg; 
     2335            vNames = true; 
     2336            // Not passed thru. 
     2337            break; 
     2338 
     2339        default: 
     2340            if (pArg.length > 0) 
     2341            { 
     2342            if (pArg[0] == '-') { 
     2343                // Test for Librarian options. 
     2344                if (util.str.IsLike(pArg, cast(dchar[])"-LIBOPT*")) 
     2345                { 
     2346                    vLibrarianOpts ~= " " ~ pArg[7..$].dup; 
     2347                    vBuildArgs ~= pArg; 
     2348                    break; 
     2349 
     2350                } 
     2351 
     2352                // Test for alternate install locations. 
     2353                if (util.str.IsLike(pArg, cast(dchar[])"-DCPATH*")) 
     2354                { 
     2355                    lNewPath = pArg[7..length].dup; 
     2356                    if (vCompilerPath == vConfigPath) 
    22942357                    { 
    22952358                        if (vVerbose) 
    2296                             writefln("CFPATH was %s now %s", vConfigPath, pArg[7..length]); 
    2297                         vConfigPath = pArg[7..length].dup; 
    2298                         vBuildArgs ~= pArg; 
    2299                         break; 
    2300  
     2359                            writefln("CFPATH was %s now %s", vConfigPath, lNewPath); 
     2360                        vConfigPath = lNewPath; 
    23012361                    } 
    2302  
    2303                     if (util.str.IsLike(pArg,  cast(dchar[])"-RDF*")) 
     2362                    if (vVerbose) 
     2363                        writefln("DCPATH was %s now %s", vCompilerPath, lNewPath); 
     2364                    vCompilerPath = lNewPath; 
     2365                    vBuildArgs ~= pArg; 
     2366                    break; 
     2367 
     2368                } 
     2369 
     2370                if (util.str.IsLike(pArg,  cast(dchar[])"-CFPATH*")) 
     2371                { 
     2372                    if (vVerbose) 
     2373                        writefln("CFPATH was %s now %s", vConfigPath, pArg[7..length]); 
     2374                    vConfigPath = pArg[7..length].dup; 
     2375                    vBuildArgs ~= pArg; 
     2376                    break; 
     2377 
     2378                } 
     2379 
     2380                if (util.str.IsLike(pArg,  cast(dchar[])"-RDF*")) 
     2381                { 
     2382                    if (vVerbose) 
     2383                        writefln("RDF was %s now %s", vRDFName, pArg[4..$]); 
     2384                    vRDFName = pArg[4..$].dup; 
     2385                    vBuildArgs ~= pArg; 
     2386                    break; 
     2387 
     2388                } 
     2389 
     2390                if (util.str.IsLike(pArg,  std.utf.toUTF32(vImportPathSwitch ~ "*"))) 
     2391                { 
     2392                    char [] lRoot; 
     2393                    foreach(char[] lCmdRoot; std.string.split(pArg[2..$], ";")) 
    23042394                    { 
    2305                         if (vVerbose) 
    2306                             writefln("RDF was %s now %s", vRDFName, pArg[4..$]); 
    2307                         vRDFName = pArg[4..$].dup; 
    2308                         vBuildArgs ~= pArg; 
    2309                         break; 
    2310  
    2311                     } 
    2312  
    2313                     if (util.str.IsLike(pArg,  std.utf.toUTF32(vImportPathSwitch ~ "*"))) 
    2314                     { 
    2315                         char [] lRoot; 
    2316                         lRoot = AddRoot(pArg[2..$]); 
     2395                        lRoot = AddRoot(lCmdRoot); 
    23172396                        if (lRoot.length > 0){ 
    23182397                            version(Posix) 
     
    23242403                            } 
    23252404                        } 
    2326                         break; 
    23272405                    } 
    2328  
    2329                     // Special check for Object Write Path 
    2330                     version(DigitalMars) 
     2406                    break; 
     2407                } 
     2408 
     2409                // Special check for Object Write Path 
     2410                version(DigitalMars) 
     2411                { 
     2412                if (util.str.IsLike(pArg,  std.utf.toUTF32(vTemporaryPathSwitch ~ "*"))) 
     2413                { 
     2414                    char[] lRoot; 
     2415 
     2416                    vTemporaryPath = pArg[vTemporaryPathSwitch.length .. $]; 
     2417                    if (vTemporaryPath.length > 0 && vTemporaryPath[$-1..$] != std.path.sep) 
     2418                        vTemporaryPath ~= std.path.sep; 
     2419 
     2420                    lRoot = AddRoot(vTemporaryPath); 
     2421                    if (lRoot.length > 0){ 
     2422                        if(vVerbose) { 
     2423                                writefln("Added root from Object Write Path = %s",lRoot); 
     2424                        } 
     2425                        util.pathex.MakePath(lRoot); 
     2426                    } 
     2427 
     2428                    vBuildArgs ~= pArg; 
     2429                    // This one actually *is* passed thru. 
     2430                } 
     2431                } 
     2432 
     2433                if (util.str.IsLike(pArg,  cast(dchar[])"-X*")) 
     2434                { 
     2435                    // Modules to ignore (eg. -Xmylib) 
     2436                    vModulesToIgnore ~= pArg[2..$]; 
     2437                    vBuildArgs ~= pArg; 
     2438                    break; 
     2439                } 
     2440 
     2441                if (util.str.IsLike(pArg,  cast(dchar[])"-M*")) 
     2442                { 
     2443                    // Modules to notice (eg. -Mphobos) 
     2444                    vModulesToNotice ~= pArg[2..$]; 
     2445                    vBuildArgs ~= pArg; 
     2446                    break; 
     2447                } 
     2448 
     2449                if (util.str.IsLike(pArg,  cast(dchar[])"-T*")) 
     2450                { 
     2451                    // Target name (eg. -Ttestapp) 
     2452                    vCommandTargetName = pArg[2..$]; 
     2453                    vBuildArgs ~= pArg; 
     2454                    break; 
     2455                } 
     2456 
     2457                version(DigitalMars) 
     2458                { 
     2459                if (util.str.IsLike(pArg,  (vOutFileSwitch ~ "*"))) 
     2460                { 
     2461                    // Target name (eg. -oftestapp) 
     2462                    vCommandTargetName = pArg[vOutFileSwitch.length .. $]; 
     2463                    vBuildArgs ~= pArg; 
     2464                    break; 
     2465                } 
     2466                } 
     2467 
     2468                version(GNU) 
     2469                { 
     2470                if (pArg == vOutFileSwitch) 
     2471                { 
     2472                    // Target name (eg. -o testapp) 
     2473                    vDelayedValue = &vCommandTargetName; 
     2474                    vBuildArgs ~= pArg; 
     2475                    break; 
     2476                } 
     2477                } 
     2478 
     2479                if (util.str.IsLike(pArg,  cast(dchar[])"-R*")) 
     2480                { 
     2481                    // Response file usage (eg. -Ry) 
     2482                    if (pArg.length == 2) 
     2483                        vUseResponseFile = (vUseResponseFile ? false : true); 
     2484 
     2485                    else if (pArg[2] == 'y') 
     2486                        vUseResponseFile = true; 
     2487 
     2488                    else 
     2489                        vUseResponseFile = false; 
     2490 
     2491                    vBuildArgs ~= pArg; 
     2492                    break; 
     2493                } 
     2494 
     2495                version(Windows) { 
     2496                    if (util.str.IsLike(pArg,  cast(dchar[])"-gui*")) 
    23312497                    { 
    2332                     if (util.str.IsLike(pArg,  std.utf.toUTF32(vObjWritePathSwitch ~ "*"))) 
     2498                            Source.WasMainGUI = true; 
     2499                            vBuildArgs ~= pArg; 
     2500                            if (pArg.length == 4) 
     2501                                break; 
     2502                            if (pArg[4] == ':') 
     2503                                vWinVer = pArg[5..length]; 
     2504                            else 
     2505                                vWinVer = pArg[4..length]; 
     2506                            break; 
     2507                    } 
     2508                    if (pArg == "-dll") 
    23332509                    { 
    2334                         char[] lRoot; 
    2335  
    2336                         vObjWritePath = pArg[vObjWritePathSwitch.length .. $]; 
    2337                         if (vObjWritePath.length > 0 && vObjWritePath[$-1..$] != std.path.sep) 
    2338                             vObjWritePath ~= std.path.sep; 
    2339  
    2340                         lRoot = AddRoot(vObjWritePath); 
    2341                         if (lRoot.length > 0){ 
    2342                             if(vVerbose) { 
    2343                                     writefln("Added root from Object Write Path = %s",lRoot); 
    2344                             } 
    2345                             util.pathex.MakePath(lRoot); 
    2346                         } 
    2347  
    2348                         vBuildArgs ~= pArg; 
    2349                         // This one actually *is* passed thru. 
     2510                            Source.WasMainDLL = true; 
     2511                            vBuildArgs ~= pArg; 
     2512                            break; 
    23502513                    } 
    2351                     } 
    2352  
    2353                     if (util.str.IsLike(pArg,  cast(dchar[])"-X*")) 
    2354                     { 
    2355                         // Modules to ignore (eg. -Xmylib) 
    2356                         vModulesToIgnore ~= pArg[2..$]; 
    2357                         vBuildArgs ~= pArg; 
    2358                         break; 
    2359                     } 
    2360  
    2361                     if (util.str.IsLike(pArg,  cast(dchar[])"-M*")) 
    2362                     { 
    2363                         // Modules to notice (eg. -Mphobos) 
    2364                         vModulesToNotice ~= pArg[2..$]; 
    2365                         vBuildArgs ~= pArg; 
    2366                         break; 
    2367                     } 
    2368  
    2369                     if (util.str.IsLike(pArg,  cast(dchar[])"-T*")) 
    2370                     { 
    2371                         // Target name (eg. -Ttestapp) 
    2372                         vCommandTargetName = pArg[2..$]; 
    2373                         vBuildArgs ~= pArg; 
    2374                         break; 
    2375                     } 
    2376  
    2377                     version(DigitalMars) 
    2378                     { 
    2379                     if (util.str.IsLike(pArg,  (vOutFileSwitch ~ "*"))) 
    2380                     { 
    2381                         // Target name (eg. -oftestapp) 
    2382                         vCommandTargetName = pArg[vOutFileSwitch.length .. $]; 
    2383                         vBuildArgs ~= pArg; 
    2384                         break; 
    2385                     } 
    2386                     } 
    2387  
    2388                     version(GNU) 
    2389                     { 
    2390                     if (pArg == vOutFileSwitch) 
    2391                     { 
    2392                         // Target name (eg. -o testapp) 
    2393                         vDelayedValue = &vCommandTargetName; 
    2394                         vBuildArgs ~= pArg; 
    2395                         break; 
    2396                     } 
    2397                     } 
    2398  
    2399                     if (util.str.IsLike(pArg,  cast(dchar[])"-R*")) 
    2400                     { 
    2401                         // Response file usage (eg. -Ry) 
    2402                         if (pArg.length == 2) 
    2403                             vUseResponseFile = (vUseResponseFile ? false : true); 
    2404  
    2405                         else if (pArg[2] == 'y') 
    2406                             vUseResponseFile = true; 
    2407  
    2408                         else 
    2409                             vUseResponseFile = false; 
    2410  
    2411                         vBuildArgs ~= pArg; 
    2412                         break; 
    2413                     } 
    2414  
    2415                     version(Windows) { 
    2416                         if (util.str.IsLike(pArg,  cast(dchar[])"-gui*")) 
    2417                         { 
    2418                                 Source.WasMainGUI = true; 
    2419                                 vBuildArgs ~= pArg; 
    2420                                 if (pArg.length == 4) 
    2421                                     break; 
    2422                                 if (pArg[4] == ':') 
    2423                                     vWinVer = pArg[5..length]; 
    2424                                 else 
    2425                                     vWinVer = pArg[4..length]; 
    2426                                 break; 
    2427                         } 
    2428                         if (pArg == "-dll") 
    2429                         { 
    2430                                 Source.WasMainDLL = true; 
    2431                                 vBuildArgs ~= pArg; 
    2432                                 break; 
    2433                         } 
    2434                     } 
    2435  
    2436                     vCompilerArgs ~= pArg; 
    2437  
    2438                 } else if (pArg[0] == '@'){ 
    2439                     ProcessResponseFile(pArg, pPhase, vVerbose); 
    2440  
    2441                 } else { 
    2442  
    2443                     if (vDelayedValue != null) 
    2444                     { 
    2445                         // Used when an switch needs the subsequent arg to 
    2446                         // be its value. 
    2447                         *vDelayedValue = pArg; 
    2448                         vDelayedValue = null; 
    2449                         vBuildArgs ~= pArg; 
    2450                         break; 
    2451                     } 
    2452  
    2453                     switch(std.path.getExt(pArg)) { 
    2454                        case "": 
    2455                            pArg ~= "." ~ kSrcExtention; 
    2456                            vCmdLineFiles ~= pArg; 
    2457                            break; 
    2458  
    2459                        case kSrcExtention: 
    2460                            vCmdLineFiles ~= pArg; 
    2461                            break; 
    2462  
    2463                        default: 
    2464                            AddLink(GetFullPathname(pArg)); 
    2465                     } 
    2466                     if(vTargetName is null) { 
    2467                        vTargetName = pArg; 
    2468                     } 
    2469                 } 
     2514                } 
     2515 
     2516                vCompilerArgs ~= pArg; 
     2517 
     2518            } else { 
     2519 
     2520                if (vDelayedValue != null) 
     2521                { 
     2522                    // Used when an switch needs the subsequent arg to 
     2523                    // be its value. 
     2524                    *vDelayedValue = pArg; 
     2525                    vDelayedValue = null; 
     2526                    vBuildArgs ~= pArg; 
     2527                    break; 
     2528                } 
     2529 
     2530                switch(std.path.getExt(pArg)) { 
     2531                   case "": 
     2532                       pArg ~= "." ~ kSrcExtention; 
     2533                       vCmdLineFiles ~= pArg; 
     2534                       break; 
     2535 
     2536                   case kSrcExtention: 
     2537                       vCmdLineFiles ~= pArg; 
     2538                       break; 
     2539 
     2540                   default: 
     2541                       AddLink(GetFullPathname(pArg)); 
     2542                } 
     2543                if(vTargetName is null) { 
     2544                   vTargetName = pArg; 
     2545                } 
     2546            } 
     2547            break; 
     2548        } 
     2549    } 
     2550
     2551 
     2552void GatherOneArg( char[] pArg ) 
     2553
     2554    static bool[char[]] lKnownArgs;  
     2555     
     2556    pArg = std.string.strip(pArg); 
     2557    if (pArg.length == 0) 
     2558        return; 
     2559 
     2560    if ((pArg == "-V") || (pArg == "-v")) 
     2561        vVerbose = true; 
     2562 
     2563    if ( pArg.length >= 2 && pArg[0..2] == "--") 
     2564    {   // Need to remove an earlier matching argument. 
     2565        pArg = pArg[1..$]; 
     2566        if ((pArg == "-V") || (pArg == "-v")) 
     2567            vVerbose = false; 
     2568        for(int i = vCombinedArgs.length-1; i >= 0; i--) 
     2569        { 
     2570            if (pArg[$-1] == '*') 
     2571            { 
     2572                if (vCombinedArgs[i].begins(pArg[0..$-1])) 
     2573                { 
     2574                    vCombinedArgs = vCombinedArgs[0..i] ~ 
     2575                                vCombinedArgs[i+1 .. $]; 
     2576                    break; 
     2577                } 
     2578            } 
     2579            else if (vCombinedArgs[i] == pArg) 
     2580            { 
     2581                vCombinedArgs = vCombinedArgs[0..i] ~ 
     2582                                vCombinedArgs[i+1 .. $]; 
    24702583                break; 
    24712584            } 
    24722585        } 
    24732586    } 
    2474 
    2475  
     2587    else if (pArg[0] == '@') 
     2588        ProcessResponseFile(pArg, vVerbose); 
     2589    else if (pArg[0] == '+') 
     2590        ProcessBuildConfig(pArg, vVerbose); 
     2591    else 
     2592    {   // Only add an argument if it is not already been added. 
     2593        if ( !(pArg in lKnownArgs) ) 
     2594        { 
     2595            vCombinedArgs ~= pArg; 
     2596            lKnownArgs[pArg] = true; 
     2597        } 
     2598    } 
     2599
     2600 
     2601void GatherArgs( char[][] pArgs ) 
     2602
     2603    /* This collects together all the original command line arguments, 
     2604       any command line arguments in any configuration files, and 
     2605       the contents of any response files. 
     2606    */ 
     2607 
     2608    // Collect from configuration file(s). 
     2609    ProcessBuildConfig("+", vVerbose); 
     2610 
     2611    // Collect from original command line. 
     2612    foreach( char[] lArg; pArgs) 
     2613    { 
     2614        GatherOneArg( lArg ); 
     2615    } 
     2616 
     2617 
     2618
     2619 
     2620void ProcessBuildConfig(char[] pArg, bool pVerbose) 
     2621
     2622    // From build.exe location 
     2623    ProcessOneBuildConfig(pArg, pVerbose, std.path.getDirName(vAppPath)); 
     2624 
     2625    // From compiler location 
     2626    ProcessOneBuildConfig(pArg, pVerbose, vCompilerPath); 
     2627 
     2628
     2629 
     2630void ProcessOneBuildConfig(char[] pArg, bool pVerbose, char[] pPath) 
     2631
     2632    char[] lConfigFileName; 
     2633    char[][] lConfigLines; 
     2634    bool lFoundGroup; 
     2635 
     2636 
     2637    lConfigFileName = pPath.dup; 
     2638 
     2639    if ((lConfigFileName.length > 0) && 
     2640        (lConfigFileName[$-std.path.sep.length..$] != std.path.sep) ) 
     2641            lConfigFileName ~= std.path.sep; 
     2642 
     2643    lConfigFileName ~= "build.cfg"; 
     2644 
     2645    if (pVerbose) 
     2646        writefln("Build Configuration file %s [%s]", lConfigFileName, pArg); 
     2647 
     2648    lConfigLines = util.fileex.GetTextLines(lConfigFileName, util.fileex.GetOpt.Always); 
     2649    if (pArg.length == 1) 
     2650        lFoundGroup = true; 
     2651    else 
     2652    { 
     2653        lFoundGroup = false; 
     2654        pArg = pArg[1..$]; 
     2655    } 
     2656 
     2657    foreach(char[] lArg; lConfigLines) 
     2658    { 
     2659        lArg = ExpandEnvVar(lArg); 
     2660        if (!lFoundGroup) 
     2661        { 
     2662            if (lArg == "[" ~ pArg ~ "]") 
     2663            { 
     2664                lFoundGroup = true; 
     2665                continue; 
     2666            } 
     2667        } 
     2668 
     2669        if (lFoundGroup) 
     2670        { 
     2671            // Locate any comment text in the line. 
     2672            int lPos = std.string.find(lArg, "#"); 
     2673            if (lPos != -1) 
     2674            { 
     2675                // Truncate the line at the '#' character. 
     2676                lArg.length = lPos; 
     2677            } 
     2678 
     2679            lArg = std.string.strip(lArg); 
     2680            if (lArg.length > 1) 
     2681            { 
     2682                if ((lArg[0] == '[') && (lArg[$-1] == ']')) 
     2683                    break; // Don't process any more lines. 
     2684 
     2685                if (pVerbose) 
     2686                    writefln("Build Configuration file arg: %s", lArg); 
     2687 
     2688 
     2689                while ((lPos = bmfind(lArg, "{Group}")) != -1) 
     2690                { 
     2691                    lArg = lArg[0..lPos] ~ pArg ~ lArg[lPos + 7 .. $]; 
     2692                } 
     2693 
     2694                if (lArg.begins("CMDLINE=") ) 
     2695                { 
     2696                    int lStartPos; 
     2697                    int lEndPos; 
     2698                    bool lEndFound; 
     2699                    lArg = std.string.strip(lArg[8..$]); 
     2700                    lStartPos = 0; 
     2701                    lEndPos = 0; 
     2702                    lEndFound = false; 
     2703                    while(lEndPos < lArg.length) 
     2704                    { 
     2705                        if (!lEndFound) 
     2706                        { 
     2707                            if (lArg[lEndPos] == ' ') 
     2708                            { 
     2709                                lEndFound = true; 
     2710                            } 
     2711                        } 
     2712                        else 
     2713                        { 
     2714                            if (bmfind_elem("-+@", lArg[lEndPos]) != -1) 
     2715                            { 
     2716                                GatherOneArg( lArg[lStartPos..lEndPos] ); 
     2717                                lStartPos = lEndPos; 
     2718                                lEndFound = false; 
     2719                            } 
     2720                        } 
     2721                        lEndPos++; 
     2722                    } 
     2723                    if (lStartPos != lEndPos) 
     2724                        GatherOneArg( lArg[lStartPos..lEndPos] ); 
     2725 
     2726                } 
     2727                else if (lArg.begins("LIBCMD=")) 
     2728                { 
     2729                    int lPos; 
     2730 
     2731                    while( (lPos = bmfind(lArg, "\"")) != -1) 
     2732                    { 
     2733                        lArg = lArg[0..lPos] ~ lArg[lPos+1 .. $]; 
     2734                    } 
     2735                    vLibrarianPath = std.path.getDirName(lArg[7..$]) ~ std.path.sep; 
     2736                    vLibrarianPath = util.pathex.CanonicalPath(vLibrarianPath); 
     2737 
     2738                    vLibrarian = std.path.getBaseName(lArg[7..$]); 
     2739                    if(vVerbose) { 
     2740                        writefln(" librarian path %s",vLibrarianPath); 
     2741                        writefln(" librarian is %s",vLibrarian); 
     2742                    } 
     2743                } 
     2744                else if (vVerbose) 
     2745                { 
     2746                    writefln("Bad configuration command '%s'", lArg); 
     2747                } 
     2748            } 
     2749        } 
     2750    } 
     2751
    24762752 
    24772753/* ============= The User Manual ====================================== 
     
    28573133__     /b"-?   "      Same as /-help, displays the full 'usage' help text. 
    28583134__     /b"-silent"    Avoids unnecessary messages being displayed. 
     3135__     /b"-od~<path~>"  Nominate the directory where temporary (work) files 
     3136__                    are to be created. By default they are created in 
     3137__                    the same directory as the target file. 
     3138__     /b"-nodef"     Prevents a Module Definition File being automatically created. 
     3139__                 This will override any pragma(/build_def) statements in the 
     3140__                 source code. 
    28593141__     /b"[...]"      All other options, objectfiles and libraries are 
    28603142__                 passed to the compiler 
     
    28673149__ /i Build supports a number of command line switches to control its default assumptions. 
    28683150 
     3151 
     3152__ /topic switches 
     3153__ /switch -nodef 
     3154__ /desc Prevent a Module Definition File being created. 
     3155__ Normally, the utility will automatically create a Module Definition File 
     3156__ for the linker. This will typically contain the EXETYPE command and any other 
     3157__ commands as specified in any pragma(/build_def) statements found in the source files. 
     3158__ If you specify this switch, you will have to provide your own Module Definition 
     3159__ File or its equivalent on the command line. 
    28693160 
    28703161__ /topic switches 
     
    29333224 
    29343225__ /topic switches 
     3226__ /switch -od 
     3227__ /desc Nominates the temporary file directory. 
     3228__ By default, the utility creates any work files in the same directory 
     3229__ as the target file. You can use this switch to nominate an alternative 
     3230__ location for these files. The directory is created if it doesn't exist. 
     3231__ 
     3232__ For the DigitalMars compiler, this also specifies the top-level  
     3233__ location where object files are created. By default, object files 
     3234__ are created in the same directory as the corresponding source file. 
     3235__ 
     3236__ Example: 
     3237__ /code 
     3238__         -odC:\temp\workarea 
     3239__ /endcode 
     3240 
     3241__ /topic switches 
    29353242__ /switch -nolink 
    29363243__ /desc  Ensures that the linker is not called. 
     
    31883495__  are processed in the order they appear. 
    31893496 
     3497 
     3498__ /topic Configuration File 
     3499__ /info 
     3500__ The utility configuration file is used to specify your default options for the utility. 
     3501__ 
     3502__ Each option is specified in a single text line, but you can have any 
     3503__ number of option lines in the configuration file. 
     3504__ 
     3505__ The options take the form of 
     3506__ /code 
     3507__      ~<COMMAND~>=~<VALUE~> 
     3508__ /endcode 
     3509__  
     3510__ /b"Supported Commands" /n 
     3511__ The commands currently supported are ... /n 
     3512__ /b CMDLINE /n 
     3513__ You can specify all command line switch values with this configuration 
     3514__ option. You can also specify multiple switches on the same option line./n 
     3515__ /code 
     3516__     CMDLINE=-inline -w  
     3517__ /endcode 
     3518__ 
     3519__ /b LIBCMD /n 
     3520__ This specifies the location and program name for the librarian application 
     3521__ you want to invoke when creating libraries. /n 
     3522__ /code 
     3523__    LIBCMD=D:\Applications\dm\bin\lib.exe 
     3524__ /endcode 
     3525__ 
     3526__ /b"Environment Symbol Substitution" /n 
     3527__ Before each configuration file option line is processed, it is first checked 
     3528__ for any references to Environment symbols. Each reference is replaced by  
     3529__ the value of that symbol. References take the form /b"%~<SYMNAME~>%" /n 
     3530__ There are two special symbols: /b"@D" is replaced by the compiler's 
     3531__ path, and /b"@P" is replaced by the compiler's configuration file's path. 
     3532__ 
     3533__Example: Assuming you had set BUILDOPTS=-w -g 
     3534__ /code 
     3535__   CMDLINE=%BUILDOPTS%    # Allow switches to be passed via enviroment symbol. 
     3536__ /endcode 
     3537__ would mean that "-w -g" would be automatically placed on the utility's 
     3538__ commandline whenever you ran it. 
     3539__ 
     3540__ /b"Groups" /n 
     3541__ It is possible to specify groups of configuration options that are only  
     3542__ applied if explictly nominated on the command line. A group starts with  
     3543__ a line in the format /b"[~<groupname~>]" where /i groupname can be any 
     3544__ text that doesn't include spaces. A group ends on the last line before the 
     3545__ next group in the file.  
     3546__ 
     3547__ Example of a Group 
     3548__ /code 
     3549__    [dbg] # To produce a debug edition of an application. 
     3550__    CMDLINE=-unittest 
     3551__    CMDLINE=--release 
     3552__    CMDLINE=--inline 
     3553__    CMDLINE=-g 
     3554__    CMDLINE=-w 
     3555__    CMDLINE=-full 
     3556__    CMDLINE=-T{Target}_{Group} 
     3557__ /endcode 
     3558__ 
     3559__ All the options lines before the first group are known as the default 
     3560__ options because these are always applied. To apply the options in a group 
     3561__ you need to specify which group(s) you want on the command line, or via 
     3562__ a /"response file". The group name is prepended with a plus sign on 
     3563__ the command line. To apply the 'debug' group in the above example, you 
     3564__ place on the command line /b"+dbg"  
     3565__ 
     3566__ /b"Comments" /n 
     3567__ You may place comments in a configuration file. A comment starts 
     3568__  with a /b'#' character and extends to the end of the line. 
     3569__ 
     3570__ Example: 
     3571__ /code 
     3572__    build myapp.d +final 
     3573__ /endcode 
     3574__ where if a group called '[final]' is contained in any configuration 
     3575__ file, the options in that group are used. 
     3576__ 
     3577__ Example: (contents of [final]) 
     3578__ /code 
     3579__     # This creates a production (release) edition of the app. 
     3580__     [final] 
     3581__     CMDLINE=-T{Target}_{Group}  # Set the name of the executable. 
     3582__     CMDLINE=-release   # Don't generate runtime checks. 
     3583__     CMDLINE=-full      # Force compilation of all files. 
     3584__     CMDLINE=-cleanup   # remove work files when completed 
     3585__     CMDLINE=-inline    # Allow inlining to occur 
     3586__     CMDLINE=--debug*   # Turn off any debug switches 
     3587__     CMDLINE=--unittest # Turn off any unittest switches 
     3588__     CMDLINE=--w        # Turn off warnings 
     3589__     CMDLINE=--g        # Turn off embedded debug symbolic info. 
     3590__ /endcode 
     3591__ 
     3592__ You can any number of configuration file group references on a command line. They 
     3593__  are processed in the order they appear. 
    31903594 
    31913595__ /topic To Do 
     
    32303634__ /endcode 
    32313635__ 
    3232 __ You can replace any of these by explicitly coding a pragma(build_def) 
     3636__ You can replace any of these by explicitly coding a pragma(/build_def) 
    32333637__ with different options than these defaults shown here. 
    32343638__ 
  • trunk/Source/build_bn.d

    r35 r36  
    22// This file is automatically maintained by the BUILD utility, 
    33// Please refrain from manually editing it. 
    4 long auto_build_number = 856
     4long auto_build_number = 912
  • trunk/Source/debug.brf

    r25 r36  
    11# This creates the 'debugging' edition of Build 
     2build.d         # Starting file. 
     3+dbg 
     4# --Derek Parnell-- May 07, 2005 10:43:00 PM 
    25 
    3 build.d  # Starting file. 
    4  
    5 -info       # Show the version of build 
    6  
    7 -T{Target}_dbg # This is the target file. 
    8 -w          # Ensure warnings are on 
    9 -g          # Ensure debug info in placed in object files. 
    10 -unittest   # Turn on unit testing 
    11 -full       # Ensure everything gets recompiled. 
    12  
    13 # --Derek Parnell-- March 21, 2005 12:20:23 PM 
    14  
  • trunk/Source/full.brf

    r20 r36  
    11# This creates a production / distribution edition of the program. 
    2  
    32build.d         # Starting file 
    4  
    5 -info           # Show verion of build utility 
    6 -release        # Removes runtime tests 
    7 -inline         # Allows inlining 
    8 -full           # Recompiles all files in the group 
    9  
    10 -T{Target}_prod # Name of target to build. 
    11  
    12 # -- Derek Parnell March 20, 2005 09:38:09 PM  
     3+prod 
     4# --Derek Parnell-- May 07, 2005 10:43:00 PM 
  • trunk/Source/source_bn.d

    r35 r36  
    22// This file is automatically maintained by the BUILD utility, 
    33// Please refrain from manually editing it. 
    4 long auto_build_number = 646
     4long auto_build_number = 702
  • trunk/Source/util/BMscanner.d

    r25 r36  
    104104        return -1; 
    105105    } 
    106              
     106 
    107107    // Prepare shift table. 
    108108    foreach(int i, T c; pFind) 
     
    191191 
    192192} 
    193  
     193private import std.stdio; 
    194194int BMScanElement(T[] pContainer, T pFind, uint pStartPos=0) 
    195195{ 
     
    197197    { 
    198198        if ( lElem == pFind) 
     199        { 
    199200            return i + pStartPos; 
     201        } 
    200202    } 
    201203    return -1; 
     
    204206 
    205207unittest{ 
     208 
    206209    alias BMScan!(char).BMScan utfind; 
    207210    alias BMScan!(char).BMScanElement utfind_elem; 
    208211 
     212 
    209213    assert( 7 == utfind_elem("a simple example to demonstrate Boyer-Moore", 'e')); 
    210214    assert( 9 == utfind_elem("a simple example to demonstrate Boyer-Moore", 'e', 8)); 
    211     assert( -1 == utfind_elem("a simple example to demonstrate Boyer-Moore", 'z')); 
     215    assert(-1 == utfind_elem("a simple example to demonstrate Boyer-Moore", 'z')); 
    212216    assert( 9 == utfind("a simple example to demonstrate Boyer-Moore", "example")); 
    213217    assert(10 == utfind("a simple example to demonstrate Boyer-Moore", "xample")); 
     
    220224    assert(-1 == utfind("a simple example to demonstrate Boyer-Moore", "")); 
    221225    assert(-1 == utfind("", "")); 
     226    assert( 0 == utfind("a", "a")); 
     227    assert(-1 == utfind("a", "b")); 
     228    assert(-1 == utfind("a", "aa")); 
    222229    assert(-1 == utfind("", "xyzzy")); 
    223230    assert(-1 == utfind("xy", "xyzzy"));