[devel] Various bugfixes and improvements to CMakeLists.txt (Philip Lowman)

1. Modify project(PNG) to project(PNG C) to avoid search for C++ compiler
2. set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) and fix end conditionals
from ugly else(FOO AND BAR) endif(FOO AND BAR) to else() endif()
3. Add missing include_directories() for ZLIB_INCLUDE_DIR
4. Created CMake options to allow configurable building of STATIC or SHARED
libpng, both default on.
5. Modified PNG_DEBUG to default to false?
6. Fix installation of static/shared libraries so DLL goes in prefix+/bin,
all others in prefix+/lib
This commit is contained in:
Glenn Randers-Pehrson 2009-08-27 15:59:40 -05:00
parent 5b754aac0d
commit 38e467edac
3 changed files with 94 additions and 47 deletions

View File

@ -1,5 +1,5 @@
Libpng 1.4.0beta77 - August 26, 2009 Libpng 1.4.0beta77 - August 27, 2009
This is not intended to be a public release. It will be replaced This is not intended to be a public release. It will be replaced
within a few weeks by a public version or by another test version. within a few weeks by a public version or by another test version.
@ -529,7 +529,11 @@ version 1.4.0beta75 [August 21, 2009]
version 1.4.0beta76 [August 22, 2009] version 1.4.0beta76 [August 22, 2009]
Moved an incorrectly located test in png_read_row() in pngread.c Moved an incorrectly located test in png_read_row() in pngread.c
version 1.4.0beta77 [August 26, 2009] version 1.4.0beta77 [August 27, 2009]
Removed lpXYZ.tar.bz2 (with CRLF), KNOWNBUG, libpng-x.y.z-KNOWNBUG.txt,
and the "noconfig" files from the distribution.
Moved CMakeLists.txt from scripts into the main libpng directory.
Various bugfixes and improvements to CMakeLists.txt (Philip Lowman)
version 1.4.0betaN [future] version 1.4.0betaN [future]
Build shared libraries with -lz and sometimes -lm. Build shared libraries with -lz and sometimes -lm.

View File

@ -2214,9 +2214,11 @@ version 1.4.0beta75 [August 21, 2009]
version 1.4.0beta76 [August 22, 2009] version 1.4.0beta76 [August 22, 2009]
Moved an incorrectly located test in png_read_row() in pngread.c Moved an incorrectly located test in png_read_row() in pngread.c
version 1.4.0beta77 [August 26, 2009] version 1.4.0beta77 [August 27, 2009]
Removed lpXYZ.tar.bz2 (with CRLF), KNOWNBUG, libpng-x.y.z-KNOWNBUG.txt, Removed lpXYZ.tar.bz2 (with CRLF), KNOWNBUG, libpng-x.y.z-KNOWNBUG.txt,
and the "noconfig" files from the distribution. and the "noconfig" files from the distribution.
Moved CMakeLists.txt from scripts into the main libpng directory.
Various bugfixes and improvements to CMakeLists.txt (Philip Lowman)
version 1.4.0betaN [future] version 1.4.0betaN [future]
Build shared libraries with -lz and sometimes -lm. Build shared libraries with -lz and sometimes -lm.

View File

@ -1,5 +1,5 @@
project(PNG C)
project(PNG) cmake_minimum_required(VERSION 2.4.3)
# Copyright (C) 2007 Glenn Randers-Pehrson # Copyright (C) 2007 Glenn Randers-Pehrson
@ -13,8 +13,12 @@ set(PNGLIB_RELEASE 0)
set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR}) set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE}) set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
# needed packages # needed packages
find_package(ZLIB REQUIRED) find_package(ZLIB REQUIRED)
include_directories(${ZLIB_INCLUDE_DIR})
if(NOT WIN32) if(NOT WIN32)
find_library(M_LIBRARY find_library(M_LIBRARY
NAMES m NAMES m
@ -23,24 +27,33 @@ if(NOT WIN32)
if(NOT M_LIBRARY) if(NOT M_LIBRARY)
message(STATUS message(STATUS
"math library 'libm' not found - floating point support disabled") "math library 'libm' not found - floating point support disabled")
endif(NOT M_LIBRARY) endif()
else(NOT WIN32) else()
# not needed on windows # not needed on windows
set(M_LIBRARY "") set(M_LIBRARY "")
endif(NOT WIN32) endif()
# COMMAND LINE OPTIONS # COMMAND LINE OPTIONS
option(PNG_SHARED "Build shared lib" YES) if(DEFINED PNG_SHARED)
option(PNG_STATIC "Build static lib" YES) option(PNG_SHARED "Build shared lib" ${PNG_SHARED})
else()
option(PNG_SHARED "Build shared lib" ON)
endif()
if(DEFINED PNG_STATIC)
option(PNG_STATIC "Build static lib" ${PNG_STATIC})
else()
option(PNG_STATIC "Build static lib" ON)
endif()
if(MINGW) if(MINGW)
option(PNG_TESTS "Build pngtest" NO) option(PNG_TESTS "Build pngtest" NO)
else(MINGW) else(MINGW)
option(PNG_TESTS "Build pngtest" YES) option(PNG_TESTS "Build pngtest" YES)
endif(MINGW) endif(MINGW)
option(PNG_NO_CONSOLE_IO "FIXME" YES) option(PNG_NO_CONSOLE_IO "FIXME" YES)
option(PNG_NO_STDIO "FIXME" YES) option(PNG_NO_STDIO "FIXME" YES)
option(PNG_DEBUG "Build with debug output" YES) option(PNG_DEBUG "Build with debug output" NO)
option(PNGARG "FIXME" YES) option(PNGARG "FIXME" YES)
#TODO: #TODO:
# PNG_CONSOLE_IO_SUPPORTED # PNG_CONSOLE_IO_SUPPORTED
@ -57,20 +70,16 @@ if(NOT WIN32)
set(png_asm_tmp "OFF") set(png_asm_tmp "OFF")
endif("uname_output" MATCHES "^.*i[1-9]86.*$") endif("uname_output" MATCHES "^.*i[1-9]86.*$")
endif(uname_executable) endif(uname_executable)
else(NOT WIN32) else()
# this env var is normally only set on win64 # this env var is normally only set on win64
SET(TEXT "ProgramFiles(x86)") SET(TEXT "ProgramFiles(x86)")
if("$ENV{${TEXT}}" STREQUAL "") if("$ENV{${TEXT}}" STREQUAL "")
set(png_asm_tmp "ON") set(png_asm_tmp "ON")
endif("$ENV{${TEXT}}" STREQUAL "") endif("$ENV{${TEXT}}" STREQUAL "")
endif(NOT WIN32) endif()
# SET LIBNAME # SET LIBNAME
# msvc does not append 'lib' - do it here to have consistent name set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR})
if(MSVC)
set(PNG_LIB_NAME lib)
endif(MSVC)
set(PNG_LIB_NAME ${PNG_LIB_NAME}png${PNGLIB_MAJOR}${PNGLIB_MINOR})
# to distinguish between debug and release lib # to distinguish between debug and release lib
set(CMAKE_DEBUG_POSTFIX "d") set(CMAKE_DEBUG_POSTFIX "d")
@ -105,51 +114,64 @@ if(MSVC)
add_definitions(-DPNG_NO_MODULEDEF -D_CRT_SECURE_NO_DEPRECATE) add_definitions(-DPNG_NO_MODULEDEF -D_CRT_SECURE_NO_DEPRECATE)
endif(MSVC) endif(MSVC)
add_definitions(-DZLIB_DLL) if(PNG_SHARED OR NOT MSVC)
#if building msvc static this has NOT do be defined
add_definitions(-DZLIB_DLL)
endif()
if(PNG_CONSOLE_IO_SUPPORTED) if(PNG_CONSOLE_IO_SUPPORTED)
add_definitions(-DPNG_CONSOLE_IO_SUPPORTED) add_definitions(-DPNG_CONSOLE_IO_SUPPORTED)
endif(PNG_CONSOLE_IO_SUPPORTED) endif()
if(PNG_NO_CONSOLE_IO) if(PNG_NO_CONSOLE_IO)
add_definitions(-DPNG_NO_CONSOLE_IO) add_definitions(-DPNG_NO_CONSOLE_IO)
endif(PNG_NO_CONSOLE_IO) endif()
if(PNG_NO_STDIO) if(PNG_NO_STDIO)
add_definitions(-DPNG_NO_STDIO) add_definitions(-DPNG_NO_STDIO)
endif(PNG_NO_STDIO) endif()
if(PNG_DEBUG) if(PNG_DEBUG)
add_definitions(-DPNG_DEBUG) add_definitions(-DPNG_DEBUG)
endif(PNG_DEBUG) endif()
if(NOT M_LIBRARY AND NOT WIN32) if(NOT M_LIBRARY AND NOT WIN32)
add_definitions(-DPNG_NO_FLOATING_POINT_SUPPORTED) add_definitions(-DPNG_NO_FLOATING_POINT_SUPPORTED)
endif(NOT M_LIBRARY AND NOT WIN32) endif()
# NOW BUILD OUR TARGET # NOW BUILD OUR TARGET
include_directories(${PNG_SOURCE_DIR} ${ZLIB_INCLUDE_DIR}) include_directories(${PNG_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
if(PNG_SHARED) if(PNG_SHARED)
add_library(${PNG_LIB_NAME} SHARED ${libpng_sources}) add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
if(MSVC)
# msvc does not append 'lib' - do it here to have consistent name
set_target_properties(${PNG_LIB_NAME} PROPERTIES PREFIX "lib")
endif()
target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY}) target_link_libraries(${PNG_LIB_NAME} ${ZLIB_LIBRARY} ${M_LIBRARY})
endif(PNG_SHARED) endif()
if(PNG_STATIC) if(PNG_STATIC)
# does not work without changing name # does not work without changing name
set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static) set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources}) add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
endif(PNG_STATIC) if(MSVC)
# msvc does not append 'lib' - do it here to have consistent name
set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES PREFIX "lib")
endif()
endif()
if(PNG_SHARED AND WIN32) if(PNG_SHARED AND WIN32)
set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL) set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
endif(PNG_SHARED AND WIN32) endif()
if(PNG_TESTS) if(PNG_TESTS AND PNG_SHARED)
# does not work with msvc due to png_lib_ver issue # does not work with msvc due to png_lib_ver issue
add_executable(pngtest ${pngtest_sources}) add_executable(pngtest ${pngtest_sources})
target_link_libraries(pngtest ${PNG_LIB_NAME}) target_link_libraries(pngtest ${PNG_LIB_NAME})
# add_test(pngtest ${PNG_SOURCE_DIR}/pngtest.png) # add_test(pngtest ${PNG_SOURCE_DIR}/pngtest.png)
endif(PNG_TESTS) endif()
# CREATE PKGCONFIG FILES # CREATE PKGCONFIG FILES
@ -169,30 +191,49 @@ configure_file(${PNG_SOURCE_DIR}/scripts/libpng-config.in
${PNG_BINARY_DIR}/${PNGLIB_NAME}-config) ${PNG_BINARY_DIR}/${PNGLIB_NAME}-config)
# SET UP LINKS # SET UP LINKS
set_target_properties(${PNG_LIB_NAME} PROPERTIES if(PNG_SHARED)
set_target_properties(${PNG_LIB_NAME} PROPERTIES
# VERSION 14.${PNGLIB_RELEASE}.1.4.0beta77 # VERSION 14.${PNGLIB_RELEASE}.1.4.0beta77
VERSION 14.${PNGLIB_RELEASE}.0 VERSION 14.${PNGLIB_RELEASE}.0
SOVERSION 14 SOVERSION 14
CLEAN_DIRECT_OUTPUT 1) CLEAN_DIRECT_OUTPUT 1)
if(NOT WIN32) endif()
if(PNG_STATIC)
if(NOT WIN32)
# that's uncool on win32 - it overwrites our static import lib... # that's uncool on win32 - it overwrites our static import lib...
set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES
OUTPUT_NAME ${PNG_LIB_NAME} OUTPUT_NAME ${PNG_LIB_NAME}
CLEAN_DIRECT_OUTPUT 1) CLEAN_DIRECT_OUTPUT 1)
endif(NOT WIN32) endif()
endif()
# INSTALL # INSTALL
install_targets(/lib ${PNG_LIB_NAME}) if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
if(PNG_STATIC) if(PNG_SHARED)
install_targets(/lib ${PNG_LIB_NAME_STATIC}) install(TARGETS ${PNG_LIB_NAME}
endif(PNG_STATIC) RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
endif()
if(PNG_STATIC)
install(TARGETS ${PNG_LIB_NAME_STATIC}
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
endif()
endif()
if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
install(FILES png.h pngconf.h pngpriv.h DESTINATION include) install(FILES png.h pngconf.h pngpriv.h DESTINATION include)
install(FILES png.h pngconf.h pngpriv.h DESTINATION include/${PNGLIB_NAME}) install(FILES png.h pngconf.h pngpriv.h DESTINATION include/${PNGLIB_NAME})
install(FILES libpng.3 libpngpf.3 DESTINATION man/man3) endif()
install(FILES png.5 DESTINATION man/man5) if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
install(FILES ${PNG_BINARY_DIR}/libpng.pc DESTINATION lib/pkgconfig) install(FILES libpng.3 libpngpf.3 DESTINATION man/man3)
install(FILES ${PNG_BINARY_DIR}/libpng-config DESTINATION bin) install(FILES png.5 DESTINATION man/man5)
install(FILES ${PNG_BINARY_DIR}/${PNGLIB_NAME}.pc DESTINATION lib/pkgconfig) install(FILES ${PNG_BINARY_DIR}/libpng.pc DESTINATION lib/pkgconfig)
install(FILES ${PNG_BINARY_DIR}/${PNGLIB_NAME}-config DESTINATION bin) install(FILES ${PNG_BINARY_DIR}/libpng-config DESTINATION bin)
install(FILES ${PNG_BINARY_DIR}/${PNGLIB_NAME}.pc DESTINATION lib/pkgconfig)
install(FILES ${PNG_BINARY_DIR}/${PNGLIB_NAME}-config DESTINATION bin)
endif()
# what's with libpng.txt and all the extra files? # what's with libpng.txt and all the extra files?