Skip to content

Commit 23c2f4e

Browse files
committed
cmake: rework java.cmake
1 parent ed67eb9 commit 23c2f4e

File tree

1 file changed

+80
-64
lines changed

1 file changed

+80
-64
lines changed

cmake/java.cmake

+80-64
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ if(UNIX AND NOT APPLE)
1212
endif()
1313

1414
# Find Java and JNI
15-
find_package(Java COMPONENTS Development REQUIRED)
15+
find_package(Java 1.8 COMPONENTS Development REQUIRED)
1616
find_package(JNI REQUIRED)
1717

1818
# Find maven
@@ -85,6 +85,73 @@ set(JAVA_SRC_PATH src/main/java/${JAVA_DOMAIN_EXTENSION}/${JAVA_DOMAIN_NAME}/${J
8585
set(JAVA_TEST_PATH src/test/java/${JAVA_DOMAIN_EXTENSION}/${JAVA_DOMAIN_NAME}/${JAVA_ARTIFACT})
8686
set(JAVA_RESSOURCES_PATH src/main/resources)
8787

88+
#################
89+
## Java Test ##
90+
#################
91+
# add_java_test()
92+
# CMake function to generate and build java test.
93+
# Parameters:
94+
# the java filename
95+
# e.g.:
96+
# add_java_test(FooTests.java)
97+
function(add_java_test FILE_NAME)
98+
if(NOT BUILD_TESTING)
99+
return()
100+
endif()
101+
102+
message(STATUS "Configuring test ${FILE_NAME}: ...")
103+
get_filename_component(TEST_NAME ${FILE_NAME} NAME_WE)
104+
get_filename_component(COMPONENT_DIR ${FILE_NAME} DIRECTORY)
105+
get_filename_component(COMPONENT_NAME ${COMPONENT_DIR} NAME)
106+
107+
set(JAVA_TEST_DIR ${PROJECT_BINARY_DIR}/java/${COMPONENT_NAME}/${TEST_NAME})
108+
message(STATUS "build path: ${JAVA_TEST_DIR}")
109+
110+
add_custom_command(
111+
OUTPUT ${JAVA_TEST_DIR}/${JAVA_TEST_PATH}/${TEST_NAME}.java
112+
COMMAND ${CMAKE_COMMAND} -E make_directory
113+
${JAVA_TEST_DIR}/${JAVA_TEST_PATH}
114+
COMMAND ${CMAKE_COMMAND} -E copy ${FILE_NAME} ${JAVA_TEST_DIR}/${JAVA_TEST_PATH}/
115+
MAIN_DEPENDENCY ${FILE_NAME}
116+
VERBATIM
117+
)
118+
119+
string(TOLOWER ${TEST_NAME} JAVA_TEST_PROJECT)
120+
configure_file(
121+
${PROJECT_SOURCE_DIR}/java/pom-test.xml.in
122+
${JAVA_TEST_DIR}/pom.xml
123+
@ONLY)
124+
125+
add_custom_command(
126+
OUTPUT ${JAVA_TEST_DIR}/timestamp
127+
COMMAND ${MAVEN_EXECUTABLE} compile -B
128+
COMMAND ${CMAKE_COMMAND} -E touch ${JAVA_TEST_DIR}/timestamp
129+
DEPENDS
130+
${JAVA_TEST_DIR}/pom.xml
131+
${JAVA_TEST_DIR}/${JAVA_TEST_PATH}/${TEST_NAME}.java
132+
java_package
133+
BYPRODUCTS
134+
${JAVA_TEST_DIR}/target
135+
COMMENT "Compiling Java ${COMPONENT_NAME}/${TEST_NAME}.java (${JAVA_TEST_DIR}/timestamp)"
136+
WORKING_DIRECTORY ${JAVA_TEST_DIR})
137+
138+
add_custom_target(java_${COMPONENT_NAME}_${TEST_NAME} ALL
139+
DEPENDS
140+
${JAVA_TEST_DIR}/timestamp
141+
WORKING_DIRECTORY ${JAVA_TEST_DIR})
142+
143+
add_test(
144+
NAME java_${COMPONENT_NAME}_${TEST_NAME}
145+
COMMAND ${MAVEN_EXECUTABLE} test
146+
WORKING_DIRECTORY ${JAVA_TEST_DIR})
147+
message(STATUS "Configuring test ${FILE_NAME}: ...DONE")
148+
endfunction()
149+
150+
#####################
151+
## JAVA WRAPPERS ##
152+
#####################
153+
list(APPEND CMAKE_SWIG_FLAGS "-I${PROJECT_SOURCE_DIR}")
154+
88155
# Swig wrap all libraries
89156
foreach(SUBPROJECT IN ITEMS Foo Bar FooBar)
90157
add_subdirectory(${SUBPROJECT}/java)
@@ -101,20 +168,31 @@ configure_file(
101168
${JAVA_NATIVE_PROJECT_DIR}/pom.xml
102169
@ONLY)
103170

171+
set(is_windows "$<PLATFORM_ID:Windows>")
172+
set(is_not_windows "$<NOT:$<PLATFORM_ID:Windows>>")
173+
174+
104175
add_custom_command(
105176
OUTPUT ${JAVA_NATIVE_PROJECT_DIR}/timestamp
177+
COMMAND ${CMAKE_COMMAND} -E remove -f timestamp
178+
COMMAND ${CMAKE_COMMAND} -E make_directory ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}
106179
COMMAND ${CMAKE_COMMAND} -E copy
107-
$<TARGET_FILE:jni${JAVA_ARTIFACT}>
108180
$<$<NOT:$<PLATFORM_ID:Windows>>:$<TARGET_SONAME_FILE:Foo>>
109181
$<$<NOT:$<PLATFORM_ID:Windows>>:$<TARGET_SONAME_FILE:Bar>>
110182
$<$<NOT:$<PLATFORM_ID:Windows>>:$<TARGET_SONAME_FILE:FooBar>>
111183
${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
184+
185+
COMMAND ${CMAKE_COMMAND} -E copy
186+
$<TARGET_FILE:jni${JAVA_ARTIFACT}>
187+
${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
188+
112189
COMMAND ${MAVEN_EXECUTABLE} compile -B
113190
COMMAND ${MAVEN_EXECUTABLE} package -B $<$<BOOL:${BUILD_FAT_JAR}>:-Dfatjar=true>
114191
COMMAND ${MAVEN_EXECUTABLE} install -B $<$<BOOL:${SKIP_GPG}>:-Dgpg.skip=true>
115192
COMMAND ${CMAKE_COMMAND} -E touch ${JAVA_NATIVE_PROJECT_DIR}/timestamp
116193
DEPENDS
117194
${JAVA_NATIVE_PROJECT_DIR}/pom.xml
195+
jni${JAVA_ARTIFACT}
118196
BYPRODUCTS
119197
${JAVA_NATIVE_PROJECT_DIR}/target
120198
COMMENT "Generate Java native package ${JAVA_NATIVE_PROJECT} (${JAVA_NATIVE_PROJECT_DIR}/timestamp)"
@@ -191,68 +269,6 @@ add_custom_target(java_deploy
191269
WORKING_DIRECTORY ${JAVA_PROJECT_DIR})
192270
add_dependencies(java_deploy java_package)
193271

194-
#################
195-
## Java Test ##
196-
#################
197-
if(BUILD_TESTING)
198-
# add_java_test()
199-
# CMake function to generate and build java test.
200-
# Parameters:
201-
# the java filename
202-
# e.g.:
203-
# add_java_test(FooTests.java)
204-
function(add_java_test FILE_NAME)
205-
message(STATUS "Configuring test ${FILE_NAME}: ...")
206-
get_filename_component(TEST_NAME ${FILE_NAME} NAME_WE)
207-
get_filename_component(COMPONENT_DIR ${FILE_NAME} DIRECTORY)
208-
get_filename_component(COMPONENT_NAME ${COMPONENT_DIR} NAME)
209-
210-
set(JAVA_TEST_DIR ${PROJECT_BINARY_DIR}/java/${COMPONENT_NAME}/${TEST_NAME})
211-
message(STATUS "build path: ${JAVA_TEST_DIR}")
212-
213-
add_custom_command(
214-
OUTPUT ${JAVA_TEST_DIR}/${JAVA_TEST_PATH}/${TEST_NAME}.java
215-
COMMAND ${CMAKE_COMMAND} -E make_directory
216-
${JAVA_TEST_DIR}/${JAVA_TEST_PATH}
217-
COMMAND ${CMAKE_COMMAND} -E copy
218-
${FILE_NAME}
219-
${JAVA_TEST_DIR}/${JAVA_TEST_PATH}/
220-
MAIN_DEPENDENCY ${FILE_NAME}
221-
VERBATIM
222-
)
223-
224-
string(TOLOWER ${TEST_NAME} JAVA_TEST_PROJECT)
225-
configure_file(
226-
${PROJECT_SOURCE_DIR}/java/pom-test.xml.in
227-
${JAVA_TEST_DIR}/pom.xml
228-
@ONLY)
229-
230-
add_custom_command(
231-
OUTPUT ${JAVA_TEST_DIR}/timestamp
232-
COMMAND ${MAVEN_EXECUTABLE} compile -B
233-
COMMAND ${CMAKE_COMMAND} -E touch ${JAVA_TEST_DIR}/timestamp
234-
DEPENDS
235-
${JAVA_TEST_DIR}/pom.xml
236-
${JAVA_TEST_DIR}/${JAVA_TEST_PATH}/${TEST_NAME}.java
237-
java_package
238-
BYPRODUCTS
239-
${JAVA_TEST_DIR}/target
240-
COMMENT "Compiling Java ${COMPONENT_NAME}/${TEST_NAME}.java (${JAVA_TEST_DIR}/timestamp)"
241-
WORKING_DIRECTORY ${JAVA_TEST_DIR})
242-
243-
add_custom_target(java_${COMPONENT_NAME}_${TEST_NAME} ALL
244-
DEPENDS
245-
${JAVA_TEST_DIR}/timestamp
246-
WORKING_DIRECTORY ${JAVA_TEST_DIR})
247-
248-
add_test(
249-
NAME java_${COMPONENT_NAME}_${TEST_NAME}
250-
COMMAND ${MAVEN_EXECUTABLE} test
251-
WORKING_DIRECTORY ${JAVA_TEST_DIR})
252-
message(STATUS "Configuring test ${FILE_NAME}: ...DONE")
253-
endfunction()
254-
endif()
255-
256272
####################
257273
## Java Example ##
258274
####################

0 commit comments

Comments
 (0)