Warning, /network/ruqola/cmake/Python/FindShiboken2.cmake is written in an unsupported language. File is not indexed.
0001 #
0002 # SPDX-FileCopyrightText: 2020 Klarälvdalens Datakonsult AB a KDAB Group company <info@kdab.com>
0003 # Author: Renato Araujo Oliveira Filho <renato.araujo@kdab.com>
0004 #
0005 # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
0006 #
0007 # Contact KDAB at <info@kdab.com> for commercial licensing options.
0008 #
0009
0010 # SHIBOKEN_INCLUDE_DIR - Directories to include to use SHIBOKEN
0011 # SHIBOKEN_LIBRARY - Files to link against to use SHIBOKEN
0012 # SHIBOKEN_BINARY - Executable name
0013 # SHIBOKEN_BUILD_TYPE - Tells if Shiboken was compiled in Release or Debug mode.
0014
0015 # You can install Shiboken from Qt repository with
0016 # pip3 install --index-url=https://download.qt.io/official_releases/QtForPython --trusted-host download.qt.io shiboken2-generator
0017
0018 find_package(PkgConfig)
0019 if(PKG_CONFIG_FOUND)
0020 pkg_check_modules(SHIBOKEN2_PRIV QUIET shiboken2)
0021 endif()
0022
0023 set(SHIBOKEN_FOUND FALSE)
0024
0025 if(SHIBOKEN2_PRIV_FOUND)
0026 set(SHIBOKEN_FOUND TRUE)
0027 message(STATUS "Using shiboken found in the system!")
0028 pkg_get_variable(SHIBOKEN_BINARY
0029 shiboken2
0030 generator_location
0031 )
0032 pkg_get_variable(SHIBOKEN_BASEDIR
0033 shiboken2
0034 libdir
0035 )
0036 pkg_get_variable(SHIBOKEN_INCLUDE_DIR
0037 shiboken2
0038 includedir
0039 )
0040 set(SHIBOKEN_VERSION ${SHIBOKEN2_PRIV_VERSION})
0041 set(SHIBOKEN_LIBRARY ${SHIBOKEN2_PRIV_LINK_LIBRARIES})
0042 else()
0043 execute_process(
0044 COMMAND ${Python3_EXECUTABLE} -c "if True:
0045 import os
0046 try:
0047 import shiboken2_generator
0048 print(shiboken2_generator.__path__[0])
0049 except:
0050 exit()
0051 "
0052 OUTPUT_VARIABLE SHIBOKEN_GENERATOR_BASEDIR
0053 OUTPUT_STRIP_TRAILING_WHITESPACE
0054 )
0055 execute_process(
0056 COMMAND ${Python3_EXECUTABLE} -c "if True:
0057 import os
0058 try:
0059 import shiboken2
0060 print(shiboken2.__path__[0])
0061 except:
0062 exit()
0063 "
0064 OUTPUT_VARIABLE SHIBOKEN_BASEDIR
0065 OUTPUT_STRIP_TRAILING_WHITESPACE
0066 )
0067 execute_process(
0068 COMMAND ${Python3_EXECUTABLE} -c "if True:
0069 import os
0070 import shiboken2
0071 print(';'.join(filter(None, map(str, shiboken2.__version_info__))))
0072 "
0073 OUTPUT_VARIABLE SHIBOKEN_VERSION
0074 OUTPUT_STRIP_TRAILING_WHITESPACE
0075 )
0076 list(GET SHIBOKEN_VERSION 0 SHIBOKEN_MACRO_VERSION)
0077 list(GET SHIBOKEN_VERSION 1 SHIBOKEN_MICRO_VERSION)
0078 list(GET SHIBOKEN_VERSION 2 SHIBOKEN_MINOR_VERSION)
0079 string(REPLACE ";" "." SHIBOKEN_VERSION "${SHIBOKEN_VERSION}")
0080
0081 message(STATUS "ShibokenGenerator base dir: ${SHIBOKEN_GENERATOR_BASEDIR}")
0082 message(STATUS "Shiboken base dir: ${SHIBOKEN_BASEDIR}")
0083 message(STATUS "Shiboken custom path: ${SHIBOKEN_CUSTOM_PATH}")
0084
0085 if(SHIBOKEN_BASEDIR)
0086 find_path(SHIBOKEN_INCLUDE_DIR
0087 shiboken.h
0088 PATHS ${SHIBOKEN_CUSTOM_PATH} ${SHIBOKEN_GENERATOR_BASEDIR}/include
0089 NO_DEFAULT_PATH)
0090 if(MSVC)
0091 SET(SHIBOKEN_LIBRARY_BASENAMES "shiboken2.abi3.lib")
0092 elseif(CYGWIN)
0093 SET(SHIBOKEN_LIBRARY_BASENAMES "")
0094 elseif(WIN32)
0095 SET(SHIBOKEN_LIBRARY_BASENAMES "libshiboken2.${PYSIDE2_SUFFIX}")
0096 elseif(APPLE)
0097 SET(SHIBOKEN_LIBRARY_BASENAMES
0098 libshiboken2.abi3.dylib
0099 libshiboken2.abi3.${SHIBOKEN_MACRO_VERSION}.dylib
0100 libshiboken2.abi3.${SHIBOKEN_MACRO_VERSION}.${SHIBOKEN_MICRO_VERSION}.dylib
0101 libshiboken2.abi3.${SHIBOKEN_VERSION}.dylib
0102 )
0103 else()
0104 SET(SHIBOKEN_LIBRARY_BASENAMES
0105 libshiboken2.abi3.so
0106 libshiboken2.abi3.so.${SHIBOKEN_MACRO_VERSION}
0107 libshiboken2.abi3.so.${SHIBOKEN_MACRO_VERSION}.${SHIBOKEN_MICRO_VERSION}
0108 libshiboken2.abi3.so.${SHIBOKEN_VERSION}
0109 )
0110 endif()
0111
0112 if (NOT SHIBOKEN_INCLUDE_DIR)
0113 return()
0114 endif()
0115 set(SHIBOKEN_SEARCH_PATHS ${SHIBOKEN_CUSTOM_PATH})
0116 list(APPEND SHIBOKEN_SEARCH_PATHS ${SHIBOKEN_BASEDIR})
0117 list(APPEND SHIBOKEN_SEARCH_PATHS ${SHIBOKEN_GENERATOR_BASEDIR})
0118 message(STATUS "BOO: ${SHIBOKEN_SEARCH_PATHS}")
0119 find_file(SHIBOKEN_LIBRARY
0120 ${SHIBOKEN_LIBRARY_BASENAMES}
0121 PATHS ${SHIBOKEN_SEARCH_PATHS}
0122 NO_DEFAULT_PATH)
0123
0124 find_program(SHIBOKEN_BINARY
0125 shiboken2
0126 PATHS ${SHIBOKEN_SEARCH_PATHS}
0127 NO_DEFAULT_PATH
0128 )
0129 endif()
0130 if (SHIBOKEN_INCLUDE_DIR AND SHIBOKEN_LIBRARY AND SHIBOKEN_BINARY)
0131 set(SHIBOKEN_FOUND TRUE)
0132 endif()
0133
0134 if(SHIBOKEN_FOUND)
0135 endif()
0136
0137
0138 if(MSVC)
0139 # On Windows we must link to python3.dll that is a small library that links against python3x.dll
0140 # that allow us to choose any python3x.dll at runtime
0141 execute_process(
0142 COMMAND ${Python3_EXECUTABLE} -c "if True:
0143 for lib in '${Python3_LIBRARIES}'.split(';'):
0144 if '/' in lib:
0145 prefix, py = lib.rsplit('/', 1)
0146 if py.startswith('python3'):
0147 print(prefix + '/python3.lib')
0148 break
0149 "
0150 OUTPUT_VARIABLE PYTHON_LIMITED_LIBRARIES
0151 OUTPUT_STRIP_TRAILING_WHITESPACE
0152 )
0153 else()
0154 # On Linux and MacOs our modules should not link with any python library
0155 # that must be handled by the main process
0156 set(PYTHON_LIMITED_LIBRARIES "")
0157 endif()
0158 endif()
0159 if (SHIBOKEN_FOUND)
0160 message(STATUS "Shiboken include dir: ${SHIBOKEN_INCLUDE_DIR}")
0161 message(STATUS "Shiboken library: ${SHIBOKEN_LIBRARY}")
0162 message(STATUS "Shiboken binary: ${SHIBOKEN_BINARY}")
0163 message(STATUS "Shiboken version: ${SHIBOKEN_VERSION}")
0164
0165 # Create shiboke2 target
0166 add_library(Shiboken2::libshiboken SHARED IMPORTED GLOBAL)
0167 if(MSVC)
0168 set_property(TARGET Shiboken2::libshiboken PROPERTY
0169 IMPORTED_IMPLIB ${SHIBOKEN_LIBRARY})
0170 endif()
0171 set_property(TARGET Shiboken2::libshiboken PROPERTY
0172 IMPORTED_LOCATION ${SHIBOKEN_LIBRARY})
0173 set_property(TARGET Shiboken2::libshiboken APPEND PROPERTY
0174 INTERFACE_INCLUDE_DIRECTORIES ${SHIBOKEN_INCLUDE_DIR} ${Python3_INCLUDE_DIRS})
0175 set_property(TARGET Shiboken2::libshiboken APPEND PROPERTY
0176 INTERFACE_LINK_LIBRARIES ${PYTHON_LIMITED_LIBRARIES})
0177
0178 # Generator target
0179 add_executable(Shiboken2::shiboken IMPORTED GLOBAL)
0180 set_property(TARGET Shiboken2::shiboken PROPERTY
0181 IMPORTED_LOCATION ${SHIBOKEN_BINARY})
0182 endif()
0183
0184 find_package_handle_standard_args(Shiboken2
0185 REQUIRED_VARS SHIBOKEN_BASEDIR SHIBOKEN_INCLUDE_DIR SHIBOKEN_LIBRARY SHIBOKEN_BINARY
0186 VERSION_VAR SHIBOKEN_VERSION
0187 )
0188