Release notes

Change Log and Notes

Version 1.3.337 (20160523)

Added:

  • ^java() executor support for OpenJDK.

Version 1.3.336 (20160519)

Added:

  • API support to add and remove environment variables to ShellExecutor.

Fixed:

  • Recursive code generator invocation when originally called with arguments and model file contained code generator reference.

Version 1.3.331 (20140908)

Fixed:

  • ANT executor when JDK not found and ANT_HOME not set.
  • Allowed <major>.<minor> version numbers for g++.
  • Added UNICODE to ASCII support in slugify when Normalizer present in JRE.
  • Process executor bug when environment variable is added.

Version 1.3.328 (20131104)

Added:

  • support for Oracle's SolarisStudio compilers on Solaris 11. Previous versions could not locate the compiler in their new default location.

Version 1.3.323 (20130214)

Fixed:

  • option element of C++ compiler task now handles compileandlink phase correctly.

Version 1.3.322 (20130124)

Changed:

  • ^ant()executor can now be initialized with ANT directory rather than just the ANT launcher.
  • ^msvc()executor now understands version number 2012, corresponding with MSVC++ 17 from VisualStudio 2012.

Version 1.3.321 (20130123)

Fixed:

  • ^junction() and ^juggernet()executors were still using old commandline switches.

Version 1.3.314 (20120722)

Fixed:

  • ^cpp() executor's <resource> option when building with MinGW compiler.
  • ^codegen() executor now supports command property setter and commands other than -cpp and -dotnet.

Version 1.3.308 (20120507)

Added:

  • added MinGW support for C++ compiler task.

Changed:

  • temporary archive is linked in with -Wl,--whole-archive option for executable targets, not just for shared library targets.

Version 1.3.307 (20120327)

Added:

  • trim transformer to get rid of leading and trailing whitespace.
  • empty selector to filter for null or empty string.
  • startswith() selector to filter for certain leading strings.

Version 1.3.306 (20120216)

Fixed:

  • "off by 1" error in token end of [] node qualifiers. Yielded incorrect token end in expressions that end in a [] node qualifier.

Version 1.3.305 (20120214)

Added:

  • TerpParser.getTokenEnd() to allow detection of partial parse.

Version 1.3.304 (20120125)

Changed/Fixed:

  • C++ compiler task's <target> element's installname attribute now works without a version being specified.

Version 1.3.303 (20120122)

Fixed:

  • ^file().lines now works for all combinations of end-of-line.
  • reimplemented severe warning suppression to avoid concurrency issues.

Version 1.3.301 (20120103)

Fixed:

  • ^guid() now works for initialization from {} enclosed ids and bare ids.

Changed:

  • import executor now uses template caching.

Version 1.3.299 (20111227)

Added:

  • ^junction() and ^juggernet() converters that return a Codemesh code generator executor properly set up for a transformation.

Version 1.3.298 (20111209)

Fixed:

  • bug in <sourcecodeprep> and other filter tasks (context issue). Involved general fix in TerpProjectHelper.

Added:

  • namefy formatter to remove space and convert non-word characters to underscores.

Version 1.3.293 (20111130)

Fixed:

  • bug in <foreach> <break/> task (did not break loop).
  • added synchronization to evaluation context to make cincurrent use of
    context on multiple threads safer.

Changed:

  • ^bool converter now converts empty string to false rather than null.

Version 1.3.292 (20111005)

Fixed:

  • bug in C++ compiler task when generating dependencies on MacOS-X with universal as processor architecture. Now only using first architecture for dependency generation.
  • bug in C++ compiler task for g++ on MacOS-X when linking dynamic libraries (-Wl,-Bdynamic removed from build options).

Version 1.3.291 (20110926)

Fixed:

  • ^jdk() and ^jre() can now discover 64-bit installations on Windows.
  • ^jdk() now successfully discovers JDKs that are not related to the JRE used to run terp.
  • bug in version recognition for ^jdk(1.7) and ^jre(1.7) converters.

Version 1.3.283 (20110825)

Fixed:

  • forspeed optimization option for amd64 on Solaris.
  • various assignment operators had incorrect return types when invoked with mixed types.

Version 1.3.238

Added:

  • FeedbackManager to support commandline feedback for terp-based tools.
  • Added s390 and s390x processor architectures.
  • Added base64 formatter.

Changed:

  • <resource> option for C++ compiler task now sets platform and processor architecture options that can be used in resource file to calculate build-specific string values.
  • Changed <terp.fail> display message.
  • Several C++ compilers now report compilation progress instead of quietly working till done.

Fixed:

  • <resource> option for C++ compiler task. Now supports static resource file.
  • C++ compiler task now handles .rc source files correctly.

Version 1.2.231

Fixed:

  • processor architecture determination on Linux now recognizes 64bit OS.
  • bug in linker commandline assembly when libraries are used but no other linker options are specified.

Version 1.2.225

Added:

  • bestcppdir formatter and executor allowing use of patterns to derive a directory name for the current compiler.
  • Several logging statements to C++ compiler task.
  • optional identity attribute for C++ task's <manifest> element

Changed:

  • added conversion path from empty collection to map: ^map({})
  • Logical expression arguments are now run through ^bool() converter before being processed.
  • Behavior when only dynamic sources are present in a C++ compiler invocation. Previously, no build action occurred because no regular sources were changed. Now, this is a special case and is always rebuilt.

Fixed:

  • broken dependency checker in C++ compiler task.
  • broken complex expression evaluation in determination of terp task run conditions (if and unless attributes).
  • broken libpath property for shell executor.

Version 1.1.220

Added:

  • validation API to Path datatype.

Fixed:

  • yet another problem with ANT1.8 property handling. Property value overriding of <terp.property> now works.
  • <include> and <libpath> options generated incorrect C++ compiler switches when path was empty.

Changed:

  • Scalar transformer API modified.
  • Added expandNoCatch() methods to TerpEvaluator.

Version 1.1.211

Added:

  • <disable> alias for nested <disabled> element in <warning> element.

Fixed:

  • bug in rvalue resolver for size
  • bug in Link phase error reporting for certain compilers.
  • documentation for nested <disabled> element in <warning> element of C++ compiler task.
  • all compiler options had broken unless condition.

Changed:

  • implementation of <optimize> for GNU and QNX compilers. Default enabled level is now -O2, forspeed results in -O3.

Version 1.1.210

Fixed:

  • Removed misleading exception trace when running with ANT 1.7.

Version 1.1.206

Added:

  • <terp.init> now supports an optional classname attribute. The classname is interpreted as the name of a type that performs terp-related initializations.
  • JunC++ion code generator task.
  • ANT integration attempts to auto-register JunC++ion code generator terp extensions.

Changed:

  • file template processing now supports files containing expressions. Use additional -t option to process files as text.
  • added logging to <foreach> task.
  • log level of first output lines in <msvc> compilations.
  • launcher APIs.
  • <resource> option template. Product version and file version now calculated differently.

Fixed:

  • <warning> option didn't support nested <disabled> elements and lacked aCC implementation.
  • <optimize> option was not working for qcc.
  • <terp.fail> does not print empty log messages in case of success.

Version 1.1.185

Added:

  • Support for template source types, i.e. types that provide an identifier-based lookup mechanism for the template that should be applied to them. This includes the new apply() executor.
  • Added linebreak transformer.
  • Added sorter abstraction to support collection ordering by criteria other than natural sort order..
  • Added -cmd and -script options to launcher.
  • Changed launcher trailing argument behavior to be interpreted as file if it exists.

Version 1.0.181

Fixed:

  • Documentation bug for expand transformer.
  • Bug in method resolution when String/Character literal ambiguity is present.
  • Layout stack leak.

Added:

  • Support for newly released ANT 1.8.0 (incompatible property handling scheme.)
  • C++ compiler support for MinGW (Minimalist GNU for Windows) g++.
  • Support for C++ compiler task initialization from an executable file name rather than a terp expression.
  • java.io.File serialization support.
  • Support for different parsing modes (text, script) in import executor.

Version 1.0.177

Fixed:

  • Several small silent bugs.
  • Discovery problem for C# and VB executors.
  • Plus operation of single string character and anything else returns null.
  • Documentation bug for C++ task <option> element.
  • Microsoft C++ compiler version parsing for German locale.

Changed:

  • Transformer API. Transformers now have to implement a transform() method that takes a TerpContext as a third argument.

Added:

  • an expand transformer to apply a template expansion to an object in an expression.
  • an export transformer to apply a template expansion to an object in an expression and write it to an output destination.

Version 1.0.172

Fixed:

  • Incorrect documentation for ${foreach} metadata elements.

Added:

  • ascii formatter to convert a unicode string to an ASCII string.
    This formatter comes in handy when generating source code (compilers typically don't like non-ASCII characters in identifiers) or filenames based on strings that might contain non-ASCII characters.
  • capitalize formatter to uppercase the first (N) character(s) of a string.
  • index variable in vector transformer evaluation.
    You can now refer to the position in the input collection via the index variable in addition to the this variable for the current element being transformed.
  • Discovery of Visual C++ Express.
  • better logging for C++ compiler discovery.
  • documentation enhancements.

Version 1.0.171

Fixed:

  • Microsoft resource compiler is now found in platform SDK.
  • /IMPLIB option now always uses correct platform path separator.
  • Several documentation bugs.

Version 1.0.170

Added:

  • DebugOption is now a CppFileCreating.
  • Cleanup now deletes object, .pdb and .manifest files.

Fixed:

  • Several documentation bugs.

Version 1.0.168

Added:

  • Optional synchronous attribute in C++ compiler task's nested <exceptions/> element to support both /EHsc and /EHa compiler switches.

Fixed:

  • Several bugs related to property handling.

Version 1.0.165

Added:

  • Optional <generatevsproject> C++ compiler option to support generation of VisualStudio project files.

Fixed:

  • Several small bugs related to quoted options.
  • Improved performance of dependency analysis.

Version 1.0.154

Added:

  • Optional mode attribute for <relocatable> C++ compiler option to support "small" and "large" modes (for example -fpic vs. -fPIC)
  • Optional <profile> C++ compiler option to support the building of an instrumented application for performance profiling.
  • Optional <boundscheck> C++ compiler option to support the building of an instrumented application to be analyzed by BoundsChecker.
  • BoundsChecker executor (^bc).
  • <terp.boundschecker> task to run BoundsChecker from within ANT and optionally fail build when errors are detected.
  • gprof executor (^gprof).

Fixed:

  • qcc lookup returns null when no compiler found or requested processor architecture is not supported (enhanced).
  • Changed <relocatable> C++ compiler option implementation for qcc. Now supports relocatable compilation for build targets other than shared library.

Version 1.0.149

Added:

  • Optional level attribute for <debug> C++ compiler option.
  • Added instrumentation to qcc lookup.
  • Implemented -verbose option for terp interpreter.

Version 1.0.147

Fixed:

  • qcc lookup returns null when no compiler found or requested processor architecture is not supported.
  • qcc dependency options were incorrect.

Version 1.0.144

Added:

  • support for endian-ness in processor architecture.
  • QNX Neutrino OS support.
  • QNX Neutrino qcc support.
  • runtime flavor attribute to support "abridged", "embedded", "standard C++", and "GNU" runtimes.

Fixed:

  • depency support for g++ compiler.
  • definition file support for MSVC++.
  • g++ on 64-bit HP-UX.
  • g++ not recognized on 64-bit Ubuntu.

Version 1.0.103

Fixed:

  • global help is broken; resolves to null
  • parameter matching for methods flawed when null used as argument.
  • one character string messes up shell invoker
  • icc support on Linux messes up g++ support

Known issues:

  • object help not as helpful as it could be.
  • xlC is not yet supported.
  • icc is only supported on Windows.

Version 1.0.94

Known issues:

  • global help is broken; resolves to null.
  • object help not as helpful as it could be.
  • parameter matching for methods flawed when null used as argument.
  • xlC is not yet supported.
  • icc is only supported on Windows.

Test Matrix

test configurations
OS Proc.Arch. Compiler 32-bit 64-bit
HP-UX 11.11 PA-RISC 2 aCC 3.50 yes yes
HP-UX 11.11 PA-RISC 2 g++ 3.3.3 yes no
QNX many qcc n/a n/a
RHEL5 AMD64 g++ 4.1.1 yes yes
Solaris 10 AMD64 CC 5.8 yes yes
Solaris 10 AMD64 g++ 3.4.3 yes yes
Solaris 10 sparcv9 CC 5.8 yes yes
Solaris 10 sparcv9 g++ 3.4.3 yes yes
Windows XP 5.2 x86 MSVC++ 13, 13.10, 14, 15 yes yes
Windows XP 5.2 x86 Intel C++ 11.1.035 yes no
Windows 2003 5.2 (64-bit) AMD64 MSVC 14 yes yes
MacOS X 10.5 x86 g++ 4 yes yes
MacOS X 10.6 x86 g++ 4 yes yes

Please note that AIX (xlC and g++) are not yet included in the test matrix.

It is impossible for us to test every version of every compiler on every platform, but we're confident that different versions of one compiler type will work on the same platform and same processor architecture that we tested on. What will likely not work is automatic discovery of new compiler versions that use different installation or registration mechanisms. You might still be able to use these compilers though if you initialize a wrapper instance with the compiler path.

 


Copyright 2006-2016 by Codemesh, Inc., ALL RIGHTS RESERVED

:
release notes
codemesh.com home expressions templates ant about us contact us download   

Commandline