File: CMakeLists.txt

package info (click to toggle)
gdcm 3.0.24-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 27,856 kB
  • sloc: cpp: 203,722; ansic: 76,471; xml: 48,131; python: 3,473; cs: 2,308; java: 1,629; lex: 1,290; sh: 334; php: 128; makefile: 97
file content (140 lines) | stat: -rw-r--r-- 5,703 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
find_package(SWIG REQUIRED)
include(${SWIG_USE_FILE})
option(GDCM_AUTOLOAD_GDCMJNI "Automatically load gdcmjni" ON)
option(GDCM_JAVA_INCLUDE_SRC "Add source (*.java) to jar file" OFF)
option(GDCM_BUILD_FULL_JAVA_JAR "Build gdcm jar with encapsulated gdcmjni" OFF)
mark_as_advanced(GDCM_AUTOLOAD_GDCMJNI GDCM_JAVA_INCLUDE_SRC GDCM_BUILD_FULL_JAVA_JAR)

include_directories(
  "${GDCM_BINARY_DIR}/Source/Common"
  "${GDCM_SOURCE_DIR}/Source/Common"
  "${GDCM_SOURCE_DIR}/Source/DataStructureAndEncodingDefinition"
  "${GDCM_SOURCE_DIR}/Source/InformationObjectDefinition"
  "${GDCM_SOURCE_DIR}/Source/MediaStorageAndFileFormat"
  "${GDCM_SOURCE_DIR}/Source/DataDictionary"
  "${GDCM_SOURCE_DIR}/Source/MessageExchangeDefinition"
)

# $ export JAVA_HOME=/usr/lib/j2sdk1.6-sun/
# $ export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun/
find_package(Java ${GDCM_DEFAULT_JAVA_VERSION} REQUIRED) # javac, jar
find_package(JNI REQUIRED)
include_directories(
  ${JNI_INCLUDE_DIRS}
  )
set_source_files_properties(gdcm.i PROPERTIES CPLUSPLUS ON)

set(GDCM_JAVA_HOME ${CMAKE_CURRENT_BINARY_DIR}/java/gdcm)
file(MAKE_DIRECTORY ${GDCM_JAVA_HOME})
set(CMAKE_SWIG_OUTDIR "${GDCM_JAVA_HOME}")

set(CMAKE_SWIG_FLAGS "-package gdcm")
separate_arguments(CMAKE_SWIG_FLAGS)
# http://www.debian.org/doc/packaging-manuals/java-policy/x105.html
SWIG_ADD_LIBRARY(
  gdcmjni
  LANGUAGE java
  SOURCES gdcm.i
)
SWIG_LINK_LIBRARIES(gdcmjni LINK_PRIVATE gdcmMSFF
  gdcmMEXD
  # There is no real point in linking explicitly to jni libraries. This is a java module
  # it could contains undefined symbols after all.
  #${JNI_LIBRARIES}
)
if (WIN32)
  # disable lib prefix on windows with mingw
  set_target_properties(${SWIG_MODULE_gdcmjni_REAL_NAME} PROPERTIES PREFIX "")
endif()
set_property(TARGET ${SWIG_MODULE_gdcmjni_REAL_NAME} PROPERTY NO_SONAME 1)

# swig-java dummy run:
# the following execute_process is a dummy run and generate all *.java files in a directory
# we can then glob all *.java to build rules in case the java wrapper becomes broken
#execute_process(COMMAND ${SWIG_EXECUTABLE}
#  -java
#  -I${GDCM_BINARY_DIR}/Source/Common
#  -I${GDCM_SOURCE_DIR}/Source/Common
#  -I${GDCM_SOURCE_DIR}/Source/DataStructureAndEncodingDefinition
#  -I${GDCM_SOURCE_DIR}/Source/MediaStorageAndFileFormat
#  -I${GDCM_SOURCE_DIR}/Source/DataDictionary
#  -c++
#  -o dummy.o
#  ${CMAKE_CURRENT_SOURCE_DIR}/gdcm.i
#  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
#  RESULT_VARIABLE res
#)
#message("res:${res}")
#file(GLOB javafiles "${CMAKE_CURRENT_BINARY_DIR}/*.java")
#message("javafile:${javafiles}")

if(CMAKE_COMPILER_IS_GNUCXX)
  # http://www.swig.org/Doc2.0/Java.html#Java_typemaps_c_to_java_types
  set_source_files_properties(
    ${swig_generated_file_fullname}
    PROPERTIES COMPILE_FLAGS "-fno-strict-aliasing")
endif()

if(GDCM_JAVA_INCLUDE_SRC)
  set(GDCM_JAVA_SRCS "gdcm/*.java")
endif()

add_custom_command(
  OUTPUT ${GDCM_LIBRARY_DIR}/gdcm.jar
# 1. run the custom command only when the gdcmJAVA_wrap.cxx has been generated
# (which means all *.java should be there) Some compiler are picky about Java
# version. For instance covariant return type was only added to Java 5, so to
# please compiler such as ecj (Eclipse Java Compiler 0.894_R34x) explicitly
# state we want 1.5 version to compile gdcm::ImageToImageFilter::GetOutput()
# const as covariant return type
  COMMAND ${Java_JAVAC_EXECUTABLE} ARGS -source ${GDCM_JAVA_SOURCE_VERSION} -target ${GDCM_JAVA_TARGET_VERSION} "gdcm/*.java" #${javafiles}
# 2. now that the *.class have been generated construct the jar file. We can
# only rely on the gdcm.java / gdcm.class to build dependencies, I am pretty
# sure it will break parallel builds... oh well
  COMMAND ${Java_JAR_EXECUTABLE} ARGS cf ${GDCM_LIBRARY_DIR}/gdcm.jar gdcm/*.class ${GDCM_JAVA_SRCS}
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/java
  DEPENDS "${swig_generated_file_fullname}"
  COMMENT "javac *.java; jar cf -> gdcm.jar"
)

if(GDCM_BUILD_FULL_JAVA_JAR)
  if(NOT GDCM_AUTOLOAD_GDCMJNI)
    message(FATAL_ERROR "Dont know how to handle full jar without autoload option")
  endif()
  if(BUILD_SHARED_LIBS)
    message(FATAL_ERROR "Dont know how to package gdcmjni with shared gdcm core libs.")
  endif()
  set(GDCM_JAVA_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR})
  set(GDCM_JAVA_JAR_FULL gdcm-${GDCM_VERSION}-${GDCM_JAVA_SYSTEM_NAME}.jar)
  add_custom_command(
    OUTPUT ${GDCM_LIBRARY_DIR}/${GDCM_JAVA_JAR_FULL}
    #COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/java/lib
    COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different $<TARGET_FILE:${SWIG_MODULE_gdcmjni_REAL_NAME}> ${CMAKE_CURRENT_BINARY_DIR}/java/
    COMMAND ${Java_JAR_EXECUTABLE} ARGS cf ${GDCM_LIBRARY_DIR}/${GDCM_JAVA_JAR_FULL} gdcm/*.class ${GDCM_JAVA_SRCS} *gdcmjni*
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/java
    DEPENDS ${GDCM_LIBRARY_DIR}/gdcm.jar
    COMMENT "javac *.java; jar cf -> ${GDCM_JAVA_JAR_FULL}"
  )
endif()

# 3. ok now add the target
add_custom_target(GDCMJavaJar ALL
  DEPENDS ${GDCM_LIBRARY_DIR}/gdcm.jar
  ${SWIG_MODULE_gdcmjni_REAL_NAME}
  ${GDCM_LIBRARY_DIR}/${GDCM_JAVA_JAR_FULL}
  COMMENT "building gdcm.jar"
)

if(NOT GDCM_INSTALL_NO_LIBRARIES)
  install_swig_module(gdcmjni Java)
  set(GDCM_LIBRARY_DIR2 ${LIBRARY_OUTPUT_PATH}/\${BUILD_TYPE})
  # because gdcm.jar is constructed with custom commands, it need the install(FILES signature:
  install(FILES ${GDCM_LIBRARY_DIR2}/gdcm.jar
    DESTINATION ${GDCM_INSTALL_JARMODULE_DIR} COMPONENT JavaModule
  )
  if(GDCM_BUILD_FULL_JAVA_JAR)
    install(FILES ${GDCM_LIBRARY_DIR2}/${GDCM_JAVA_JAR_FULL}
      DESTINATION ${GDCM_INSTALL_JARMODULE_DIR} COMPONENT JavaModule
    )
  endif()
endif()