diff options
author | asn <asn@c9f7a03b-bd48-0410-a16d-cbbf54688b0b> | 2010-10-19 17:43:32 +0000 |
---|---|---|
committer | asn <asn@c9f7a03b-bd48-0410-a16d-cbbf54688b0b> | 2010-10-19 17:43:32 +0000 |
commit | 8ef739ee2a6da5d8068cd771c2494d5b3b1847b1 (patch) | |
tree | 93adcbb1f9881a2e4969d9906bee8dbeb8465291 /pki/cmake | |
parent | 51118e968df6e317008122ba6ebf392a3a9386e2 (diff) | |
download | pki-8ef739ee2a6da5d8068cd771c2494d5b3b1847b1.tar.gz pki-8ef739ee2a6da5d8068cd771c2494d5b3b1847b1.tar.xz pki-8ef739ee2a6da5d8068cd771c2494d5b3b1847b1.zip |
cmake: Added a add_jar(target src1 src2 src3 ...) function.
git-svn-id: svn+ssh://svn.fedorahosted.org/svn/pki/trunk@1365 c9f7a03b-bd48-0410-a16d-cbbf54688b0b
Diffstat (limited to 'pki/cmake')
-rw-r--r-- | pki/cmake/Modules/UseJava.cmake | 126 |
1 files changed, 114 insertions, 12 deletions
diff --git a/pki/cmake/Modules/UseJava.cmake b/pki/cmake/Modules/UseJava.cmake index a5a212fd1..ff20193af 100644 --- a/pki/cmake/Modules/UseJava.cmake +++ b/pki/cmake/Modules/UseJava.cmake @@ -1,5 +1,10 @@ +# +# Additional flags: +# CMAKE_JAVA_COMPILE_FLAGS +# CMAKE_JAVA_INCLUDE_PATH +# #============================================================================= -# Copyright 2002-2009 Kitware, Inc. +# Copyright 2010 Andreas schneider <asn@redhat.com> # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. @@ -11,16 +16,113 @@ # (To distributed this file outside of CMake, substitute the full # License text for the above reference.) -function(ADD_JNI_HEADERS _CLASSPATH _CLASSNAMES _HEADERS _DEPENDS) +function(JAVA_COPY_FILE _SRC _DST) + # Removes all path containing .svn or CVS or CMakeLists.txt during the copy + if (NOT ${_SRC} MATCHES ".*\\.svn|CVS|CMakeLists\\.txt.*") + + if (CMAKE_VERBOSE_MAKEFILE) + message(STATUS "Copy file from ${_SRC} to ${_DST}") + endif (CMAKE_VERBOSE_MAKEFILE) + + # Creates directory if necessary + get_filename_component(_PATH ${_DST} PATH) + file(MAKE_DIRECTORY ${_PATH}) + + execute_process( + COMMAND + ${CMAKE_COMMAND} -E copy_if_different ${_SRC} ${_DST} + OUTPUT_QUIET + ) + endif (NOT ${_SRC} MATCHES ".*\\.svn|CVS|CMakeLists\\.txt.*") +endfunction(JAVA_COPY_FILE) + +function(ADD_JAR _TARGET_NAME) + set(_JAVA_SOURCE_FILES ${ARGN}) + + if (LIBRARY_OUTPUT_PATH) + set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH}) + else (LIBRARY_OUTPUT_PATH) + set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}) + endif (LIBRARY_OUTPUT_PATH) + + set(CMAKE_JAVA_INCLUDE_PATH + ${CMAKE_JAVA_INCLUDE_PATH} + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_JAVA_OBJECT_OUTPUT_PATH} + ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH} + ) + + if (WIN32 AND NOT CYGWIN) + set(CMAKE_JAVA_INCLUDE_FLAG_SEP ";") + else (WIN32 AND NOT CYGWIN) + set(CMAKE_JAVA_INCLUDE_FLAG_SEP ":") + endif(WIN32 AND NOT CYGWIN) + + foreach (JAVA_INCLUDE_DIR ${CMAKE_JAVA_INCLUDE_PATH}) + set(CMAKE_JAVA_INCLUDE_PATH_FINAL "${CMAKE_JAVA_INCLUDE_PATH_FINAL}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${JAVA_INCLUDE_DIR}") + endforeach(JAVA_INCLUDE_DIR) + + set(CMAKE_JAVA_CLASS_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir") + + add_custom_target(${_TARGET_NAME} ALL) + + get_target_property(_JAVA_OUTPUT_NAME ${_TARGET_NAME} OUTPUT_NAME) + if (NOT _JAVA_OUTPUT_NAME) + set(_JAVA_OUTPUT_NAME "${_TARGET_NAME}.jar") + endif (NOT _JAVA_OUTPUT_NAME) + + set(_JAVA_CLASS_FILES) + set(_JAVA_COMPILE_FILES) + set(_JAVA_RESOURCE_FILES) + foreach(_JAVA_SOURCE_FILE ${_JAVA_SOURCE_FILES}) + get_filename_component(_JAVA_EXT ${_JAVA_SOURCE_FILE} EXT) + get_filename_component(_JAVA_FILE ${_JAVA_SOURCE_FILE} NAME_WE) + get_filename_component(_JAVA_PATH ${_JAVA_SOURCE_FILE} PATH) + + if (_JAVA_EXT MATCHES ".java") + list(APPEND _JAVA_COMPILE_FILES ${_JAVA_SOURCE_FILE}) + set(_JAVA_CLASS_FILE "${_JAVA_PATH}/${_JAVA_FILE}.class") + set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES} ${_JAVA_CLASS_FILE}) + + # TODO FIXME + if (FALSE) + add_custom_command( + TARGET ${_TARGET_NAME} + COMMAND ${CMAKE_Java_COMPILER} + ${CMAKE_JAVA_COMPILE_FLAGS} + -classpath ${CMAKE_JAVA_INCLUDE_PATH_FINAL} + -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH} + ${_JAVA_SOURCE_FILE} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Building Java object ${_JAVA_CLASS_FILE}" + ) + endif() + else (_JAVA_EXT MATCHES ".java") + java_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/${_JAVA_SOURCE_FILE} + ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_SOURCE_FILE}) + list(APPEND _JAVA_RESOURCE_FILES ${_JAVA_SOURCE_FILE}) + endif (_JAVA_EXT MATCHES ".java") + endforeach(_JAVA_SOURCE_FILE) + + if (_JAVA_COMPILE_FILES) + add_custom_command( + TARGET ${_TARGET_NAME} + COMMAND ${CMAKE_Java_COMPILER} + ${CMAKE_JAVA_COMPILE_FLAGS} + -classpath ${CMAKE_JAVA_INCLUDE_PATH_FINAL} + -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH} + ${_JAVA_COMPILE_FILES} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Building Java objects for ${_TARGET_NAME}.jar" + ) + endif (_JAVA_COMPILE_FILES) + add_custom_command( - OUTPUT - ${_HEADERS} - COMMAND ${JAVA_HEADER} - -classpath ${_CLASSPATH} - -jni - -d ${CMAKE_CURRENT_BINARY_DIR} - ${_CLASSNAMES} - DEPENDS - ${_DEPENDS} + TARGET ${_TARGET_NAME} + COMMAND ${CMAKE_Java_ARCHIVE} + -cf ${_JAVA_OUTPUT_NAME} + -C ${CMAKE_JAVA_CLASS_OUTPUT_PATH} . + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Creating Java archive ${_JAVA_OUTPUT_NAME}" ) -endfunction(ADD_JNI_HEADERS) +endfunction(ADD_JAR) |