mirror of
https://github.com/openbabel/openbabel.git
synced 2025-02-25 18:55:23 -06:00
540 lines
22 KiB
CMake
540 lines
22 KiB
CMake
cmake_minimum_required(VERSION 2.6.0)
|
|
# Library versioning (used in Mac Python bindings)x
|
|
set(SOVERSION 4)
|
|
|
|
if (RUN_SWIG)
|
|
include(FindSWIG)
|
|
# This module finds an installed SWIG. It sets the following variables:
|
|
# SWIG_FOUND - set to true if SWIG is found
|
|
# SWIG_DIR - the directory where swig is installed
|
|
# SWIG_EXECUTABLE - the path to the swig executable
|
|
# SWIG_VERSION - the version number of the swig executable
|
|
|
|
find_package(SWIG 2.0)
|
|
if (NOT SWIG_FOUND)
|
|
message(STATUS "SWIG 2.0 NOT found")
|
|
return()
|
|
endif (NOT SWIG_FOUND)
|
|
endif (RUN_SWIG)
|
|
|
|
# The following needs to be kept in synch with ..\CMakeLists.txt
|
|
if(EIGEN3_FOUND)
|
|
set (eigen_define "-DHAVE_EIGEN -DHAVE_EIGEN3")
|
|
include_directories(${EIGEN3_INCLUDE_DIR})
|
|
set (CPPFLAGS_VALUE "-I${EIGEN3_INCLUDE_DIR}")
|
|
set (CPPFLAGS_TEXT "CPPFLAGS=${CPPFLAGS_VALUE}")
|
|
else()
|
|
if(EIGEN2_FOUND)
|
|
set (eigen_define "-DHAVE_EIGEN")
|
|
include_directories(${EIGEN2_INCLUDE_DIR})
|
|
set (CPPFLAGS_VALUE "-I${EIGEN2_INCLUDE_DIR}")
|
|
set (CPPFLAGS_TEXT "CPPFLAGS=${CPPFLAGS_VALUE}")
|
|
endif()
|
|
endif()
|
|
|
|
###################
|
|
# Python
|
|
###################
|
|
|
|
if (PYTHON_BINDINGS)
|
|
if (EXISTS ${openbabel_SOURCE_DIR}/scripts/python/openbabel-python.cpp OR RUN_SWIG)
|
|
find_package(PythonInterp)
|
|
if (NOT PYTHONINTERP_FOUND)
|
|
message(STATUS "Python interpreter NOT found")
|
|
endif (NOT PYTHONINTERP_FOUND)
|
|
|
|
if (PYTHONINTERP_FOUND AND NOT Python_ADDITIONAL_VERSIONS)
|
|
set(Python_ADDITIONAL_VERSIONS "${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}")
|
|
endif (PYTHONINTERP_FOUND AND NOT Python_ADDITIONAL_VERSIONS)
|
|
|
|
find_package(PythonLibs)
|
|
if (NOT PYTHONLIBS_FOUND)
|
|
message(STATUS "Python libraries NOT found")
|
|
endif (NOT PYTHONLIBS_FOUND)
|
|
|
|
if(PYTHONLIBS_FOUND AND PYTHONINTERP_FOUND)
|
|
set(DO_PYTHON_BINDINGS ON BOOL)
|
|
message(STATUS "Python bindings will be compiled")
|
|
endif(PYTHONLIBS_FOUND AND PYTHONINTERP_FOUND)
|
|
|
|
else (EXISTS ${openbabel_SOURCE_DIR}/scripts/python/openbabel-python.cpp OR RUN_SWIG)
|
|
message(STATUS "Warning: Python bindings NOT found. Generate using -DRUN_SWIG.")
|
|
|
|
endif (EXISTS ${openbabel_SOURCE_DIR}/scripts/python/openbabel-python.cpp OR RUN_SWIG)
|
|
endif (PYTHON_BINDINGS)
|
|
|
|
if (DO_PYTHON_BINDINGS)
|
|
|
|
include_directories(
|
|
${PYTHON_INCLUDE_PATH}
|
|
)
|
|
|
|
if(RUN_SWIG)
|
|
if(WIN32) # Skip the extra COMMANDs below as 'cat' is not present on Windows
|
|
add_custom_command(OUTPUT ${openbabel_SOURCE_DIR}/scripts/python/openbabel-python.cpp ${openbabel_SOURCE_DIR}/scripts/python/openbabel.py
|
|
COMMAND ${SWIG_EXECUTABLE} -python -c++ -small -O -templatereduce -naturalvar -I${openbabel_SOURCE_DIR}/include -I${openbabel_BINARY_DIR}/include -o ${openbabel_SOURCE_DIR}/scripts/python/openbabel-python.cpp ${eigen_define} -outdir ${openbabel_SOURCE_DIR}/scripts/python ${openbabel_SOURCE_DIR}/scripts/openbabel-python.i
|
|
MAIN_DEPENDENCY openbabel-python.i
|
|
VERBATIM
|
|
)
|
|
else(WIN32)
|
|
add_custom_command(OUTPUT ${openbabel_SOURCE_DIR}/scripts/python/openbabel-python.cpp ${openbabel_SOURCE_DIR}/scripts/python/openbabel.py
|
|
COMMAND ${SWIG_EXECUTABLE} -python -c++ -small -O -templatereduce -naturalvar -I${openbabel_SOURCE_DIR}/include -I${openbabel_BINARY_DIR}/include -o ${openbabel_SOURCE_DIR}/scripts/python/openbabel-python.cpp ${eigen_define} -outdir ${openbabel_SOURCE_DIR}/scripts/python ${openbabel_SOURCE_DIR}/scripts/openbabel-python.i
|
|
COMMAND ${CMAKE_COMMAND} -E echo "import sys" > ob.py
|
|
COMMAND ${CMAKE_COMMAND} -E echo "if sys.platform.find('linux'\) != -1:" >> ob.py
|
|
COMMAND ${CMAKE_COMMAND} -E echo " try:" >> ob.py
|
|
COMMAND ${CMAKE_COMMAND} -E echo " import dl" >> ob.py
|
|
COMMAND ${CMAKE_COMMAND} -E echo " except ImportError:" >> ob.py
|
|
COMMAND ${CMAKE_COMMAND} -E echo " import DLFCN as dl" >> ob.py
|
|
COMMAND ${CMAKE_COMMAND} -E echo " sys.setdlopenflags(sys.getdlopenflags() | dl.RTLD_GLOBAL)" >> ob.py
|
|
COMMAND cat ${openbabel_SOURCE_DIR}/scripts/python/openbabel.py >> ob.py
|
|
COMMAND ${CMAKE_COMMAND} -E copy ob.py ${openbabel_SOURCE_DIR}/scripts/python/openbabel.py
|
|
COMMAND ${CMAKE_COMMAND} -E remove ob.py
|
|
MAIN_DEPENDENCY openbabel-python.i
|
|
VERBATIM
|
|
)
|
|
endif(WIN32)
|
|
endif(RUN_SWIG)
|
|
|
|
add_library(bindings_python MODULE ${openbabel_SOURCE_DIR}/scripts/python/openbabel-python.cpp)
|
|
if(BINDINGS_ONLY)
|
|
target_link_libraries(bindings_python ${PYTHON_LIBRARIES} ${BABEL_SYSTEM_LIBRARY})
|
|
else()
|
|
target_link_libraries(bindings_python ${PYTHON_LIBRARIES} ${BABEL_LIBRARY})
|
|
endif()
|
|
|
|
if(NOT WIN32)
|
|
set_target_properties(bindings_python PROPERTIES
|
|
OUTPUT_NAME _openbabel
|
|
PREFIX ""
|
|
SUFFIX .so )
|
|
execute_process(
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(1,0,prefix='${CMAKE_INSTALL_PREFIX}'))"
|
|
OUTPUT_VARIABLE PYTHON_INSTDIR
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
if(NOT BINDINGS_ONLY)
|
|
add_dependencies(bindings_python openbabel)
|
|
endif()
|
|
|
|
install(TARGETS bindings_python
|
|
LIBRARY DESTINATION ${PYTHON_INSTDIR}
|
|
COMPONENT bindings_python)
|
|
install(FILES ${openbabel_SOURCE_DIR}/scripts/python/openbabel.py
|
|
DESTINATION ${PYTHON_INSTDIR}
|
|
COMPONENT bindings_python)
|
|
install(FILES ${openbabel_SOURCE_DIR}/scripts/python/pybel.py
|
|
DESTINATION ${PYTHON_INSTDIR}
|
|
COMPONENT bindings_python)
|
|
else(NOT WIN32)
|
|
set_target_properties(bindings_python PROPERTIES
|
|
OUTPUT_NAME _openbabel
|
|
PREFIX ""
|
|
SUFFIX .pyd )
|
|
add_custom_command(TARGET bindings_python POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${openbabel_SOURCE_DIR}/scripts/python/openbabel.py ${openbabel_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}
|
|
)
|
|
endif(NOT WIN32)
|
|
endif (DO_PYTHON_BINDINGS)
|
|
|
|
###################
|
|
# Java
|
|
###################
|
|
|
|
if (JAVA_BINDINGS)
|
|
if (EXISTS ${openbabel_SOURCE_DIR}/scripts/java/openbabel-java.cpp OR RUN_SWIG)
|
|
|
|
find_package(JNI)
|
|
if (NOT JNI_INCLUDE_DIRS)
|
|
message(STATUS "Java Native Interface NOT found. Java bindings will NOT be compiled.")
|
|
endif ()
|
|
|
|
if (RUN_SWIG)
|
|
find_package(Java)
|
|
if (NOT JAVA_COMPILE)
|
|
message(STATUS "Java compiler NOT found. Java bindings will NOT be generated.")
|
|
set(JAVAC_FAIL ON BOOL)
|
|
endif (NOT JAVA_COMPILE)
|
|
endif (RUN_SWIG)
|
|
|
|
if(JNI_INCLUDE_DIRS AND NOT JAVAC_FAIL)
|
|
set(DO_JAVA_BINDINGS ON BOOL)
|
|
message(STATUS "Java bindings will be compiled")
|
|
endif()
|
|
|
|
else (EXISTS ${openbabel_SOURCE_DIR}/scripts/java/openbabel-java.cpp OR RUN_SWIG)
|
|
message(STATUS "Warning: Java bindings NOT found. Generate using -DRUN_SWIG.")
|
|
|
|
endif (EXISTS ${openbabel_SOURCE_DIR}/scripts/java/openbabel-java.cpp OR RUN_SWIG)
|
|
endif (JAVA_BINDINGS)
|
|
|
|
if (DO_JAVA_BINDINGS)
|
|
|
|
include_directories(
|
|
${JNI_INCLUDE_DIRS}
|
|
)
|
|
|
|
if (RUN_SWIG)
|
|
add_custom_command(OUTPUT ${openbabel_SOURCE_DIR}/scripts/java/openbabel-java.cpp
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${openbabel_BINARY_DIR}/scripts/java/org/openbabel
|
|
COMMAND ${SWIG_EXECUTABLE} -java -package org.openbabel -c++ -small -O -templatereduce -naturalvar -I${openbabel_SOURCE_DIR}/include -I${openbabel_BINARY_DIR}/include -o ${openbabel_SOURCE_DIR}/scripts/java/openbabel-java.cpp ${eigen_define} -outdir ${openbabel_BINARY_DIR}/scripts/java/org/openbabel ${openbabel_SOURCE_DIR}/scripts/openbabel-java.i
|
|
COMMAND ${JAVA_COMPILE} ARGS "java/org/openbabel/*.java"
|
|
COMMAND ${CMAKE_COMMAND} -E chdir ${openbabel_BINARY_DIR}/scripts/java ${JAVA_ARCHIVE} cf openbabel.jar org
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${openbabel_BINARY_DIR}/scripts/java/openbabel.jar ${openbabel_SOURCE_DIR}/scripts/java
|
|
COMMAND ${CMAKE_COMMAND} -E remove_directory ${openbabel_BINARY_DIR}/scripts/java/org
|
|
MAIN_DEPENDENCY openbabel-java.i
|
|
)
|
|
endif (RUN_SWIG)
|
|
|
|
add_library(bindings_java MODULE ${openbabel_SOURCE_DIR}/scripts/java/openbabel-java.cpp)
|
|
if(BINDINGS_ONLY)
|
|
target_link_libraries(bindings_java ${JNI_LIBRARIES} ${BABEL_SYSTEM_LIBRARY})
|
|
else()
|
|
target_link_libraries(bindings_java ${JNI_LIBRARIES} ${BABEL_LIBRARY})
|
|
endif()
|
|
|
|
set_target_properties(bindings_java PROPERTIES
|
|
OUTPUT_NAME openbabel_java)
|
|
if(APPLE)
|
|
set_target_properties(bindings_java PROPERTIES SUFFIX ".jnilib")
|
|
endif(APPLE)
|
|
if(NOT BINDINGS_ONLY)
|
|
add_dependencies(bindings_java openbabel)
|
|
endif()
|
|
|
|
install(TARGETS bindings_java
|
|
LIBRARY DESTINATION ${LIB_INSTALL_DIR}
|
|
COMPONENT bindings_java)
|
|
install(FILES ${openbabel_SOURCE_DIR}/scripts/java/openbabel.jar
|
|
DESTINATION ${LIB_INSTALL_DIR}
|
|
COMPONENT bindings_java)
|
|
|
|
endif (DO_JAVA_BINDINGS)
|
|
|
|
|
|
###################
|
|
# R
|
|
###################
|
|
|
|
if (R_BINDINGS)
|
|
if (EXISTS ${openbabel_SOURCE_DIR}/scripts/R/openbabel-R.cpp OR RUN_SWIG)
|
|
|
|
if (RUN_SWIG)
|
|
set(DO_R_BINDINGS ON BOOL)
|
|
endif (RUN_SWIG)
|
|
|
|
|
|
else (EXISTS ${openbabel_SOURCE_DIR}/scripts/R/openbabel-R.cpp OR RUN_SWIG)
|
|
message(STATUS "Warning: R bindings NOT found. Generate using -DRUN_SWIG.")
|
|
|
|
endif (EXISTS ${openbabel_SOURCE_DIR}/scripts/R/openbabel-R.cpp OR RUN_SWIG)
|
|
endif (R_BINDINGS)
|
|
|
|
if (DO_R_BINDINGS)
|
|
|
|
|
|
include_directories(/usr/share/R/include )
|
|
if (RUN_SWIG)
|
|
add_custom_command(OUTPUT ${openbabel_SOURCE_DIR}/scripts/R/openbabel-R.cpp
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${openbabel_BINARY_DIR}/scripts/R
|
|
COMMAND ${SWIG_EXECUTABLE} -r -package openbabelR -c++ -small -O -templatereduce -naturalvar -I${openbabel_SOURCE_DIR}/include -I${openbabel_BINARY_DIR}/include -o ${openbabel_SOURCE_DIR}/scripts/R/openbabel-R.cpp ${eigen_define} -outdir ${openbabel_BINARY_DIR}/scripts/R ${openbabel_SOURCE_DIR}/scripts/openbabel-R.i
|
|
COMMAND sed -i -e "'s/reg\.finalizer(\(.*\)) /reg.finalizer(\1); /g'" ${openbabel_BINARY_DIR}/scripts/R/openbabelR.R
|
|
MAIN_DEPENDENCY openbabel-R.i
|
|
)
|
|
endif (RUN_SWIG)
|
|
|
|
add_library(bindings_R MODULE ${openbabel_SOURCE_DIR}/scripts/R/openbabel-R.cpp)
|
|
if(BINDINGS_ONLY)
|
|
target_link_libraries(bindings_R R ${BABEL_SYSTEM_LIBRARY})
|
|
else()
|
|
target_link_libraries(bindings_R R ${BABEL_LIBRARY})
|
|
endif()
|
|
|
|
set_target_properties(bindings_R PROPERTIES
|
|
OUTPUT_NAME openbabel_R)
|
|
if(NOT BINDINGS_ONLY)
|
|
add_dependencies(bindings_R openbabel)
|
|
endif()
|
|
add_dependencies(bindings_R R)
|
|
|
|
install(TARGETS bindings_R
|
|
LIBRARY DESTINATION ${LIB_INSTALL_DIR}
|
|
COMPONENT bindings_R)
|
|
install(FILES ${openbabel_SOURCE_DIR}/scripts/R/openbabel_java.R
|
|
DESTINATION ${LIB_INSTALL_DIR}
|
|
COMPONENT bindings_R)
|
|
|
|
endif (DO_R_BINDINGS)
|
|
|
|
###################
|
|
# Perl
|
|
###################
|
|
|
|
if (PERL_BINDINGS)
|
|
if (EXISTS ${openbabel_SOURCE_DIR}/scripts/perl/openbabel-perl.cpp OR RUN_SWIG)
|
|
|
|
find_package(PerlLibs)
|
|
if (NOT PERL_LIBRARY)
|
|
message(STATUS "Perl library files NOT found. Perl bindings will NOT be compiled.")
|
|
endif (NOT PERL_LIBRARY)
|
|
|
|
if(PERL_LIBRARY)
|
|
set(DO_PERL_BINDINGS ON BOOL)
|
|
message(STATUS "Perl bindings will be compiled")
|
|
### On some Linux OSes, linking against Perl fails due to no -lpthread.
|
|
### The following is an attempt to work around this by taking the
|
|
### link libraries from Perl.
|
|
execute_process(
|
|
COMMAND
|
|
${PERL_EXECUTABLE} -V:perllibs
|
|
OUTPUT_VARIABLE
|
|
PERLLIBS_OUTPUT_VARIABLE
|
|
RESULT_VARIABLE
|
|
PERLLIBS_RESULT_VARIABLE
|
|
)
|
|
if (NOT PERLLIBS_RESULT_VARIABLE)
|
|
string(REGEX REPLACE "perllibs='([^']+)'.*" "\\1" PERL_EXTRA_LINK_FLAGS ${PERLLIBS_OUTPUT_VARIABLE})
|
|
endif (NOT PERLLIBS_RESULT_VARIABLE)
|
|
endif(PERL_LIBRARY)
|
|
|
|
else (EXISTS ${openbabel_SOURCE_DIR}/scripts/perl/openbabel-perl.cpp OR RUN_SWIG)
|
|
message(STATUS "Warning: Perl bindings NOT found. Generate using -DRUN_SWIG.")
|
|
|
|
endif (EXISTS ${openbabel_SOURCE_DIR}/scripts/perl/openbabel-perl.cpp OR RUN_SWIG)
|
|
endif (PERL_BINDINGS)
|
|
|
|
if (DO_PERL_BINDINGS)
|
|
include_directories(
|
|
${PERL_INCLUDE_PATH}
|
|
)
|
|
|
|
if (RUN_SWIG)
|
|
add_custom_command(OUTPUT ${openbabel_SOURCE_DIR}/scripts/perl/openbabel-perl.cpp
|
|
COMMAND ${SWIG_EXECUTABLE} -perl5 -c++ -small -O -templatereduce -naturalvar -I${openbabel_SOURCE_DIR}/include -I${openbabel_BINARY_DIR}/include -o ${openbabel_SOURCE_DIR}/scripts/perl/openbabel-perl.cpp -outdir ${openbabel_SOURCE_DIR}/scripts/perl ${openbabel_SOURCE_DIR}/scripts/openbabel-perl.i
|
|
MAIN_DEPENDENCY openbabel-perl.i
|
|
)
|
|
if (NOT WIN32)
|
|
add_custom_command(OUTPUT ${openbabel_SOURCE_DIR}/scripts/perl/OpenBabel.pm
|
|
COMMAND sed -e \"s/^@EXPORT.*/& sub dl_load_flags { 0x01 }/\" <${openbabel_SOURCE_DIR}/scripts/perl/OpenBabel.pm >${openbabel_SOURCE_DIR}/scripts/perl/OpenBabel.new
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${openbabel_SOURCE_DIR}/scripts/perl/OpenBabel.new ${openbabel_SOURCE_DIR}/scripts/perl/OpenBabel.pm
|
|
COMMAND ${CMAKE_COMMAND} -E remove ${openbabel_SOURCE_DIR}/scripts/perl/OpenBabel.new
|
|
MAIN_DEPENDENCY openbabel-perl.i
|
|
)
|
|
endif (NOT WIN32)
|
|
endif (RUN_SWIG)
|
|
|
|
add_library(bindings_perl MODULE ${openbabel_SOURCE_DIR}/scripts/perl/openbabel-perl.cpp)
|
|
if(BINDINGS_ONLY)
|
|
target_link_libraries(bindings_perl ${PERL_LIBRARY} ${BABEL_SYSTEM_LIBRARY} ${PERL_EXTRA_LINK_FLAGS})
|
|
else()
|
|
target_link_libraries(bindings_perl ${PERL_LIBRARY} ${BABEL_LIBRARY} ${PERL_EXTRA_LINK_FLAGS})
|
|
endif()
|
|
|
|
set_target_properties(bindings_perl PROPERTIES
|
|
PREFIX ""
|
|
OUTPUT_NAME OpenBabel)
|
|
if(NOT BINDINGS_ONLY)
|
|
add_dependencies(bindings_perl openbabel)
|
|
endif()
|
|
|
|
install(TARGETS bindings_perl
|
|
LIBRARY DESTINATION ${LIB_INSTALL_DIR}/auto/Chemistry/OpenBabel/
|
|
COMPONENT bindings_perl)
|
|
install(FILES ${openbabel_SOURCE_DIR}/scripts/perl/OpenBabel.pm
|
|
DESTINATION ${LIB_INSTALL_DIR}/Chemistry/
|
|
COMPONENT bindings_perl)
|
|
|
|
endif (DO_PERL_BINDINGS)
|
|
|
|
###################
|
|
# Ruby
|
|
###################
|
|
|
|
if (RUBY_BINDINGS)
|
|
if (EXISTS ${openbabel_SOURCE_DIR}/scripts/ruby/openbabel-ruby.cpp OR RUN_SWIG)
|
|
find_package(Ruby)
|
|
if (NOT RUBY_LIBRARY)
|
|
message(STATUS "Ruby library files NOT found. Ruby bindings will NOT be compiled.")
|
|
endif (NOT RUBY_LIBRARY)
|
|
|
|
if (RUBY_LIBRARY)
|
|
set(DO_RUBY_BINDINGS ON BOOL)
|
|
message(STATUS "Ruby bindings will be compiled")
|
|
endif (RUBY_LIBRARY)
|
|
|
|
else (EXISTS ${openbabel_SOURCE_DIR}/scripts/ruby/openbabel-ruby.cpp OR RUN_SWIG)
|
|
message(STATUS "Warning: Ruby bindings NOT found. Generate using -DRUN_SWIG.")
|
|
|
|
endif (EXISTS ${openbabel_SOURCE_DIR}/scripts/ruby/openbabel-ruby.cpp OR RUN_SWIG)
|
|
endif (RUBY_BINDINGS)
|
|
|
|
if (DO_RUBY_BINDINGS)
|
|
|
|
if (RUN_SWIG)
|
|
set(WORKAROUND_CMAKE260_BUG "s/rb_define_module(\"Openbabel\")/rb_define_module(\"OpenBabel\")/")
|
|
add_custom_command(OUTPUT ${openbabel_SOURCE_DIR}/scripts/ruby/openbabel-ruby.cpp
|
|
COMMAND ${SWIG_EXECUTABLE} -ruby -c++ -small -O -templatereduce -naturalvar -autorename -I${openbabel_SOURCE_DIR}/include -I${openbabel_BINARY_DIR}/include -o ${openbabel_SOURCE_DIR}/scripts/ruby/openbabel-ruby.txt ${openbabel_SOURCE_DIR}/scripts/openbabel-ruby.i
|
|
COMMAND sed -e '${WORKAROUND_CMAKE_260_BUG}' -e's/void Init_OpenBabel/void Init_openbabel/' <${openbabel_SOURCE_DIR}/scripts/ruby/openbabel-ruby.txt >${openbabel_SOURCE_DIR}/scripts/ruby/openbabel-ruby.cpp
|
|
COMMAND ${CMAKE_COMMAND} -E remove ${openbabel_SOURCE_DIR}/scripts/ruby/openbabel-ruby.txt
|
|
MAIN_DEPENDENCY openbabel-ruby.i
|
|
)
|
|
endif (RUN_SWIG)
|
|
|
|
include_directories(
|
|
${RUBY_INCLUDE_PATH}
|
|
)
|
|
|
|
add_library(bindings_ruby MODULE ${openbabel_SOURCE_DIR}/scripts/ruby/openbabel-ruby.cpp)
|
|
if(BINDINGS_ONLY)
|
|
target_link_libraries(bindings_ruby ${RUBY_LIBRARY} ${BABEL_SYSTEM_LIBRARY})
|
|
else()
|
|
target_link_libraries(bindings_ruby ${RUBY_LIBRARY} ${BABEL_LIBRARY})
|
|
endif()
|
|
|
|
set_target_properties(bindings_ruby PROPERTIES
|
|
OUTPUT_NAME openbabel
|
|
PREFIX "" )
|
|
|
|
if(NOT BINDINGS_ONLY)
|
|
add_dependencies(bindings_ruby openbabel)
|
|
endif()
|
|
|
|
install(TARGETS bindings_ruby
|
|
LIBRARY DESTINATION ${LIB_INSTALL_DIR}
|
|
COMPONENT bindings_ruby)
|
|
|
|
endif (DO_RUBY_BINDINGS)
|
|
|
|
###################
|
|
# CSharp
|
|
###################
|
|
|
|
if (CSHARP_BINDINGS)
|
|
if (EXISTS ${openbabel_SOURCE_DIR}/scripts/csharp/openbabel-csharp.cpp OR RUN_SWIG)
|
|
if (NOT CSHARP_EXECUTABLE)
|
|
message(STATUS "CSHARP_EXECUTABLE NOT defined. .NET bindings will NOT be created.")
|
|
endif (NOT CSHARP_EXECUTABLE)
|
|
|
|
if (CSHARP_EXECUTABLE)
|
|
set(DO_CSHARP_BINDINGS ON BOOL)
|
|
message(STATUS "CSharp bindings will be compiled")
|
|
endif (CSHARP_EXECUTABLE)
|
|
|
|
else (EXISTS ${openbabel_SOURCE_DIR}/scripts/csharp/openbabel-csharp.cpp OR RUN_SWIG)
|
|
message(STATUS "Warning: Csharp bindings NOT found. Generate using -DRUN_SWIG.")
|
|
endif (EXISTS ${openbabel_SOURCE_DIR}/scripts/csharp/openbabel-csharp.cpp OR RUN_SWIG)
|
|
endif (CSHARP_BINDINGS)
|
|
|
|
if (DO_CSHARP_BINDINGS)
|
|
|
|
if (RUN_SWIG)
|
|
set(PLATFORM_TYPE "")
|
|
if (WIN32) # We need to enforce 32-bit .NET dlls or it won't load
|
|
set(PLATFORM_TYPE "/platform:x86")
|
|
endif (WIN32)
|
|
add_custom_command(OUTPUT ${openbabel_SOURCE_DIR}/scripts/csharp/openbabel-csharp.cpp ${openbabel_SOURCE_DIR}/scripts/csharp/OBDotNet.dll
|
|
COMMAND ${CMAKE_COMMAND} -E remove_directory ${openbabel_SOURCE_DIR}/scripts/csharp
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${openbabel_SOURCE_DIR}/scripts/csharp
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${openbabel_SOURCE_DIR}/windows-vc2008/Distribution/OBDotNetAssemblyInfo.cs ${openbabel_SOURCE_DIR}/scripts/csharp
|
|
COMMAND ${SWIG_EXECUTABLE} -csharp -c++ -small -O -templatereduce -namespace OpenBabel -outdir ${openbabel_SOURCE_DIR}/scripts/csharp -I${openbabel_SOURCE_DIR}/include -I${openbabel_BINARY_DIR}/include -o ${openbabel_SOURCE_DIR}/scripts/csharp/openbabel-csharp.cpp ${openbabel_SOURCE_DIR}/scripts/openbabel-csharp.i
|
|
COMMAND ${CMAKE_COMMAND} -E chdir ${openbabel_SOURCE_DIR}/scripts/csharp ${CSHARP_EXECUTABLE} /target:library ${PLATFORM_TYPE} /keyfile:${openbabel_SOURCE_DIR}/windows-vc2008/Distribution/obdotnet.snk /optimize /out:${openbabel_SOURCE_DIR}/scripts/csharp/OBDotNet.dll *.cs
|
|
MAIN_DEPENDENCY openbabel-csharp.i
|
|
WORKING_DIRECTORY ${openbabel_BINARY_DIR}/scripts
|
|
)
|
|
endif (RUN_SWIG)
|
|
|
|
add_library(bindings_csharp MODULE ${openbabel_SOURCE_DIR}/scripts/csharp/openbabel-csharp.cpp)
|
|
target_link_libraries(bindings_csharp ${BABEL_LIBRARY})
|
|
set_target_properties(bindings_csharp PROPERTIES
|
|
OUTPUT_NAME openbabel_csharp )
|
|
install(TARGETS bindings_csharp LIBRARY DESTINATION ${LIB_INSTALL_DIR})
|
|
install(FILES ${openbabel_SOURCE_DIR}/scripts/csharp/OBDotNet.dll DESTINATION ${LIB_INSTALL_DIR})
|
|
|
|
endif (DO_CSHARP_BINDINGS)
|
|
|
|
###################
|
|
# PHP
|
|
###################
|
|
|
|
if (PHP_BINDINGS)
|
|
if (EXISTS ${openbabel_SOURCE_DIR}/scripts/php/openbabel-php.cpp OR RUN_SWIG)
|
|
|
|
FIND_PROGRAM(PHP_CONFIG_EXECUTABLE
|
|
NAMES php5-config php-config
|
|
)
|
|
if (NOT PHP_CONFIG_EXECUTABLE)
|
|
message(STATUS "PHP-Config files NOT found. PHP bindings will NOT be compiled.")
|
|
endif (NOT PHP_CONFIG_EXECUTABLE)
|
|
|
|
if(PHP_CONFIG_EXECUTABLE)
|
|
set(DO_PHP_BINDINGS ON BOOL)
|
|
message(STATUS "PHP bindings will be compiled")
|
|
execute_process(
|
|
COMMAND
|
|
${PHP_CONFIG_EXECUTABLE} --includes
|
|
OUTPUT_VARIABLE
|
|
PHP_CONFIG_INCLUDES
|
|
RESULT_VARIABLE
|
|
PHP_CONFIG_RESULT
|
|
)
|
|
STRING(REPLACE "\n" "" PHP_CONFIG_INCLUDES "${PHP_CONFIG_INCLUDES}")
|
|
STRING(REPLACE "-I" "" PHP_CONFIG_INCLUDES "${PHP_CONFIG_INCLUDES}")
|
|
STRING(REPLACE " " ";" PHP_CONFIG_INCLUDES "${PHP_CONFIG_INCLUDES}")
|
|
|
|
execute_process(
|
|
COMMAND
|
|
${PHP_CONFIG_EXECUTABLE} --extension-dir
|
|
OUTPUT_VARIABLE
|
|
PHP_EXTENSION_DIR
|
|
)
|
|
STRING(REPLACE "\n" "" PHP_EXTENSION_DIR "${PHP_EXTENSION_DIR}")
|
|
endif(PHP_CONFIG_EXECUTABLE)
|
|
|
|
else (EXISTS ${openbabel_SOURCE_DIR}/scripts/php/openbabel-php.cpp OR RUN_SWIG)
|
|
message(STATUS "Warning: PHP bindings NOT found. Generate using -DRUN_SWIG.")
|
|
endif (EXISTS ${openbabel_SOURCE_DIR}/scripts/php/openbabel-php.cpp OR RUN_SWIG)
|
|
endif (PHP_BINDINGS)
|
|
|
|
if (DO_PHP_BINDINGS)
|
|
include_directories(
|
|
${PHP_CONFIG_INCLUDES}
|
|
)
|
|
if (RUN_SWIG)
|
|
add_custom_command(OUTPUT ${openbabel_SOURCE_DIR}/scripts/php/openbabel-php.cpp
|
|
COMMAND ${SWIG_EXECUTABLE} -php -c++ -small -O -templatereduce -naturalvar -I${openbabel_SOURCE_DIR}/include -I${openbabel_BINARY_DIR}/include -o ${openbabel_SOURCE_DIR}/scripts/php/openbabel-php.cpp -outdir ${openbabel_SOURCE_DIR}/scripts/php ${openbabel_SOURCE_DIR}/scripts/openbabel-php.i
|
|
COMMAND sed -i -e's/abstract class OBForceField/class OBForceField/g' -e's/abstract class OBFingerprint/class OBFingerprint/g' -e's/abstract class OBOp/class OBOp/g' -e 's/static function FindType/function FindType/g' ${openbabel_SOURCE_DIR}/scripts/php/openbabel.php
|
|
MAIN_DEPENDENCY openbabel-php.i
|
|
)
|
|
endif (RUN_SWIG)
|
|
|
|
# set openbabel.php include path
|
|
execute_process(COMMAND sed -i -e "s,include_once '\\(.*\\)openbabel.php,include_once '${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/openbabel.php,g" ${openbabel_SOURCE_DIR}/scripts/php/baphpel.php)
|
|
|
|
add_library(bindings_php MODULE ${openbabel_SOURCE_DIR}/scripts/php/openbabel-php.cpp)
|
|
# Overriding --no-undefined linker flag, since PHP library should not be linked into extension.
|
|
set(PHP_EXTRA_LINK_FLAGS "-Wl,--unresolved-symbols=ignore-all")
|
|
if(BINDINGS_ONLY)
|
|
target_link_libraries(bindings_php ${BABEL_SYSTEM_LIBRARY} ${PHP_EXTRA_LINK_FLAGS})
|
|
else()
|
|
target_link_libraries(bindings_php ${BABEL_LIBRARY} ${PHP_EXTRA_LINK_FLAGS})
|
|
endif()
|
|
|
|
set_target_properties(bindings_php PROPERTIES
|
|
PREFIX ""
|
|
OUTPUT_NAME openbabel-php)
|
|
if(NOT BINDINGS_ONLY)
|
|
add_dependencies(bindings_php openbabel)
|
|
endif()
|
|
|
|
install(TARGETS bindings_php
|
|
LIBRARY DESTINATION ${PHP_EXTENSION_DIR}
|
|
COMPONENT bindings_php)
|
|
install(FILES ${openbabel_SOURCE_DIR}/scripts/php/openbabel.php
|
|
DESTINATION ${LIB_INSTALL_DIR}
|
|
COMPONENT bindings_php)
|
|
install(FILES ${openbabel_SOURCE_DIR}/scripts/php/baphpel.php
|
|
DESTINATION ${LIB_INSTALL_DIR}
|
|
COMPONENT bindings_php)
|
|
|
|
endif (DO_PHP_BINDINGS)
|