mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-03 21:44:30 +08:00
* fixes #4681 * fixes a few Windows build problems * added comments to adapter.cpp to explain the changes * get PostgreSQL to build on Windows with both MSVC and MinGW compilers Co-authored-by: Tosco, Paolo <paolo.tosco@novartis.com>
This commit is contained in:
@@ -2302,7 +2302,7 @@ TEST_CASE("conformer details") {
|
||||
CHECK(conf->getId() == cid);
|
||||
}
|
||||
|
||||
#if !defined(_MSC_VER) || !defined(RDKIT_DYN_LINK)
|
||||
#if !defined(_WIN32) || !defined(RDKIT_DYN_LINK)
|
||||
namespace RDKit {
|
||||
namespace Canon {
|
||||
namespace details {
|
||||
@@ -2459,4 +2459,4 @@ TEST_CASE("Github #4535: operator<< for AtomPDBResidue", "[PDB]") {
|
||||
)FOO";
|
||||
CHECK(oss.str() == tgt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,24 @@
|
||||
if(APPLE)
|
||||
set (EXTENSION_PREFIX "")
|
||||
set (EXTENSION_SUFFIX ".so")
|
||||
else(APPLE)
|
||||
set (EXTENSION_DEST_SUFFIX ".so")
|
||||
elseif(WIN32)
|
||||
set(REGEX_SEPARATOR "\\\\")
|
||||
if(MSVC)
|
||||
set (EXTENSION_PREFIX "")
|
||||
set (EXTENSION_SUFFIX "")
|
||||
set (EXTENSION_DEST_SUFFIX ".dll")
|
||||
else()
|
||||
set(REGEX_SEPARATOR "${REGEX_SEPARATOR}${REGEX_SEPARATOR}")
|
||||
set (EXTENSION_PREFIX "lib")
|
||||
set (EXTENSION_SUFFIX "")
|
||||
set (EXTENSION_DEST_SUFFIX ".dll")
|
||||
endif()
|
||||
else()
|
||||
set (EXTENSION_PREFIX "lib")
|
||||
set (EXTENSION_SUFFIX "")
|
||||
endif(APPLE)
|
||||
set (EXTENSION_DEST_SUFFIX ".so")
|
||||
endif()
|
||||
|
||||
find_package(PostgreSQL REQUIRED)
|
||||
|
||||
@@ -19,11 +33,12 @@ endif(NOT DEFINED Boost_INCLUDE_DIRS)
|
||||
include_directories(${Boost_INCLUDE_DIRS})
|
||||
message("postgres: ${PostgreSQL_INCLUDE_DIRS}")
|
||||
add_definitions(-DRDK_TOOLKIT_VERSION="${RDKit_RELEASENAME}")
|
||||
include_directories(${RDKit_CodeDir})
|
||||
include_directories(${PostgreSQL_INCLUDE_DIRS})
|
||||
if(WIN32)
|
||||
include_directories(${PostgreSQL_INCLUDE_DIR}/server/port/win32)
|
||||
include_directories(${PostgreSQL_TYPE_INCLUDE_DIR}/port/win32)
|
||||
if(MSVC)
|
||||
include_directories(${PostgreSQL_INCLUDE_DIR}/server/port/win32_msvc)
|
||||
include_directories(${PostgreSQL_TYPE_INCLUDE_DIR}/port/win32_msvc)
|
||||
endif(MSVC)
|
||||
endif(WIN32)
|
||||
if(RDK_BUILD_AVALON_SUPPORT)
|
||||
@@ -67,8 +82,11 @@ run_pg_config (--sharedir PG_SHAREDIR)
|
||||
run_pg_config (--pkglibdir PG_PKGLIBDIR)
|
||||
set(PG_PKGLIBDIR "${PG_PKGLIBDIR}/")
|
||||
set(PG_EXTENSIONDIR "${PG_SHAREDIR}/extension")
|
||||
if(WIN32)
|
||||
add_definitions(-DWIN32)
|
||||
endif()
|
||||
if(MSVC)
|
||||
add_definitions(-DWIN32 -DBUILDING_MODULE -DNOMINMAX)
|
||||
add_definitions(-DBUILDING_MODULE -DNOMINMAX)
|
||||
if(NOT (MSVC_VERSION LESS 1700))
|
||||
add_definitions(-DHAVE_RINT)
|
||||
endif()
|
||||
@@ -126,23 +144,31 @@ set(pgRDKitLibList "${pgRDKitLibList}"
|
||||
if(RDK_USE_URF)
|
||||
set(pgRDKitLibList "${pgRDKitLibList};${RDK_URF_LIBS}")
|
||||
endif(RDK_USE_URF)
|
||||
set (pgRDKitLibs "")
|
||||
foreach(pgRDKitLib ${pgRDKitLibList})
|
||||
set(pgRDKitLibs "${pgRDKitLibs}${pgRDKitLib}${pgRDKitLibSuffix};")
|
||||
if (NOT pgRDKitLibs STREQUAL "")
|
||||
set(pgRDKitLibs "${pgRDKitLibs};")
|
||||
endif()
|
||||
set(pgRDKitLibs "${pgRDKitLibs}${pgRDKitLib}${pgRDKitLibSuffix}")
|
||||
endforeach()
|
||||
target_link_libraries(${EXTENSION}${EXTENSION_SUFFIX} ${pgRDKitLibs})
|
||||
if(RDK_BUILD_THREADSAFE_SSS)
|
||||
target_link_libraries(${EXTENSION}${EXTENSION_SUFFIX} ${RDKit_THREAD_LIBS})
|
||||
endif(RDK_BUILD_THREADSAFE_SSS)
|
||||
|
||||
if(WIN32 AND NOT UNIX)
|
||||
set(PGREGRESS_BINARY "${PG_BINDIR}\\pg_regress.exe")
|
||||
string(REGEX REPLACE "/" "\\\\" PG_EXTENSIONDIR ${PG_EXTENSIONDIR})
|
||||
string(REGEX REPLACE "/" "\\\\" PGREGRESS_BINARY ${PGREGRESS_BINARY})
|
||||
else(WIN32 AND NOT UNIX)
|
||||
if(MSVC)
|
||||
set(PGREGRESS_BINARY "${PG_BINDIR}/pg_regress")
|
||||
string(REGEX REPLACE "/" ${REGEX_SEPARATOR} PGREGRESS_BINARY ${PGREGRESS_BINARY})
|
||||
string(REGEX REPLACE "/" ${REGEX_SEPARATOR} PG_EXTENSIONDIR ${PG_EXTENSIONDIR})
|
||||
string(REGEX REPLACE "/" ${REGEX_SEPARATOR} PGREGRESS_BINARY ${PGREGRESS_BINARY})
|
||||
else()
|
||||
run_pg_config (--pgxs PG_MAKEFILE)
|
||||
get_filename_component(PG_MAKEFILESDIR ${PG_MAKEFILE} PATH)
|
||||
set(PGREGRESS_BINARY "${PG_MAKEFILESDIR}/../test/regress/pg_regress")
|
||||
endif(WIN32 AND NOT UNIX)
|
||||
endif()
|
||||
if(WIN32)
|
||||
set(PGREGRESS_BINARY "${PGREGRESS_BINARY}.exe")
|
||||
endif()
|
||||
if(NOT EXISTS ${PGREGRESS_BINARY})
|
||||
message(FATAL_ERROR "${PGREGRESS_BINARY} does not exist")
|
||||
endif()
|
||||
@@ -170,26 +196,30 @@ set(testPgSQLName "${CMAKE_CURRENT_BINARY_DIR}/pgsql_regress")
|
||||
set(installPgSQLName "${CMAKE_CURRENT_BINARY_DIR}/pgsql_install")
|
||||
set(PG_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/")
|
||||
set(PG_CURRENT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/")
|
||||
if(WIN32 AND NOT UNIX)
|
||||
set(PG_RDKIT_LIB_SRC "${EXTENSION_PREFIX}${EXTENSION}${EXTENSION_DEST_SUFFIX}")
|
||||
set(PG_RDKIT_LIB_DEST "${EXTENSION}${EXTENSION_DEST_SUFFIX}")
|
||||
if(MSVC)
|
||||
set(testPgSQLCommand "")
|
||||
set(testPgSQLName "${testPgSQLName}.bat")
|
||||
set(installPgSQLName "${installPgSQLName}.bat")
|
||||
set(installCopyCommand "copy /Y")
|
||||
set(installPgSQLCopyCommand "copy /Y")
|
||||
set(installPgSQLSeparator "\\")
|
||||
set(installPgSQLBody "")
|
||||
set(PG_RDKIT_LIB_SRC "${EXTENSION}.dll")
|
||||
set(PG_RDKIT_LIB_DEST "${EXTENSION}.dll")
|
||||
string(REGEX REPLACE "/" "\\\\" PG_CURRENT_SOURCE_DIR ${PG_CURRENT_SOURCE_DIR})
|
||||
string(REGEX REPLACE "/" "\\\\" PG_CURRENT_BINARY_DIR ${PG_CURRENT_BINARY_DIR})
|
||||
string(REGEX REPLACE "/" "\\\\" PG_PKGLIBDIR ${PG_PKGLIBDIR})
|
||||
else(WIN32 AND NOT UNIX)
|
||||
set(BAT_QUOTE "\"")
|
||||
set(SH_QUOTE "")
|
||||
string(REGEX REPLACE "/" ${REGEX_SEPARATOR} PG_CURRENT_SOURCE_DIR ${PG_CURRENT_SOURCE_DIR})
|
||||
string(REGEX REPLACE "/" ${REGEX_SEPARATOR} PG_CURRENT_BINARY_DIR ${PG_CURRENT_BINARY_DIR})
|
||||
string(REGEX REPLACE "/" ${REGEX_SEPARATOR} PG_PKGLIBDIR ${PG_PKGLIBDIR})
|
||||
else()
|
||||
set(testPgSQLCommand "sh")
|
||||
set(testPgSQLName "${testPgSQLName}.sh")
|
||||
set(installPgSQLName "${installPgSQLName}.sh")
|
||||
set(installCopyCommand "cp")
|
||||
set(installPgSQLCopyCommand "cp")
|
||||
set(installPgSQLSeparator "/")
|
||||
set(installPgSQLBody "set -x\n")
|
||||
set(PG_RDKIT_LIB_SRC "${EXTENSION_PREFIX}${EXTENSION}.so")
|
||||
set(PG_RDKIT_LIB_DEST "${EXTENSION}.so")
|
||||
endif(WIN32 AND NOT UNIX)
|
||||
set(BAT_QUOTE "")
|
||||
set(SH_QUOTE "\"")
|
||||
endif()
|
||||
set(testPgSQLBody "cd \"${PG_CURRENT_BINARY_DIR}\"\n"
|
||||
"\"${PGREGRESS_BINARY}\" --inputdir=sql "
|
||||
"${PGREGRESS_BINDIR_SWITCH} rdkit-91 "
|
||||
@@ -234,10 +264,10 @@ foreach(file ${files})
|
||||
configure_file(${file} ${output_name})
|
||||
endforeach()
|
||||
set(installPgSQLBody "${installPgSQLBody}"
|
||||
"${installCopyCommand} \"${PG_CURRENT_BINARY_DIR}${EXTENSION}--${PG_EXTVERSION}.sql\" \"${PG_EXTENSIONDIR}\"\n"
|
||||
"${installCopyCommand} \"${PG_CURRENT_SOURCE_DIR}${EXTENSION}.control\" \"${PG_EXTENSIONDIR}\"\n"
|
||||
"${installCopyCommand} \"${PG_CURRENT_SOURCE_DIR}update_sql/\"*.sql \"${PG_EXTENSIONDIR}\"\n"
|
||||
"${installCopyCommand} \"${PG_CURRENT_BINARY_DIR}${PG_RDKIT_LIB_SRC}\" "
|
||||
"${installPgSQLCopyCommand} \"${PG_CURRENT_BINARY_DIR}${EXTENSION}--${PG_EXTVERSION}.sql\" \"${PG_EXTENSIONDIR}\"\n"
|
||||
"${installPgSQLCopyCommand} \"${PG_CURRENT_SOURCE_DIR}${EXTENSION}.control\" \"${PG_EXTENSIONDIR}\"\n"
|
||||
"${installPgSQLCopyCommand} \"${PG_CURRENT_SOURCE_DIR}update_sql${installPgSQLSeparator}${SH_QUOTE}*.sql${BAT_QUOTE} \"${PG_EXTENSIONDIR}\"\n"
|
||||
"${installPgSQLCopyCommand} \"${PG_CURRENT_BINARY_DIR}${PG_RDKIT_LIB_SRC}\" "
|
||||
"\"${PG_PKGLIBDIR}${PG_RDKIT_LIB_DEST}\"\n")
|
||||
file(WRITE ${testPgSQLName} ${testPgSQLBody})
|
||||
file(WRITE ${installPgSQLName} ${installPgSQLBody})
|
||||
|
||||
@@ -30,6 +30,22 @@
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
|
||||
// PostgreSQL 14 on Windows uses a hack to redefine the stat struct
|
||||
// The hack assumes that sys/stat.h will be imported for the first
|
||||
// time by win32_port.h, which is not necessarily the case
|
||||
// So we need to set the stage for the hack or it will fail
|
||||
#ifdef _WIN32
|
||||
#define fstat microsoft_native_fstat
|
||||
#define stat microsoft_native_stat
|
||||
#include <sys/stat.h>
|
||||
#ifdef __MINGW32__
|
||||
#ifndef HAVE_GETTIMEOFDAY
|
||||
#define HAVE_GETTIMEOFDAY 1
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <GraphMol/RDKitBase.h>
|
||||
#include <GraphMol/MolPickler.h>
|
||||
#include <GraphMol/ChemReactions/ReactionPickler.h>
|
||||
@@ -76,6 +92,12 @@
|
||||
#include <GraphMol/MolInterchange/MolInterchange.h>
|
||||
#endif
|
||||
|
||||
// see above comment on the PostgreSQL hack
|
||||
#ifdef _WIN32
|
||||
#undef fstat
|
||||
#undef stat
|
||||
#endif
|
||||
|
||||
#include "rdkit.h"
|
||||
#include "guc.h"
|
||||
#include "bitstring.h"
|
||||
|
||||
@@ -54,7 +54,12 @@ macro(rdkit_library)
|
||||
if(RDK_INSTALL_STATIC_LIBS)
|
||||
add_library(${RDKLIB_NAME}_static ${RDKLIB_SOURCES})
|
||||
|
||||
set(skipNext FALSE)
|
||||
foreach(linkLib ${RDKLIB_LINK_LIBRARIES})
|
||||
if(skipNext)
|
||||
set(skipNext FALSE)
|
||||
continue()
|
||||
endif()
|
||||
if(TARGET "${linkLib}")
|
||||
get_target_property(linkLib_IMPORTED "${linkLib}" IMPORTED)
|
||||
if (linkLib_IMPORTED)
|
||||
@@ -66,6 +71,23 @@ macro(rdkit_library)
|
||||
# linkLib is a file, so keep it as-is
|
||||
target_link_libraries(${RDKLIB_NAME}_static PUBLIC "${linkLib}")
|
||||
continue()
|
||||
# cmake prepends the special keywords debug, optimized, general
|
||||
# before the library name depending on whether they should be
|
||||
# linked in Debug, Release or generic builds. Therefore we need
|
||||
# to skip those, and also skip the library that follows if it
|
||||
# is not relevant for the current build type
|
||||
elseif ("${linkLib}" STREQUAL "debug")
|
||||
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(skipNext TRUE)
|
||||
endif()
|
||||
continue()
|
||||
elseif ("${linkLib}" STREQUAL "optimized")
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(skipNext TRUE)
|
||||
endif()
|
||||
continue()
|
||||
elseif ("${linkLib}" STREQUAL "general")
|
||||
continue()
|
||||
endif()
|
||||
|
||||
# We haven't seen linkLib yet. This probably means it is a target
|
||||
|
||||
Reference in New Issue
Block a user