summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2020-04-16 18:15:45 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2020-04-21 16:40:06 +0300
commitfc2234b87f4ce29be0e556c6f3b085b749b7d71b (patch)
treea56f6807aa0378c9dd58286f073e57ad748891ad
parent5d559799f0815e5bd2f510d91607a7ef1b20e3a0 (diff)
Add implementation
-rw-r--r--.gitmodules4
-rw-r--r--README-DEV139
-rw-r--r--README-GIT5
-rw-r--r--libxerces-c/.gitignore20
-rw-r--r--libxerces-c/INSTALL7
l---------libxerces-c/LICENSE1
-rw-r--r--libxerces-c/README21
-rw-r--r--libxerces-c/README-DEV96
-rw-r--r--libxerces-c/build/.gitignore3
-rw-r--r--libxerces-c/build/bootstrap.build35
-rw-r--r--libxerces-c/build/export.build9
-rw-r--r--libxerces-c/build/root.build26
-rw-r--r--libxerces-c/buildfile9
-rw-r--r--libxerces-c/manifest25
-rw-r--r--libxerces-c/tests/.gitignore3
-rw-r--r--libxerces-c/tests/build/.gitignore3
-rw-r--r--libxerces-c/tests/build/bootstrap.build8
-rw-r--r--libxerces-c/tests/build/root.build23
-rw-r--r--libxerces-c/tests/buildfile4
l---------libxerces-c/tests/dom-print/DOMPrint1
-rw-r--r--libxerces-c/tests/dom-print/buildfile6
-rw-r--r--libxerces-c/tests/dom-print/testscript20
-rw-r--r--libxerces-c/tests/net-accessor/NetAccessorTest.cpp167
-rw-r--r--libxerces-c/tests/net-accessor/buildfile11
-rw-r--r--libxerces-c/tests/net-accessor/handle-exception-as-error.patch35
-rw-r--r--libxerces-c/tests/net-accessor/testscript34
l---------libxerces-c/tests/psvi-writer/PSVIWriter1
-rw-r--r--libxerces-c/tests/psvi-writer/buildfile11
-rw-r--r--libxerces-c/tests/psvi-writer/testscript21
l---------libxerces-c/tests/sax-print/SAXPrint1
-rw-r--r--libxerces-c/tests/sax-print/buildfile6
-rw-r--r--libxerces-c/tests/sax-print/testscript20
l---------libxerces-c/tests/sax2-print/SAX2Print1
-rw-r--r--libxerces-c/tests/sax2-print/buildfile6
-rw-r--r--libxerces-c/tests/sax2-print/testscript20
-rw-r--r--libxerces-c/xercesc/buildfile148
-rw-r--r--libxerces-c/xercesc/config.h137
l---------libxerces-c/xercesc/config.h.cmake.in.orig1
l---------libxerces-c/xercesc/dom1
-rw-r--r--libxerces-c/xercesc/export-template-instantiations.patch29
l---------libxerces-c/xercesc/framework1
l---------libxerces-c/xercesc/internal1
l---------libxerces-c/xercesc/parsers1
l---------libxerces-c/xercesc/sax1
l---------libxerces-c/xercesc/sax21
l---------libxerces-c/xercesc/stricmp.c1
l---------libxerces-c/xercesc/stricmp.h1
l---------libxerces-c/xercesc/strnicmp.c1
l---------libxerces-c/xercesc/strnicmp.h1
l---------libxerces-c/xercesc/util/ArrayIndexOutOfBoundsException.hpp1
l---------libxerces-c/xercesc/util/Base64.cpp1
l---------libxerces-c/xercesc/util/Base64.hpp1
l---------libxerces-c/xercesc/util/BaseRefVectorOf.c1
l---------libxerces-c/xercesc/util/BaseRefVectorOf.hpp1
l---------libxerces-c/xercesc/util/BinFileInputStream.cpp1
l---------libxerces-c/xercesc/util/BinFileInputStream.hpp1
l---------libxerces-c/xercesc/util/BinInputStream.cpp1
l---------libxerces-c/xercesc/util/BinInputStream.hpp1
l---------libxerces-c/xercesc/util/BinMemInputStream.cpp1
l---------libxerces-c/xercesc/util/BinMemInputStream.hpp1
l---------libxerces-c/xercesc/util/BitOps.hpp1
l---------libxerces-c/xercesc/util/BitSet.cpp1
l---------libxerces-c/xercesc/util/BitSet.hpp1
l---------libxerces-c/xercesc/util/CountedPointer.c1
l---------libxerces-c/xercesc/util/CountedPointer.hpp1
l---------libxerces-c/xercesc/util/DefaultPanicHandler.cpp1
l---------libxerces-c/xercesc/util/DefaultPanicHandler.hpp1
l---------libxerces-c/xercesc/util/EmptyStackException.hpp1
l---------libxerces-c/xercesc/util/EncodingValidator.cpp1
l---------libxerces-c/xercesc/util/EncodingValidator.hpp1
l---------libxerces-c/xercesc/util/FileManagers1
l---------libxerces-c/xercesc/util/FlagJanitor.c1
l---------libxerces-c/xercesc/util/FlagJanitor.hpp1
l---------libxerces-c/xercesc/util/Hash2KeysSetOf.c1
l---------libxerces-c/xercesc/util/Hash2KeysSetOf.hpp1
l---------libxerces-c/xercesc/util/Hashers.hpp1
l---------libxerces-c/xercesc/util/HeaderDummy.cpp1
l---------libxerces-c/xercesc/util/HexBin.cpp1
l---------libxerces-c/xercesc/util/HexBin.hpp1
l---------libxerces-c/xercesc/util/IOException.hpp1
l---------libxerces-c/xercesc/util/IllegalArgumentException.hpp1
l---------libxerces-c/xercesc/util/InvalidCastException.hpp1
l---------libxerces-c/xercesc/util/Janitor.c1
-rw-r--r--libxerces-c/xercesc/util/Janitor.hpp168
-rw-r--r--libxerces-c/xercesc/util/JanitorExports.cpp25
l---------libxerces-c/xercesc/util/KVStringPair.cpp1
l---------libxerces-c/xercesc/util/KVStringPair.hpp1
l---------libxerces-c/xercesc/util/KeyRefPair.c1
l---------libxerces-c/xercesc/util/KeyRefPair.hpp1
l---------libxerces-c/xercesc/util/KeyValuePair.c1
l---------libxerces-c/xercesc/util/KeyValuePair.hpp1
l---------libxerces-c/xercesc/util/LogicalPath.c1
l---------libxerces-c/xercesc/util/MsgLoaders/InMemory1
l---------libxerces-c/xercesc/util/MutexManagers/StdMutexMgr.cpp1
l---------libxerces-c/xercesc/util/MutexManagers/StdMutexMgr.hpp1
l---------libxerces-c/xercesc/util/Mutexes.cpp1
l---------libxerces-c/xercesc/util/Mutexes.hpp1
l---------libxerces-c/xercesc/util/NameIdPool.c1
l---------libxerces-c/xercesc/util/NameIdPool.hpp1
l---------libxerces-c/xercesc/util/NetAccessors/Curl1
l---------libxerces-c/xercesc/util/NoSuchElementException.hpp1
l---------libxerces-c/xercesc/util/NullPointerException.hpp1
l---------libxerces-c/xercesc/util/NumberFormatException.hpp1
l---------libxerces-c/xercesc/util/OutOfMemoryException.hpp1
l---------libxerces-c/xercesc/util/PSVIUni.cpp1
l---------libxerces-c/xercesc/util/PSVIUni.hpp1
l---------libxerces-c/xercesc/util/PanicHandler.cpp1
l---------libxerces-c/xercesc/util/PanicHandler.hpp1
l---------libxerces-c/xercesc/util/ParseException.hpp1
l---------libxerces-c/xercesc/util/PlatformUtils.cpp1
l---------libxerces-c/xercesc/util/PlatformUtils.hpp1
l---------libxerces-c/xercesc/util/QName.cpp1
l---------libxerces-c/xercesc/util/QName.hpp1
l---------libxerces-c/xercesc/util/RefArrayOf.c1
l---------libxerces-c/xercesc/util/RefArrayOf.hpp1
l---------libxerces-c/xercesc/util/RefArrayVectorOf.c1
l---------libxerces-c/xercesc/util/RefArrayVectorOf.hpp1
l---------libxerces-c/xercesc/util/RefHash2KeysTableOf.c1
l---------libxerces-c/xercesc/util/RefHash2KeysTableOf.hpp1
l---------libxerces-c/xercesc/util/RefHash3KeysIdPool.c1
l---------libxerces-c/xercesc/util/RefHash3KeysIdPool.hpp1
l---------libxerces-c/xercesc/util/RefHashTableOf.c1
l---------libxerces-c/xercesc/util/RefHashTableOf.hpp1
l---------libxerces-c/xercesc/util/RefStackOf.c1
l---------libxerces-c/xercesc/util/RefStackOf.hpp1
l---------libxerces-c/xercesc/util/RefVectorOf.c1
l---------libxerces-c/xercesc/util/RefVectorOf.hpp1
l---------libxerces-c/xercesc/util/RuntimeException.hpp1
l---------libxerces-c/xercesc/util/SchemaDateTimeException.hpp1
l---------libxerces-c/xercesc/util/SecurityManager.hpp1
l---------libxerces-c/xercesc/util/StringPool.cpp1
l---------libxerces-c/xercesc/util/StringPool.hpp1
l---------libxerces-c/xercesc/util/SynchronizedStringPool.cpp1
l---------libxerces-c/xercesc/util/SynchronizedStringPool.hpp1
l---------libxerces-c/xercesc/util/TransENameMap.c1
l---------libxerces-c/xercesc/util/TransENameMap.hpp1
l---------libxerces-c/xercesc/util/TransService.cpp1
l---------libxerces-c/xercesc/util/TransService.hpp1
l---------libxerces-c/xercesc/util/Transcoders/ICU1
l---------libxerces-c/xercesc/util/TranscodingException.hpp1
l---------libxerces-c/xercesc/util/UTFDataFormatException.hpp1
l---------libxerces-c/xercesc/util/UnexpectedEOFException.hpp1
l---------libxerces-c/xercesc/util/UnsupportedEncodingException.hpp1
l---------libxerces-c/xercesc/util/ValueArrayOf.c1
l---------libxerces-c/xercesc/util/ValueArrayOf.hpp1
l---------libxerces-c/xercesc/util/ValueHashTableOf.c1
l---------libxerces-c/xercesc/util/ValueHashTableOf.hpp1
l---------libxerces-c/xercesc/util/ValueStackOf.c1
l---------libxerces-c/xercesc/util/ValueStackOf.hpp1
l---------libxerces-c/xercesc/util/ValueVectorOf.c1
l---------libxerces-c/xercesc/util/ValueVectorOf.hpp1
l---------libxerces-c/xercesc/util/XML256TableTranscoder.cpp1
l---------libxerces-c/xercesc/util/XML256TableTranscoder.hpp1
l---------libxerces-c/xercesc/util/XML88591Transcoder.cpp1
l---------libxerces-c/xercesc/util/XML88591Transcoder.hpp1
l---------libxerces-c/xercesc/util/XMLASCIITranscoder.cpp1
l---------libxerces-c/xercesc/util/XMLASCIITranscoder.hpp1
l---------libxerces-c/xercesc/util/XMLAbstractDoubleFloat.cpp1
l---------libxerces-c/xercesc/util/XMLAbstractDoubleFloat.hpp1
l---------libxerces-c/xercesc/util/XMLBigDecimal.cpp1
l---------libxerces-c/xercesc/util/XMLBigDecimal.hpp1
l---------libxerces-c/xercesc/util/XMLBigInteger.cpp1
l---------libxerces-c/xercesc/util/XMLBigInteger.hpp1
l---------libxerces-c/xercesc/util/XMLChTranscoder.cpp1
l---------libxerces-c/xercesc/util/XMLChTranscoder.hpp1
l---------libxerces-c/xercesc/util/XMLChar.cpp1
l---------libxerces-c/xercesc/util/XMLChar.hpp1
l---------libxerces-c/xercesc/util/XMLDOMMsg.hpp1
l---------libxerces-c/xercesc/util/XMLDateTime.cpp1
l---------libxerces-c/xercesc/util/XMLDateTime.hpp1
l---------libxerces-c/xercesc/util/XMLDouble.cpp1
l---------libxerces-c/xercesc/util/XMLDouble.hpp1
l---------libxerces-c/xercesc/util/XMLEBCDICTranscoder.cpp1
l---------libxerces-c/xercesc/util/XMLEBCDICTranscoder.hpp1
l---------libxerces-c/xercesc/util/XMLEntityResolver.hpp1
l---------libxerces-c/xercesc/util/XMLEnumerator.hpp1
l---------libxerces-c/xercesc/util/XMLExceptMsgs.hpp1
l---------libxerces-c/xercesc/util/XMLException.cpp1
l---------libxerces-c/xercesc/util/XMLException.hpp1
l---------libxerces-c/xercesc/util/XMLFileMgr.hpp1
l---------libxerces-c/xercesc/util/XMLFloat.cpp1
l---------libxerces-c/xercesc/util/XMLFloat.hpp1
l---------libxerces-c/xercesc/util/XMLIBM1047Transcoder.cpp1
l---------libxerces-c/xercesc/util/XMLIBM1047Transcoder.hpp1
l---------libxerces-c/xercesc/util/XMLIBM1140Transcoder.cpp1
l---------libxerces-c/xercesc/util/XMLIBM1140Transcoder.hpp1
l---------libxerces-c/xercesc/util/XMLInitializer.cpp1
l---------libxerces-c/xercesc/util/XMLInitializer.hpp1
l---------libxerces-c/xercesc/util/XMLInteger.hpp1
l---------libxerces-c/xercesc/util/XMLMsgLoader.cpp1
l---------libxerces-c/xercesc/util/XMLMsgLoader.hpp1
l---------libxerces-c/xercesc/util/XMLMutexMgr.hpp1
l---------libxerces-c/xercesc/util/XMLNetAccessor.hpp1
l---------libxerces-c/xercesc/util/XMLNumber.cpp1
l---------libxerces-c/xercesc/util/XMLNumber.hpp1
l---------libxerces-c/xercesc/util/XMLResourceIdentifier.hpp1
l---------libxerces-c/xercesc/util/XMLString.cpp1
l---------libxerces-c/xercesc/util/XMLString.hpp1
l---------libxerces-c/xercesc/util/XMLStringTokenizer.cpp1
l---------libxerces-c/xercesc/util/XMLStringTokenizer.hpp1
l---------libxerces-c/xercesc/util/XMLUCS4Transcoder.cpp1
l---------libxerces-c/xercesc/util/XMLUCS4Transcoder.hpp1
l---------libxerces-c/xercesc/util/XMLURL.cpp1
l---------libxerces-c/xercesc/util/XMLURL.hpp1
l---------libxerces-c/xercesc/util/XMLUTF16Transcoder.cpp1
l---------libxerces-c/xercesc/util/XMLUTF16Transcoder.hpp1
l---------libxerces-c/xercesc/util/XMLUTF8Transcoder.cpp1
l---------libxerces-c/xercesc/util/XMLUTF8Transcoder.hpp1
l---------libxerces-c/xercesc/util/XMLUni.cpp1
l---------libxerces-c/xercesc/util/XMLUni.hpp1
l---------libxerces-c/xercesc/util/XMLUniDefs.hpp1
l---------libxerces-c/xercesc/util/XMLUri.cpp1
l---------libxerces-c/xercesc/util/XMLUri.hpp1
l---------libxerces-c/xercesc/util/XMLWin1252Transcoder.cpp1
l---------libxerces-c/xercesc/util/XMLWin1252Transcoder.hpp1
l---------libxerces-c/xercesc/util/XMemory.cpp1
l---------libxerces-c/xercesc/util/XMemory.hpp1
l---------libxerces-c/xercesc/util/XercesDefs.hpp1
-rw-r--r--libxerces-c/xercesc/util/XercesVersion.hpp0
l---------libxerces-c/xercesc/util/XercesVersion.hpp.in1
-rw-r--r--libxerces-c/xercesc/util/Xerces_autoconf_config.hpp191
l---------libxerces-c/xercesc/util/Xerces_autoconf_config.hpp.cmake.in.orig1
l---------libxerces-c/xercesc/util/regx1
l---------libxerces-c/xercesc/validators1
l---------libxerces-c/xercesc/xinclude1
-rw-r--r--packages.manifest2
-rw-r--r--repositories.manifest10
m---------upstream0
228 files changed, 1695 insertions, 0 deletions
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..b4256db
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,4 @@
+[submodule "upstream"]
+ path = upstream
+ url = https://github.com/apache/xerces-c.git
+ ignore = untracked
diff --git a/README-DEV b/README-DEV
new file mode 100644
index 0000000..dbe777f
--- /dev/null
+++ b/README-DEV
@@ -0,0 +1,139 @@
+This document describes an approach applied to packaging Xerces-C++ for
+build2. In particular, this understanding will be useful when upgrading to a
+new upstream version.
+
+The upstream package contains the libxerces-c C++ library, its usage examples,
+and tests. Currently, we only package the library (see libxerces-c/README-DEV
+for details).
+
+We add the upstream package as a git submodule and symlink the required files
+and subdirectories into the build2 package subdirectories. Then, when required,
+we "overlay" the upstream with our own header/source files, placing them into
+the library directory.
+
+Note that symlinking upstream submodule subdirectories into a build2 package
+subdirectory results in creating intermediate build files (.d, .o, etc) inside
+upstream directory while building the package in source tree. That's why we
+need to make sure that packages do not share upstream source files via
+subdirectory symlinks, not to also share the related intermediate files. If
+several packages need to compile the same upstream source file, then only one
+of them can symlink it via the parent directory while others must symlink it
+directly. We also add the `ignore = untracked` configuration option into
+.gitmodules to make sure that git ignores the intermediate build files under
+upstream/ subdirectory.
+
+The upstream package can be configured to contain a specific feature set. We
+reproduce the union of features configured for the upstream source package in
+Debian and Fedora distributions. The configuration options defining these sets
+are specified in the Debian's rules and Fedora's RPM .spec files. These files
+can be obtained as follows:
+
+$ wget http://deb.debian.org/debian/pool/main/x/xerces-c/xerces-c_3.2.3+debian-1.debian.tar.xz
+$ tar xf xerces-c_3.2.3+debian-1.debian.tar.xz debian/rules
+
+$ wget https://kojipkgs.fedoraproject.org//packages/xerces-c/3.2.3/1.fc33/src/xerces-c-3.2.3-1.fc33.src.rpm
+$ rpm2cpio xerces-c-3.2.3-1.fc33.src.rpm | cpio -civ '*.spec'
+
+As a side note, on Debian and Fedora the source, library, and headers are
+packaged as follows:
+
+ src libxerces-c headers
+Debian/Ubuntu: xerces-c libxerces-c3.2 libxerces-c-dev
+Fedora/RHEL: xerces-c xerces-c xerces-c-devel
+
+Search for the Debian and Fedora packages at https://packages.debian.org/search
+and https://apps.fedoraproject.org/packages/.
+
+Here are the discovered configuration options.
+
+Debian:
+
+ --enable-netaccessor-curl --disable-sse2
+
+Fedora:
+
+ --disable-sse2 # Only affects i686.
+
+Note that some of the features are selected by the configure scripts
+automatically. To deduce them we check the Debian and Fedora build logs.
+
+Debian (https://buildd.debian.org/status/fetch.php?pkg=xerces-c&arch=amd64&ver=3.2.3%2Bdebian-1&stamp=1586641244&raw=0):
+
+ configure: Report:
+ configure: File Manager: POSIX
+ configure: Mutex Manager: standard
+ configure: Transcoder: icu
+ configure: NetAccessor: curl
+ configure: Message Loader: inmemory
+ configure: XMLCh Type: char16_t
+
+Fedora (https://kojipkgs.fedoraproject.org/packages/xerces-c/3.2.3/1.fc33/data/logs/aarch64/build.log):
+
+ configure: Report:
+ configure: File Manager: POSIX
+ configure: Mutex Manager: standard
+ configure: Transcoder: gnuiconv
+ configure: NetAccessor: socket
+ configure: Message Loader: inmemory
+ configure: XMLCh Type: char16_t
+
+Based on that and taking into account the dependencies we have packaged for
+build2, we end up with the following configuration options:
+
+ --enable-netaccessor-curl --enable-transcoder-icu \
+ --enable-msgloader-inmemory --enable-xmlch-char16_t \
+ --enable-mutexmgr-standard --disable-sse2
+
+See the configuration options description at the "Build Instructions" page
+(http://xerces.apache.org/xerces-c/build-3.html).
+
+Normally, when packaging a project, we need to replace some auto-generated
+headers with our own implementations, deduce the compilation/linking options
+and the source files to compile. For Xerces-C++ we can rely on the
+configure.ac, config.h.cmake.in, src/{CMakeLists.txt,Makefile.am},
+src/xercesc/util/{XercesVersion,Xerces_autoconf_config}.hpp.in. In practice,
+however, that can be uneasy and error prone, so you may also need to refer to
+auto-generated header files or to see the actual compiler and linker command
+lines in the build log. If that's the case, you can configure/build the
+upstream package on the platform of interest running the following commands in
+the upstream project root directory.
+
+On POSIX:
+
+$ ./reconf
+$ mkdir build
+$ cd build
+$ ../configure --enable-netaccessor-curl --enable-transcoder-icu \
+ --enable-msgloader-inmemory --enable-xmlch-char16_t \
+ --enable-mutexmgr-standard --disable-sse2 >build.log
+$ make V=1 >>build.log 2>&1
+
+Note that on Windows, to reduce complexity, we may build the upstream package
+with the native network accessor and transcoder (rather than with the cURL-
+based network accessor and ICU-based transcoder) as it doesn't really affect
+the compilation and linking options.
+
+For MSVC:
+
+> mkdir build
+> cd build
+> cmake -G "Visual Studio 15 2017 Win64" ^
+ -Dnetwork-accessor=winsock -Dtranscoder=windows ^
+ -Dmessage-loader=inmemory -Dxmlch-type=char16_t -Dmutex-manager=standard ^
+ -Dmfc-debug:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .. >build.log
+> cmake --build . >>build.log 2>&1
+
+For MinGW GCC:
+
+$ mkdir build
+$ cd build
+$ cmake -G "MSYS Makefiles" -Dnetwork-accessor=winsock -Dtranscoder=windows \
+ -Dmessage-loader=inmemory -Dxmlch-type=char16_t -Dmutex-manager=standard \
+ -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .. >build.log
+$ make V=1 >>build.log 2>&1
+
+When the packaging is complete, build all the project packages in source tree
+and make sure that no Xerces-C++ headers are included from the system, running
+the following command from the project root:
+
+fgrep -a -e /usr/include/xercesc `find . -type f -name '*.d'`
diff --git a/README-GIT b/README-GIT
new file mode 100644
index 0000000..9750586
--- /dev/null
+++ b/README-GIT
@@ -0,0 +1,5 @@
+The checked out libxerces-c/xercesc/util/XercesVersion.hpp will be overwritten
+during the build process but these changes should be ignored. To do this
+automatically, run:
+
+git update-index --assume-unchanged libxerces-c/xercesc/util/XercesVersion.hpp
diff --git a/libxerces-c/.gitignore b/libxerces-c/.gitignore
new file mode 100644
index 0000000..4c4fec7
--- /dev/null
+++ b/libxerces-c/.gitignore
@@ -0,0 +1,20 @@
+# Compiler/linker output.
+#
+*.d
+*.t
+*.i
+*.ii
+*.o
+*.obj
+*.so
+*.so.*
+*.dll
+*.a
+*.lib
+*.exp
+*.pdb
+*.ilk
+*.exe
+*.exe.dlls/
+*.exe.manifest
+*.pc
diff --git a/libxerces-c/INSTALL b/libxerces-c/INSTALL
new file mode 100644
index 0000000..bfa5487
--- /dev/null
+++ b/libxerces-c/INSTALL
@@ -0,0 +1,7 @@
+The aim of this package is to make reading the INSTALL file unnecessary. So
+next time try running:
+
+$ bpkg build libxerces-c
+
+But if you don't want to use the package manager, then you can also build this
+package manually using the standard build2 build system.
diff --git a/libxerces-c/LICENSE b/libxerces-c/LICENSE
new file mode 120000
index 0000000..6246057
--- /dev/null
+++ b/libxerces-c/LICENSE
@@ -0,0 +1 @@
+../upstream/LICENSE \ No newline at end of file
diff --git a/libxerces-c/README b/libxerces-c/README
new file mode 100644
index 0000000..d50fe29
--- /dev/null
+++ b/libxerces-c/README
@@ -0,0 +1,21 @@
+Xerces-C++ is a validating XML parser written in a portable subset of C++
+with the libxerces-c library providing support for validating, parsing,
+manipulating, and generating XML documents using the DOM, SAX, and SAX2
+APIs. For more information see:
+
+http://xerces.apache.org/xerces-c/
+
+This package contains the original libxerces-c library source code overlaid
+with the build2-based build system and packaged for the build2 package manager
+(bpkg).
+
+See the INSTALL file for the prerequisites and installation instructions.
+
+Send questions, bug reports, or any other feedback about the library itself to
+the Xerces-C++ mailing lists. Send build system and packaging-related feedback
+to the packaging@build2.org mailing list (see https://lists.build2.org for
+posting guidelines, etc).
+
+The packaging of Xerces-C++ for build2 is tracked in a Git repository at:
+
+https://git.build2.org/cgit/packaging/xerces-c/
diff --git a/libxerces-c/README-DEV b/libxerces-c/README-DEV
new file mode 100644
index 0000000..78f4179
--- /dev/null
+++ b/libxerces-c/README-DEV
@@ -0,0 +1,96 @@
+This document describes how libxerces-c was packaged for build2. In
+particular, this understanding will be useful when upgrading to a new upstream
+version. See ../README-DEV for general notes on Xerces-C++ packaging.
+
+Symlink the required upstream files and provide our own implementations for
+auto-generated headers:
+
+$ ln -s ../upstream/LICENSE
+$ ln -s ../../upstream/src/xercesc/{dom,framework,internal,parsers,sax,sax2,\
+validators,xinclude} xercesc/
+
+$ ln -s ../../upstream/src/{stricmp,strnicmp}.{h,c} xercesc/
+
+$ pushd xercesc/util/
+$ ln -s ../../../upstream/src/xercesc/util/*.{cpp,hpp,c} ./
+$ ln -s ../../../upstream/src/xercesc/util/{regx,FileManagers} ./
+
+Note that the main reason for such a granular linking (we could just link
+upstream's Transcoders/, etc) is reducing the number of preprocessor macros we
+need to deduce in xercesc/config.h (see the change tracking instructions
+below for details). As a bonus it also simplifies the buildfile.
+
+$ mkdir -p Transcoders NetAccessors MsgLoaders MutexManagers
+$ ln -s ../../../../upstream/src/xercesc/util/Transcoders/ICU Transcoders/
+$ ln -s ../../../../upstream/src/xercesc/util/NetAccessors/Curl NetAccessors/
+$ ln -s ../../../../upstream/src/xercesc/util/MsgLoaders/InMemory MsgLoaders/
+$ ln -s ../../../../upstream/src/xercesc/util/MutexManagers/StdMutexMgr.{hpp,cpp} MutexManagers/
+
+$ ln -s ../../../upstream/src/xercesc/util/XercesVersion.hpp.cmake.in \
+ XercesVersion.hpp.in
+$ popd
+
+We also patch the explicit template instantiation declarations and definitions
+(see xercesc/util/Xerces_autoconf_config.hpp for details):
+
+$ cp --remove-destination ../upstream/src/xercesc/util/{Janitor.hpp,JanitorExports.cpp} \
+ xercesc/util/
+
+$ git apply xercesc/export-template-instantiations.patch
+
+Note that the patch is produced by the following command:
+
+$ git diff >xercesc/export-template-instantiations.patch
+
+Use some of the upstream's tests and examples for testing:
+
+$ ln -s ../../../upstream/samples/src/DOMPrint tests/dom-print/
+$ ln -s ../../../upstream/samples/src/SAXPrint tests/sax-print/
+$ ln -s ../../../upstream/samples/src/SAX2Print tests/sax2-print/
+$ ln -s ../../../upstream/samples/src/PSVIWriter tests/psvi-writer/
+
+We also patch the net accessor test, which by some reason exits with the zero
+status printing the diagnostics to stdout for some errors:
+
+$ cp ../upstream/tests/src/NetAccessorTest/NetAccessorTest.cpp \
+ tests/net-accessor/
+
+$ git apply tests/net-accessor/handle-exception-as-error.patch
+
+Note that the patch is produced by the following command:
+
+$ git diff >tests/net-accessor/handle-exception-as-error.patch
+
+Create xercesc/{config.h,util/Xerces_autoconf_config.hpp} using as a base the
+upstream's config.h.cmake.in, config.h.in, and
+Xerces_autoconf_config.hpp.cmake.in.
+
+Re-creating xercesc/config.h from scratch every time we upgrade to a new
+upstream version would be a real pain. Instead we can only (un)define the
+newly introduced macros, comparing the already defined and currently used
+macro sets. Note that we can use this approach to also deduce the initial set
+of macros running the above commands for the upstream's auto-generated
+config.h:
+
+$ ln -s ../../upstream/config.h.cmake.in xercesc/config.h.cmake.in.orig
+$ ln -s ../../../upstream/src/xercesc/util/Xerces_autoconf_config.hpp.cmake.in \
+ xercesc/util/Xerces_autoconf_config.hpp.cmake.in.orig
+
+$ for m in `cat xercesc/config.h.cmake.in.orig | \
+ sed -n 's/.*#\s*\(define\|cmakedefine\)\s\{1,\}\([_a-zA-Z0-9]\{1,\}\)\(\s.*\)\{0,1\}$/\2/p' | sort -u`; do
+ if grep -q -e "\b$m\b" `find -L . -name '*.h' -a ! -name config.h -o -name '*.c' -o -name '*.cpp' -o -name '*.hpp' -a ! -name XercesVersion.hpp -a ! -name Xerces_autoconf_config.hpp`; then
+ echo "$m"
+ fi
+ done >used-macros
+
+$ cat xercesc/config.h | \
+ sed -n 's/^#\s*\(define\|undef\)\s\{1,\}\([_a-z_A-Z0-9]\{1,\}\)\(\s.*\)\{0,1\}$/\2/p' | \
+ sort -u >defined-macros
+
+$ diff defined-macros used-macros | grep '<' >remove-macros
+$ diff defined-macros used-macros | grep '>' >add-macros
+
+We won't drop macro (un)definitions in Xerces_autoconf_config.hpp (see the
+header for details). Thus, just compare the new and old
+Xerces_autoconf_config.hpp.cmake.in files during upgrade to detect the removed
+and added macro definitions. Luckily, the header is not that big.
diff --git a/libxerces-c/build/.gitignore b/libxerces-c/build/.gitignore
new file mode 100644
index 0000000..4a730a3
--- /dev/null
+++ b/libxerces-c/build/.gitignore
@@ -0,0 +1,3 @@
+config.build
+root/
+bootstrap/
diff --git a/libxerces-c/build/bootstrap.build b/libxerces-c/build/bootstrap.build
new file mode 100644
index 0000000..ef8f579
--- /dev/null
+++ b/libxerces-c/build/bootstrap.build
@@ -0,0 +1,35 @@
+# file : build/bootstrap.build
+# license : Apache License 2.0; see accompanying LICENSE file
+
+project = libxerces-c
+
+using version
+using config
+using dist
+using test
+using install
+
+# The Xerces-C++ version has the <version>.<release>.<modification> form and
+# follows the semver semantics. Specifically, the new versions and releases
+# are issued when a certain number of bug fixes and new features are added
+# and the modifications are issued when critical bugs are encountered. The
+# releases and modifications may only contain the backward-compatible API
+# changes. The ABI backward compatibility is only preserved for modifications.
+#
+# There is also the serialization format version number that can not be
+# deduced from the package version. It is not documented which kind of package
+# releases may increment this number, but based on its change history we can
+# probably assume that this may not happen for modifications. Thus, we will
+# check for its change (the XERCES_GRAMMAR_SERIALIZATION_LEVEL variable in
+# configure.ac) only when the version or release number is incremented.
+#
+# See also: https://xerces.apache.org/xerces-c/faq-contributing-3.html
+#
+if ($version.major == 3 && $version.minor == 2)
+{
+ grammar_serialization_level = 7 # Serialization format version.
+
+ abi_version = "$version.major.$version.minor"
+}
+else
+ fail "increment the serialization format version?"
diff --git a/libxerces-c/build/export.build b/libxerces-c/build/export.build
new file mode 100644
index 0000000..de1de82
--- /dev/null
+++ b/libxerces-c/build/export.build
@@ -0,0 +1,9 @@
+# file : build/export.build
+# license : Apache License 2.0; see accompanying LICENSE file
+
+$out_root/
+{
+ include xercesc/
+}
+
+export $out_root/xercesc/lib{xerces-c}
diff --git a/libxerces-c/build/root.build b/libxerces-c/build/root.build
new file mode 100644
index 0000000..92eb1cb
--- /dev/null
+++ b/libxerces-c/build/root.build
@@ -0,0 +1,26 @@
+# file : build/root.build
+# license : Apache License 2.0; see accompanying LICENSE file
+
+# We rely on C99 in macro deductions (see xercesc/config.h and
+# xercesc/util/Xerces_autoconf_config.hpp for details).
+#
+c.std = 99
+
+using c
+
+h{*}: extension = h
+c{*}: extension = c
+
+cxx.std = latest
+
+using cxx
+
+hxx{*}: extension = hpp
+txx{*}: extension = c
+cxx{*}: extension = cpp
+
+if ($c.target.system == 'win32-msvc')
+ cc.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS
+
+if ($c.class == 'msvc')
+ cc.coptions += /wd4251 /wd4275 /wd4800
diff --git a/libxerces-c/buildfile b/libxerces-c/buildfile
new file mode 100644
index 0000000..28aa742
--- /dev/null
+++ b/libxerces-c/buildfile
@@ -0,0 +1,9 @@
+# file : buildfile
+# license : Apache License 2.0; see accompanying LICENSE file
+
+./: {*/ -build/} doc{LICENSE INSTALL README} manifest
+
+# Don't install tests or the INSTALL file.
+#
+tests/: install = false
+doc{INSTALL}@./: install = false
diff --git a/libxerces-c/manifest b/libxerces-c/manifest
new file mode 100644
index 0000000..8687ecb
--- /dev/null
+++ b/libxerces-c/manifest
@@ -0,0 +1,25 @@
+: 1
+name: libxerces-c
+
+# Note: remember to update doc-url below!
+#
+version: 3.2.3-a.0.z
+
+project: xerces-c
+summary: Validating XML parsing and serialization C++ library
+license: ASLv2 ; Apache License v2.0.
+topics: Xerces, C++, XML parser, DOM, SAX
+description-file: README
+url: http://xerces.apache.org/xerces-c/
+doc-url: http://xerces.apache.org/xerces-c/api-3.html
+src-url: https://git.build2.org/cgit/packaging/xerces-c/xerces-c/tree/libxerces-c/
+package-url: https://git.build2.org/cgit/packaging/xerces-c/
+email: c-users@xerces.apache.org ; Mailing list.
+package-email: packaging@build2.org ; Mailing list.
+build-error-email: builds@build2.org
+builds: default
+depends: * build2 >= 0.12.0
+depends: * bpkg >= 0.12.0
+depends: libcurl >= 7.67.0
+depends: libicuuc >= 65.1.0
+depends: libicui18n >= 65.1.0
diff --git a/libxerces-c/tests/.gitignore b/libxerces-c/tests/.gitignore
new file mode 100644
index 0000000..2e508a9
--- /dev/null
+++ b/libxerces-c/tests/.gitignore
@@ -0,0 +1,3 @@
+driver
+test/
+test-*/
diff --git a/libxerces-c/tests/build/.gitignore b/libxerces-c/tests/build/.gitignore
new file mode 100644
index 0000000..4a730a3
--- /dev/null
+++ b/libxerces-c/tests/build/.gitignore
@@ -0,0 +1,3 @@
+config.build
+root/
+bootstrap/
diff --git a/libxerces-c/tests/build/bootstrap.build b/libxerces-c/tests/build/bootstrap.build
new file mode 100644
index 0000000..2a03b3a
--- /dev/null
+++ b/libxerces-c/tests/build/bootstrap.build
@@ -0,0 +1,8 @@
+# file : tests/build/bootstrap.build
+# license : Apache License 2.0; see accompanying LICENSE file
+
+project = # Unnamed subproject.
+
+using config
+using dist
+using test
diff --git a/libxerces-c/tests/build/root.build b/libxerces-c/tests/build/root.build
new file mode 100644
index 0000000..7bf1cba
--- /dev/null
+++ b/libxerces-c/tests/build/root.build
@@ -0,0 +1,23 @@
+# file : tests/build/root.build
+# license : Apache License 2.0; see accompanying LICENSE file
+
+cxx.std = latest
+
+using cxx
+
+hxx{*}: extension = hpp
+cxx{*}: extension = cpp
+
+if ($cxx.target.system == 'win32-msvc')
+ cxx.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS
+
+if ($cxx.class == 'msvc')
+ cxx.coptions += /wd4251 /wd4275 /wd4800
+
+# Every exe{} in this subproject is by default a test.
+#
+exe{*}: test = true
+
+# Specify the test target for cross-testing.
+#
+test.target = $cxx.target
diff --git a/libxerces-c/tests/buildfile b/libxerces-c/tests/buildfile
new file mode 100644
index 0000000..f1869ed
--- /dev/null
+++ b/libxerces-c/tests/buildfile
@@ -0,0 +1,4 @@
+# file : tests/buildfile
+# license : Apache License 2.0; see accompanying LICENSE file
+
+./: {*/ -build/}
diff --git a/libxerces-c/tests/dom-print/DOMPrint b/libxerces-c/tests/dom-print/DOMPrint
new file mode 120000
index 0000000..d73574d
--- /dev/null
+++ b/libxerces-c/tests/dom-print/DOMPrint
@@ -0,0 +1 @@
+../../../upstream/samples/src/DOMPrint \ No newline at end of file
diff --git a/libxerces-c/tests/dom-print/buildfile b/libxerces-c/tests/dom-print/buildfile
new file mode 100644
index 0000000..76619a3
--- /dev/null
+++ b/libxerces-c/tests/dom-print/buildfile
@@ -0,0 +1,6 @@
+# file : tests/dom-print/buildfile
+# license : Apache License 2.0; see accompanying LICENSE file
+
+import libs = libxerces-c%lib{xerces-c}
+
+exe{driver}: DOMPrint/{hxx cxx}{*} $libs testscript
diff --git a/libxerces-c/tests/dom-print/testscript b/libxerces-c/tests/dom-print/testscript
new file mode 100644
index 0000000..f281d3f
--- /dev/null
+++ b/libxerces-c/tests/dom-print/testscript
@@ -0,0 +1,20 @@
+# file : tests/dom-print/testscript
+# license : Apache License 2.0; see accompanying LICENSE file
+
+: utf8
+:
+{
+ cat <<EOI >=f;
+ <?xml version="1.0" encoding="UTF-8"?>
+ <msg>
+ Mitteleuropäische catégorie
+ </msg>
+ EOI
+
+ $* -wfpp=on f >>~%EOO%
+ %<\?xml version="1.0" encoding="UTF-8".*\?>%
+ <msg>
+ Mitteleuropäische catégorie
+ </msg>
+ EOO
+}
diff --git a/libxerces-c/tests/net-accessor/NetAccessorTest.cpp b/libxerces-c/tests/net-accessor/NetAccessorTest.cpp
new file mode 100644
index 0000000..c2affbd
--- /dev/null
+++ b/libxerces-c/tests/net-accessor/NetAccessorTest.cpp
@@ -0,0 +1,167 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * $Id$
+ *
+ */
+
+
+// ---------------------------------------------------------------------------
+// Includes
+// ---------------------------------------------------------------------------
+#include <xercesc/util/PlatformUtils.hpp>
+#include <xercesc/util/XMLString.hpp>
+#include <xercesc/util/XMLURL.hpp>
+#include <xercesc/util/XMLNetAccessor.hpp>
+#include <xercesc/util/BinInputStream.hpp>
+
+#if defined(XERCES_NEW_IOSTREAMS)
+#include <iostream>
+#else
+#include <iostream.h>
+#endif
+
+XERCES_CPP_NAMESPACE_USE
+
+
+inline XERCES_STD_QUALIFIER ostream& operator<<(XERCES_STD_QUALIFIER ostream& os, const XMLCh* xmlStr)
+{
+ char* transcoded = XMLString::transcode(xmlStr);
+ os << transcoded;
+ XMLString::release(&transcoded);
+ return os;
+}
+
+
+void
+exercise(BinInputStream& stream)
+{
+ static float percents[] = { 1.0, 0.5, 0.25, 0.1, 0.15, 0.113, 0.333, 0.0015, 0.0013 };
+ int numPercents = sizeof(percents) / sizeof(float);
+
+ const unsigned int bufferMax = 4096;
+ XMLByte buffer[bufferMax];
+
+ int iteration = 0;
+ unsigned int bytesRead = 0;
+ do {
+ // Calculate a percentage of our maximum buffer size, going through
+ // them round-robin
+ float percent = percents[iteration % numPercents];
+ unsigned int bufCnt = (unsigned int)(bufferMax * percent);
+
+ // Check to make sure we didn't go out of bounds
+ if (bufCnt <= 0)
+ bufCnt = 1;
+ if (bufCnt > bufferMax)
+ bufCnt = bufferMax;
+
+ // Read bytes into our buffer
+ bytesRead = stream.readBytes(buffer, bufCnt);
+ //XERCES_STD_QUALIFIER cerr << "Read " << bytesRead << " bytes into a " << bufCnt << " byte buffer\n";
+
+ if (bytesRead > 0)
+ {
+ // Write the data to standard out
+ XERCES_STD_QUALIFIER cout.write((char*)buffer, bytesRead);
+ }
+
+ ++iteration;
+ } while (bytesRead > 0);
+}
+
+
+// ---------------------------------------------------------------------------
+// Program entry point
+// ---------------------------------------------------------------------------
+int
+main(int argc, char** argv)
+{
+ // Init the XML platform
+ try
+ {
+ XMLPlatformUtils::Initialize();
+ }
+
+ catch(const XMLException& toCatch)
+ {
+ XERCES_STD_QUALIFIER cout << "Error during platform init! Message:\n"
+ << toCatch.getMessage() << XERCES_STD_QUALIFIER endl;
+ return 1;
+ }
+
+ // Look for our one and only parameter
+ if (argc != 2)
+ {
+ XERCES_STD_QUALIFIER cerr << "Usage: NetAccessorTest url\n"
+ "\n"
+ "This test reads data from the given url and writes the result\n"
+ "to standard output.\n"
+ "\n"
+ "A variety of buffer sizes is are used during the test.\n"
+ "\n"
+ ;
+ exit(1);
+ }
+
+ // Get the URL
+ char* url = argv[1];
+
+ int r = 1;
+
+ // Do the test
+ try
+ {
+ XMLURL xmlURL(url);
+
+ // Get the netaccessor
+ XMLNetAccessor* na = XMLPlatformUtils::fgNetAccessor;
+ if (na == 0)
+ {
+ XERCES_STD_QUALIFIER cerr << "No netaccessor is available. Aborting.\n";
+ exit(2);
+ }
+
+ // Build a binary input stream
+ BinInputStream* is = na->makeNew(xmlURL);
+ if (is == 0)
+ {
+ XERCES_STD_QUALIFIER cerr << "No binary input stream created. Aborting.\n";
+ exit(3);
+ }
+
+ // Exercise the inputstream
+ exercise(*is);
+
+ // Delete the is
+ delete is;
+ r = 0;
+ }
+ catch(const XMLException& toCatch)
+ {
+ XERCES_STD_QUALIFIER cerr << "Exception during test:\n "
+ << toCatch.getMessage()
+ << XERCES_STD_QUALIFIER endl;
+ }
+
+ // And call the termination method
+ XMLPlatformUtils::Terminate();
+
+ return r;
+}
+
diff --git a/libxerces-c/tests/net-accessor/buildfile b/libxerces-c/tests/net-accessor/buildfile
new file mode 100644
index 0000000..ab3f79f
--- /dev/null
+++ b/libxerces-c/tests/net-accessor/buildfile
@@ -0,0 +1,11 @@
+# file : tests/net-accessor/buildfile
+# license : Apache License 2.0; see accompanying LICENSE file
+
+import libs = libxerces-c%lib{xerces-c}
+
+exe{driver}: {hxx cxx}{*} $libs testscript
+
+# Disable MSVC warnings that pop up with /W3.
+#
+if ($cxx.class == 'msvc')
+ cxx.coptions += /wd4267 /wd4305
diff --git a/libxerces-c/tests/net-accessor/handle-exception-as-error.patch b/libxerces-c/tests/net-accessor/handle-exception-as-error.patch
new file mode 100644
index 0000000..674e5ba
--- /dev/null
+++ b/libxerces-c/tests/net-accessor/handle-exception-as-error.patch
@@ -0,0 +1,35 @@
+diff --git a/libxerces-c/tests/net-accessor/NetAccessorTest.cpp b/libxerces-c/tests/net-accessor/NetAccessorTest.cpp
+index 3bb735b..c2affbd 100644
+--- a/libxerces-c/tests/net-accessor/NetAccessorTest.cpp
++++ b/libxerces-c/tests/net-accessor/NetAccessorTest.cpp
+@@ -122,6 +122,8 @@ main(int argc, char** argv)
+ // Get the URL
+ char* url = argv[1];
+
++ int r = 1;
++
+ // Do the test
+ try
+ {
+@@ -148,11 +150,11 @@ main(int argc, char** argv)
+
+ // Delete the is
+ delete is;
+-
++ r = 0;
+ }
+ catch(const XMLException& toCatch)
+ {
+- XERCES_STD_QUALIFIER cout << "Exception during test:\n "
++ XERCES_STD_QUALIFIER cerr << "Exception during test:\n "
+ << toCatch.getMessage()
+ << XERCES_STD_QUALIFIER endl;
+ }
+@@ -160,6 +162,6 @@ main(int argc, char** argv)
+ // And call the termination method
+ XMLPlatformUtils::Terminate();
+
+- return 0;
++ return r;
+ }
+
diff --git a/libxerces-c/tests/net-accessor/testscript b/libxerces-c/tests/net-accessor/testscript
new file mode 100644
index 0000000..993423b
--- /dev/null
+++ b/libxerces-c/tests/net-accessor/testscript
@@ -0,0 +1,34 @@
+# file : tests/net-accessor/testscript
+# license : Apache License 2.0; see accompanying LICENSE file
+
+: http
+:
+$* 'http://www.example.com' >>~%EOO%
+ %.+
+ EOO
+
+# If we want to test how HTTPS URLs are handled, we need to make it work
+# always (see how the curl utility is packaged for details).
+#
+#\
+: https
+:
+: Test that an HTTPS URL is queried successfully using libcurl via the system
+: SSL backend on Windows and MacOS/Clang and fails for other targets that use
+: the OpenSSL backend by default.
+:
+if ($cxx.target.class == 'windows' || \
+ $cxx.target.class == 'macos' && $cxx.id == 'clang-apple')
+{
+ $* 'https://www.example.com' >>~%EOO%
+ %.+
+ EOO
+}
+else
+{
+ $* 'https://www.example.com' 2>>~%EOE% != 0
+ Exception during test:
+ %.+
+ EOE
+}
+#\
diff --git a/libxerces-c/tests/psvi-writer/PSVIWriter b/libxerces-c/tests/psvi-writer/PSVIWriter
new file mode 120000
index 0000000..92efd5c
--- /dev/null
+++ b/libxerces-c/tests/psvi-writer/PSVIWriter
@@ -0,0 +1 @@
+../../../upstream/samples/src/PSVIWriter \ No newline at end of file
diff --git a/libxerces-c/tests/psvi-writer/buildfile b/libxerces-c/tests/psvi-writer/buildfile
new file mode 100644
index 0000000..9a5d84d
--- /dev/null
+++ b/libxerces-c/tests/psvi-writer/buildfile
@@ -0,0 +1,11 @@
+# file : tests/psvi-writer/buildfile
+# license : Apache License 2.0; see accompanying LICENSE file
+
+import libs = libxerces-c%lib{xerces-c}
+
+exe{driver}: PSVIWriter/{hxx cxx}{*} $libs testscript
+
+# Disable MSVC warnings that pop up with /W3.
+#
+if ($cxx.class == 'msvc')
+ cxx.coptions += /wd4267
diff --git a/libxerces-c/tests/psvi-writer/testscript b/libxerces-c/tests/psvi-writer/testscript
new file mode 100644
index 0000000..5c3b58f
--- /dev/null
+++ b/libxerces-c/tests/psvi-writer/testscript
@@ -0,0 +1,21 @@
+# file : tests/psvi-writer/testscript
+# license : Apache License 2.0; see accompanying LICENSE file
+
+: utf8
+:
+{
+ cat <<EOI >=f;
+ <?xml version="1.0" encoding="UTF-8"?>
+ <msg>
+ Mitteleuropäische catégorie
+ </msg>
+ EOI
+
+ $* f >>~%EOO%
+ %.+
+ %\s*<textContent>%
+ %\s*Mitteleuropäische catégorie%
+ %\s*</textContent>%
+ %.+
+ EOO
+}
diff --git a/libxerces-c/tests/sax-print/SAXPrint b/libxerces-c/tests/sax-print/SAXPrint
new file mode 120000
index 0000000..7c61024
--- /dev/null
+++ b/libxerces-c/tests/sax-print/SAXPrint
@@ -0,0 +1 @@
+../../../upstream/samples/src/SAXPrint \ No newline at end of file
diff --git a/libxerces-c/tests/sax-print/buildfile b/libxerces-c/tests/sax-print/buildfile
new file mode 100644
index 0000000..ed3d22b
--- /dev/null
+++ b/libxerces-c/tests/sax-print/buildfile
@@ -0,0 +1,6 @@
+# file : tests/sax-print/buildfile
+# license : Apache License 2.0; see accompanying LICENSE file
+
+import libs = libxerces-c%lib{xerces-c}
+
+exe{driver}: SAXPrint/{hxx cxx}{*} $libs testscript
diff --git a/libxerces-c/tests/sax-print/testscript b/libxerces-c/tests/sax-print/testscript
new file mode 100644
index 0000000..cbc62e4
--- /dev/null
+++ b/libxerces-c/tests/sax-print/testscript
@@ -0,0 +1,20 @@
+# file : tests/sax-print/testscript
+# license : Apache License 2.0; see accompanying LICENSE file
+
+: utf8
+:
+{
+ cat <<EOI >=f;
+ <?xml version="1.0" encoding="UTF-8"?>
+ <msg>
+ Mitteleuropäische catégorie
+ </msg>
+ EOI
+
+ $* -x=UTF-8 f >>:EOO
+ <?xml version="1.0" encoding="UTF-8"?>
+ <msg>
+ Mitteleuropäische catégorie
+ </msg>
+ EOO
+}
diff --git a/libxerces-c/tests/sax2-print/SAX2Print b/libxerces-c/tests/sax2-print/SAX2Print
new file mode 120000
index 0000000..9f0238e
--- /dev/null
+++ b/libxerces-c/tests/sax2-print/SAX2Print
@@ -0,0 +1 @@
+../../../upstream/samples/src/SAX2Print \ No newline at end of file
diff --git a/libxerces-c/tests/sax2-print/buildfile b/libxerces-c/tests/sax2-print/buildfile
new file mode 100644
index 0000000..fd4875d
--- /dev/null
+++ b/libxerces-c/tests/sax2-print/buildfile
@@ -0,0 +1,6 @@
+# file : tests/sax2-print/buildfile
+# license : Apache License 2.0; see accompanying LICENSE file
+
+import libs = libxerces-c%lib{xerces-c}
+
+exe{driver}: SAX2Print/{hxx cxx}{*} $libs testscript
diff --git a/libxerces-c/tests/sax2-print/testscript b/libxerces-c/tests/sax2-print/testscript
new file mode 100644
index 0000000..6fedae3
--- /dev/null
+++ b/libxerces-c/tests/sax2-print/testscript
@@ -0,0 +1,20 @@
+# file : tests/sax2-print/testscript
+# license : Apache License 2.0; see accompanying LICENSE file
+
+: utf8
+:
+{
+ cat <<EOI >=f;
+ <?xml version="1.0" encoding="UTF-8"?>
+ <msg>
+ Mitteleuropäische catégorie
+ </msg>
+ EOI
+
+ $* -x=UTF-8 f >>:EOO
+ <?xml version="1.0" encoding="UTF-8"?>
+ <msg>
+ Mitteleuropäische catégorie
+ </msg>
+ EOO
+}
diff --git a/libxerces-c/xercesc/buildfile b/libxerces-c/xercesc/buildfile
new file mode 100644
index 0000000..7124293
--- /dev/null
+++ b/libxerces-c/xercesc/buildfile
@@ -0,0 +1,148 @@
+# file : xercesc/buildfile
+# license : Apache License 2.0; see accompanying LICENSE file
+
+# Note that the installed util/NetAccessors/Curl/CurlURLInputStream.hpp
+# includes the libcurl headers.
+#
+import int_libs = libcurl%lib{curl}
+
+import imp_libs = libicuuc%lib{icuuc}
+import imp_libs += libicui18n%lib{icui18n}
+
+lib{xerces-c}: {h }{config } \
+ {hxx txx cxx}{*/** -util/FileManagers/** -util/XercesVersion} \
+ {hxx }{ util/XercesVersion} \
+ $int_libs $imp_libs
+
+tclass = $cxx.target.class
+tsys = $cxx.target.system
+
+windows = ($tclass == 'windows')
+
+lib{xerces-c}: {h c}{stricmp strnicmp} \
+util/FileManagers/{hxx cxx}{PosixFileMgr }: include = (!$windows)
+
+lib{xerces-c}: util/FileManagers/{hxx cxx}{WindowsFileMgr}: include = $windows
+
+# Include the generated version header into the distribution (so that we
+# don't pick up an installed one) and don't remove it when cleaning in src (so
+# that clean results in a state identical to distributed).
+#
+util/hxx{XercesVersion}: util/in{XercesVersion} $src_root/manifest
+{
+ dist = true
+ clean = ($src_root != $out_root)
+
+ in.symbol = '@'
+
+ XERCES_VERSION_MAJOR = "$version.major"
+ XERCES_VERSION_MINOR = "$version.minor"
+ XERCES_VERSION_REVISION = "$version.patch"
+
+ XERCES_GRAMMAR_SERIALIZATION_LEVEL = "$grammar_serialization_level"
+}
+
+# Build options.
+#
+cc.poptions += -DXERCES_BUILDING_LIBRARY -DHAVE_CONFIG_H -D_THREAD_SAFE
+
+if $windows
+ cc.poptions += -DWIN32 -D_WINDOWS -D_MBCS
+
+# Note that we need to add "-I$src_root" for the headers auto-generating
+# machinery to work properly.
+#
+cc.poptions =+ "-I$out_root" "-I$src_root" "-I$src_base"
+
+obja{*}: cxx.poptions += -DLIBXERCES_C_STATIC_BUILD
+objs{*}: cxx.poptions += -DLIBXERCES_C_SHARED_BUILD
+
+switch $c.class
+{
+ case 'gcc'
+ {
+ # Disable warnings that pop up with -Wall -Wextra. Upstream doesn't seem
+ # to care about these and it is not easy to disable specific warnings in a
+ # way that works across compilers/version (some -Wno-* options are only
+ # recognized in newer versions). There are still some warnings left that
+ # appear for certain platforms/compilers. We pass them through but disable
+ # treating them as errors.
+ #
+ cc.coptions += -Wno-all -Wno-extra -Wno-error
+
+ # Disable the Clang targeting MSVC warnings.
+ #
+ if ($c.id == 'clang' && $tsys == 'win32-msvc')
+ cc.coptions += -Wno-deprecated-declarations
+ }
+ case 'msvc'
+ {
+ # Disable warnings that pop up with /W3.
+ #
+ cc.coptions += /wd4244 /wd4267 /wd4996 /wd4305
+ }
+}
+
+switch $tclass, $tsys
+{
+ case 'windows', 'mingw32'
+ {
+ # Make sure all symbols are resolvable.
+ #
+ cxx.loptions += -Wl,--no-undefined
+
+ cxx.libs += -lws2_32
+ }
+ case 'windows'
+ {
+ # Suppress the 'object file does not define any public symbols' warning.
+ #
+ cxx.aoptions += /IGNORE:4221
+
+ cxx.libs += ws2_32.lib
+ }
+ case 'linux'
+ {
+ # Make sure all symbols are resolvable.
+ #
+ cxx.loptions += -Wl,--no-undefined
+
+ cxx.libs += -lm -lpthread
+ }
+ default
+ {
+ cxx.libs += -lpthread
+ }
+}
+
+# Export options.
+#
+lib{xerces-c}:
+{
+ cxx.export.poptions = "-I$out_root" "-I$src_root"
+ cxx.export.libs = $int_libs
+}
+
+liba{xerces-c}: cxx.export.poptions += -DLIBXERCES_C_STATIC
+libs{xerces-c}: cxx.export.poptions += -DLIBXERCES_C_SHARED
+
+# See bootstrap.build for details.
+#
+if $version.pre_release
+ lib{xerces-c}: bin.lib.version = @"-$version.project_id"
+else
+ lib{xerces-c}: bin.lib.version = @"-$abi_version"
+
+# Don't install the implementation details C headers (config.h and the
+# compatibility function declarations).
+#
+h{*}: install = false
+
+# Install the C++ headers into the xercesc/ subdirectory of, say, /usr/include/
+# recreating subdirectories.
+#
+{hxx txx}{*}:
+{
+ install = include/xercesc/
+ install.subdirs = true
+}
diff --git a/libxerces-c/xercesc/config.h b/libxerces-c/xercesc/config.h
new file mode 100644
index 0000000..48bd880
--- /dev/null
+++ b/libxerces-c/xercesc/config.h
@@ -0,0 +1,137 @@
+/* file : xercesc/config.h -*- C -*-
+ * license : Apache License 2.0; see accompanying LICENSE file
+ */
+
+#ifndef XERCESC_CONFIG_H
+#define XERCESC_CONFIG_H
+
+/* For the semantics of the following macros refer to config.h.cmake.in.orig
+ * and upstream's configure.ac.
+ *
+ * Note that we will explicitly undefine macros that are present in the
+ * libxerces-c source code but should not be defined. While this is not
+ * technically required, it simplifies the change tracking (see README-DEV).
+ * As a bonus we also make sure that they are not get eventually defined by
+ * some system headers.
+ */
+
+/* SIZE_MAX.
+ */
+#if defined(__cplusplus)
+# include <cstdint>
+#else
+# include <stdint.h> /* Requires C99. */
+#endif
+
+/* Use the ICU transcoder.
+ */
+#define XERCES_USE_TRANSCODER_ICU 1
+#undef XERCES_USE_TRANSCODER_GNUICONV
+#undef XERCES_USE_TRANSCODER_ICONV
+#undef XERCES_USE_TRANSCODER_MACOSUNICODECONVERTER
+#undef XERCES_USE_TRANSCODER_WINDOWS
+
+/* Use the Curl net accessor.
+ */
+#define XERCES_USE_NETACCESSOR_CURL 1
+#undef XERCES_USE_NETACCESSOR_CFURL
+#undef XERCES_USE_NETACCESSOR_SOCKET
+#undef XERCES_USE_NETACCESSOR_WINSOCK
+
+/* Use the in-memory message loader.
+ */
+#define XERCES_USE_MSGLOADER_INMEMORY 1
+#undef XERCES_USE_MSGLOADER_ICONV
+#undef XERCES_USE_MSGLOADER_ICU
+
+/* Use the standard mutex manager.
+ */
+#define XERCES_USE_MUTEXMGR_STD 1
+#undef XERCES_USE_MUTEXMGR_NOTHREAD
+#undef XERCES_USE_MUTEXMGR_POSIX
+#undef XERCES_USE_MUTEXMGR_WINDOWS
+
+/* Use the OS-specific file manager.
+ */
+#ifndef _WIN32
+# define XERCES_USE_FILEMGR_POSIX 1
+#else
+# define XERCES_USE_FILEMGR_WINDOWS 1
+#endif
+
+/* Specific for FreeBSD.
+ */
+#ifdef __FreeBSD__
+# define HAVE_CPUID_H 1
+# define XERCES_HAVE_GETCPUID 1
+#endif
+
+/* Specific for POSIX.
+ */
+#ifndef _WIN32
+# define HAVE_GETTIMEOFDAY 1
+# define HAVE_GMTIME_R 1
+# define HAVE_SNPRINTF 1
+
+/* Is not specified by the POSIX standard but is present on all POSIX
+ * platforms we support.
+ */
+# define HAVE_TIMEGM 1
+
+/* Specific for Windows.
+ */
+#else
+# define HAVE_SYS_TIMEB_H 1
+# define HAVE_FTIME 1
+# define HAVE_STRICMP 1
+# define HAVE_STRNICMP 1
+# define XERCES_HAVE_INTRIN_H 1
+# define XERCES_PATH_DELIMITER_BACKSLASH 1
+# define XERCES_HAVE_CPUID_INTRINSIC 1
+#endif
+
+/* Specific for (non-) VC.
+ */
+#ifndef _MSC_VER
+# define HAVE_PATH_MAX 1
+# define HAVE_STRCASECMP 1
+# define HAVE_STRNCASECMP 1
+# define HAVE_STRINGS_H 1
+# define HAVE_STRING_H 1
+# define HAVE_SYS_TIME_H 1
+# define HAVE_UNISTD_H 1
+#endif
+
+/* Common for all supported OSes/compilers.
+ */
+#define HAVE_ERRNO_H 1
+#define HAVE_LIMITS_H 1
+#define HAVE_SYS_TYPES_H 1
+#define XERCES_HAS_CPP_NAMESPACE 1
+#define XERCES_STD_NAMESPACE 1
+#define XERCES_LSTRSUPPORT 1
+#define XERCES_NEW_IOSTREAMS 1
+#define XERCES_SIZE_MAX SIZE_MAX
+
+#undef XERCES_HAVE_EMMINTRIN_H
+#undef XERCES_HAVE_SSE2_INTRINSIC
+#undef XERCES_NO_MATCHING_DELETE_OPERATOR
+#undef XERCES_NO_NATIVE_BOOL
+
+/* Are also defined in Xerces_autoconf_config.hpp which is supposedly enough.
+ * Note that Xerces_autoconf_config.hpp is expected to be (indirectly)
+ * included into all public headers to properly export/import the API
+ * functions.
+
+#define XERCES_PLATFORM_EXPORT
+#define XERCES_PLATFORM_IMPORT
+ */
+
+/* We can probably assume that on platforms we build for, these keywords
+ * doesn't require definition.
+
+#undef const
+#undef inline
+*/
+
+#endif /* XERCESC_CONFIG_H */
diff --git a/libxerces-c/xercesc/config.h.cmake.in.orig b/libxerces-c/xercesc/config.h.cmake.in.orig
new file mode 120000
index 0000000..0038ca1
--- /dev/null
+++ b/libxerces-c/xercesc/config.h.cmake.in.orig
@@ -0,0 +1 @@
+../../upstream/config.h.cmake.in \ No newline at end of file
diff --git a/libxerces-c/xercesc/dom b/libxerces-c/xercesc/dom
new file mode 120000
index 0000000..4bff73e
--- /dev/null
+++ b/libxerces-c/xercesc/dom
@@ -0,0 +1 @@
+../../upstream/src/xercesc/dom \ No newline at end of file
diff --git a/libxerces-c/xercesc/export-template-instantiations.patch b/libxerces-c/xercesc/export-template-instantiations.patch
new file mode 100644
index 0000000..a62de95
--- /dev/null
+++ b/libxerces-c/xercesc/export-template-instantiations.patch
@@ -0,0 +1,29 @@
+diff --git a/libxerces-c/xercesc/util/Janitor.hpp b/libxerces-c/xercesc/util/Janitor.hpp
+index cf06e67..da970bf 100644
+--- a/libxerces-c/xercesc/util/Janitor.hpp
++++ b/libxerces-c/xercesc/util/Janitor.hpp
+@@ -155,8 +155,8 @@ private :
+ };
+
+ #if defined(__GNUC__) || (! defined(_AIX) && ! defined(__hpux) && ! defined(__sun))
+-XERCES_TEMPLATE_EXTERN template class XMLUTIL_EXPORT ArrayJanitor<XMLByte>;
+-XERCES_TEMPLATE_EXTERN template class XMLUTIL_EXPORT ArrayJanitor<XMLCh>;
++extern template class XERCES_PLATFORM_DECEXPORT ArrayJanitor<XMLByte>;
++extern template class XERCES_PLATFORM_DECEXPORT ArrayJanitor<XMLCh>;
+ #endif
+
+ XERCES_CPP_NAMESPACE_END
+diff --git a/libxerces-c/xercesc/util/JanitorExports.cpp b/libxerces-c/xercesc/util/JanitorExports.cpp
+index ec35bea..024434f 100644
+--- a/libxerces-c/xercesc/util/JanitorExports.cpp
++++ b/libxerces-c/xercesc/util/JanitorExports.cpp
+@@ -19,7 +19,7 @@
+
+ XERCES_CPP_NAMESPACE_BEGIN
+
+-template class ArrayJanitor<XMLByte>;
+-template class ArrayJanitor<XMLCh>;
++template class XERCES_PLATFORM_DEFEXPORT ArrayJanitor<XMLByte>;
++template class XERCES_PLATFORM_DEFEXPORT ArrayJanitor<XMLCh>;
+
+ XERCES_CPP_NAMESPACE_END
diff --git a/libxerces-c/xercesc/framework b/libxerces-c/xercesc/framework
new file mode 120000
index 0000000..6bc859f
--- /dev/null
+++ b/libxerces-c/xercesc/framework
@@ -0,0 +1 @@
+../../upstream/src/xercesc/framework \ No newline at end of file
diff --git a/libxerces-c/xercesc/internal b/libxerces-c/xercesc/internal
new file mode 120000
index 0000000..7daca54
--- /dev/null
+++ b/libxerces-c/xercesc/internal
@@ -0,0 +1 @@
+../../upstream/src/xercesc/internal \ No newline at end of file
diff --git a/libxerces-c/xercesc/parsers b/libxerces-c/xercesc/parsers
new file mode 120000
index 0000000..a77068b
--- /dev/null
+++ b/libxerces-c/xercesc/parsers
@@ -0,0 +1 @@
+../../upstream/src/xercesc/parsers \ No newline at end of file
diff --git a/libxerces-c/xercesc/sax b/libxerces-c/xercesc/sax
new file mode 120000
index 0000000..9ac807a
--- /dev/null
+++ b/libxerces-c/xercesc/sax
@@ -0,0 +1 @@
+../../upstream/src/xercesc/sax \ No newline at end of file
diff --git a/libxerces-c/xercesc/sax2 b/libxerces-c/xercesc/sax2
new file mode 120000
index 0000000..f7f3980
--- /dev/null
+++ b/libxerces-c/xercesc/sax2
@@ -0,0 +1 @@
+../../upstream/src/xercesc/sax2 \ No newline at end of file
diff --git a/libxerces-c/xercesc/stricmp.c b/libxerces-c/xercesc/stricmp.c
new file mode 120000
index 0000000..d9f5759
--- /dev/null
+++ b/libxerces-c/xercesc/stricmp.c
@@ -0,0 +1 @@
+../../upstream/src/stricmp.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/stricmp.h b/libxerces-c/xercesc/stricmp.h
new file mode 120000
index 0000000..7ee3992
--- /dev/null
+++ b/libxerces-c/xercesc/stricmp.h
@@ -0,0 +1 @@
+../../upstream/src/stricmp.h \ No newline at end of file
diff --git a/libxerces-c/xercesc/strnicmp.c b/libxerces-c/xercesc/strnicmp.c
new file mode 120000
index 0000000..b75a354
--- /dev/null
+++ b/libxerces-c/xercesc/strnicmp.c
@@ -0,0 +1 @@
+../../upstream/src/strnicmp.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/strnicmp.h b/libxerces-c/xercesc/strnicmp.h
new file mode 120000
index 0000000..d5811c9
--- /dev/null
+++ b/libxerces-c/xercesc/strnicmp.h
@@ -0,0 +1 @@
+../../upstream/src/strnicmp.h \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/ArrayIndexOutOfBoundsException.hpp b/libxerces-c/xercesc/util/ArrayIndexOutOfBoundsException.hpp
new file mode 120000
index 0000000..d27de1c
--- /dev/null
+++ b/libxerces-c/xercesc/util/ArrayIndexOutOfBoundsException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/ArrayIndexOutOfBoundsException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/Base64.cpp b/libxerces-c/xercesc/util/Base64.cpp
new file mode 120000
index 0000000..0093e5f
--- /dev/null
+++ b/libxerces-c/xercesc/util/Base64.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/Base64.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/Base64.hpp b/libxerces-c/xercesc/util/Base64.hpp
new file mode 120000
index 0000000..d5e2d10
--- /dev/null
+++ b/libxerces-c/xercesc/util/Base64.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/Base64.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/BaseRefVectorOf.c b/libxerces-c/xercesc/util/BaseRefVectorOf.c
new file mode 120000
index 0000000..99c17ed
--- /dev/null
+++ b/libxerces-c/xercesc/util/BaseRefVectorOf.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/BaseRefVectorOf.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/BaseRefVectorOf.hpp b/libxerces-c/xercesc/util/BaseRefVectorOf.hpp
new file mode 120000
index 0000000..57340c1
--- /dev/null
+++ b/libxerces-c/xercesc/util/BaseRefVectorOf.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/BaseRefVectorOf.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/BinFileInputStream.cpp b/libxerces-c/xercesc/util/BinFileInputStream.cpp
new file mode 120000
index 0000000..2794586
--- /dev/null
+++ b/libxerces-c/xercesc/util/BinFileInputStream.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/BinFileInputStream.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/BinFileInputStream.hpp b/libxerces-c/xercesc/util/BinFileInputStream.hpp
new file mode 120000
index 0000000..c2787d2
--- /dev/null
+++ b/libxerces-c/xercesc/util/BinFileInputStream.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/BinFileInputStream.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/BinInputStream.cpp b/libxerces-c/xercesc/util/BinInputStream.cpp
new file mode 120000
index 0000000..ed12c0f
--- /dev/null
+++ b/libxerces-c/xercesc/util/BinInputStream.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/BinInputStream.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/BinInputStream.hpp b/libxerces-c/xercesc/util/BinInputStream.hpp
new file mode 120000
index 0000000..3704288
--- /dev/null
+++ b/libxerces-c/xercesc/util/BinInputStream.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/BinInputStream.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/BinMemInputStream.cpp b/libxerces-c/xercesc/util/BinMemInputStream.cpp
new file mode 120000
index 0000000..bd2e45a
--- /dev/null
+++ b/libxerces-c/xercesc/util/BinMemInputStream.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/BinMemInputStream.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/BinMemInputStream.hpp b/libxerces-c/xercesc/util/BinMemInputStream.hpp
new file mode 120000
index 0000000..95459ff
--- /dev/null
+++ b/libxerces-c/xercesc/util/BinMemInputStream.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/BinMemInputStream.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/BitOps.hpp b/libxerces-c/xercesc/util/BitOps.hpp
new file mode 120000
index 0000000..756f448
--- /dev/null
+++ b/libxerces-c/xercesc/util/BitOps.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/BitOps.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/BitSet.cpp b/libxerces-c/xercesc/util/BitSet.cpp
new file mode 120000
index 0000000..051c5f5
--- /dev/null
+++ b/libxerces-c/xercesc/util/BitSet.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/BitSet.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/BitSet.hpp b/libxerces-c/xercesc/util/BitSet.hpp
new file mode 120000
index 0000000..f0fab20
--- /dev/null
+++ b/libxerces-c/xercesc/util/BitSet.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/BitSet.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/CountedPointer.c b/libxerces-c/xercesc/util/CountedPointer.c
new file mode 120000
index 0000000..e36c731
--- /dev/null
+++ b/libxerces-c/xercesc/util/CountedPointer.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/CountedPointer.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/CountedPointer.hpp b/libxerces-c/xercesc/util/CountedPointer.hpp
new file mode 120000
index 0000000..dea6454
--- /dev/null
+++ b/libxerces-c/xercesc/util/CountedPointer.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/CountedPointer.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/DefaultPanicHandler.cpp b/libxerces-c/xercesc/util/DefaultPanicHandler.cpp
new file mode 120000
index 0000000..9e24a58
--- /dev/null
+++ b/libxerces-c/xercesc/util/DefaultPanicHandler.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/DefaultPanicHandler.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/DefaultPanicHandler.hpp b/libxerces-c/xercesc/util/DefaultPanicHandler.hpp
new file mode 120000
index 0000000..ef354cb
--- /dev/null
+++ b/libxerces-c/xercesc/util/DefaultPanicHandler.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/DefaultPanicHandler.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/EmptyStackException.hpp b/libxerces-c/xercesc/util/EmptyStackException.hpp
new file mode 120000
index 0000000..5971b29
--- /dev/null
+++ b/libxerces-c/xercesc/util/EmptyStackException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/EmptyStackException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/EncodingValidator.cpp b/libxerces-c/xercesc/util/EncodingValidator.cpp
new file mode 120000
index 0000000..53766af
--- /dev/null
+++ b/libxerces-c/xercesc/util/EncodingValidator.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/EncodingValidator.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/EncodingValidator.hpp b/libxerces-c/xercesc/util/EncodingValidator.hpp
new file mode 120000
index 0000000..2fbcda5
--- /dev/null
+++ b/libxerces-c/xercesc/util/EncodingValidator.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/EncodingValidator.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/FileManagers b/libxerces-c/xercesc/util/FileManagers
new file mode 120000
index 0000000..73cd212
--- /dev/null
+++ b/libxerces-c/xercesc/util/FileManagers
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/FileManagers \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/FlagJanitor.c b/libxerces-c/xercesc/util/FlagJanitor.c
new file mode 120000
index 0000000..8647c0a
--- /dev/null
+++ b/libxerces-c/xercesc/util/FlagJanitor.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/FlagJanitor.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/FlagJanitor.hpp b/libxerces-c/xercesc/util/FlagJanitor.hpp
new file mode 120000
index 0000000..a0de651
--- /dev/null
+++ b/libxerces-c/xercesc/util/FlagJanitor.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/FlagJanitor.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/Hash2KeysSetOf.c b/libxerces-c/xercesc/util/Hash2KeysSetOf.c
new file mode 120000
index 0000000..51dd1e3
--- /dev/null
+++ b/libxerces-c/xercesc/util/Hash2KeysSetOf.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/Hash2KeysSetOf.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/Hash2KeysSetOf.hpp b/libxerces-c/xercesc/util/Hash2KeysSetOf.hpp
new file mode 120000
index 0000000..d9f16d1
--- /dev/null
+++ b/libxerces-c/xercesc/util/Hash2KeysSetOf.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/Hash2KeysSetOf.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/Hashers.hpp b/libxerces-c/xercesc/util/Hashers.hpp
new file mode 120000
index 0000000..152872b
--- /dev/null
+++ b/libxerces-c/xercesc/util/Hashers.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/Hashers.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/HeaderDummy.cpp b/libxerces-c/xercesc/util/HeaderDummy.cpp
new file mode 120000
index 0000000..7d2239b
--- /dev/null
+++ b/libxerces-c/xercesc/util/HeaderDummy.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/HeaderDummy.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/HexBin.cpp b/libxerces-c/xercesc/util/HexBin.cpp
new file mode 120000
index 0000000..b3f57ee
--- /dev/null
+++ b/libxerces-c/xercesc/util/HexBin.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/HexBin.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/HexBin.hpp b/libxerces-c/xercesc/util/HexBin.hpp
new file mode 120000
index 0000000..5ccd3b9
--- /dev/null
+++ b/libxerces-c/xercesc/util/HexBin.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/HexBin.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/IOException.hpp b/libxerces-c/xercesc/util/IOException.hpp
new file mode 120000
index 0000000..fbd5825
--- /dev/null
+++ b/libxerces-c/xercesc/util/IOException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/IOException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/IllegalArgumentException.hpp b/libxerces-c/xercesc/util/IllegalArgumentException.hpp
new file mode 120000
index 0000000..d0bd269
--- /dev/null
+++ b/libxerces-c/xercesc/util/IllegalArgumentException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/IllegalArgumentException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/InvalidCastException.hpp b/libxerces-c/xercesc/util/InvalidCastException.hpp
new file mode 120000
index 0000000..3c9e76f
--- /dev/null
+++ b/libxerces-c/xercesc/util/InvalidCastException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/InvalidCastException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/Janitor.c b/libxerces-c/xercesc/util/Janitor.c
new file mode 120000
index 0000000..de4adda
--- /dev/null
+++ b/libxerces-c/xercesc/util/Janitor.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/Janitor.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/Janitor.hpp b/libxerces-c/xercesc/util/Janitor.hpp
new file mode 100644
index 0000000..da970bf
--- /dev/null
+++ b/libxerces-c/xercesc/util/Janitor.hpp
@@ -0,0 +1,168 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * $Id$
+ */
+
+#if !defined(XERCESC_INCLUDE_GUARD_JANITOR_HPP)
+#define XERCESC_INCLUDE_GUARD_JANITOR_HPP
+
+#include <xercesc/util/XMemory.hpp>
+#include <xercesc/framework/MemoryManager.hpp>
+
+XERCES_CPP_NAMESPACE_BEGIN
+
+template <class T> class Janitor : public XMemory
+{
+public :
+ // -----------------------------------------------------------------------
+ // Constructors and Destructor
+ // -----------------------------------------------------------------------
+ Janitor(T* const toDelete);
+ ~Janitor();
+
+ // -----------------------------------------------------------------------
+ // Public, non-virtual methods
+ // -----------------------------------------------------------------------
+ void orphan();
+
+ // small amount of auto_ptr compatibility
+ T& operator*() const;
+ T* operator->() const;
+ T* get() const;
+ T* release();
+ void reset(T* p = 0);
+ bool isDataNull();
+
+private :
+ // -----------------------------------------------------------------------
+ // Unimplemented constructors and operators
+ // -----------------------------------------------------------------------
+ Janitor();
+ Janitor(const Janitor<T>&);
+ Janitor<T>& operator=(const Janitor<T>&);
+
+ // -----------------------------------------------------------------------
+ // Private data members
+ //
+ // fData
+ // This is the pointer to the object or structure that must be
+ // destroyed when this object is destroyed.
+ // -----------------------------------------------------------------------
+ T* fData;
+};
+
+
+
+template <class T> class ArrayJanitor : public XMemory
+{
+public :
+ // -----------------------------------------------------------------------
+ // Constructors and Destructor
+ // -----------------------------------------------------------------------
+ ArrayJanitor(T* const toDelete);
+ ArrayJanitor(T* const toDelete, MemoryManager* const manager);
+ ~ArrayJanitor();
+
+
+ // -----------------------------------------------------------------------
+ // Public, non-virtual methods
+ // -----------------------------------------------------------------------
+ void orphan();
+
+ // small amount of auto_ptr compatibility
+ T& operator[](XMLSize_t index) const;
+ T* get() const;
+ T* release();
+ void reset(T* p = 0);
+ void reset(T* p, MemoryManager* const manager);
+
+private :
+ // -----------------------------------------------------------------------
+ // Unimplemented constructors and operators
+ // -----------------------------------------------------------------------
+ ArrayJanitor();
+ ArrayJanitor(const ArrayJanitor<T>& copy);
+ ArrayJanitor<T>& operator=(const ArrayJanitor<T>& copy);
+
+ // -----------------------------------------------------------------------
+ // Private data members
+ //
+ // fData
+ // This is the pointer to the object or structure that must be
+ // destroyed when this object is destroyed.
+ // -----------------------------------------------------------------------
+ T* fData;
+ MemoryManager* fMemoryManager;
+};
+
+
+
+template <class T> class JanitorMemFunCall
+{
+public :
+
+ typedef void (T::*MFPT) ();
+
+ // -----------------------------------------------------------------------
+ // Constructors and Destructor
+ // -----------------------------------------------------------------------
+ JanitorMemFunCall(
+ T* object,
+ MFPT toCall);
+
+ ~JanitorMemFunCall();
+
+ // small amount of auto_ptr compatibility
+ T& operator*() const;
+ T* operator->() const;
+ T* get() const;
+ T* release();
+ void reset(T* p = 0);
+
+private :
+ // -----------------------------------------------------------------------
+ // Unimplemented constructors and operators
+ // -----------------------------------------------------------------------
+ JanitorMemFunCall();
+ JanitorMemFunCall(const JanitorMemFunCall<T>&);
+ JanitorMemFunCall<T>& operator=(const JanitorMemFunCall<T>&);
+
+ // -----------------------------------------------------------------------
+ // Private data members
+ //
+ // fObject
+ // This is the pointer to the object for which we will call the
+ // member function when this object is destroyed.
+ // -----------------------------------------------------------------------
+ T* fObject;
+ MFPT fToCall;
+};
+
+#if defined(__GNUC__) || (! defined(_AIX) && ! defined(__hpux) && ! defined(__sun))
+extern template class XERCES_PLATFORM_DECEXPORT ArrayJanitor<XMLByte>;
+extern template class XERCES_PLATFORM_DECEXPORT ArrayJanitor<XMLCh>;
+#endif
+
+XERCES_CPP_NAMESPACE_END
+
+#if !defined(XERCES_TMPLSINC)
+#include <xercesc/util/Janitor.c>
+#endif
+
+#endif
diff --git a/libxerces-c/xercesc/util/JanitorExports.cpp b/libxerces-c/xercesc/util/JanitorExports.cpp
new file mode 100644
index 0000000..024434f
--- /dev/null
+++ b/libxerces-c/xercesc/util/JanitorExports.cpp
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <xercesc/util/Janitor.hpp>
+
+XERCES_CPP_NAMESPACE_BEGIN
+
+template class XERCES_PLATFORM_DEFEXPORT ArrayJanitor<XMLByte>;
+template class XERCES_PLATFORM_DEFEXPORT ArrayJanitor<XMLCh>;
+
+XERCES_CPP_NAMESPACE_END
diff --git a/libxerces-c/xercesc/util/KVStringPair.cpp b/libxerces-c/xercesc/util/KVStringPair.cpp
new file mode 120000
index 0000000..326d491
--- /dev/null
+++ b/libxerces-c/xercesc/util/KVStringPair.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/KVStringPair.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/KVStringPair.hpp b/libxerces-c/xercesc/util/KVStringPair.hpp
new file mode 120000
index 0000000..32d0edd
--- /dev/null
+++ b/libxerces-c/xercesc/util/KVStringPair.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/KVStringPair.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/KeyRefPair.c b/libxerces-c/xercesc/util/KeyRefPair.c
new file mode 120000
index 0000000..8b045fb
--- /dev/null
+++ b/libxerces-c/xercesc/util/KeyRefPair.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/KeyRefPair.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/KeyRefPair.hpp b/libxerces-c/xercesc/util/KeyRefPair.hpp
new file mode 120000
index 0000000..ab32d88
--- /dev/null
+++ b/libxerces-c/xercesc/util/KeyRefPair.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/KeyRefPair.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/KeyValuePair.c b/libxerces-c/xercesc/util/KeyValuePair.c
new file mode 120000
index 0000000..7b0c3d0
--- /dev/null
+++ b/libxerces-c/xercesc/util/KeyValuePair.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/KeyValuePair.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/KeyValuePair.hpp b/libxerces-c/xercesc/util/KeyValuePair.hpp
new file mode 120000
index 0000000..756d33f
--- /dev/null
+++ b/libxerces-c/xercesc/util/KeyValuePair.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/KeyValuePair.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/LogicalPath.c b/libxerces-c/xercesc/util/LogicalPath.c
new file mode 120000
index 0000000..f46bc71
--- /dev/null
+++ b/libxerces-c/xercesc/util/LogicalPath.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/LogicalPath.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/MsgLoaders/InMemory b/libxerces-c/xercesc/util/MsgLoaders/InMemory
new file mode 120000
index 0000000..faddf57
--- /dev/null
+++ b/libxerces-c/xercesc/util/MsgLoaders/InMemory
@@ -0,0 +1 @@
+../../../../upstream/src/xercesc/util/MsgLoaders/InMemory \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/MutexManagers/StdMutexMgr.cpp b/libxerces-c/xercesc/util/MutexManagers/StdMutexMgr.cpp
new file mode 120000
index 0000000..f86b528
--- /dev/null
+++ b/libxerces-c/xercesc/util/MutexManagers/StdMutexMgr.cpp
@@ -0,0 +1 @@
+../../../../upstream/src/xercesc/util/MutexManagers/StdMutexMgr.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/MutexManagers/StdMutexMgr.hpp b/libxerces-c/xercesc/util/MutexManagers/StdMutexMgr.hpp
new file mode 120000
index 0000000..4a4ce9d
--- /dev/null
+++ b/libxerces-c/xercesc/util/MutexManagers/StdMutexMgr.hpp
@@ -0,0 +1 @@
+../../../../upstream/src/xercesc/util/MutexManagers/StdMutexMgr.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/Mutexes.cpp b/libxerces-c/xercesc/util/Mutexes.cpp
new file mode 120000
index 0000000..b23cf3a
--- /dev/null
+++ b/libxerces-c/xercesc/util/Mutexes.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/Mutexes.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/Mutexes.hpp b/libxerces-c/xercesc/util/Mutexes.hpp
new file mode 120000
index 0000000..fd221b9
--- /dev/null
+++ b/libxerces-c/xercesc/util/Mutexes.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/Mutexes.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/NameIdPool.c b/libxerces-c/xercesc/util/NameIdPool.c
new file mode 120000
index 0000000..64e9ab8
--- /dev/null
+++ b/libxerces-c/xercesc/util/NameIdPool.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/NameIdPool.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/NameIdPool.hpp b/libxerces-c/xercesc/util/NameIdPool.hpp
new file mode 120000
index 0000000..51a35cd
--- /dev/null
+++ b/libxerces-c/xercesc/util/NameIdPool.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/NameIdPool.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/NetAccessors/Curl b/libxerces-c/xercesc/util/NetAccessors/Curl
new file mode 120000
index 0000000..d56899b
--- /dev/null
+++ b/libxerces-c/xercesc/util/NetAccessors/Curl
@@ -0,0 +1 @@
+../../../../upstream/src/xercesc/util/NetAccessors/Curl \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/NoSuchElementException.hpp b/libxerces-c/xercesc/util/NoSuchElementException.hpp
new file mode 120000
index 0000000..2f37e00
--- /dev/null
+++ b/libxerces-c/xercesc/util/NoSuchElementException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/NoSuchElementException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/NullPointerException.hpp b/libxerces-c/xercesc/util/NullPointerException.hpp
new file mode 120000
index 0000000..32cd664
--- /dev/null
+++ b/libxerces-c/xercesc/util/NullPointerException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/NullPointerException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/NumberFormatException.hpp b/libxerces-c/xercesc/util/NumberFormatException.hpp
new file mode 120000
index 0000000..594ce81
--- /dev/null
+++ b/libxerces-c/xercesc/util/NumberFormatException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/NumberFormatException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/OutOfMemoryException.hpp b/libxerces-c/xercesc/util/OutOfMemoryException.hpp
new file mode 120000
index 0000000..48c4337
--- /dev/null
+++ b/libxerces-c/xercesc/util/OutOfMemoryException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/OutOfMemoryException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/PSVIUni.cpp b/libxerces-c/xercesc/util/PSVIUni.cpp
new file mode 120000
index 0000000..16c1237
--- /dev/null
+++ b/libxerces-c/xercesc/util/PSVIUni.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/PSVIUni.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/PSVIUni.hpp b/libxerces-c/xercesc/util/PSVIUni.hpp
new file mode 120000
index 0000000..581f86b
--- /dev/null
+++ b/libxerces-c/xercesc/util/PSVIUni.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/PSVIUni.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/PanicHandler.cpp b/libxerces-c/xercesc/util/PanicHandler.cpp
new file mode 120000
index 0000000..89878e0
--- /dev/null
+++ b/libxerces-c/xercesc/util/PanicHandler.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/PanicHandler.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/PanicHandler.hpp b/libxerces-c/xercesc/util/PanicHandler.hpp
new file mode 120000
index 0000000..ce21d84
--- /dev/null
+++ b/libxerces-c/xercesc/util/PanicHandler.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/PanicHandler.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/ParseException.hpp b/libxerces-c/xercesc/util/ParseException.hpp
new file mode 120000
index 0000000..9c8ffcb
--- /dev/null
+++ b/libxerces-c/xercesc/util/ParseException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/ParseException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/PlatformUtils.cpp b/libxerces-c/xercesc/util/PlatformUtils.cpp
new file mode 120000
index 0000000..debcb6a
--- /dev/null
+++ b/libxerces-c/xercesc/util/PlatformUtils.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/PlatformUtils.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/PlatformUtils.hpp b/libxerces-c/xercesc/util/PlatformUtils.hpp
new file mode 120000
index 0000000..91a3ae4
--- /dev/null
+++ b/libxerces-c/xercesc/util/PlatformUtils.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/PlatformUtils.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/QName.cpp b/libxerces-c/xercesc/util/QName.cpp
new file mode 120000
index 0000000..24412c3
--- /dev/null
+++ b/libxerces-c/xercesc/util/QName.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/QName.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/QName.hpp b/libxerces-c/xercesc/util/QName.hpp
new file mode 120000
index 0000000..cbb9e35
--- /dev/null
+++ b/libxerces-c/xercesc/util/QName.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/QName.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RefArrayOf.c b/libxerces-c/xercesc/util/RefArrayOf.c
new file mode 120000
index 0000000..bfe2eed
--- /dev/null
+++ b/libxerces-c/xercesc/util/RefArrayOf.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RefArrayOf.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RefArrayOf.hpp b/libxerces-c/xercesc/util/RefArrayOf.hpp
new file mode 120000
index 0000000..5d9a6e7
--- /dev/null
+++ b/libxerces-c/xercesc/util/RefArrayOf.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RefArrayOf.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RefArrayVectorOf.c b/libxerces-c/xercesc/util/RefArrayVectorOf.c
new file mode 120000
index 0000000..e2aeace
--- /dev/null
+++ b/libxerces-c/xercesc/util/RefArrayVectorOf.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RefArrayVectorOf.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RefArrayVectorOf.hpp b/libxerces-c/xercesc/util/RefArrayVectorOf.hpp
new file mode 120000
index 0000000..cb2758d
--- /dev/null
+++ b/libxerces-c/xercesc/util/RefArrayVectorOf.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RefArrayVectorOf.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RefHash2KeysTableOf.c b/libxerces-c/xercesc/util/RefHash2KeysTableOf.c
new file mode 120000
index 0000000..5c39e08
--- /dev/null
+++ b/libxerces-c/xercesc/util/RefHash2KeysTableOf.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RefHash2KeysTableOf.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RefHash2KeysTableOf.hpp b/libxerces-c/xercesc/util/RefHash2KeysTableOf.hpp
new file mode 120000
index 0000000..0f29f24
--- /dev/null
+++ b/libxerces-c/xercesc/util/RefHash2KeysTableOf.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RefHash2KeysTableOf.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RefHash3KeysIdPool.c b/libxerces-c/xercesc/util/RefHash3KeysIdPool.c
new file mode 120000
index 0000000..b4920e1
--- /dev/null
+++ b/libxerces-c/xercesc/util/RefHash3KeysIdPool.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RefHash3KeysIdPool.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RefHash3KeysIdPool.hpp b/libxerces-c/xercesc/util/RefHash3KeysIdPool.hpp
new file mode 120000
index 0000000..e814483
--- /dev/null
+++ b/libxerces-c/xercesc/util/RefHash3KeysIdPool.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RefHash3KeysIdPool.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RefHashTableOf.c b/libxerces-c/xercesc/util/RefHashTableOf.c
new file mode 120000
index 0000000..139ee6c
--- /dev/null
+++ b/libxerces-c/xercesc/util/RefHashTableOf.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RefHashTableOf.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RefHashTableOf.hpp b/libxerces-c/xercesc/util/RefHashTableOf.hpp
new file mode 120000
index 0000000..5820dca
--- /dev/null
+++ b/libxerces-c/xercesc/util/RefHashTableOf.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RefHashTableOf.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RefStackOf.c b/libxerces-c/xercesc/util/RefStackOf.c
new file mode 120000
index 0000000..e7c7c79
--- /dev/null
+++ b/libxerces-c/xercesc/util/RefStackOf.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RefStackOf.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RefStackOf.hpp b/libxerces-c/xercesc/util/RefStackOf.hpp
new file mode 120000
index 0000000..b514240
--- /dev/null
+++ b/libxerces-c/xercesc/util/RefStackOf.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RefStackOf.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RefVectorOf.c b/libxerces-c/xercesc/util/RefVectorOf.c
new file mode 120000
index 0000000..275b1a4
--- /dev/null
+++ b/libxerces-c/xercesc/util/RefVectorOf.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RefVectorOf.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RefVectorOf.hpp b/libxerces-c/xercesc/util/RefVectorOf.hpp
new file mode 120000
index 0000000..3217844
--- /dev/null
+++ b/libxerces-c/xercesc/util/RefVectorOf.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RefVectorOf.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/RuntimeException.hpp b/libxerces-c/xercesc/util/RuntimeException.hpp
new file mode 120000
index 0000000..269c256
--- /dev/null
+++ b/libxerces-c/xercesc/util/RuntimeException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/RuntimeException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/SchemaDateTimeException.hpp b/libxerces-c/xercesc/util/SchemaDateTimeException.hpp
new file mode 120000
index 0000000..07c93e7
--- /dev/null
+++ b/libxerces-c/xercesc/util/SchemaDateTimeException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/SchemaDateTimeException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/SecurityManager.hpp b/libxerces-c/xercesc/util/SecurityManager.hpp
new file mode 120000
index 0000000..f6d898a
--- /dev/null
+++ b/libxerces-c/xercesc/util/SecurityManager.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/SecurityManager.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/StringPool.cpp b/libxerces-c/xercesc/util/StringPool.cpp
new file mode 120000
index 0000000..328fd4c
--- /dev/null
+++ b/libxerces-c/xercesc/util/StringPool.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/StringPool.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/StringPool.hpp b/libxerces-c/xercesc/util/StringPool.hpp
new file mode 120000
index 0000000..bf32ce1
--- /dev/null
+++ b/libxerces-c/xercesc/util/StringPool.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/StringPool.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/SynchronizedStringPool.cpp b/libxerces-c/xercesc/util/SynchronizedStringPool.cpp
new file mode 120000
index 0000000..0a222e6
--- /dev/null
+++ b/libxerces-c/xercesc/util/SynchronizedStringPool.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/SynchronizedStringPool.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/SynchronizedStringPool.hpp b/libxerces-c/xercesc/util/SynchronizedStringPool.hpp
new file mode 120000
index 0000000..ab5d4c3
--- /dev/null
+++ b/libxerces-c/xercesc/util/SynchronizedStringPool.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/SynchronizedStringPool.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/TransENameMap.c b/libxerces-c/xercesc/util/TransENameMap.c
new file mode 120000
index 0000000..7b1a94e
--- /dev/null
+++ b/libxerces-c/xercesc/util/TransENameMap.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/TransENameMap.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/TransENameMap.hpp b/libxerces-c/xercesc/util/TransENameMap.hpp
new file mode 120000
index 0000000..60dcee9
--- /dev/null
+++ b/libxerces-c/xercesc/util/TransENameMap.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/TransENameMap.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/TransService.cpp b/libxerces-c/xercesc/util/TransService.cpp
new file mode 120000
index 0000000..b62b4de
--- /dev/null
+++ b/libxerces-c/xercesc/util/TransService.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/TransService.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/TransService.hpp b/libxerces-c/xercesc/util/TransService.hpp
new file mode 120000
index 0000000..70c49b9
--- /dev/null
+++ b/libxerces-c/xercesc/util/TransService.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/TransService.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/Transcoders/ICU b/libxerces-c/xercesc/util/Transcoders/ICU
new file mode 120000
index 0000000..e49a095
--- /dev/null
+++ b/libxerces-c/xercesc/util/Transcoders/ICU
@@ -0,0 +1 @@
+../../../../upstream/src/xercesc/util/Transcoders/ICU \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/TranscodingException.hpp b/libxerces-c/xercesc/util/TranscodingException.hpp
new file mode 120000
index 0000000..33526f6
--- /dev/null
+++ b/libxerces-c/xercesc/util/TranscodingException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/TranscodingException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/UTFDataFormatException.hpp b/libxerces-c/xercesc/util/UTFDataFormatException.hpp
new file mode 120000
index 0000000..870a96f
--- /dev/null
+++ b/libxerces-c/xercesc/util/UTFDataFormatException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/UTFDataFormatException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/UnexpectedEOFException.hpp b/libxerces-c/xercesc/util/UnexpectedEOFException.hpp
new file mode 120000
index 0000000..b14a7c6
--- /dev/null
+++ b/libxerces-c/xercesc/util/UnexpectedEOFException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/UnexpectedEOFException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/UnsupportedEncodingException.hpp b/libxerces-c/xercesc/util/UnsupportedEncodingException.hpp
new file mode 120000
index 0000000..be6e647
--- /dev/null
+++ b/libxerces-c/xercesc/util/UnsupportedEncodingException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/UnsupportedEncodingException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/ValueArrayOf.c b/libxerces-c/xercesc/util/ValueArrayOf.c
new file mode 120000
index 0000000..be381ca
--- /dev/null
+++ b/libxerces-c/xercesc/util/ValueArrayOf.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/ValueArrayOf.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/ValueArrayOf.hpp b/libxerces-c/xercesc/util/ValueArrayOf.hpp
new file mode 120000
index 0000000..c62a89b
--- /dev/null
+++ b/libxerces-c/xercesc/util/ValueArrayOf.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/ValueArrayOf.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/ValueHashTableOf.c b/libxerces-c/xercesc/util/ValueHashTableOf.c
new file mode 120000
index 0000000..e4cde3b
--- /dev/null
+++ b/libxerces-c/xercesc/util/ValueHashTableOf.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/ValueHashTableOf.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/ValueHashTableOf.hpp b/libxerces-c/xercesc/util/ValueHashTableOf.hpp
new file mode 120000
index 0000000..5a960c6
--- /dev/null
+++ b/libxerces-c/xercesc/util/ValueHashTableOf.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/ValueHashTableOf.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/ValueStackOf.c b/libxerces-c/xercesc/util/ValueStackOf.c
new file mode 120000
index 0000000..2572421
--- /dev/null
+++ b/libxerces-c/xercesc/util/ValueStackOf.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/ValueStackOf.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/ValueStackOf.hpp b/libxerces-c/xercesc/util/ValueStackOf.hpp
new file mode 120000
index 0000000..8a3d285
--- /dev/null
+++ b/libxerces-c/xercesc/util/ValueStackOf.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/ValueStackOf.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/ValueVectorOf.c b/libxerces-c/xercesc/util/ValueVectorOf.c
new file mode 120000
index 0000000..830820b
--- /dev/null
+++ b/libxerces-c/xercesc/util/ValueVectorOf.c
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/ValueVectorOf.c \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/ValueVectorOf.hpp b/libxerces-c/xercesc/util/ValueVectorOf.hpp
new file mode 120000
index 0000000..db62cd0
--- /dev/null
+++ b/libxerces-c/xercesc/util/ValueVectorOf.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/ValueVectorOf.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XML256TableTranscoder.cpp b/libxerces-c/xercesc/util/XML256TableTranscoder.cpp
new file mode 120000
index 0000000..2a2a7f7
--- /dev/null
+++ b/libxerces-c/xercesc/util/XML256TableTranscoder.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XML256TableTranscoder.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XML256TableTranscoder.hpp b/libxerces-c/xercesc/util/XML256TableTranscoder.hpp
new file mode 120000
index 0000000..e4a1cbc
--- /dev/null
+++ b/libxerces-c/xercesc/util/XML256TableTranscoder.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XML256TableTranscoder.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XML88591Transcoder.cpp b/libxerces-c/xercesc/util/XML88591Transcoder.cpp
new file mode 120000
index 0000000..5f4a7d1
--- /dev/null
+++ b/libxerces-c/xercesc/util/XML88591Transcoder.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XML88591Transcoder.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XML88591Transcoder.hpp b/libxerces-c/xercesc/util/XML88591Transcoder.hpp
new file mode 120000
index 0000000..1599569
--- /dev/null
+++ b/libxerces-c/xercesc/util/XML88591Transcoder.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XML88591Transcoder.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLASCIITranscoder.cpp b/libxerces-c/xercesc/util/XMLASCIITranscoder.cpp
new file mode 120000
index 0000000..e8859c6
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLASCIITranscoder.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLASCIITranscoder.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLASCIITranscoder.hpp b/libxerces-c/xercesc/util/XMLASCIITranscoder.hpp
new file mode 120000
index 0000000..0b3783c
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLASCIITranscoder.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLASCIITranscoder.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLAbstractDoubleFloat.cpp b/libxerces-c/xercesc/util/XMLAbstractDoubleFloat.cpp
new file mode 120000
index 0000000..3df6ae8
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLAbstractDoubleFloat.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLAbstractDoubleFloat.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLAbstractDoubleFloat.hpp b/libxerces-c/xercesc/util/XMLAbstractDoubleFloat.hpp
new file mode 120000
index 0000000..2673e6f
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLAbstractDoubleFloat.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLAbstractDoubleFloat.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLBigDecimal.cpp b/libxerces-c/xercesc/util/XMLBigDecimal.cpp
new file mode 120000
index 0000000..426dc18
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLBigDecimal.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLBigDecimal.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLBigDecimal.hpp b/libxerces-c/xercesc/util/XMLBigDecimal.hpp
new file mode 120000
index 0000000..12b9723
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLBigDecimal.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLBigDecimal.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLBigInteger.cpp b/libxerces-c/xercesc/util/XMLBigInteger.cpp
new file mode 120000
index 0000000..8cb68fa
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLBigInteger.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLBigInteger.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLBigInteger.hpp b/libxerces-c/xercesc/util/XMLBigInteger.hpp
new file mode 120000
index 0000000..ab57bdb
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLBigInteger.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLBigInteger.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLChTranscoder.cpp b/libxerces-c/xercesc/util/XMLChTranscoder.cpp
new file mode 120000
index 0000000..a2f9f3d
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLChTranscoder.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLChTranscoder.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLChTranscoder.hpp b/libxerces-c/xercesc/util/XMLChTranscoder.hpp
new file mode 120000
index 0000000..e565659
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLChTranscoder.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLChTranscoder.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLChar.cpp b/libxerces-c/xercesc/util/XMLChar.cpp
new file mode 120000
index 0000000..bf84d18
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLChar.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLChar.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLChar.hpp b/libxerces-c/xercesc/util/XMLChar.hpp
new file mode 120000
index 0000000..e68088d
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLChar.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLChar.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLDOMMsg.hpp b/libxerces-c/xercesc/util/XMLDOMMsg.hpp
new file mode 120000
index 0000000..51b48c0
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLDOMMsg.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLDOMMsg.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLDateTime.cpp b/libxerces-c/xercesc/util/XMLDateTime.cpp
new file mode 120000
index 0000000..ea6393d
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLDateTime.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLDateTime.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLDateTime.hpp b/libxerces-c/xercesc/util/XMLDateTime.hpp
new file mode 120000
index 0000000..3aa5248
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLDateTime.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLDateTime.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLDouble.cpp b/libxerces-c/xercesc/util/XMLDouble.cpp
new file mode 120000
index 0000000..a59a74e
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLDouble.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLDouble.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLDouble.hpp b/libxerces-c/xercesc/util/XMLDouble.hpp
new file mode 120000
index 0000000..bad88e0
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLDouble.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLDouble.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLEBCDICTranscoder.cpp b/libxerces-c/xercesc/util/XMLEBCDICTranscoder.cpp
new file mode 120000
index 0000000..01268e9
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLEBCDICTranscoder.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLEBCDICTranscoder.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLEBCDICTranscoder.hpp b/libxerces-c/xercesc/util/XMLEBCDICTranscoder.hpp
new file mode 120000
index 0000000..4425328
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLEBCDICTranscoder.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLEBCDICTranscoder.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLEntityResolver.hpp b/libxerces-c/xercesc/util/XMLEntityResolver.hpp
new file mode 120000
index 0000000..c9a82f9
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLEntityResolver.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLEntityResolver.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLEnumerator.hpp b/libxerces-c/xercesc/util/XMLEnumerator.hpp
new file mode 120000
index 0000000..afe845a
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLEnumerator.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLEnumerator.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLExceptMsgs.hpp b/libxerces-c/xercesc/util/XMLExceptMsgs.hpp
new file mode 120000
index 0000000..c0407dd
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLExceptMsgs.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLExceptMsgs.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLException.cpp b/libxerces-c/xercesc/util/XMLException.cpp
new file mode 120000
index 0000000..a99cd8d
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLException.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLException.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLException.hpp b/libxerces-c/xercesc/util/XMLException.hpp
new file mode 120000
index 0000000..b483f27
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLException.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLException.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLFileMgr.hpp b/libxerces-c/xercesc/util/XMLFileMgr.hpp
new file mode 120000
index 0000000..2c8ebe6
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLFileMgr.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLFileMgr.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLFloat.cpp b/libxerces-c/xercesc/util/XMLFloat.cpp
new file mode 120000
index 0000000..aaee503
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLFloat.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLFloat.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLFloat.hpp b/libxerces-c/xercesc/util/XMLFloat.hpp
new file mode 120000
index 0000000..81b002f
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLFloat.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLFloat.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLIBM1047Transcoder.cpp b/libxerces-c/xercesc/util/XMLIBM1047Transcoder.cpp
new file mode 120000
index 0000000..a7ed578
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLIBM1047Transcoder.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLIBM1047Transcoder.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLIBM1047Transcoder.hpp b/libxerces-c/xercesc/util/XMLIBM1047Transcoder.hpp
new file mode 120000
index 0000000..80c2687
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLIBM1047Transcoder.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLIBM1047Transcoder.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLIBM1140Transcoder.cpp b/libxerces-c/xercesc/util/XMLIBM1140Transcoder.cpp
new file mode 120000
index 0000000..eb4267b
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLIBM1140Transcoder.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLIBM1140Transcoder.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLIBM1140Transcoder.hpp b/libxerces-c/xercesc/util/XMLIBM1140Transcoder.hpp
new file mode 120000
index 0000000..9e8d11e
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLIBM1140Transcoder.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLIBM1140Transcoder.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLInitializer.cpp b/libxerces-c/xercesc/util/XMLInitializer.cpp
new file mode 120000
index 0000000..010b5de
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLInitializer.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLInitializer.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLInitializer.hpp b/libxerces-c/xercesc/util/XMLInitializer.hpp
new file mode 120000
index 0000000..659eb84
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLInitializer.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLInitializer.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLInteger.hpp b/libxerces-c/xercesc/util/XMLInteger.hpp
new file mode 120000
index 0000000..d912e9d
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLInteger.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLInteger.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLMsgLoader.cpp b/libxerces-c/xercesc/util/XMLMsgLoader.cpp
new file mode 120000
index 0000000..1a60d17
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLMsgLoader.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLMsgLoader.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLMsgLoader.hpp b/libxerces-c/xercesc/util/XMLMsgLoader.hpp
new file mode 120000
index 0000000..ce7cffe
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLMsgLoader.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLMsgLoader.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLMutexMgr.hpp b/libxerces-c/xercesc/util/XMLMutexMgr.hpp
new file mode 120000
index 0000000..7440749
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLMutexMgr.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLMutexMgr.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLNetAccessor.hpp b/libxerces-c/xercesc/util/XMLNetAccessor.hpp
new file mode 120000
index 0000000..fe9e23c
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLNetAccessor.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLNetAccessor.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLNumber.cpp b/libxerces-c/xercesc/util/XMLNumber.cpp
new file mode 120000
index 0000000..de3434b
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLNumber.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLNumber.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLNumber.hpp b/libxerces-c/xercesc/util/XMLNumber.hpp
new file mode 120000
index 0000000..db6f296
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLNumber.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLNumber.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLResourceIdentifier.hpp b/libxerces-c/xercesc/util/XMLResourceIdentifier.hpp
new file mode 120000
index 0000000..00c6235
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLResourceIdentifier.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLResourceIdentifier.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLString.cpp b/libxerces-c/xercesc/util/XMLString.cpp
new file mode 120000
index 0000000..1ed7b17
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLString.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLString.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLString.hpp b/libxerces-c/xercesc/util/XMLString.hpp
new file mode 120000
index 0000000..a34d2bf
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLString.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLString.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLStringTokenizer.cpp b/libxerces-c/xercesc/util/XMLStringTokenizer.cpp
new file mode 120000
index 0000000..2a3e89d
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLStringTokenizer.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLStringTokenizer.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLStringTokenizer.hpp b/libxerces-c/xercesc/util/XMLStringTokenizer.hpp
new file mode 120000
index 0000000..9a6311c
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLStringTokenizer.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLStringTokenizer.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLUCS4Transcoder.cpp b/libxerces-c/xercesc/util/XMLUCS4Transcoder.cpp
new file mode 120000
index 0000000..dc7c410
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLUCS4Transcoder.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLUCS4Transcoder.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLUCS4Transcoder.hpp b/libxerces-c/xercesc/util/XMLUCS4Transcoder.hpp
new file mode 120000
index 0000000..5e21900
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLUCS4Transcoder.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLUCS4Transcoder.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLURL.cpp b/libxerces-c/xercesc/util/XMLURL.cpp
new file mode 120000
index 0000000..8f9fe85
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLURL.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLURL.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLURL.hpp b/libxerces-c/xercesc/util/XMLURL.hpp
new file mode 120000
index 0000000..fa9e8d7
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLURL.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLURL.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLUTF16Transcoder.cpp b/libxerces-c/xercesc/util/XMLUTF16Transcoder.cpp
new file mode 120000
index 0000000..25ec0e5
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLUTF16Transcoder.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLUTF16Transcoder.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLUTF16Transcoder.hpp b/libxerces-c/xercesc/util/XMLUTF16Transcoder.hpp
new file mode 120000
index 0000000..e7b76a7
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLUTF16Transcoder.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLUTF16Transcoder.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLUTF8Transcoder.cpp b/libxerces-c/xercesc/util/XMLUTF8Transcoder.cpp
new file mode 120000
index 0000000..0acd5a1
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLUTF8Transcoder.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLUTF8Transcoder.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLUTF8Transcoder.hpp b/libxerces-c/xercesc/util/XMLUTF8Transcoder.hpp
new file mode 120000
index 0000000..4a4e403
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLUTF8Transcoder.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLUTF8Transcoder.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLUni.cpp b/libxerces-c/xercesc/util/XMLUni.cpp
new file mode 120000
index 0000000..70795b0
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLUni.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLUni.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLUni.hpp b/libxerces-c/xercesc/util/XMLUni.hpp
new file mode 120000
index 0000000..52ba3db
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLUni.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLUni.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLUniDefs.hpp b/libxerces-c/xercesc/util/XMLUniDefs.hpp
new file mode 120000
index 0000000..fe8df76
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLUniDefs.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLUniDefs.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLUri.cpp b/libxerces-c/xercesc/util/XMLUri.cpp
new file mode 120000
index 0000000..3c74615
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLUri.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLUri.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLUri.hpp b/libxerces-c/xercesc/util/XMLUri.hpp
new file mode 120000
index 0000000..6da0204
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLUri.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLUri.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLWin1252Transcoder.cpp b/libxerces-c/xercesc/util/XMLWin1252Transcoder.cpp
new file mode 120000
index 0000000..c13e794
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLWin1252Transcoder.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLWin1252Transcoder.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMLWin1252Transcoder.hpp b/libxerces-c/xercesc/util/XMLWin1252Transcoder.hpp
new file mode 120000
index 0000000..67a2ea2
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMLWin1252Transcoder.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMLWin1252Transcoder.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMemory.cpp b/libxerces-c/xercesc/util/XMemory.cpp
new file mode 120000
index 0000000..0e3a5aa
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMemory.cpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMemory.cpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XMemory.hpp b/libxerces-c/xercesc/util/XMemory.hpp
new file mode 120000
index 0000000..2b501f5
--- /dev/null
+++ b/libxerces-c/xercesc/util/XMemory.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XMemory.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XercesDefs.hpp b/libxerces-c/xercesc/util/XercesDefs.hpp
new file mode 120000
index 0000000..96a2f52
--- /dev/null
+++ b/libxerces-c/xercesc/util/XercesDefs.hpp
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XercesDefs.hpp \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/XercesVersion.hpp b/libxerces-c/xercesc/util/XercesVersion.hpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libxerces-c/xercesc/util/XercesVersion.hpp
diff --git a/libxerces-c/xercesc/util/XercesVersion.hpp.in b/libxerces-c/xercesc/util/XercesVersion.hpp.in
new file mode 120000
index 0000000..ac3ee99
--- /dev/null
+++ b/libxerces-c/xercesc/util/XercesVersion.hpp.in
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/XercesVersion.hpp.cmake.in \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/Xerces_autoconf_config.hpp b/libxerces-c/xercesc/util/Xerces_autoconf_config.hpp
new file mode 100644
index 0000000..2b088cf
--- /dev/null
+++ b/libxerces-c/xercesc/util/Xerces_autoconf_config.hpp
@@ -0,0 +1,191 @@
+/* file : xercesc/util/Xerces_autoconf_config.hpp -*- C -*-
+ * license : Apache License 2.0; see accompanying LICENSE file
+ */
+
+#ifndef XERCESC_UTIL_XERCES_AUTOCONF_CONFIG_HPP
+#define XERCESC_UTIL_XERCES_AUTOCONF_CONFIG_HPP
+
+/* For the semantics of the following macros refer to
+ * Xerces_autoconf_config.hpp.cmake.in.orig and upstream's configure.ac.
+ *
+ * We won't drop macro (un)definitions just because they are not used by the
+ * library itself (as we do for config.h), because this header is installed
+ * and the library clients may potentially rely on them.
+ */
+
+/* int16_t, etc.
+ */
+#if defined(__cplusplus)
+# include <cstdint>
+#else
+# include <stdint.h> /* Requires C99. */
+#endif
+
+#include <inttypes.h>
+
+#include <sys/types.h>
+
+/* Specific for FreeBSD.
+ */
+#ifdef __FreeBSD__
+# define HAVE_CPUID_H 1
+# define XERCES_HAVE_GETCPUID 1
+#endif
+
+/* Specific for POSIX (none).
+ */
+#ifndef _WIN32
+/* Specific for Windows.
+ */
+#else
+# define XERCES_HAVE_INTRIN_H 1
+# define XERCES_HAVE_CPUID_INTRINSIC 1
+#endif
+
+/* Specific for (non-) VC.
+ */
+#ifndef _MSC_VER
+# define XERCES_SSIZE_T ssize_t
+#else
+# define XERCES_SSIZE_T long
+#endif
+
+/* Common for all supported OSes/compilers.
+ */
+#define XERCES_HAVE_CSTDINT 1
+#define XERCES_HAVE_STDINT_H 1
+#define XERCES_HAVE_SYS_TYPES_H 1
+#define XERCES_HAVE_INTTYPES_H 1
+#define XERCES_HAS_CPP_NAMESPACE 1
+#define XERCES_STD_NAMESPACE 1
+#define XERCES_NEW_IOSTREAMS 1
+#define XERCES_LSTRSUPPORT 1
+
+#undef XERCES_AUTOCONF
+#undef XERCES_HAVE_EMMINTRIN_H
+#undef XERCES_INCLUDE_WCHAR_H
+#undef XERCES_NO_NATIVE_BOOL
+#undef XERCES_HAVE_SSE2_INTRINSIC
+#undef XERCES_NO_MATCHING_DELETE_OPERATOR
+
+#define XERCES_S16BIT_INT int16_t
+#define XERCES_S32BIT_INT int32_t
+#define XERCES_S64BIT_INT int64_t
+#define XERCES_U16BIT_INT uint16_t
+#define XERCES_U32BIT_INT uint32_t
+#define XERCES_U64BIT_INT uint64_t
+#define XERCES_XMLCH_T char16_t
+#define XERCES_SIZE_T size_t
+
+/* Export/import.
+ */
+
+/* It's not really clear how exactly the upstream's explicit template
+ * instantiation exportation works for VC and Clang targeting MSVC:
+ * __declspec(dllexport) is specified for explicit template instantiation
+ * declarations that has no 'extern' keyword specified. This, in particular,
+ * results with the 'duplicate explicit instantiation ignored' warning for
+ * Clang targeting MSVC.
+ *
+ * We, instead, align the explicit template instantiation exportation with the
+ * approach used for the build2 projects, so that the extern keyword is always
+ * used for the template instantiation declarations and __declspec(dllexport)
+ * is specified for the declarations for MinGW GCC and for the definitions for
+ * VC and Clang targeting MSVC.
+ *
+ * Note that the XERCES_TEMPLATE_EXTERN macro is now unused by the library.
+ */
+#undef XERCES_TEMPLATE_EXTERN
+
+#if defined(LIBXERCES_C_STATIC) /* Using static. */
+# define XERCES_PLATFORM_IMPORT
+# define XERCES_PLATFORM_DECEXPORT
+#elif defined(LIBXERCES_C_STATIC_BUILD) /* Building static. */
+# define XERCES_PLATFORM_EXPORT
+# define XERCES_PLATFORM_DECEXPORT
+# define XERCES_PLATFORM_DEFEXPORT
+#elif defined(LIBXERCES_C_SHARED) /* Using shared. */
+# ifdef _WIN32
+# define XERCES_DLL_EXPORT 1
+# define XERCES_PLATFORM_IMPORT __declspec(dllimport)
+# define XERCES_PLATFORM_DECEXPORT __declspec(dllimport)
+# else
+# define XERCES_PLATFORM_IMPORT
+# define XERCES_PLATFORM_DECEXPORT
+# endif
+#elif defined(LIBXERCES_C_SHARED_BUILD) /* Building shared. */
+# ifdef _WIN32
+# define XERCES_DLL_EXPORT 1
+# define XERCES_PLATFORM_EXPORT __declspec(dllexport)
+# if defined(_MSC_VER)
+# define XERCES_PLATFORM_DECEXPORT
+# define XERCES_PLATFORM_DEFEXPORT __declspec(dllexport)
+# else
+# define XERCES_PLATFORM_DECEXPORT __declspec(dllexport)
+# define XERCES_PLATFORM_DEFEXPORT
+# endif
+# else
+# define XERCES_PLATFORM_EXPORT
+# define XERCES_PLATFORM_DECEXPORT
+# define XERCES_PLATFORM_DEFEXPORT
+# endif
+#else
+/* If none of the above macros are defined, then we assume we are being used
+ * by some third-party build system that cannot/doesn't signal the library
+ * type. Note that falling back to defining the XERCES_PLATFORM_IMPORT macro
+ * as empty would work for both the static and shared libraries (being
+ * sub-optimal for the later) but only for functions. Xerces-C++, however,
+ * also exports data symbols, which cannot be imported this way. Thus we,
+ * just issue an error.
+ */
+# error define LIBXERCES_C_STATIC or LIBXERCES_C_SHARED preprocessor macro to signal Xerces-C++ library type being linked
+#endif
+
+#ifdef XERCES_DLL_EXPORT
+# define DLL_EXPORT
+#endif
+
+/* Is only defined on Windows by the upstream package but seems to be
+ * redundant.
+ */
+#undef XERCES_STATIC_LIBRARY
+
+/* XMLSize_t is the unsigned integral type.
+ */
+typedef XERCES_SIZE_T XMLSize_t;
+typedef XERCES_SSIZE_T XMLSSize_t;
+
+#define XERCES_SIZE_MAX SIZE_MAX
+#define XERCES_SSIZE_MAX SSIZE_MAX
+
+/* Define our version of the XML character
+ */
+typedef XERCES_XMLCH_T XMLCh;
+
+/* Define unsigned 16, 32, and 64 bit integers
+ */
+typedef XERCES_U16BIT_INT XMLUInt16;
+typedef XERCES_U32BIT_INT XMLUInt32;
+typedef XERCES_U64BIT_INT XMLUInt64;
+
+/* Define signed 16, 32, and 64 bit integers
+ */
+typedef XERCES_S16BIT_INT XMLInt16;
+typedef XERCES_S32BIT_INT XMLInt32;
+typedef XERCES_S64BIT_INT XMLInt64;
+
+/* XMLFilePos is the type used to represent a file position.
+ */
+typedef XMLUInt64 XMLFilePos;
+
+/* XMLFileLoc is the type used to represent a file location (line/column).
+ */
+typedef XMLUInt64 XMLFileLoc;
+
+/* Force on the Xerces debug token if it is on in the build environment
+ */
+#if defined(_DEBUG)
+#define XERCES_DEBUG
+#endif
+
+#endif /* XERCESC_UTIL_XERCES_AUTOCONF_CONFIG_HPP */
diff --git a/libxerces-c/xercesc/util/Xerces_autoconf_config.hpp.cmake.in.orig b/libxerces-c/xercesc/util/Xerces_autoconf_config.hpp.cmake.in.orig
new file mode 120000
index 0000000..1782a23
--- /dev/null
+++ b/libxerces-c/xercesc/util/Xerces_autoconf_config.hpp.cmake.in.orig
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/Xerces_autoconf_config.hpp.cmake.in \ No newline at end of file
diff --git a/libxerces-c/xercesc/util/regx b/libxerces-c/xercesc/util/regx
new file mode 120000
index 0000000..9af0e74
--- /dev/null
+++ b/libxerces-c/xercesc/util/regx
@@ -0,0 +1 @@
+../../../upstream/src/xercesc/util/regx \ No newline at end of file
diff --git a/libxerces-c/xercesc/validators b/libxerces-c/xercesc/validators
new file mode 120000
index 0000000..af754e0
--- /dev/null
+++ b/libxerces-c/xercesc/validators
@@ -0,0 +1 @@
+../../upstream/src/xercesc/validators \ No newline at end of file
diff --git a/libxerces-c/xercesc/xinclude b/libxerces-c/xercesc/xinclude
new file mode 120000
index 0000000..7e78152
--- /dev/null
+++ b/libxerces-c/xercesc/xinclude
@@ -0,0 +1 @@
+../../upstream/src/xercesc/xinclude \ No newline at end of file
diff --git a/packages.manifest b/packages.manifest
new file mode 100644
index 0000000..db0809f
--- /dev/null
+++ b/packages.manifest
@@ -0,0 +1,2 @@
+: 1
+location: libxerces-c/
diff --git a/repositories.manifest b/repositories.manifest
new file mode 100644
index 0000000..0f1c18a
--- /dev/null
+++ b/repositories.manifest
@@ -0,0 +1,10 @@
+: 1
+summary: Xerces-C++ build2 package repository
+
+:
+role: prerequisite
+location: ../../curl/curl.git##HEAD
+
+:
+role: prerequisite
+location: ../../icu/icu.git##HEAD
diff --git a/upstream b/upstream
new file mode 160000
+Subproject cf1912ac95d4147be08aef4e78f894a3919277d