From b4cf1a9824f2c4ba9596044962d3af36e3ca3d99 Mon Sep 17 00:00:00 2001 From: Albrecht Schlosser Date: Sun, 14 Apr 2024 19:05:39 +0200 Subject: Fix and improve generation of fltk-config (#954 and more) Parts of this commit fix the usage of CMake targets in the generation process of fltk-config modified by PR #954. The rest improves handling of variables used to generate fltk-config, removes obsolete comments, documents variables like GLLIBS etc. which had to be done anyway. --- CMake/options.cmake | 49 ++++++++++++++++++++++++++----------------------- CMake/setup.cmake | 2 -- CMake/variables.cmake | 30 ++++++++++++++++++------------ src/CMakeLists.txt | 32 +++++--------------------------- 4 files changed, 49 insertions(+), 64 deletions(-) diff --git a/CMake/options.cmake b/CMake/options.cmake index 45ece7632..b242c5f40 100644 --- a/CMake/options.cmake +++ b/CMake/options.cmake @@ -603,13 +603,16 @@ if(FLTK_BUILD_GL) if(FLTK_BACKEND_WAYLAND) pkg_check_modules(WLD_EGL IMPORTED_TARGET wayland-egl) pkg_check_modules(PKG_EGL IMPORTED_TARGET egl) - pkg_check_modules(PKG_GL IMPORTED_TARGET gl) + pkg_check_modules(PKG_GL IMPORTED_TARGET gl) pkg_check_modules(PKG_GLU IMPORTED_TARGET glu) + if(NOT (WLD_EGL_FOUND AND PKG_EGL_FOUND AND PKG_GL_FOUND AND PKG_GLU_FOUND)) message(STATUS "Modules 'wayland-egl, egl, gl, and glu' are required to build for the Wayland backend.") message(FATAL_ERROR "*** Aborting ***") - endif(NOT (WLD_EGL_FOUND AND PKG_EGL_FOUND AND PKG_GL_FOUND AND PKG_GLU_FOUND)) + endif() + endif(FLTK_BACKEND_WAYLAND) + if(FLTK_BACKEND_X11) set(OPENGL_FOUND TRUE) find_library(OPENGL_LIB GL) @@ -628,7 +631,7 @@ if(FLTK_BUILD_GL) set(HAVE_GL_GLU_H ${HAVE_OPENGL_GLU_H}) endif(APPLE) endif(FLTK_BACKEND_X11) -else() +else(FLTK_BUILD_GL) set(OPENGL_FOUND FALSE) set(HAVE_GL FALSE) set(HAVE_GL_GLU_H FALSE) @@ -641,24 +644,32 @@ mark_as_advanced(OPENGL_LIB) # internal cache variable, not relevant for users # from the cache above. It has been marked "advanced" before in resources.cmake. mark_as_advanced(HAVE_GL_GLU_H) +# Note: GLLIBS is a CMake 'list' and is used exclusively to generate fltk-config ! + +# FIXME, this should be improved! +# We should probably deduct this from OPENGL_LIBRARIES but it turned +# out to be difficult since FindOpenGL seems to return different +# syntax depending on the platform (and maybe also CMake version). +# Hence we use the following code... + +set(GLLIBS) +set(FLTK_GL_FOUND FALSE) + if(OPENGL_FOUND) + set(FLTK_GL_FOUND TRUE) find_path(OPENGL_GLU_INCLUDE_DIR NAMES GL/glu.h OpenGL/glu.h HINTS ${OPENGL_INCLUDE_DIR} ${X11_INCLUDE_DIR}) set(CMAKE_REQUIRED_INCLUDES ${OPENGL_INCLUDE_DIR}/GL ${OPENGL_GLU_INCLUDE_DIR}) - # Set GLLIBS (used in fltk-config). - # We should probably deduct this from OPENGL_LIBRARIES but it turned - # out to be difficult since FindOpenGL seems to return different - # syntax depending on the platform (and maybe also CMake version). - # Hence we use the following code... - if(WIN32) - set(GLLIBS "-lglu32 -lopengl32") + list(APPEND GLLIBS -lglu32 -lopengl32) elseif(APPLE AND NOT FLTK_BACKEND_X11) - set(GLLIBS "-framework OpenGL") + list(APPEND GLLIBS "-framework OpenGL") elseif(FLTK_BACKEND_WAYLAND) - set(GLLIBS PkgConfig::WLD_EGL PkgConfig::PKG_EGL PkgConfig::PKG_GLU PkgConfig::PKG_GL) + foreach(_lib WLD_EGL PKG_EGL PKG_GLU PKG_GL) + list(APPEND GLLIBS ${${_lib}_LDFLAGS}) + endforeach(_lib ) else() - set(GLLIBS "-lGLU -lGL") + list(APPEND GLLIBS -lGLU -lGL) endif(WIN32) # check if function glXGetProcAddressARB exists @@ -667,11 +678,6 @@ if(OPENGL_FOUND) check_function_exists(glXGetProcAddressARB HAVE_GLXGETPROCADDRESSARB) set(CMAKE_REQUIRED_LIBRARIES ${TEMP_REQUIRED_LIBRARIES}) unset(TEMP_REQUIRED_LIBRARIES) - - set(FLTK_GL_FOUND TRUE) -else() - set(FLTK_GL_FOUND FALSE) - set(GLLIBS) endif(OPENGL_FOUND) ####################################################################### @@ -861,10 +867,9 @@ if((X11_Xft_FOUND OR NOT USE_PANGOXFT) AND FLTK_USE_PANGO) # add required libraries to fltk-config ... if(USE_PANGOXFT) - list(APPEND FLTK_LDLIBS PkgConfig::PANGOXFT) + list(APPEND FLTK_LDLIBS ${PANGOXFT_LDFLAGS}) endif(USE_PANGOXFT) - list(APPEND FLTK_LDLIBS PkgConfig::PANGOCAIRO) - list(REMOVE_DUPLICATES FLTK_LDLIBS) + list(APPEND FLTK_LDLIBS ${PANGOCAIRO_LDFLAGS}) # *FIXME* Libraries should not be added explicitly if possible if(FLTK_BACKEND_WAYLAND AND FLTK_USE_LIBDECOR_GTK AND NOT USE_SYSTEM_LIBDECOR) @@ -874,8 +879,6 @@ if((X11_Xft_FOUND OR NOT USE_PANGOXFT) AND FLTK_USE_PANGO) list(APPEND FLTK_LDLIBS -lX11) endif() - list(REMOVE_DUPLICATES FLTK_LDLIBS) - if(APPLE) get_filename_component(PANGO_L_PATH ${HAVE_LIB_PANGO} PATH) set(LDFLAGS "${LDFLAGS} -L${PANGO_L_PATH}") diff --git a/CMake/setup.cmake b/CMake/setup.cmake index ed00be391..3b6708416 100644 --- a/CMake/setup.cmake +++ b/CMake/setup.cmake @@ -83,10 +83,8 @@ set(FLTK_BUILD_INCLUDE_DIRECTORIES) set(FLTK_LDLIBS "") set(FLTK_LIBRARIES "") -set(GLLIBS "") set(IMAGELIBS "") set(LDFLAGS "") -set(LIBS "") set(LINK_LIBS "") set(STATICIMAGELIBS "") diff --git a/CMake/variables.cmake b/CMake/variables.cmake index 20a36eda8..cb5d62481 100644 --- a/CMake/variables.cmake +++ b/CMake/variables.cmake @@ -24,7 +24,6 @@ if(DEBUG_VARIABLES_CMAKE) fl_debug_var(CMAKE_DL_LIBS) fl_debug_var(CMAKE_EXE_LINKER_FLAGS) fl_debug_var(LDFLAGS) - fl_debug_var(LIBS) fl_debug_var(GLLIBS) fl_debug_var(IMAGELIBS) fl_debug_var(STATICIMAGELIBS) @@ -45,9 +44,11 @@ if(WIN32) elseif(APPLE AND NOT FLTK_BACKEND_X11) list(APPEND FLTK_LDLIBS ${FLTK_COCOA_FRAMEWORKS}) elseif(FLTK_BACKEND_WAYLAND) - list(APPEND FLTK_LDLIBS PkgConfig::WLDCURSOR PkgConfig::WLDCLIENT PkgConfig::XKBCOMMON PkgConfig::DBUS) + foreach(_lib WLDCURSOR WLDCLIENT XKBCOMMON DBUS) + list(APPEND FLTK_LDLIBS "${${_lib}_LDFLAGS}") + endforeach() if(USE_SYSTEM_LIBDECOR) - list(APPEND FLTK_LDLIBS PkgConfig::SYSTEM_LIBDECOR) + list(APPEND FLTK_LDLIBS ${SYSTEM_LIBDECOR_LDFLAGS}) endif(USE_SYSTEM_LIBDECOR) else() list(APPEND FLTK_LDLIBS -lm) @@ -115,8 +116,19 @@ else() endif(LIB_zlib) endif(FLTK_USE_BUNDLED_ZLIB) -string(REPLACE ";" " " IMAGELIBS "${IMAGELIBS}") -string(REPLACE ";" " " STATICIMAGELIBS "${STATICIMAGELIBS}") +# remove duplicates from CMake "list" variables for fltk-config + +list(REMOVE_DUPLICATES GLLIBS) +list(REMOVE_DUPLICATES FLTK_LDLIBS) +list(REMOVE_DUPLICATES IMAGELIBS) +list(REMOVE_DUPLICATES STATICIMAGELIBS) + +# convert CMake lists to strings with spaces for fltk-config + +string(REPLACE ";" " " GLLIBS "${GLLIBS}") +string(REPLACE ";" " " LIBS "${FLTK_LDLIBS}") +string(REPLACE ";" " " IMAGELIBS "${IMAGELIBS}") +string(REPLACE ";" " " STATICIMAGELIBS "${STATICIMAGELIBS}") ####################################################################### set(CC ${CMAKE_C_COMPILER}) @@ -136,12 +148,6 @@ endforeach(arg ${FLTK_CFLAGS}) set(CXXFLAGS "${CFLAGS}") -foreach(arg ${FLTK_LDLIBS}) - set(LINK_LIBS "${LINK_LIBS} ${arg}") -endforeach(arg ${FLTK_LDLIBS}) - -set(LIBS "${LINK_LIBS}") - if(${CMAKE_SYSTEM_NAME} STREQUAL "AIX") set(SHAREDSUFFIX "_s") else() @@ -154,11 +160,11 @@ if(DEBUG_VARIABLES_CMAKE) fl_debug_var(CMAKE_DL_LIBS) fl_debug_var(CMAKE_EXE_LINKER_FLAGS) fl_debug_var(LDFLAGS) + fl_debug_var(FLTK_LDLIBS) fl_debug_var(LIBS) fl_debug_var(GLLIBS) fl_debug_var(IMAGELIBS) fl_debug_var(STATICIMAGELIBS) - fl_debug_var(FLTK_LDLIBS) fl_debug_var(LIB_jpeg) fl_debug_var(LIB_png) fl_debug_var(LIB_zlib) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 326fb5d09..b01ee09ab 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -631,9 +631,12 @@ endif() ####################################################################### -# prepare optional libs for shared and static FLTK libraries +# Prepare optional libs for shared and static FLTK libraries. +# Note: OPTIONAL_LIBS is a CMake 'list' and may contain CMake targets, +# i.e. it is only used for CMake stuff: target_link_libraries(). +# FIXME: make this all more consistent (targets rather than libs). -set(OPTIONAL_LIBS) +set(OPTIONAL_LIBS) # init if(LIB_dl) list(APPEND OPTIONAL_LIBS ${LIB_dl}) @@ -670,10 +673,6 @@ if(HAVE_XRENDER) list(APPEND OPTIONAL_LIBS ${X11_Xrender_LIB}) endif(HAVE_XRENDER) -### if(FLTK_HAVE_CAIRO) # FLTK_OPTION_CAIRO_WINDOW or FLTK_OPTION_CAIRO_EXT or Wayland -### list(APPEND OPTIONAL_LIBS ${PKG_CAIRO_LIBRARIES}) -### endif() - if(USE_PANGO) ### FIXME ### This needs to use the PKG_* variables directly list(APPEND OPTIONAL_LIBS ${HAVE_LIB_PANGO} PkgConfig::PANGOCAIRO) @@ -772,10 +771,6 @@ endif(UNIX AND FLTK_BACKEND_WAYLAND) fl_add_library(fltk STATIC "${STATIC_FILES}") target_link_libraries(fltk PUBLIC ${OPTIONAL_LIBS}) -### if(FLTK_HAVE_CAIRO OR FLTK_USE_CAIRO) -### target_link_directories(fltk PUBLIC ${PKG_CAIRO_LIBRARY_DIRS}) -### endif() - ####################################################################### if(FLTK_BUILD_FORMS) @@ -798,10 +793,6 @@ fl_add_library(fltk_images STATIC "${IMGCPPFILES}") target_link_libraries(fltk_images PUBLIC fltk::fltk) target_link_libraries(fltk_images PRIVATE ${FLTK_IMAGE_LIBRARIES}) -### target_link_libraries(fltk_images PUBLIC ${FLTK_JPEG_LIBRARIES}) -### target_link_libraries(fltk_images PUBLIC ${FLTK_PNG_LIBRARIES}) -### target_link_libraries(fltk_images PUBLIC ${FLTK_IMAGE_LIBRARIES}) - if(FLTK_USE_BUNDLED_JPEG) target_include_directories(fltk_images PUBLIC $ @@ -825,17 +816,11 @@ endif(FLTK_USE_GL) # Shared libraries, part 1: everything except Visual Studio (MSVC) ####################################################################### -### fl_debug_var(OPTIONAL_LIBS) - if(FLTK_BUILD_SHARED_LIBS AND NOT MSVC) fl_add_library(fltk SHARED "${SHARED_FILES}") target_link_libraries(fltk-shared PUBLIC ${OPTIONAL_LIBS}) - ### if(FLTK_HAVE_CAIRO OR FLTK_USE_CAIRO) - ### target_link_directories(fltk-shared PUBLIC ${PKG_CAIRO_LIBRARY_DIRS}) - ### endif() - ################################################################### if(FLTK_BUILD_FORMS) @@ -845,12 +830,6 @@ if(FLTK_BUILD_SHARED_LIBS AND NOT MSVC) ################################################################### - ### fl_debug_var(fltk_images) - ### fl_debug_var(FLTK_JPEG_LIBRARIES) - ### fl_debug_var(FLTK_PNG_LIBRARIES) - ### fl_debug_var(FLTK_ZLIB_LIBRARIES) - ### fl_debug_var(FLTK_IMAGE_LIBRARIES) - fl_add_library(fltk_images SHARED "${IMGCPPFILES}") target_link_libraries(fltk_images-shared PUBLIC fltk::fltk-shared) @@ -859,7 +838,6 @@ if(FLTK_BUILD_SHARED_LIBS AND NOT MSVC) target_link_libraries(fltk_images PUBLIC ${FLTK_IMAGE_LIBRARIES}) if(FLTK_USE_BUNDLED_JPEG) - ## include_directories(${CMAKE_CURRENT_SOURCE_DIR}) target_include_directories(fltk_images-shared PUBLIC $ # $ -- cgit v1.2.3