Note: This website is archived. For up-to-date information about D projects and development, please visit

Change Log

A list of changes and fixes that have been made.

v3.04 -- 16/October/2006

  • CHG: The utility is now know as 'bud'. The project name is still 'build'
  • FIX: Correctly handle INIT:CompilerExe from configuration file
  • FIX: Correctly handles version platform statements.
  • FIX: Correctly handles the #! arguments.
  • FIX: Sets default OutFileSwitch for GDC to "-o "
  • FIX: Sets default Shared Library Extension for unix to "so"
  • FIX: Sets default Linker 'lib' switch for GNU tools to "-l"
  • FIX: The auto-build-number facility has been repaired.
  • FIX: No longer runs any FINAL commands if the compile failed.
  • FIX: Ticket #38 Now correctly handles paths enclosed in quotes.
  • ENH: A new -explicit switch will cause only the files explicitly named on the command line to be compiled. All other files, such as imported ones, are processed but not compiled.
  • ENH: A new -usefinal switch to control the usage of FINAL statements defined in the configuration file.
  • ENH: A new -emptyargs switch to control whether or not to abort if there are any empty arguments on the command line.
  • ENH: A new -BCFPATH switch to define an alternative location for Bud configuration files. This can also be supplied as an environment switch.

v3.03 -- 20/September/2006

  • FIX: Ticket #33 For unix editions, 'pthread' is now a default library, '-g' is used instead of '/co' to generate debug data, '-o ' is used instead of '-of', and spaces are placed in between consecutive '-L' switches. Note that if you want to place library files on the command line, you still have to include the '.a' file suffix.
  • FIX: Ticket #34 For GNU, 'gdc' is the default linker, the library switch is now '-L-l', 'gphobos' is used instead of 'phobos', and the makefile includes the '-version=BuildVerbose?' switch.
  • FIX: Ticket #35 It is now possible to use relative paths on the command line files.
  • FIX If you use the '-od' switch then the '-op' switch is not used.
  • CHG: Ticket #36 The default name for the executable is now 'bud', but you can change it to anything you like.
  • CHG: Ticket #37 Changed defaults to support GDC out-of-the-box.
  • ENH The utility now also checks for a 'darwin' section in the Configuration File.
  • ENH The utility now supports the import syntax that was introduced with DMD v0.163.
  • ENH The distribution now includes example configuration files for a number of environments.
  • ENH The Configuration File now supports a new FINAL command that allows you to run jobs after a successful build.

v3.02 -- 23/June/2006

  • FIX: Ticket #27 When using 'gcc' as the linker tool, Build now uses a space character to delimit file names.
  • FIX: Ticket #28 The Optlink switch options are now correctly placed in a response file
  • FIX: Ticket #29 The -exec now works correctly.
  • FIX: Ticket #32 The Windows executable in the distro now updates the auto_build_number.
  • ENH: Ticket #30 The Rules subsystem can now be used to generate D source code. There are number of changes in this area so read the rules documentation and pragma documentation for details.
  • ENH: Ticket #31 It is now possible to stop a source file from being compiled. A new "pragma(ignore)" has been implemented.
  • ENH: There are some new configuration items that can be used to adjust the tools usage. Have a look at the example configuration file in the distrubution package.

v3.01 -- 09/June/2006

  • FIX: Ticket #18 The tool now ignores duplicate source file names supplied to it from anywhere.
  • FIX: Ticket #19 The tool now only passes object files, library files, DigitalMars .def files, and resource files to the linker.
  • FIX: Ticket #20 The 'Rules' system can now handle creation of D source files.
  • FIX: Ticket #22 A few spelling errors corrected in the documentation.
  • FIX: Ticket #23 When using a response file for the DigitalMars linker, the tool now makes provision for Resource Files.
  • FIX: Ticket #24 The tool now recognises .di files as source files for the purposes of determining dependancies, but does not allow them to be presented on the DMD compiler's command line.
  • FIX: Ticket #25 The tool now scans the PATH environment symbol rather than assuming that supplie executable file names that do not have a path are in the current directory.
  • FIX: Ticket #26 The LINKCMD configuration item is now corrected parsed.
  • ENH: The 'Rules' functionality now allows some new special tokens that represent the Basename and Path of the input and output files.
  • ENH: The 'Rules' functionality now ensures that the output file's path exists prior to running the Rule's tool application.
  • ENH: The LINKCMD is now able to be used in the Build configuration file.
  • ENH: A new switch "-uses" will cause the tool to create a cross-reference file that details what modules use what, and what modules are used by other modules.

v3.00 -- 06/June/2006

  • FIX: Build was using the wrong object file during linkages if a target object file did not exist but one with the same name existed in any of the Import paths.
  • FIX: With the -R=No switch, when using the Digital Mars linker, Build was not formatting the command line correctly.
  • FIX: Ticket #10 The tool now recognises the pragma linked object files when building a library.
  • FIX: Ticket #9 Now, if the output file created by the rule ends with the library extention, it is presented to the linker as a library rather than an object file.
  • FIX: thanks to gmiller: Added booltype.d to Makefile files.
  • FIX: Ticket #15 GDC places object files in the directory from which it is called so the tool no longer assumes the same directory as the corresponding source file.
  • FIX: Ticket #17 Hopefully its a more posix-friendly tool now. Most of the hard-coded switches and options that are environment related are now user-configurable via the Configuration File functionality.
  • FIX: thanks to gmiller: Corrected the imports in util.fileex.d
  • FIX: thanks to gmiller: Module and package exclusion was not working if your current directory was in a directory tree that contained the module/package you were excluding. For example if your current directory was C:\dmd\src\phobos it would not exclude any of the 'std' modules.
  • ENH: Macro (text) processing is now supported.
  • ENH: Any file name on the command line with an extention of ".brf" will be used as a Build Response File
  • ENH: If there is nothing on the command line and the file 'build.brf' exists in the current directory, then it will be used as the Build Response File for this run.
  • ENH: Will now look for the compiler's configuration file in the following areas...
    1. If defined, the directory defined by the ConfigPath configuration item in Build's nfiguration file. And in this case it doesn't look anywhere in any of the areas listed below.
    2. The current directory.
    3. The directory named in the HOME environment symbol.
    4. For Windows environments only, the directory named in the combination of the HOMEDRIVE and HOMEPATH environment symbols.
    5. The same directory in which the compiler resides.
    6. The directory defined by the EtcPath configuration item in Build's configuration file.
  • ENH: It is now possible to add environment specific items to the build.cfg file. To do so, add the items to the appropriate item group...
    # items that only apply when building in Windows.
    # items that only apply when building in Posix (unix).
    # items that only apply when building with DigitalMars tools.
    # items that only apply when building with GNU tools.
    # items that only apply when building with DigitalMars tools in Windows.
    # items that only apply when building with GNU tools in Windows.
    # items that only apply when building with DigitalMars tools in Posix.
    # items that only apply when building with GNU tools in Posix.
  • ENH: A new switch, -UMB=<( Yes/No)> is used to specify where the linker expects the object files to be. Unless this switch is used the linker is assumed to look for the object files in the same directory as the source files. However if the linker that you use expects them to be all in the current directory, you can use -UMB=yes to ensure that the compiler places object files in the current directory.
  • ENH: A new switch, -modules=<( name)> is used create a Module List File.
  • CHG: When building the Build application itself, you must now add -version=BuildVerbose to the command line if you want an edition of Build that supports the -V (verbose) switch. As shipped, the pre-built editions of Build do not support the -V switch.

v2.10 -- 06/Apr/2006

  • FIX: The default Build Response File invoked when just placing '@' on the command line is now correctly named "build.brf"
  • ENH: For Windows environments, command line files can now use either "/" or "\" as path separator characters.
  • ENH: The linker program is now used directly rather than being invoked via DMD.
  • ENH: You can now specify the default linker switches in the Build Configuration File.
  • ENH: Using the new switch -PP , you can now specify additional paths to search for files.
  • ENH: Support for Ddoc files.
  • CHG: The files are now compiled and linked in the same order that they are scanned in. Previously the order depended on the hashing algorithm of D's associative array implementation and the names of the directories containing the source files.
  • CHG: The "-run" switch renamed to "-exec" to avoid clashing with dmd.

v2.09 -- 10/Aug/2005

  • FIX: thanks to barrett9h (rodolfo): Now correctly handles the return value from Unix system() call.
  • FIX: thanks to oniony: Now handles non_ASCII characters in PATH environment symbol.
  • CHG: The "-silent" switch now also hides the linker stdout display.
  • CHG: Now supports and requires DMD v0.126 and GDC v0.13 or later.
  • ENH: New pragma(export_version) allows specified version identifiers to be passed to all modules being compiled.
  • ENH: New command line switch "-run" to run the program after a successful link.

v2.08 -- 29/May/2005

  • FIX: thanks to teqdruid: In Unix environments, any pragma(link, <name>) statements were not sending the correct syntax to the compiler's command line. The "<name>" is now prefixed with "-L-l" for Unix systems.
  • FIX: thanks to Carlos: In Unix environments, any "-version" switch on the Utility's command line was not being converted to the correct Unix format of "-fversion...". So now, if the Build tool gets either "-version..." or "-fversion=..." on its command line, it will recognise it as a 'Version' request for the compiler and output it on the command line in the correct format for the environment it is running in, namely "-fversion..." for GNU (gdc) and "-version..." for Windows.

Note: The same applies to the "-debug..." and "-fdebug..." switches.

  • FIX: The pragma(nolink) was being ignored under some circumstances. Now it splits the compilation phase from the linking phase and excludes the 'nolink' files from the linker's command line.
  • FIX: thanks to kris: 'debug' statements were not being taken into account when examining code for import statements.
  • FIX: 'debug' and 'version' levels are now being taken into account.
  • FIX: 'debug' and 'version' values being set inside a source file were being made global rather than module scoped.
  • FIX: thanks to carlos: The utility was not processing the -I switch correctly when using GDC compiler.
  • ENH: The utility can now accept the -I switch in two forms: -I<path> and -I <path> on its command line, regardless of which compiler is being used. When invoking the compiler, it uses the correct format on the command line of the compiler being used, namely "-I<path>" to DMD compiler and "-I <path>" to GDC.
  • ENH: The path of any source file that imports a module will be added to the list of root paths to search for module source files. This means that you can now have module source files referenced relative to the source file that imports them. This is the new default behaviour but it can be turned off by using the new -noautoimport switch or for individual files by placing them inside parenthesis.
  • ENH: New switch -noautoimport is used to turn off the automatic adding of search roots based on the path of the source files being compiled.
  • ENH: New switch -LIBPATH= is used to add search paths for library files.
  • WARN: The utility only does a single scan of each source file and thus if an file sets a 'debug' or 'version' value after a function which uses that value, it will be ignored. You are requested to ensure that all your 'debug' and 'version' setting is done prior to the first module member.

v2.07 -- 06/May/2005

  • ENH: New switch -nodef to prevent the utility from automatically creating a Module Definition File (.def)
  • ENH: You can now specify default, and special, settings for the utility's command line. These are placed in a text configuration file called build.cfg. The utility first looks in the same directory as the utility's executable for the configuration file. After processing any configuration file found there, it then looks in the same directory as the compiler for a configuration file (build.cfg) and processes it if found.
  • ENH: To support special command line settings that may be specified in the utility's configuration file(s), you can indicate one or more setting groups on the command line. These take the format of +groupname. The configuration file(s) are scanned for special group settings after the default ones have been processed.
  • ENH: To remove an earlier specified command line switch, you can prepend it with a hyphen. This new feature may be needed when command line switches can come from multiple sources (the original command line, utility response files, and utility configuration files), and you need to remove a switch that may have been provided by some other source.

For example to negate an earlier "-unittest" switch you code add "--unittest" to the command line.

  • ENH: New switch -od is used to nominate a directory for temporary files. For the DigitalMars compiler, this also is used as the location to create object files.

v2.06 -- 04/May/2005

  • FIX: thanks to phoenix: When emitting commandline parameters for the compiler or librarian, it was possible to have some ending with \" which caused the shell to escape the quote character and thus provide incorrect parameters to the compiler.

v2.05 -- 02/May/2005

  • FIX: When supplying some forms of relative paths, the utility would crash or give the wrong canonical form of the path. This effected formats like \..\anything and C:..\anything
  • FIX: The utility now assumes the current directory if it can not locate the compiler using the paths on the system PATH symbol.
  • FIX: The utility now assumes the compiler's location if no path for the configuration file has been specified.
  • FIX: The utility now supports better parsing of the lines in the configuration file. It handles odd variations of embedded quotes.
  • ENH: The utility now supports Windows 95/98/ME for file times.

v2.04 -- 29/Apr/2005

  • FIX: thanks to Nils Hensel: The utility was not correctly parsing the DFLAGS line in the configuration file when it contained embedded quote characters.
  • FIX: thanks to Anders F Bjoerklund: The utility was not treating directory names that contained dots correctly.
  • FIX: thanks to Carlos: Unix-style files that end with a nested comment delimiter are now handled correctly.
  • ENH: thanks to qbert(Charlie): The location of the librarian tool can now be specified. It can be explictly named on a LIBCMD= line inside the DMD configuration file, or failing that, implictly assumed to be in the same directory as the DMD linker.
  • ENH: A new commandline switch -LIBOPT which allows you to pass commandline options to the librarian.

v2.03 -- 20/Apr/2005

  • FIX: thanks to Carlos: The linux build had a spelling mistake in source.d (line 286). The indentifier "lNextMod" should have been coded as "lNextModule".

v2.02 -- 19/Apr/2005

  • FIX: thanks to Carlos: The utility was not handling the situation where a simple statement, rather than a block statement, followed a version directive.
  • FIX: thanks to aldacron: The utility now respects the compiler's 'Output file' switch. Which is '-of[filename]' for DMD and '-o [filename]' for GNU. The utility treats it as an alias for its -T switch.
  • FIX: thanks to aldacron: The utility now respects the DMD compiler's 'Object Path' switch. If you have '-odsomepath' on the command line, the utility adds this to the search path when checking for up-to-date files, and will clean up files in that directory if requested to (-clean). It will also create the directory if it doesn't exist.

v2.01 -- 18/Apr/2005

  • FIX: thanks to Justin (jcc7): If an excluded module (-X) was in a package at the current directory level, it was not being excluded.

v2.00 -- 08/Apr/2005

  • FIX: Now supports the raw-string delimiter ` in Build's own pragma commands.
  • FIX: Now handles backslash escapes in Build's own pragma commands.
  • ENH: New -silent switch avoids all unnecessary messages.
  • ENH: New -help switch displays full usage text. Aliases: -h, -?

v1.19 -- 04/Apr/2005

  • FIX: thanks to Ben Hinkle. When creating a library in Linux, the utility was looking for .obj files instead of .o files.
  • FIX" When creating a library, if a source file had more than one .d in its name, the utility would look for the wrong object file for it.

v1.18 -- 03/Apr/2005

  • FIX: If mixed case was used, it was possible to have duplicate element types in a OptLink module definition file. Effected the use of pragma(build_def).
  • ENH: Some performance improvements.

v1.17 -- 30/Mar/2005

  • FIX: In Windows systems, the utility now does case-insensitive path name compares.
  • FIX: A bug in the String Search function crashed the utility when the -T switch was used with target names less than 9 characters long.
  • ENH: The new switch -obj is available. This is just a shorthand for having both -nolib and -nolink on the command line.

v1.16 -- 28/Mar/2005

  • FIX: The utility now handles quotes around pragma(link) references.
  • FIX: The utility now handles multiple references to the same module even though they are using different 'path' specifications.
  • ENH: The utility now has support for making Windows DLL files.

v1.15 -- 24/Mar/2005

  • FIX: The utility now checks for more recent libraries and object files as added by pragma(link), pragma(build), and command line. It didn't used to rebuild the executable if only a new version of a library was present.
  • FIX: The order of the librarian parameters was incorrect.
  • FIX: The utility was not using the correct path name if importing modules from some Import paths.
  • ENH: Verbose mode now shows the ignored and noticed packages.

v1.14 -- 23/Mar/2005

  • FIX: Thanks to teqDruid. For GNU platforms, the utility now passes any library name found in pragma(link,...) to the linker.
  • FIX: Nows correctly handles unix and Microsoft line-ends.
  • FIX: Thanks to Ben Hinkle. Using relative paths '..' and '.' now work correctly on the -I switch.
  • FIX: Thanks to Ben Hinkle. The correct librarian program 'ar' is now called on unix systems.
  • ENH: The new switch -names displays the names of the files used in building the target. This is not a noisy as verbose mode.
  • ENH: New pragma include used to identify a file that must be included in the compilation process but is not one that is imported by any file in the group. Only needed if command line file does not otherwise import the required file. Can be used to include the file containing the 'main' function from a file that does not import that file. Rarely needed.
  • ENH: New pragma build used to build 'foreign' file types that D doesn't know about.
  • ENH: New pragma target used to nominate the default target file name.
  • ENH: You can now use a symbolic target name on the -T switch.

v1.13 -- 13/Mar/2005

  • FIX: Explictly included paths entered on the -I switch are now added to the dmd command line.
  • FIX: Explictly excluded modules (via -X) were only checking package names. They also check for module names now.
  • FIX: Imported files are now looked for relative to the current directory before the import paths are checked.
  • FIX: The utility now checks the DFLAG environment symbol in non-DigitalMars D compilers.
  • CHG: The switch -nounittest is now deprecated and ignored if used. The default setting is no longer to compile with unittests turned on.

v1.12 -- 6/Mar/2005

  • FIX: The response file (-Ry) is now only the default when using DigitalMars tools on Windows. All other environments do not use the response file by default.

v1.11 -- 4/Mar/2005

  • FIX: No long outputs empty compiler tool switches.

v1.10 -- 4/Mar/2005

  • FIX: Thanks to Carlos. Better support for GDC command line switches.
  • FIX: Thanks to Carlos. Cause 'Unix' version to trigger Posix code.
  • FIX: Thanks to Carlos. The vUseResponseFile variable was only being declared in the Windows version.
  • FIX: No passes space-embedded switches and paths to the compiler tools correctly.
  • ENH: If an environment symbol called DFLAGS has been defined, it is analyzed. This is done before any configuration file processing.
  • ENH: New command line switch -test. This shows the command lines instead of running them. No compiling or linking is done.

v1.9 -- 3/Mar/2005

  • FIX: Thanks to Carlos. For unix, it now uses ':' instead of ';' for path separators when parsing the configuration file lines.
  • FIX: Thanks to Carlos. The default location for the configuration file was being ignored.
  • ENH: A new command line switch -R used to control the use of a response file for the compiler tools.

v1.8 -- 1/Mar/2005

  • FIX: Thanks to Anders F Bjoerklund: Removed nonASCII chars from source code.
  • FIX: Thanks to Anders F Bjoerklund: Changed version(GDC) to version(GNU)
  • FIX: Changed compiler name for GNU versions from 'dmd' to 'gdc'
  • FIX: Thanks to Carlos. The application was incorrectly parsing the DFLAGS sc.ini line.
  • ENH: Thanks to Anders F Bjoerklund: Provided a Makefile for the initial compile of the application.

v1.7 -- 28/Feb/2005

  • FIX: Thanks to clayasaurus. Linux edition was not compiling due to a missing 'version(Windows)' block around the use of vWinVer

v1.6 -- 28/Feb/2005

  • FIX: Thanks to Kris. The utility was not including the DCPATH value when invoking the compiler.
  • ENH: When building a Windows app, the .DEF file now includes the version of windows that this application is being run on.
  • ENH: The command line switch -gui can now have an optional version information to specify which Windows version to build for. The default Windows Version used is the one for the version running this utility.
  • ENH: New command line switch -info to display the utility's version #.

v1.5 -- 25/Feb/2005

  • FIX: Thanks to clayasaurus. Now only displays the CFPATH and DCPATH messages when verbose mode is on.
  • FIX: Thanks to kris. Hardcoded default for DMD path was misleading when dmd.exe was not in the Windows PATH.
  • FIX: The utility was not correctly parsing empty raw strings .
  • ENH: Thanks to kris. If the -DCPATH switch is used, then if the existing DCPATH and CFPATH are the same, this switch changes both.

v1.4 -- 24/Feb/2005

  • FIX: Thanks to Abscissa. The -version switch was being interpreted as a file to compile.
  • FIX: Thanks to brad. Linux version was using the wrong package name when formatting a file date for display.
  • FIX: Thanks to brad. Linux version was not setting the target name correctly which resulted in the first source file being compiled twice.
  • FIX: Thanks to brad. Parsing the DFLAG line in the dmd options file was not dealing with whitespace delimiters.
  • ENH: When specifing an alternate target file, you can now also specify a path for the target, and that path is created for you if it doesn't exist.

v1.3 -- 23/Feb/2005

  • ENH: Put in a workaround for DMD (Windows) not using the sc.ini file correctly. The utility now explicitly adds any DFLAG options from the sc.ini file into the .rsp file.
  • FIX: The utility now correctly handles ';' delimited DFLAG options in the sc.ini file.
  • ENH: Now supports the use of 'response' files on the command line
  • ENH: Now supports the -T command line switch to supply an alternate tareget name.

v1.2 -- 21/Feb/2005

  • ENH: Thanks to Anders F Bjoerklund: Added better support for 'darwin' and 'gdc'.