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
|
# C# Cmd line options:
# http://msdn.microsoft.com/en-us/library/ms379563(VS.80).aspx
# http://msdn.microsoft.com/en-us/library/aa288436(VS.71).aspx
# http://msdn.microsoft.com/en-us/library/aa288481(VS.71).aspx
find_package(SWIG REQUIRED)
mark_as_advanced(SWIG_DIR SWIG_EXECUTABLE SWIG_VERSION)
include(${SWIG_USE_FILE})
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"
)
# Add FileVersion info, only visible on WIN32
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/version.rc.in
${CMAKE_CURRENT_BINARY_DIR}/version.rc
@ONLY)
set_source_files_properties(gdcm.i PROPERTIES CPLUSPLUS ON)
# See sf.net bug #2895067
set(CMAKE_SWIG_FLAGS "-namespace gdcm -dllimport gdcmsharpglue")
separate_arguments(CMAKE_SWIG_FLAGS)
# libgdksharpglue.so
SWIG_ADD_LIBRARY(
gdcmsharpglue
LANGUAGE csharp
SOURCES gdcm.i ${CMAKE_CURRENT_BINARY_DIR}/version.rc
)
SWIG_LINK_LIBRARIES(gdcmsharpglue LINK_PRIVATE gdcmMSFF
gdcmMEXD
)
if(UNIX)
set_target_properties(${SWIG_MODULE_gdcmsharpglue_REAL_NAME} PROPERTIES PREFIX "lib")
endif()
set_property(TARGET ${SWIG_MODULE_gdcmsharpglue_REAL_NAME} PROPERTY NO_SONAME 1)
# Module are always place in the library destination but for poor win32 user I
# decided to place them right next to the other dlls
if(NOT GDCM_INSTALL_NO_LIBRARIES)
install(TARGETS ${SWIG_MODULE_gdcmsharpglue_REAL_NAME}
RUNTIME DESTINATION ${GDCM_INSTALL_BIN_DIR} COMPONENT Applications
LIBRARY DESTINATION ${GDCM_INSTALL_LIB_DIR} COMPONENT Libraries
ARCHIVE DESTINATION ${GDCM_INSTALL_LIB_DIR} COMPONENT DebugDevel
${CPACK_NAMELINK_TYPE}
)
endif()
set(OLDSTYLECSHARP 1)
if(OLDSTYLECSHARP)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/AssemblyInfo.cs.in
${CMAKE_CURRENT_BINARY_DIR}/AssemblyInfo.cs
@ONLY)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/key.snk
${CMAKE_CURRENT_BINARY_DIR}/key.snk
COPYONLY)
# From Mirco Bauer on debian-cli
# Hm? You wrote the C# binding for gdcm? Using C# in the lib name is
# very wrong in all cases. The CIL bytecode can be used by any language
# that targets the CLI. To give some examples: VB.NET, Boo, Nemerle (yes,
# those are all in debian already :)).
#
# There is a common prefix of nFOO (like nunit or nant) and for
# bindings even more common is the suffix of FOO-sharp (not -csharp)
# like gtk-sharp, gnome-sharp, evolution-sharp.
#
# /usr/lib/mono/gtk-sharp/gtk-sharp.dll
# /usr/lib/mono/gtk-sharp/gdk-sharp.dll
# /usr/lib/mono/gtk-sharp/atk-sharp.dll
add_custom_command(
OUTPUT ${GDCM_LIBRARY_DIR}/gdcm-sharp.dll
COMMAND ${CMAKE_CSHARP_COMPILER}
ARGS "/t:library"
$<$<CONFIG:Debug>:/debug>
$<$<CONFIG:Debug>:/pdb:${GDCM_LIBRARY_DIR}/gdcm-sharp>
"/doc:${GDCM_LIBRARY_DIR}/gdcm-sharp.dll.xml" "/out:${GDCM_LIBRARY_DIR}/gdcm-sharp.dll" "*.cs"
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS "${swig_generated_file_fullname}"
${CMAKE_CURRENT_BINARY_DIR}/AssemblyInfo.cs
COMMENT "csc *.cs"
)
# $ export MONO_LOG_LEVEL="debug"; export MONO_LOG_MASK="dll"
# $ export LD_LIBRARY_PATH=/home/mmalaterre/Projects/gdcm/debug-gcc43/Wrapping/Csharp/:/home/mmalaterre/Projects/gdcm/debug-gcc43/bin
add_custom_target(GDCMCSharp ALL
DEPENDS
${GDCM_LIBRARY_DIR}/gdcm-sharp.dll
${SWIG_MODULE_gdcmsharpglue_REAL_NAME} # GDCMCSharp from the outside rebuild the C# binding not just the *.dll but the glue
COMMENT "building gdcm-sharp.dll"
)
endif()
if(NOT GDCM_INSTALL_NO_LIBRARIES)
install_swig_module(gdcmsharpglue CSharp)
set(GDCM_LIBRARY_DIR2 ${LIBRARY_OUTPUT_PATH}/\${BUILD_TYPE})
# because gdcm-sharp.dll is constructed with custom commands, it need the
# install(FILES signature:
install(FILES
${GDCM_LIBRARY_DIR2}/gdcm-sharp.dll
${GDCM_LIBRARY_DIR2}/gdcm-sharp.dll.xml
DESTINATION ${GDCM_INSTALL_CSHARPMODULE_DIR} COMPONENT CSharpModule
)
endif()
|