Blame CMakeLists.txt

Packit 0ba690
cmake_minimum_required(VERSION 2.4.3)
Packit 0ba690
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
Packit 0ba690
Packit 0ba690
if(UNIX AND NOT DEFINED CMAKE_BUILD_TYPE)
Packit 0ba690
  set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING 
Packit 0ba690
      "Choose the type of build, options are:
Packit 0ba690
         None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used)
Packit 0ba690
         Debug
Packit 0ba690
         Release
Packit 0ba690
         RelWithDebInfo
Packit 0ba690
         MinSizeRel.")
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
project(libpng C)
Packit 0ba690
enable_testing()
Packit 0ba690
Packit 0ba690
# Copyright (C) 2007-2010 Glenn Randers-Pehrson
Packit 0ba690
Packit 0ba690
# This code is released under the libpng license.
Packit 0ba690
# For conditions of distribution and use, see the disclaimer
Packit 0ba690
# and license in png.h
Packit 0ba690
Packit 0ba690
set(PNGLIB_MAJOR 1)
Packit 0ba690
set(PNGLIB_MINOR 2)
Packit 0ba690
set(PNGLIB_RELEASE 57)
Packit 0ba690
set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
Packit 0ba690
set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
Packit 0ba690
Packit 0ba690
# needed packages
Packit 0ba690
find_package(ZLIB REQUIRED)
Packit 0ba690
include_directories(${ZLIB_INCLUDE_DIR})
Packit 0ba690
Packit 0ba690
if(NOT WIN32)
Packit 0ba690
  find_library(M_LIBRARY
Packit 0ba690
    NAMES m
Packit 0ba690
    PATHS /usr/lib /usr/local/lib
Packit 0ba690
  )
Packit 0ba690
  if(NOT M_LIBRARY)
Packit 0ba690
    message(STATUS
Packit 0ba690
      "math library 'libm' not found - floating point support disabled")
Packit 0ba690
  endif()
Packit 0ba690
else()
Packit 0ba690
  # not needed on windows
Packit 0ba690
  set(M_LIBRARY "")
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
# COMMAND LINE OPTIONS
Packit 0ba690
if(DEFINED PNG_SHARED)
Packit 0ba690
  option(PNG_SHARED "Build shared lib" ${PNG_SHARED})
Packit 0ba690
else()
Packit 0ba690
  option(PNG_SHARED "Build shared lib" ON)
Packit 0ba690
endif()
Packit 0ba690
if(DEFINED PNG_STATIC)
Packit 0ba690
  option(PNG_STATIC "Build static lib" ${PNG_STATIC})
Packit 0ba690
else()
Packit 0ba690
  option(PNG_STATIC "Build static lib" ON)
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
if(MINGW)
Packit 0ba690
  option(PNG_TESTS  "Build pngtest" NO)
Packit 0ba690
else()
Packit 0ba690
  option(PNG_TESTS  "Build pngtest" YES)
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
option(PNG_NO_CONSOLE_IO "FIXME" YES)
Packit 0ba690
option(PNG_NO_STDIO      "FIXME" YES)
Packit 0ba690
option(PNG_DEBUG         "Build with debug output" NO)
Packit 0ba690
option(PNGARG            "FIXME" YES)
Packit 0ba690
#TODO:
Packit 0ba690
# PNG_CONSOLE_IO_SUPPORTED
Packit 0ba690
Packit 0ba690
# maybe needs improving, but currently I don't know when we can enable what :)
Packit 0ba690
set(png_asm_tmp "OFF")
Packit 0ba690
if(NOT WIN32)
Packit 0ba690
  find_program(uname_executable NAMES uname PATHS /bin /usr/bin /usr/local/bin)
Packit 0ba690
  if(uname_executable)
Packit 0ba690
    exec_program(${uname_executable}
Packit 0ba690
                 ARGS --machine OUTPUT_VARIABLE uname_output)
Packit 0ba690
    if("uname_output" MATCHES "^.*i[1-9]86.*$")
Packit 0ba690
      set(png_asm_tmp "ON")
Packit 0ba690
    else("uname_output" MATCHES "^.*i[1-9]86.*$")
Packit 0ba690
      set(png_asm_tmp "OFF")
Packit 0ba690
    endif("uname_output" MATCHES "^.*i[1-9]86.*$")
Packit 0ba690
  endif(uname_executable)
Packit 0ba690
else()
Packit 0ba690
  # this env var is normally only set on win64
Packit 0ba690
  set(TEXT "ProgramFiles(x86)")
Packit 0ba690
  if("$ENV{${TEXT}}" STREQUAL "")
Packit 0ba690
    set(png_asm_tmp "ON")
Packit 0ba690
  endif("$ENV{${TEXT}}" STREQUAL "")
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
# SET LIBNAME
Packit 0ba690
set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR})
Packit 0ba690
Packit 0ba690
# to distinguish between debug and release lib
Packit 0ba690
set(CMAKE_DEBUG_POSTFIX "d")
Packit 0ba690
Packit 0ba690
Packit 0ba690
# OUR SOURCES
Packit 0ba690
set(libpng_sources
Packit 0ba690
  png.h
Packit 0ba690
  pngconf.h
Packit 0ba690
  png.c
Packit 0ba690
  pngerror.c
Packit 0ba690
  pngget.c
Packit 0ba690
  pngmem.c
Packit 0ba690
  pngpread.c
Packit 0ba690
  pngread.c
Packit 0ba690
  pngrio.c
Packit 0ba690
  pngrtran.c
Packit 0ba690
  pngrutil.c
Packit 0ba690
  pngset.c
Packit 0ba690
  pngtrans.c
Packit 0ba690
  pngwio.c
Packit 0ba690
  pngwrite.c
Packit 0ba690
  pngwtran.c
Packit 0ba690
  pngwutil.c
Packit 0ba690
)
Packit 0ba690
set(pngtest_sources
Packit 0ba690
  pngtest.c
Packit 0ba690
)
Packit 0ba690
# SOME NEEDED DEFINITIONS
Packit 0ba690
Packit 0ba690
add_definitions(-DPNG_CONFIGURE_LIBPNG)
Packit 0ba690
Packit 0ba690
if(_AIX)
Packit 0ba690
  add_definitions(-D_ALL_SOURCE)
Packit 0ba690
endif(_AIX)
Packit 0ba690
Packit 0ba690
if(MSVC)
Packit 0ba690
  add_definitions(-DPNG_NO_MODULEDEF -D_CRT_SECURE_NO_DEPRECATE)
Packit 0ba690
endif(MSVC)
Packit 0ba690
Packit 0ba690
if(PNG_SHARED OR  NOT MSVC)
Packit 0ba690
  #if building msvc static this has NOT to be defined
Packit 0ba690
  add_definitions(-DZLIB_DLL)
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
add_definitions(-DLIBPNG_NO_MMX)
Packit 0ba690
add_definitions(-DPNG_NO_MMX_CODE)
Packit 0ba690
Packit 0ba690
Packit 0ba690
if(PNG_CONSOLE_IO_SUPPORTED)
Packit 0ba690
  add_definitions(-DPNG_CONSOLE_IO_SUPPORTED)
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
if(PNG_NO_CONSOLE_IO)
Packit 0ba690
  add_definitions(-DPNG_NO_CONSOLE_IO)
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
if(PNG_NO_STDIO)
Packit 0ba690
  add_definitions(-DPNG_NO_STDIO)
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
if(PNG_DEBUG)
Packit 0ba690
  add_definitions(-DPNG_DEBUG)
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
if(NOT M_LIBRARY AND NOT WIN32)
Packit 0ba690
  add_definitions(-DPNG_NO_FLOATING_POINT_SUPPORTED)
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
# NOW BUILD OUR TARGET
Packit 0ba690
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
Packit 0ba690
Packit 0ba690
if(PNG_SHARED)
Packit 0ba690
  add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
Packit 0ba690
  if(MSVC)
Packit 0ba690
    # msvc does not append 'lib' - do it here to have consistent name
Packit 0ba690
    set_target_properties(${PNG_LIB_NAME} PROPERTIES PREFIX "lib")
Packit 0ba690
  endif()
Packit 0ba690
  target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY})
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
if(PNG_STATIC)
Packit 0ba690
# does not work without changing name
Packit 0ba690
  set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
Packit 0ba690
  add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
Packit 0ba690
  if(MSVC)
Packit 0ba690
    # msvc does not append 'lib' - do it here to have consistent name
Packit 0ba690
    set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES PREFIX "lib")
Packit 0ba690
  endif()
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
Packit 0ba690
if(PNG_SHARED AND WIN32)
Packit 0ba690
  set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
if(PNG_TESTS AND PNG_SHARED)
Packit 0ba690
  # does not work with msvc due to png_lib_ver issue
Packit 0ba690
  add_executable(pngtest ${pngtest_sources})
Packit 0ba690
  target_link_libraries(pngtest ${PNG_LIB_NAME})
Packit 0ba690
  add_test(pngtest pngtest ${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png)
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
Packit 0ba690
# CREATE PKGCONFIG FILES
Packit 0ba690
# we use the same files like ./configure, so we have to set its vars
Packit 0ba690
set(prefix      ${CMAKE_INSTALL_PREFIX})
Packit 0ba690
set(exec_prefix ${CMAKE_INSTALL_PREFIX})
Packit 0ba690
set(libdir      ${CMAKE_INSTALL_PREFIX}/lib)
Packit 0ba690
set(includedir  ${CMAKE_INSTALL_PREFIX}/include)
Packit 0ba690
Packit 0ba690
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/libpng.pc.in
Packit 0ba690
  ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc)
Packit 0ba690
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/libpng-config.in
Packit 0ba690
  ${CMAKE_CURRENT_BINARY_DIR}/libpng-config)
Packit 0ba690
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/libpng.pc.in
Packit 0ba690
  ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc)
Packit 0ba690
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/libpng-config.in
Packit 0ba690
  ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config)
Packit 0ba690
Packit 0ba690
# SET UP LINKS
Packit 0ba690
if(PNG_SHARED)
Packit 0ba690
  set_target_properties(${PNG_LIB_NAME} PROPERTIES
Packit 0ba690
#   VERSION 0.${PNGLIB_RELEASE}.1.2.57
Packit 0ba690
    VERSION 0.${PNGLIB_RELEASE}.0
Packit 0ba690
    SOVERSION 0
Packit 0ba690
    CLEAN_DIRECT_OUTPUT 1)
Packit 0ba690
endif()
Packit 0ba690
if(PNG_STATIC)
Packit 0ba690
  if(NOT WIN32)
Packit 0ba690
    # that's uncool on win32 - it overwrites our static import lib...
Packit 0ba690
    set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
Packit 0ba690
      OUTPUT_NAME ${PNG_LIB_NAME}
Packit 0ba690
      CLEAN_DIRECT_OUTPUT 1)
Packit 0ba690
  endif()
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
# INSTALL
Packit 0ba690
if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
Packit 0ba690
  if(PNG_SHARED)
Packit 0ba690
    install(TARGETS ${PNG_LIB_NAME}
Packit 0ba690
            RUNTIME DESTINATION bin
Packit 0ba690
            LIBRARY DESTINATION lib
Packit 0ba690
            ARCHIVE DESTINATION lib)
Packit 0ba690
  endif()
Packit 0ba690
  if(PNG_STATIC)
Packit 0ba690
    install(TARGETS ${PNG_LIB_NAME_STATIC}
Packit 0ba690
            LIBRARY DESTINATION lib
Packit 0ba690
            ARCHIVE DESTINATION lib)
Packit 0ba690
  endif()
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
Packit 0ba690
  install(FILES png.h pngconf.h         DESTINATION include)
Packit 0ba690
  install(FILES png.h pngconf.h         DESTINATION include/${PNGLIB_NAME})
Packit 0ba690
endif()
Packit 0ba690
if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL )
Packit 0ba690
  install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config DESTINATION bin)
Packit 0ba690
  install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
Packit 0ba690
          DESTINATION bin)
Packit 0ba690
endif()
Packit 0ba690
if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
Packit 0ba690
  # Install man pages
Packit 0ba690
  install(FILES libpng.3 libpngpf.3             DESTINATION man/man3)
Packit 0ba690
  install(FILES png.5                           DESTINATION man/man5)
Packit 0ba690
  # Install pkg-config files
Packit 0ba690
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
Packit 0ba690
          DESTINATION lib/pkgconfig)
Packit 0ba690
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
Packit 0ba690
          DESTINATION bin)
Packit 0ba690
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc
Packit 0ba690
          DESTINATION lib/pkgconfig)
Packit 0ba690
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
Packit 0ba690
          DESTINATION bin)
Packit 0ba690
endif()
Packit 0ba690
Packit 0ba690
# what's with libpng.txt and all the extra files?
Packit 0ba690
Packit 0ba690
Packit 0ba690
# UNINSTALL
Packit 0ba690
# do we need this?
Packit 0ba690
Packit 0ba690
Packit 0ba690
# DIST
Packit 0ba690
# do we need this?
Packit 0ba690
Packit 0ba690
# to create msvc import lib for mingw compiled shared lib
Packit 0ba690
# pexports libpng.dll > libpng.def
Packit 0ba690
# lib /def:libpng.def /machine:x86
Packit 0ba690