Gentoo No package 'gtk+-3.0' found
This issue is related to: #19419 #19419
and 3 bugs downstream: https://bugs.gentoo.org/buglist.cgi?quicksearch=cmake%20lib64
Scenario: I installed flutter google UI framework and created a new project in Intellij Idea, created new flutter project to be run as Linux desktop app.
Content of my CMakeList.txt -refer to System-level dependencies block.
cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX)
set(BINARY_NAME "flutter_test_devices") set(APPLICATION_ID "com.example.flutter_test_devices")
cmake_policy(SET CMP0063 NEW)
set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
Root filesystem for cross-building.
if(FLUTTER_TARGET_PLATFORM_SYSROOT) set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) endif()
Configure build options.
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Flutter build mode" FORCE) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Profile" "Release") endif()
Compilation settings that should be applied to most targets.
function(APPLY_STANDARD_SETTINGS TARGET)
target_compile_features(${TARGET} PUBLIC cxx_std_14)
target_compile_options(${TARGET} PRIVATE -Wall -Werror)
target_compile_options({TARGET} PRIVATE "
<$<NOT:$CONFIG:Debug>:-O3>")
target_compile_definitions({TARGET} PRIVATE "
<$<NOT:$CONFIG:Debug>:NDEBUG>")
endfunction()
set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
Flutter library and tool build rules.
add_subdirectory(${FLUTTER_MANAGED_DIR})
System-level dependencies.
find_package(PkgConfig REQUIRED) pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}")
Application build
add_executable(${BINARY_NAME} "main.cc" "my_application.cc" "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" ) apply_standard_settings(${BINARY_NAME}) target_link_libraries(${BINARY_NAME} PRIVATE flutter) target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) add_dependencies(${BINARY_NAME} flutter_assemble)
Only the install-generated bundle's copy of the executable will launch
correctly, since the resources must in the right relative locations. To avoid
people trying to run the unbundled copy, put it in a subdirectory instead of
the default top-level location.
set_target_properties(${BINARY_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" )
Generated plugin build rules, which manage building the plugins and adding
them to the application.
include(flutter/generated_plugins.cmake)
=== Installation ===
By default, "installing" just makes a relocatable bundle in the build
directory.
set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) endif()
Start with a clean build bundle directory every time.
install(CODE " file(REMOVE_RECURSE "${BUILD_BUNDLE_DIR}/") " COMPONENT Runtime)
set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
install(TARGETS {BINARY_NAME} RUNTIME DESTINATION "
{CMAKE_INSTALL_PREFIX}"
COMPONENT Runtime)
install(FILES "{FLUTTER_ICU_DATA_FILE}" DESTINATION "
{INSTALL_BUNDLE_DATA_DIR}"
COMPONENT Runtime)
install(FILES "{FLUTTER_LIBRARY}" DESTINATION "
{INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
if(PLUGIN_BUNDLED_LIBRARIES) install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" COMPONENT Runtime) endif()
Fully re-copy the assets directory on each build to avoid having stale files
from a previous install.
set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
install(CODE "
file(REMOVE_RECURSE "{INSTALL_BUNDLE_DATA_DIR}/
{FLUTTER_ASSET_DIR_NAME}")
" COMPONENT Runtime)
install(DIRECTORY "{PROJECT_BUILD_DIR}/
{FLUTTER_ASSET_DIR_NAME}"
DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
Install the AOT library on non-Debug builds only.
if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
install(FILES "{AOT_LIBRARY}" DESTINATION "
{INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
endif()
Now when I run app I get:
[ +2 ms] executing: [build/linux/x64/debug/] cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DFLUTTER_TARGET_PLATFORM=linux-x64 /home/zangetsu/StudioProjects/flutter_test_devices/linux
[ +40 ms] -- Checking for module 'gtk+-3.0'
[ ] -- No package 'gtk+-3.0' found
[ ] -- Configuring incomplete, errors occurred!
[ ] See also "/home/zangetsu/StudioProjects/flutter_test_devices/build/linux/x64/debug/CMakeFiles/CMakeOutput.log".
[ ] CMake Error at /usr/share/cmake/Modules/FindPkgConfig.cmake:562 (message):
[ +1 ms] A required package was not found
[ ] Call Stack (most recent call first):
[ ] /usr/share/cmake/Modules/FindPkgConfig.cmake:784 (_pkg_check_modules_internal)
[ ] flutter/CMakeLists.txt:24 (pkg_check_modules)
[+8154 ms] Exception: Unable to generate build files
When I check gtk app with pkg-config I get:
andromeda ~ # pkg-config --cflags gtk+-3.0
-I/usr/include/gtk-3.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/lib64/libffi/include -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/uuid -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/gio-unix-2.0 -I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include -I/usr/include/at-spi-2.0 -pthread
GTK-3.0 is installed in this lib directory which CMake won't detect:
andromeda ~ # ls /usr/lib64/gtk
gtk-2.0/ gtk-3.0/ gtk-4.0/ gtkmm-3.0/
It seems Cmake search in /usr/lib instead of /usr/lib64 to me based on reading related issues referenced in top of this issue report. Any hint for quick override of the path?