diff options
author | mharmsen <mharmsen@c9f7a03b-bd48-0410-a16d-cbbf54688b0b> | 2010-12-08 21:59:10 +0000 |
---|---|---|
committer | mharmsen <mharmsen@c9f7a03b-bd48-0410-a16d-cbbf54688b0b> | 2010-12-08 21:59:10 +0000 |
commit | 0e3362ca442919102b42df6120c49cc7924bc512 (patch) | |
tree | 187eebe272a57f477e62b09f91101a1875e37df1 /pki/cmake | |
parent | 4424a5d25c860a3b6a1f63b717891f982a6029aa (diff) | |
download | pki-0e3362ca442919102b42df6120c49cc7924bc512.tar.gz pki-0e3362ca442919102b42df6120c49cc7924bc512.tar.xz pki-0e3362ca442919102b42df6120c49cc7924bc512.zip |
Bugzilla Bug #643206 - New CMake based build system for Dogtag
(prevent class replication across jars)
git-svn-id: svn+ssh://svn.fedorahosted.org/svn/pki/trunk@1612 c9f7a03b-bd48-0410-a16d-cbbf54688b0b
Diffstat (limited to 'pki/cmake')
-rw-r--r-- | pki/cmake/Modules/UseJava.cmake | 51 | ||||
-rw-r--r-- | pki/cmake/Modules/UseJavaClassFilelist.cmake | 24 |
2 files changed, 63 insertions, 12 deletions
diff --git a/pki/cmake/Modules/UseJava.cmake b/pki/cmake/Modules/UseJava.cmake index a9699285f..75dda6a4c 100644 --- a/pki/cmake/Modules/UseJava.cmake +++ b/pki/cmake/Modules/UseJava.cmake @@ -5,7 +5,7 @@ # # add_jar(TARGET_NAME SRC1 SRC2 .. SRCN RCS1 RCS2 .. RCSN) # -# This command create a <TARGET_NAME>.jar. It compiles the given source +# 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. # @@ -33,6 +33,27 @@ # 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. @@ -53,10 +74,11 @@ # should be called in the same scope as add_jar() or it will fail. # # -# install_symlink(TARGET_NAME DESTINATION) +# install_jni_symlink(TARGET_NAME DESTINATION) # -# This command installs the TARGET_NAME symlinks to the given DESTINATION. It -# should be called in the same scope as add_jar() or it will fail. +# 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. # #============================================================================= # Copyright 2010 Andreas schneider <asn@redhat.com> @@ -162,7 +184,7 @@ function(ADD_JAR _TARGET_NAME) # create an empty java_class_filelist file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist "") - # Check if we have a local UseJavaClassFilelist.cmake + # 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) @@ -180,6 +202,7 @@ function(ADD_JAR _TARGET_NAME) ${_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" @@ -195,6 +218,11 @@ function(ADD_JAR _TARGET_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} @@ -220,16 +248,17 @@ function(ADD_JAR _TARGET_NAME) set(${_TARGET_NAME}_INSTALL_FILES ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME} PARENT_SCOPE) - if (CMAKE_JNI_TARGET AND _JAVA_TARGET_OUTPUT_LINK) - set(${_TARGET_NAME}_JNI_SYMLINK - ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_LINK} - PARENT_SCOPE) - elseif (_JAVA_TARGET_OUTPUT_LINK ) + 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 (CMAKE_JNI_TARGET AND _JAVA_TARGET_OUTPUT_LINK) + 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 diff --git a/pki/cmake/Modules/UseJavaClassFilelist.cmake b/pki/cmake/Modules/UseJavaClassFilelist.cmake index bee84a264..bceb56ad1 100644 --- a/pki/cmake/Modules/UseJavaClassFilelist.cmake +++ b/pki/cmake/Modules/UseJavaClassFilelist.cmake @@ -18,6 +18,13 @@ if (CMAKE_JAVA_CLASS_OUTPUT_PATH) if (EXISTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}") + + # if it exists, obtain the length of the selected jar classes prefix + if (CMAKE_JAR_CLASSES_PREFIX) + string(LENGTH "${CMAKE_JAR_CLASSES_PREFIX}" + _JAR_CLASSES_PREFIX_LENGTH) + endif (CMAKE_JAR_CLASSES_PREFIX) + # glob for class files file(GLOB_RECURSE _JAVA_GLOBBED_FILES "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/*.class") @@ -25,7 +32,22 @@ if (CMAKE_JAVA_CLASS_OUTPUT_PATH) set(_JAVA_CLASS_FILES) 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") + if (CMAKE_JAR_CLASSES_PREFIX) + # extract the prefix from this java class file corresponding + # to the length of the selected jar classes prefix + string(SUBSTRING "${_JAVA_CLASS_FILE}" + 0 ${_JAR_CLASSES_PREFIX_LENGTH} _JAVA_CLASS_PREFIX) + # save this java class file ONLY if its prefix is the + # same as the selected java classes prefix + if (_JAVA_CLASS_PREFIX STREQUAL CMAKE_JAR_CLASSES_PREFIX) + set(_JAVA_CLASS_FILES + "${_JAVA_CLASS_FILES}${_JAVA_CLASS_FILE}\n") + endif (_JAVA_CLASS_PREFIX STREQUAL CMAKE_JAR_CLASSES_PREFIX) + else () + # save ALL java class files + set(_JAVA_CLASS_FILES + "${_JAVA_CLASS_FILES}${_JAVA_CLASS_FILE}\n") + endif (CMAKE_JAR_CLASSES_PREFIX) endforeach(_JAVA_GLOBBED_FILE ${_JAVA_GLOBBED_FILES}) # write to file |