View Issue Details Jump to Notes ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0001123CMakeCMakepublic2004-08-31 16:052016-06-10 14:30
ReporterDouglas Gregor 
Assigned ToBill Hoffman 
PrioritylowSeveritymajorReproducibilityalways
StatusclosedResolutionmoved 
PlatformOSOS Version
Product Version 
Target VersionFixed in Version 
Summary0001123: ADD_JAVA_LIBRARY does not support multiple .java files or package hierarchies
DescriptionAttempting to use ADD_JAVA_LIBRARY with multiple .java files and with .java files stored in subdirectories does not produce the desired results, e.g.,

ADD_JAVA_LIBRARY(bgl
  edu/iu/osl/bgl/Graph.java edu/iu/osl/bgl/GraphMLPersister.java)

Ideally, this would compile both .java files and place all of the class files into bgl.jar, retaining the directory structure (e.g., Graph.class is in subdirectory edu/iu/osl/bgl). The result with CMake 2.0.3 is that only the first .java file is compiled but the Jar file ends up emplty.

The following patch (against CMake 2.0.3) solves both problems, and has been tested on Windows XP and MacOS X Panther (10.3).

--- /u/dgregor/Desktop/cmake-2.0.3/Modules/CMakeJavaCompiler.cmake.in Thu Dec 26 19:59:21 2002
+++ /u/dgregor/CMakeJavaCompiler.cmake.in Mon Aug 30 15:06:05 2004
@@ -30,31 +30,40 @@
     ADD_CUSTOM_TARGET(${LIBRARYNAME}_target ALL)
 
     SET(CMAKE_JAVA_ALL_CLASS_FILES "")
- FOREACH(SOURCE ${SOURCES})
- GET_FILENAME_COMPONENT(CLASS_FILE ${SOURCE} NAME_WE)
- ADD_CUSTOM_COMMAND(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE}
- COMMAND ${CMAKE_JAVA_COMPILER}
- ARGS ${CMAKE_JAVA_COMPILE_FLAGS}
- -classpath ${CMAKE_JAVA_INCLUDE_PATH_TOTAL}
- ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE}
- -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/
- TARGET ${LIBRARYNAME}_target
- OUTPUTS ${CLASS_FILE}.class
- COMMENT "Java File" )
- SET(CMAKE_JAVA_ALL_CLASS_FILES ${CMAKE_JAVA_ALL_CLASS_FILES} ${CLASS_FILE}.class)
+ SET(CMAKE_JAVA_ALL_CLASS_FILE_PATHS "")
+ SET(SKIP 1)
+ FOREACH(SOURCE ${ARGV})
+ IF(SKIP)
+ SET(SKIP 0)
+ ELSE(SKIP)
+ GET_FILENAME_COMPONENT(CLASS_FILE_PATH ${SOURCE} PATH)
+ GET_FILENAME_COMPONENT(CLASS_FILE_NAME ${SOURCE} NAME_WE)
+ SET(CLASS_FILE "${CLASS_FILE_PATH}/${CLASS_FILE_NAME}")
+ ADD_CUSTOM_COMMAND(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE}
+ COMMAND ${CMAKE_JAVA_COMPILER}
+ ARGS ${CMAKE_JAVA_COMPILE_FLAGS}
+ -classpath ${CMAKE_JAVA_INCLUDE_PATH_TOTAL}
+ ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE}
+ -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/
+ TARGET ${LIBRARYNAME}_target
+ OUTPUTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${CLASS_FILE}.class"
+ COMMENT "Java File" )
+ SET(CMAKE_JAVA_ALL_CLASS_FILES ${CMAKE_JAVA_ALL_CLASS_FILES} ${CLASS_FILE}.class)
+ SET(CMAKE_JAVA_ALL_CLASS_FILE_PATHS ${CMAKE_JAVA_ALL_CLASS_FILE_PATHS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${CLASS_FILE}.class)
+ ENDIF(SKIP)
     ENDFOREACH(SOURCE)
     IF(LIBRARY_OUTPUT_PATH)
       SET(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH})
     ELSE(LIBRARY_OUTPUT_PATH)
       SET(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
     ENDIF(LIBRARY_OUTPUT_PATH)
- ADD_CUSTOM_COMMAND(SOURCE ${CMAKE_JAVA_ALL_CLASS_FILES}
+ ADD_CUSTOM_COMMAND(SOURCE ${CMAKE_JAVA_ALL_CLASS_FILE_PATHS}
                        COMMAND ${CMAKE_COMMAND}
                        ARGS -E chdir ${CMAKE_CURRENT_BINARY_DIR}
- ${CMAKE_JAVA_ARCHIVE}
- -cvf ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH}/${LIBRARYNAME}.jar *.class
+ ${CMAKE_JAVA_ARCHIVE}
+ -cvf ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH}/${LIBRARYNAME}.jar ${CMAKE_JAVA_ALL_CLASS_FILES}
                        TARGET ${LIBRARYNAME}_target
- DEPENDS ${CMAKE_JAVA_ALL_CLASS_FILES}
+ DEPENDS ${CMAKE_JAVA_ALL_CLASS_FILE_PATHS}
                        OUTPUTS ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH}/${LIBRARYNAME}.jar
                        COMMENT "Java Archive")
     ADD_CUSTOM_COMMAND(SOURCE ${LIBRARYNAME}_target
@@ -63,4 +72,4 @@
   ELSE(CMAKE_JAVA_COMPILER AND CMAKE_JAVA_ARCHIVE)
     MESSAGE(SEND_ERROR "Java compiler and/or Java archiver not found")
   ENDIF(CMAKE_JAVA_COMPILER AND CMAKE_JAVA_ARCHIVE)
-ENDMACRO(ADD_JAVA_LIBRARY LIBRARYNAME SOURCES)
\ No newline at end of file
+ENDMACRO(ADD_JAVA_LIBRARY LIBRARYNAME SOURCES)
TagsNo tags attached.
Attached Files

 Relationships

  Notes
(0006504)
Bill Hoffman (manager)
2007-02-21 10:46

Will this work with 2.4.6?
(0041295)
Kitware Robot (administrator)
2016-06-10 14:27

Resolving issue as `moved`.

This issue tracker is no longer used. Further discussion of this issue may take place in the current CMake Issues page linked in the banner at the top of this page.

 Issue History
Date Modified Username Field Change
2016-06-10 14:27 Kitware Robot Note Added: 0041295
2016-06-10 14:27 Kitware Robot Status assigned => resolved
2016-06-10 14:27 Kitware Robot Resolution open => moved
2016-06-10 14:30 Kitware Robot Status resolved => closed


Copyright © 2000 - 2018 MantisBT Team