summaryrefslogtreecommitdiffstats
path: root/pki/cmake
diff options
context:
space:
mode:
authorasn <asn@c9f7a03b-bd48-0410-a16d-cbbf54688b0b>2010-10-19 17:43:32 +0000
committerasn <asn@c9f7a03b-bd48-0410-a16d-cbbf54688b0b>2010-10-19 17:43:32 +0000
commit8ef739ee2a6da5d8068cd771c2494d5b3b1847b1 (patch)
tree93adcbb1f9881a2e4969d9906bee8dbeb8465291 /pki/cmake
parent51118e968df6e317008122ba6ebf392a3a9386e2 (diff)
downloadpki-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.cmake126
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)