1
# - Use Module for Java
2
# This file provides functions for Java. It is assumed that FindJava.cmake
3
# has already been loaded. See FindJava.cmake for information on how to
4
# load Java into your CMake project.
6
# add_jar(TARGET_NAME SRC1 SRC2 .. SRCN RCS1 RCS2 .. RCSN)
8
# This command creates a <TARGET_NAME>.jar. It compiles the given source
9
# files (SRC) and adds the given resource files (RCS) to the jar file.
10
# If only resource files are given then just a jar file is created.
12
# Additional instructions:
13
# To add compile flags to the target you can set these flags with
14
# the following variable:
16
# set(CMAKE_JAVA_COMPILE_FLAGS -nowarn)
18
# To add a path or a jar file to the class path you can do this
19
# with the CMAKE_JAVA_INCLUDE_PATH variable.
21
# set(CMAKE_JAVA_INCLUDE_PATH /usr/share/java/shibboleet.jar)
23
# To use a different output name for the target you can set it with:
25
# set(CMAKE_JAVA_TARGET_OUTPUT_NAME shibboleet.jar)
26
# add_jar(foobar foobar.java)
28
# To add a VERSION to the target output name you can set it using
29
# CMAKE_JAVA_TARGET_VERSION. This will create a jar file with the name
30
# shibboleet-1.0.0.jar and will create a symlink shibboleet.jar
31
# pointing to the jar with the version information.
33
# set(CMAKE_JAVA_TARGET_VERSION 1.2.0)
34
# add_jar(shibboleet shibbotleet.java)
36
# If the target is a JNI library, utilize the following commands to
37
# create a JNI symbolic link:
39
# set(CMAKE_JNI_TARGET TRUE)
40
# set(CMAKE_JAVA_TARGET_VERSION 1.2.0)
41
# add_jar(shibboleet shibbotleet.java)
42
# install_jar(shibboleet ${LIB_INSTALL_DIR}/shibboleet)
43
# install_jni_symlink(shibboleet ${JAVA_LIB_INSTALL_DIR})
45
# If a single target needs to produce more than one jar from its
46
# java source code, to prevent the accumulation of duplicate class
47
# files in subsequent jars, set/reset CMAKE_JAR_CLASSES_PREFIX prior
48
# to calling the add_jar() function:
50
# set(CMAKE_JAR_CLASSES_PREFIX com/redhat/foo)
51
# add_jar(foo foo.java)
53
# set(CMAKE_JAR_CLASSES_PREFIX com/redhat/bar)
54
# add_jar(bar bar.java)
57
# The add_jar() functions sets some target properties. You can get these
59
# get_property(TARGET <target_name> PROPERTY <propery_name>)
62
# INSTALL_FILES The files which should be installed. This is used by
64
# JNI_SYMLINK The JNI symlink which should be installed.
65
# This is used by install_jni_symlink().
66
# JAR_FILE The location of the jar file so that you can include
68
# CLASS_DIR The directory where the class files can be found. For
69
# example to use them with javah.
72
# name | NAMES name1 [name2 ...]
73
# [PATHS path1 [path2 ... ENV var]]
74
# [VERSIONS version1 [version2]]
75
# [DOC "cache documentation string"]
78
# This command is used to find a full path to the named jar. A cache
79
# entry named by <VAR> is created to stor the result of this command. If
80
# the full path to a jar is found the result is stored in the variable
81
# and the search will not repeated unless the variable is cleared. If
82
# nothing is found, the result will be <VAR>-NOTFOUND, and the search
83
# will be attempted again next time find_jar is invoked with the same
85
# The name of the full path to a file that is searched for is specified
86
# by the names listed after NAMES argument. Additional search locations
87
# can be specified after the PATHS argument. If you require special a
88
# version of a jar file you can specify it with the VERSIONS argument.
89
# The argument after DOC will be used for the documentation string in
92
# install_jar(TARGET_NAME DESTINATION)
94
# This command installs the TARGET_NAME files to the given DESTINATION.
95
# It should be called in the same scope as add_jar() or it will fail.
97
# install_jni_symlink(TARGET_NAME DESTINATION)
99
# This command installs the TARGET_NAME JNI symlinks to the given
100
# DESTINATION. It should be called in the same scope as add_jar()
103
# create_javadoc(<VAR>
104
# PACKAGES pkg1 [pkg2 ...]
105
# [SOURCEPATH <sourcepath>]
106
# [CLASSPATH <classpath>]
107
# [INSTALLPATH <install path>]
108
# [DOCTITLE "the documentation title"]
109
# [WINDOWTITLE "the title of the document"]
110
# [AUTHOR TRUE|FALSE]
112
# [VERSION TRUE|FALSE]
115
# Create jave documentation based on files or packages. For more
116
# details please read the javadoc manpage.
118
# There are two main signatures for create_javadoc. The first
119
# signature works with package names on a path with source files:
122
# create_javadoc(my_example_doc
123
# PACKAGES com.exmaple.foo com.example.bar
124
# SOURCEPATH ${CMAKE_CURRENT_SOURCE_PATH}
125
# CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH}
126
# WINDOWTITLE "My example"
127
# DOCTITLE "<h1>My example</h1>"
133
# The second signature for create_javadoc works on a given list of
136
# create_javadoc(<VAR>
137
# FILES file1 [file2 ...]
138
# [CLASSPATH <classpath>]
139
# [INSTALLPATH <install path>]
140
# [DOCTITLE "the documentation title"]
141
# [WINDOWTITLE "the title of the document"]
142
# [AUTHOR TRUE|FALSE]
144
# [VERSION TRUE|FALSE]
148
# create_javadoc(my_example_doc
149
# FILES ${example_SRCS}
150
# CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH}
151
# WINDOWTITLE "My example"
152
# DOCTITLE "<h1>My example</h1>"
158
# Both signatures share most of the options. These options are the
159
# same as what you can find in the javadoc manpage. Please look at
160
# the manpage for CLASSPATH, DOCTITLE, WINDOWTITLE, AUTHOR, USE and
163
# The documentation will be by default installed to
165
# ${CMAKE_INSTALL_PREFIX}/share/javadoc/<VAR>
167
# if you don't set the INSTALLPATH.
170
#=============================================================================
171
# Copyright 2010-2011 Andreas schneider <asn@redhat.com>
172
# Copyright 2010 Ben Boeckel <ben.boeckel@kitware.com>
174
# Distributed under the OSI-approved BSD License (the "License");
175
# see accompanying file Copyright.txt for details.
177
# This software is distributed WITHOUT ANY WARRANTY; without even the
178
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
179
# See the License for more information.
180
#=============================================================================
181
# (To distribute this file outside of CMake, substitute the full
182
# License text for the above reference.)
184
function (__java_copy_file src dest comment)
187
COMMAND cmake -E copy_if_different
192
endfunction (__java_copy_file src dest comment)
194
# define helper scripts
195
set(_JAVA_CLASS_FILELIST_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/UseJavaClassFilelist.cmake)
196
set(_JAVA_SYMLINK_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/UseJavaSymlinks.cmake)
198
function(add_jar _TARGET_NAME)
199
set(_JAVA_SOURCE_FILES ${ARGN})
201
if (LIBRARY_OUTPUT_PATH)
202
set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH})
203
else (LIBRARY_OUTPUT_PATH)
204
set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
205
endif (LIBRARY_OUTPUT_PATH)
207
set(CMAKE_JAVA_INCLUDE_PATH
208
${CMAKE_JAVA_INCLUDE_PATH}
209
${CMAKE_CURRENT_SOURCE_DIR}
210
${CMAKE_JAVA_OBJECT_OUTPUT_PATH}
211
${CMAKE_JAVA_LIBRARY_OUTPUT_PATH}
214
if (WIN32 AND NOT CYGWIN)
215
set(CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
216
else (WIN32 AND NOT CYGWIN)
217
set(CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
218
endif(WIN32 AND NOT CYGWIN)
220
foreach (JAVA_INCLUDE_DIR ${CMAKE_JAVA_INCLUDE_PATH})
221
set(CMAKE_JAVA_INCLUDE_PATH_FINAL "${CMAKE_JAVA_INCLUDE_PATH_FINAL}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${JAVA_INCLUDE_DIR}")
222
endforeach(JAVA_INCLUDE_DIR)
224
set(CMAKE_JAVA_CLASS_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir")
226
set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}.jar")
227
if (CMAKE_JAVA_TARGET_OUTPUT_NAME AND CMAKE_JAVA_TARGET_VERSION)
228
set(_JAVA_TARGET_OUTPUT_NAME "${CMAKE_JAVA_TARGET_OUTPUT_NAME}-${CMAKE_JAVA_TARGET_VERSION}.jar")
229
set(_JAVA_TARGET_OUTPUT_LINK "${CMAKE_JAVA_TARGET_OUTPUT_NAME}.jar")
230
elseif (CMAKE_JAVA_TARGET_VERSION)
231
set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}-${CMAKE_JAVA_TARGET_VERSION}.jar")
232
set(_JAVA_TARGET_OUTPUT_LINK "${_TARGET_NAME}.jar")
233
elseif (CMAKE_JAVA_TARGET_OUTPUT_NAME)
234
set(_JAVA_TARGET_OUTPUT_NAME "${CMAKE_JAVA_TARGET_OUTPUT_NAME}.jar")
235
endif (CMAKE_JAVA_TARGET_OUTPUT_NAME AND CMAKE_JAVA_TARGET_VERSION)
237
set(CMAKE_JAVA_TARGET_OUTPUT_NAME)
239
set(_JAVA_CLASS_FILES)
240
set(_JAVA_COMPILE_FILES)
242
set(_JAVA_RESOURCE_FILES)
243
foreach(_JAVA_SOURCE_FILE ${_JAVA_SOURCE_FILES})
244
get_filename_component(_JAVA_EXT ${_JAVA_SOURCE_FILE} EXT)
245
get_filename_component(_JAVA_FILE ${_JAVA_SOURCE_FILE} NAME_WE)
246
get_filename_component(_JAVA_PATH ${_JAVA_SOURCE_FILE} PATH)
247
get_filename_component(_JAVA_FULL ${_JAVA_SOURCE_FILE} ABSOLUTE)
249
file(RELATIVE_PATH _JAVA_REL_BINARY_PATH ${CMAKE_CURRENT_BINARY_DIR} ${_JAVA_FULL})
250
file(RELATIVE_PATH _JAVA_REL_SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${_JAVA_FULL})
251
string(LENGTH ${_JAVA_REL_BINARY_PATH} _BIN_LEN)
252
string(LENGTH ${_JAVA_REL_SOURCE_PATH} _SRC_LEN)
253
if (${_BIN_LEN} LESS ${_SRC_LEN})
254
set(_JAVA_REL_PATH ${_JAVA_REL_BINARY_PATH})
255
else (${_BIN_LEN} LESS ${_SRC_LEN})
256
set(_JAVA_REL_PATH ${_JAVA_REL_SOURCE_PATH})
257
endif (${_BIN_LEN} LESS ${_SRC_LEN})
258
get_filename_component(_JAVA_REL_PATH ${_JAVA_REL_PATH} PATH)
260
if (_JAVA_EXT MATCHES ".java")
261
list(APPEND _JAVA_COMPILE_FILES ${_JAVA_SOURCE_FILE})
262
set(_JAVA_CLASS_FILE "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_REL_PATH}/${_JAVA_FILE}.class")
263
set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES} ${_JAVA_CLASS_FILE})
265
elseif (_JAVA_EXT MATCHES ".jar"
266
OR _JAVA_EXT MATCHES ".war"
267
OR _JAVA_EXT MATCHES ".ear"
268
OR _JAVA_EXT MATCHES ".sar")
269
list(APPEND CMAKE_JAVA_INCLUDE_PATH ${_JAVA_SOURCE_FILE})
271
elseif (_JAVA_EXT STREQUAL "")
272
list(APPEND CMAKE_JAVA_INCLUDE_PATH ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}} ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}_CLASSPATH})
273
list(APPEND _JAVA_DEPENDS ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}})
275
else (_JAVA_EXT MATCHES ".java")
276
__java_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/${_JAVA_SOURCE_FILE}
277
${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_SOURCE_FILE}
278
"Copying ${_JAVA_SOURCE_FILE} to the build directory")
279
list(APPEND _JAVA_RESOURCE_FILES ${_JAVA_SOURCE_FILE})
280
endif (_JAVA_EXT MATCHES ".java")
281
endforeach(_JAVA_SOURCE_FILE)
283
# create an empty java_class_filelist
284
if (NOT EXISTS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist)
285
file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist "")
288
if (_JAVA_COMPILE_FILES)
289
# Compile the java files and create a list of class files
291
# NOTE: this command generates an artificial dependency file
292
OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
293
COMMAND ${Java_JAVAC_EXECUTABLE}
294
${CMAKE_JAVA_COMPILE_FLAGS}
295
-classpath "${CMAKE_JAVA_INCLUDE_PATH_FINAL}"
296
-d ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
297
${_JAVA_COMPILE_FILES}
298
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
299
DEPENDS ${_JAVA_COMPILE_FILES}
300
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
301
COMMENT "Building Java objects for ${_TARGET_NAME}.jar"
304
OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
305
COMMAND ${CMAKE_COMMAND}
306
-DCMAKE_JAVA_CLASS_OUTPUT_PATH=${CMAKE_JAVA_CLASS_OUTPUT_PATH}
307
-DCMAKE_JAR_CLASSES_PREFIX="${CMAKE_JAR_CLASSES_PREFIX}"
308
-P ${_JAVA_CLASS_FILELIST_SCRIPT}
309
DEPENDS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
310
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
312
endif (_JAVA_COMPILE_FILES)
314
# create the jar file
315
if (CMAKE_JNI_TARGET)
317
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
318
COMMAND ${Java_JAR_EXECUTABLE}
319
-cf ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
320
${_JAVA_RESOURCE_FILES} @java_class_filelist
321
COMMAND ${CMAKE_COMMAND}
322
-D_JAVA_TARGET_DIR=${CMAKE_CURRENT_BINARY_DIR}
323
-D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME}
324
-D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
325
-P ${_JAVA_SYMLINK_SCRIPT}
326
COMMAND ${CMAKE_COMMAND}
327
-D_JAVA_TARGET_DIR=${CMAKE_CURRENT_BINARY_DIR}
328
-D_JAVA_TARGET_OUTPUT_NAME=${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
329
-D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
330
-P ${_JAVA_SYMLINK_SCRIPT}
331
DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
332
WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
333
COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}"
337
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
338
COMMAND ${Java_JAR_EXECUTABLE}
339
-cf ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
340
${_JAVA_RESOURCE_FILES} @java_class_filelist
341
COMMAND ${CMAKE_COMMAND}
342
-D_JAVA_TARGET_DIR=${CMAKE_CURRENT_BINARY_DIR}
343
-D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME}
344
-D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
345
-P ${_JAVA_SYMLINK_SCRIPT}
346
WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
347
DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
348
COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}"
350
endif (CMAKE_JNI_TARGET)
352
# Add the target and make sure we have the latest resource files.
353
add_custom_target(${_TARGET_NAME} ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME})
360
${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
363
if (_JAVA_TARGET_OUTPUT_LINK)
369
${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
370
${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_LINK}
373
if (CMAKE_JNI_TARGET)
379
${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_LINK}
381
endif (CMAKE_JNI_TARGET)
382
endif (_JAVA_TARGET_OUTPUT_LINK)
389
${CMAKE_CURRENT_BINARY_DIR}/${_JAVA_TARGET_OUTPUT_NAME}
397
${CMAKE_JAVA_CLASS_OUTPUT_PATH}
402
function(INSTALL_JAR _TARGET_NAME _DESTINATION)
418
message(SEND_ERROR "The target ${_TARGET_NAME} is not known in this scope.")
420
endfunction(INSTALL_JAR _TARGET_NAME _DESTINATION)
422
function(INSTALL_JNI_SYMLINK _TARGET_NAME _DESTINATION)
423
get_property(__SYMLINK
438
message(SEND_ERROR "The target ${_TARGET_NAME} is not known in this scope.")
440
endfunction(INSTALL_JNI_SYMLINK _TARGET_NAME _DESTINATION)
442
function (find_jar VARIABLE)
448
/usr/local/share/java/
450
set(_jar_doc "NOTSET")
454
foreach (arg ${ARGN})
455
if (${_state} STREQUAL "name")
456
if (${arg} STREQUAL "VERSIONS")
457
set(_state "versions")
458
elseif (${arg} STREQUAL "NAMES")
460
elseif (${arg} STREQUAL "PATHS")
462
elseif (${arg} STREQUAL "DOC")
464
else (${arg} STREQUAL "NAMES")
465
set(_jar_names ${arg})
466
if (_jar_doc STREQUAL "NOTSET")
467
set(_jar_doc "Finding ${arg} jar")
468
endif (_jar_doc STREQUAL "NOTSET")
469
endif (${arg} STREQUAL "VERSIONS")
470
elseif (${_state} STREQUAL "versions")
471
if (${arg} STREQUAL "NAMES")
473
elseif (${arg} STREQUAL "PATHS")
475
elseif (${arg} STREQUAL "DOC")
477
else (${arg} STREQUAL "NAMES")
478
set(_jar_versions ${_jar_versions} ${arg})
479
endif (${arg} STREQUAL "NAMES")
480
elseif (${_state} STREQUAL "names")
481
if (${arg} STREQUAL "VERSIONS")
482
set(_state "versions")
483
elseif (${arg} STREQUAL "PATHS")
485
elseif (${arg} STREQUAL "DOC")
487
else (${arg} STREQUAL "VERSIONS")
488
set(_jar_names ${_jar_names} ${arg})
489
if (_jar_doc STREQUAL "NOTSET")
490
set(_jar_doc "Finding ${arg} jar")
491
endif (_jar_doc STREQUAL "NOTSET")
492
endif (${arg} STREQUAL "VERSIONS")
493
elseif (${_state} STREQUAL "paths")
494
if (${arg} STREQUAL "VERSIONS")
495
set(_state "versions")
496
elseif (${arg} STREQUAL "NAMES")
498
elseif (${arg} STREQUAL "DOC")
500
else (${arg} STREQUAL "VERSIONS")
501
set(_jar_paths ${_jar_paths} ${arg})
502
endif (${arg} STREQUAL "VERSIONS")
503
elseif (${_state} STREQUAL "doc")
504
if (${arg} STREQUAL "VERSIONS")
505
set(_state "versions")
506
elseif (${arg} STREQUAL "NAMES")
508
elseif (${arg} STREQUAL "PATHS")
510
else (${arg} STREQUAL "VERSIONS")
512
endif (${arg} STREQUAL "VERSIONS")
513
endif (${_state} STREQUAL "name")
514
endforeach (arg ${ARGN})
516
if (${_jar_names} STREQUAL "")
517
message(FATAL_ERROR "find_jar: No name to search for given")
518
endif (${_jar_names} STREQUAL "")
520
foreach (jar_name ${_jar_names})
521
foreach (version ${_jar_versions})
522
set(_jar_files ${_jar_files} ${jar_name}-${version}.jar)
523
endforeach (version ${_jar_versions})
524
set(_jar_files ${_jar_files} ${jar_name}.jar)
525
endforeach (jar_name ${_jar_names})
527
find_file(${VARIABLE}
532
endfunction (find_jar VARIABLE)
534
function(create_javadoc _target)
535
set(_javadoc_packages)
537
set(_javadoc_sourcepath)
538
set(_javadoc_classpath)
539
set(_javadoc_installpath "${CMAKE_INSTALL_PREFIX}/share/javadoc")
540
set(_javadoc_doctitle)
541
set(_javadoc_windowtitle)
542
set(_javadoc_author FALSE)
543
set(_javadoc_version FALSE)
544
set(_javadoc_use FALSE)
546
set(_state "package")
548
foreach (arg ${ARGN})
549
if (${_state} STREQUAL "package")
550
if (${arg} STREQUAL "PACKAGES")
551
set(_state "packages")
552
elseif (${arg} STREQUAL "FILES")
554
elseif (${arg} STREQUAL "SOURCEPATH")
555
set(_state "sourcepath")
556
elseif (${arg} STREQUAL "CLASSPATH")
557
set(_state "classpath")
558
elseif (${arg} STREQUAL "INSTALLPATH")
559
set(_state "installpath")
560
elseif (${arg} STREQUAL "DOCTITLE")
561
set(_state "doctitle")
562
elseif (${arg} STREQUAL "WINDOWTITLE")
563
set(_state "windowtitle")
564
elseif (${arg} STREQUAL "AUTHOR")
566
elseif (${arg} STREQUAL "USE")
568
elseif (${arg} STREQUAL "VERSION")
569
set(_state "version")
571
set(_javadoc_packages ${arg})
572
set(_state "packages")
574
elseif (${_state} STREQUAL "packages")
575
if (${arg} STREQUAL "FILES")
577
elseif (${arg} STREQUAL "SOURCEPATH")
578
set(_state "sourcepath")
579
elseif (${arg} STREQUAL "CLASSPATH")
580
set(_state "classpath")
581
elseif (${arg} STREQUAL "INSTALLPATH")
582
set(_state "installpath")
583
elseif (${arg} STREQUAL "DOCTITLE")
584
set(_state "doctitle")
585
elseif (${arg} STREQUAL "WINDOWTITLE")
586
set(_state "windowtitle")
587
elseif (${arg} STREQUAL "AUTHOR")
589
elseif (${arg} STREQUAL "USE")
591
elseif (${arg} STREQUAL "VERSION")
592
set(_state "version")
594
list(APPEND _javadoc_packages ${arg})
596
elseif (${_state} STREQUAL "files")
597
if (${arg} STREQUAL "PACKAGES")
598
set(_state "packages")
599
elseif (${arg} STREQUAL "SOURCEPATH")
600
set(_state "sourcepath")
601
elseif (${arg} STREQUAL "CLASSPATH")
602
set(_state "classpath")
603
elseif (${arg} STREQUAL "INSTALLPATH")
604
set(_state "installpath")
605
elseif (${arg} STREQUAL "DOCTITLE")
606
set(_state "doctitle")
607
elseif (${arg} STREQUAL "WINDOWTITLE")
608
set(_state "windowtitle")
609
elseif (${arg} STREQUAL "AUTHOR")
611
elseif (${arg} STREQUAL "USE")
613
elseif (${arg} STREQUAL "VERSION")
614
set(_state "version")
616
list(APPEND _javadoc_files ${arg})
618
elseif (${_state} STREQUAL "sourcepath")
619
if (${arg} STREQUAL "PACKAGES")
620
set(_state "packages")
621
elseif (${arg} STREQUAL "FILES")
623
elseif (${arg} STREQUAL "CLASSPATH")
624
set(_state "classpath")
625
elseif (${arg} STREQUAL "INSTALLPATH")
626
set(_state "installpath")
627
elseif (${arg} STREQUAL "DOCTITLE")
628
set(_state "doctitle")
629
elseif (${arg} STREQUAL "WINDOWTITLE")
630
set(_state "windowtitle")
631
elseif (${arg} STREQUAL "AUTHOR")
633
elseif (${arg} STREQUAL "USE")
635
elseif (${arg} STREQUAL "VERSION")
636
set(_state "version")
638
list(APPEND _javadoc_sourcepath ${arg})
640
elseif (${_state} STREQUAL "classpath")
641
if (${arg} STREQUAL "PACKAGES")
642
set(_state "packages")
643
elseif (${arg} STREQUAL "FILES")
645
elseif (${arg} STREQUAL "SOURCEPATH")
646
set(_state "sourcepath")
647
elseif (${arg} STREQUAL "INSTALLPATH")
648
set(_state "installpath")
649
elseif (${arg} STREQUAL "DOCTITLE")
650
set(_state "doctitle")
651
elseif (${arg} STREQUAL "WINDOWTITLE")
652
set(_state "windowtitle")
653
elseif (${arg} STREQUAL "AUTHOR")
655
elseif (${arg} STREQUAL "USE")
657
elseif (${arg} STREQUAL "VERSION")
658
set(_state "version")
660
list(APPEND _javadoc_classpath ${arg})
662
elseif (${_state} STREQUAL "installpath")
663
if (${arg} STREQUAL "PACKAGES")
664
set(_state "packages")
665
elseif (${arg} STREQUAL "FILES")
667
elseif (${arg} STREQUAL "SOURCEPATH")
668
set(_state "sourcepath")
669
elseif (${arg} STREQUAL "DOCTITLE")
670
set(_state "doctitle")
671
elseif (${arg} STREQUAL "WINDOWTITLE")
672
set(_state "windowtitle")
673
elseif (${arg} STREQUAL "AUTHOR")
675
elseif (${arg} STREQUAL "USE")
677
elseif (${arg} STREQUAL "VERSION")
678
set(_state "version")
680
set(_javadoc_installpath ${arg})
682
elseif (${_state} STREQUAL "doctitle")
683
if (${arg} STREQUAL "PACKAGES")
684
set(_state "packages")
685
elseif (${arg} STREQUAL "FILES")
687
elseif (${arg} STREQUAL "SOURCEPATH")
688
set(_state "sourcepath")
689
elseif (${arg} STREQUAL "INSTALLPATH")
690
set(_state "installpath")
691
elseif (${arg} STREQUAL "CLASSPATH")
692
set(_state "classpath")
693
elseif (${arg} STREQUAL "WINDOWTITLE")
694
set(_state "windowtitle")
695
elseif (${arg} STREQUAL "AUTHOR")
697
elseif (${arg} STREQUAL "USE")
699
elseif (${arg} STREQUAL "VERSION")
700
set(_state "version")
702
set(_javadoc_doctitle ${arg})
704
elseif (${_state} STREQUAL "windowtitle")
705
if (${arg} STREQUAL "PACKAGES")
706
set(_state "packages")
707
elseif (${arg} STREQUAL "FILES")
709
elseif (${arg} STREQUAL "SOURCEPATH")
710
set(_state "sourcepath")
711
elseif (${arg} STREQUAL "CLASSPATH")
712
set(_state "classpath")
713
elseif (${arg} STREQUAL "INSTALLPATH")
714
set(_state "installpath")
715
elseif (${arg} STREQUAL "DOCTITLE")
716
set(_state "doctitle")
717
elseif (${arg} STREQUAL "AUTHOR")
719
elseif (${arg} STREQUAL "USE")
721
elseif (${arg} STREQUAL "VERSION")
722
set(_state "version")
724
set(_javadoc_windowtitle ${arg})
726
elseif (${_state} STREQUAL "author")
727
if (${arg} STREQUAL "PACKAGES")
728
set(_state "packages")
729
elseif (${arg} STREQUAL "FILES")
731
elseif (${arg} STREQUAL "SOURCEPATH")
732
set(_state "sourcepath")
733
elseif (${arg} STREQUAL "CLASSPATH")
734
set(_state "classpath")
735
elseif (${arg} STREQUAL "INSTALLPATH")
736
set(_state "installpath")
737
elseif (${arg} STREQUAL "DOCTITLE")
738
set(_state "doctitle")
739
elseif (${arg} STREQUAL "WINDOWTITLE")
740
set(_state "windowtitle")
741
elseif (${arg} STREQUAL "AUTHOR")
743
elseif (${arg} STREQUAL "USE")
745
elseif (${arg} STREQUAL "VERSION")
746
set(_state "version")
748
set(_javadoc_author ${arg})
750
elseif (${_state} STREQUAL "use")
751
if (${arg} STREQUAL "PACKAGES")
752
set(_state "packages")
753
elseif (${arg} STREQUAL "FILES")
755
elseif (${arg} STREQUAL "SOURCEPATH")
756
set(_state "sourcepath")
757
elseif (${arg} STREQUAL "CLASSPATH")
758
set(_state "classpath")
759
elseif (${arg} STREQUAL "INSTALLPATH")
760
set(_state "installpath")
761
elseif (${arg} STREQUAL "DOCTITLE")
762
set(_state "doctitle")
763
elseif (${arg} STREQUAL "WINDOWTITLE")
764
set(_state "windowtitle")
765
elseif (${arg} STREQUAL "AUTHOR")
767
elseif (${arg} STREQUAL "USE")
769
elseif (${arg} STREQUAL "VERSION")
770
set(_state "version")
772
set(_javadoc_use ${arg})
774
elseif (${_state} STREQUAL "version")
775
if (${arg} STREQUAL "PACKAGES")
776
set(_state "packages")
777
elseif (${arg} STREQUAL "FILES")
779
elseif (${arg} STREQUAL "SOURCEPATH")
780
set(_state "sourcepath")
781
elseif (${arg} STREQUAL "CLASSPATH")
782
set(_state "classpath")
783
elseif (${arg} STREQUAL "INSTALLPATH")
784
set(_state "installpath")
785
elseif (${arg} STREQUAL "DOCTITLE")
786
set(_state "doctitle")
787
elseif (${arg} STREQUAL "WINDOWTITLE")
788
set(_state "windowtitle")
789
elseif (${arg} STREQUAL "AUTHOR")
791
elseif (${arg} STREQUAL "USE")
793
elseif (${arg} STREQUAL "VERSION")
794
set(_state "version")
796
set(_javadoc_version ${arg})
798
endif (${_state} STREQUAL "package")
799
endforeach (arg ${ARGN})
801
set(_javadoc_builddir ${CMAKE_CURRENT_BINARY_DIR}/javadoc/${_target})
802
set(_javadoc_options -d ${_javadoc_builddir})
804
if (_javadoc_sourcepath)
806
foreach(_path ${_javadoc_sourcepath})
808
set(_sourcepath ${_path})
811
set(_sourcepath ${_sourcepath}:${_path})
813
endforeach(_path ${_javadoc_sourcepath})
814
set(_javadoc_options ${_javadoc_options} -sourcepath ${_sourcepath})
815
endif (_javadoc_sourcepath)
817
if (_javadoc_classpath)
819
foreach(_path ${_javadoc_classpath})
821
set(_classpath ${_path})
824
set(_classpath ${_classpath}:${_path})
826
endforeach(_path ${_javadoc_classpath})
827
set(_javadoc_options ${_javadoc_options} -classpath "${_classpath}")
828
endif (_javadoc_classpath)
830
if (_javadoc_doctitle)
831
set(_javadoc_options ${_javadoc_options} -doctitle '${_javadoc_doctitle}')
832
endif (_javadoc_doctitle)
834
if (_javadoc_windowtitle)
835
set(_javadoc_options ${_javadoc_options} -windowtitle '${_javadoc_windowtitle}')
836
endif (_javadoc_windowtitle)
839
set(_javadoc_options ${_javadoc_options} -author)
840
endif (_javadoc_author)
843
set(_javadoc_options ${_javadoc_options} -use)
846
if (_javadoc_version)
847
set(_javadoc_options ${_javadoc_options} -version)
848
endif (_javadoc_version)
850
add_custom_target(${_target}_javadoc ALL
851
COMMAND ${Java_JAVADOC_EXECUTABLE} ${_javadoc_options}
854
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
858
DIRECTORY ${_javadoc_builddir}
859
DESTINATION ${_javadoc_installpath}
861
endfunction(create_javadoc)