diff options
Diffstat (limited to 'cmake')
-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}) |