Changeset 36
- Timestamp:
- 05/07/05 09:46:04 (7 years ago)
- Files:
-
- downloads/build-2.07.doc.zip (added)
- downloads/build-2.07.src.zip (added)
- downloads/build_win_2.07.exe (added)
- trunk/Docs/AUTO_BUILD_NUMBER.htm (modified) (1 diff)
- trunk/Docs/CHANGE_LOG.htm (modified) (2 diffs)
- trunk/Docs/COMMAND_LINE.htm (modified) (2 diffs)
- trunk/Docs/CONFIGURATION_FILE.htm (added)
- trunk/Docs/DLL_LIBRARIES.htm (modified) (2 diffs)
- trunk/Docs/PRAGMA.htm (modified) (1 diff)
- trunk/Docs/RESPONSE_FILE.htm (modified) (1 diff)
- trunk/Docs/RULE_DEFINITION_FILE.htm (modified) (1 diff)
- trunk/Docs/SWITCHES.htm (modified) (27 diffs)
- trunk/Docs/TO_DO.htm (modified) (1 diff)
- trunk/Docs/index.htm (modified) (4 diffs)
- trunk/Source/build.cfg (added)
- trunk/Source/build.d (modified) (40 diffs)
- trunk/Source/build_bn.d (modified) (1 diff)
- trunk/Source/debug.brf (modified) (1 diff)
- trunk/Source/full.brf (modified) (1 diff)
- trunk/Source/source_bn.d (modified) (1 diff)
- trunk/Source/util/BMscanner.d (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/Docs/AUTO_BUILD_NUMBER.htm
r35 r36 2 2 <head> 3 3 <!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 4 <!-- on 2005/05/0 4 at 17h47m11-->4 <!-- on 2005/05/07 at 22h40m00 --> 5 5 <style>h4 {text-align: right}</style> 6 6 <title></title> trunk/Docs/CHANGE_LOG.htm
r35 r36 2 2 <head> 3 3 <!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 4 <!-- on 2005/05/0 4 at 17h47m11-->4 <!-- on 2005/05/07 at 22h40m00 --> 5 5 <style>h4 {text-align: right}</style> 6 6 <title></title> … … 12 12 <p><h3>A list of changes and fixes that have been made. 13 13 </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 18 automatically creating a Module Definition File (.def) 19 <li> ** <strong>ENH</strong>: You can now specify default, and special, settings for 20 the 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 22 utility's executable for the configuration file. After processing any 23 configuration file found there, it then looks in the same directory as 24 the compiler for a configuration file (build.cfg) and processes it if 25 found. 26 <li> ** <strong>ENH</strong>: To support special command line settings that may be 27 specified in the utility's configuration file(s), you can indicate 28 one 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 30 after the default ones have been processed. 31 <li> ** <strong>ENH</strong>: To remove an earlier specified command line switch, you 32 can prepend it with a hyphen. This new feature may be needed when command 33 line switches can come from multiple sources (the original command line, 34 utility response files, and utility configuration files), and you need 35 to remove a switch that may have been provided by some other source. <br> 36 For example to negate an earlier "-unittest" switch you code add "--unittest" 37 to the command line. 38 <li> ** <strong>ENH</strong>: New switch <em>-od</em> is used to nominate a directory for 39 temporary files. For the DigitalMars compiler, this also is used as the location 40 to create object files. 41 </ul> 14 42 <p> 15 43 <strong> -- v2.06 -- 04/May/2005 </strong> trunk/Docs/COMMAND_LINE.htm
r35 r36 2 2 <head> 3 3 <!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 4 <!-- on 2005/05/0 4 at 17h47m11-->4 <!-- on 2005/05/07 at 22h40m00 --> 5 5 <style>h4 {text-align: right}</style> 6 6 <title></title> … … 91 91 <strong>-? </strong> Same as -help, displays the full 'usage' help text. 92 92 <strong>-silent</strong> Avoids unnecessary messages being displayed. 93 <strong>-od<path></strong> Nominate the directory where temporary (work) files 94 are to be created. By default they are created in 95 the 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 98 source code. 93 99 <strong>[...]</strong> All other options, objectfiles and libraries are 94 100 passed to the compiler trunk/Docs/DLL_LIBRARIES.htm
r35 r36 2 2 <head> 3 3 <!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 4 <!-- on 2005/05/0 4 at 17h47m11-->4 <!-- on 2005/05/07 at 22h40m00 --> 5 5 <style>h4 {text-align: right}</style> 6 6 <title></title> … … 23 23 </pre> 24 24 <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) 26 26 with different options than these defaults shown here. 27 27 <p> trunk/Docs/PRAGMA.htm
r35 r36 2 2 <head> 3 3 <!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 4 <!-- on 2005/05/0 4 at 17h47m11-->4 <!-- on 2005/05/07 at 22h40m00 --> 5 5 <style>h4 {text-align: right}</style> 6 6 <title></title> trunk/Docs/RESPONSE_FILE.htm
r35 r36 2 2 <head> 3 3 <!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 4 <!-- on 2005/05/0 4 at 17h47m11-->4 <!-- on 2005/05/07 at 22h40m00 --> 5 5 <style>h4 {text-align: right}</style> 6 6 <title></title> trunk/Docs/RULE_DEFINITION_FILE.htm
r35 r36 2 2 <head> 3 3 <!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 4 <!-- on 2005/05/0 4 at 17h47m11-->4 <!-- on 2005/05/07 at 22h40m00 --> 5 5 <style>h4 {text-align: right}</style> 6 6 <title></title> trunk/Docs/SWITCHES.htm
r35 r36 2 2 <head> 3 3 <!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 4 <!-- on 2005/05/0 4 at 17h47m11-->4 <!-- on 2005/05/07 at 22h40m00 --> 5 5 <style>h4 {text-align: right}</style> 6 6 <title></title> … … 28 28 <li><a href="#_M"><i>switch</i> -M</a> Identifies a module or a package to notice (not ignore) 29 29 <li><a href="#_NAMES"><i>switch</i> -names</a> Displays the names of the files used in building the target. 30 <li><a href="#_NODEF"><i>switch</i> -nodef</a> Prevent a Module Definition File being created. 30 31 <li><a href="#_NOLIB"><i>switch</i> -nolib</a> Ensures that the object files are not used to form a library. 31 32 <li><a href="#_NOLINK"><i>switch</i> -nolink</a> Ensures that the linker is not called. 32 33 <li><a href="#_OBJ"><i>switch</i> -obj</a> 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> Nominates the temporary file directory. 33 35 <li><a href="#_R"><i>switch</i> -R</a> Determines if the compiler tools use a response file or not. 34 36 <li><a href="#_RDF"><i>switch</i> -RDF</a> Defines a file to override the default <a href="RULE_DEFINITION_FILE.htm#RULE_DEFINITION_FILE">Rule Definition File</a> … … 36 38 <li><a href="#_T"><i>switch</i> -T</a> Identifies the target name to build. 37 39 <li><a href="#_TEST"><i>switch</i> -test</a> Does a test run only. No compiling, linking or library work is done. 40 <li><a href="#_V"><i>switch</i> -v</a> Set <em>verbose</em> mode on for both <em>build</em> and for the compiler 38 41 <li><a href="#_V"><i>switch</i> -V</a> 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> Set <em>verbose</em> mode on for both <em>build</em> and for the compiler40 42 <li><a href="#_X"><i>switch</i> -X</a> Identifies a module or package to ignore 41 43 <hr> … … 63 65 <a href="#_M">-M</a>, 64 66 <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>, 75 79 <a href="#_X">-X</a> 76 80 <hr> … … 103 107 <a href="#_M">-M</a>, 104 108 <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>, 115 121 <a href="#_X">-X</a> 116 122 <hr> … … 140 146 <a href="#_M">-M</a>, 141 147 <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>, 152 160 <a href="#_X">-X</a> 153 161 <hr> … … 186 194 <a href="#_M">-M</a>, 187 195 <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>, 198 208 <a href="#_X">-X</a> 199 209 <hr> … … 222 232 <a href="#_M">-M</a>, 223 233 <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>, 234 246 <a href="#_X">-X</a> 235 247 <hr> … … 258 270 <a href="#_M">-M</a>, 259 271 <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>, 270 284 <a href="#_X">-X</a> 271 285 <hr> … … 301 315 <a href="#_M">-M</a>, 302 316 <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>, 313 329 <a href="#_X">-X</a> 314 330 <hr> … … 333 349 <a href="#_M">-M</a>, 334 350 <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>, 345 363 <a href="#_X">-X</a> 346 364 <hr> … … 364 382 <a href="#_M">-M</a>, 365 383 <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>, 376 396 <a href="#_X">-X</a> 377 397 <hr> … … 402 422 <a href="#_M">-M</a>, 403 423 <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>, 414 436 <a href="#_X">-X</a> 415 437 <hr> … … 441 463 <a href="#_M">-M</a>, 442 464 <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>, 453 477 <a href="#_X">-X</a> 454 478 <hr> … … 479 503 <a href="#_M">-M</a>, 480 504 <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>, 491 517 <a href="#_X">-X</a> 492 518 <hr> … … 519 545 <a href="#_LINK">-link</a>, 520 546 <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>, 531 559 <a href="#_X">-X</a> 532 560 <hr> … … 550 578 <a href="#_LINK">-link</a>, 551 579 <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> 598 Category: <a href="#SWITCHES">Switches</a><br> 599 <p><p>Normally, the utility will automatically create a Module Definition File 600 for 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. 602 If you specify this switch, you will have to provide your own Module Definition 603 File 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>, 562 630 <a href="#_X">-X</a> 563 631 <hr> … … 588 656 <a href="#_M">-M</a>, 589 657 <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>, 599 669 <a href="#_X">-X</a> 600 670 <hr> … … 627 697 <a href="#_M">-M</a>, 628 698 <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>, 638 710 <a href="#_X">-X</a> 639 711 <hr> … … 662 734 <a href="#_M">-M</a>, 663 735 <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> 753 Category: <a href="#SWITCHES">Switches</a><br> 754 <p><p>By default, the utility creates any work files in the same directory 755 as the target file. You can use this switch to nominate an alternative 756 location for these files. The directory is created if it doesn't exist. 757 <p> 758 For the DigitalMars compiler, this also specifies the top-level 759 location where object files are created. By default, object files 760 are created in the same directory as the corresponding source file. 761 <p> 762 Example: 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>, 673 792 <a href="#_X">-X</a> 674 793 <hr> … … 730 849 <a href="#_M">-M</a>, 731 850 <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>, 741 862 <a href="#_X">-X</a> 742 863 <hr> … … 768 889 <a href="#_M">-M</a>, 769 890 <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>, 779 902 <a href="#_X">-X</a> 780 903 <hr> … … 801 924 <a href="#_M">-M</a>, 802 925 <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>, 812 937 <a href="#_X">-X</a> 813 938 <hr> … … 847 972 <a href="#_M">-M</a>, 848 973 <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>, 858 985 <a href="#_X">-X</a> 859 986 <hr> … … 880 1007 <a href="#_M">-M</a>, 881 1008 <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> 1026 Category: <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>, 891 1053 <a href="#_X">-X</a> 892 1054 <hr> … … 911 1073 <a href="#_M">-M</a>, 912 1074 <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>, 953 1086 <a href="#_X">-X</a> 954 1087 <hr> … … 984 1117 <a href="#_M">-M</a>, 985 1118 <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 2 2 <head> 3 3 <!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 4 <!-- on 2005/05/0 4 at 17h47m11-->4 <!-- on 2005/05/07 at 22h40m00 --> 5 5 <style>h4 {text-align: right}</style> 6 6 <title></title> trunk/Docs/index.htm
r35 r36 2 2 <head> 3 3 <!-- Generated by MAKEDOC v1.1, (c) 2000,2003 by David Cuny, Derek Parnell, Matt Lewis --> 4 <!-- on 2005/05/0 4 at 17h47m11-->4 <!-- on 2005/05/07 at 22h40m00 --> 5 5 <style>h4 {text-align: right}</style> 6 6 <title></title> … … 32 32 <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. 33 33 </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> 34 36 <tr><td><a href="DLL_LIBRARIES.htm#DLL_LIBRARIES">DLL Libraries</a></td><td>How to create a DLL library using Build. 35 37 </td></tr> … … 60 62 <a href="SWITCHES.htm#_M">-M</a> [<i><code>switch</code></i>] Identifies a module or a package to notice (not ignore)<br> 61 63 <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> 62 65 <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> 63 66 <a href="SWITCHES.htm#_NOLINK">-nolink</a> [<i><code>switch</code></i>] Ensures that the linker is not called.<br> 64 67 <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> 65 69 <a href="SWITCHES.htm#_R">-R</a> [<i><code>switch</code></i>] Determines if the compiler tools use a response file or not.<br> 66 70 <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> … … 76 80 <a href="CHANGE_LOG.htm#CHANGE_LOG">Change Log</a> <br> 77 81 <a href="COMMAND_LINE.htm#COMMAND_LINE">Command Line</a> <br> 82 <a href="CONFIGURATION_FILE.htm#CONFIGURATION_FILE">Configuration File</a> <br> 78 83 <a href="DLL_LIBRARIES.htm#DLL_LIBRARIES">DLL Libraries</a> <br> 79 84 <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 53 53 __ /info 54 54 __ 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> 55 83 __ 56 84 __ /b"-- v2.06 -- 04/May/2005" … … 333 361 version(Windows) { 334 362 // OptLink Definition File 335 pragma (build_def, "VERSION 2.0 6");363 pragma (build_def, "VERSION 2.07"); 336 364 } 337 365 } … … 422 450 char[] vVersionSwitch = "-version="; 423 451 char[] vKeepPathSwitch = "-op"; 424 char[] vObjWritePathSwitch = "-od";425 452 char[] vOutFileSwitch = "-of"; 426 453 char[] vImportPathSwitch = "-I"; … … 456 483 } 457 484 485 char[] vTemporaryPathSwitch = "-od"; 458 486 char[] vLibrarianPath = ""; 459 487 char[]* vDelayedValue = null; 460 char[] v ObjWritePath = "";488 char[] vTemporaryPath = ""; 461 489 bool vTestRun = false; 462 490 bool vNoLink = false; … … 467 495 bool vNames = false; 468 496 bool vAllObjects = false; 497 bool vNoDef = false; 469 498 char[][] vImportRoots; 470 499 char[][] vModulesToIgnore; … … 478 507 char[] vAppPath; 479 508 char[] vAppName; 480 char[] vAppVersion = "2.0 6";509 char[] vAppVersion = "2.07"; 481 510 char[] vTargetName; // Output name from first file name. 482 511 char[] vPragmaTargetName; // Output name from pragma. … … 484 513 char[][] vCmdLineFiles; // List of source files from command line 485 514 bool[char[]] vLinkFiles; // List of non-source files from command line 515 char[][] vCombinedArgs; // All the args are gathered here prior to processing. 486 516 char[][] vBuildArgs; // Arguments passed to build 487 517 char[][] vCompilerArgs; // Arguments passed to compiler … … 503 533 504 534 alias util.bmscanner.BMScan!(char).BMScan bmfind; 535 alias util.bmscanner.BMScan!(char).BMScanElement bmfind_elem; 505 536 } 506 537 … … 534 565 vUseResponseFile = false; 535 566 } 567 } 568 569 570 //------------------------------------------------------- 571 bool 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; 536 582 } 537 583 … … 613 659 writefln(" ** The default is to use command line arguments"); } 614 660 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."); 615 664 writefln(" -X<module> Modules/Packages to ignore (eg. -Xmylib)"); 616 665 writefln(" -M<module> Modules/Packages to notice (eg. -Mphobos)"); … … 622 671 writefln(" -? Same as -help, displays the full 'usage' help text."); 623 672 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."); 625 675 writefln(" [...] All other options, objectfiles and libraries are"); 626 676 writefln(" passed to the compiler"); … … 747 797 }; 748 798 799 //------------------------------------------------------- 749 800 Rule[] LoadRules() 801 //------------------------------------------------------- 750 802 { 751 803 Rule[] lRules; … … 787 839 } 788 840 841 //------------------------------------------------------- 789 842 int ProcessExternal( ExternRef pRef) 843 //------------------------------------------------------- 790 844 { 791 845 int lResult = -1; … … 1017 1071 } 1018 1072 1019 char[] lResponseFileName; 1073 char[] lDResponseFileName; 1074 char[] lLResponseFileName; 1075 char[] lDefName; 1020 1076 char[] lOutText; 1021 1077 char[] lCommand; … … 1117 1173 } 1118 1174 1119 if (vBuildDef.length > 0) { 1120 char[] lDefName; 1175 if ((vNoDef == false) && (vBuildDef.length > 0)) { 1121 1176 1122 1177 lDefName = ReplaceExtention(vTargetName, "def"); 1178 if (vTemporaryPath.length != 0) 1179 { 1180 lDefName = vTemporaryPath ~ std.path.getBaseName(lDefName); 1181 } 1123 1182 util.fileex.CreateTextFile(lDefName, vBuildDef); 1124 1183 … … 1190 1249 1191 1250 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; 1195 1258 } 1196 1259 else … … 1263 1326 1264 1327 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; 1268 1335 } 1269 1336 else … … 1296 1363 } 1297 1364 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. 1300 1371 lHitList ~= ReplaceExtention(vTargetName, "map"); 1301 lHitList ~= ReplaceExtention(vTargetName, "def");1302 1372 lHitList ~= ReplaceExtention(vTargetName, "bak"); 1303 1373 lHitList ~= ReplaceExtention(vTargetName, "lst"); … … 1305 1375 foreach(char[] lFilename; lHitList) 1306 1376 { 1307 if ( util.fileex.FileExists( lFilename ))1377 if (lFilename.length > 0) 1308 1378 { 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 } 1313 1386 } 1314 1387 } … … 1406 1479 static uint[ char[] ] lElementIdx; 1407 1480 1481 if (vNoDef == true) 1482 return; 1483 1408 1484 lLowerText = std.string.tolower(pText); 1409 1485 … … 1478 1554 if (lSymName == "@P") 1479 1555 { 1480 // Special symbol that refers to the configuration file's directory.1556 // Special symbol that refers to the DMD configuration file's directory. 1481 1557 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] : ""); 1482 1563 } 1483 1564 else … … 1602 1683 } 1603 1684 1604 version(DigitalMars) 1605 { 1606 if (util.str.IsLike(lSwitch, std.utf.toUTF32(vObjWritePathSwitch ~ "*"))) 1685 if (util.str.IsLike(lSwitch, std.utf.toUTF32(vTemporaryPathSwitch ~ "*"))) 1607 1686 { 1608 1687 char[] lbRoot; 1609 1688 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); 1618 1701 } 1619 util.pathex.MakePath(lbRoot);1620 1702 } 1621 1703 1622 1704 vBuildArgs ~= lSwitch; 1623 1705 // This one actually *is* passed thru. 1624 }1625 1706 } 1626 1707 … … 1777 1858 if (pList.length > 0) { 1778 1859 if (pTitle.length > 0) 1779 writefln(" %s",pTitle);1860 writefln("\n%s",pTitle); 1780 1861 1781 1862 foreach(int lIndex, char[] lListEntry; pList) { … … 1791 1872 if (pList.length > 0) { 1792 1873 if (pTitle.length > 0) 1793 writefln(" %s",pTitle);1874 writefln("\n%s",pTitle); 1794 1875 1795 1876 foreach(int lIndex, ExternRef lListEntry; pList) … … 1805 1886 1806 1887 // ------------------------------------------------ 1807 char[] Get ObjWritePath()1888 char[] GetTemporaryPath() 1808 1889 { 1809 return v ObjWritePath;1890 return vTemporaryPath; 1810 1891 } 1811 1892 … … 1900 1981 1901 1982 // ------------------------------------------- 1902 int main (char[][] args)1983 int main(char[][] pArgs) 1903 1984 // ------------------------------------------- 1904 1985 { 1905 1986 int lBuildResult; 1906 1987 char[] lCompPath; 1988 bool lSetPath = false; 1907 1989 1908 1990 /* Set routine addresses in the Source module. This allows … … 1921 2003 source.IsActiveVersion = &IsActiveVersion; 1922 2004 source.GetFullPathname = &GetFullPathname; 1923 source.GetObjWritePath = &Get ObjWritePath;2005 source.GetObjWritePath = &GetTemporaryPath; 1924 2006 1925 2007 // Scan the PATH env symbol to locate the D compiler. … … 1934 2016 } 1935 2017 2018 if (vCompilerPath.length == 0) 2019 { 2020 vCompilerPath = util.pathex.GetInitCurDir; 2021 lSetPath = true; 2022 } 2023 1936 2024 // Strip off application's path from arglist. 1937 vAppPath= args[0];2025 vAppPath=pArgs[0]; 1938 2026 vAppName=getBaseName(vAppPath); 1939 2027 version (Windows) … … 1947 2035 } 1948 2036 1949 args=args[1..args.length];1950 if ( args.length == 0) {1951 // No other arg s so show usage message.2037 pArgs=pArgs[1..pArgs.length]; 2038 if (pArgs.length == 0) { 2039 // No other arguments so show usage message. 1952 2040 DisplayUsage (); 1953 2041 return 0; … … 1955 2043 else { 1956 2044 SetKnownVersions(); 1957 foreach(char[] arg; args) { 1958 ProcessCmdLineArg( arg, true); // Just scan for verbose option first. 1959 } 2045 2046 GatherArgs( pArgs ); 1960 2047 1961 2048 if (vVerbose){ 1962 2049 writefln("*** build v%s (build %d)***", vAppVersion, build_bn.auto_build_number); 1963 2050 } 1964 foreach(char[] arg; args) { 1965 ProcessCmdLineArg( arg ); 2051 2052 foreach(char[] lArg; vCombinedArgs) { 2053 ProcessCmdLineArg( lArg ); 1966 2054 } 1967 2055 … … 1973 2061 writefln("Current Dir '%s'", util.pathex.GetInitCurDir()); 1974 2062 1975 if ( vCompilerPath.length == 0)2063 if (lSetPath) 1976 2064 { 1977 vCompilerPath = util.pathex.GetInitCurDir;1978 2065 if (vVerbose) 1979 2066 { … … 2070 2157 if(vVerbose) { 2071 2158 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: ..............."); 2075 2162 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: ................."); 2082 2169 } 2083 2170 … … 2088 2175 } 2089 2176 2090 void ProcessResponseFile(char[] pArg, bool p Phase, bool pVerbose)2177 void ProcessResponseFile(char[] pArg, bool pVerbose) 2091 2178 { 2092 2179 // A response file is being used. … … 2118 2205 } 2119 2206 2120 lArg = std.string.strip r(lArg);2207 lArg = std.string.strip(lArg); 2121 2208 if (lArg.length > 1){ 2122 2209 if (pVerbose) 2123 2210 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 2216 void ProcessCmdLineArg( char[] pArg ) 2130 2217 { 2131 2218 char[] lNewPath; 2132 2219 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; 2162 2232 } 2163 2233 } 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) 2294 2357 { 2295 2358 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; 2301 2361 } 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..$], ";")) 2304 2394 { 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); 2317 2396 if (lRoot.length > 0){ 2318 2397 version(Posix) … … 2324 2403 } 2325 2404 } 2326 break;2327 2405 } 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*")) 2331 2497 { 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") 2333 2509 { 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; 2350 2513 } 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 2552 void 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 .. $]; 2470 2583 break; 2471 2584 } 2472 2585 } 2473 2586 } 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 2601 void 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 2620 void 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 2630 void 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 } 2476 2752 2477 2753 /* ============= The User Manual ====================================== … … 2857 3133 __ /b"-? " Same as /-help, displays the full 'usage' help text. 2858 3134 __ /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. 2859 3141 __ /b"[...]" All other options, objectfiles and libraries are 2860 3142 __ passed to the compiler … … 2867 3149 __ /i Build supports a number of command line switches to control its default assumptions. 2868 3150 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. 2869 3160 2870 3161 __ /topic switches … … 2933 3224 2934 3225 __ /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 2935 3242 __ /switch -nolink 2936 3243 __ /desc Ensures that the linker is not called. … … 3188 3495 __ are processed in the order they appear. 3189 3496 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. 3190 3594 3191 3595 __ /topic To Do … … 3230 3634 __ /endcode 3231 3635 __ 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) 3233 3637 __ with different options than these defaults shown here. 3234 3638 __ trunk/Source/build_bn.d
r35 r36 2 2 // This file is automatically maintained by the BUILD utility, 3 3 // Please refrain from manually editing it. 4 long auto_build_number = 856;4 long auto_build_number = 912; trunk/Source/debug.brf
r25 r36 1 1 # This creates the 'debugging' edition of Build 2 build.d # Starting file. 3 +dbg 4 # --Derek Parnell-- May 07, 2005 10:43:00 PM 2 5 3 build.d # Starting file.4 5 -info # Show the version of build6 7 -T{Target}_dbg # This is the target file.8 -w # Ensure warnings are on9 -g # Ensure debug info in placed in object files.10 -unittest # Turn on unit testing11 -full # Ensure everything gets recompiled.12 13 # --Derek Parnell-- March 21, 2005 12:20:23 PM14 trunk/Source/full.brf
r20 r36 1 1 # This creates a production / distribution edition of the program. 2 3 2 build.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 2 2 // This file is automatically maintained by the BUILD utility, 3 3 // Please refrain from manually editing it. 4 long auto_build_number = 646;4 long auto_build_number = 702; trunk/Source/util/BMscanner.d
r25 r36 104 104 return -1; 105 105 } 106 106 107 107 // Prepare shift table. 108 108 foreach(int i, T c; pFind) … … 191 191 192 192 } 193 193 private import std.stdio; 194 194 int BMScanElement(T[] pContainer, T pFind, uint pStartPos=0) 195 195 { … … 197 197 { 198 198 if ( lElem == pFind) 199 { 199 200 return i + pStartPos; 201 } 200 202 } 201 203 return -1; … … 204 206 205 207 unittest{ 208 206 209 alias BMScan!(char).BMScan utfind; 207 210 alias BMScan!(char).BMScanElement utfind_elem; 208 211 212 209 213 assert( 7 == utfind_elem("a simple example to demonstrate Boyer-Moore", 'e')); 210 214 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')); 212 216 assert( 9 == utfind("a simple example to demonstrate Boyer-Moore", "example")); 213 217 assert(10 == utfind("a simple example to demonstrate Boyer-Moore", "xample")); … … 220 224 assert(-1 == utfind("a simple example to demonstrate Boyer-Moore", "")); 221 225 assert(-1 == utfind("", "")); 226 assert( 0 == utfind("a", "a")); 227 assert(-1 == utfind("a", "b")); 228 assert(-1 == utfind("a", "aa")); 222 229 assert(-1 == utfind("", "xyzzy")); 223 230 assert(-1 == utfind("xy", "xyzzy"));
