On Fri, Oct 22, 2010 at 04:45:42PM -0400, Ben Boeckel forgot to attach files
Actually attaching things now. --Ben
# # This file provides functions for Java support. # # Available Functions: # # add_jar(TARGET_NAME SRC1 SRC2 .. SRCN RCS1 RCS2 .. RCSN) # # This command create 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_NAME. 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) # # 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>_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. # # # 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. # #============================================================================= # Copyright 2010 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 distributed 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 ARGS ${src} ${dest} DEPENDS ${src} COMMENT ${comment}) endfunction (__java_copy_file src dest comment) 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) 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) 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_FULL ${_JAVA_SOURCE_FILE} ABSOLUTE) get_filename_component(_JAVA_FILE ${_JAVA_SOURCE_FILE} NAME_WE) get_filename_component(_JAVA_PATH ${_JAVA_SOURCE_FILE} PATH) 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 MATCHES "") 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) 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) # Check if we have a local UseJavaClassFilelist.cmake if (EXISTS ${CMAKE_MODULE_PATH}/UseJavaClassFilelist.cmake) set(_JAVA_CLASS_FILELIST_SCRIPT ${CMAKE_MODULE_PATH}/UseJavaClassFilelist.cmake) elseif (EXISTS ${CMAKE_ROOT}/Modules/UseJavaClassFilelist.cmake) set(_JAVA_CLASS_FILELIST_SCRIPT ${CMAKE_ROOT}/Modules/UseJavaClassFilelist.cmake) endif (EXISTS ${CMAKE_MODULE_PATH}/UseJavaClassFilelist.cmake) # create an empty java_class_filelist file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist "") # Check if we have a local UseJavaSymlinks.cmake if (EXISTS ${CMAKE_MODULE_PATH}/UseJavaSymlinks.cmake) set(_JAVA_SYMLINK_SCRIPT ${CMAKE_MODULE_PATH}/UseJavaSymlinks.cmake) elseif (EXISTS ${CMAKE_ROOT}/Modules/UseJavaSymlinks.cmake) set(_JAVA_SYMLINK_SCRIPT ${CMAKE_ROOT}/Modules/UseJavaSymlinks.cmake) endif (EXISTS ${CMAKE_MODULE_PATH}/UseJavaSymlinks.cmake) if (_JAVA_COMPILE_FILES) # Compile the java files and create a list of class files add_custom_command( OUTPUT ${_JAVA_CLASS_FILES} COMMAND ${Java_JAVAC_EXECUTABLE} ARGS ${CMAKE_JAVA_COMPILE_FLAGS} -classpath ${CMAKE_JAVA_INCLUDE_PATH_FINAL} -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH} ${_JAVA_COMPILE_FILES} # COMMAND ${CMAKE_COMMAND} # ARGS -DCMAKE_JAVA_CLASS_OUTPUT_PATH=${CMAKE_JAVA_CLASS_OUTPUT_PATH} # -P ${_JAVA_CLASS_FILELIST_SCRIPT} DEPENDS ${_JAVA_COMPILE_FILES} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Building Java objects for ${_TARGET_NAME}.jar") endif (_JAVA_COMPILE_FILES) set(JAVA_JAR_TARGET_${_TARGET_NAME} ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH}/${_JAVA_TARGET_OUTPUT_NAME} CACHE FILEPATH "Output jar for the ${_JAVA_TARGET_OUTPUT_NAME} target") set(JAVA_JAR_TARGET_${_TARGET_NAME}_CLASSPATH ${CMAKE_JAVA_CLASS_OUTPUT_PATH} CACHE FILEPATH "Output classes for the ${_JAVA_TARGET_OUTPUT_NAME} target") mark_as_advanced(JAVA_JAR_TARGET_${_JAVA_TARGET_NAME} JAVA_JAR_TARGET_${_JAVA_TARGET_NAME}_CLASSPATH) # create the jar file add_custom_command( OUTPUT ${JAVA_JAR_TARGET_${_TARGET_NAME}} COMMAND ${Java_JAR_EXECUTABLE} ARGS -cf ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH}/${_JAVA_TARGET_OUTPUT_NAME} ${_JAVA_CLASS_FILES} ${_JAVA_RESOURCE_FILES} @java_class_filelist # COMMAND ${CMAKE_COMMAND} # ARGS -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} DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_CLASS_FILES} WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH} COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}") add_custom_target(${_TARGET_NAME} ALL DEPENDS ${JAVA_JAR_TARGET_${_TARGET_NAME}} ${_JAVA_DEPENDS}) set(${_TARGET_NAME}_INSTALL_FILES ${JAVA_JAR_TARGET_${_TARGET_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) endif (_JAVA_TARGET_OUTPUT_LINK) set(${target}_JAR_FILE ${JAVA_JAR_TARGET_${_TARGET_NAME}} PARENT_SCOPE) set(${target}_CLASS_DIR ${CMAKE_JAVA_CLASS_OUTPUT_PATH} PARENT_SCOPE) endfunction (add_jar) 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 (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)
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake