summaryrefslogtreecommitdiffstats
path: root/pki/cmake
diff options
context:
space:
mode:
authormharmsen <mharmsen@c9f7a03b-bd48-0410-a16d-cbbf54688b0b>2010-12-08 21:59:10 +0000
committermharmsen <mharmsen@c9f7a03b-bd48-0410-a16d-cbbf54688b0b>2010-12-08 21:59:10 +0000
commit0e3362ca442919102b42df6120c49cc7924bc512 (patch)
tree187eebe272a57f477e62b09f91101a1875e37df1 /pki/cmake
parent4424a5d25c860a3b6a1f63b717891f982a6029aa (diff)
downloadpki-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.cmake51
-rw-r--r--pki/cmake/Modules/UseJavaClassFilelist.cmake24
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