mirror of
https://github.com/crystalidea/qt-build-tools.git
synced 2025-07-04 16:35:24 +08:00
Compare commits
5 Commits
3b65ac6f9a
...
master
Author | SHA1 | Date | |
---|---|---|---|
f3e243c09e | |||
1c98df7a29 | |||
16bc5aa542 | |||
1442f09d6b | |||
5ae93a018e |
File diff suppressed because it is too large
Load Diff
@ -1,75 +0,0 @@
|
||||
// Copyright (C) 2022 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
|
||||
#ifndef QWINDOWS11STYLE_P_H
|
||||
#define QWINDOWS11STYLE_P_H
|
||||
|
||||
//
|
||||
// W A R N I N G
|
||||
// -------------
|
||||
//
|
||||
// This file is not part of the Qt API. It exists purely as an
|
||||
// implementation detail. This header file may change from version to
|
||||
// version without notice, or even be removed.
|
||||
//
|
||||
// We mean it.
|
||||
//
|
||||
|
||||
#include <QtWidgets/private/qtwidgetsglobal_p.h>
|
||||
#include <qwindowsvistastyle_p_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QWindows11StylePrivate;
|
||||
class QWindows11Style;
|
||||
|
||||
class QWindows11Style : public QWindowsVistaStyle
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
QWindows11Style();
|
||||
~QWindows11Style() override;
|
||||
void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option,
|
||||
QPainter *painter, const QWidget *widget) const override;
|
||||
void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
|
||||
QPainter *painter, const QWidget *widget) const override;
|
||||
QRect subElementRect(QStyle::SubElement element, const QStyleOption *option,
|
||||
const QWidget *widget = nullptr) const override;
|
||||
QRect subControlRect(ComplexControl control, const QStyleOptionComplex *option,
|
||||
SubControl subControl, const QWidget *widget) const override;
|
||||
void drawControl(ControlElement element, const QStyleOption *option,
|
||||
QPainter *painter, const QWidget *widget) const override;
|
||||
int styleHint(StyleHint hint, const QStyleOption *opt = nullptr,
|
||||
const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const override;
|
||||
void polish(QWidget* widget) override;
|
||||
|
||||
QSize sizeFromContents(ContentsType type, const QStyleOption *option,
|
||||
const QSize &size, const QWidget *widget) const override;
|
||||
int pixelMetric(PixelMetric metric, const QStyleOption *option = nullptr,
|
||||
const QWidget *widget = nullptr) const override;
|
||||
void polish(QPalette &pal) override;
|
||||
void unpolish(QWidget *widget) override;
|
||||
protected:
|
||||
QWindows11Style(QWindows11StylePrivate &dd);
|
||||
|
||||
private:
|
||||
static inline QBrush buttonFillBrush(const QStyleOption *option);
|
||||
static inline QPen buttonLabelPen(const QStyleOption *option, int colorSchemeIndex);
|
||||
|
||||
private:
|
||||
Q_DISABLE_COPY_MOVE(QWindows11Style)
|
||||
Q_DECLARE_PRIVATE(QWindows11Style)
|
||||
friend class QStyleFactory;
|
||||
|
||||
bool highContrastTheme = false;
|
||||
int colorSchemeIndex = 0;
|
||||
const QFont assetFont = QFont("Segoe Fluent Icons"); //Font to load icons from
|
||||
};
|
||||
|
||||
class QWindows11StylePrivate : public QWindowsVistaStylePrivate {
|
||||
Q_DECLARE_PUBLIC(QWindows11Style)
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QWINDOWS11STYLE_P_H
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,189 +0,0 @@
|
||||
# from https://wiki.qt.io/Building_Qt_Multimedia_with_FFmpeg
|
||||
# vcpkg install ffmpeg[core,swresample,swscale,avdevice]:x64-windows
|
||||
|
||||
use strict;
|
||||
use Cwd;
|
||||
use Path::Tiny;
|
||||
use IPC::Cmd qw[can_run run];
|
||||
use Getopt::Long;
|
||||
|
||||
# check requirements:
|
||||
die "Cannot proceed without the '_tools' folder'" if (!-e "_tools");
|
||||
|
||||
my $current_dir = getcwd;
|
||||
my $prefix_dir = path($current_dir)->parent(1); # one level up
|
||||
$current_dir =~ s#/#\\#g; # convert separators to Windows-style
|
||||
$prefix_dir =~ s#/#\\#g; # convert separators to Windows-style
|
||||
|
||||
my $arch = $ARGV[0];
|
||||
my $install_dir = $ARGV[1];
|
||||
my $vcpkg_dir;
|
||||
my $build_multimedia = 0;
|
||||
my $build_graphs = 0;
|
||||
my $build_pdf = 0;
|
||||
|
||||
GetOptions(
|
||||
'vcpkg-dir=s' => \$vcpkg_dir,
|
||||
'build-multimedia' => \$build_multimedia,
|
||||
'build-graphs' => \$build_graphs,
|
||||
'build-pdf' => \$build_pdf,
|
||||
) or die "Error in command line arguments\n";
|
||||
|
||||
$arch = "amd64" if ($arch eq ''); # amd64 is nothing is specified, can be x86
|
||||
|
||||
die "Error: Please specify architecture (x86 or amd64)" if ($arch ne "x86" && $arch ne "amd64"); # die if user specified anything except x86 or amd64
|
||||
die "Error: Please specify install dir as second parameter" if (!$install_dir);
|
||||
die "Error: istall dir '$install_dir' already exists" if (-d $install_dir);
|
||||
|
||||
my $build_dir = "_qt6-build-$arch";
|
||||
|
||||
die "Error: build dir '$build_dir' already exists" if (-d $build_dir);
|
||||
|
||||
if (defined $vcpkg_dir)
|
||||
{
|
||||
$vcpkg_dir .= "\\installed\\x64-windows" if ($arch eq 'amd64');
|
||||
$vcpkg_dir .= "\\installed\\x86-windows" if ($arch eq 'x86');
|
||||
|
||||
die "vcpkg dir $vcpkg_dir doesn't exist" if (!-e "$vcpkg_dir");
|
||||
}
|
||||
|
||||
die "vcpkg_dir dir is required to build multimedia" if ($build_multimedia && !defined $vcpkg_dir);
|
||||
|
||||
my $openssl_version = "3.0.13"; # supported until 7th September 2026
|
||||
my $openssl_download = "https://www.openssl.org/source/openssl-$openssl_version.tar.gz";
|
||||
my $openssl_arch = $arch eq "amd64" ? "WIN64A" : "WIN32";
|
||||
my $openssl_dir = "$current_dir\\openssl-$openssl_version-$openssl_arch";
|
||||
my $openssl_7z = "openssl-$openssl_version-$openssl_arch.7z";
|
||||
|
||||
# will create a batch file
|
||||
|
||||
my $batfile = 'compile_win.bat';
|
||||
|
||||
open BAT, '>', $batfile;
|
||||
|
||||
printLineToBat ("SET PATH=%PATH%;%cd%\\_tools;%cd%\\_tools\\cmake\\bin"); # add folders to the path for 7z, wget, cmake, etc
|
||||
printLineToBat ("CALL \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" $arch");
|
||||
printLineToBat ("SET _ROOT=%cd%");
|
||||
printLineToBat ("SET PATH=%_ROOT%\\qtbase\\bin;%_ROOT%\\gnuwin32\\bin;%PATH%"); # http://doc.qt.io/qt-5/windows-building.html
|
||||
printLineToBat ("SET OPENSSL_LIBS=-lUser32 -lAdvapi32 -lGdi32 -llibcrypto -llibssl");
|
||||
|
||||
printLineToBat ("cd _tools");
|
||||
printLineToBat ("7z x cmake.7z -aoa -y");
|
||||
|
||||
printLineToBat ("7z x $openssl_7z -o$openssl_dir -y") if (-e "_tools\\$openssl_7z");
|
||||
printLineToBat ("cd ..");
|
||||
|
||||
printLineToBat ("IF EXIST $build_dir GOTO SECOND_STEP");
|
||||
printLineToBat ("mkdir $build_dir");
|
||||
printLineToBat (":SECOND_STEP");
|
||||
printLineToBat ("cd $build_dir");
|
||||
|
||||
printLineToBat ("if \"%~1\"==\"step2\" goto step2");
|
||||
|
||||
# step1: compile openssl and do configure. For some reason, can't continue script execution after configure, have to make step2
|
||||
printLineToBat ("IF EXIST $openssl_dir\\build GOTO OPENSSL_ALREAD_COMPILED");
|
||||
printLineToBat ("wget --no-check-certificate $openssl_download");
|
||||
printLineToBat ("7z x openssl-$openssl_version.tar.gz");
|
||||
printLineToBat ("7z x openssl-$openssl_version.tar -o$openssl_dir -y");
|
||||
printLineToBat ("mv $openssl_dir\\openssl-$openssl_version\\* $openssl_dir");
|
||||
printLineToBat ("rmdir $openssl_dir\\openssl-$openssl_version"); # empty now
|
||||
printLineToBat ("rm openssl-$openssl_version.tar.gz");
|
||||
printLineToBat ("rm openssl-$openssl_version.tar");
|
||||
printLineToBat ("cd $openssl_dir"); # go to openssl dir
|
||||
printLineToBat ("perl Configure VC-$openssl_arch no-asm no-shared no-tests --prefix=%cd%\\build --openssldir=%cd%\\build");
|
||||
printLineToBat ("nmake");
|
||||
printLineToBat ("nmake install");
|
||||
# do some clean up:
|
||||
printLineToBat ("rm test\\*.exe");
|
||||
printLineToBat ("rm test\\*.pdb");
|
||||
printLineToBat ("rm test\\*.obj");
|
||||
printLineToBat ("del /s /f /q out32");
|
||||
printLineToBat ("del /s /f /q out32.dbg");
|
||||
printLineToBat ("cd .."); # go back to qtbase
|
||||
|
||||
printLineToBat (":OPENSSL_ALREAD_COMPILED");
|
||||
|
||||
# openssl: see https://bugreports.qt.io/browse/QTBUG-65501
|
||||
|
||||
my $skipped_modules = "qthttpserver qtlocation qtspeech qtgrpc qt3d qtactiveqt qtcharts qtcoap qtconnectivity qtdatavis3d qtdoc qtlottie qtmqtt qtnetworkauth qtopcua qtpositioning qtremoteobjects qtscxml qtsensors qtserialbus qtserialport qtsvg qttranslations qtvirtualkeyboard qtwayland qtwebchannel qtwebengine qtwebsockets qtwebview";
|
||||
$skipped_modules .= " qtquickeffectmaker qtquicktimeline qtquick3d qtquick3dphysics";
|
||||
|
||||
$skipped_modules.=' qtmultimedia' if (!$build_multimedia);
|
||||
$skipped_modules.=' qtgraphs' if (!$build_graphs);
|
||||
|
||||
if ($build_pdf && $arch eq 'x86')
|
||||
{
|
||||
# This version of the script is not able to build x86 qtwebengine on a 64-bit machine"
|
||||
# need to override target_cpu='x86' somehow: https://www.chromium.org/developers/gn-build-configuration/
|
||||
|
||||
$build_pdf = 0;
|
||||
}
|
||||
|
||||
if (!$build_pdf)
|
||||
{
|
||||
$skipped_modules .= ' qtdeclarative';
|
||||
}
|
||||
|
||||
my $skipped_modules_cmd;
|
||||
|
||||
foreach (split(/\s/, $skipped_modules)) {
|
||||
$skipped_modules_cmd .= "-skip $_ ";
|
||||
}
|
||||
|
||||
my $configure_cmd = "..\\configure -prefix $install_dir -opensource -debug-and-release -confirm-license -opengl desktop -nomake tests -nomake examples";
|
||||
|
||||
# append skip modules
|
||||
$configure_cmd .= " $skipped_modules_cmd";
|
||||
|
||||
# append openssl related parameters
|
||||
$configure_cmd .= " -openssl-linked -- -DOPENSSL_ROOT_DIR=\"$openssl_dir\\build\" -DOPENSSL_INCLUDE_DIR=\"$openssl_dir\\build\\include\" -DOPENSSL_USE_STATIC_LIBS=ON";
|
||||
|
||||
# append ffmpeg dir when building multimedia
|
||||
$configure_cmd .= " -DFFMPEG_DIR=$vcpkg_dir" if ($build_multimedia);
|
||||
|
||||
printLineToBat ($configure_cmd);
|
||||
|
||||
printLineToBat ("goto :EOF");
|
||||
|
||||
# step 2:
|
||||
printLineToBat (":step2");
|
||||
|
||||
printLineToBat ("cmake --build . --parallel");
|
||||
|
||||
printLineToBat ("IF ERRORLEVEL 1 (");
|
||||
printLineToBat ("echo Build failed with error %ERRORLEVEL%.");
|
||||
printLineToBat ("EXIT /B %ERRORLEVEL%");
|
||||
printLineToBat (")");
|
||||
|
||||
printLineToBat ("cmake --install . --config Release");
|
||||
printLineToBat ("cmake --install . --config Debug");
|
||||
|
||||
# clean up
|
||||
printLineToBat ("cd .."); # since we're now in 'qt6-build' for some reason
|
||||
printLineToBat ("rmdir $build_dir /s /q");
|
||||
|
||||
# remove _tools folder from the installation directory
|
||||
printLineToBat ("rmdir $install_dir\\_tools /s /q");
|
||||
|
||||
# NEW: let's build the PDF module
|
||||
|
||||
if ($build_pdf)
|
||||
{
|
||||
printLineToBat ("mkdir _qtwebengine-pdf-build-$arch");
|
||||
printLineToBat ("cd _qtwebengine-pdf-build-$arch");
|
||||
|
||||
printLineToBat ("$install_dir\\bin\\qt-configure-module.bat ../qtwebengine -- -DFEATURE_qtwebengine_build=OFF && cmake --build . --parallel && cmake --install . --config Release && cmake --install . --config Debug")
|
||||
}
|
||||
|
||||
close BAT;
|
||||
|
||||
system ($batfile);
|
||||
system ("$batfile step2");
|
||||
|
||||
system ("pause");
|
||||
|
||||
sub printLineToBat
|
||||
{
|
||||
print BAT "$_[0]\n";
|
||||
}
|
||||
|
@ -1 +0,0 @@
|
||||
perl compile_win.pl amd64 C:\qt6_x64
|
@ -1 +0,0 @@
|
||||
perl compile_win.pl amd64 C:\qt6_x64 --vcpkg-dir=G:\Projects\vcpkg --build-pdf --build-multimedia
|
@ -1 +0,0 @@
|
||||
perl compile_win.pl x86 C:\qt6
|
@ -1,6 +1,10 @@
|
||||
#!/usr/bin/perl
|
||||
use strict;
|
||||
use warnings;
|
||||
use Time::HiRes qw(gettimeofday tv_interval);
|
||||
|
||||
# Start time
|
||||
my $start_time = [gettimeofday];
|
||||
|
||||
# Define the modules to skip
|
||||
my @skipped_modules = qw(
|
||||
@ -9,7 +13,7 @@ my @skipped_modules = qw(
|
||||
qtpositioning qtremoteobjects qtscxml qtsensors qtserialbus qtserialport
|
||||
qtsvg qttranslations qtvirtualkeyboard qtwayland qtwebchannel qtwebengine
|
||||
qtwebsockets qtwebview qtquickeffectmaker qtquicktimeline qtquick3d
|
||||
qtquick3dphysics qtgraphs
|
||||
qtquick3dphysics qtgraphs qtmultimedia qtdeclarative qtlanguageserver qtshadertools qttools
|
||||
);
|
||||
|
||||
# Subroutine to check if a command exists in PATH
|
||||
@ -58,11 +62,16 @@ if (!command_exists('cmake')) {
|
||||
}
|
||||
|
||||
my $build_dir = "qt6-build";
|
||||
my $install_dir = "/usr/local/Qt-6.8.1";
|
||||
|
||||
if (-d $build_dir) {
|
||||
die "Error: $build_dir already exists from the previous build\n";
|
||||
}
|
||||
|
||||
if (-d $install_dir) {
|
||||
die "Error: $install_dir already exists from the previous build\n";
|
||||
}
|
||||
|
||||
mkdir $build_dir or die "Error: Unable to create directory '$build_dir'.\n";
|
||||
chdir $build_dir or die "Error: Unable to change directory to '$build_dir'.\n";
|
||||
|
||||
@ -71,12 +80,27 @@ my $skip_modules_string = join(' ', map { "-skip $_" } @skipped_modules);
|
||||
|
||||
# Configure the build
|
||||
print "Configuring the build...\n";
|
||||
run_command("../configure $skip_modules_string -- -DCMAKE_OSX_ARCHITECTURES=\"x86_64;arm64\"");
|
||||
|
||||
my $build_archs = "-DCMAKE_OSX_ARCHITECTURES=\"x86_64;arm64\"";
|
||||
# NOTE: if $build_archs is empty, Qt is defaults to x86_64 on an arm64 machine, which is not what described in the docs:
|
||||
# https://doc.qt.io/qt-6/macos-building.html
|
||||
my $build_etc = "-DBUILD_TESTING=OFF";
|
||||
|
||||
run_command("../configure $skip_modules_string -no-framework -- $build_archs $build_etc");
|
||||
|
||||
# Build Qt6
|
||||
print "Building Qt6...\n";
|
||||
run_command("cmake --build . --parallel");
|
||||
|
||||
# End time
|
||||
my $end_time = [gettimeofday];
|
||||
my $elapsed = tv_interval($start_time, $end_time);
|
||||
# Convert elapsed time to mm:ss format
|
||||
my $minutes = int($elapsed / 60);
|
||||
my $seconds = $elapsed % 60;
|
||||
# Format the output
|
||||
printf("Compilation time: %02d:%02d\n", $minutes, $seconds);
|
||||
|
||||
# Install Qt6 with sudo
|
||||
print "Installing Qt6 with elevated privileges...\n";
|
||||
run_command_with_sudo("cmake --install .");
|
Reference in New Issue
Block a user