summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEndi Sukma Dewata <edewata@redhat.com>2012-07-08 10:09:41 -0500
committerEndi Sukma Dewata <edewata@redhat.com>2012-07-18 19:54:16 -0500
commit32b2670ba16084896e10ae27f7ce7b50313e375a (patch)
tree9b44d9557b5effce6aa3691fe6ac79b6b396b1cd
parent2b95e5231debe5fb6bd97e06c61dc65f7942e38c (diff)
downloadpki-32b2670ba16084896e10ae27f7ce7b50313e375a.tar.gz
pki-32b2670ba16084896e10ae27f7ce7b50313e375a.tar.xz
pki-32b2670ba16084896e10ae27f7ce7b50313e375a.zip
Added Java CMake library.
New Java CMake library has been added to find the source codes automatically so it's no longer necessary to maintain the list of source codes in the build script. The library also provides separate functions to compile, package, and create symbolic links allowing more flexibility over the build process. Ticket #62
-rw-r--r--cmake/Modules/Java.cmake173
-rw-r--r--cmake/Modules/JavaFileList.cmake34
2 files changed, 207 insertions, 0 deletions
diff --git a/cmake/Modules/Java.cmake b/cmake/Modules/Java.cmake
new file mode 100644
index 000000000..bab17f541
--- /dev/null
+++ b/cmake/Modules/Java.cmake
@@ -0,0 +1,173 @@
+# --- BEGIN COPYRIGHT BLOCK ---
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# (C) 2012 Red Hat, Inc.
+# All rights reserved.
+# --- END COPYRIGHT BLOCK ---
+#
+# Author: Endi S. Dewata
+
+function(javac target)
+
+ set(source_dir ${CMAKE_CURRENT_SOURCE_DIR})
+
+ foreach (arg ${ARGN})
+
+ if (arg MATCHES "(SOURCE_DIR|SOURCES|CLASSPATH|OUTPUT_DIR|DEPENDS)")
+ set(param ${arg})
+
+ else (arg MATCHES "(SOURCE_DIR|SOURCES|CLASSPATH|OUTPUT_DIR|DEPENDS)")
+
+ if (param MATCHES "SOURCE_DIR")
+ set(source_dir ${arg})
+
+ elseif (param MATCHES "SOURCES")
+ list(APPEND sources ${arg})
+
+ elseif (param MATCHES "CLASSPATH")
+ list(APPEND classpath ${arg})
+
+ elseif (param MATCHES "OUTPUT_DIR")
+ set(output_dir ${arg})
+
+ elseif (param MATCHES "DEPENDS")
+ list(APPEND depends ${arg})
+
+ endif(param MATCHES "SOURCE_DIR")
+
+ endif(arg MATCHES "(SOURCE_DIR|SOURCES|CLASSPATH|OUTPUT_DIR|DEPENDS)")
+
+ endforeach(arg)
+
+ if (UNIX)
+ set(separator ":")
+ else (UNIX)
+ set(separator ";")
+ endif(UNIX)
+
+ foreach (path ${classpath})
+ set(native_classpath "${native_classpath}${separator}${path}")
+ endforeach(path)
+
+ set(filelist "${CMAKE_CURRENT_BINARY_DIR}/${target}.files")
+
+ add_custom_target(${target} ALL DEPENDS ${depends})
+
+ add_custom_command(
+ TARGET ${target}
+ COMMAND ${CMAKE_COMMAND}
+ -Doutput=${filelist}
+ -Dinput_dir=${source_dir}
+ -Dfiles="${sources}"
+ -P ${CMAKE_MODULE_PATH}/JavaFileList.cmake
+ COMMAND ${CMAKE_Java_COMPILER}
+ ${CMAKE_JAVA_COMPILE_FLAGS}
+ -cp ${native_classpath}
+ -d ${output_dir}
+ @${filelist}
+ WORKING_DIRECTORY
+ ${source_dir}
+ )
+
+endfunction(javac)
+
+function(jar target)
+
+ set(input_dir ${CMAKE_CURRENT_SOURCE_DIR})
+
+ foreach (arg ${ARGN})
+
+ if (arg MATCHES "CREATE")
+ set(param ${arg})
+ set(operation "c")
+
+ elseif (arg MATCHES "UPDATE")
+ set(param ${arg})
+ set(operation "u")
+
+ elseif (arg MATCHES "(INPUT_DIR|FILES|DEPENDS)")
+ set(param ${arg})
+
+ else ()
+
+ if (param MATCHES "(CREATE|UPDATE)")
+ set(output ${arg})
+
+ elseif (param MATCHES "INPUT_DIR")
+ set(input_dir ${arg})
+
+ elseif (param MATCHES "FILES")
+ list(APPEND files ${arg})
+
+ elseif (param MATCHES "DEPENDS")
+ list(APPEND depends ${arg})
+
+ endif(param MATCHES "(CREATE|UPDATE)")
+
+ endif(arg MATCHES "CREATE")
+
+ endforeach(arg)
+
+ set(filelist "${CMAKE_CURRENT_BINARY_DIR}/${target}.files")
+
+ add_custom_target(${target} ALL DEPENDS ${depends})
+
+ add_custom_command(
+ TARGET ${target}
+ COMMAND ${CMAKE_COMMAND}
+ -Doutput=${filelist}
+ -Dinput_dir=${input_dir}
+ -Dfiles="${files}"
+ -P ${CMAKE_MODULE_PATH}/JavaFileList.cmake
+ COMMAND ${CMAKE_Java_ARCHIVE}
+ -${operation}f ${output}
+ @${filelist}
+ WORKING_DIRECTORY ${input_dir}
+ )
+
+endfunction(jar)
+
+function(link target)
+
+ foreach (arg ${ARGN})
+
+ if (arg MATCHES "(SOURCE|DEST|DEPENDS)")
+ set(param ${arg})
+
+ else ()
+
+ if (param MATCHES "SOURCE")
+ set(source ${arg})
+
+ elseif (param MATCHES "DEST")
+ set(dest ${arg})
+
+ elseif (param MATCHES "DEPENDS")
+ list(APPEND depends ${arg})
+
+ endif(param MATCHES "SOURCE")
+
+ endif(arg MATCHES "(SOURCE|DEST|DEPENDS)")
+
+ endforeach(arg)
+
+ add_custom_target(${target} ALL DEPENDS ${depends})
+
+ add_custom_command(
+ TARGET ${target}
+ COMMAND ${CMAKE_COMMAND}
+ -E create_symlink ${dest} ${source}
+ )
+
+endfunction(link) \ No newline at end of file
diff --git a/cmake/Modules/JavaFileList.cmake b/cmake/Modules/JavaFileList.cmake
new file mode 100644
index 000000000..6ebdaea12
--- /dev/null
+++ b/cmake/Modules/JavaFileList.cmake
@@ -0,0 +1,34 @@
+# --- BEGIN COPYRIGHT BLOCK ---
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# (C) 2012 Red Hat, Inc.
+# All rights reserved.
+# --- END COPYRIGHT BLOCK ---
+#
+# Author: Endi S. Dewata
+
+file(WRITE ${output} "")
+
+separate_arguments(file_list UNIX_COMMAND ${files})
+
+foreach(file ${file_list})
+
+ file(GLOB_RECURSE absolute_files "${input_dir}/${file}")
+
+ foreach(absolute_file ${absolute_files})
+ file(RELATIVE_PATH relative_file ${input_dir} ${absolute_file})
+ file(APPEND ${output} "${relative_file}\n")
+ endforeach(absolute_file ${absolute_files})
+
+endforeach(file ${files})