1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300
|
###############################################################################
#
# Description : CMake build script for libSBML Java bindings
# Original author(s): Frank Bergmann <fbergman@caltech.edu>
# Organization : California Institute of Technology
#
# This file is part of libSBML. Please visit http://sbml.org for more
# information about SBML, and the latest version of libSBML.
#
# Copyright (C) 2013-2014 jointly by the following organizations:
# 1. California Institute of Technology, Pasadena, CA, USA
# 2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
# 3. University of Heidelberg, Heidelberg, Germany
#
# 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:
# 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
# in the file named "LICENSE.txt" included with this software distribution
# and also available online as http://sbml.org/software/libsbml/license.html
#
###############################################################################
find_package(SWIG REQUIRED)
find_package(JNI)
find_package(Java COMPONENTS Development REQUIRED)
include(FindPythonInterp)
include(${SWIG_USE_FILE})
####################################################################
#
# create manifest file
#
configure_file (
"${CMAKE_CURRENT_SOURCE_DIR}/Manifest.txt.in"
"${CMAKE_CURRENT_BINARY_DIR}/Manifest.txt"
)
####################################################################
#
# ensure that javac, jar and python are available
#
if (NOT EXISTS "${Java_JAVAC_EXECUTABLE}")
if (NOT EXISTS "${JAVA_COMPILE}")
message(FATAL_ERROR "The java language bindings require Java_JAVAC_EXECUTABLE to be set to the javac command.")
else()
SET(Java_JAVAC_EXECUTABLE "${JAVA_COMPILE}" CACHE STRING "Javac compiler" FORCE)
endif()
endif()
if (NOT EXISTS "${Java_JAR_EXECUTABLE}")
if (NOT EXISTS "${JAVA_ARCHIVE}")
message(FATAL_ERROR "The java language bindings require Java_JAR_EXECUTABLE to be set to the jar command.")
else()
set (Java_JAR_EXECUTABLE "${JAVA_ARCHIVE}" CACHE STRING "jar command" FORCE)
endif()
endif()
if (NOT EXISTS "${PYTHON_EXECUTABLE}")
message(FATAL_ERROR "The java language bindings require PYTHON_EXECUTABLE to be set to the python command.")
endif()
####################################################################
#
# determine local dependencies, so as to re-swig if one of them changed
#
file(GLOB SWIG_DEPENDENCIES
${CMAKE_CURRENT_SOURCE_DIR}/*.i
${CMAKE_CURRENT_SOURCE_DIR}/*.h
${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../swig/*.i
${CMAKE_CURRENT_SOURCE_DIR}/../swig/*.h
)
####################################################################
#
# generate files that include all packages:
#
# - local-downcast-extension.i
file(GLOB DOWNCAST_EXTENSION RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/local-downcast-extension-*.i")
update_ifile(
"local-downcast-extension.i"
${CMAKE_CURRENT_BINARY_DIR}
"${DOWNCAST_EXTENSION}"
)
# - local-downcast-namespaces.i
file(GLOB DOWNCAST_EXTENSION RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/local-downcast-namespaces-*.i")
update_ifile(
"local-downcast-namespaces.i"
${CMAKE_CURRENT_BINARY_DIR}
"${DOWNCAST_EXTENSION}"
)
# - local-packages.i
file(GLOB DOWNCAST_EXTENSION RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/local-packages-*.i")
update_ifile(
"local-packages.i"
${CMAKE_CURRENT_BINARY_DIR}
"${DOWNCAST_EXTENSION}"
)
#
# Determine the java installation directory
#
set(JAVA_PACKAGE_BIN_INSTALL_DIR)
set(JAVA_PACKAGE_JAR_INSTALL_DIR)
if (UNIX OR CYGWIN)
set(JAVA_PACKAGE_BIN_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})
set(JAVA_PACKAGE_JAR_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/java)
else()
set(JAVA_PACKAGE_BIN_INSTALL_DIR ${MISC_PREFIX}bindings/java)
set(JAVA_PACKAGE_JAR_INSTALL_DIR ${MISC_PREFIX}bindings/java)
endif()
#
# Remove SWIG wrappers if requested
#
if (LIBSBML_REMOVE_WRAPPERS)
foreach(file
${CMAKE_CURRENT_BINARY_DIR}/libsbml_wrap.cpp
${CMAKE_CURRENT_BINARY_DIR}/javadoc.i
)
if (EXISTS ${file})
FILE(REMOVE ${file})
endif()
endforeach()
endif(LIBSBML_REMOVE_WRAPPERS)
####################################################################
#
# Swig bindings
#
#
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libsbml_wrap.cpp
${CMAKE_CURRENT_BINARY_DIR}/javadoc.i
${CMAKE_CURRENT_BINARY_DIR}/java-files/org/sbml/libsbml/libsbmlJNI.java
COMMAND "${CMAKE_COMMAND}"
ARGS -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/java-files/org/sbml/libsbml
COMMAND "${PYTHON_EXECUTABLE}"
ARGS "${CMAKE_CURRENT_SOURCE_DIR}/../swig/swigdoc.py"
--language java
--top "${LIBSBML_ROOT_SOURCE_DIR}"
--master "${CMAKE_CURRENT_SOURCE_DIR}/../swig/libsbml.i"
--output "${CMAKE_CURRENT_BINARY_DIR}/javadoc.i"
${SWIG_SWIGDOCDEFINES}
COMMAND "${SWIG_EXECUTABLE}"
ARGS -I${CMAKE_CURRENT_SOURCE_DIR}/../swig/
-I${CMAKE_CURRENT_SOURCE_DIR}
-I${LIBSBML_ROOT_BINARY_DIR}/src
-I${LIBSBML_ROOT_SOURCE_DIR}/src
-I${LIBSBML_ROOT_SOURCE_DIR}/include
-c++
-java
-package org.sbml.libsbml
${SWIG_EXTRA_ARGS}
-outdir ${CMAKE_CURRENT_BINARY_DIR}/java-files/org/sbml/libsbml
-o ${CMAKE_CURRENT_BINARY_DIR}/libsbml_wrap.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../swig/libsbml.i
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/../swig/libsbml.i
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${SWIG_DEPENDENCIES}
COMMENT "Swig Java source")
add_custom_target(binding_java_swig ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/libsbml_wrap.cpp)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../swig)
include_directories(${LIBSBML_ROOT_SOURCE_DIR}/include)
include_directories(BEFORE ${LIBSBML_ROOT_BINARY_DIR}/src)
if (EXTRA_INCLUDE_DIRS)
include_directories(${EXTRA_INCLUDE_DIRS})
endif(EXTRA_INCLUDE_DIRS)
# if additional directories are set be sure to include them
if (JNI_INCLUDE_DIRS)
include_directories(${JNI_INCLUDE_DIRS})
endif(JNI_INCLUDE_DIRS)
if (JAVA_INCLUDE_PATH)
include_directories(${JAVA_INCLUDE_PATH})
endif(JAVA_INCLUDE_PATH)
if (JAVA_INCLUDE_PATH2)
include_directories(${JAVA_INCLUDE_PATH2})
endif(JAVA_INCLUDE_PATH2)
add_library(binding_java_lib SHARED ${CMAKE_CURRENT_BINARY_DIR}/libsbml_wrap.cpp )
add_dependencies( binding_java_lib binding_java_swig)
set_target_properties (binding_java_lib PROPERTIES OUTPUT_NAME "sbmlj")
if(APPLE)
set_target_properties (binding_java_lib PROPERTIES SUFFIX ".jnilib")
endif()
INSTALL(TARGETS binding_java_lib DESTINATION ${JAVA_PACKAGE_BIN_INSTALL_DIR} )
target_link_libraries(binding_java_lib ${LIBSBML_LIBRARY}-static )
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libsbmlj.jar
${CMAKE_CURRENT_BINARY_DIR}/test/AutoTestRunner.class
COMMAND "${CMAKE_COMMAND}"
ARGS -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/test
COMMAND "${CMAKE_COMMAND}"
ARGS -DJava_JAVAC_EXECUTABLE=\"${Java_JAVAC_EXECUTABLE}\"
-DJava_JAR_EXECUTABLE=\"${Java_JAR_EXECUTABLE}\"
-DBIN_DIRECTORY=\"${CMAKE_CURRENT_BINARY_DIR}\"
-DSRC_DIRECTORY=\"${CMAKE_CURRENT_SOURCE_DIR}\"
-DFILE_SEP=\"${FILE_SEP}\"
-DPATH_SEP=${PATH_SEP}
-P "${CMAKE_CURRENT_SOURCE_DIR}/compile-native-files.cmake"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
COMMENT "Building: libsbml.jar"
)
add_custom_target(binding_java_jar ALL DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/libsbmlj.jar
${CMAKE_CURRENT_BINARY_DIR}/java-files/org/sbml/libsbml/libsbmlJNI.java
)
add_dependencies(binding_java_jar binding_java_swig)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libsbmlj.jar DESTINATION ${JAVA_PACKAGE_JAR_INSTALL_DIR})
#
# Invoke tests if compiled with check
#
if(WITH_CHECK)
if (NOT UNIX)
# on windows ignore warnings about backslash in command line, as we do use it where
# necessary
cmake_policy(SET CMP0010 NEW)
endif()
file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/libsbmlj.jar jar_file)
file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR} current_dir)
file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/test test_dir)
# run tests
add_test(NAME test_java_binding
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND "${Java_JAVA_EXECUTABLE}"
-Xss8m
-Djava.library.path=$<TARGET_FILE_DIR:binding_java_lib>
-cp "${jar_file}${FILE_SEP}${current_dir}${FILE_SEP}${test_dir}"
AutoTestRunner
)
# specify that tests have passed if we find only dots
set_tests_properties(test_java_binding PROPERTIES PASS_REGULAR_EXPRESSION "[.]+" )
# specify that tests have failed in case there was one of the words below in the output
set_tests_properties(test_java_binding PROPERTIES FAIL_REGULAR_EXPRESSION "Error;ERROR;Failed;Exception")
# set up the DYLD / LD_LIBRARY /PATH to include the library
if(UNIX)
if(APPLE)
set_tests_properties(test_java_binding PROPERTIES ENVIRONMENT "DYLD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}:$ENV{DYLD_LIBRARY_PATH}")
else()
set_tests_properties(test_java_binding PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}:$ENV{LD_LIBRARY_PATH}")
endif()
else()
if(MSVC)
# on windows setting the path alone would only work if the dependent libraries are in the path
# since that is likely not the case for now we ask the users to set up the path prior to calling ctest
# otherwise this would do the trick:
#set(new_path "${current_dir};$ENV{PATH}")
#string(REPLACE ";" "\\;" new_path "${new_path}")
#set_tests_properties(test_java_binding PROPERTIES ENVIRONMENT PATH="${new_path}")
endif()
endif()
endif(WITH_CHECK)
|