Roger Leigh created XALANC-776:
----------------------------------
Summary: Add CMake build system
Key: XALANC-776
URL: https://issues.apache.org/jira/browse/XALANC-776
Project: XalanC
Issue Type: Improvement
Components: XalanC
Reporter: Roger Leigh
Assignee: Steven J. Hathaway
Attachments: 0001-Add-CMake-build-system.patch
h4. Introduction
The attached patch implements a CMake build for Xalan-C++. I have spent
significant effort performing a "comprehensive" conversion of the existing GNU
autotools and MSVC project file logic to a unified CMake build which supports
all platforms with a single set of build files, as well as testing it on
several platforms. The existing GNU autotools build and MSVC project builds
will continue to function and are unaffected by this addition.
This is a companion to https://issues.apache.org/jira/browse/XERCESC-2077 which
was merged last year and included in Xerces-C++ 3.2.0. I mentioned this work
on the list last year in https://marc.info/?l=xalan-dev&m=149748238016328&w=2
h4. Background
CMake is a meta-build system which generates the build files for a specified
build system, such as make, Visual Studio msbuild, nmake, ninja or a number of
other build tools and IDEs. This allows Xalan-C++ to be built on any supported
platform with the native tools for that platform. The reason why I originally
needed this was due to the large maintenance burden of patching the provided
Visual Studio project files, both for fixing bugs in those files and in being
able to support versions of Visual Studio which aren't yet supported by the
provided project files or for unsupported configurations e.g. Clang/C2, other
platforms etc. The lack of an install target also meant that to integrate this
with a larger build required manually copying bits out of the build tree. The
cost of debugging and patching the existing project files for use in our CI
builds was getting too great--maintaining and using this CMake build out of
tree will be cheaper and more robust. I thought it might benefit others to have
this merged upstream so that it would be available to the benefit of all. I
have done a direct conversion of the existing autoconf build logic. The
automake Makefile.am logic is directly represented in the corresponding
CMakeLists.txt files.
Unfortunately, and unlike for Xerces, the Xalan Autoconf build is in a very bad
state, and it's become increasingly unusable over time. It has these major
problems:
* No feature tests. Platform-specific behaviour is hardcoded in
"Include/XXXDefinitions.hpp" files which is inflexible and not future-proof as
platforms evolve. Autoconf feature tests could be used like in Xerces-C++
* No Autoconf enable/with options. Configuration is with a hacky and
nonportable "runConfigure" script which works around the lack of options.
* MinGW64 is broken right now because of a lack of feature test for gmtime_r /
localtime_r, for example. The static platform configuration says it doesn't
have these functions, but it does and the build breaks because Xalan
unnecessarily redefines them.
The patch included here can't solve all these problems. But right now I'm
finding it extremely hard to build and install Xalan on a range of platforms,
and the amount of effort required to patch all of the Project/Solution files,
Autoconf/Automake files and platform-specific headers is untenable. This CMake
build will work on every platform.
Some feature tests do require adding to the CMake build, replacing the
Platform-specific headers, but I've not done that in this inital patch, which
has a smaller scope of working with the existing headers without making any
major changes.
I'm prepared to do the extra work to bring this up to the equivalent state as
already done for Xerces-C++ which will allow these libraries to build on all
contemporary platforms. This includes fixing it to work with C++17 as reported
separately by another user.
Kind regards,
Roger
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]