# Copyright (c) 2018-2024 Cosmin Truta
#
# This software is released under the MIT license. For conditions of
# distribution and use, see the LICENSE file part of this package.

cmake_minimum_required(VERSION 3.5)

project(PNGMINUS C)

option(PNGMINUS_USE_SYSTEM_PNG
       "Use the libpng build found in the system" OFF)

add_executable(png2pnm png2pnm.c)
add_executable(pnm2png pnm2png.c)

if(PNGMINUS_USE_SYSTEM_PNG)
    # Use the system libpng.
    find_package(PNG REQUIRED)
    target_link_libraries(png2pnm PRIVATE PNG::PNG)
    target_link_libraries(pnm2png PRIVATE PNG::PNG)
else()
    # Build and use the internal libpng.
    # Configure libpng for static linking, to produce single-file executables.
    set(PNG_STATIC ON
        CACHE STRING "Build the internal libpng as a static library" FORCE)
    set(PNG_SHARED OFF
        CACHE STRING "Build the internal libpng as a shared library" FORCE)
    set(PNG_FRAMEWORK OFF
        CACHE STRING "Build the internal libpng as a framework bundle" FORCE)
    add_subdirectory(../.. libpng)
    target_include_directories(png2pnm PRIVATE
        "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../..>"
        "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/libpng>"
    )
    target_include_directories(pnm2png PRIVATE
        "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../..>"
        "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/libpng>"
    )
    target_link_libraries(png2pnm PRIVATE png_static)
    target_link_libraries(pnm2png PRIVATE png_static)
endif()
