Blob Blame History Raw
cmake_minimum_required(VERSION 2.6.0)

project(giflib C)

SET(BUILD_STATIC_LIBS OFF CACHE BOOL "Whether to also build static libs")

execute_process(COMMAND ./getversion
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
    OUTPUT_VARIABLE VERSION
    OUTPUT_STRIP_TRAILING_WHITESPACE
)

set(LIBMAJOR 7)
set(LIBMINOR 1)
set(LIBPOINT 0)
set(LIBVER "${LIBMAJOR}.${LIBMINOR}.${LIBPOINT}")

set(giflib_SRC
    dgif_lib.c
    egif_lib.c
    getarg.c
    gifalloc.c
    gif_err.c
    gif_font.c
    gif_hash.c
    openbsd-reallocarray.c
    qprintf.c
    quantize.c
)

# Some utilities are installed
set(giflib_INSTALLABLE
    gif2rgb
    gifbuild
    giffix
    giftext
    giftool
    gifclrmp
)

# Some utilities are only used internally for testing.
# There is a parallel list in doc/Makefile.
# These are all candidates for removal in future releases.
set(giflib_UTILS
    ${giflib_INSTALLABLE}
    gifbg
    gifcolor
    gifecho
    giffilter
    gifhisto
    gifinto
    gifwedge
)

file(GLOB giflib_MAN doc/*.1)

### Build library / tools

add_library(gif SHARED ${giflib_SRC})
target_link_libraries(gif m)
set_target_properties(gif PROPERTIES VERSION ${LIBVER} SOVERSION ${LIBMAJOR})
if(WIN32)
    set_target_properties(gif PROPERTIES SUFFIX "-${LIBMAJOR}${CMAKE_SHARED_LIBRARY_SUFFIX}")
endif(WIN32)

if(${BUILD_STATIC_LIBS})
    add_library(gif_static STATIC ${giflib_SRC})
    set_target_properties(gif_static PROPERTIES OUTPUT_NAME gif)
endif(${BUILD_STATIC_LIBS})


foreach(UTILITY ${giflib_UTILS})
    add_executable(${UTILITY} ${UTILITY}.c)
    target_link_libraries(${UTILITY} gif)
endforeach()

### Installation

install(TARGETS gif
    RUNTIME DESTINATION bin
    ARCHIVE DESTINATION lib${LIB_SUFFIX}
    LIBRARY DESTINATION lib${LIB_SUFFIX}
)

if(${BUILD_STATIC_LIBS})
    install(TARGETS gif_static ARCHIVE DESTINATION lib${LIB_SUFFIX})
endif(${BUILD_STATIC_LIBS})

foreach(UTILITY ${giflib_UTILS})
    install(TARGETS ${UTILITY} DESTINATION bin)
endforeach()

install(FILES gif_lib.h DESTINATION include)
install(FILES ${giflib_MAN} DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1)


### Distribution tarball
set(giflib_DIST
    *.c
    *.h
    README
    NEWS
    TODO
    COPYING
    getversion
    ChangeLog
    CMakeLists.txt
    build.adoc
    history.adoc
    control
    doc/whatsinagif
    doc/*.1
    doc/*.xml
    doc/*.txt
    doc/index.html.in
    doc/00README
    doc/Makefile
    tests
    pic
)
# We include all of the XML, and also generated manual pages
# so people working from the distribution tarball won't need xmlto.
add_custom_target(dist-gz
    COMMAND tar --transform='s:^:giflib-${VERSION}/:' -czf giflib-${VERSION}.tar.gz ${giflib_DIST}
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)

add_custom_target(dist-bz2
    COMMAND tar --transform='s:^:giflib-${VERSION}/:' -cjf giflib-${VERSION}.tar.bz2 ${giflib_DIST}
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)

add_custom_target(dist DEPENDS dist-gz DEPENDS dist-bz2)


### Auditing tools

# cppcheck should run clean
add_custom_target(cppcheck
    COMMAND cppcheck --inline-suppr --template gcc --enable=all --suppress=unusedFunction --force *.[ch]
)