JamPlus 0.3 Released

Added by Joshua Jensen almost 11 years ago

It has been a while since JamPlus 0.2 released, but we've been busy. On top of a number of bug fixes, JamPlus 0.3 is the first JamPlus to have Mac OS X support. There is still more to be done (XCode project generation, templates for Carbon and Cocoa apps, iPhone building support), but the ability to build on Mac OS X is exciting.

We are putting together the roadmap for JamPlus 0.4 now. We'll add 0.4 items to the Issue Tracker as soon as we know what we're building next.

Version 0.3

Changelog available with links at http://redmine.jamplex.org/git/jamplus/docs/html/changelog.html.

New features for 0.3:

  • Mac OS X build mostly works, but there is still a lot of work to build in the necessary rules to create a full Carbon or Cocoa app.


  • jmake.cmd now detects VS2005 or VS2008, so starting vsvars32.bat is not needed.
  • Makefile and Makefile.Windows now both include Makefile.Common, so they only define compiler and flags, and Makefile.Common defines what to do.
  • jmake.cmd now checks for different versions of MSVC using both registry values and envvars.
  • Added clean.cmd, used to clean bootstrapping results.
  • Bootstrapped Jam builds as a releaseltcg configuration.
  • Force make invocations to specify a platform.


  • Large number of documentation updates, including the documenting of the Jam modules.

Jam Executable:

  • Until it can be fixed, turned off a broken optimization when scanning paths. On a no-op build with Noel's test, this saved 1/10 of a second. Unfortunately, there were corner cases that caused the optimization to choke.
  • In the Subst rule, handle the case where the replacement string isn't specified and instead, treat it as an empty string.
  • New patch from the mailing list at http://maillist.perforce.com/pipermail/jamming/2003-December/002252.html as suggested by Andreas Fredriksson. #ifdef'ed as OPT_CIRCULAR_GENERATED_HEADER_FIX.
  • Add OPT_ACTIONS_WAIT_FIX using the patch found at http://maillist.perforce.com/pipermail/jamming/2003-December/002252.html.
  • glob.c: On Windows machines, glob files in a case insensitive manner.
  • Allow nested response file generation; that is, when expanding a variable to generate one response file, other response files may be embedded.
  • Apply the HDRFILTER to cached header lists, too. This allows a complete list to be stored within the dependency cache file, and then the list can be filtered to whatever the build scripts desire. Previously, the filtered list was stored in the dependency cache file, and there was no way to apply an alternate algorithm at a later point.
  • A few -= bug fixes.


  • Defaulted the build configuration to release instead of debug.
  • Fix to change the colon following a drive letter to a -- for the output directory in MultiCppCompile when outputastree is turned on. This happens when absolute paths are passed into MultiCppCompile.
  • Fixed SharedLibraryFromObjects (called from Library with the shared option) from causing a circular dependency: targetname -> targetname.lib -> targetname.
  • The Library rule has a new nodefaults option. Currently, its only use is to avoid adding /SUBSYSTEM to the link flags in Visual C++ builds.
  • The Library rule has a new nomanifest option to turn off the embedding of a manifest in Visual C++ 8.0 and 9.0 builds.
  • The Library rule has a new noexportlib option that turns off the insertion of the writing of the export (import) library.
  • For a library, append the SUFLIB instead of using the :S modifier. This fixes library names that have periods in them.
  • ObjectCFlags and ObjectC++Flags now only apply their flags to files of the appropriate types.
  • Fix a bug in CFlags and ObjectCFlags where flags weren't being applied properly.
  • Add NoWorkspace rule.
  • For Visual Studio 2005 and 2008, use an incremental manifest embedding technique for Debug builds. For Release builds, use the simple mt.exe -outputresource technique.
  • Handle proper manifest embedding in DLLs by applying the ;2 modifier to the tool.
  • After checking the OutputPostfix for the current target, check the * target for a global override.
  • Handle relative paths specified for the LinkDirectories rule.
  • New rule DefFile. Adds support for using .def files for DLL exports.
  • When compiling resources with rule ResourceCompiler PARENT : SOURCES [ : OPTIONS ], pick up defines, flags, and include directories from the .rc file, the pseudotarget parent, and the * global target.
  • Resource Compiler: If any of the defines, flags, or include directories change from the last Jam run, rebuild the resource.
  • Rules RcDefines, RcFlags, and RcIncludeDirectories accept either 2 or 3 parameters. If 2 parameters are specified, the options are applied to TARGET. If 3 parameters are specified, the options are applied to RESOURCE_NAME.
  • SourceGroup can accept an optional TARGET, using the active target if TARGET isn't specified.
  • * Possibly breaking change... let me know if it is an issue. ** JamToWorkspace was architected to work when the SubDir root was preloaded with an absolute path. With the Jambase rework within JamPlus, it expected the same thing. This blows up when JamToWorkspace is not used and when a build is run from the root Jamfile. This change makes a generated SubDir root an absolute path. It works in all cases I've tried.
  • Make Application and Library pay attention to changes in the link flags, libraries, or objects. When a change is made from the last build, the executable or library is relinked (or rearchived).
  • When detecting MSVC versions, Jambase.jam now tries envvars, not just the registry. Seems that some installations don't have appropriate keys in the registry, and some don't have the envvars, so this should work for both.
  • In cases where LOCATE_TARGET isn't set, the vcx0.pdb files didn't get cleaned up. This is now fixed and prettier than before.
  • When calculating the absolute path from the relative path in OutputPath, handle the case where SUBDIR hasn't been set.
  • Library accepts an option 'module'. When specified on OS X, a bundle is created. For other platforms, a module is created just like a normal shared library.
  • New configuration 'releaseltcg', a Release build with Link Time Code Generation support. Access it with the Jam command line option -sCONFIG=releaseltcg.
  • Added .idl support. Tested with both Workspace Whiz and LuaPlus.
  • Add regserver option to Library for shared libraries. On Windows, regsvr32 is run during the build to automatically register the DLL with the system. When cleaning, regsvr32 /u is run.
  • Remove the .intermediate.manifest file on Clean for all configurations (not just Debug).
  • CRuntimeType only worked for the * target. Now it works for project targets, too.
  • Add support to BatchCompileGroupSize to handle the ActiveProject rule.
  • In the Library rule, the dependency chain was broken for the noexportlib option.

Jam Modules:

  • New CSharp Jam module: Adds rules CSharpAssembly, CSharpApplication, CSharpLibrary, CscDefines, CscFlags, ReferenceAssemblies, and ReferencePaths.
  • DirectX module: It is now a requirement to specify the link option to get the proper DirectX link directories in your path. Previously, this happened automatically, applying link flags even to static libraries.
  • DotNet module: Add VS2008 support.
  • MFC Jam module: Add the atlmfc/ path to the resource compiler includes.
  • MFC module: It is now a requirement to specify the link option to get the proper MFC link directories in your path. Previously, this happened automatically, applying link flags even to static libraries.
  • Midl Jam module: New rules MidlFlags and MidlCompiler for building .idl files.


  • Handle more than one workspace containing the same project.
  • Because libraries and executables were getting added to the 'all' target, sometimes unintended builds would happen when generating a workspace. This dependency has been removed.
  • Remove duplicate projects from the same workspace.
  • Fix from Lucas Meijer for handling ActiveProject specified targets with LinkLibraries.


  • Added a csharp-windowsforms sample which illustrates the new CSharp module.
  • Updates to tests/compile_outputastree/ to make a Jamrules.jam with the ProjectSubDir rule in it. The reasoning behind all this is described in a forum thread.
  • tests/compile_outputastree/: Add libc project that globs files in a generic and platform-specific manner. This illustrates another point from a forum thread.
  • Add tests/dependency/more_than_one_target.jam.
  • Add tests/manifest_generation/. Provided by Chris Chapman.


  • SourceGroups weren't being written out correctly and didn't work when JamToWorkspace was run.