Menu

SCons 0.96 adds F90/F95, better debugging, plus lots more

SCons release 0.96, the seventh SCons beta release, is now available for download. SCons is a software construction tool (build tool, or substitute for Make) implemented in Python, based on the winning design in the Software Carpentry build tool competition (in turn based on the Cons build tool). This release most notably adds support for Fortran 90 and Fortran 95, improved support for building with Qt, new platform-independent file manipulation actions, and significant debugging features.

IMPORTANT: Release 0.96 contains the following interface changes:

  • All Builder calls now return a list of Nodes, even when the Builder only builds one file. This may require SConscript file changes if you were manipulating the return values from Builders.
  • The SConsignFile() function now uses a different internal database format by default. This will cause a rebuild when you upgrade to 0.96 unless you modify your SConsignFile() call.
  • The internal format of .sconsign files has been changed. The change was coded to be backwards-compatible, but there might be corner cases that cause warnings about "ignoring corrupt .sconsign files" and rebuilds when you use SCons 0.96 for the first time in an already-built tree.
  • The scan_check function that can be supplied to a custom Scanner now must take two arguments, the Node to be checked and a construction environment. It previously only used the Node as an argument.
  • The internal "node_factory" and "scanner" keyword arguments have been removed
    from the Builder() function, in favor of separate "target_factory," "source_factory," "target_scanner" and "source"scanner" keywords, which are now documented.
  • The Scanner add_skey() function has been dropped in favor of using construction variables for the lists of file suffixes known to a Scanner.
  • File name extensions that contain all digits are now assumed to be version numbers and treated as part of the file basename.
  • The env.Append() and env.Prepend() methods have been changed to behave like the rest of Python when either argument is a UserList.

See the release notes for more information about these changes.

This release adds the following new features:

  • A new --debug=explain option tells SCons to report the reason(s) why it thinks it must rebuild something.
  • New Moc() and Uic() Builders provide more explicit control over Qt builds, plus new construction variables to control them: $QT_AUTOSCAN, $QT_DEBUG, $QT_MOCCXXPREFIX, $QT_MOCCXXSUFFIX, $QT_MOCHPREFIX, $QT_MOCHSUFFIX, $QT_UICDECLPREFIX, $QT_UICDECLSUFFIX, $QT_UICIMPLPREFIX, $QT_UICIMPLSUFFIX and $QT_UISUFFIX.
  • Support for Fortran 90 and Fortran 95 has been added.
  • The newer "ifort" versions of the Intel Fortran Compiler for Linux are now supported.
  • New functions have been added to return platform-independent Actions that Chmod(), Copy(), Delete(), Mkdir(), Move() and Touch() files and/or directories.
  • A new Execute() function can now execute Actions directly at SConscript-read time.
  • A new $RPATH variable has been added that specifies a list of directories for
    the GNU and IRIX linkers to search for shared libraries.
  • New $CPPSUFFIXES, $DSUFFIXES, $FORTRANSUFFIXES and $IDLSUFFIXES variables have been added that make it easier to arrange for additional file suffixes to be scanned by the default Scanners.
  • A new Flatten() function can be used to turn nested lists of Nodes (or other arguments) into a flat list.
  • A new --debug=presub option prints the commands to be executed before their construction variables are expanded.
  • A new .win32 Node attribute will expand file names with Windows backslash path separators on any system.
  • A new ARGLIST variable makes it possible to fetch keyword=value arguments in the order specified on the command line.
  • Support has been added for the .dylib shared library suffix and -dynamiclib linker option on Mac OS X (darwin).

This release enhances the following existing features:

  • Environment override keywords can now be passed to the Command() Builder.
  • An emitter argument to a Builder() can now be a list of emitters that will be
    called in sequence.
  • The Java() Builder can now take more than one source directory.
  • Scanners can now use suffix lists from construction variable expansions.
  • ParseConfig() now recognizes the -Wa, -Wl, -Wp and -pthread flags and adds them to the appropriate variable(s).
  • Dir (directory) Nodes can now be be created with user-specified Builder objects.
  • The SConf.CheckLib() method can now search a list of libraries.
  • The env.WhereIs() method now takes a "reject" argument to weed out specific path names.
  • When calling Builders, SCons now issues a warning upon use of the keywords "targets" and "sources", which are virtually always typographic errors that otherwise silently (and confusingly) turn into construction variable overrides.
  • The $ASCOM, $ASPPCOM, $LINKCOM, $SHLINKCOM, $ARCOM, $LEXCOM and $YACCCOM variables all have wrapper Actions by default. This makes it easier to replace the default print behavior with a custom strfunction().
  • Individual tools that create libraries now override the default $LIBPREFIX and $LIBSUFFIX values set by the platform. This makes it easier to use Microsoft Visual Studio tools on a CygWin platform.
  • If Visual Studio is installed, SCons now assumes its C/C++ compiler, its linker and its MIDL compiler are available, too.
  • SCons now searches for the ICL license file path name in the external environment and the registry before resorting to the hard-coded path name.
  • When using Visual Studio, SCons now generates the PDB files at link time, not
    compile time.
  • Dependency tracking has been modified to eliminate spurious circular dependencies in certain corner cases involving generated header files, and to avoid rebuilding generated .h files when a #included .h file changes.
  • The internal Task.make_ready() method now creates a list of the out-of-date Nodes for the task for use by the wrapping interface.
  • A new single_source keyword argument when creating a Builder enforces a single source file on calls to that Builder.

The following fixes have been added:

  • The CacheDir() directory is now created if it doesn't exist.
  • Construction variables can now be substituted in $LIBS expansions, and $LIBS expansions now properly ignore null library values.
  • Construction variables that can be searched for libraries now remove .dll files from the list before feeding the list to Win32 compilers.
  • All *PATH variables can now expand to include Nodes.
  • The name of a Scanner.Classic instance is now initialized correctly.
  • SCons now handles dangling symlinks without generating a stack trace.
  • env.SourceCode() now works properly when called with an individual file name or Node, not just with a directory name or Node.
  • SCons now handles the lack of an external PATH environment variable.
  • Use of $MSVS_IGNORE_IDE_PATHS was broken in 0.95 and is now fixed.
  • The Command() global function now works properly with string actions; this was broken in 0.95.
  • A bug introduced in 0.95 in building shared libraries under MinGW has been fixed.
  • SCons now handles null entries (None or '') in tool lists or CPPPATH.
  • SCons now handles exceptions in thread-safe ways, according to Pythonic standards.
  • Error messages have been improved when the evaluation of a construction variable expansion yields a Python syntax error.
  • File names on command lines are now escaped properly when the expansion is concatenated with another string.

Performance has been improved as follows:

  • Node creation has been sped up when calling a Builder by comparing whether environments are the same object, not whether they have equivalent construction variables.
  • File system Nodes now cache their generated string values after we've finished reading the SConscript() files.
  • Node lookup has been made slightly more efficient.
  • Deleting parents' implicit dependencies after a Node has been built has been made more efficient.

The documentation has been improved:

  • The User's Guide has had the following chapters and sections added: A chapter
    describing how to install Python and SCons; a section describing the declarative nature of SCons functions in SConscript files; a chapter describing File and Directory Nodes and the return values from Builders; a chapter describing the SConf (Autoconf-like) functionality; a chapter describing Java builds.
  • The early chapters of the User's Guide have been reorganized to better explain concepts for new users (based on input from Robert P. J. Day, many thanks).
  • User's Guide fixes: the signatures of the various example *Options() calls; triple-quote properly a multi-line Split() example.
  • Man page additions: an example and explanation of how to use "tools = ['default', ..." when creating a construction environment; a section describing File and Directory Nodes and some of their attributes and methods; a section describing use of the target_factory and source_factory keyword arguments when creating Builder objects.
  • Man page fixes: formatting typos, misspellings, fix a bad example.
Posted by Steven Knight 2004-08-18

Log in to post a comment.