A list of changes and fixes that have been made.
- ** 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.
- ** 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.
- ** FIX: Ticket #27 When using 'gcc' as the linker tool,
the utility 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.
- ** 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 utility
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.
- ** FIX: The default Bud 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 Bud 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.
- ** 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.
- ** 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 utility 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.
- ** 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.
- ** 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.
- ** 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.
- ** 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: /i"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.
- ** 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".
- ** 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.
- ** FIX: /i"thanks to Justin (jcc7)": If an excluded module (-X) was
in a package at the current directory level, it was not being excluded.
- ** FIX: Now supports the raw-string delimiter ` in the utility's own
pragma commands.
- ** FIX: Now handles backslash escapes in the utility's own
pragma commands.
- ** ENH: New -silent switch avoids all unnecessary messages.
- ** ENH: New -help switch displays full usage text. Aliases: -h, -?
- ** 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.
- ** 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.
- ** 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.
- ** 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.
- ** 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.
- ** 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.
- ** 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.
- ** 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.
- ** FIX: No long outputs empty compiler tool switches.
- ** 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.
- ** 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.
- ** 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.
- ** FIX: Thanks to clayasaurus. Linux edition was not compiling
due to a missing 'version(Windows)' block around the use of vWinVer
- ** 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 #.
- ** 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.
- ** 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.
- ** 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.
- ** ENH: Thanks to Anders F Bjoerklund: Added better support for 'darwin'
and 'gdc'.