Skip to content

Commit

Permalink
- add compile option for mxArrayToString
Browse files Browse the repository at this point in the history
  • Loading branch information
fbergmann committed Mar 14, 2023
1 parent a2c5e4b commit 0d50ed8
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 81 deletions.
149 changes: 69 additions & 80 deletions src/bindings/matlab/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,17 @@
# 2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
# 3. University of Heidelberg, Heidelberg, Germany
#
# Copyright (C) 2009-2013 jointly by the following organizations:
# Copyright (C) 2009-2013 jointly by the following organizations:
# 1. California Institute of Technology, Pasadena, CA, USA
# 2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
#
#
# Copyright (C) 2006-2008 by the California Institute of Technology,
# Pasadena, CA, USA
#
# Copyright (C) 2002-2005 jointly by the following organizations:
# Pasadena, CA, USA
#
# Copyright (C) 2002-2005 jointly by the following organizations:
# 1. California Institute of Technology, Pasadena, CA, USA
# 2. Japan Science and Technology Agency, Japan
#
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation. A copy of the license agreement is provided
Expand All @@ -32,13 +32,13 @@
###############################################################################

if(WITH_MATLAB)
SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" ${CMAKE_MODULE_PATH})
SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" ${CMAKE_MODULE_PATH})

if (NOT MATLAB_ROOT_PATH)
# try and find matlab in path
find_program(MATLAB_COMMAND NAMES matlab matlab.exe)
if (MATLAB_COMMAND)
# if we have it in the path, it will be of form <matlab_version>/bin/matlab,
# if we have it in the path, it will be of form <matlab_version>/bin/matlab,
# so take the DIRECTORY component twice
get_filename_component(MATLAB_BIN_PATH ${MATLAB_COMMAND} DIRECTORY)
get_filename_component(MATLAB_ROOT ${MATLAB_BIN_PATH} DIRECTORY)
Expand All @@ -48,87 +48,76 @@ endif()

find_package(Matlab)

# on windows let us build the library using MSVC, on Linux and OS X we choose
# to build with the buildSBML script by default
#set(MATLAB_MEX_DEFAULT)
#set(WITH_MATLAB_BUILDSBML_DEFAULT)
#if (UNIX)
# set(WITH_MATLAB_BUILDSBML_DEFAULT ON)
# set(MATLAB_MEX_DEFAULT OFF)
#else()
# set(WITH_MATLAB_BUILDSBML_DEFAULT OFF)
# set(MATLAB_MEX_DEFAULT OFF)
#endif()
#
#option(WITH_MATLAB_BUILDSBML
# "Generate Matlab bindings using the buildsbml script from matlab." ${WITH_MATLAB_BUILDSBML_DEFAULT} )
#option(WITH_MATLAB_MEX
# "Generate Matlab bindings using MEX compiler " ${MATLAB_MEX_DEFAULT} )

# by default we build matlab bindings using mxArrayToUTF8String this is only
# available for later versions of matlab, so the following flag allows us to
# compile for them.
option(WITH_MATLAB_UTF8STRING
"Generate Matlab bindings using mxArrayToUTF8String." ON )

#
#
# Determine the matlab installation directory
#
set(MATLAB_PACKAGE_INSTALL_DIR)
if (UNIX OR CYGWIN)
if (UNIX OR CYGWIN)
set(MATLAB_PACKAGE_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})
else()
set(MATLAB_PACKAGE_INSTALL_DIR ${MISC_PREFIX}bindings/matlab)
endif()


if (MSVC)
###############################################################################
#
# this is a directory level operation!
#
if (WITH_STATIC_RUNTIME)
foreach(flag_var
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)

if(${flag_var} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
endif(${flag_var} MATCHES "/MD")


endforeach(flag_var)
add_definitions( -D_MT)
endif(WITH_STATIC_RUNTIME)
endif()

include_directories(${MATLAB_INCLUDE_DIR})
include_directories(BEFORE ${LIBSBML_ROOT_BINARY_DIR}/src)

if (EXTRA_INCLUDE_DIRS)
include_directories(${EXTRA_INCLUDE_DIRS})
endif(EXTRA_INCLUDE_DIRS)

SET(COMMON_FILES
"${CMAKE_CURRENT_SOURCE_DIR}/ModelDetails.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/StructureFields.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/CommonFunctions.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Filenames.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/InputOutput.cpp" )

foreach(matlab_source_file "TranslateSBML" "OutputSBML")

add_library(matlab_binding_${matlab_source_file} SHARED "${CMAKE_CURRENT_SOURCE_DIR}/${matlab_source_file}.cpp" ${COMMON_FILES})
set_target_properties(matlab_binding_${matlab_source_file} PROPERTIES OUTPUT_NAME "${matlab_source_file}")
set_target_properties(matlab_binding_${matlab_source_file} PROPERTIES SUFFIX ".${MATLAB_MEX_EXT}")
set_target_properties(matlab_binding_${matlab_source_file} PROPERTIES PREFIX "")
if (MSVC)
set_target_properties(matlab_binding_${matlab_source_file} PROPERTIES LINK_FLAGS "/export:mexFunction")
endif()
target_link_libraries(matlab_binding_${matlab_source_file} ${MATLAB_LIBRARIES} ${LIBSBML_LIBRARY}-static)
install(TARGETS matlab_binding_${matlab_source_file} DESTINATION ${MATLAB_PACKAGE_INSTALL_DIR} )

endforeach()


#endif(WITH_MATLAB_BUILDSBML)
if (MSVC)
###############################################################################
#
# this is a directory level operation!
#
if (WITH_STATIC_RUNTIME)
foreach(flag_var
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)

if(${flag_var} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
endif(${flag_var} MATCHES "/MD")


endforeach(flag_var)
add_definitions( -D_MT)
endif(WITH_STATIC_RUNTIME)
endif()

include_directories(${MATLAB_INCLUDE_DIR})
include_directories(BEFORE ${LIBSBML_ROOT_BINARY_DIR}/src)
if (EXTRA_INCLUDE_DIRS)
include_directories(${EXTRA_INCLUDE_DIRS})
endif(EXTRA_INCLUDE_DIRS)

SET(COMMON_FILES
"${CMAKE_CURRENT_SOURCE_DIR}/ModelDetails.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/StructureFields.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/CommonFunctions.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Filenames.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/InputOutput.cpp" )

foreach(matlab_source_file "TranslateSBML" "OutputSBML")

add_library(matlab_binding_${matlab_source_file} SHARED "${CMAKE_CURRENT_SOURCE_DIR}/${matlab_source_file}.cpp" ${COMMON_FILES})
set_target_properties(matlab_binding_${matlab_source_file} PROPERTIES OUTPUT_NAME "${matlab_source_file}")
set_target_properties(matlab_binding_${matlab_source_file} PROPERTIES SUFFIX ".${MATLAB_MEX_EXT}")
set_target_properties(matlab_binding_${matlab_source_file} PROPERTIES PREFIX "")

if (WITH_MATLAB_UTF8STRING)
target_compile_options(matlab_binding_${matlab_source_file} PRIVATE -DUSE_UTF8STRING)
endif()

if (MSVC)
set_target_properties(matlab_binding_${matlab_source_file} PROPERTIES LINK_FLAGS "/export:mexFunction")
endif()

target_link_libraries(matlab_binding_${matlab_source_file} ${MATLAB_LIBRARIES} ${LIBSBML_LIBRARY}-static)
install(TARGETS matlab_binding_${matlab_source_file} DESTINATION ${MATLAB_PACKAGE_INSTALL_DIR} )
endforeach()


# mark files for installation
Expand All @@ -137,7 +126,7 @@ file(GLOB matlab_scripts "${CMAKE_CURRENT_SOURCE_DIR}/../matlab/*.m"
install(FILES ${matlab_scripts} DESTINATION ${MATLAB_PACKAGE_INSTALL_DIR})

# add test cases
add_subdirectory(test)
add_subdirectory(test)

endif()

2 changes: 1 addition & 1 deletion src/bindings/matlab/StructureFields.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1770,7 +1770,7 @@ StructureFields::readString(const std::string& name, unsigned int index, unsigne
mxField = mxGetField(mxStructure, index, name.c_str());
if (mxField != NULL)
{
#ifndef USE_OCTAVE
#ifdef USE_UTF8STRING
value = mxArrayToUTF8String(mxField);
#else
value = mxArrayToString(mxField);
Expand Down

0 comments on commit 0d50ed8

Please sign in to comment.