Files
Viper_VRTE/fltk/cfltk/CMakeLists.txt
T

254 lines
7.0 KiB
CMake

cmake_minimum_required(VERSION 3.28)
set(CFLTK_PROJECT_VERSION 0.1.8)
project(
cfltk2
HOMEPAGE_URL https://github.com/MoAlyousef/cfltk
DESCRIPTION "C Bindings for FLTK"
VERSION ${CFLTK_PROJECT_VERSION}
LANGUAGES C CXX)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
include(GNUInstallDirs)
if(APPLE)
enable_language(OBJC)
endif()
option(CFLTK_BUILD_SHARED "Builds a shared library" OFF)
option(USE_SYSTEM_FLTK "Finds and uses the installed FLTK library" OFF)
option(CFLTK_USE_OPENGL "Uses OpenGL" OFF)
option(CFLTK_SINGLE_THREADED "Disable multithreaded support" OFF)
option(CFLTK_LINK_IMAGES "Links image libraries" ON)
option(CFLTK_CARGO_BUILD "cfltk2 is built using Cargo" OFF)
option(CFLTK_MSVC_CRT_STATIC "cfltk2 is built with crt-static" OFF)
option(CFLTK_USE_CAIROEXT "Uses CairoExt FLTK feature" OFF)
option(CFLTK_USE_FPIC "Compile code with -fPIC to allow incorporation into shared lib." OFF)
option(CFLTK_SYSTEM_JPEG "Link installed libjpeg" OFF)
option(CFLTK_SYSTEM_PNG "Link installed libpng" OFF)
option(CFLTK_SYSTEM_ZLIB "Link installed zlib" OFF)
if (CFLTK_USE_FPIC OR CFLTK_BUILD_SHARED)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()
if(MSVC)
string(REGEX REPLACE "/EHsc" "/EHs-c-" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
add_definitions("/D_CRT_SECURE_NO_WARNINGS /wd4099 /wd4996")
if(CFLTK_MSVC_CRT_STATIC)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
string(REGEX REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE
"${CMAKE_CXX_FLAGS_RELEASE}")
string(REGEX REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE
"${CMAKE_C_FLAGS_RELEASE}")
endif()
elseif(ANDROID)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -frtti")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
endif()
# If cmake can't find the installed fltk, you might have to set the FLTK_DIR
# enviromental variable, export FLTK_DIR=/path/to/fltk
if(USE_SYSTEM_FLTK)
find_package(FLTK 1.5 CONFIG REQUIRED)
else()
file(GLOB RESULT "fltk")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
message(FATAL_ERROR "fltk submodule not initialized! Run: git submodule update --init --recursive")
endif()
set(FLTK_USE_SYSTEM_LIBJPEG ${CFLTK_SYSTEM_JPEG} CACHE BOOL "" FORCE)
set(FLTK_USE_SYSTEM_LIBPNG ${CFLTK_SYSTEM_PNG} CACHE BOOL "" FORCE)
set(FLTK_USE_SYSTEM_ZLIB ${CFLTK_SYSTEM_ZLIB} CACHE BOOL "" FORCE)
add_subdirectory(fltk)
endif()
file(GLOB_RECURSE CFLTK_HEADER_FILES "include/cfltk2/*.h*")
set(CFLTK_SRCS
src/cfl_new.cpp
src/cfl_lock.cpp
src/cfl.cpp
src/cfl_window.cpp
src/cfl_button.cpp
src/cfl_widget.cpp
src/cfl_group.cpp
src/cfl_text.cpp
src/cfl_box.cpp
src/cfl_input.cpp
src/cfl_menu.cpp
src/cfl_dialog.cpp
src/cfl_valuator.cpp
src/cfl_browser.cpp
src/cfl_misc.cpp
src/cfl_image.cpp
src/cfl_draw.cpp
src/cfl_table.cpp
src/cfl_tree.cpp
src/cfl_surface.cpp
src/cfl_font.cpp
src/cfl_utils.cpp
src/cfl_prefs.cpp
src/cfl_term.cpp
)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CFLTK_SRCS ${CFLTK_SRCS} src/cfl_nswindow.m)
endif()
if(UNIX AND NOT APPLE)
set(CFLTK_SRCS ${CFLTK_SRCS} src/cfl_platform.cpp)
endif()
if(NOT ANDROID)
set(CFLTK_SRCS ${CFLTK_SRCS} src/cfl_printer.cpp)
endif()
if(CFLTK_USE_OPENGL)
set(CFLTK_SRCS ${CFLTK_SRCS} src/glad.c)
endif()
if(CFLTK_USE_CAIROEXT)
find_package(PkgConfig REQUIRED)
pkg_check_modules(CAIRO REQUIRED IMPORTED_TARGET "cairo")
endif()
if(CFLTK_BUILD_SHARED)
add_library(cfltk2 SHARED)
else()
add_library(cfltk2 STATIC)
endif()
add_library(cfltk2::cfltk2 ALIAS cfltk2)
# message(FATAL_ERROR "${CFLTK_HEADER_FILES}")
target_sources(
cfltk2
PRIVATE ${CFLTK_SRCS}
PUBLIC
FILE_SET HEADERS
BASE_DIRS ${CMAKE_CURRENT_LIST_DIR}/include
FILES "${CFLTK_HEADER_FILES}"
)
if(CFLTK_CARGO_BUILD AND CFLTK_BUILD_SHARED)
add_custom_command(
TARGET cfltk2
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:cfltk2>
"${CMAKE_INSTALL_PREFIX}/../../../../$<TARGET_FILE_NAME:cfltk2>")
endif()
# if(CFLTK_CARGO_BUILD AND (UNIX OR MSYS OR MINGW))
# add_custom_command(
# TARGET cfltk2
# POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_INSTALL_PREFIX}/bin/fltk-config
# "${CMAKE_INSTALL_PREFIX}/../../../../fltk-config")
# endif()
target_compile_features(cfltk2 PRIVATE cxx_std_17)
set(CFLTK_LIBS fltk::fltk)
set(pc_req_private)
set(pc_libs_private "-lfltk")
set(other_c_flags)
if(CFLTK_LINK_IMAGES)
target_compile_definitions(cfltk2 PUBLIC CFLTK_USE_IMAGES)
list(APPEND CFLTK_LIBS fltk::images)
string(APPEND pc_libs_private
" -lfltk_images")
if(NOT CFLTK_SYSTEM_JPEG)
list(APPEND CFLTK_LIBS fltk::jpeg)
string(APPEND pc_libs_private
" -lfltk_jpeg")
endif()
if(NOT CFLTK_SYSTEM_PNG)
list(APPEND CFLTK_LIBS fltk::png)
string(APPEND pc_libs_private
" -lfltk_png")
endif()
if(NOT CFLTK_SYSTEM_ZLIB)
list(APPEND CFLTK_LIBS fltk::z)
string(APPEND pc_libs_private
" -lfltk_z")
endif()
endif()
if(CFLTK_USE_OPENGL)
set(CFLTK_LIBS ${CFLTK_LIBS} fltk::gl)
target_compile_definitions(cfltk2 PUBLIC CFLTK_USE_GL)
string(APPEND pc_libs_private " -lfltk_gl")
string(APPEND other_c_flags "-DCFLTK_USE_GL")
if(UNIX AND NOT APPLE)
string(APPEND pc_req_private " glx glu gl wayland-egl EGL")
elseif(APPLE)
string(APPEND pc_libs_private " -framework OpenGL")
elseif(WIN32)
string(APPEND pc_libs_private " -lopengl32 -lglu32")
endif()
endif()
if(CFLTK_USE_CAIROEXT)
if(WIN32 OR APPLE)
string(APPEND pc_req_private " cairo")
endif()
target_link_libraries(cfltk2 PUBLIC PkgConfig::CAIRO)
endif()
if(CFLTK_SINGLE_THREADED)
target_compile_definitions(cfltk2 PUBLIC CFLTK_SINGLE_THREADED)
string(APPEND other_c_flags " -DCFLTK_SINGLE_THREADED")
endif()
target_link_libraries(cfltk2 PUBLIC ${CFLTK_LIBS})
set_target_properties(cfltk2 PROPERTIES VERSION ${CFLTK_PROJECT_VERSION})
include(CMakePackageConfigHelpers)
set(cfltk2_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/cfltk2")
install(
TARGETS cfltk2
EXPORT cfltk2Targets
FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(
EXPORT cfltk2Targets
FILE cfltk2Targets.cmake
NAMESPACE cfltk2::
DESTINATION "${cfltk2_INSTALL_CMAKEDIR}"
)
configure_package_config_file(
"${CMAKE_CURRENT_LIST_DIR}/cmake/cfltk2Config.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cfltk2Config.cmake"
INSTALL_DESTINATION "${cfltk2_INSTALL_CMAKEDIR}"
NO_CHECK_REQUIRED_COMPONENTS_MACRO
)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/cfltk2ConfigVersion.cmake"
VERSION ${CFLTK_PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/cfltk2Config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/cfltk2ConfigVersion.cmake"
DESTINATION "${cfltk2_INSTALL_CMAKEDIR}"
)
include(${CMAKE_CURRENT_LIST_DIR}/cmake/cfltk2-pkgconfig.cmake)