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 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
|
#-------------------------------------------------------------------------------
macro (BASIC_SETTINGS varname)
string (TOUPPER ${varname} EXAMPLE_PACKAGE_VARNAME)
string (TOLOWER ${varname} EXAMPLE_VARNAME)
set (H4${EXAMPLE_PACKAGE_VARNAME}_PACKAGE "h4${EXAMPLE_VARNAME}")
set (H4${EXAMPLE_PACKAGE_VARNAME}_PACKAGE_NAME "h4${EXAMPLE_VARNAME}")
string (TOUPPER ${H4${EXAMPLE_PACKAGE_VARNAME}_PACKAGE_NAME} EXAMPLE_PACKAGE_NAME)
string (TOLOWER ${H4${EXAMPLE_PACKAGE_VARNAME}_PACKAGE_NAME} EXAMPLE_NAME)
set (CMAKE_NO_SYSTEM_FROM_IMPORTED 1)
#-----------------------------------------------------------------------------
# Setup output Directories
#-----------------------------------------------------------------------------
SET_HDF_OUTPUT_DIRS(${EXAMPLE_PACKAGE_NAME})
set (CMAKE_POSITION_INDEPENDENT_CODE ON)
if (MSVC)
set (CMAKE_MFC_FLAG 0)
endif ()
set (CMAKE_C_STANDARD 99)
set (CMAKE_C_STANDARD_REQUIRED TRUE)
#-----------------------------------------------------------------------------
# Compiler specific flags : Shouldn't there be compiler tests for these
#-----------------------------------------------------------------------------
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS} -std=c99 -fomit-frame-pointer -finline-functions -fno-common")
endif ()
#-----------------------------------------------------------------------------
# This is in here to help some of the GCC based IDES like Eclipse
# and code blocks parse the compiler errors and warnings better.
#-----------------------------------------------------------------------------
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0")
endif ()
#-----------------------------------------------------------------------------
# Option to allow the user to disable compiler warnings
#-----------------------------------------------------------------------------
option (H4EX_DISABLE_COMPILER_WARNINGS "Disable compiler warnings" OFF)
if (H4EX_DISABLE_COMPILER_WARNINGS)
# MSVC uses /w to suppress warnings. It also complains if another
# warning level is given, so remove it.
if (MSVC)
set (H4EX_WARNINGS_BLOCKED 1)
string (REGEX REPLACE "(^| )([/-])W[0-9]( |$)" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /w")
endif ()
if (WIN32)
add_definitions (-D_CRT_SECURE_NO_WARNINGS)
endif ()
# Borland uses -w- to suppress warnings.
if (BORLAND)
set (H4EX_WARNINGS_BLOCKED 1)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-")
endif ()
# Most compilers use -w to suppress warnings.
if (NOT H4EX_WARNINGS_BLOCKED)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w")
if (CMAKE_CXX_COMPILER_LOADED AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")
endif ()
endif ()
endif ()
#-----------------------------------------------------------------------------
# Set includes needed for build
#-----------------------------------------------------------------------------
set (${EXAMPLE_PACKAGE_NAME}_INCLUDES_BUILD_TIME
${${EXAMPLE_PACKAGE_NAME}_SRC_DIR} ${${EXAMPLE_PACKAGE_NAME}_BINARY_DIR}
)
endmacro ()
macro (HDF4_SUPPORT)
set (CMAKE_MODULE_PATH ${H4EX_RESOURCES_DIR} ${CMAKE_MODULE_PATH})
option (USE_SHARED_LIBS "Use Shared Libraries" ON)
if (NOT H4EX_HDF4_HEADER)
if (USE_SHARED_LIBS)
set (FIND_HDF_COMPONENTS C shared)
else ()
set (FIND_HDF_COMPONENTS C static)
set (H4EX_BUILD_JAVA OFF CACHE BOOL "Build Java support" FORCE)
message (STATUS "Using static HDF4 - disable build of Java examples")
endif ()
if (H4EX_BUILD_FORTRAN)
set (FIND_HDF_COMPONENTS ${FIND_HDF_COMPONENTS} Fortran)
endif ()
if (H4EX_BUILD_JAVA)
set (FIND_HDF_COMPONENTS ${FIND_HDF_COMPONENTS} Java)
set (HDF4_Java_FOUND 1) #default setting for 4.2.14 and earlier
endif ()
message (STATUS "HDF4 find comps: ${FIND_HDF_COMPONENTS}")
set (SEARCH_PACKAGE_NAME ${HDF4_PACKAGE_NAME})
find_package (HDF4 NAMES ${SEARCH_PACKAGE_NAME} COMPONENTS ${FIND_HDF_COMPONENTS})
message (STATUS "HDF4 C libs:${HDF4_FOUND} static:${HDF4_static_C_FOUND} and shared:${HDF4_shared_C_FOUND}")
message (STATUS "HDF4 Fortran libs: static:${HDF4_static_Fortran_FOUND} and shared:${HDF4_shared_Fortran_FOUND}")
message (STATUS "HDF4 Java libs: ${HDF4_Java_FOUND}")
if (HDF4_FOUND)
if (NOT HDF4_static_C_FOUND AND NOT HDF4_shared_C_FOUND)
#find library from non-dual-binary package
set (FIND_HDF_COMPONENTS C)
if (H4EX_BUILD_FORTRAN)
set (FIND_HDF_COMPONENTS ${FIND_HDF_COMPONENTS} Fortran)
endif ()
if (H4EX_BUILD_JAVA)
set (FIND_HDF_COMPONENTS ${FIND_HDF_COMPONENTS} Java)
endif ()
message (STATUS "HDF4 find comps: ${FIND_HDF_COMPONENTS}")
find_package (HDF4 NAMES ${SEARCH_PACKAGE_NAME} COMPONENTS ${FIND_HDF_COMPONENTS})
message (STATUS "HDF4 libs:${HDF4_FOUND} C:${HDF4_C_FOUND} Fortran:${HDF4_Fortran_FOUND} Java:${HDF4_Java_FOUND}")
set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_LIBRARIES})
if (HDF4_BUILD_SHARED_LIBS)
add_definitions (-DH4_BUILT_AS_DYNAMIC_LIB)
else ()
add_definitions (-DH4_BUILT_AS_STATIC_LIB)
endif ()
if (USE_SHARED_LIBS AND WIN32)
set_property (TARGET ${HDF4_NAMESPACE}hdp PROPERTY IMPORTED_LOCATION "${HDF4_TOOLS_DIR}/hdpdll")
else ()
set_property (TARGET ${HDF4_NAMESPACE}hdp PROPERTY IMPORTED_LOCATION "${HDF4_TOOLS_DIR}/hdp")
endif ()
if (H4EX_BUILD_JAVA)
set (CMAKE_JAVA_INCLUDE_PATH "${CMAKE_JAVA_INCLUDE_PATH};${HDF4_JAVA_INCLUDE_DIRS}")
message (STATUS "HDF4 jars:${HDF4_JAVA_INCLUDE_DIRS}")
endif ()
set (H4EX_HDF4_DUMP_EXECUTABLE $<TARGET_FILE:${HDF4_NAMESPACE}hdp>)
else ()
if (HDF4_BUILD_MODE)
string (TOUPPER "_${HDF4_BUILD_MODE}" UPPER_BUILD_TYPE)
elseif (HDF_CFG_NAME)
string (TOUPPER "_${HDF_CFG_NAME}" UPPER_BUILD_TYPE)
else ()
set (UPPER_BUILD_TYPE "")
endif ()
get_filename_component (_LIBRARY_PATH ${HDF4_INCLUDE_DIR} DIRECTORY)
set (HDF4_LIBRARY_PATH "${_LIBRARY_PATH}/lib")
if (USE_SHARED_LIBS AND HDF4_shared_C_FOUND)
set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_C_SHARED_LIBRARY})
else ()
set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_C_STATIC_LIBRARY})
endif ()
if (HDF4_VERSION VERSION_LESS "4.3" AND NOT HDF4_shared_C_FOUND)
if (NOT TARGET ${HDF4_NAMESPACE}hdp-shared)
add_executable (${HDF4_NAMESPACE}hdp-shared IMPORTED)
endif ()
set (H4EX_HDF4_DUMP_EXECUTABLE $<TARGET_FILE:${HDF4_NAMESPACE}hdp-shared>)
else ()
if (NOT TARGET ${HDF4_NAMESPACE}hdp)
add_executable (${HDF4_NAMESPACE}hdp IMPORTED)
endif()
set (H4EX_HDF4_DUMP_EXECUTABLE $<TARGET_FILE:${HDF4_NAMESPACE}hdp>)
endif()
if (NOT HDF4_static_Fortran_FOUND AND NOT HDF4_shared_Fortran_FOUND)
set (H4EX_BUILD_FORTRAN OFF CACHE BOOL "Build FORTRAN support" FORCE)
message (STATUS "HDF4 Fortran libs not found - disable build of Fortran examples")
else ()
if (H4EX_BUILD_FORTRAN AND ${HDF4_BUILD_FORTRAN})
if (BUILD_SHARED_LIBS AND HDF4_shared_Fortran_FOUND)
set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_FORTRAN_SHARED_LIBRARY})
elseif (HDF4_static_Fortran_FOUND)
set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_FORTRAN_STATIC_LIBRARY})
else ()
set (H4EX_BUILD_FORTRAN OFF CACHE BOOL "Build FORTRAN support" FORCE)
message (STATUS "HDF4 Fortran libs not found - disable build of Fortran examples")
endif ()
endif ()
endif ()
if (H4EX_BUILD_JAVA AND HDF4_Java_FOUND)
if (${HDF4_BUILD_JAVA})
set (CMAKE_JAVA_INCLUDE_PATH "${CMAKE_JAVA_INCLUDE_PATH};${HDF4_JAVA_INCLUDE_DIRS}")
get_target_property (libsoname ${HDF4_JAVA_LIBRARY} IMPORTED_SONAME${UPPER_BUILD_TYPE})
get_filename_component (libname ${libsoname} NAME_WE)
string (REGEX REPLACE "^lib" "" libname ${libname})
message (STATUS "HDF4 lib:${HDF4_JAVA_LIBRARY} OR ${libsoname} OR ${libname}")
set (H4EX_JAVA_LIBRARY ${libname})
set (H4EX_JAVA_LIBRARIES ${HDF4_JAVA_LIBRARY})
message (STATUS "HDF4 lib:${H4EX_JAVA_LIBRARY} jars:${HDF4_JAVA_INCLUDE_DIRS}}")
else ()
set (H4EX_BUILD_JAVA OFF CACHE BOOL "Build Java support" FORCE)
message (STATUS "HDF4 Java libs not found - disable build of Java examples")
endif ()
else ()
set (H4EX_BUILD_JAVA OFF CACHE BOOL "Build Java support" FORCE)
endif ()
endif ()
else ()
find_package (HDF4) # Legacy find
#Legacy find_package does not set HDF4_TOOLS_DIR, so we set it here
set (HDF4_TOOLS_DIR ${HDF4_LIBRARY_DIRS}/../bin)
#Legacy find_package does not set HDF4_BUILD_SHARED_LIBS, so we set it here
if (USE_SHARED_LIBS AND EXISTS "${HDF4_LIBRARY_DIRS}/libhdf4.so")
set (HDF4_BUILD_SHARED_LIBS 1)
else ()
set (HDF4_BUILD_SHARED_LIBS 0)
endif ()
set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_LIBRARIES})
add_executable (${HDF4_NAMESPACE}hdp IMPORTED)
set_property (TARGET ${HDF4_NAMESPACE}hdp PROPERTY IMPORTED_LOCATION "${HDF4_TOOLS_DIR}/hdp")
set (H4EX_HDF4_DUMP_EXECUTABLE $<TARGET_FILE:${HDF4_NAMESPACE}hdp>)
endif ()
set (HDF4_PACKAGE_NAME ${SEARCH_PACKAGE_NAME})
if (HDF4_FOUND)
set (H4EX_HDF4_INCLUDE_DIRS ${HDF4_INCLUDE_DIR})
set (H4EX_HDF4_HAVE_HDF_H 1)
set (H4EX_HDF4_HAVE_HDF4 1)
set (H4EX_HDF4_HEADER "hdf.h")
message (STATUS "HDF4-${HDF4_VERSION_STRING} found: INC=${HDF4_INCLUDE_DIR} TOOLS=${HDF4_TOOLS_DIR}")
else ()
message (FATAL_ERROR " HDF4 is Required for HDF4 Examples")
endif ()
else ()
# This project is being called from within another and HDF4 is already configured
set (H4EX_HDF4_HAVE_HDF_H 1)
set (H4EX_HDF4_HAVE_HDF4 1)
set (H4EX_HDF4_LINK_LIBS ${H4EX_HDF4_LINK_LIBS} ${HDF4_LINK_LIBS})
endif ()
if (H4EX_BUILD_FORTRAN)
list (APPEND H4EX_HDF4_INCLUDE_DIRS ${HDF4_INCLUDE_DIR_FORTRAN})
endif ()
message (STATUS "HDF4 link libs: ${H4EX_HDF4_LINK_LIBS} Includes: ${H4EX_HDF4_INCLUDE_DIRS}")
endmacro ()
|