Skip to content

Commit 4e79c68

Browse files
committed
Added PySide6 support
Task-Id: KDDW-27
1 parent d80325e commit 4e79c68

13 files changed

+499
-25
lines changed

cmake/Python/FindPySide6.cmake

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
#
2+
# SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <[email protected]>
3+
# Author: Renato Araujo Oliveira Filho <[email protected]>
4+
#
5+
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
6+
#
7+
# Contact KDAB at <[email protected]> for commercial licensing options.
8+
#
9+
10+
# PYSIDE_BASEDIR - Top of the PySide6 installation
11+
# PYSIDE_INCLUDE_DIR - Directories to include to use PySide6
12+
# PYSIDE_LIBRARY - Files to link against to use PySide6
13+
# PYSIDE_TYPESYSTEMS - Type system files that should be used by other bindings extending PySide6
14+
#
15+
# You can install PySide6 from Qt repository with
16+
# pip3 install --index-url=https://download.qt.io/official_releases/QtForPython --trusted-host download.qt.io pyside6
17+
18+
set(PYSIDE6_FOUND FALSE)
19+
20+
# extract python library basename
21+
list(GET Python3_LIBRARIES 0 PYTHON_LIBRARY_FILENAME)
22+
get_filename_component(PYTHON_LIBRARY_FILENAME ${PYTHON_LIBRARY_FILENAME} NAME)
23+
24+
execute_process(
25+
COMMAND ${Python3_EXECUTABLE} -c "if True:
26+
import os, sys
27+
try:
28+
import PySide6.QtCore as QtCore
29+
print(os.path.dirname(QtCore.__file__))
30+
except Exception as error:
31+
print(error, file=sys.stderr)
32+
exit()
33+
"
34+
OUTPUT_VARIABLE PYSIDE6_BASEDIR
35+
OUTPUT_STRIP_TRAILING_WHITESPACE
36+
)
37+
38+
if(PYSIDE6_BASEDIR)
39+
set(PYSIDE_BASEDIR ${PYSIDE6_BASEDIR} CACHE PATH "Top level install of PySide6" FORCE)
40+
execute_process(
41+
COMMAND ${Python3_EXECUTABLE} -c "if True:
42+
import os
43+
import PySide6.QtCore as QtCore
44+
print(os.path.basename(QtCore.__file__).split('.', 1)[1])
45+
"
46+
OUTPUT_VARIABLE PYSIDE6_SUFFIX
47+
OUTPUT_STRIP_TRAILING_WHITESPACE
48+
)
49+
50+
execute_process(
51+
COMMAND ${Python3_EXECUTABLE} -c "if True:
52+
import os
53+
import PySide6.QtCore as QtCore
54+
print(';'.join(map(str, QtCore.__version_info__)))
55+
"
56+
OUTPUT_VARIABLE PYSIDE6_SO_VERSION
57+
OUTPUT_STRIP_TRAILING_WHITESPACE
58+
)
59+
list(GET PYSIDE6_SO_VERSION 0 PYSIDE6_SO_MACRO_VERSION)
60+
list(GET PYSIDE6_SO_VERSION 1 PYSIDE6_SO_MICRO_VERSION)
61+
list(GET PYSIDE6_SO_VERSION 2 PYSIDE6_SO_MINOR_VERSION)
62+
string(REPLACE ";" "." PYSIDE6_SO_VERSION "${PYSIDE6_SO_VERSION}")
63+
64+
if(NOT APPLE)
65+
set(PYSIDE6_SUFFIX "${PYSIDE6_SUFFIX}.${PYSIDE6_SO_MACRO_VERSION}.${PYSIDE6_SO_MICRO_VERSION}")
66+
else()
67+
string(REPLACE ".so" "" PYSIDE6_SUFFIX ${PYSIDE6_SUFFIX})
68+
set(PYSIDE6_SUFFIX "${PYSIDE6_SUFFIX}.${PYSIDE6_SO_MACRO_VERSION}.${PYSIDE6_SO_MICRO_VERSION}.dylib")
69+
endif()
70+
71+
set(PYSIDE6_FOUND TRUE)
72+
message(STATUS "PySide6 base dir: ${PYSIDE6_BASEDIR}" )
73+
message(STATUS "PySide6 suffix: ${PYSIDE6_SUFFIX}")
74+
endif()
75+
76+
if (PYSIDE6_FOUND)
77+
#PySide
78+
#===============================================================================
79+
find_path(PYSIDE_INCLUDE_DIR
80+
pyside.h
81+
PATHS ${PYSIDE6_BASEDIR}/include ${PYSIDE6_CUSTOM_PREFIX}/include/PySide6
82+
NO_DEFAULT_PATH)
83+
84+
# Platform specific library names
85+
if(MSVC)
86+
SET(PYSIDE_LIBRARY_BASENAMES "pyside6.abi3.lib")
87+
elseif(CYGWIN)
88+
SET(PYSIDE_LIBRARY_BASENAMES "")
89+
elseif(WIN32)
90+
SET(PYSIDE_LIBRARY_BASENAMES "libpyside6.${PYSIDE6_SUFFIX}")
91+
else()
92+
SET(PYSIDE_LIBRARY_BASENAMES "libpyside6.${PYSIDE6_SUFFIX}")
93+
endif()
94+
95+
find_file(PYSIDE_LIBRARY
96+
${PYSIDE_LIBRARY_BASENAMES}
97+
PATHS ${PYSIDE6_BASEDIR} ${PYSIDE6_CUSTOM_PREFIX}/lib
98+
NO_DEFAULT_PATH)
99+
100+
find_path(PYSIDE_TYPESYSTEMS
101+
typesystem_core.xml
102+
PATHS ${PYSIDE6_BASEDIR}/typesystems ${PYSIDE6_CUSTOM_PREFIX}/share/PySide6/typesystems
103+
NO_DEFAULT_PATH)
104+
endif()
105+
106+
if(PYSIDE6_FOUND)
107+
message(STATUS "PySide include dir: ${PYSIDE_INCLUDE_DIR}")
108+
message(STATUS "PySide library: ${PYSIDE_LIBRARY}")
109+
message(STATUS "PySide typesystems: ${PYSIDE_TYPESYSTEMS}")
110+
message(STATUS "PySide6 version: ${PYSIDE6_SO_VERSION}")
111+
112+
# Create PySide6 target
113+
add_library(PySide6::pyside6 SHARED IMPORTED GLOBAL)
114+
if(MSVC)
115+
set_property(TARGET PySide6::pyside6 PROPERTY
116+
IMPORTED_IMPLIB ${PYSIDE_LIBRARY})
117+
endif()
118+
set_property(TARGET PySide6::pyside6 PROPERTY
119+
IMPORTED_LOCATION ${PYSIDE_LIBRARY})
120+
set_property(TARGET PySide6::pyside6 APPEND PROPERTY
121+
INTERFACE_INCLUDE_DIRECTORIES
122+
${PYSIDE_INCLUDE_DIR}
123+
${PYSIDE_INCLUDE_DIR}/QtCore/
124+
${PYSIDE_INCLUDE_DIR}/QtGui/
125+
${PYSIDE_INCLUDE_DIR}/QtWidgets/
126+
${Python3_INCLUDE_DIRS}
127+
)
128+
endif()
129+
130+
131+
find_package_handle_standard_args(PySide6
132+
REQUIRED_VARS PYSIDE6_BASEDIR PYSIDE_INCLUDE_DIR PYSIDE_LIBRARY PYSIDE_TYPESYSTEMS
133+
VERSION_VAR PYSIDE6_SO_VERSION
134+
)

cmake/Python/FindShiboken6.cmake

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
#
2+
# SPDX-FileCopyrightText: 2020-2021 Klarälvdalens Datakonsult AB, a KDAB Group company <[email protected]>
3+
# Author: Renato Araujo Oliveira Filho <[email protected]>
4+
#
5+
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
6+
#
7+
# Contact KDAB at <[email protected]> for commercial licensing options.
8+
#
9+
10+
# SHIBOKEN_INCLUDE_DIR - Directories to include to use SHIBOKEN
11+
# SHIBOKEN_LIBRARY - Files to link against to use SHIBOKEN
12+
# SHIBOKEN_BINARY - Executable name
13+
# SHIBOKEN_BUILD_TYPE - Tells if Shiboken was compiled in Release or Debug mode.
14+
15+
# You can install Shiboken from Qt repository with
16+
# pip3 install --index-url=https://download.qt.io/official_releases/QtForPython --trusted-host download.qt.io shiboken6-generator
17+
18+
19+
set(SHIBOKEN_FOUND FALSE)
20+
21+
execute_process(
22+
COMMAND ${Python3_EXECUTABLE} -c "if True:
23+
import os
24+
try:
25+
import shiboken6_generator
26+
print(shiboken6_generator.__path__[0])
27+
except:
28+
exit()
29+
"
30+
OUTPUT_VARIABLE SHIBOKEN_GENERATOR_BASEDIR
31+
OUTPUT_STRIP_TRAILING_WHITESPACE
32+
)
33+
execute_process(
34+
COMMAND ${Python3_EXECUTABLE} -c "if True:
35+
import os
36+
try:
37+
import shiboken6
38+
print(shiboken6.__path__[0])
39+
except:
40+
exit()
41+
"
42+
OUTPUT_VARIABLE SHIBOKEN_BASEDIR
43+
OUTPUT_STRIP_TRAILING_WHITESPACE
44+
)
45+
execute_process(
46+
COMMAND ${Python3_EXECUTABLE} -c "if True:
47+
import os
48+
import shiboken6
49+
print(';'.join(filter(None, map(str, shiboken6.__version_info__))))
50+
"
51+
OUTPUT_VARIABLE SHIBOKEN_VERSION
52+
OUTPUT_STRIP_TRAILING_WHITESPACE
53+
)
54+
list(GET SHIBOKEN_VERSION 0 SHIBOKEN_MACRO_VERSION)
55+
list(GET SHIBOKEN_VERSION 1 SHIBOKEN_MICRO_VERSION)
56+
list(GET SHIBOKEN_VERSION 2 SHIBOKEN_MINOR_VERSION)
57+
string(REPLACE ";" "." SHIBOKEN_VERSION "${SHIBOKEN_VERSION}")
58+
59+
message(STATUS "ShibokenGenerator base dir: ${SHIBOKEN_GENERATOR_BASEDIR}")
60+
message(STATUS "Shiboken base dir: ${SHIBOKEN_BASEDIR}")
61+
message(STATUS "Shiboken custom path: ${SHIBOKEN_CUSTOM_PATH}")
62+
63+
if(SHIBOKEN_BASEDIR)
64+
find_path(SHIBOKEN_INCLUDE_DIR
65+
shiboken.h
66+
PATHS ${SHIBOKEN_CUSTOM_PATH} ${SHIBOKEN_GENERATOR_BASEDIR}/include
67+
NO_DEFAULT_PATH)
68+
if(MSVC)
69+
SET(SHIBOKEN_LIBRARY_BASENAMES "shiboken6.abi3.lib")
70+
elseif(CYGWIN)
71+
SET(SHIBOKEN_LIBRARY_BASENAMES "")
72+
elseif(WIN32)
73+
SET(SHIBOKEN_LIBRARY_BASENAMES "libshiboken6.${PYSIDE2_SUFFIX}")
74+
elseif(APPLE)
75+
SET(SHIBOKEN_LIBRARY_BASENAMES
76+
libshiboken6.abi3.dylib
77+
libshiboken6.abi3.${SHIBOKEN_MACRO_VERSION}.dylib
78+
libshiboken6.abi3.${SHIBOKEN_MACRO_VERSION}.${SHIBOKEN_MICRO_VERSION}.dylib
79+
libshiboken6.abi3.${SHIBOKEN_VERSION}.dylib
80+
)
81+
else()
82+
SET(SHIBOKEN_LIBRARY_BASENAMES
83+
libshiboken6.abi3.so
84+
libshiboken6.abi3.so.${SHIBOKEN_MACRO_VERSION}
85+
libshiboken6.abi3.so.${SHIBOKEN_MACRO_VERSION}.${SHIBOKEN_MICRO_VERSION}
86+
libshiboken6.abi3.so.${SHIBOKEN_VERSION}
87+
)
88+
endif()
89+
90+
if (NOT SHIBOKEN_INCLUDE_DIR)
91+
return()
92+
endif()
93+
set(SHIBOKEN_SEARCH_PATHS ${SHIBOKEN_CUSTOM_PATH})
94+
list(APPEND SHIBOKEN_SEARCH_PATHS ${SHIBOKEN_BASEDIR})
95+
list(APPEND SHIBOKEN_SEARCH_PATHS ${SHIBOKEN_GENERATOR_BASEDIR})
96+
find_file(SHIBOKEN_LIBRARY
97+
${SHIBOKEN_LIBRARY_BASENAMES}
98+
PATHS ${SHIBOKEN_SEARCH_PATHS}
99+
NO_DEFAULT_PATH)
100+
101+
find_program(SHIBOKEN_BINARY
102+
shiboken6
103+
PATHS ${SHIBOKEN_SEARCH_PATHS}
104+
NO_DEFAULT_PATH
105+
)
106+
endif()
107+
if (SHIBOKEN_INCLUDE_DIR AND SHIBOKEN_LIBRARY AND SHIBOKEN_BINARY)
108+
set(SHIBOKEN_FOUND TRUE)
109+
endif()
110+
111+
if(SHIBOKEN_FOUND)
112+
endif()
113+
114+
115+
if(MSVC)
116+
# On Windows we must link to python3.dll that is a small library that links against python3x.dll
117+
# that allow us to choose any python3x.dll at runtime
118+
execute_process(
119+
COMMAND ${Python3_EXECUTABLE} -c "if True:
120+
for lib in '${Python3_LIBRARIES}'.split(';'):
121+
if '/' in lib:
122+
prefix, py = lib.rsplit('/', 1)
123+
if py.startswith('python3'):
124+
print(prefix + '/python3.lib')
125+
break
126+
"
127+
OUTPUT_VARIABLE PYTHON_LIMITED_LIBRARIES
128+
OUTPUT_STRIP_TRAILING_WHITESPACE
129+
)
130+
else()
131+
# On Linux and MacOs our modules should not link with any python library
132+
# that must be handled by the main process
133+
set(PYTHON_LIMITED_LIBRARIES "")
134+
endif()
135+
136+
if (SHIBOKEN_FOUND)
137+
message(STATUS "Shiboken include dir: ${SHIBOKEN_INCLUDE_DIR}")
138+
message(STATUS "Shiboken library: ${SHIBOKEN_LIBRARY}")
139+
message(STATUS "Shiboken binary: ${SHIBOKEN_BINARY}")
140+
message(STATUS "Shiboken version: ${SHIBOKEN_VERSION}")
141+
142+
# Create shiboke2 target
143+
add_library(Shiboken6::libshiboken SHARED IMPORTED GLOBAL)
144+
if(MSVC)
145+
set_property(TARGET Shiboken6::libshiboken PROPERTY
146+
IMPORTED_IMPLIB ${SHIBOKEN_LIBRARY})
147+
endif()
148+
set_property(TARGET Shiboken6::libshiboken PROPERTY
149+
IMPORTED_LOCATION ${SHIBOKEN_LIBRARY})
150+
set_property(TARGET Shiboken6::libshiboken APPEND PROPERTY
151+
INTERFACE_INCLUDE_DIRECTORIES ${SHIBOKEN_INCLUDE_DIR} ${Python3_INCLUDE_DIRS})
152+
set_property(TARGET Shiboken6::libshiboken APPEND PROPERTY
153+
INTERFACE_LINK_LIBRARIES ${PYTHON_LIMITED_LIBRARIES})
154+
155+
# Generator target
156+
add_executable(Shiboken6::shiboken IMPORTED GLOBAL)
157+
set_property(TARGET Shiboken6::shiboken PROPERTY
158+
IMPORTED_LOCATION ${SHIBOKEN_BINARY})
159+
endif()
160+
161+
find_package_handle_standard_args(Shiboken6
162+
REQUIRED_VARS SHIBOKEN_BASEDIR SHIBOKEN_INCLUDE_DIR SHIBOKEN_LIBRARY SHIBOKEN_BINARY
163+
VERSION_VAR SHIBOKEN_VERSION
164+
)
165+

0 commit comments

Comments
 (0)