This is an automated email from the ASF dual-hosted git repository. swebb2066 pushed a commit to branch qt_support_as_component in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
commit 49c9cbd3a1fc04c0503da337f66cd86045b40815 Author: Stephen Webb <[email protected]> AuthorDate: Fri Feb 27 17:59:30 2026 +1100 Simplify use of log4cxx-qt in consuming CMake projects --- .github/workflows/log4cxx-ubuntu.yml | 25 ++++++++++++++++++++----- CMakeLists.txt | 26 ++++++++++++++++++++------ Config.cmake.in | 20 ++++++++++++++++++++ src/examples/cpp/MyApp-qt/CMakeLists.txt | 31 +++++++++++++++++++++++++++++++ src/examples/cpp/MyApp/CMakeLists.txt | 28 ++++++++++++++++++++++++++++ 5 files changed, 119 insertions(+), 11 deletions(-) diff --git a/.github/workflows/log4cxx-ubuntu.yml b/.github/workflows/log4cxx-ubuntu.yml index 6375fedf..1421556f 100644 --- a/.github/workflows/log4cxx-ubuntu.yml +++ b/.github/workflows/log4cxx-ubuntu.yml @@ -105,9 +105,7 @@ jobs: - name: 'run cmake - posix' run: | - cd main - mkdir build - cd build + ROOT=`pwd` cmake \ -DCMAKE_CXX_COMPILER=${{ matrix.cxx }} \ -DLOG4CXX_ENABLE_ODBC=${{ matrix.odbc }} \ @@ -118,8 +116,25 @@ jobs: -DBUILD_FUZZERS=${{ matrix.fuzzers }} \ -DLOG4CXX_CHAR=${{ matrix.logchar }} \ -DLOG4CXX_BUILD_NEXT_ABI=${{ matrix.next_abi }} \ - .. - cmake --build . + -DCMAKE_INSTALL_PREFIX=$ROOT/lib \ + -S $ROOT/main \ + -B $ROOT/build + cmake --build $ROOT/build --target install + + - name: 'test installation' + run: | + ROOT=`pwd` + cmake \ + -DCMAKE_PREFIX_PATH=$ROOT/lib \ + -S $ROOT/main/src/examples/cpp/MyApp \ + -B $ROOT/MyApp-build + cmake --build $ROOT/MyApp-build + if [ ${{ matrix.qt }} == ON ]; then + cmake \ + -S $ROOT/main/src/examples/cpp/MyApp-qt \ + -B $ROOT/MyApp-qt-build + cmake --build $ROOT/MyApp-qt-build + if - name: run unit tests shell: pwsh diff --git a/CMakeLists.txt b/CMakeLists.txt index 7db4e1eb..e81e6c01 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -211,29 +211,42 @@ if(LOG4CXX_WITH_PKG_CONFIG) endif(LOG4CXX_WITH_PKG_CONFIG) # Support for find_package(log4cxx) in consuming CMake projects using -# target_include_directories(myApplication PRIVATE $<TARGET_PROPERTY:log4cxx,INTERFACE_INCLUDE_DIRECTORIES>) # target_link_libraries( myApplication PRIVATE log4cxx) install(EXPORT ${LOG4CXX_LIB_NAME}Targets - FILE ${LOG4CXX_LIB_NAME}Config.cmake + FILE ${LOG4CXX_LIB_NAME}Targets.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${LOG4CXX_LIB_NAME} ) -# Support for find_package(log4cxx 1.3) in consuming CMake projects include(CMakePackageConfigHelpers) +# Support find_package(log4cxx CONFIG) in consuming CMake projects +configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/${LOG4CXX_LIB_NAME}Config.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${LOG4CXX_LIB_NAME} + NO_SET_AND_CHECK_MACRO +) +# Support for find_package(log4cxx 1.6) in consuming CMake projects write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/${LOG4CXX_LIB_NAME}ConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY SameMinorVersion ) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${LOG4CXX_LIB_NAME}ConfigVersion.cmake" +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/${LOG4CXX_LIB_NAME}Config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/${LOG4CXX_LIB_NAME}ConfigVersion.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${LOG4CXX_LIB_NAME} ) if(LOG4CXX_QT_SUPPORT) + # Support for find_package(log4cxx COMPONENTS qt) in consuming CMake projects + install(EXPORT ${LOG4CXX_LIB_NAME}-qtTargets + FILE ${LOG4CXX_LIB_NAME}-qtTargets.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${LOG4CXX_LIB_NAME} + ) + if(${log4cxx_VERSION_MAJOR} EQUAL 1) + # Support for find_package(log4cxx-qt) in consuming CMake projects install(EXPORT ${LOG4CXX_LIB_NAME}-qtTargets FILE ${LOG4CXX_LIB_NAME}-qtConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${LOG4CXX_LIB_NAME}-qt ) - # Support for find_package(log4cxx 0.11) in consuming CMake projects - include(CMakePackageConfigHelpers) + # Support for find_package(log4cxx-qt 1.6) in consuming CMake projects write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/${LOG4CXX_LIB_NAME}-qtConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY SameMinorVersion @@ -241,6 +254,7 @@ if(LOG4CXX_QT_SUPPORT) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${LOG4CXX_LIB_NAME}-qtConfigVersion.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${LOG4CXX_LIB_NAME}-qt ) + endif(${log4cxx_VERSION_MAJOR} 1) endif(LOG4CXX_QT_SUPPORT) # diff --git a/Config.cmake.in b/Config.cmake.in new file mode 100644 index 00000000..bde6eeae --- /dev/null +++ b/Config.cmake.in @@ -0,0 +1,20 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/${CMAKE_FIND_PACKAGE_NAME}Targets.cmake") + +# The components that can specified in find_package +set(_${CMAKE_FIND_PACKAGE_NAME}_supported_components qt) + +foreach(component ${${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS}) + # if we couldn't find the component, set the ${CMAKE_FIND_PACKAGE_NAME} library to no + # longer be found and notify the user about the missing component + if (NOT ${component} IN_LIST _${CMAKE_FIND_PACKAGE_NAME}_supported_components) + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND False) + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "Unsupported component: ${component}") + else() + include(${CMAKE_CURRENT_LIST_DIR}/${CMAKE_FIND_PACKAGE_NAME}-${component}Targets.cmake) + set(${CMAKE_FIND_PACKAGE_NAME}_${component}_FOUND True) + endif() +endforeach() + +check_required_components(${CMAKE_FIND_PACKAGE_NAME}) diff --git a/src/examples/cpp/MyApp-qt/CMakeLists.txt b/src/examples/cpp/MyApp-qt/CMakeLists.txt new file mode 100644 index 00000000..db2b8b3f --- /dev/null +++ b/src/examples/cpp/MyApp-qt/CMakeLists.txt @@ -0,0 +1,31 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http:/www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +cmake_minimum_required(VERSION 3.13) +project(MyApp LANGUAGES CXX) + +# Find the required libraries +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core) +find_package(log4cxx REQUIRED) +find_package(log4cxx COMPONENTS qt REQUIRED) + +# Build an executable that uses Qt and Log4cxx +get_filename_component(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}" DIRECTORY) +add_executable(MyApp ${SOURCE_DIR}/MyApp-qt.cpp) +target_include_directories(MyApp PRIVATE ${SOURCE_DIR}) +target_sources(MyApp PRIVATE ${SOURCE_DIR}/com/foo/config-qt.cpp ${SOURCE_DIR}/com/foo/bar-qt.cpp) +target_link_libraries(MyApp PRIVATE Qt${QT_VERSION_MAJOR}::Core log4cxx-qt) diff --git a/src/examples/cpp/MyApp/CMakeLists.txt b/src/examples/cpp/MyApp/CMakeLists.txt new file mode 100644 index 00000000..5cfe07aa --- /dev/null +++ b/src/examples/cpp/MyApp/CMakeLists.txt @@ -0,0 +1,28 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http:/www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +cmake_minimum_required(VERSION 3.13) +project(MyApp LANGUAGES CXX) + +# Find the required library +find_package(log4cxx REQUIRED) + +# Build an executable that uses Log4cxx +get_filename_component(SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}" DIRECTORY) +add_executable(MyApp ${SOURCE_DIR}/MyApp2.cpp) +target_include_directories(MyApp PRIVATE ${SOURCE_DIR}) +target_sources(MyApp PRIVATE ${SOURCE_DIR}/com/foo/config4.cpp ${SOURCE_DIR}/com/foo/bar.cpp) +target_link_libraries(MyApp PRIVATE log4cxx)
