JamPlus: JamPlus 0.3 Released (68 comments)

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

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 as suggested by Andreas Fredriksson. #ifdef'ed as OPT_CIRCULAR_GENERATED_HEADER_FIX.
  • Add OPT_ACTIONS_WAIT_FIX using the patch found at
  • 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.

JamPlus: JamPlus 0.2 Released (66 comments)

Added by Joshua Jensen about 11 years ago

New features for 0.2:

  • Visual Studio 2005 and 2008 solution and vcproj files.


  • In some manner, every JamPlus feature is documented (we hope).

Jam Executable:

  • Fixed a 'don't know how to make' bug when trying to create the subdirectory . (period)
  • Fixed an MD5 network cache issue in filecache_fillvalues. Reported by Jan van Valburg.
  • Fixed the -T command line option which, in turn, fixed the -t command line option.
  • Added the MightNotUpdate flag to work as a single target alternate to Needs.
  • Fixed directory file pattern match for $(dir/:W).
  • Fixed variable expansion modifier issues when extra colons are present.
  • Altered the way the :I= and :X= variable expansion modifiers work to better fit the documentation.
  • Addded the :T variable expansion modifier to expand to the bound name.
  • For the :W modifier, grab the files earlier in the variable expansion.
  • Only compile a given regular expression once. This existed in the original version of the header scanning code but not the HDRPIPE version.
  • Optimized retrieval of directories from the timestamp() code. This results in a very limited number of file queries for directories that cannot possibly exist. See OPT_TIMESTAMP_EXTENDED_PARENT_CHECK_EXT.
  • Fixed path delimiter in pathunix.c.
  • Made UseMD5Callback a built-in rule, instead of having it sit in the Jambase.
  • Removed the need to compile and link against the LuaPlus library when the Lua support was turned on.
  • Added Subst rule, based on Lua's string.gsub.
  • Added CppCompileOptions.
  • Bug fix for multiple passes.


  • Re-added basic MinGW support, accessible by setting the COMPILER variable to mingw.
  • SubIncluding a given Jamfile only happens once.
  • Exits when an incorrect platform or configuration is specified.
  • Added OutputPostfix, OutputPostfixClear, and OutputSuffix.
  • For Visual Studio 2005, made the Microsoft .NET SDK include and library paths available.
  • WINDOWS was not a side-by-side define with WIN32. Fixed.
  • Attempt to load a Jamrules-style file called .jamrules.
  • Fix import library dependencies for DLLs.
  • Allow an additional optional SubDir parameter denoting a 'target' in the grist. LOCATE_SOURCE, LOCATE_TARGET, and SOURCE_GRIST all append it.
  • IncludeModule: Modules can only be included once.
  • Added ReferenceDirectories for .NET references.
  • Added BatchCompileGroupSize. The default batch compilation group size is unlimited.
  • Fixed precompiled header support to allow precompiled header .cpp files with relative paths attached to the name. Uses the BINDING to control the output location.
  • Assign LINK_TARGET variable to the TARGET when setting up an executable or shared library link, so later post-build steps can get access to the binary without a complex look up.
  • Library's OPTIONS now accepts 'noexportlib'.
  • Re-added ObjectCFlags and rule_ObjectC++Flags "ObjectC++Flags".
  • Added rule_FGristDirectories "FGristDirectories" rule.
  • Lump rule handles .cxx.
  • PrecompiledHeader rule accepts a shortened version where the .cpp and .h are determined by a single parameter.
  • Optimization - Don't scan inside .lib files, since the .obj files are present by default.
  • Major C/C++ compilation optimizations.
  • Fix support for .c precompiled headers.
  • Add CRuntimeType to change between statically linked and dynamically linked C runtimes for Visual C++.
  • Remove VC5 support, since I have no way of testing it.
  • Change grists to be project level and not subdirectory level.
  • LINKDIRECTORIES was set up wrong and put in the global variable list. This is corrected now, and the initial LINKDIRECTORIES is assigned to *.
  • Moved DEFINES down with the platform they represent.
  • Change <dir> grist to <!dir!>.
  • Minor clean up for calculation of MSVCNT and MSVCNT_PATH.
  • Moved the MSVCNT_PATH first in the PATH.
  • Get rid of top-level dependencies that don't mean anything.
  • Removed unused script and targets.

Jam Modules:

  • MFC module: Removed automatic ATL and MFC include and library paths. IncludeModule MFC to access the paths and apply ATL/MFC support to a target.
  • DirectX module: Removed automatic DirectX include and library paths and added DirectX module. IncludeModule DirectX to apply DirectX support to a target.
  • wxWidgets module: Minor fix when generating the target name.
  • wxWidgets module: Added contrib libraries support. Only supports stc for now.
  • DotNet module: Add StrongName rule.
  • CopyDirectory and CopyFile modules: When generating a workspace that uses CopyDirectory and CopyFile, files would get copied. Both rules now guard against that during workspace generation.


  • For the source Jamfile path, handle the case where Jamfile.jam is not specified.
  • When a project is specified as existing in a workspace but has not been defined, pop up an error message instead of crashing.
  • Handle quotes inside the preprocessor defines.
  • Fix JamToWorkspace conversion when the target name is implicit and specified through ActiveProject.


  • Make the batch maxtargets sample a little more clear.
  • helloworld test that is slightly more complicated than the helloworld sample app.
  • Add md5test.jam in tests/md5/.
  • Add tests/expand/expandtests.jam.
  • Very simple generatedheader test added.
  • tests/source_and_jamfiles_separate example added.
  • Batch file in samples/sharedlib/ to create a CodeBlocks MinGW project.
  • Lua parsing phase examples in tests/lua/testluaparser.jam and tests/lua/testluaparser.jam.lua
  • Added tutorial 02-helloworld-static.
  • Useful output in the filecache_luamd5callback test.
  • tests/compile_outputastree/ - Fix obj/ output location.
  • Add .fx compilation sample.

JamPlus: PopCap Framework JamPlus Build (86 comments)

Added by Joshua Jensen over 11 years ago

Another example project illustrating JamPlus' usage with the PopCap Framework can be found on the ExampleProjects page.

JamPlus: Initial release of Jamplus (146 comments)

Added by Joshua Jensen over 11 years ago

Jamplus 0.1 was released this evening. Jamplus was patched ground up from the original Perforce Jam 2.5. Certain features, as discussed on the mailing list, are not in this version. They will follow soon.


Also available in: Atom