On 22 Dec 2020, at 08:27, wwp <subscr...@free.fr> wrote: > > Hello, > > > I'm attempting to build Xalan-C++ 1.12 following the build steps found at: > https://apache.github.io/xalan-c/build.html > > Build environment: > CentOS 7 (up-to-date), cmake3 version 3.17.3, gcc 8.2.0 > Xerces-C++ 3.2.3 build from the sources, using autotools and these configure > options: > ./configure --disable-rpath --disable-network --without-icu > --prefix=/mypath/xerces/3.2.3 > > 1. cmake won't detect the C compiler properly (but do we care?): > > $ mkdir build && cd build > $ cmake3 -DCMAKE_INSTALL_PREFIX=$TOOLS/xalan-c-1.12 -Dtranscoder=default .. > > [snip] > -- The C compiler identification is GNU 4.8.5 > -- The CXX compiler identification is GNU 8.2.0 > [snip] > > The system C compiler *is* gcc 4.8.5, but the one first found on the PATH is > gcc 8.2.0. > What wrong magics is performed there? Do we care anyway? >
Check your PATH, it should be picking up 8.2.0 if it’s first in the search path. Otherwise set CMAKE_XXX_COMPILER to override the defaults. This isn’t Xerces/Xalan-specific, and I’ve used GCC on CentOS without trouble for years using the devtoolset toolchains. CMake always detected the compiler perfectly, but it will depend upon it being able to find it. Maybe you don’t have a C++ compiler installed on the main system, so 8.2.0 was the only possibility? > > 2. cmake won't detect Xerces-C++ 3.2.3: > > [snip] > CMake Error at > /usr/share/cmake3/Modules/FindPackageHandleStandardArgs.cmake:164 (message): > Failed to find XercesC (missing: XercesC_LIBRARY XercesC_INCLUDE_DIR > XercesC_VERSION) (Required is at least version "3.1") > [snip] > > Obviously it doesn't use PKG_CONFIG_PATH to find it, which is wrong if > xerces-C++ has been built using autotools (this is the recommended method on > GNU/Linux). pkg-config and the build method used for Xerces-C++ are irrelevant. Xalan is using FindXercesC (https://cmake.org/cmake/help/latest/module/FindXercesC.html <https://cmake.org/cmake/help/latest/module/FindXercesC.html>) and will will detect it if it can find it. Did you set CMAKE_PREFIX_PATH to include /mypath/xerces/3.2.3? If not, add that to the cmake command-line and it should detect it without trouble. > I solved it using: > $ cmake3 -DCMAKE_INSTALL_PREFIX=$TOOLS/xalan-c-1.12 -Dtranscoder=default > -DXercesC_VERSION=3.2.3 -DXercesC_LIBRARY="-L/mypath/xerces/3.2.3/lib" > -DXercesC_INCLUDE_DIR=$TOOLS/xerces/3.2.3/include .. > > But I'm not sure this will work, probably missing a -lxerces-c in > XercesC_LIBRARY. None of this should be necessary. Though if you do go this way (not recommended) the _LIBRARY setting should be the full path to the library, rather than the directory containing the library. > > 3. ICU seems required or checked whereas I explicitly want the built-in > transcoder (default). > > Does this mean that the ICU libraries are mandatory? The build doc page > says "ICU C++ libraries and headers (optional)". Why does cmake check > for ICU libraries if they are optional and the transcoder explicitely > set NOT to use ICU? ICU is optional. But it will be used if available because it offers more functionality and provides better behaviour than without. > Note that if I remove the system ICU dev files, I'll get: > > -- The following ICU libraries were not found: > -- uc (required) > -- data (required) > -- i18n (required) > -- Failed to find all ICU components (missing: ICU_INCLUDE_DIR ICU_LIBRARY > _ICU_REQUIRED_LIBS_FOUND) > > Anyway, the cmake configure step does not fail. That’s expected. Look at cmake/XalanTranscoderSelection.cmake. “icu" is first in the list, followed by “default”. If ICU is autodetected, it will take precedence. To be fair “default” is a misnomer; it should probably be “internal” or something else which better describes it. Use “-Dtranscoder=default” to explicitly set what you want. > > 4. is there a way NOT to build the docs? > > I could not find such a way. I don't need them, doc build requirements > are not clear or even specified anywhere I could find, and it fails here > anyway (rule xalan-c-doc-check). > > [skipping a huge UNDOCUMENTED CODE section] > [ 0%] Built target xalan-c-doc-check > make: *** [all] Error 2 This is the Doxygen API reference. Use "-DBUILD_DOXYGEN=OFF” to disable. The doc check is a warning only; this wasn’t necessarily the direct cause of the failure—I’d need to see more context here to see exactly what caused the failure. Regards, Roger