diff --git a/CMakeLists.txt b/CMakeLists.txt index 0a7be1c..41c67eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,108 +1,113 @@ cmake_minimum_required(VERSION 3.5) set(KF5_VERSION "5.61.0") # handled by release scripts project(KWindowSystem VERSION ${KF5_VERSION}) +if (EXISTS ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) + include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) + conan_basic_setup(TARGETS) +endif() + # ECM setup include(FeatureSummary) find_package(ECM 5.60.0 NO_MODULE) set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules") feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) include(GenerateExportHeader) include(CMakePackageConfigHelpers) include(ECMSetupVersion) include(ECMGenerateHeaders) include(CMakeFindFrameworks) include(ECMQtDeclareLoggingCategory) include(ECMAddQch) include(ECMPoQmTools) option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF) add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)") ecm_setup_version(PROJECT VARIABLE_PREFIX KWINDOWSYSTEM VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kwindowsystem_version.h" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5WindowSystemConfigVersion.cmake" SOVERSION 5) # Dependencies set(REQUIRED_QT_VERSION 5.11.0) find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Widgets) include(KDEInstallDirs) include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) include(KDECMakeSettings) if (APPLE) cmake_find_frameworks(Carbon) cmake_find_frameworks(CoreFoundation) endif() if(WIN32) find_package(Qt5WinExtras REQUIRED) endif() if (NOT APPLE) find_package(X11) endif() set(KWINDOWSYSTEM_HAVE_X11 ${X11_FOUND}) if(X11_FOUND) find_package(XCB COMPONENTS XCB KEYSYMS) find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED X11Extras) set_package_properties(X11_Xrender PROPERTIES DESCRIPTION "X Rendering Extension (libXrender)" URL "http://www.x.org" TYPE RECOMMENDED PURPOSE "Support for compositing, rendering operations, and alpha-blending") set(KWINDOWSYSTEM_HAVE_XRENDER ${X11_Xrender_FOUND}) set(KWINDOWSYSTEM_HAVE_XFIXES ${X11_Xfixes_FOUND}) endif() # Subdirectories if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") ecm_install_po_files_as_qm(po) endif() add_subdirectory(src) if (BUILD_TESTING) add_subdirectory(autotests) add_subdirectory(tests) endif() # create a Config.cmake and a ConfigVersion.cmake file and install them set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5WindowSystem") if (BUILD_QCH) ecm_install_qch_export( TARGETS KF5WindowSystem_QCH FILE KF5WindowSystemQchTargets.cmake DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel ) set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF5WindowSystemQchTargets.cmake\")") endif() configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/KF5WindowSystemConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/KF5WindowSystemConfig.cmake" INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR} ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KF5WindowSystemConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/KF5WindowSystemConfigVersion.cmake" DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel ) install(EXPORT KF5WindowSystemTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5WindowSystemTargets.cmake NAMESPACE KF5:: ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kwindowsystem_version.h DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5} COMPONENT Devel ) install(FILES kwindowsystem.categories DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/conanfile.py b/conanfile.py new file mode 100644 index 0000000..a525b9f --- /dev/null +++ b/conanfile.py @@ -0,0 +1,62 @@ +from conans import ConanFile, CMake +import yaml +import re +import os.path + + +def getVersion(): + if(os.path.exists("CMakeLists.txt")): + regx = re.compile(r"^set\(.*VERSION\s(\"|')[0-9.]+(\"|')\)") + with open("CMakeLists.txt") as f: + for line in f: + if regx.match(line): + version = re.search("\"[0-9\.]+\"", line) + version = version.group().replace("\"", "") + return version + return None + + +def getMetaField(field): + if(os.path.exists("metainfo.yaml")): + with open("metainfo.yaml") as f: + metainfo = yaml.load(f.read()) + return metainfo[field] + return None + + +class KWindowSystemConan(ConanFile): + name = getMetaField('name') + version = getVersion() + license = getMetaField('license') + url = getMetaField('url') + description = getMetaField('description') + + settings = "os", "compiler", "build_type", "arch" + + default_options = ( + "qt:qtx11extras = True", + "qt:qtdeclarative = True", + "qt:with_pq=False" + ) + requires = ( + "extra-cmake-modules/[>=5.61.0]@kde/testing", + + "qt/[>=5.11.1]@bincrafters/stable" + # XRender + ) + + generators = "cmake" + scm = { + "type": "git", + "url": "auto", + "revision": "auto" + } + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + cmake.install() + + def package_info(self): + self.cpp_info.resdirs = ["share"] diff --git a/metainfo.yaml b/metainfo.yaml index 6fbdfe5..c1030e7 100644 --- a/metainfo.yaml +++ b/metainfo.yaml @@ -1,24 +1,27 @@ -maintainer: +maintainer: +name: kwindowsystem description: Access to the windowing system +license: LGPLv2.1 +url: https://api.kde.org/frameworks/kwindowsystem/html/index.html tier: 1 type: integration platforms: - name: Linux note: Only platform X11 is supported - name: FreeBSD note: Only platform X11 is supported - name: MacOSX note: Not all features supported - name: Windows note: Not all features supported portingAid: false deprecated: false release: true libraries: - qmake: KWindowSystem cmake: "KF5::WindowSystem" cmakename: KF5WindowSystem public_lib: true group: Frameworks subgroup: Tier 1 diff --git a/test_package/CMakeLists.txt b/test_package/CMakeLists.txt new file mode 100644 index 0000000..b5f7d3a --- /dev/null +++ b/test_package/CMakeLists.txt @@ -0,0 +1,27 @@ +cmake_minimum_required(VERSION 2.8.12) +project(PackageTest CXX) + +include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) +conan_basic_setup(TARGETS) + +find_package(ECM 1.6.0 REQUIRED NO_MODULE) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) + +include(KDEInstallDirs) +include(KDECMakeSettings) + +find_package(KF5WindowSystem ${KF5_DEP_VERSION} REQUIRED) + +add_executable(${PROJECT_NAME} main.cpp) + +target_compile_definitions(${PROJECT_NAME} PUBLIC -DBUILD_DIRECTORY="${CMAKE_BINARY_DIR}") + +target_link_libraries(${PROJECT_NAME} + KF5::WindowSystem +) + +# CTest is a testing tool that can be used to test your project. +# enable_testing() +# add_test(NAME example +# WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin +# COMMAND ${PROJECT_NAME}) diff --git a/test_package/conanfile.py b/test_package/conanfile.py new file mode 100644 index 0000000..ca3788b --- /dev/null +++ b/test_package/conanfile.py @@ -0,0 +1,20 @@ +import os + +from conans import ConanFile, CMake, tools + + +class KCoreAddonsTestConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + generators = "cmake" + + def build(self): + cmake = CMake(self) + # Current dir is "test_package/build/" and CMakeLists.txt is + # in "test_package" + cmake.configure() + cmake.build() + + def test(self): + if not tools.cross_building(self.settings): + os.chdir("bin") + self.run(".%sPackageTest" % os.sep) diff --git a/test_package/main.cpp b/test_package/main.cpp new file mode 100644 index 0000000..fe68e19 --- /dev/null +++ b/test_package/main.cpp @@ -0,0 +1,24 @@ +#include +#include + +#include + +#include + +int main() +{ + + bool found_X11 = KWindowSystem::isPlatformX11(); + + if (found_X11 || !found_X11) + { + if (found_X11) + { + std::cout << "Found X11" << std::endl; + } + std::cout << "Test OK" << std::endl; + return 0; + } + std::cout << "Test FAILED" << std::endl; + return 1; +}