From ddd372e771a7441bed9a6334ccb7566f5aa3677b Mon Sep 17 00:00:00 2001 From: Berk Onat <b.onat@warwick.ac.uk> Date: Tue, 31 Oct 2017 11:41:06 +0000 Subject: [PATCH] Corrected a memory error at pymolfile C++ wrapper --- pymolfile/molfile/external/CMakeLists.txt | 2 +- .../molfile_plugins/compile/CMakeLists.txt | 80 +++++++++++-------- pymolfile/molfile/pymolfile.cxx | 2 +- 3 files changed, 47 insertions(+), 37 deletions(-) diff --git a/pymolfile/molfile/external/CMakeLists.txt b/pymolfile/molfile/external/CMakeLists.txt index 668d91d..20e1530 100644 --- a/pymolfile/molfile/external/CMakeLists.txt +++ b/pymolfile/molfile/external/CMakeLists.txt @@ -4,7 +4,7 @@ include(ExternalProject) set(TNG_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/tng") set(TNG_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/tng") -set(TNG_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${TNG_INSTALL_DIR}) +set(TNG_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${TNG_INSTALL_DIR} -DBUILD_SHARED_LIBS=OFF) message("TNG_PREFIX='${TNG_PREFIX}'") message("TNG_INSTALL_DIR='${TNG_INSTALL_DIR}'") diff --git a/pymolfile/molfile/molfile_plugins/compile/CMakeLists.txt b/pymolfile/molfile/molfile_plugins/compile/CMakeLists.txt index 2075072..f86be4f 100644 --- a/pymolfile/molfile/molfile_plugins/compile/CMakeLists.txt +++ b/pymolfile/molfile/molfile_plugins/compile/CMakeLists.txt @@ -2,19 +2,23 @@ cmake_minimum_required(VERSION 2.8.12) project(molfileplugins) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_BINARY_DIR}) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}") find_package(EXPAT) find_package(TCL) -find_package(NetCDF) -find_package(NETCDF) +include (FindNetCDF.cmake) +set (NETCDF_CXX "YES") +find_package(NetCDF REQUIRED) -if (EXISTS "${TNG_INSTALL_DIR}/lib/libtng_io.dylib" - OR EXISTS "${TNG_INSTALL_DIR}/lib/libtng_io.so" - OR EXISTS "${TNG_INSTALL_DIR}/include/tng/tng_io.h") - set(TNGIO_FOUND TRUE) - set(TNGIO_LIBRARIES "${TNG_INSTALL_DIR}/lib/") - set(TNGIO_INLCUDE_DIRS "${TNG_INSTALL_DIR}/include/") -endif() +set(TNG_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/../../external/tng") +message(TNG_DIR= ${TNG_INSTALL_DIR}) +#if (EXISTS "${TNG_INSTALL_DIR}/lib/libtng_io.dylib" +# OR EXISTS "${TNG_INSTALL_DIR}/lib/libtng_io.so" +# OR EXISTS "${TNG_INSTALL_DIR}/include/tng/tng_io.h") +set(TNGIO_FOUND TRUE) +set(TNGIO_LIBRARIES "${TNG_INSTALL_DIR}/lib/libtng_io.a") +set(TNGIO_LIBRARY_DIRS "${TNG_INSTALL_DIR}/lib/") +set(TNGIO_INCLUDE_DIRS "${TNG_INSTALL_DIR}/include/") +#endif() set(TARGET_ARCH_REGEX "^.*-march[= ]([^ ]+).*$") string(REGEX MATCH "${TARGET_ARCH_REGEX}" TARGET_ARCH_MATCH "${CMAKE_C_FLAGS}" "${CMAKE_CXX_FLAGS}") @@ -50,21 +54,21 @@ endif() if(LINUX) if(CMAKE_CXX_COMPILER_ID MATCHES "^.*GNU.*$") if(ARCH64BIT) - set(TARGET_COPT " -fPIC -m64 -o ") - set(TARGET_LOPT " -fPIC -m64 -lstdc++ -o ") - set(TARGET_CFLAGS " -m64 -O2 -fPIC -Wall ${CMAKE_C_FLAGS}") - set(TARGET_CXXFLG " -m64 -O2 -fPIC -Wall ${CMAKE_CXX_FLAGS}") + set(TARGET_COPT -fPIC;-m64;-o) + set(TARGET_LOPT -fPIC;-m64;-lstdc++;-o) + set(TARGET_CFLAGS -m64;-O2;-fPIC;-Wall;${CMAKE_C_FLAGS}) + set(TARGET_CXXFLG -m64;-O2;-fPIC;-Wall;${CMAKE_CXX_FLAGS}) else() - set(TARGET_COPT " -fPIC -m32 -o ") - set(TARGET_LOPT " -fPIC -m32 -lstdc++ -o ") - set(TARGET_CFLAGS " -m32 -O2 -fPIC -Wall ${CMAKE_C_FLAGS}") - set(TARGET_CXXFLG " -m32 -O2 -fPIC -Wall ${CMAKE_CXX_FLAGS}") + set(TARGET_COPT -fPIC;-m32;-o) + set(TARGET_LOPT -fPIC;-m32;-lstdc++;-o) + set(TARGET_CFLAGS -m32;-O2;-fPIC;-Wall;${CMAKE_C_FLAGS}) + set(TARGET_CXXFLG -m32;-O2;-fPIC;-Wall;${CMAKE_CXX_FLAGS}) endif() else() - set(TARGET_COPT " -o ") - set(TARGET_LOPT " -o ") - set(TARGET_CFLAGS " -O2 -Wall ${CMAKE_C_FLAGS}") - set(TARGET_CXXFLG " -O2 -Wall ${CMAKE_CXX_FLAGS}") + set(TARGET_COPT -o) + set(TARGET_LOPT -o) + set(TARGET_CFLAGS -O2;-Wall;${CMAKE_C_FLAGS}) + set(TARGET_CXXFLG -O2;-Wall;${CMAKE_CXX_FLAGS}) endif() endif() @@ -77,16 +81,16 @@ if(APPLE) set(TARGET_CFLAGS -m64;-Os;-Wall;-fPIC;-dynamic;${CMAKE_C_FLAGS}) set(TARGET_CXXFLG -m64;-Os;-Wall;-fPIC;-dynamic;${CMAKE_CXX_FLAGS}) else() - set(TARGET_COPT " -fPIC -m32 -o ") - set(TARGET_LOPT " -fPIC -m32 -o ") - set(TARGET_CFLAGS " -m32 -Os -Wall -fPIC -dynamic ${CMAKE_C_FLAGS}") - set(TARGET_CXXFLG " -m32 -Os -Wall -fPIC -dynamic ${CMAKE_CXX_FLAGS}") + set(TARGET_COPT -fPIC;-m32;-o) + set(TARGET_LOPT -fPIC;-m32;-o) + set(TARGET_CFLAGS -m32;-Os;-Wall;-fPIC;-dynamic;${CMAKE_C_FLAGS}) + set(TARGET_CXXFLG -m32;-Os;-Wall;-fPIC;-dynamic;${CMAKE_CXX_FLAGS}) endif() else() - set(TARGET_COPT " -o ") - set(TARGET_LOPT " -o ") - set(TARGET_CFLAGS " -O2 -Wall ${CMAKE_C_FLAGS}") - set(TARGET_CXXFLG " -O2 -Wall ${CMAKE_CXX_FLAGS}") + set(TARGET_COPT -o) + set(TARGET_LOPT -o) + set(TARGET_CFLAGS -O2;-Wall;${CMAKE_C_FLAGS}) + set(TARGET_CXXFLG -O2;-Wall;${CMAKE_CXX_FLAGS}) endif() endif() @@ -103,25 +107,31 @@ if(UNIX) set(TCLINC "-I${TCL_INCLUDE_PATH}") set(TCLLIB "-L${TCL_LIBRARY}") set(TARGET_MOL_LIBS ${TARGET_MOL_LIBS} \"TCLLDFLAGS=${TCLLDFLAGS}\";\"TCLINC=${TCLINC}\";\"TCLLIB=${TCLLIB}\";) + message(TCL_FOUND= ${TCL_LIBRARY}) endif() if(EXPAT_FOUND) set(EXPATLDFLAGS ${EXPAT_LIBRARIES}) set(EXPATINC "-I${EXPAT_INCLUDE_DIRS}") set(EXPATLIB "-I${EXPAT_INCLUDE_DIRS}") set(TARGET_MOL_LIBS ${TARGET_MOL_LIBS} \"EXPATLDFLAGS=${EXPATLDFLAGS}\";\"EXPATINC=${EXPATINC}\";\"EXPATLIB=${EXPATLIB}\";) + message(EXPAT_FOUND= ${EXPAT_LIBRARIES}) endif() if(NETCDF_FOUND) - set(NETCDFLDFLAGS ${NETCDF_LIBRARY}) - set(NETCDFINC "-I${NETCDF_INCLUDE_DIRS}") - set(NETCDFLIB "-I${NETCDF_INCLUDE_DIRS}") + set(NETCDFLDFLAGS ${NETCDF_LIBRARIES}) + set(NETCDFINC "-I${NETCDF_INCLUDES}") + set(NETCDFLIB "-L${NETCDF_INCLUDES}") set(TARGET_MOL_LIBS ${TARGET_MOL_LIBS} \"NETCDFLDFLAGS=${NETCDFLDFLAGS}\";\"NETCDFINC=${NETCDFINC}\";\"NETCDFLIB=${NETCDFLIB}\";) + message(NETCDF_FOUND= ${NETCDF_LIBRARIES}) + message(NETCDF_FOUND= ${NETCDF_INCLUDES}) endif() if(TNGIO_FOUND) - set(TNGIOLDFLAGS -ltng_io) + set(TNGIOLDFLAGS ${TNGIO_LIBRARIES}) set(TNGIOINC "-I${TNGIO_INCLUDE_DIRS}") - set(TNGIOLIB "-L${TNGIO_LIBRARIES}") + set(TNGIOLIB "-L${TNGIO_LIBRARY_DIRS}") set(TARGET_MOL_LIBS ${TARGET_MOL_LIBS} \"TNGLDFLAGS=${TNGIOLDFLAGS}\";\"TNGINC=${TNGIOINC}\";\"TNGLIB=${TNGIOLIB}\";) + message(TNGIO_FOUND= ${TNGIO_LIBRARIES}) endif() + # message(MAKE_COMMAND= "make dynlibs staticlibs bins \"ARCH = ${TARGET_ARCH}\" \"COPTO = ${TARGET_COPT} \" \"LOPTO = ${TARGET_LOPT} \" \"CC = ${CMAKE_C_COMPILER} \" \"CXX = ${CMAKE_CXX_COMPILER} \" \"DEF = ${TARGET_DEF}\" \"CCFLAGS = ${TARGET_CFLAGS} \" \"CXXFLAGS = ${TARGET_CXXFLG} \" \"AR = ${TARGET_AR}\" \"NM = ${TARGET_NM}\" \"RANLIB = ${TARGET_RANLIB}\" \"LIBTOOL = ${TARGET_LIBTOOL} \" ${TARGET_MOL_LIBS}") add_custom_command( OUTPUT ${LIB_MOLFILE_FILES} COMMAND make dynlibs staticlibs bins \"ARCH = ${TARGET_ARCH}\" \"COPTO = ${TARGET_COPT} \" \"LOPTO = ${TARGET_LOPT} \" \"CC = ${CMAKE_C_COMPILER} \" \"CXX = ${CMAKE_CXX_COMPILER} \" \"DEF = ${TARGET_DEF}\" \"CCFLAGS = ${TARGET_CFLAGS} \" \"CXXFLAGS = ${TARGET_CXXFLG} \" \"AR = ${TARGET_AR}\" \"NM = ${TARGET_NM}\" \"RANLIB = ${TARGET_RANLIB}\" \"LIBTOOL = ${TARGET_LIBTOOL} \" ${TARGET_MOL_LIBS} diff --git a/pymolfile/molfile/pymolfile.cxx b/pymolfile/molfile/pymolfile.cxx index 51eda58..d5ba6cb 100644 --- a/pymolfile/molfile/pymolfile.cxx +++ b/pymolfile/molfile/pymolfile.cxx @@ -201,7 +201,7 @@ PyObject * molfile_plugin_info(PyObject* molcapsule, int plugin_no) { PyObject* read_fill_structure(PyObject* molpack, PyObject* prototype) { //Py_Initialize(); - //import_array(); + import_array(); int options = 0; molfile_plugin_t* plugin; void* file_handle; -- GitLab