Commit 718e433d authored by Clownce Deng's avatar Clownce Deng

chore: add qt5 build

parent 307a67b2
This directory contains eggs that were downloaded by setuptools to build, test, and run plug-ins.
This directory caches those eggs to prevent repeated downloads.
However, it is safe to delete this directory.
......@@ -12,6 +12,20 @@ PROJECT = "timp_pcbcam"
LIBNAME = "libpcbcam"
VERSION = "1.0.0"
DESCRIPTION = "timp_pcbcam lib"
# 要编译的版本[5|6]
BUILD_QT_VERSION = 5
if BUILD_QT_VERSION == 5:
# Qt 5.15.2
PYSIDE = 'PySide2'
SHIBOKEN = 'shiboken2'
SHIBOKEN_GENERATOR = 'shiboken2_generator'
QT_DIR_ENV = 'QT5_DIR'
elif BUILD_QT_VERSION == 6:
PROJECT = "timp_pcbcam_qt6"
# Qt 6.2.1
PYSIDE = 'PySide6'
SHIBOKEN = 'shiboken6'
SHIBOKEN_GENERATOR = 'shiboken6_generator'
# ---- END OF PROJECT SETTING ----#
......@@ -75,7 +89,9 @@ class CMakeBuild(build_ext):
""" 获取QT路径 """
timp_qt_dir = ''
if 'TIMP_QT_DIR' in os.environ:
if QT_DIR_ENV in os.environ:
timp_qt_dir = os.environ.get(QT_DIR_ENV)
elif 'TIMP_QT_DIR' in os.environ:
timp_qt_dir = os.environ.get('TIMP_QT_DIR')
elif 'QT6_DIR' in os.environ:
timp_qt_dir = os.environ.get('QT6_DIR')
......@@ -120,13 +136,13 @@ setup(
packages=find_packages(where='src', include=[PROJECT]),
python_requires='>=3.8',
install_requires=[
'PySide6',
'shiboken6',
PYSIDE,
SHIBOKEN
],
setup_requires=[
'PySide6',
'shiboken6',
'shiboken6_generator',
PYSIDE,
SHIBOKEN,
SHIBOKEN_GENERATOR
],
tests_require=[],
extras_require={},
......
# 要编译的版本[5|6]
set(BUILD_QT_VERSION 5)
if(BUILD_QT_VERSION EQUAL 5)
# Qt 5.15.2
set(QT_VERSION "Qt5")
set(SHIBOKEN "shiboken2")
set(SHIBOKEN_SUFFIX "2")
elseif(BUILD_QT_VERSION EQUAL 6)
# Qt 6.2.1
set(QT_VERSION "Qt6")
set(SHIBOKEN "shiboken6")
set(SHIBOKEN_SUFFIX "")
endif()
cmake_minimum_required(VERSION 3.16)
cmake_policy(VERSION 3.16)
......@@ -15,12 +29,12 @@ endif()
project(timp_pcbcam LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
# find_package(Qt6 6.2.1 REQUIRED COMPONENTS Core Gui Widgets Qml)
find_package(Qt6 COMPONENTS Core REQUIRED)
find_package(Qt6 COMPONENTS Gui REQUIRED)
find_package(Qt6 COMPONENTS Widgets REQUIRED)
find_package(Qt6 COMPONENTS Qml REQUIRED)
find_package(Qt6 COMPONENTS Network REQUIRED)
find_package(${QT_VERSION} COMPONENTS Core REQUIRED)
find_package(${QT_VERSION} COMPONENTS Gui REQUIRED)
find_package(${QT_VERSION} COMPONENTS Widgets REQUIRED)
find_package(${QT_VERSION} COMPONENTS Qml REQUIRED)
find_package(${QT_VERSION} COMPONENTS Network REQUIRED)
# ================================ General configuration ======================================
......@@ -144,17 +158,17 @@ macro(pyside_config option output_var)
endmacro()
# Query for the shiboken generator path, Python path, include paths and linker flags.
pyside_config(--shiboken-module-path shiboken_module_path)
pyside_config(--shiboken-generator-path shiboken_generator_path)
pyside_config(--pyside-path pyside_path)
pyside_config(--pyside-include-path pyside_include_dir 1)
pyside_config(--shiboken${SHIBOKEN_SUFFIX}-module-path shiboken_module_path)
pyside_config(--shiboken${SHIBOKEN_SUFFIX}-generator-path shiboken_generator_path)
pyside_config(--pyside${SHIBOKEN_SUFFIX}-path pyside_path)
pyside_config(--pyside${SHIBOKEN_SUFFIX}-include-path pyside_include_dir 1)
pyside_config(--python-include-path python_include_dir)
pyside_config(--shiboken-generator-include-path shiboken_include_dir 1)
pyside_config(--shiboken-module-shared-libraries-cmake shiboken_shared_libraries 0)
pyside_config(--shiboken${SHIBOKEN_SUFFIX}-generator-include-path shiboken_include_dir 1)
pyside_config(--shiboken${SHIBOKEN_SUFFIX}-module-shared-libraries-cmake shiboken_shared_libraries 0)
pyside_config(--python-link-flags-cmake python_linking_data 0)
pyside_config(--pyside-shared-libraries-cmake pyside_shared_libraries 0)
pyside_config(--pyside${SHIBOKEN_SUFFIX}-shared-libraries-cmake pyside_shared_libraries 0)
set(shiboken_path "${shiboken_generator_path}/shiboken6${CMAKE_EXECUTABLE_SUFFIX}")
set(shiboken_path "${shiboken_generator_path}/${SHIBOKEN}${CMAKE_EXECUTABLE_SUFFIX}")
if(NOT EXISTS ${shiboken_path})
message(FATAL_ERROR "Shiboken executable not found at path: ${shiboken_path}")
endif()
......@@ -181,11 +195,11 @@ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
# Get all relevant Qt include dirs, to pass them on to shiboken.
get_property(QT_CORE_INCLUDE_DIRS TARGET Qt6::Core PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
get_property(QT_GUI_INCLUDE_DIRS TARGET Qt6::Gui PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
get_property(QT_WIDGETS_INCLUDE_DIRS TARGET Qt6::Widgets PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
get_property(QT_QML_INCLUDE_DIRS TARGET Qt6::Qml PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
get_property(QT_NETWORK_INCLUDE_DIRS TARGET Qt6::Network PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
get_property(QT_CORE_INCLUDE_DIRS TARGET ${QT_VERSION}::Core PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
get_property(QT_GUI_INCLUDE_DIRS TARGET ${QT_VERSION}::Gui PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
get_property(QT_WIDGETS_INCLUDE_DIRS TARGET ${QT_VERSION}::Widgets PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
get_property(QT_QML_INCLUDE_DIRS TARGET ${QT_VERSION}::Qml PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
get_property(QT_NETWORK_INCLUDE_DIRS TARGET ${QT_VERSION}::Network PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
set(QT_INCLUDE_DIRS ${QT_CORE_INCLUDE_DIRS} ${QT_GUI_INCLUDE_DIRS} ${QT_WIDGETS_INCLUDE_DIRS} ${QT_QML_INCLUDE_DIRS} ${QT_NETWORK_INCLUDE_DIRS})
set(INCLUDES "")
foreach(INCLUDE_DIR ${QT_INCLUDE_DIRS})
......@@ -193,9 +207,9 @@ foreach(INCLUDE_DIR ${QT_INCLUDE_DIRS})
endforeach()
# On macOS, check if Qt is a framework build. This affects how include paths should be handled.
get_target_property(QtCore_is_framework Qt6::Core FRAMEWORK)
get_target_property(QtCore_is_framework ${QT_VERSION}::Core FRAMEWORK)
if (QtCore_is_framework)
get_target_property(qt_core_library_location Qt6::Core LOCATION)
get_target_property(qt_core_library_location ${QT_VERSION}::Core LOCATION)
get_filename_component(qt_core_library_location_dir "${qt_core_library_location}" DIRECTORY)
get_filename_component(lib_dir "${qt_core_library_location_dir}/../" ABSOLUTE)
list(APPEND INCLUDES "--framework-include-paths=${lib_dir}")
......@@ -290,16 +304,16 @@ target_include_directories(${bindings_library} PRIVATE ${pyside_include_dir})
target_include_directories(${bindings_library} PRIVATE ${python_include_dir})
target_include_directories(${bindings_library} PRIVATE ${shiboken_include_dir})
target_link_libraries(${project_library} PRIVATE Qt6::Core)
target_link_libraries(${bindings_library} PRIVATE Qt6::Core)
target_link_libraries(${project_library} PRIVATE Qt6::Gui)
target_link_libraries(${bindings_library} PRIVATE Qt6::Gui)
target_link_libraries(${project_library} PRIVATE Qt6::Widgets)
target_link_libraries(${bindings_library} PRIVATE Qt6::Widgets)
target_link_libraries(${project_library} PRIVATE Qt6::Qml)
target_link_libraries(${bindings_library} PRIVATE Qt6::Qml)
target_link_libraries(${project_library} PRIVATE Qt6::Network)
target_link_libraries(${bindings_library} PRIVATE Qt6::Network)
target_link_libraries(${project_library} PRIVATE ${QT_VERSION}::Core)
target_link_libraries(${bindings_library} PRIVATE ${QT_VERSION}::Core)
target_link_libraries(${project_library} PRIVATE ${QT_VERSION}::Gui)
target_link_libraries(${bindings_library} PRIVATE ${QT_VERSION}::Gui)
target_link_libraries(${project_library} PRIVATE ${QT_VERSION}::Widgets)
target_link_libraries(${bindings_library} PRIVATE ${QT_VERSION}::Widgets)
target_link_libraries(${project_library} PRIVATE ${QT_VERSION}::Qml)
target_link_libraries(${bindings_library} PRIVATE ${QT_VERSION}::Qml)
target_link_libraries(${project_library} PRIVATE ${QT_VERSION}::Network)
target_link_libraries(${bindings_library} PRIVATE ${QT_VERSION}::Network)
target_link_libraries(${bindings_library} PRIVATE ${project_library})
target_link_libraries(${bindings_library} PRIVATE ${pyside_shared_libraries})
target_link_libraries(${bindings_library} PRIVATE ${shiboken_shared_libraries})
......
......@@ -5,10 +5,20 @@ import os
import re
import sys
PYSIDE = 'pyside6'
PYSIDE_MODULE = 'PySide6'
SHIBOKEN = 'shiboken6'
# 要编译的版本[5|6]
BUILD_QT_VERSION = 5
if BUILD_QT_VERSION == 5:
# Qt 5.15.2
PYSIDE = 'pyside2'
PYSIDE_MODULE = 'PySide2'
SHIBOKEN = 'shiboken2'
SHIBOKEN_SUFFIX = '2'
elif BUILD_QT_VERSION == 6:
# Qt 6.2.1
PYSIDE = 'pyside6'
PYSIDE_MODULE = 'PySide6'
SHIBOKEN = 'shiboken6'
SHIBOKEN_SUFFIX = ''
class Package(Enum):
......@@ -30,53 +40,53 @@ python_include_error = 'Unable to locate the Python include headers directory.'
options = []
# option, function, error, description
options.append(("--shiboken-module-path",
options.append((f"--shiboken{SHIBOKEN_SUFFIX}-module-path",
lambda: find_shiboken_module(),
shiboken_module_error,
"Print shiboken module location"))
options.append(("--shiboken-generator-path",
f"Print shiboken{SHIBOKEN_SUFFIX} module location"))
options.append((f"--shiboken{SHIBOKEN_SUFFIX}-generator-path",
lambda: find_shiboken_generator(),
shiboken_generator_error,
"Print shiboken generator location"))
options.append(("--pyside-path", lambda: find_pyside(), pyside_error,
f"Print shiboken{SHIBOKEN_SUFFIX} generator location"))
options.append((f"--pyside{SHIBOKEN_SUFFIX}-path", lambda: find_pyside(), pyside_error,
f"Print {PYSIDE_MODULE} location"))
options.append(("--python-include-path",
lambda: get_python_include_path(),
python_include_error,
"Print Python include path"))
options.append(("--shiboken-generator-include-path",
options.append((f"--shiboken{SHIBOKEN_SUFFIX}-generator-include-path",
lambda: get_package_include_path(Package.SHIBOKEN_GENERATOR),
pyside_error,
"Print shiboken generator include paths"))
options.append(("--pyside-include-path",
f"Print shiboken{SHIBOKEN_SUFFIX} generator include paths"))
options.append((f"--pyside{SHIBOKEN_SUFFIX}-include-path",
lambda: get_package_include_path(Package.PYSIDE_MODULE),
pyside_error,
"Print PySide6 include paths"))
f"Print PySide{SHIBOKEN_SUFFIX} include paths"))
options.append(("--python-link-flags-qmake", lambda: python_link_flags_qmake(), python_link_error,
"Print python link flags for qmake"))
options.append(("--python-link-flags-cmake", lambda: python_link_flags_cmake(), python_link_error,
"Print python link flags for cmake"))
options.append(("--shiboken-module-qmake-lflags",
options.append((f"--shiboken{SHIBOKEN_SUFFIX}-module-qmake-lflags",
lambda: get_package_qmake_lflags(Package.SHIBOKEN_MODULE), pyside_error,
"Print shiboken6 shared library link flags for qmake"))
options.append(("--pyside-qmake-lflags",
f"Print shiboken{SHIBOKEN_SUFFIX} shared library link flags for qmake"))
options.append((f"--pyside{SHIBOKEN_SUFFIX}-qmake-lflags",
lambda: get_package_qmake_lflags(Package.PYSIDE_MODULE), pyside_error,
"Print PySide6 shared library link flags for qmake"))
f"Print PySide{SHIBOKEN_SUFFIX} shared library link flags for qmake"))
options.append(("--shiboken-module-shared-libraries-qmake",
options.append((f"--shiboken{SHIBOKEN_SUFFIX}-module-shared-libraries-qmake",
lambda: get_shared_libraries_qmake(Package.SHIBOKEN_MODULE), pyside_libs_error,
"Print paths of shiboken shared libraries (.so's, .dylib's, .dll's) for qmake"))
options.append(("--shiboken-module-shared-libraries-cmake",
f"Print paths of shiboken{SHIBOKEN_SUFFIX} shared libraries (.so's, .dylib's, .dll's) for qmake"))
options.append((f"--shiboken{SHIBOKEN_SUFFIX}-module-shared-libraries-cmake",
lambda: get_shared_libraries_cmake(Package.SHIBOKEN_MODULE), pyside_libs_error,
"Print paths of shiboken shared libraries (.so's, .dylib's, .dll's) for cmake"))
f"Print paths of shiboken{SHIBOKEN_SUFFIX} shared libraries (.so's, .dylib's, .dll's) for cmake"))
options.append(("--pyside-shared-libraries-qmake",
options.append((f"--pyside{SHIBOKEN_SUFFIX}-shared-libraries-qmake",
lambda: get_shared_libraries_qmake(Package.PYSIDE_MODULE), pyside_libs_error,
"Print paths of f{PYSIDE_MODULE} shared libraries (.so's, .dylib's, .dll's) for qmake"))
options.append(("--pyside-shared-libraries-cmake",
f"Print paths of {PYSIDE_MODULE} shared libraries (.so's, .dylib's, .dll's) for qmake"))
options.append((f"--pyside{SHIBOKEN_SUFFIX}-shared-libraries-cmake",
lambda: get_shared_libraries_cmake(Package.PYSIDE_MODULE), pyside_libs_error,
f"Print paths of {PYSIDE_MODULE} shared libraries (.so's, .dylib's, .dll's) for cmake"))
......@@ -135,7 +145,7 @@ def shared_library_glob_pattern():
def filter_shared_libraries(libs_list):
def predicate(lib_name):
basename = os.path.basename(lib_name)
if 'shiboken' in basename or 'pyside6' in basename:
if 'shiboken' in basename or PYSIDE in basename:
return True
return False
result = [lib for lib in libs_list if predicate(lib)]
......
import PySide6.QtCore
import PySide6.QtWidgets
import PySide2.QtCore
import PySide2.QtWidgets
from timp_pcbcam import PcbCamUtil as UT
if __name__ == "__main__":
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment