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]

Reply via email to