This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  7e977287543d03b5f280b9f0b00498cfab4f0cab (commit)
       via  b01a50567a7ca190e9f39aa2db5f4b0042e9ca4c (commit)
       via  f99c3120c91b9b659d4fce20d5578b6c6674dc3f (commit)
       via  f3233ba5211596df205e6d915b06bd412087c202 (commit)
       via  a22ed3d62da7fad10eb1268ba4a359c62ad50488 (commit)
       via  c177c8e6b829f1dca4bbb81debd362d143868cf2 (commit)
       via  5c2106c71eb2a8b4e547b889fdc8aea3aeaad675 (commit)
       via  a4b6275eb7c31562633f0c1c805e2912c9a460f1 (commit)
      from  0a278211183ddbb9bb9417de265612e825e242df (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7e977287543d03b5f280b9f0b00498cfab4f0cab
commit 7e977287543d03b5f280b9f0b00498cfab4f0cab
Merge: 0a27821 b01a505
Author:     Andreas Schneider <a...@cryptomilk.org>
AuthorDate: Wed Apr 6 04:17:40 2011 -0400
Commit:     CMake Topic Stage <kwro...@kitware.com>
CommitDate: Wed Apr 6 04:17:40 2011 -0400

    Merge topic 'asn_java_support' into next
    
    b01a505 Java: Create correct jar archive dependencies.
    f99c312 Java: Added some dependency magic to avoid recompilations.
    f3233ba Java: Create java_class_filelist only if it does't exist.
    a22ed3d Tests: Check for the new Java exeutable variables.
    c177c8e Tests: Java tests should test UseJava.cmake
    5c2106c Modules: Added CMake Java support.
    a4b6275 FindJava: Find missing java development executables.


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b01a50567a7ca190e9f39aa2db5f4b0042e9ca4c
commit b01a50567a7ca190e9f39aa2db5f4b0042e9ca4c
Author:     Oliver Buchtala <oliver.bucht...@googlemail.com>
AuthorDate: Sun Apr 3 00:43:07 2011 +0200
Commit:     Andreas Schneider <a...@cryptomilk.org>
CommitDate: Mon Apr 4 11:50:04 2011 +0200

    Java: Create correct jar archive dependencies.
    
    The command generating the jar file depends on java_class_filelist which
    is generated by another command.
    
    Signed-off-by: Andreas Schneider <a...@cryptomilk.org>

diff --git a/Modules/UseJava.cmake b/Modules/UseJava.cmake
index d86fa23..3723f2e 100644
--- a/Modules/UseJava.cmake
+++ b/Modules/UseJava.cmake
@@ -289,9 +289,6 @@ function(add_jar _TARGET_NAME)
         file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist "")
     endif()
 
-    # Add the target and make sure we have the latest resource files.
-    add_custom_target(${_TARGET_NAME} ALL DEPENDS ${_JAVA_RESOURCE_FILES} 
${_JAVA_DEPENDS})
-
     if (_JAVA_COMPILE_FILES)
         # Compile the java files and create a list of class files
         add_custom_command(
@@ -321,7 +318,7 @@ function(add_jar _TARGET_NAME)
     # create the jar file
     if (CMAKE_JNI_TARGET)
         add_custom_command(
-            TARGET ${_TARGET_NAME}
+            OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
             COMMAND ${Java_JAR_EXECUTABLE}
                 -cf ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
                 ${_JAVA_RESOURCE_FILES} @java_class_filelist
@@ -335,12 +332,13 @@ function(add_jar _TARGET_NAME)
                 
-D_JAVA_TARGET_OUTPUT_NAME=${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
                 -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
                 -P ${_JAVA_SYMLINK_SCRIPT}
+            DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} 
${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
             WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
             COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}"
         )
     else ()
         add_custom_command(
-            TARGET ${_TARGET_NAME}
+            OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
             COMMAND ${Java_JAR_EXECUTABLE}
                 -cf ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
                 ${_JAVA_RESOURCE_FILES} @java_class_filelist
@@ -350,10 +348,14 @@ function(add_jar _TARGET_NAME)
                 -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
                 -P ${_JAVA_SYMLINK_SCRIPT}
             WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+            DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} 
${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
             COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}"
         )
     endif (CMAKE_JNI_TARGET)
 
+    # Add the target and make sure we have the latest resource files.
+    add_custom_target(${_TARGET_NAME} ALL DEPENDS 
${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME})
+
     set(${_TARGET_NAME}_INSTALL_FILES
         ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
         PARENT_SCOPE)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f99c3120c91b9b659d4fce20d5578b6c6674dc3f
commit f99c3120c91b9b659d4fce20d5578b6c6674dc3f
Author:     Oliver Buchtala <oliver.bucht...@googlemail.com>
AuthorDate: Sun Apr 3 00:26:17 2011 +0200
Commit:     Andreas Schneider <a...@cryptomilk.org>
CommitDate: Mon Apr 4 11:50:04 2011 +0200

    Java: Added some dependency magic to avoid recompilations.
    
    Compile java sources within a custom_command using automatically checked
    file dependencies and create java_class_filelist after java compile.
    
    Signed-off-by: Andreas Schneider <a...@cryptomilk.org>

diff --git a/Modules/UseJava.cmake b/Modules/UseJava.cmake
index 43ba668..d86fa23 100644
--- a/Modules/UseJava.cmake
+++ b/Modules/UseJava.cmake
@@ -295,18 +295,26 @@ function(add_jar _TARGET_NAME)
     if (_JAVA_COMPILE_FILES)
         # Compile the java files and create a list of class files
         add_custom_command(
-            TARGET ${_TARGET_NAME}
+            # NOTE: this command generates an artificial dependency file
+            OUTPUT 
${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
             COMMAND ${Java_JAVAC_EXECUTABLE}
                 ${CMAKE_JAVA_COMPILE_FLAGS}
                 -classpath "${CMAKE_JAVA_INCLUDE_PATH_FINAL}"
                 -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
                 ${_JAVA_COMPILE_FILES}
+            COMMAND ${CMAKE_COMMAND} -E touch 
${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
+            DEPENDS ${_JAVA_COMPILE_FILES}
+            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+            COMMENT "Building Java objects for ${_TARGET_NAME}.jar"
+        )
+        add_custom_command(
+            OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
             COMMAND ${CMAKE_COMMAND}
                 -DCMAKE_JAVA_CLASS_OUTPUT_PATH=${CMAKE_JAVA_CLASS_OUTPUT_PATH}
                 -DCMAKE_JAR_CLASSES_PREFIX="${CMAKE_JAR_CLASSES_PREFIX}"
                 -P ${_JAVA_CLASS_FILELIST_SCRIPT}
+            DEPENDS 
${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
             WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-            COMMENT "Building Java objects for ${_TARGET_NAME}.jar"
         )
     endif (_JAVA_COMPILE_FILES)
 

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f3233ba5211596df205e6d915b06bd412087c202
commit f3233ba5211596df205e6d915b06bd412087c202
Author:     Oliver Buchtala <oliver.bucht...@googlemail.com>
AuthorDate: Sun Apr 3 00:21:44 2011 +0200
Commit:     Andreas Schneider <a...@cryptomilk.org>
CommitDate: Mon Apr 4 11:49:58 2011 +0200

    Java: Create java_class_filelist only if it does't exist.
    
    Signed-off-by: Andreas Schneider <a...@cryptomilk.org>

diff --git a/Modules/UseJava.cmake b/Modules/UseJava.cmake
index 5d2e7b5..43ba668 100644
--- a/Modules/UseJava.cmake
+++ b/Modules/UseJava.cmake
@@ -285,7 +285,9 @@ function(add_jar _TARGET_NAME)
     endforeach(_JAVA_SOURCE_FILE)
 
     # create an empty java_class_filelist
-    file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist "")
+    if (NOT EXISTS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist)
+        file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist "")
+    endif()
 
     # Add the target and make sure we have the latest resource files.
     add_custom_target(${_TARGET_NAME} ALL DEPENDS ${_JAVA_RESOURCE_FILES} 
${_JAVA_DEPENDS})

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a22ed3d62da7fad10eb1268ba4a359c62ad50488
commit a22ed3d62da7fad10eb1268ba4a359c62ad50488
Author:     Andreas Schneider <a...@cryptomilk.org>
AuthorDate: Mon Mar 21 12:44:27 2011 +0100
Commit:     Andreas Schneider <a...@cryptomilk.org>
CommitDate: Tue Mar 29 11:54:42 2011 +0200

    Tests: Check for the new Java exeutable variables.

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 77c5752..db880c1 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -1868,8 +1868,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P 
${CMake_SOURCE_DIR}/Utilities/
     ENDIF()
   ENDIF()
 
-  find_package(Java QUIET)
-  IF(JAVA_COMPILE AND JAVA_RUNTIME AND JAVA_ARCHIVE AND NOT MINGW
+  find_package(Java COMPONENTS Development QUIET)
+  IF(Java_JAVA_EXECUTABLE AND Java_JAVAC_EXECUTABLE AND Java_JAR_EXECUTABLE 
AND NOT MINGW
       AND NOT "${CMAKE_TEST_GENERATOR}" MATCHES "Xcode")
     GET_FILENAME_COMPONENT(JNIPATH ${JAVA_COMPILE} PATH)
     FIND_FILE(JNI_H jni.h

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c177c8e6b829f1dca4bbb81debd362d143868cf2
commit c177c8e6b829f1dca4bbb81debd362d143868cf2
Author:     Andreas Schneider <a...@cryptomilk.org>
AuthorDate: Fri Mar 18 12:16:18 2011 +0100
Commit:     Andreas Schneider <a...@cryptomilk.org>
CommitDate: Tue Mar 29 11:54:42 2011 +0200

    Tests: Java tests should test UseJava.cmake

diff --git a/Tests/Java/CMakeLists.txt b/Tests/Java/CMakeLists.txt
index b0dfaa5..6a69a24 100644
--- a/Tests/Java/CMakeLists.txt
+++ b/Tests/Java/CMakeLists.txt
@@ -1,42 +1,9 @@
-cmake_minimum_required (VERSION 2.6)
-PROJECT(hello Java)
-SET(CMAKE_VERBOSE_MAKEFILE 1)
-  
-IF("${hello_SOURCE_DIR}" STREQUAL "${hello_BINARY_DIR}")
-  MESSAGE("In Source, building Java using ADD_CUSTOM_COMMAND()")
-  SET(OLD_CUSTOM_COMMAND_WAY 1)
-ELSE("${hello_SOURCE_DIR}" STREQUAL "${hello_BINARY_DIR}")
-  MESSAGE("Out of source, using built-in Java support")
-  SET(OLD_CUSTOM_COMMAND_WAY )
-ENDIF("${hello_SOURCE_DIR}" STREQUAL "${hello_BINARY_DIR}")
-
-IF(NOT OLD_CUSTOM_COMMAND_WAY)
-
-  INCLUDE_DIRECTORIES(${hello_SOURCE_DIR}
-    ${hello_BINARY_DIR} )
-  ADD_LIBRARY(hello A.java HelloWorld.java)
+project(hello Java)
 
-ELSE(NOT OLD_CUSTOM_COMMAND_WAY)
-
-  ADD_CUSTOM_COMMAND(
-    OUTPUT ${hello_BINARY_DIR}/A.class
-    MAIN_DEPENDENCY ${hello_SOURCE_DIR}/A.java
-    COMMAND ${CMAKE_Java_COMPILER} ARGS -classpath . -d ${hello_BINARY_DIR} 
${hello_SOURCE_DIR}/A.java)
-  ADD_CUSTOM_COMMAND(
-    OUTPUT ${hello_BINARY_DIR}/HelloWorld.class
-    MAIN_DEPENDENCY ${hello_SOURCE_DIR}/HelloWorld.java
-    DEPENDS ${hello_BINARY_DIR}/A.class
-    COMMAND ${CMAKE_Java_COMPILER} ARGS -classpath . -d ${hello_BINARY_DIR} 
${hello_SOURCE_DIR}/HelloWorld.java)
-  ADD_CUSTOM_COMMAND(
-    OUTPUT ${hello_BINARY_DIR}/hello.jar
-    DEPENDS ${hello_BINARY_DIR}/A.class ${hello_BINARY_DIR}/HelloWorld.class
-    COMMAND ${CMAKE_COMMAND}
-    ARGS -E chdir ${CMAKE_CURRENT_BINARY_DIR}
-    ${CMAKE_Java_ARCHIVE}
-    -cvf hello.jar *.class)
-  
-  ADD_CUSTOM_TARGET(hello_jar ALL 
-    DEPENDS ${hello_BINARY_DIR}/hello.jar)
+cmake_minimum_required (VERSION 2.6)
+set(CMAKE_VERBOSE_MAKEFILE 1)
 
-ENDIF(NOT OLD_CUSTOM_COMMAND_WAY)
+find_package(Java COMPONENTS Development)
+include (UseJava)
 
+add_jar(hello A.java HelloWorld.java)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5c2106c71eb2a8b4e547b889fdc8aea3aeaad675
commit 5c2106c71eb2a8b4e547b889fdc8aea3aeaad675
Author:     Andreas Schneider <a...@cryptomilk.org>
AuthorDate: Thu Feb 10 21:10:22 2011 +0100
Commit:     Andreas Schneider <a...@cryptomilk.org>
CommitDate: Tue Mar 29 11:54:42 2011 +0200

    Modules: Added CMake Java support.
    
    This provides:
        find_jar
        add_jar
        install_jar
        install_jni_symlink
        create_javadoc

diff --git a/Modules/UseJava.cmake b/Modules/UseJava.cmake
new file mode 100644
index 0000000..5d2e7b5
--- /dev/null
+++ b/Modules/UseJava.cmake
@@ -0,0 +1,813 @@
+# - Use Module for Java
+# This file provides functions for Java. It is assumed that FindJava.cmake
+# has already been loaded.  See FindJava.cmake for information on how to
+# load Java into your CMake project.
+#
+# Available Functions:
+#
+#  add_jar(TARGET_NAME SRC1 SRC2 .. SRCN RCS1 RCS2 .. RCSN)
+#
+#  This command creates a <TARGET_NAME>.jar. It compiles the given source
+#  files (SRC) and adds the given resource files (RCS) to the jar file.
+#  If only resource files are given then just a jar file is created.
+#
+#  Additional instructions:
+#    To add compile flags to the target you can set these flags with
+#    the following variable:
+#
+#        set(CMAKE_JAVA_COMPILE_FLAGS -nowarn)
+#
+#    To add a path or a jar file to the class path you can do this
+#    with the CMAKE_JAVA_INCLUDE_PATH variable.
+#
+#        set(CMAKE_JAVA_INCLUDE_PATH /usr/share/java/shibboleet.jar)
+#
+#    To use a different output name for the target you can set it with:
+#
+#        set(CMAKE_JAVA_TARGET_OUTPUT_NAME shibboleet.jar)
+#        add_jar(foobar foobar.java)
+#
+#    To add a VERSION to the target output name you can set it using
+#    CMAKE_JAVA_TARGET_VERSION. This will create a jar file with the name
+#    shibboleet-1.0.0.jar and will create a symlink shibboleet.jar
+#    pointing to the jar with the version information.
+#
+#        set(CMAKE_JAVA_TARGET_VERSION 1.2.0)
+#        add_jar(shibboleet shibbotleet.java)
+#
+#     If the target is a JNI library, utilize the following commands to
+#     create a JNI symbolic link:
+#
+#        set(CMAKE_JNI_TARGET TRUE)
+#        set(CMAKE_JAVA_TARGET_VERSION 1.2.0)
+#        add_jar(shibboleet shibbotleet.java)
+#        install_jar(shibboleet ${LIB_INSTALL_DIR}/shibboleet)
+#        install_jni_symlink(shibboleet ${JAVA_LIB_INSTALL_DIR})
+#
+#     If a single target needs to produce more than one jar from its
+#     java source code, to prevent the accumulation of duplicate class
+#     files in subsequent jars, set/reset CMAKE_JAR_CLASSES_PREFIX prior
+#     to calling the add_jar() function:
+#
+#        set(CMAKE_JAR_CLASSES_PREFIX com/redhat/foo)
+#        add_jar(foo foo.java)
+#
+#        set(CMAKE_JAR_CLASSES_PREFIX com/redhat/bar)
+#        add_jar(bar bar.java)
+#
+#  Variables set:
+#    The add_jar() functions sets some variables which can be used in the
+#    same scope where add_jar() is called.
+#
+#    <target>_INSTALL_FILES      The files which should be installed. This
+#                                is used by install_jar().
+#    <target>_JNI_SYMLINK        The JNI symlink which should be
+#                                installed.
+#                                This is used by install_jni_symlink().
+#    <target>_JAR_FILE           The location of the jar file so that you
+#                                can include it.
+#    <target>_CLASS_DIR          The directory where the class files can
+#                                be found. For example to use them with
+#                                javah.
+#
+#   find_jar(
+#            <VAR>
+#            name | NAMES name1 [name2 ...]
+#            [PATHS path1 [path2 ... ENV var]]
+#            [VERSIONS version1 [version2]]
+#            [DOC "cache documentation string"]
+#           )
+#
+#   This command is used to find a full path to the named jar. A cache
+#   entry named by <VAR> is created to stor the result of this command. If
+#   the full path to a jar is found the result is stored in the variable
+#   and the search will not repeated unless the variable is cleared. If
+#   nothing is found, the result will be <VAR>-NOTFOUND, and the search
+#   will be attempted again next time find_jar is invoked with the same
+#   variable.
+#   The name of the full path to a file that is searched for is specified
+#   by the names listed after NAMES argument. Additional search locations
+#   can be specified after the PATHS argument. If you require special a
+#   version of a jar file you can specify it with the VERSIONS argument.
+#   The argument after DOC will be used for the documentation string in
+#   the cache.
+#
+#   install_jar(TARGET_NAME DESTINATION)
+#
+#   This command installs the TARGET_NAME files to the given DESTINATION.
+#   It should be called in the same scope as add_jar() or it will fail.
+#
+#   install_jni_symlink(TARGET_NAME DESTINATION)
+#
+#   This command installs the TARGET_NAME JNI symlinks to the given
+#   DESTINATION. It should be called in the same scope as add_jar()
+#   or it will fail.
+#
+#   create_javadoc
+#
+#     Create jave documentation based on files or packages. For more
+#     details please read the javadoc manpage.
+#
+#     There are two main signatures for create_javadoc. The first
+#     signature works with package names on a path with source files:
+#
+#     create_javadoc(
+#                    <VAR>
+#                    PACKAGES pkg1 [pkg2 ...]
+#                    [SOURCEPATH <sourcepath>]
+#                    [CLASSPATH <classpath>]
+#                    [INSTALLPATH <install path>]
+#                    [DOCTITLE "the documentation title"]
+#                    [WINDOWTITLE "the title of the document"]
+#                    [AUTHOR TRUE|FALSE]
+#                    [USE TRUE|FALSE]
+#                    [VERSION TRUE|FALSE]
+#                   )
+#
+#     Example:
+#     create_javadoc(my_example_doc
+#       PACKAGES com.exmaple.foo com.example.bar
+#       SOURCEPATH ${CMAKE_CURRENT_SOURCE_PATH}
+#       CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH}
+#       WINDOWTITLE "My example"
+#       DOCTITLE "<h1>My example</h1>"
+#       AUTHOR TRUE
+#       USE TRUE
+#       VERSION TRUE
+#     )
+#
+#     The second signature for create_javadoc works on a given list of
+#     files.
+#
+#     create_javadoc(
+#                    <VAR>
+#                    FILES file1 [file2 ...]
+#                    [CLASSPATH <classpath>]
+#                    [INSTALLPATH <install path>]
+#                    [DOCTITLE "the documentation title"]
+#                    [WINDOWTITLE "the title of the document"]
+#                    [AUTHOR TRUE|FALSE]
+#                    [USE TRUE|FALSE]
+#                    [VERSION TRUE|FALSE]
+#                   )
+#
+#     Example:
+#     create_javadoc(my_example_doc
+#       FILES ${example_SRCS}
+#       CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH}
+#       WINDOWTITLE "My example"
+#       DOCTITLE "<h1>My example</h1>"
+#       AUTHOR TRUE
+#       USE TRUE
+#       VERSION TRUE
+#     )
+#
+#     Both signatures share most of the options. These options are the
+#     same as what you can find in the javadoc manpage. Please look at
+#     the manpage for CLASSPATH, DOCTITLE, WINDOWTITLE, AUTHOR, USE and
+#     VERSION.
+#
+#     The documentation will be by default installed to
+#
+#       ${CMAKE_INSTALL_PREFIX}/share/javadoc/<VAR>
+#
+#     if you don't set the INSTALLPATH.
+#
+
+#=============================================================================
+# Copyright 2010-2011 Andreas schneider <a...@redhat.com>
+# Copyright 2010 Ben Boeckel <ben.boec...@kitware.com>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+function (__java_copy_file src dest comment)
+    add_custom_command(
+        OUTPUT  ${dest}
+        COMMAND cmake -E copy_if_different
+        ARGS    ${src}
+                ${dest}
+        DEPENDS ${src}
+        COMMENT ${comment})
+endfunction (__java_copy_file src dest comment)
+
+# define helper scripts
+set(_JAVA_CLASS_FILELIST_SCRIPT 
${CMAKE_CURRENT_LIST_DIR}/UseJavaClassFilelist.cmake)
+set(_JAVA_SYMLINK_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/UseJavaSymlinks.cmake)
+
+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")
+
+    set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}.jar")
+    if (CMAKE_JAVA_TARGET_OUTPUT_NAME AND CMAKE_JAVA_TARGET_VERSION)
+        set(_JAVA_TARGET_OUTPUT_NAME 
"${CMAKE_JAVA_TARGET_OUTPUT_NAME}-${CMAKE_JAVA_TARGET_VERSION}.jar")
+        set(_JAVA_TARGET_OUTPUT_LINK "${CMAKE_JAVA_TARGET_OUTPUT_NAME}.jar")
+    elseif (CMAKE_JAVA_TARGET_VERSION)
+        set(_JAVA_TARGET_OUTPUT_NAME 
"${_TARGET_NAME}-${CMAKE_JAVA_TARGET_VERSION}.jar")
+        set(_JAVA_TARGET_OUTPUT_LINK "${_TARGET_NAME}.jar")
+    elseif (CMAKE_JAVA_TARGET_OUTPUT_NAME)
+        set(_JAVA_TARGET_OUTPUT_NAME "${CMAKE_JAVA_TARGET_OUTPUT_NAME}.jar")
+    endif (CMAKE_JAVA_TARGET_OUTPUT_NAME AND CMAKE_JAVA_TARGET_VERSION)
+    # reset
+    set(CMAKE_JAVA_TARGET_OUTPUT_NAME)
+
+    set(_JAVA_CLASS_FILES)
+    set(_JAVA_COMPILE_FILES)
+    set(_JAVA_DEPENDS)
+    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)
+        get_filename_component(_JAVA_FULL ${_JAVA_SOURCE_FILE} ABSOLUTE)
+
+        file(RELATIVE_PATH _JAVA_REL_BINARY_PATH ${CMAKE_CURRENT_BINARY_DIR} 
${_JAVA_FULL})
+        file(RELATIVE_PATH _JAVA_REL_SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR} 
${_JAVA_FULL})
+        string(LENGTH ${_JAVA_REL_BINARY_PATH} _BIN_LEN)
+        string(LENGTH ${_JAVA_REL_SOURCE_PATH} _SRC_LEN)
+        if (${_BIN_LEN} LESS ${_SRC_LEN})
+            set(_JAVA_REL_PATH ${_JAVA_REL_BINARY_PATH})
+        else (${_BIN_LEN} LESS ${_SRC_LEN})
+            set(_JAVA_REL_PATH ${_JAVA_REL_SOURCE_PATH})
+        endif (${_BIN_LEN} LESS ${_SRC_LEN})
+        get_filename_component(_JAVA_REL_PATH ${_JAVA_REL_PATH} PATH)
+
+        if (_JAVA_EXT MATCHES ".java")
+            list(APPEND _JAVA_COMPILE_FILES ${_JAVA_SOURCE_FILE})
+            set(_JAVA_CLASS_FILE 
"${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_REL_PATH}/${_JAVA_FILE}.class")
+            set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES} ${_JAVA_CLASS_FILE})
+
+        elseif (_JAVA_EXT MATCHES ".jar")
+            list(APPEND CMAKE_JAVA_INCLUDE_PATH ${_JAVA_SOURCE_FILE})
+
+        elseif (_JAVA_EXT STREQUAL "")
+            list(APPEND CMAKE_JAVA_INCLUDE_PATH 
${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}} 
${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}_CLASSPATH})
+            list(APPEND _JAVA_DEPENDS ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}})
+
+        else (_JAVA_EXT MATCHES ".java")
+            __java_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/${_JAVA_SOURCE_FILE}
+                             
${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_SOURCE_FILE}
+                             "Copying ${_JAVA_SOURCE_FILE} to the build 
directory")
+            list(APPEND _JAVA_RESOURCE_FILES ${_JAVA_SOURCE_FILE})
+        endif (_JAVA_EXT MATCHES ".java")
+    endforeach(_JAVA_SOURCE_FILE)
+
+    # create an empty java_class_filelist
+    file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist "")
+
+    # Add the target and make sure we have the latest resource files.
+    add_custom_target(${_TARGET_NAME} ALL DEPENDS ${_JAVA_RESOURCE_FILES} 
${_JAVA_DEPENDS})
+
+    if (_JAVA_COMPILE_FILES)
+        # Compile the java files and create a list of class files
+        add_custom_command(
+            TARGET ${_TARGET_NAME}
+            COMMAND ${Java_JAVAC_EXECUTABLE}
+                ${CMAKE_JAVA_COMPILE_FLAGS}
+                -classpath "${CMAKE_JAVA_INCLUDE_PATH_FINAL}"
+                -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+                ${_JAVA_COMPILE_FILES}
+            COMMAND ${CMAKE_COMMAND}
+                -DCMAKE_JAVA_CLASS_OUTPUT_PATH=${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+                -DCMAKE_JAR_CLASSES_PREFIX="${CMAKE_JAR_CLASSES_PREFIX}"
+                -P ${_JAVA_CLASS_FILELIST_SCRIPT}
+            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+            COMMENT "Building Java objects for ${_TARGET_NAME}.jar"
+        )
+    endif (_JAVA_COMPILE_FILES)
+
+    # create the jar file
+    if (CMAKE_JNI_TARGET)
+        add_custom_command(
+            TARGET ${_TARGET_NAME}
+            COMMAND ${Java_JAR_EXECUTABLE}
+                -cf ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
+                ${_JAVA_RESOURCE_FILES} @java_class_filelist
+            COMMAND ${CMAKE_COMMAND}
+                -D_JAVA_TARGET_DIR=${CMAKE_CURRENT_BINARY_DIR}
+                -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME}
+                -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
+                -P ${_JAVA_SYMLINK_SCRIPT}
+            COMMAND ${CMAKE_COMMAND}
+                -D_JAVA_TARGET_DIR=${CMAKE_CURRENT_BINARY_DIR}
+                
-D_JAVA_TARGET_OUTPUT_NAME=${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
+                -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
+                -P ${_JAVA_SYMLINK_SCRIPT}
+            WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+            COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}"
+        )
+    else ()
+        add_custom_command(
+            TARGET ${_TARGET_NAME}
+            COMMAND ${Java_JAR_EXECUTABLE}
+                -cf ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
+                ${_JAVA_RESOURCE_FILES} @java_class_filelist
+            COMMAND ${CMAKE_COMMAND}
+                -D_JAVA_TARGET_DIR=${CMAKE_CURRENT_BINARY_DIR}
+                -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME}
+                -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
+                -P ${_JAVA_SYMLINK_SCRIPT}
+            WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+            COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}"
+        )
+    endif (CMAKE_JNI_TARGET)
+
+    set(${_TARGET_NAME}_INSTALL_FILES
+        ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
+        PARENT_SCOPE)
+    if (_JAVA_TARGET_OUTPUT_LINK)
+        set(${_TARGET_NAME}_INSTALL_FILES
+            ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
+            ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_LINK}
+            PARENT_SCOPE)
+        if (CMAKE_JNI_TARGET)
+            set(${_TARGET_NAME}_JNI_SYMLINK
+                ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_LINK}
+                PARENT_SCOPE)
+        endif (CMAKE_JNI_TARGET)
+    endif (_JAVA_TARGET_OUTPUT_LINK)
+    set(${_TARGET_NAME}_JAR_FILE
+        ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME} PARENT_SCOPE)
+    set(${_TARGET_NAME}_CLASS_DIR
+        ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+         PARENT_SCOPE)
+endfunction(add_jar)
+
+function(INSTALL_JAR _TARGET_NAME _DESTINATION)
+    if (${_TARGET_NAME}_INSTALL_FILES)
+        install(
+            FILES
+                ${${_TARGET_NAME}_INSTALL_FILES}
+            DESTINATION
+                ${_DESTINATION}
+        )
+    else (${_TARGET_NAME}_INSTALL_FILES)
+        message(SEND_ERROR "The target ${_TARGET_NAME} is not known in this 
scope.")
+    endif (${_TARGET_NAME}_INSTALL_FILES)
+endfunction(INSTALL_JAR _TARGET_NAME _DESTINATION)
+
+function(INSTALL_JNI_SYMLINK _TARGET_NAME _DESTINATION)
+    if (${_TARGET_NAME}_JNI_SYMLINK)
+        install(
+            FILES
+                ${${_TARGET_NAME}_JNI_SYMLINK}
+            DESTINATION
+                ${_DESTINATION}
+        )
+    else (${_TARGET_NAME}_JNI_SYMLINK)
+        message(SEND_ERROR "The target ${_TARGET_NAME} is not known in this 
scope.")
+    endif (${_TARGET_NAME}_JNI_SYMLINK)
+endfunction(INSTALL_JNI_SYMLINK _TARGET_NAME _DESTINATION)
+
+function (find_jar VARIABLE)
+    set(_jar_names)
+    set(_jar_files)
+    set(_jar_versions)
+    set(_jar_paths
+        /usr/share/java/
+        /usr/local/share/java/
+        ${Java_JAR_PATHS})
+    set(_jar_doc "NOTSET")
+
+    set(_state "name")
+
+    foreach (arg ${ARGN})
+        if (${_state} STREQUAL "name")
+            if (${arg} STREQUAL "VERSIONS")
+                set(_state "versions")
+            elseif (${arg} STREQUAL "NAMES")
+                set(_state "names")
+            elseif (${arg} STREQUAL "PATHS")
+                set(_state "paths")
+            elseif (${arg} STREQUAL "DOC")
+                set(_state "doc")
+            else (${arg} STREQUAL "NAMES")
+                set(_jar_names ${arg})
+                if (_jar_doc STREQUAL "NOTSET")
+                    set(_jar_doc "Finding ${arg} jar")
+                endif (_jar_doc STREQUAL "NOTSET")
+            endif (${arg} STREQUAL "VERSIONS")
+        elseif (${_state} STREQUAL "versions")
+            if (${arg} STREQUAL "NAMES")
+                set(_state "names")
+            elseif (${arg} STREQUAL "PATHS")
+                set(_state "paths")
+            elseif (${arg} STREQUAL "DOC")
+                set(_state "doc")
+            else (${arg} STREQUAL "NAMES")
+                set(_jar_versions ${_jar_versions} ${arg})
+            endif (${arg} STREQUAL "NAMES")
+        elseif (${_state} STREQUAL "names")
+            if (${arg} STREQUAL "VERSIONS")
+                set(_state "versions")
+            elseif (${arg} STREQUAL "PATHS")
+                set(_state "paths")
+            elseif (${arg} STREQUAL "DOC")
+                set(_state "doc")
+            else (${arg} STREQUAL "VERSIONS")
+                set(_jar_names ${_jar_names} ${arg})
+                if (_jar_doc STREQUAL "NOTSET")
+                    set(_jar_doc "Finding ${arg} jar")
+                endif (_jar_doc STREQUAL "NOTSET")
+            endif (${arg} STREQUAL "VERSIONS")
+        elseif (${_state} STREQUAL "paths")
+            if (${arg} STREQUAL "VERSIONS")
+                set(_state "versions")
+            elseif (${arg} STREQUAL "NAMES")
+                set(_state "names")
+            elseif (${arg} STREQUAL "DOC")
+                set(_state "doc")
+            else (${arg} STREQUAL "VERSIONS")
+                set(_jar_paths ${_jar_paths} ${arg})
+            endif (${arg} STREQUAL "VERSIONS")
+        elseif (${_state} STREQUAL "doc")
+            if (${arg} STREQUAL "VERSIONS")
+                set(_state "versions")
+            elseif (${arg} STREQUAL "NAMES")
+                set(_state "names")
+            elseif (${arg} STREQUAL "PATHS")
+                set(_state "paths")
+            else (${arg} STREQUAL "VERSIONS")
+                set(_jar_doc ${arg})
+            endif (${arg} STREQUAL "VERSIONS")
+        endif (${_state} STREQUAL "name")
+    endforeach (arg ${ARGN})
+
+    if (${_jar_names} STREQUAL "")
+        message(FATAL_ERROR "find_jar: No name to search for given")
+    endif (${_jar_names} STREQUAL "")
+
+    foreach (jar_name ${_jar_names})
+        foreach (version ${_jar_versions})
+            set(_jar_files ${_jar_files} ${jar_name}-${version}.jar)
+        endforeach (version ${_jar_versions})
+        set(_jar_files ${_jar_files} ${jar_name}.jar)
+    endforeach (jar_name ${_jar_names})
+
+    find_file(${VARIABLE}
+        NAMES   ${_jar_files}
+        PATHS   ${_jar_paths}
+        DOC     ${_jar_doc}
+        NO_DEFAULT_PATH)
+endfunction (find_jar VARIABLE)
+
+function(create_javadoc _target)
+    set(_javadoc_packages)
+    set(_javadoc_files)
+    set(_javadoc_sourcepath)
+    set(_javadoc_classpath)
+    set(_javadoc_installpath "${CMAKE_INSTALL_PREFIX}/share/javadoc")
+    set(_javadoc_doctitle)
+    set(_javadoc_windowtitle)
+    set(_javadoc_author FALSE)
+    set(_javadoc_version FALSE)
+    set(_javadoc_use FALSE)
+
+    set(_state "package")
+
+    foreach (arg ${ARGN})
+        if (${_state} STREQUAL "package")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_packages ${arg})
+                set(_state "packages")
+            endif ()
+        elseif (${_state} STREQUAL "packages")
+            if (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                list(APPEND _javadoc_packages ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "files")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                list(APPEND _javadoc_files ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "sourcepath")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                list(APPEND _javadoc_sourcepath ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "classpath")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                list(APPEND _javadoc_classpath ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "installpath")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_installpath ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "doctitle")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_doctitle ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "windowtitle")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_windowtitle ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "author")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_author ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "use")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_use ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "version")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_version ${arg})
+            endif ()
+        endif (${_state} STREQUAL "package")
+    endforeach (arg ${ARGN})
+
+    set(_javadoc_builddir ${CMAKE_CURRENT_BINARY_DIR}/javadoc/${_target})
+    set(_javadoc_options -d ${_javadoc_builddir})
+
+    if (_javadoc_sourcepath)
+        set(_start TRUE)
+        foreach(_path ${_javadoc_sourcepath})
+            if (_start)
+                set(_sourcepath ${_path})
+                set(_start FALSE)
+            else (_start)
+                set(_sourcepath ${_sourcepath}:${_path})
+            endif (_start)
+        endforeach(_path ${_javadoc_sourcepath})
+        set(_javadoc_options ${_javadoc_options} -sourcepath ${_sourcepath})
+    endif (_javadoc_sourcepath)
+
+    if (_javadoc_classpath)
+        set(_start TRUE)
+        foreach(_path ${_javadoc_classpath})
+            if (_start)
+                set(_classpath ${_path})
+                set(_start FALSE)
+            else (_start)
+                set(_classpath ${_classpath}:${_path})
+            endif (_start)
+        endforeach(_path ${_javadoc_classpath})
+        set(_javadoc_options ${_javadoc_options} -classpath "${_classpath}")
+    endif (_javadoc_classpath)
+
+    if (_javadoc_doctitle)
+        set(_javadoc_options ${_javadoc_options} -doctitle 
'${_javadoc_doctitle}')
+    endif (_javadoc_doctitle)
+
+    if (_javadoc_windowtitle)
+        set(_javadoc_options ${_javadoc_options} -windowtitle 
'${_javadoc_windowtitle}')
+    endif (_javadoc_windowtitle)
+
+    if (_javadoc_author)
+        set(_javadoc_options ${_javadoc_options} -author)
+    endif (_javadoc_author)
+
+    if (_javadoc_use)
+        set(_javadoc_options ${_javadoc_options} -use)
+    endif (_javadoc_use)
+
+    if (_javadoc_version)
+        set(_javadoc_options ${_javadoc_options} -version)
+    endif (_javadoc_version)
+
+    add_custom_target(${_target}_javadoc ALL
+        COMMAND ${Java_JAVADOC_EXECUTABLE} ${_javadoc_options}
+                            ${_javadoc_files}
+                            ${_javadoc_packages}
+        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+    )
+
+    install(
+        DIRECTORY ${_javadoc_builddir}
+        DESTINATION ${_javadoc_installpath}
+    )
+endfunction(create_javadoc)
diff --git a/Modules/UseJavaClassFilelist.cmake 
b/Modules/UseJavaClassFilelist.cmake
new file mode 100644
index 0000000..c842bf7
--- /dev/null
+++ b/Modules/UseJavaClassFilelist.cmake
@@ -0,0 +1,52 @@
+#
+# This script create a list of compiled Java class files to be added to a
+# jar file. This avoids including cmake files which get created in the
+# binary directory.
+#
+
+#=============================================================================
+# Copyright 2010-2011 Andreas schneider <a...@redhat.com>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+if (CMAKE_JAVA_CLASS_OUTPUT_PATH)
+    if (EXISTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}")
+
+        set(_JAVA_GLOBBED_FILES)
+        if (CMAKE_JAR_CLASSES_PREFIX)
+            foreach(JAR_CLASS_PREFIX ${CMAKE_JAR_CLASSES_PREFIX})
+                message(STATUS "JAR_CLASS_PREFIX: ${JAR_CLASS_PREFIX}")
+
+                file(GLOB_RECURSE _JAVA_GLOBBED_TMP_FILES 
"${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${JAR_CLASS_PREFIX}/*.class")
+                if (_JAVA_GLOBBED_TMP_FILES)
+                    list(APPEND _JAVA_GLOBBED_FILES ${_JAVA_GLOBBED_TMP_FILES})
+                endif (_JAVA_GLOBBED_TMP_FILES)
+            endforeach(JAR_CLASS_PREFIX ${CMAKE_JAR_CLASSES_PREFIX})
+        else()
+            file(GLOB_RECURSE _JAVA_GLOBBED_FILES 
"${CMAKE_JAVA_CLASS_OUTPUT_PATH}/*.class")
+        endif (CMAKE_JAR_CLASSES_PREFIX)
+
+        set(_JAVA_CLASS_FILES)
+        # file(GLOB_RECURSE foo RELATIVE) is broken so we need this.
+        foreach(_JAVA_GLOBBED_FILE ${_JAVA_GLOBBED_FILES})
+            file(RELATIVE_PATH _JAVA_CLASS_FILE 
${CMAKE_JAVA_CLASS_OUTPUT_PATH} ${_JAVA_GLOBBED_FILE})
+            set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES}${_JAVA_CLASS_FILE}\n)
+        endforeach(_JAVA_GLOBBED_FILE ${_JAVA_GLOBBED_FILES})
+
+        # write to file
+        file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist 
${_JAVA_CLASS_FILES})
+
+    else (EXISTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}")
+        message(SEND_ERROR "FATAL: Java class output path doesn't exist")
+    endif (EXISTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}")
+else (CMAKE_JAVA_CLASS_OUTPUT_PATH)
+    message(SEND_ERROR "FATAL: Can't find CMAKE_JAVA_CLASS_OUTPUT_PATH")
+endif (CMAKE_JAVA_CLASS_OUTPUT_PATH)
diff --git a/Modules/UseJavaSymlinks.cmake b/Modules/UseJavaSymlinks.cmake
new file mode 100644
index 0000000..c66ee1e
--- /dev/null
+++ b/Modules/UseJavaSymlinks.cmake
@@ -0,0 +1,32 @@
+#
+# Helper script for UseJava.cmake
+#
+
+#=============================================================================
+# Copyright 2010-2011 Andreas schneider <a...@redhat.com>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+if (UNIX AND _JAVA_TARGET_OUTPUT_LINK)
+    if (_JAVA_TARGET_OUTPUT_NAME)
+        find_program(LN_EXECUTABLE
+            NAMES
+                ln
+        )
+
+        execute_process(
+            COMMAND ${LN_EXECUTABLE} -sf "${_JAVA_TARGET_OUTPUT_NAME}" 
"${_JAVA_TARGET_OUTPUT_LINK}"
+            WORKING_DIRECTORY ${_JAVA_TARGET_DIR}
+        )
+    else (_JAVA_TARGET_OUTPUT_NAME)
+        message(SEND_ERROR "FATAL: Can't find _JAVA_TARGET_OUTPUT_NAME")
+    endif (_JAVA_TARGET_OUTPUT_NAME)
+endif (UNIX AND _JAVA_TARGET_OUTPUT_LINK)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a4b6275eb7c31562633f0c1c805e2912c9a460f1
commit a4b6275eb7c31562633f0c1c805e2912c9a460f1
Author:     Andreas Schneider <a...@cryptomilk.org>
AuthorDate: Thu Feb 10 21:09:29 2011 +0100
Commit:     Andreas Schneider <a...@cryptomilk.org>
CommitDate: Tue Mar 29 11:54:41 2011 +0200

    FindJava: Find missing java development executables.

diff --git a/Modules/FindJava.cmake b/Modules/FindJava.cmake
index 8c2128e..642baa2 100644
--- a/Modules/FindJava.cmake
+++ b/Modules/FindJava.cmake
@@ -5,6 +5,8 @@
 #
 #  Java_JAVA_EXECUTABLE    = the full path to the Java runtime
 #  Java_JAVAC_EXECUTABLE   = the full path to the Java compiler
+#  Java_JAVAH_EXECUTABLE   = the full path to the Java header generator
+#  Java_JAVADOC_EXECUTABLE = the full path to the Java documention generator
 #  Java_JAR_EXECUTABLE     = the full path to the Java archiver
 #  Java_VERSION_STRING     = Version of the package found (java version), eg. 
1.6.0_12
 #  Java_VERSION_MAJOR      = The major version of the package found.
@@ -150,6 +152,18 @@ FIND_PROGRAM(Java_JAVAC_EXECUTABLE
   PATHS ${_JAVA_PATHS}
 )
 
+FIND_PROGRAM(Java_JAVAH_EXECUTABLE
+  NAMES javah
+  HINTS ${_JAVA_HINTS}
+  PATHS ${_JAVA_PATHS}
+)
+
+FIND_PROGRAM(Java_JAVADOC_EXECUTABLE
+  NAMES javadoc
+  HINTS ${_JAVA_HINTS}
+  PATHS ${_JAVA_PATHS}
+)
+
 include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
 if(Java_FIND_COMPONENTS)
   foreach(component ${Java_FIND_COMPONENTS})
@@ -162,6 +176,7 @@ if(Java_FIND_COMPONENTS)
     elseif(component STREQUAL "Development")
       find_package_handle_standard_args(Java
         REQUIRED_VARS Java_JAVA_EXECUTABLE Java_JAR_EXECUTABLE 
Java_JAVAC_EXECUTABLE
+                      Java_JAVAH_EXECUTABLE Java_JAVADOC_EXECUTABLE
         VERSION_VAR Java_VERSION
         )
     else()
@@ -173,6 +188,7 @@ else()
   # Check for everything
   find_package_handle_standard_args(Java
     REQUIRED_VARS Java_JAVA_EXECUTABLE Java_JAR_EXECUTABLE 
Java_JAVAC_EXECUTABLE
+                  Java_JAVAH_EXECUTABLE Java_JAVADOC_EXECUTABLE
     VERSION_VAR Java_VERSION
     )
 endif()
@@ -182,6 +198,8 @@ MARK_AS_ADVANCED(
   Java_JAVA_EXECUTABLE
   Java_JAR_EXECUTABLE
   Java_JAVAC_EXECUTABLE
+  Java_JAVAH_EXECUTABLE
+  Java_JAVADOC_EXECUTABLE
   )
 
 # LEGACY

-----------------------------------------------------------------------

Summary of changes:
 Modules/FindJava.cmake             |   18 +
 Modules/UseJava.cmake              |  825 ++++++++++++++++++++++++++++++++++++
 Modules/UseJavaClassFilelist.cmake |   52 +++
 Modules/UseJavaSymlinks.cmake      |   32 ++
 Tests/CMakeLists.txt               |    4 +-
 Tests/Java/CMakeLists.txt          |   45 +--
 6 files changed, 935 insertions(+), 41 deletions(-)
 create mode 100644 Modules/UseJava.cmake
 create mode 100644 Modules/UseJavaClassFilelist.cmake
 create mode 100644 Modules/UseJavaSymlinks.cmake


hooks/post-receive
-- 
CMake
_______________________________________________
Cmake-commits mailing list
Cmake-commits@cmake.org
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-commits

Reply via email to