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" ...@@ -12,6 +12,20 @@ PROJECT = "timp_pcbcam"
LIBNAME = "libpcbcam" LIBNAME = "libpcbcam"
VERSION = "1.0.0" VERSION = "1.0.0"
DESCRIPTION = "timp_pcbcam lib" 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 ----# # ---- END OF PROJECT SETTING ----#
...@@ -75,7 +89,9 @@ class CMakeBuild(build_ext): ...@@ -75,7 +89,9 @@ class CMakeBuild(build_ext):
""" 获取QT路径 """ """ 获取QT路径 """
timp_qt_dir = '' 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') timp_qt_dir = os.environ.get('TIMP_QT_DIR')
elif 'QT6_DIR' in os.environ: elif 'QT6_DIR' in os.environ:
timp_qt_dir = os.environ.get('QT6_DIR') timp_qt_dir = os.environ.get('QT6_DIR')
...@@ -120,13 +136,13 @@ setup( ...@@ -120,13 +136,13 @@ setup(
packages=find_packages(where='src', include=[PROJECT]), packages=find_packages(where='src', include=[PROJECT]),
python_requires='>=3.8', python_requires='>=3.8',
install_requires=[ install_requires=[
'PySide6', PYSIDE,
'shiboken6', SHIBOKEN
], ],
setup_requires=[ setup_requires=[
'PySide6', PYSIDE,
'shiboken6', SHIBOKEN,
'shiboken6_generator', SHIBOKEN_GENERATOR
], ],
tests_require=[], tests_require=[],
extras_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_minimum_required(VERSION 3.16)
cmake_policy(VERSION 3.16) cmake_policy(VERSION 3.16)
...@@ -15,12 +29,12 @@ endif() ...@@ -15,12 +29,12 @@ endif()
project(timp_pcbcam LANGUAGES CXX) project(timp_pcbcam LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC 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(${QT_VERSION} COMPONENTS Core REQUIRED)
find_package(Qt6 COMPONENTS Gui REQUIRED) find_package(${QT_VERSION} COMPONENTS Gui REQUIRED)
find_package(Qt6 COMPONENTS Widgets REQUIRED) find_package(${QT_VERSION} COMPONENTS Widgets REQUIRED)
find_package(Qt6 COMPONENTS Qml REQUIRED) find_package(${QT_VERSION} COMPONENTS Qml REQUIRED)
find_package(Qt6 COMPONENTS Network REQUIRED) find_package(${QT_VERSION} COMPONENTS Network REQUIRED)
# ================================ General configuration ====================================== # ================================ General configuration ======================================
...@@ -144,17 +158,17 @@ macro(pyside_config option output_var) ...@@ -144,17 +158,17 @@ macro(pyside_config option output_var)
endmacro() endmacro()
# Query for the shiboken generator path, Python path, include paths and linker flags. # Query for the shiboken generator path, Python path, include paths and linker flags.
pyside_config(--shiboken-module-path shiboken_module_path) pyside_config(--shiboken${SHIBOKEN_SUFFIX}-module-path shiboken_module_path)
pyside_config(--shiboken-generator-path shiboken_generator_path) pyside_config(--shiboken${SHIBOKEN_SUFFIX}-generator-path shiboken_generator_path)
pyside_config(--pyside-path pyside_path) pyside_config(--pyside${SHIBOKEN_SUFFIX}-path pyside_path)
pyside_config(--pyside-include-path pyside_include_dir 1) pyside_config(--pyside${SHIBOKEN_SUFFIX}-include-path pyside_include_dir 1)
pyside_config(--python-include-path python_include_dir) pyside_config(--python-include-path python_include_dir)
pyside_config(--shiboken-generator-include-path shiboken_include_dir 1) pyside_config(--shiboken${SHIBOKEN_SUFFIX}-generator-include-path shiboken_include_dir 1)
pyside_config(--shiboken-module-shared-libraries-cmake shiboken_shared_libraries 0) 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(--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}) if(NOT EXISTS ${shiboken_path})
message(FATAL_ERROR "Shiboken executable not found at path: ${shiboken_path}") message(FATAL_ERROR "Shiboken executable not found at path: ${shiboken_path}")
endif() endif()
...@@ -181,11 +195,11 @@ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) ...@@ -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 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_CORE_INCLUDE_DIRS TARGET ${QT_VERSION}::Core PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
get_property(QT_GUI_INCLUDE_DIRS TARGET Qt6::Gui 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 Qt6::Widgets 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 Qt6::Qml 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 Qt6::Network 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(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 "") set(INCLUDES "")
foreach(INCLUDE_DIR ${QT_INCLUDE_DIRS}) foreach(INCLUDE_DIR ${QT_INCLUDE_DIRS})
...@@ -193,9 +207,9 @@ foreach(INCLUDE_DIR ${QT_INCLUDE_DIRS}) ...@@ -193,9 +207,9 @@ foreach(INCLUDE_DIR ${QT_INCLUDE_DIRS})
endforeach() endforeach()
# On macOS, check if Qt is a framework build. This affects how include paths should be handled. # 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) 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(qt_core_library_location_dir "${qt_core_library_location}" DIRECTORY)
get_filename_component(lib_dir "${qt_core_library_location_dir}/../" ABSOLUTE) get_filename_component(lib_dir "${qt_core_library_location_dir}/../" ABSOLUTE)
list(APPEND INCLUDES "--framework-include-paths=${lib_dir}") list(APPEND INCLUDES "--framework-include-paths=${lib_dir}")
...@@ -290,16 +304,16 @@ target_include_directories(${bindings_library} PRIVATE ${pyside_include_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 ${python_include_dir})
target_include_directories(${bindings_library} PRIVATE ${shiboken_include_dir}) target_include_directories(${bindings_library} PRIVATE ${shiboken_include_dir})
target_link_libraries(${project_library} PRIVATE Qt6::Core) target_link_libraries(${project_library} PRIVATE ${QT_VERSION}::Core)
target_link_libraries(${bindings_library} PRIVATE Qt6::Core) target_link_libraries(${bindings_library} PRIVATE ${QT_VERSION}::Core)
target_link_libraries(${project_library} PRIVATE Qt6::Gui) target_link_libraries(${project_library} PRIVATE ${QT_VERSION}::Gui)
target_link_libraries(${bindings_library} PRIVATE Qt6::Gui) target_link_libraries(${bindings_library} PRIVATE ${QT_VERSION}::Gui)
target_link_libraries(${project_library} PRIVATE Qt6::Widgets) target_link_libraries(${project_library} PRIVATE ${QT_VERSION}::Widgets)
target_link_libraries(${bindings_library} PRIVATE Qt6::Widgets) target_link_libraries(${bindings_library} PRIVATE ${QT_VERSION}::Widgets)
target_link_libraries(${project_library} PRIVATE Qt6::Qml) target_link_libraries(${project_library} PRIVATE ${QT_VERSION}::Qml)
target_link_libraries(${bindings_library} PRIVATE Qt6::Qml) target_link_libraries(${bindings_library} PRIVATE ${QT_VERSION}::Qml)
target_link_libraries(${project_library} PRIVATE Qt6::Network) target_link_libraries(${project_library} PRIVATE ${QT_VERSION}::Network)
target_link_libraries(${bindings_library} PRIVATE Qt6::Network) target_link_libraries(${bindings_library} PRIVATE ${QT_VERSION}::Network)
target_link_libraries(${bindings_library} PRIVATE ${project_library}) target_link_libraries(${bindings_library} PRIVATE ${project_library})
target_link_libraries(${bindings_library} PRIVATE ${pyside_shared_libraries}) target_link_libraries(${bindings_library} PRIVATE ${pyside_shared_libraries})
target_link_libraries(${bindings_library} PRIVATE ${shiboken_shared_libraries}) target_link_libraries(${bindings_library} PRIVATE ${shiboken_shared_libraries})
......
...@@ -5,10 +5,20 @@ import os ...@@ -5,10 +5,20 @@ import os
import re import re
import sys import sys
# 要编译的版本[5|6]
PYSIDE = 'pyside6' BUILD_QT_VERSION = 5
PYSIDE_MODULE = 'PySide6' if BUILD_QT_VERSION == 5:
SHIBOKEN = 'shiboken6' # 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): class Package(Enum):
...@@ -30,53 +40,53 @@ python_include_error = 'Unable to locate the Python include headers directory.' ...@@ -30,53 +40,53 @@ python_include_error = 'Unable to locate the Python include headers directory.'
options = [] options = []
# option, function, error, description # option, function, error, description
options.append(("--shiboken-module-path", options.append((f"--shiboken{SHIBOKEN_SUFFIX}-module-path",
lambda: find_shiboken_module(), lambda: find_shiboken_module(),
shiboken_module_error, shiboken_module_error,
"Print shiboken module location")) f"Print shiboken{SHIBOKEN_SUFFIX} module location"))
options.append(("--shiboken-generator-path", options.append((f"--shiboken{SHIBOKEN_SUFFIX}-generator-path",
lambda: find_shiboken_generator(), lambda: find_shiboken_generator(),
shiboken_generator_error, shiboken_generator_error,
"Print shiboken generator location")) f"Print shiboken{SHIBOKEN_SUFFIX} generator location"))
options.append(("--pyside-path", lambda: find_pyside(), pyside_error, options.append((f"--pyside{SHIBOKEN_SUFFIX}-path", lambda: find_pyside(), pyside_error,
f"Print {PYSIDE_MODULE} location")) f"Print {PYSIDE_MODULE} location"))
options.append(("--python-include-path", options.append(("--python-include-path",
lambda: get_python_include_path(), lambda: get_python_include_path(),
python_include_error, python_include_error,
"Print Python include path")) "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), lambda: get_package_include_path(Package.SHIBOKEN_GENERATOR),
pyside_error, pyside_error,
"Print shiboken generator include paths")) f"Print shiboken{SHIBOKEN_SUFFIX} generator include paths"))
options.append(("--pyside-include-path", options.append((f"--pyside{SHIBOKEN_SUFFIX}-include-path",
lambda: get_package_include_path(Package.PYSIDE_MODULE), lambda: get_package_include_path(Package.PYSIDE_MODULE),
pyside_error, 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, options.append(("--python-link-flags-qmake", lambda: python_link_flags_qmake(), python_link_error,
"Print python link flags for qmake")) "Print python link flags for qmake"))
options.append(("--python-link-flags-cmake", lambda: python_link_flags_cmake(), python_link_error, options.append(("--python-link-flags-cmake", lambda: python_link_flags_cmake(), python_link_error,
"Print python link flags for cmake")) "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, lambda: get_package_qmake_lflags(Package.SHIBOKEN_MODULE), pyside_error,
"Print shiboken6 shared library link flags for qmake")) f"Print shiboken{SHIBOKEN_SUFFIX} shared library link flags for qmake"))
options.append(("--pyside-qmake-lflags", options.append((f"--pyside{SHIBOKEN_SUFFIX}-qmake-lflags",
lambda: get_package_qmake_lflags(Package.PYSIDE_MODULE), pyside_error, 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, 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")) f"Print paths of shiboken{SHIBOKEN_SUFFIX} shared libraries (.so's, .dylib's, .dll's) for qmake"))
options.append(("--shiboken-module-shared-libraries-cmake", options.append((f"--shiboken{SHIBOKEN_SUFFIX}-module-shared-libraries-cmake",
lambda: get_shared_libraries_cmake(Package.SHIBOKEN_MODULE), pyside_libs_error, 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, 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")) f"Print paths of {PYSIDE_MODULE} shared libraries (.so's, .dylib's, .dll's) for qmake"))
options.append(("--pyside-shared-libraries-cmake", options.append((f"--pyside{SHIBOKEN_SUFFIX}-shared-libraries-cmake",
lambda: get_shared_libraries_cmake(Package.PYSIDE_MODULE), pyside_libs_error, 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")) 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(): ...@@ -135,7 +145,7 @@ def shared_library_glob_pattern():
def filter_shared_libraries(libs_list): def filter_shared_libraries(libs_list):
def predicate(lib_name): def predicate(lib_name):
basename = os.path.basename(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 True
return False return False
result = [lib for lib in libs_list if predicate(lib)] result = [lib for lib in libs_list if predicate(lib)]
......
import PySide6.QtCore import PySide2.QtCore
import PySide6.QtWidgets import PySide2.QtWidgets
from timp_pcbcam import PcbCamUtil as UT from timp_pcbcam import PcbCamUtil as UT
if __name__ == "__main__": 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