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