mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-03 21:44:30 +08:00
Patch RapidJSON to make sure it builds on all platforms (#8818)
* patch RapidJSON to make sure it builds on all platforms * remove unnecessary sed command from Docker recipe --------- Co-authored-by: ptosco <paolo.tosco@novartis.com>
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -76,7 +76,7 @@ __pycache__/
|
||||
/External/RingFamilies/RingDecomposerLib/
|
||||
/External/YAeHMOP/yaehmop/
|
||||
/External/catch/catch/
|
||||
/External/rapidjson*/
|
||||
/External/rapidjson/rapidjson-*/
|
||||
|
||||
/rdkit/RDPaths.py
|
||||
/rdkit/Chem/inchi.py
|
||||
|
||||
@@ -1,24 +1,23 @@
|
||||
|
||||
if(NOT EXISTS "${RDKit_ExternalDir}/rapidjson-1.1.0")
|
||||
if(NOT EXISTS "${RDKit_ExternalDir}/rapidjson/rapidjson-1.1.0")
|
||||
downloadAndCheckMD5("https://github.com/Tencent/rapidjson/archive/v1.1.0.tar.gz"
|
||||
"${RDKit_ExternalDir}/rapidjson-1.1.0.tar.gz"
|
||||
"${RDKit_ExternalDir}/rapidjson/rapidjson-1.1.0.tar.gz"
|
||||
"badd12c511e081fec6c89c43a7027bce")
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar zxf
|
||||
${RDKit_ExternalDir}/rapidjson-1.1.0.tar.gz
|
||||
WORKING_DIRECTORY ${RDKit_ExternalDir})
|
||||
# comment out a line which causes a compilation error on some platforms
|
||||
${RDKit_ExternalDir}/rapidjson/rapidjson-1.1.0.tar.gz
|
||||
WORKING_DIRECTORY ${RDKit_ExternalDir}/rapidjson)
|
||||
# backport some master branch improvements to avoid a compilation error on some platforms
|
||||
# (based on the change which has already been applied to the RapidJSON master branch, see
|
||||
# https://github.com/Tencent/rapidjson/blob/ab1842a2dae061284c0a62dca1cc6d5e7e37e346/include/rapidjson/document.h#L414)
|
||||
file(READ ${RDKit_ExternalDir}/rapidjson-1.1.0/include/rapidjson/document.h RAPIDJSON_DOCUMENT_H)
|
||||
string(REGEX REPLACE
|
||||
"( *)(GenericStringRef& operator=\\(const GenericStringRef& rhs\\) { s = rhs\\.s. length = rhs\\.length. })" "\\1//\\2"
|
||||
RAPIDJSON_DOCUMENT_H "${RAPIDJSON_DOCUMENT_H}")
|
||||
file(WRITE ${RDKit_ExternalDir}/rapidjson-1.1.0/include/rapidjson/document.h "${RAPIDJSON_DOCUMENT_H}")
|
||||
# https://github.com/Tencent/rapidjson/blob/24b5e7a8b27f42fa16b96fc70aade9106cf7102f/include/rapidjson/document.h#L414
|
||||
# and https://patch-diff.githubusercontent.com/raw/Tencent/rapidjson/pull/1698.diff
|
||||
execute_process(COMMAND git --git-dir= apply
|
||||
${RDKit_ExternalDir}/rapidjson/patch-rapidjson-1.1.0.diff
|
||||
WORKING_DIRECTORY ${RDKit_ExternalDir}/rapidjson)
|
||||
else()
|
||||
message("-- Found RapidJSON source in ${RDKit_ExternalDir}")
|
||||
message("-- Found RapidJSON source in ${RDKit_ExternalDir}/rapidjson")
|
||||
endif()
|
||||
|
||||
include_directories(${RDKit_ExternalDir}/rapidjson-1.1.0/include)
|
||||
include_directories(${RDKit_ExternalDir}/rapidjson/rapidjson-1.1.0/include)
|
||||
|
||||
|
||||
rdkit_library(MolInterchange
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
include_directories(${RDKit_ExternalDir})
|
||||
include_directories(${RDKit_ExternalDir}/rapidjson-1.1.0/include)
|
||||
include_directories(${RDKit_ExternalDir}/rapidjson/rapidjson-1.1.0/include)
|
||||
|
||||
if(RDK_BUILD_MINIMAL_LIB)
|
||||
set(MINIMAL_LIB_LIBRARIES "MolInterchange;Abbreviations;"
|
||||
|
||||
@@ -83,12 +83,6 @@ RUN emcmake cmake -DRDK_BUILD_FREETYPE_SUPPORT=ON -DRDK_BUILD_MINIMAL_LIB=ON \
|
||||
RUN cp /src/rdkit/External/INCHI-API/src/INCHI_BASE/src/util.c /src/rdkit/External/INCHI-API/src/INCHI_BASE/src/util.c.bak && \
|
||||
sed 's/&& defined(__APPLE__)//' /src/rdkit/External/INCHI-API/src/INCHI_BASE/src/util.c.bak > /src/rdkit/External/INCHI-API/src/INCHI_BASE/src/util.c
|
||||
|
||||
# comment out a line which causes a compilation error on some platforms
|
||||
# (based on the change which has already been applied to the RapidJSON master branch, see
|
||||
# https://github.com/Tencent/rapidjson/blob/ab1842a2dae061284c0a62dca1cc6d5e7e37e346/include/rapidjson/document.h#L414)
|
||||
RUN sed -i 's|^\( *\)\(GenericStringRef\& operator=(const GenericStringRef\& rhs) { s = rhs.s; length = rhs.length; } *\)$|\1//\2|' \
|
||||
/src/rdkit/External/rapidjson-1.1.0/include/rapidjson/document.h
|
||||
|
||||
# build and "install"
|
||||
RUN make -j2 RDKit_minimal && \
|
||||
cp Code/MinimalLib/RDKit_minimal.* ../Code/MinimalLib/demo/
|
||||
|
||||
100
External/rapidjson/patch-rapidjson-1.1.0.diff
vendored
Normal file
100
External/rapidjson/patch-rapidjson-1.1.0.diff
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
--- a/rapidjson-1.1.0/include/rapidjson/document.h 2016-08-25 09:59:05.000000000 +0200
|
||||
+++ b/rapidjson-1.1.0/include/rapidjson/document.h 2025-09-25 11:37:06.694007282 +0200
|
||||
@@ -22,6 +22,8 @@
|
||||
#include "internal/strfunc.h"
|
||||
#include "memorystream.h"
|
||||
#include "encodedstream.h"
|
||||
+
|
||||
+#include <algorithm>
|
||||
#include <new> // placement new
|
||||
#include <limits>
|
||||
|
||||
@@ -68,9 +70,48 @@
|
||||
https://code.google.com/p/rapidjson/issues/detail?id=64
|
||||
*/
|
||||
template <typename Encoding, typename Allocator>
|
||||
-struct GenericMember {
|
||||
+class GenericMember {
|
||||
+public:
|
||||
+ // Allow default construction as it is needed during copying.
|
||||
+ GenericMember() {}
|
||||
+
|
||||
GenericValue<Encoding, Allocator> name; //!< name of member (must be a string)
|
||||
GenericValue<Encoding, Allocator> value; //!< value of member.
|
||||
+
|
||||
+#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||
+ //! Move constructor in C++11
|
||||
+ GenericMember(GenericMember&& rhs) RAPIDJSON_NOEXCEPT
|
||||
+ : name(std::move(rhs.name)),
|
||||
+ value(std::move(rhs.value))
|
||||
+ {
|
||||
+ }
|
||||
+
|
||||
+ //! Move assignment in C++11
|
||||
+ GenericMember& operator=(GenericMember&& rhs) RAPIDJSON_NOEXCEPT {
|
||||
+ return *this = static_cast<GenericMember&>(rhs);
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ //! Assignment with move semantics.
|
||||
+ /*! \param rhs Source of the assignment. Its name and value will become a null value after assignment.
|
||||
+ */
|
||||
+ GenericMember& operator=(GenericMember& rhs) RAPIDJSON_NOEXCEPT {
|
||||
+ if (RAPIDJSON_LIKELY(this != &rhs)) {
|
||||
+ name = rhs.name;
|
||||
+ value = rhs.value;
|
||||
+ }
|
||||
+ return *this;
|
||||
+ }
|
||||
+
|
||||
+ // swap() for std::sort() and other potential use in STL.
|
||||
+ friend inline void swap(GenericMember& a, GenericMember& b) RAPIDJSON_NOEXCEPT {
|
||||
+ a.name.Swap(b.name);
|
||||
+ a.value.Swap(b.value);
|
||||
+ }
|
||||
+
|
||||
+private:
|
||||
+ //! Copy constructor is not permitted.
|
||||
+ GenericMember(const GenericMember& rhs);
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@@ -316,8 +357,6 @@
|
||||
|
||||
GenericStringRef(const GenericStringRef& rhs) : s(rhs.s), length(rhs.length) {}
|
||||
|
||||
- GenericStringRef& operator=(const GenericStringRef& rhs) { s = rhs.s; length = rhs.length; }
|
||||
-
|
||||
//! implicit conversion to plain CharType pointer
|
||||
operator const Ch *() const { return s; }
|
||||
|
||||
@@ -1934,9 +1973,11 @@
|
||||
void SetArrayRaw(GenericValue* values, SizeType count, Allocator& allocator) {
|
||||
data_.f.flags = kArrayFlag;
|
||||
if (count) {
|
||||
- GenericValue* e = static_cast<GenericValue*>(allocator.Malloc(count * sizeof(GenericValue)));
|
||||
- SetElementsPointer(e);
|
||||
- std::memcpy(e, values, count * sizeof(GenericValue));
|
||||
+ auto arr = static_cast<GenericValue*>(allocator.Malloc(count * sizeof(GenericValue)));
|
||||
+ for (SizeType idx = 0; idx < count; ++idx)
|
||||
+ new (arr + idx) GenericValue;
|
||||
+ SetElementsPointer(arr);
|
||||
+ std::copy_n(values, count, arr);
|
||||
}
|
||||
else
|
||||
SetElementsPointer(0);
|
||||
@@ -1947,9 +1988,11 @@
|
||||
void SetObjectRaw(Member* members, SizeType count, Allocator& allocator) {
|
||||
data_.f.flags = kObjectFlag;
|
||||
if (count) {
|
||||
- Member* m = static_cast<Member*>(allocator.Malloc(count * sizeof(Member)));
|
||||
- SetMembersPointer(m);
|
||||
- std::memcpy(m, members, count * sizeof(Member));
|
||||
+ auto arr = static_cast<Member*>(allocator.Malloc(count * sizeof(Member)));
|
||||
+ for (SizeType idx = 0; idx < count; ++idx)
|
||||
+ new (arr + idx) Member;
|
||||
+ SetMembersPointer(arr);
|
||||
+ std::copy_n(members, count, arr);
|
||||
}
|
||||
else
|
||||
SetMembersPointer(0);
|
||||
Reference in New Issue
Block a user