Skip to content

Commit

Permalink
Modern CMake syntax in giflib
Browse files Browse the repository at this point in the history
Modernized the CMake syntax to align more with the modern CMake.
  • Loading branch information
Björn Blissing committed Aug 15, 2017
1 parent 266898b commit c76a34c
Showing 1 changed file with 57 additions and 41 deletions.
98 changes: 57 additions & 41 deletions giflib/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
PROJECT(giflib C)
CMAKE_MINIMUM_REQUIRED(VERSION 3.5 FATAL_ERROR)

SET(TARGET_LIB giflib)
FILE(READ ${GIFLIB_SOURCE_DIR}/lib/gif_lib.h _gif_lib_h_contents)
STRING(REGEX REPLACE ".*#define[ \t]+GIFLIB_MAJOR[ \t]+([0-9]+).*" "\\1" GIFLIB_MAJOR_VERSION ${_gif_lib_h_contents})
STRING(REGEX REPLACE ".*#define[ \t]+GIFLIB_MINOR[ \t]+([0-9]+).*" "\\1" GIFLIB_MINOR_VERSION ${_gif_lib_h_contents})
STRING(REGEX REPLACE ".*#define[ \t]+GIFLIB_RELEASE[ \t]+([0-9]+).*" "\\1" GIFLIB_RELEASE_VERSION ${_gif_lib_h_contents})

SET(GIFLIB_VERSION_FILE "${GIFLIB_SOURCE_DIR}/lib/gif_lib.h")

IF(EXISTS "${GIFLIB_VERSION_FILE}")
FILE(STRINGS "${GIFLIB_VERSION_FILE}" GIFLIB_VERSION_FILE_CONTENTS REGEX "#define GIFLIB_[A-Z]+[ \t]+[0-9]+")
PROJECT(giflib VERSION "${GIFLIB_MAJOR_VERSION}.${GIFLIB_MINOR_VERSION}.${GIFLIB_RELEASE_VERSION}" LANGUAGES C)


# Use GNUInstallDirs to install libraries into correct
# locations on all platforms.
INCLUDE(GNUInstallDirs)

STRING(REGEX REPLACE ".*#define GIFLIB_MAJOR[ \t]+([0-9]+).*" "\\1" GIFLIB_VERSION_MAJOR ${GIFLIB_VERSION_FILE_CONTENTS})
STRING(REGEX REPLACE ".*#define GIFLIB_MINOR[ \t]+([0-9]+).*" "\\1" GIFLIB_VERSION_MINOR ${GIFLIB_VERSION_FILE_CONTENTS})
STRING(REGEX REPLACE ".*#define GIFLIB_RELEASE[ \t]+([0-9]+).*" "\\1" GIFLIB_VERSION_RELEASE ${GIFLIB_VERSION_FILE_CONTENTS})

SET(GIFLIB_VERSION "${GIFLIB_VERSION_MAJOR}.${GIFLIB_VERSION_MINOR}.${GIFLIB_VERSION_RELEASE}")
ENDIF()

SET(GIFLIB_PUBLIC_HEADERS
${GIFLIB_SOURCE_DIR}/lib/gif_lib.h
Expand All @@ -31,16 +30,8 @@ SET(GIFLIB_SRCS
${GIFLIB_SOURCE_DIR}/lib/gif_hash.c
${GIFLIB_SOURCE_DIR}/lib/gifalloc.c
${GIFLIB_SOURCE_DIR}/lib/quantize.c
)

# Add openbsd-reallocarray from 5.1.2 and up
IF(NOT GIFLIB_VERSION VERSION_LESS 5.1.2)
SET(GIFLIB_SRCS
${GIFLIB_SRCS}
${GIFLIB_SOURCE_DIR}/lib/openbsd-reallocarray.c
${GIFLIB_SOURCE_DIR}/lib/openbsd-reallocarray.c
)
ENDIF()


IF(MSVC)
# Create file to avoid include file name collision on other platforms
Expand All @@ -67,36 +58,61 @@ IF(MSVC)
)
ENDIF(MSVC)


# Dependent include files
INCLUDE_DIRECTORIES(${GIFLIB_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})

IF(MSVC)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4018 /wd4028 /wd4244 /wd4996")
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D_LIB -DWIN32)
LIST(APPEND PRIVATE_DEFINITIONS -D_CRT_SECURE_NO_WARNINGS) # Disable warnings for unsecure CRT functions
LIST(APPEND PRIVATE_DEFINITIONS -D_LIB) #
LIST(APPEND PRIVATE_DEFINITIONS -DWIN32) #

# Supress warnings
LIST(APPEND PRIVATE_OPTIONS /wd4018) # expression' : signed/unsigned mismatch
LIST(APPEND PRIVATE_OPTIONS /wd4028) # formal parameter 'number' different from declaration
LIST(APPEND PRIVATE_OPTIONS /wd4244) # conversion' conversion from 'type1' to 'type2', possible loss of data
LIST(APPEND PRIVATE_OPTIONS /wd4996) # The compiler encountered a deprecated declaration.


SET(CMAKE_DEBUG_POSTFIX "d")
ENDIF(MSVC)


IF(MINGW)
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D_LIB)
LIST(APPEND PRIVATE_DEFINITIONS -D_CRT_SECURE_NO_WARNINGS) # Disable warnings for unsecure CRT functions
LIST(APPEND PRIVATE_DEFINITIONS -D_LIB) #
ENDIF(MINGW)

ADD_LIBRARY(${TARGET_LIB} STATIC ${GIFLIB_SRCS} ${GIFLIB_PRIVATE_HEADERS} ${GIFLIB_PUBLIC_HEADERS})
ADD_LIBRARY(giflib STATIC ${GIFLIB_SRCS} ${GIFLIB_PUBLIC_HEADERS} ${GIFLIB_PRIVATE_HEADERS})

# Dependent include files
TARGET_INCLUDE_DIRECTORIES(giflib PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)

TARGET_COMPILE_DEFINITIONS(giflib
PRIVATE ${PRIVATE_DEFINITIONS}
)


TARGET_COMPILE_OPTIONS(giflib
PRIVATE ${PRIVATE_OPTIONS}
)

IF(MINGW)
SET_TARGET_PROPERTIES(${TARGET_LIB} PROPERTIES OUTPUT_NAME gif)
ENDIF()

# Runtime equals DLL-files
# Archive equals static libraries
# Library equals module libraries
IF(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
INSTALL(TARGETS ${TARGET_LIB}
RUNTIME DESTINATION ${EXECUTABLE_OUTPUT_PATH}
LIBRARY DESTINATION ${LIBRARY_OUTPUT_PATH}
ARCHIVE DESTINATION ${ARCHIVE_OUTPUT_PATH})
ENDIF()

IF(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
INSTALL(FILES ${GIFLIB_PUBLIC_HEADERS} DESTINATION ${INCLUDE_OUTPUT_PATH})
ENDIF()
# INSTALL
INSTALL(TARGETS giflib EXPORT giflib_export
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

INSTALL(FILES
${GIFLIB_PUBLIC_HEADERS}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)


0 comments on commit c76a34c

Please sign in to comment.