UseJava: Pass sources to javac using response file (#13028)
The command line string passed to javac can exceed the 8191-character limit on Windows when there are a large number of files to compile. To avoid this, the list of sources is written to a file which is then passed to javac as an argfile. Spaces in paths are dealt with by enclosing each file in quotes, and separating files with a newline.
This commit is contained in:
parent
029e836a21
commit
177c0516ce
|
@ -190,6 +190,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
|
# Copyright 2013 OpenGamma Ltd. <graham@opengamma.com>
|
||||||
# Copyright 2010-2011 Andreas schneider <asn@redhat.com>
|
# Copyright 2010-2011 Andreas schneider <asn@redhat.com>
|
||||||
# Copyright 2010 Ben Boeckel <ben.boeckel@kitware.com>
|
# Copyright 2010 Ben Boeckel <ben.boeckel@kitware.com>
|
||||||
#
|
#
|
||||||
|
@ -367,6 +368,11 @@ function(add_jar _TARGET_NAME)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (_JAVA_COMPILE_FILES)
|
if (_JAVA_COMPILE_FILES)
|
||||||
|
# Create the list of files to compile.
|
||||||
|
set(_JAVA_SOURCES_FILE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_sources)
|
||||||
|
string(REPLACE ";" "\"\n\"" _JAVA_COMPILE_STRING "\"${_JAVA_COMPILE_FILES}\"")
|
||||||
|
file(WRITE ${_JAVA_SOURCES_FILE} ${_JAVA_COMPILE_STRING})
|
||||||
|
|
||||||
# Compile the java files and create a list of class files
|
# Compile the java files and create a list of class files
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
# NOTE: this command generates an artificial dependency file
|
# NOTE: this command generates an artificial dependency file
|
||||||
|
@ -375,7 +381,7 @@ function(add_jar _TARGET_NAME)
|
||||||
${CMAKE_JAVA_COMPILE_FLAGS}
|
${CMAKE_JAVA_COMPILE_FLAGS}
|
||||||
-classpath "${CMAKE_JAVA_INCLUDE_PATH_FINAL}"
|
-classpath "${CMAKE_JAVA_INCLUDE_PATH_FINAL}"
|
||||||
-d ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
|
-d ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
|
||||||
${_JAVA_COMPILE_FILES}
|
@${_JAVA_SOURCES_FILE}
|
||||||
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
|
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
|
||||||
DEPENDS ${_JAVA_COMPILE_FILES} ${_JAVA_COMPILE_DEPENDS}
|
DEPENDS ${_JAVA_COMPILE_FILES} ${_JAVA_COMPILE_DEPENDS}
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
|
Loading…
Reference in New Issue