# SPDX-FileCopyrightText: 2024 Open Mobile Platform LLC <community@omp.ru>
# SPDX-License-Identifier: BSD-3-Clause

cmake_minimum_required(VERSION 3.18)

set(PROJECT_NAME "pdfium")
project(pdfium LANGUAGES CXX)

IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(x64|x86_64)")
    SET(CPU_NAME "x64")
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86)")
    SET(CPU_NAME "x86")
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(ARM64|aarch64|ARM64EC|arm64ec|ARM64E|arm64e)")
    SET(CPU_NAME "arm64")
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(ARM|armv7hl|armv7l|armv7)")
    SET(CPU_NAME "arm")
ELSE()
    MESSAGE(FATAL_ERROR "Unsupported architecture \"${CMAKE_SYSTEM_PROCESSOR}\"")
ENDIF()
message( STATUS "Target CPU Name: ${CPU_NAME}" )

cmake_policy(VERSION 3.14...3.25)

set(PDFIUM_RELEASE chromium%2F7415)
set(PDFIUM_DIR ${CMAKE_BINARY_DIR}/pdfium)
set(PDFIUM_RELEASE_DIR ${PDFIUM_DIR}/${PDFIUM_RELEASE})

file(MAKE_DIRECTORY ${PDFIUM_RELEASE_DIR})

set(PDFIUM_PLATFORM "linux")
set(PDFIUM_LIB_FILENAME "libpdfium.so")
set(PDFIUM_LIB_DIR "lib")
set(PDFIUM_LINUX_ABI ${CPU_NAME})

set(PDFIUM_ARCHIVE_NAME pdfium-${PDFIUM_PLATFORM}-${PDFIUM_LINUX_ABI})
set(PDFIUM_SRC_LIB_FILENAME ${PDFIUM_RELEASE_DIR}/${PDFIUM_LIB_DIR}/${PDFIUM_LIB_FILENAME})
set(PDFIUM_SRC_IMPLIB_FILENAME ${PDFIUM_RELEASE_DIR}/lib/${PDFIUM_LIB_FILENAME}.lib)

set(PDFIUM_LIBS_DIR  ${CMAKE_BINARY_DIR}/.lib/${PDFIUM_RELEASE})
set(PDFIUM_LIBS_ARCH_DIR ${PDFIUM_LIBS_DIR}/${PDFIUM_LINUX_ABI})
set(PDFIUM_DEST_LIB_FILENAME ${PDFIUM_LIBS_ARCH_DIR}/${PDFIUM_LIB_FILENAME})

set(PDFIUM_LATEST_DIR ${CMAKE_BINARY_DIR}/.lib/latest)
set(PDFIUM_LATEST_LIBS_ARCH_DIR ${PDFIUM_LATEST_DIR}/${PDFIUM_LINUX_ABI})
set(PDFIUM_LATEST_LIB_FILENAME ${PDFIUM_LATEST_LIBS_ARCH_DIR}/${PDFIUM_LIB_FILENAME})

if(NOT EXISTS ${PDFIUM_SRC_LIB_FILENAME})
    message(STATUS "Download precompiled PDFium...")
    file(DOWNLOAD https://github.com/bblanchon/pdfium-binaries/releases/download/${PDFIUM_RELEASE}/${PDFIUM_ARCHIVE_NAME}.tgz ${PDFIUM_RELEASE_DIR}/${PDFIUM_ARCHIVE_NAME}.tgz)
    execute_process(
        COMMAND ${CMAKE_COMMAND} -E tar zxf ${PDFIUM_RELEASE_DIR}/${PDFIUM_ARCHIVE_NAME}.tgz
        WORKING_DIRECTORY ${PDFIUM_RELEASE_DIR}
        ERROR_QUIET
    )
    if(STATUS AND NOT STATUS EQUAL 0)
        message(FATAL_ERROR "Could not obtain PDFium binary for ${PDFIUM_LINUX_ABI}")
    endif()
else()
    message(STATUS "Use existing precompiled PDFium." )
endif()

if (NOT EXISTS ${PDFIUM_DEST_LIB_FILENAME})
    file(MAKE_DIRECTORY ${PDFIUM_LIBS_ARCH_DIR})
    file(COPY ${PDFIUM_SRC_LIB_FILENAME} DESTINATION ${CMAKE_BINARY_DIR}/pdfium/lib)
endif()

if (NOT EXISTS ${PDFIUM_LIBS_DIR}/include)
    file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/pdfium/include/pdfium)
    file(GLOB INCLUDE_FILES ${PDFIUM_RELEASE_DIR}/include/*)
    foreach(_INCLUDE_FILE ${INCLUDE_FILES})
        file(COPY ${_INCLUDE_FILE} DESTINATION ${CMAKE_BINARY_DIR}/pdfium/include/pdfium)
    endforeach()
endif()

file(REMOVE ${PDFIUM_LATEST_DIR})

set(APP_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/share/${APP_TARGET_NAME})

install(DIRECTORY ${CMAKE_BINARY_DIR}/pdfium/lib/
    DESTINATION ${APP_INSTALL_PATH}/lib
    FILES_MATCHING
        PATTERN "*.so*"
)
