diff options
author | Endi Sukma Dewata <edewata@redhat.com> | 2012-07-08 10:09:41 -0500 |
---|---|---|
committer | Endi Sukma Dewata <edewata@redhat.com> | 2012-07-18 19:54:16 -0500 |
commit | 32b2670ba16084896e10ae27f7ce7b50313e375a (patch) | |
tree | 9b44d9557b5effce6aa3691fe6ac79b6b396b1cd | |
parent | 2b95e5231debe5fb6bd97e06c61dc65f7942e38c (diff) | |
download | pki-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.cmake | 173 | ||||
-rw-r--r-- | cmake/Modules/JavaFileList.cmake | 34 |
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}) |