includes the addition of a _runme for an existing test - preproc_constants
that was previously not run. That tests includes a preprocessor based
setting of an enumeration which is ignored by the existing r enumeration
infrastructure. The new version correctly reports the enumeration value
as 4 - previous versions set it to 0. Traditional enumerations are unchanged.
The approach used to deal with these enumerations is similar to that of
other languages, and requires a call to a C function at runtime to return
the enumeration value. The previous approach figured out the values statically
and this is still used where possible. The need for a runtime call leads to
changes in when swig code is used in packages - see below.
One test that previously passed now fails - namely the R sourcing of
preproc_constants.R, as the enumeration code requires the shared library,
which isn't loaded by that script.
There is also a modification to the way the R _runme.R files are used.
The call to R CMD BATCH now includes a --args option that indicates
the source folder for the unittest.R file, and the first couple
of lines of the _runme.R files deal with correctly locating this.
Out of source tests now run correctly.
This work was motivated by problems generating the SimpleITK binding,
specifically with some of the more complex enumerations.
This approach does have some issues wrt to code in packages, but I can't
see an alternative. The problem with packages is that the R code setting
up the enumeration structures requires the shared library so that the C
functions returning enumeration values can be called. The enumeration
setup code thus needs to be moved to the package initialisation section.
For SimpleITK I do this using an R script, which I think is an acceptable
solution. The core part of the process is the following function. I dump
all the enumeration stuff into a .onload function. This is only necessary
if some of the enumerations are tricky.
splitSwigFile <- function(filename, onloadfile, mainfile)
{
p1 <- parse(file=filename)
getdefineEnum <- function(X)
{
return (is.call(X) & (X[[1]]=="defineEnumeration"))
}
dd <- sapply(p1, getdefineEnum)
enums <- p1[dd]
enums <- unlist(lapply(enums, deparse))
enums <- c(".onLoad <- function(libname, pkgname) {", enums, "}")
everythingelse <- p1[!dd]
everythingelse <- unlist(lapply(everythingelse, deparse))
writeLines(everythingelse, mainfile)
writeLines(enums, onloadfile)
}
* talby--surgical-perlprimtypes-fix:
update CHANGES.current
check ranges in perlprimtype.swg more carefully to avoid clang warnings
capture the current behavior of perlprimtypes.swg is more detail
After the documentation update on how to utilize the director feature with
commit @17b1c1c the 'callback' and 'extend' examples needed an update as well.
The 'callback' and 'extend' examples were presumed to be obsoleted by the new
'director' example. The examples are helpful though to have similar examples
across target languages and hence the commit @5e88857 which removed these
examples got reverted.
Notably it now works for "unsigned char*" strings.
Add a test to check that it now works in Java and also showing that it already
worked for the other languages with support for this typemap.
* vadz-better-no-all:
Don't check for all the languages in Travis language-specific builds.
Skip check for pep8 if Python is disabled in configure.
Make configure --without-alllang option actually useful.
Cosmetic: fix wrong configure options indentation in --help.
* vadz-java-home:
Don't duplicate Java headers path under OS X in configure.
Use JAVA_HOME value in configure to detect Java.
Remove executable permission from appveyor.yml.
Use it to disable all languages by default, but still allow enabling
individual languages by explicitly using --with-lang options for them.
E.g. to enable tests for Java only "--without-alllang --with-java" can now be
used to skip the configure checks for all the other languages.
Ensure that help for all options starts in the same column (unless the options
are too long, as --with-guile-config=path, but at least avoid indenting it by
a tab stop then).
Use /System/Library/Frameworks/JavaVM.framework/Headers in a single place only
to make it easier to change it later and, hopefully, make the rather
convoluted process of Java detection under OS X slightly more clear.
This is simpler than having to use --with-java, --with-javac and
--with-javaincl options and, even more importantly, will usually just work by
default.