Blob Blame History Raw
#libmng-VERSION
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
#
IF(COMMAND CMAKE_POLICY)
  CMAKE_POLICY(SET CMP0003 NEW)
ENDIF(COMMAND CMAKE_POLICY)
#
IF(NOT MNG_NAMESPACE)
  SET(MNG_NAMESPACE "MNG")
  SET(MNG_STANDALONE 1)
ENDIF(NOT MNG_NAMESPACE)
#
STRING(TOLOWER ${MNG_NAMESPACE} MNG_LIBRARY_NAME)
#
project(${MNG_NAMESPACE} C)
#
INCLUDE(${CMAKE_SOURCE_DIR}/CMake/vers.cmake)
#
SET(MNG_VERSION
  "${MNG_VERSION_MAJOR}.${MNG_VERSION_MINOR}.${MNG_VERSION_PATCH}")
#
SET(PACKAGE_VERSION
  "${MNG_VERSION_MAJOR}.${MNG_VERSION_MINOR}.${MNG_VERSION_PATCH}")
#
SET(MNG_LIBRARY_PROPERTIES
  VERSION   "${MNG_VERSION_MAJOR}.${MNG_VERSION_MINOR}.${MNG_VERSION_PATCH}"
  SOVERSION "${MNG_VERSION_MAJOR}")
#
# Path to additional CMake modules
SET(CMAKE_MODULE_PATH
    ${CMAKE_SOURCE_DIR}/CMake
    ${CMAKE_MODULE_PATH})
FIND_PACKAGE(GZIP)
FIND_PACKAGE(MAN)
#
STRING(TOLOWER ${PROJECT_NAME} projectname)
SET(MNG_INSTALL_SUBDIR
 "${projectname}-${MNG_VERSION_MAJOR}.${MNG_VERSION_MINOR}")
#
IF(MSVC)
 ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
ENDIF(MSVC)
#
IF(DEBUG_LIBMNG)
 IF(UNIX)
  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wconversion -Wno-unused")
 ENDIF(UNIX)
ENDIF(DEBUG_LIBMNG)
#
IF(NOT MNG_INSTALL_BIN_DIR)
 SET(MNG_INSTALL_BIN_DIR "bin")
ENDIF(NOT MNG_INSTALL_BIN_DIR)
#
IF(NOT MNG_INSTALL_LIB_DIR)
 IF(UNIX)
  IF(CMAKE_SIZEOF_VOID_P EQUAL "8")
   SET(MNG_INSTALL_LIB_DIR "lib64") 
  ELSE(CMAKE_SIZEOF_VOID_P EQUAL "8")
   SET(MNG_INSTALL_LIB_DIR "lib")
  ENDIF(CMAKE_SIZEOF_VOID_P EQUAL "8")
 ELSE(UNIX)
  SET(MNG_INSTALL_LIB_DIR "lib")
 ENDIF(UNIX)
ENDIF(NOT MNG_INSTALL_LIB_DIR)
#
IF(NOT MNG_INSTALL_SHARE_DIR)
 SET(MNG_INSTALL_SHARE_DIR "share")
ENDIF(NOT MNG_INSTALL_SHARE_DIR)
#
IF(NOT MNG_INSTALL_DATA_DIR)
 SET(MNG_INSTALL_DATA_DIR
  "${MNG_INSTALL_SHARE_DIR}/${MNG_INSTALL_SUBDIR}")
ENDIF(NOT MNG_INSTALL_DATA_DIR)
#
IF(NOT MNG_INSTALL_PKGCONFIG_DIR)
 SET(MNG_INSTALL_PKGCONFIG_DIR
  "${MNG_INSTALL_LIB_DIR}/pkgconfig")
ENDIF(NOT MNG_INSTALL_PKGCONFIG_DIR)
#
IF(NOT MNG_INSTALL_INCLUDE_DIR)
 SET(MNG_INSTALL_INCLUDE_DIR "include")
ENDIF(NOT MNG_INSTALL_INCLUDE_DIR)
#
IF(NOT MNG_INSTALL_DOC_DIR)
 SET(MNG_INSTALL_DOC_DIR "share/doc/${MNG_INSTALL_SUBDIR}")
ENDIF(NOT MNG_INSTALL_DOC_DIR)
#
IF(NOT MNG_INSTALL_PACKAGE_DIR)
 SET(MNG_INSTALL_PACKAGE_DIR
  "${MNG_INSTALL_SHARE_DIR}/${MNG_INSTALL_SUBDIR}")
ENDIF(NOT MNG_INSTALL_PACKAGE_DIR)
#
INCLUDE (${CMAKE_ROOT}/Modules/TestBigEndian.cmake)
TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
#
IF(WORDS_BIGENDIAN)
 SET(WORDS_BIGENDIAN_S "#define WORDS_BIGENDIAN 1")
ELSE(WORDS_BIGENDIAN)
 SET(WORDS_BIGENDIAN_S "/* #undef WORDS_BIGENDIAN */")
ENDIF(WORDS_BIGENDIAN)
#
OPTION(BUILD_STATIC_LIBS
 "Build MNG static library and link executables against it." ON)
OPTION(BUILD_SHARED_LIBS
 "Build MNG shared library and link executables against it." ON)
#
OPTION(BUILD_MAN
 "Build MAN pages" OFF)
#
OPTION(WITH_LCMS2
 "Build MNG library with liblcms version 2" ON)
#
OPTION(WITH_LCMS1
 "Build MNG library with liblcms version 1" OFF)
#
OPTION(ENABLE_SUPPORT_FULL
 "Enable full support for MNG library; no LC or VLC" ON)
#
OPTION(DISABLE_BUILD_SO
 "Do not build MNG library with standard shared object" OFF)
#
OPTION(DISABLE_READ
 "Disable read support for MNG library" OFF)
#
OPTION(DISABLE_WRITE
 "Disable write support for MNG library" OFF)
#
OPTION(DISABLE_DISPLAY
 "Disable image display support for MNG library" OFF)
#
OPTION(DISABLE_DYNAMIC
 "Disable dynamic support for MNG library" OFF)
#
OPTION(DISABLE_CHUNKS
 "Remove support in MNG library to access chunks" OFF)
#
OPTION(DISABLE_STORE_CHUNKS
 "Disable support for accessing chunks that have been previously read" OFF)
#
OPTION(ENABLE_TRACE
 "Enable support for debug tracing callbacks and messages" OFF)
#
OPTION(WITH_JPEG
 "Enable JPEG support" ON)
#
FIND_PACKAGE(ZLIB REQUIRED)
#
IF(ZLIB_FOUND)
 INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
 SET(HAVE_LIBZ 1)
ENDIF(ZLIB_FOUND)
#
#---------- local build output path for testing ---------
SET(EXECUTABLE_OUTPUT_PATH
 ${MNG_BINARY_DIR}/bin
 CACHE PATH "Single output directory for building all executables.")
#
SET(LIBRARY_OUTPUT_PATH
 ${MNG_BINARY_DIR}/bin
 CACHE PATH "Single output directory for building all libraries.")
MARK_AS_ADVANCED(LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH)
#
#------------------ installation RPATH -------------------
# use, i.e. don't skip the full RPATH for the build tree
SET(CMAKE_SKIP_BUILD_RPATH  FALSE)
#
# when building, don't use the install RPATH already
# (but later on when installing)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
#
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
#
# add the automatically determined parts of the RPATH
# which point to directories outside the build tree to the install RPATH
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
#
# the RPATH to be used when installing,
# but only if it's not a system directory
LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
  "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
IF("${isSystemDir}" STREQUAL "-1")
   SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
ENDIF("${isSystemDir}" STREQUAL "-1")
#
#----- 
#
INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake)
CHECK_INCLUDE_FILE("strings.h"      HAVE_STRINGS_H)
CHECK_INCLUDE_FILE("inttypes.h"     HAVE_INTTYPES_H)
CHECK_INCLUDE_FILE("memory.h"       HAVE_MEMORY_H)
CHECK_INCLUDE_FILE("stdint.h"       HAVE_STDINT_H)
CHECK_INCLUDE_FILE("stdlib.h"       HAVE_STDLIB_H)
CHECK_INCLUDE_FILE("string.h"       HAVE_STRING_H)
CHECK_INCLUDE_FILE("sys/stat.h"     HAVE_SYS_STAT_H)
CHECK_INCLUDE_FILE("sys/types.h"    HAVE_SYS_TYPES_H)
CHECK_INCLUDE_FILE("unistd.h"       HAVE_UNISTD_H)
CHECK_INCLUDE_FILE("stddef.h"       HAVE_STDDEF_H)
CHECK_INCLUDE_FILE("io.h"           HAVE_IO_H)
CHECK_INCLUDE_FILE("fcntl.h"        HAVE_FCNTL_H)
CHECK_INCLUDE_FILE("assert.h"       HAVE_ASSERT_H)
CHECK_INCLUDE_FILE("limits.h"       HAVE_LIMITS_H)
CHECK_INCLUDE_FILE("math.h"         HAVE_LIBM)
CHECK_INCLUDE_FILE("malloc.h"       HAVE_MALLOC_H)
CHECK_INCLUDE_FILE("search.h"       HAVE_SEARCH_H)
CHECK_INCLUDE_FILE("sys/time.h"     HAVE_SYS_TIME_H)
CHECK_INCLUDE_FILE("windows.h"      HAVE_WINDOWS_H)
CHECK_INCLUDE_FILE("dlfcn.h"        HAVE_DLFCN_H)
#
IF(NOT HAVE_LIBM)
 MESSAGE(FATAL_ERROR "pow() REQUIRED: not found. Quitting.")
ENDIF(NOT HAVE_LIBM)
#
FIND_PACKAGE(JPEG)
#
IF(JPEG_FOUND)
 INCLUDE_DIRECTORIES(${JPEG_INCLUDE_DIR})
 SET(HAVE_LIBJPEG 1)
ENDIF(JPEG_FOUND)
#
IF(WITH_LCMS2)
 FIND_PACKAGE(LCMS2)

 IF(LCMS2_FOUND)
  INCLUDE_DIRECTORIES(${LCMS2_INCLUDE_DIR})
  SET(HAVE_LIBLCMS2 1)
  SET(MNG_FULL_CMS 1)
 ENDIF(LCMS2_FOUND)

ENDIF(WITH_LCMS2)
#
IF(WITH_LCMS1)

 FIND_PACKAGE(LCMS1)

 IF(LCMS1_FOUND)
  INCLUDE_DIRECTORIES(${LCMS1_INCLUDE_DIR})
  SET(HAVE_LIBLCMS1 1)
  SET(MNG_FULL_CMS 1)
 ENDIF(LCMS1_FOUND)

ENDIF(WITH_LCMS1)
#
IF(ENABLE_SUPPORT_FULL)
 SET(MNG_SUPPORT_FULL 1)
ENDIF(ENABLE_SUPPORT_FULL)
#
IF(NOT DISABLE_BUILD_SO)
 SET(MNG_BUILD_SO 1)
ENDIF(NOT DISABLE_BUILD_SO)
#
IF(NOT DISABLE_READ)
 SET(MNG_SUPPORT_READ 1)
ENDIF(NOT DISABLE_READ)
#
IF(NOT DISABLE_WRITE)
 SET(MNG_SUPPORT_WRITE 1)
ENDIF(NOT DISABLE_WRITE)
#
IF(NOT DISABLE_DISPLAY)
 SET(MNG_SUPPORT_DISPLAY 1)
ENDIF(NOT DISABLE_DISPLAY)
#
IF(NOT DISABLE_DYNAMIC)
 SET(MNG_SUPPORT_DYNAMICMNG 1)
ENDIF(NOT DISABLE_DYNAMIC)
#
IF(NOT DISABLE_CHUNKS)
 SET(MNG_ACCESS_CHUNKS 1)
ENDIF(NOT DISABLE_CHUNKS)
#
IF(NOT DISABLE_STORE_CHUNKS)
 SET(MNG_STORE_CHUNKS 1)
ENDIF(NOT DISABLE_STORE_CHUNKS)
#
IF(ENABLE_TRACE)
 SET(MNG_SUPPORT_TRACE 1)
 SET(MNG_TRACE_TELLTALE 1)
ENDIF(ENABLE_TRACE)
#
SET(MNG_ERROR_TELLTALE 1)
#
#----------------- end of configuration ----------------------
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/config.h.cmake.in"
 "${CMAKE_BINARY_DIR}/config.h"
 @ONLY
 )
#
INCLUDE_DIRECTORIES(BEFORE ${MNG_BINARY_DIR})
#
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
#
FIND_PACKAGE(MAN)
FIND_PACKAGE(GZIP)
#
ADD_SUBDIRECTORY(doc)
#
#---------------------------------------------------
#
SET(TARGET_FILES
libmng.h
libmng_chunk_descr.h
libmng_chunk_io.h
libmng_chunk_prc.h
libmng_chunks.h
libmng_cms.h
libmng_conf.h
libmng_data.h
libmng_display.h
libmng_dither.h
libmng_error.h
libmng_filter.h
libmng_jpeg.h
libmng_memory.h
libmng_object_prc.h
libmng_objects.h
libmng_pixels.h
libmng_read.h
libmng_trace.h
libmng_types.h
libmng_write.h
libmng_zlib.h
libmng_callback_xs.c
libmng_chunk_descr.c
libmng_chunk_io.c
libmng_chunk_prc.c
libmng_chunk_xs.c
libmng_cms.c
libmng_display.c
libmng_dither.c
libmng_error.c
libmng_filter.c
libmng_hlapi.c
libmng_jpeg.c
libmng_object_prc.c
libmng_pixels.c
libmng_prop_xs.c
libmng_read.c
libmng_trace.c
libmng_write.c
libmng_zlib.c
)
#
#------------------ STATIC ---------------------
IF(BUILD_STATIC_LIBS)
 ADD_LIBRARY(${MNG_LIBRARY_NAME} STATIC
  ${TARGET_FILES})
 #
 IF(JPEG_FOUND)
  TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME} ${JPEG_LIBRARY})
 ENDIF(JPEG_FOUND)
 #
 IF(ZLIB_FOUND)
  TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME} ${ZLIB_LIBRARY})
 ENDIF(ZLIB_FOUND)
 #
 IF(LCMS2_FOUND)
  TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME} ${LCMS2_LIBRARY})
 ENDIF(LCMS2_FOUND)
 #
 IF(LCMS1_FOUND)
  TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME} ${LCMS1_LIBRARY})
 ENDIF(LCMS1_FOUND)
 #
 IF(UNIX)
  TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME} m)
 ENDIF(UNIX)
 #
 IF(MSVC)
   SET_TARGET_PROPERTIES(${MNG_LIBRARY_NAME}
    PROPERTIES PREFIX "lib")
 ENDIF(MSVC)
 #
 SET_TARGET_PROPERTIES(${MNG_LIBRARY_NAME} 
  PROPERTIES LINKER_LANGUAGE C)
 #
 #
 INSTALL(TARGETS ${MNG_LIBRARY_NAME}
   EXPORT MNG_TARGETS
   RUNTIME DESTINATION ${MNG_INSTALL_BIN_DIR} COMPONENT Applications
   LIBRARY DESTINATION ${MNG_INSTALL_LIB_DIR} COMPONENT Libraries
   ARCHIVE DESTINATION ${MNG_INSTALL_LIB_DIR} COMPONENT Libraries
 )
ENDIF(BUILD_STATIC_LIBS)
#---------------- SHARED -------------
IF(BUILD_SHARED_LIBS)

 IF(WIN32)
#-DMNG_BUILD_DLL or -DMNG_DLL or  -DMNG_USE_DLL : cnf. libmng_types.h
  ADD_DEFINITIONS(-DMNG_BUILD_DLL)
 ENDIF(WIN32)

 ADD_LIBRARY(${MNG_LIBRARY_NAME}-shared 
  ${TARGET_FILES} )
#
 IF(JPEG_FOUND)
  TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME}-shared ${JPEG_LIBRARY})
 ENDIF(JPEG_FOUND)
#
 IF(ZLIB_FOUND)
  TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME}-shared ${ZLIB_LIBRARY})
 ENDIF(ZLIB_FOUND)
#
 IF(LCMS2_FOUND)
  TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME}-shared ${LCMS2_LIBRARY})
 ENDIF(LCMS2_FOUND)
#
 IF(LCMS1_FOUND)
  TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME}-shared ${LCMS1_LIBRARY})
 ENDIF(LCMS1_FOUND)
#
 IF(UNIX)
  TARGET_LINK_LIBRARIES(${MNG_LIBRARY_NAME}-shared m)
 ENDIF(UNIX)
#
 IF(MSVC)
  SET_TARGET_PROPERTIES(${MNG_LIBRARY_NAME}-shared
   PROPERTIES PREFIX "lib")
 ENDIF(MSVC)
#
 SET_TARGET_PROPERTIES(${MNG_LIBRARY_NAME}-shared
  PROPERTIES LINKER_LANGUAGE C)
#
 SET_TARGET_PROPERTIES(${MNG_LIBRARY_NAME}-shared
  PROPERTIES
  OUTPUT_NAME ${MNG_LIBRARY_NAME}
  ${MNG_LIBRARY_PROPERTIES} )
#
 INSTALL(TARGETS ${MNG_LIBRARY_NAME}-shared
   EXPORT MNG_TARGETS
   RUNTIME DESTINATION ${MNG_INSTALL_BIN_DIR} COMPONENT Applications
   LIBRARY DESTINATION ${MNG_INSTALL_LIB_DIR} COMPONENT Libraries
   ARCHIVE DESTINATION ${MNG_INSTALL_LIB_DIR} COMPONENT Libraries
 )
#
ENDIF(BUILD_SHARED_LIBS)
#------------ libmng.pc ---------------
IF(UNIX)
 SET(MNG_LIBS_PRIVATE "")
 IF(JPEG_FOUND)
  SET(MNG_LIBS_PRIVATE "${MNG_LIBS_PRIVATE} -ljpeg")
 ENDIF(JPEG_FOUND)
 IF(ZLIB_FOUND)
  SET(MNG_LIBS_PRIVATE "${MNG_LIBS_PRIVATE} -lz")
 ENDIF(ZLIB_FOUND)
 IF(LCMS2_FOUND)
  SET(MNG_LIBS_PRIVATE "${MNG_LIBS_PRIVATE} -llcms2")
 ENDIF(LCMS2_FOUND)
 IF(LCMS1_FOUND)
  SET(MNG_LIBS_PRIVATE "${MNG_LIBS_PRIVATE} -llcms")
 ENDIF(LCMS1_FOUND)
#
 SET(MNG_LIBS_PRIVATE "${MNG_LIBS_PRIVATE} -lm")
#
 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/CMake/libmng.pc.cmake
    ${CMAKE_CURRENT_BINARY_DIR}/libmng.pc @ONLY)
 INSTALL(FILES  ${CMAKE_CURRENT_BINARY_DIR}/libmng.pc DESTINATION
    ${MNG_INSTALL_PKGCONFIG_DIR} )

ENDIF(UNIX)
#
INSTALL(EXPORT MNG_TARGETS DESTINATION ${MNG_INSTALL_PACKAGE_DIR})
#
INSTALL(FILES libmng.h libmng_conf.h libmng_types.h
  DESTINATION ${MNG_INSTALL_INCLUDE_DIR} COMPONENT Headers
)
INSTALL(FILES 
 README README.config README.dll README.footprint README.autoconf
 README.contrib README.examples README.packaging CHANGES LICENSE
 DESTINATION ${MNG_INSTALL_DOC_DIR} )
#--- fin