@@ -12,7 +12,7 @@ if(UNIX AND NOT APPLE)
1212endif ()
1313
1414# Find Java and JNI
15- find_package (Java COMPONENTS Development REQUIRED)
15+ find_package (Java 1.8 COMPONENTS Development REQUIRED)
1616find_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
8585set (JAVA_TEST_PATH src/test /java/${JAVA_DOMAIN_EXTENSION} /${JAVA_DOMAIN_NAME} /${JAVA_ARTIFACT} )
8686set (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
89156foreach (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+
104175add_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} )
192270add_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