project(jpeg)

set(JPEG_VERSION_MAJOR 8 CACHE INT "Major JPEG version number" FORCE)
set(JPEG_VERSION_MINOR 0 CACHE INT "Minor JPEG version number" FORCE)
set(JPEG_VERSION_PATCH 0 CACHE INT "Release JPEG version number" FORCE)
set(JPEG_VERSION_STRING "${JPEG_VERSION_MAJOR}.${JPEG_VERSION_MINOR}.${JPEG_VERSION_PATCH}" CACHE STRING "JPEG version string" FORCE)

option(BUILD_tools "build the jpeg related tools like cjpeg, djpeg, jpegtran etc." OFF)
cmake_minimum_required(VERSION 2.6)

set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" )
set(LIB_DESTINATION "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE STRING "Library directory name" FORCE)

include_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_BINARY_DIR}
)

include(CheckIncludeFile)
check_include_file(stddef.h HAVE_STDDEF_H)
check_include_file(stdlib.h HAVE_STDLIB_H)

if(MSVC)
    add_definitions(-D_CRT_SECURE_NO_WARNINGS)
endif(MSVC)
if(WINCE)
    add_definitions(-DNO_GETENV)
endif(WINCE)

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/jconfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/jconfig.h)

set(libjpeg_SOURCES
    jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c
    jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c
    jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c
    jdapistd.c jdarith.c jdcoefct.c jdcolor.c
    jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c
    jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c
    jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c
    jquant2.c jutils.c jmemmgr.c jmemnobs.c
)

#jdatadst.c jdatasrc.c are in the header instead

set(libjpeg_HEADERS
    jpeglib.h
    jerror.h
    jdatadst.h
    jdatasrc.h
    jinclude.h
    jmorecfg.h
)

add_library(libjpeg SHARED ${libjpeg_SOURCES})

set_target_properties(libjpeg PROPERTIES
    OUTPUT_NAME jpeg
    VERSION ${JPEG_VERSION_STRING}
    SOVERSION ${JPEG_VERSION_MAJOR}
)

install(
    TARGETS libjpeg
    ARCHIVE DESTINATION ${LIB_DESTINATION}
    LIBRARY DESTINATION ${LIB_DESTINATION}
    RUNTIME DESTINATION bin
)

install(
    FILES ${libjpeg_HEADERS} ${CMAKE_CURRENT_BINARY_DIR}/jconfig.h
    DESTINATION include
    COMPONENT Devel
)

if(BUILD_tools)
set(cjpeg_SRCS cjpeg.c rdppm.c rdgif.c rdtarga.c rdrle.c rdbmp.c rdswitch.c cdjpeg.c)
add_executable(cjpeg ${cjpeg_SRCS})
target_link_libraries(cjpeg jpeg)

set(djpeg_SRCS djpeg.c wrppm.c wrgif.c wrtarga.c wrrle.c wrbmp.c rdcolmap.c cdjpeg.c)
add_executable(djpeg ${djpeg_SRCS})
target_link_libraries(djpeg jpeg)

set(jpegtran_SRCS jpegtran.c rdswitch.c cdjpeg.c transupp.c)
add_executable(jpegtran ${jpegtran_SRCS})
target_link_libraries(jpegtran jpeg)

set(rdjpgcom_SRCS rdjpgcom.c)
add_executable(rdjpgcom ${rdjpgcom_SRCS})
target_link_libraries(rdjpgcom jpeg)

set(wrjpgcom_SRCS wrjpgcom.c)
add_executable(wrjpgcom ${wrjpgcom_SRCS})
target_link_libraries(wrjpgcom jpeg)

install(
    TARGETS cjpeg djpeg jpegtran rdjpgcom wrjpgcom
    ARCHIVE DESTINATION ${LIB_DESTINATION}
    LIBRARY DESTINATION ${LIB_DESTINATION}
    RUNTIME DESTINATION bin
)
endif(BUILD_tools)