From 44914f01d33d8ab4eebd2b3cffd88ce766cfaf2c Mon Sep 17 00:00:00 2001 From: Nova Date: Sun, 23 Nov 2025 13:24:34 +0330 Subject: [PATCH 01/16] fix host header in websocket --- src/configs/common/transport.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/configs/common/transport.cpp b/src/configs/common/transport.cpp index 43b0e91..1fc4095 100644 --- a/src/configs/common/transport.cpp +++ b/src/configs/common/transport.cpp @@ -72,10 +72,17 @@ namespace Configs { method = "GET"; } } - if (query.hasQueryItem("host")) host = query.queryItemValue("host"); + if (query.hasQueryItem("host")) { + host = query.queryItemValue("host"); + if (type == "ws") headers << "host" << host; + } if (query.hasQueryItem("path")) path = query.queryItemValue("path"); if (query.hasQueryItem("method")) method = query.queryItemValue("method"); - if (query.hasQueryItem("headers")) headers = query.queryItemValue("headers").split(","); + if (query.hasQueryItem("headers")) { + auto headersImported = query.queryItemValue("headers").split(","); + if (headersImported.contains("host")) headers = headersImported; + else headers << headersImported; + } if (query.hasQueryItem("idle_timeout")) idle_timeout = query.queryItemValue("idle_timeout"); if (query.hasQueryItem("ping_timeout")) ping_timeout = query.queryItemValue("ping_timeout"); if (query.hasQueryItem("max_early_data")) max_early_data = query.queryItemValue("max_early_data").toInt(); @@ -121,7 +128,7 @@ namespace Configs { QJsonObject object; if (type.isEmpty() || type == "tcp") return object; if (!type.isEmpty()) object["type"] = type; - if (!host.isEmpty()) object["host"] = host; + if (!host.isEmpty() && (type == "http" || type == "httpupgrade")) object["host"] = host; if (!path.isEmpty()) object["path"] = path; if (!method.isEmpty()) object["method"] = method; if (!headers.isEmpty()) { From 7f7aaf71c77246daa7cdf3cf9abd59c140e7d358 Mon Sep 17 00:00:00 2001 From: Nova Date: Sun, 23 Nov 2025 13:29:13 +0330 Subject: [PATCH 02/16] fix shadowsocks plugin import --- src/configs/outbounds/shadowsocks.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/configs/outbounds/shadowsocks.cpp b/src/configs/outbounds/shadowsocks.cpp index 922f816..3ceb974 100644 --- a/src/configs/outbounds/shadowsocks.cpp +++ b/src/configs/outbounds/shadowsocks.cpp @@ -36,6 +36,8 @@ namespace Configs { } plugin = query.queryItemValue("plugin").replace("simple-obfs;", "obfs-local;"); + plugin_opts = SubStrAfter(plugin, ";"); + plugin = SubStrBefore(plugin, ";"); if (query.hasQueryItem("plugin-opts")) plugin_opts = query.queryItemValue("plugin-opts"); if (query.hasQueryItem("uot")) uot = query.queryItemValue("uot") == "true" || query.queryItemValue("uot").toInt() > 0; multiplex->ParseFromLink(link); From 732f649beee495778796cf526b8b550e7c2b8b4f Mon Sep 17 00:00:00 2001 From: Nova Date: Sun, 23 Nov 2025 13:31:24 +0330 Subject: [PATCH 03/16] fix tls insecure parse --- src/configs/common/TLS.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/configs/common/TLS.cpp b/src/configs/common/TLS.cpp index 07e0c4a..e66b9df 100644 --- a/src/configs/common/TLS.cpp +++ b/src/configs/common/TLS.cpp @@ -164,6 +164,7 @@ namespace Configs { if (query.hasQueryItem("peer")) server_name = query.queryItemValue("peer"); if (query.hasQueryItem("allowInsecure")) insecure = query.queryItemValue("allowInsecure").replace("1", "true") == "true"; if (query.hasQueryItem("allow_insecure")) insecure = query.queryItemValue("allow_insecure").replace("1", "true") == "true"; + if (query.hasQueryItem("insecure")) insecure = query.queryItemValue("insecure").replace("1", "true") == "true"; if (query.hasQueryItem("alpn")) alpn = query.queryItemValue("alpn").split(","); if (query.hasQueryItem("tls_min_version")) min_version = query.queryItemValue("tls_min_version"); if (query.hasQueryItem("tls_max_version")) max_version = query.queryItemValue("tls_max_version"); From 00155b1c9dbf8f7fa1d5c9821dbd33c118401e22 Mon Sep 17 00:00:00 2001 From: Nova Date: Sun, 23 Nov 2025 13:41:22 +0330 Subject: [PATCH 04/16] fix ws host header --- src/configs/common/transport.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/configs/common/transport.cpp b/src/configs/common/transport.cpp index 1fc4095..d1797af 100644 --- a/src/configs/common/transport.cpp +++ b/src/configs/common/transport.cpp @@ -72,17 +72,10 @@ namespace Configs { method = "GET"; } } - if (query.hasQueryItem("host")) { - host = query.queryItemValue("host"); - if (type == "ws") headers << "host" << host; - } + if (query.hasQueryItem("host")) host = query.queryItemValue("host"); if (query.hasQueryItem("path")) path = query.queryItemValue("path"); if (query.hasQueryItem("method")) method = query.queryItemValue("method"); - if (query.hasQueryItem("headers")) { - auto headersImported = query.queryItemValue("headers").split(","); - if (headersImported.contains("host")) headers = headersImported; - else headers << headersImported; - } + if (query.hasQueryItem("headers")) headers = query.queryItemValue("headers").split(","); if (query.hasQueryItem("idle_timeout")) idle_timeout = query.queryItemValue("idle_timeout"); if (query.hasQueryItem("ping_timeout")) ping_timeout = query.queryItemValue("ping_timeout"); if (query.hasQueryItem("max_early_data")) max_early_data = query.queryItemValue("max_early_data").toInt(); @@ -128,12 +121,19 @@ namespace Configs { QJsonObject object; if (type.isEmpty() || type == "tcp") return object; if (!type.isEmpty()) object["type"] = type; - if (!host.isEmpty() && (type == "http" || type == "httpupgrade")) object["host"] = host; if (!path.isEmpty()) object["path"] = path; if (!method.isEmpty()) object["method"] = method; if (!headers.isEmpty()) { object["headers"] = qStringListToJsonObject(headers); } + if (!host.isEmpty()) { + if (type == "http" || type == "httpupgrade") object["host"] = host; + if (type == "ws") { + auto headersObj = object["headers"].isObject() ? object["headers"].toObject() : QJsonObject(); + headersObj["host"] = host; + object["headers"] = headersObj; + } + } if (!idle_timeout.isEmpty()) object["idle_timeout"] = idle_timeout; if (!ping_timeout.isEmpty()) object["ping_timeout"] = ping_timeout; if (max_early_data > 0) object["max_early_data"] = max_early_data; From 796dd4f536e24cdc68ab6ddb377efaeedaa6b90d Mon Sep 17 00:00:00 2001 From: Nova Date: Mon, 24 Nov 2025 00:00:12 +0330 Subject: [PATCH 05/16] Try not hiding tray icon on exit --- src/ui/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 1f70c57..a0b32d9 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -970,7 +970,7 @@ void MainWindow::prepare_exit() return; } hide(); - tray->hide(); + // tray->hide(); Configs::dataStore->prepare_exit = true; // RegisterHiddenMenuShortcuts(true); From ca3da15056a45282a86d79b8a8d63477e3db943e Mon Sep 17 00:00:00 2001 From: Nova Date: Tue, 25 Nov 2025 12:57:57 +0330 Subject: [PATCH 06/16] Fix ws transport host header import --- src/configs/common/transport.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/configs/common/transport.cpp b/src/configs/common/transport.cpp index d1797af..79ae963 100644 --- a/src/configs/common/transport.cpp +++ b/src/configs/common/transport.cpp @@ -91,7 +91,12 @@ namespace Configs { if (object.contains("path")) path = object["path"].toString(); if (object.contains("method")) method = object["method"].toString(); if (object.contains("headers") && object["headers"].isObject()) { - headers = jsonObjectToQStringList(object["headers"].toObject()); + auto headerObj = object["headers"].toObject(); + if (type == "ws") { + if (headerObj.contains("Host")) host = headerObj["Host"].toString(); + headerObj.remove("Host"); + } + headers = jsonObjectToQStringList(headerObj); } if (object.contains("idle_timeout")) idle_timeout = object["idle_timeout"].toString(); if (object.contains("ping_timeout")) ping_timeout = object["ping_timeout"].toString(); @@ -130,7 +135,7 @@ namespace Configs { if (type == "http" || type == "httpupgrade") object["host"] = host; if (type == "ws") { auto headersObj = object["headers"].isObject() ? object["headers"].toObject() : QJsonObject(); - headersObj["host"] = host; + headersObj["Host"] = host; object["headers"] = headersObj; } } From 6296e6a8bd1a08bcce5e40ff16cf2badcb76d9c4 Mon Sep 17 00:00:00 2001 From: Nova Date: Thu, 27 Nov 2025 12:05:04 +0330 Subject: [PATCH 07/16] Add panic recovery to catch the panic message --- core/server/main.go | 7 +++++++ src/ui/mainwindow.cpp | 1 - 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/core/server/main.go b/core/server/main.go index a8136c5..19644a0 100644 --- a/core/server/main.go +++ b/core/server/main.go @@ -64,6 +64,13 @@ func RunCore() { } func main() { + defer func() { + if err := recover(); err != nil { + fmt.Println("Core panicked:") + fmt.Println(err) + os.Exit(0) + } + }() fmt.Println("sing-box:", C.Version) fmt.Println() runtimeDebug.SetMemoryLimit(2 * 1024 * 1024 * 1024) // 2GB diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index a0b32d9..b863479 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -970,7 +970,6 @@ void MainWindow::prepare_exit() return; } hide(); - // tray->hide(); Configs::dataStore->prepare_exit = true; // RegisterHiddenMenuShortcuts(true); From 6da8f7ce055d7e0e426dd990d291c778a17c5cca Mon Sep 17 00:00:00 2001 From: Nova Date: Thu, 27 Nov 2025 12:06:15 +0330 Subject: [PATCH 08/16] Workaround sing-box brutal parse bug --- src/configs/common/multiplex.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/configs/common/multiplex.cpp b/src/configs/common/multiplex.cpp index cf4028b..f40e543 100644 --- a/src/configs/common/multiplex.cpp +++ b/src/configs/common/multiplex.cpp @@ -35,8 +35,9 @@ namespace Configs { QJsonObject object; if (!enabled) return object; object["enabled"] = enabled; - if (up_mbps > 0) object["up_mbps"] = up_mbps; - if (down_mbps > 0) object["down_mbps"] = down_mbps; + // sing-box expects both values it seems + object["up_mbps"] = up_mbps <= 0 ? 1 : up_mbps; + object["down_mbps"] = down_mbps <= 0 ? 1 : down_mbps; return object; } BuildResult TcpBrutal::Build() From 808c060a255af042c115cb64c355df2051413a4d Mon Sep 17 00:00:00 2001 From: Nova Date: Thu, 27 Nov 2025 12:22:40 +0330 Subject: [PATCH 09/16] add brutal upload ui --- include/ui/profile/dialog_edit_profile.ui | 72 +++++++++++++++++------ src/ui/profile/dialog_edit_profile.cpp | 6 +- 2 files changed, 59 insertions(+), 19 deletions(-) diff --git a/include/ui/profile/dialog_edit_profile.ui b/include/ui/profile/dialog_edit_profile.ui index d8a7507..59f7b23 100644 --- a/include/ui/profile/dialog_edit_profile.ui +++ b/include/ui/profile/dialog_edit_profile.ui @@ -272,23 +272,61 @@ - - - <html><head/><body><p>Server to Client TCP Brutal Speed</p></body></html> - - - TCP Brutal Speed - - - - - - - - - - Mb/s - + + + + 0 + + + 0 + + + 0 + + + 0 + + + 2 + + + + + <html><head/><body><p>Server to Client TCP Brutal Speed</p></body></html> + + + Brutal Download Speed + + + + + + + Mb/s + + + + + + + + + + Brutal Upload Speed + + + + + + + + + + Mb/s + + + + diff --git a/src/ui/profile/dialog_edit_profile.cpp b/src/ui/profile/dialog_edit_profile.cpp index 8ef6f0c..5b8d026 100644 --- a/src/ui/profile/dialog_edit_profile.cpp +++ b/src/ui/profile/dialog_edit_profile.cpp @@ -320,7 +320,8 @@ void DialogEditProfile::typeSelected(const QString &newType) { auto mux = ent->outbound->GetMux(); ui->multiplex->setCurrentIndex(mux->getMuxState()); ui->brutal_enable->setChecked(mux->brutal->enabled); - ui->brutal_speed->setText(Int2String(mux->brutal->down_mbps)); + ui->brutal_d_speed->setText(Int2String(mux->brutal->down_mbps)); + ui->brutal_u_speed->setText(Int2String(mux->brutal->up_mbps)); } // 左边 bean @@ -433,7 +434,8 @@ bool DialogEditProfile::onEnd() { auto mux = ent->outbound->GetMux(); mux->saveMuxState(ui->multiplex->currentIndex()); mux->brutal->enabled = ui->brutal_enable->isChecked(); - mux->brutal->down_mbps = ui->brutal_speed->text().toInt(); + mux->brutal->down_mbps = ui->brutal_d_speed->text().toInt(); + mux->brutal->up_mbps = ui->brutal_u_speed->text().toInt(); } return true; From c2238d3c2cef2835ffdd19e504be23a85d2fca86 Mon Sep 17 00:00:00 2001 From: Nova Date: Thu, 27 Nov 2025 18:15:44 +0330 Subject: [PATCH 10/16] Fix shadowsocks edit --- src/ui/profile/edit_shadowsocks.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/ui/profile/edit_shadowsocks.cpp b/src/ui/profile/edit_shadowsocks.cpp index c687351..265d0d5 100644 --- a/src/ui/profile/edit_shadowsocks.cpp +++ b/src/ui/profile/edit_shadowsocks.cpp @@ -19,11 +19,8 @@ void EditShadowSocks::onStart(std::shared_ptr _ent) { ui->method->setCurrentText(outbound->method); ui->uot->setCurrentIndex(outbound->uot); ui->password->setText(outbound->password); - auto ssPlugin = outbound->plugin.split(";"); - if (!ssPlugin.empty()) { - ui->plugin->setCurrentText(ssPlugin[0]); - ui->plugin_opts->setText(SubStrAfter(outbound->plugin, ";")); - } + ui->plugin->setCurrentText(outbound->plugin); + ui->plugin_opts->setText(outbound->plugin_opts); } bool EditShadowSocks::onEnd() { @@ -33,9 +30,7 @@ bool EditShadowSocks::onEnd() { outbound->password = ui->password->text(); outbound->uot = ui->uot->currentIndex(); outbound->plugin = ui->plugin->currentText(); - if (!outbound->plugin.isEmpty()) { - outbound->plugin += ";" + ui->plugin_opts->text(); - } + outbound->plugin_opts = ui->plugin_opts->text(); return true; } From d9e116c5809a63e007d6eb2aee2cc241c38974c8 Mon Sep 17 00:00:00 2001 From: Nova Date: Thu, 27 Nov 2025 21:39:31 +0330 Subject: [PATCH 11/16] Fix process names --- src/configs/generate.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/configs/generate.cpp b/src/configs/generate.cpp index 26e16b9..227ab83 100644 --- a/src/configs/generate.cpp +++ b/src/configs/generate.cpp @@ -729,6 +729,7 @@ namespace Configs { route["rules"] = routeRules; route["rule_set"] = ruleSetArray; route["final"] = outboundIDToString(routeChain->defaultOutboundID); + if (dataStore->enable_stats) route["find_process"] = true; route["default_domain_resolver"] = QJsonObject{ {"server", "dns-direct"}, {"strategy", dataStore->routing->outbound_domain_strategy}}; From cf09c255c99b92582cb9558ab5fe0f0860d1b6a8 Mon Sep 17 00:00:00 2001 From: Nova Date: Fri, 28 Nov 2025 01:27:33 +0330 Subject: [PATCH 12/16] Fix chain ents order --- src/configs/generate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configs/generate.cpp b/src/configs/generate.cpp index 227ab83..64a768a 100644 --- a/src/configs/generate.cpp +++ b/src/configs/generate.cpp @@ -620,7 +620,7 @@ namespace Configs { ctx->error = "Ent is nullptr after cast to chain, data is corrupted"; return; } - entIDs << chain->list; + for (int idx = chain->list.size()-1; idx >=0; idx--) entIDs.append(chain->list[idx]); } else { entIDs.append(ctx->ent->id); From 0c25f3ad2e0c35a1ca78953e692c53180c2ece78 Mon Sep 17 00:00:00 2001 From: CodeFreer <67214447+CodeFreer@users.noreply.github.com> Date: Fri, 28 Nov 2025 22:03:08 +0800 Subject: [PATCH 13/16] Update Chinese translations for various messages (#970) --- res/translations/zh_CN.ts | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/res/translations/zh_CN.ts b/res/translations/zh_CN.ts index ef4ec7d..9ba638a 100644 --- a/res/translations/zh_CN.ts +++ b/res/translations/zh_CN.ts @@ -176,7 +176,7 @@ <html><head/><body><p>Settings for the sing-box's built-in NTP client</p></body></html> - <html><head/><body><p>用于 sing-box 的内置 NTP 客户端的设置</p></body></html> + <html><head/><body><p>适用于 sing-box 的内置 NTP 客户端的设置</p></body></html> @@ -287,7 +287,7 @@ Only Country - + 仅国别 @@ -846,35 +846,35 @@ For more information, see the document "Configuration/DNS". GitHub - + GitHub jsDelivr(Cloudflare) - + jsDelivr(Cloudflare) jsDelivr(Gcore) - + jsDelivr(Gcore) jsDelivr(Quantil) - + jsDelivr(Quantil) jsDelivr(Fastly) - + jsDelivr(Fastly) jsDelivr(CDN) - + jsDelivr(CDN) <html><head/><body><p>Local DNS can not be used in some configurations, you will have to set an ip here to be used as local dns in such situations</p></body></html> - + <html><head/><body><p>在某些配置中无法使用本地 DNS,在这种情况下您必须在这里设置一个IP 作为本地 DNS 使用</p></body></html> Local Override - + 本地覆盖 @@ -1254,11 +1254,11 @@ https://matsuridayo.github.io/n-configuration/#vpn-tun Form - 表单 + 表单 Ephemeral - + Ephemeral (短暂) @@ -2257,15 +2257,15 @@ Release note: Local DNS and Tun mode do not work together, please set an IP to be used as the Local DNS server in the Routing Settings -> Local override - + 本地 NDS 和 Tun 模式不能同时使用,请在「路由设置 → 本地覆盖」中设置一个 IP 用作本地 DNS 服务器 Core exited, cleaning up... - + 核心已退出,正在清理... Restarting the core ... - + 正在重新启动核心... From 6af17981a4f9388f3df0c6e9cf0d83027d1a4367 Mon Sep 17 00:00:00 2001 From: Nova Date: Sat, 29 Nov 2025 02:21:54 +0330 Subject: [PATCH 14/16] Fix reset core hanging --- src/ui/mainwindow.cpp | 9 ++------- src/ui/mainwindow_rpc.cpp | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index b863479..9137be5 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -2500,15 +2500,10 @@ void MainWindow::HotkeyEvent(const QString &key) { } bool MainWindow::StopVPNProcess() { - QMutex waitStop; - waitStop.lock(); - runOnThread([=, this, &waitStop] + runOnThread([=, this] { core_process->Kill(); - waitStop.unlock(); - }, DS_cores); - waitStop.lock(); - waitStop.unlock(); + }, DS_cores, true); return true; } diff --git a/src/ui/mainwindow_rpc.cpp b/src/ui/mainwindow_rpc.cpp index 90b24fe..c69b7f1 100644 --- a/src/ui/mainwindow_rpc.cpp +++ b/src/ui/mainwindow_rpc.cpp @@ -512,7 +512,7 @@ void MainWindow::profile_start(int _id) { int r = msg.exec() - 2; if (r == 0) { - GetMainWindow()->StopVPNProcess(); + StopVPNProcess(); } }); return false; From 2b5bde651bd7241e95f2f5b208c1b89b5ba9c50c Mon Sep 17 00:00:00 2001 From: Nova Date: Sun, 23 Nov 2025 19:15:21 +0330 Subject: [PATCH 15/16] fix grpc transport --- src/configs/common/transport.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/configs/common/transport.cpp b/src/configs/common/transport.cpp index 79ae963..ee3ce33 100644 --- a/src/configs/common/transport.cpp +++ b/src/configs/common/transport.cpp @@ -126,7 +126,10 @@ namespace Configs { QJsonObject object; if (type.isEmpty() || type == "tcp") return object; if (!type.isEmpty()) object["type"] = type; - if (!path.isEmpty()) object["path"] = path; + if (!path.isEmpty()) { + if (type == "grpc") object["service_name"] = path; + else object["path"] = path; + } if (!method.isEmpty()) object["method"] = method; if (!headers.isEmpty()) { object["headers"] = qStringListToJsonObject(headers); From a5e40cf6aa860b31db4cd52d98f4156a0c330501 Mon Sep 17 00:00:00 2001 From: parhelia512 <0011d3@gmail.com> Date: Mon, 1 Dec 2025 11:09:04 +0800 Subject: [PATCH 16/16] ci: build qt with openssl on windows --- .github/workflows/build.yml | 15 +++++++++++---- script/build_qt_static_windows.bat | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7287627..20c4ac1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -148,6 +148,12 @@ jobs: with: path: download-artifact # ========================================================================================================= Qt Install + - name: Install OpenSSL (Windows) + if: matrix.platform == 'windows-latest' + shell: bash + run: | + curl -L -o openssl.7z https://github.com/throneproj/env_windows_legacy/releases/download/latest/openssl-${{ matrix.target }}.7z + 7z x openssl.7z - name: Qt static Cache id: cache-static-Qt if: matrix.platform == 'windows-latest' && matrix.qt_version != '6.2.12' @@ -156,9 +162,11 @@ jobs: path: qt6/build key: QtStaticCache-${{ matrix.platform }}-${{ matrix.target }}-Qt${{ matrix.qt_version }} - name: Install Qt Windows - shell: powershell + shell: cmd if: matrix.platform == 'windows-latest' && steps.cache-static-Qt.outputs.cache-hit != 'true' && matrix.qt_version != '6.2.12' - run: ./script/build_qt_static_windows.bat ${{ matrix.qt_version }} + run: | + set "OPENSSL_ROOT_DIR=%cd%\openssl" + ./script/build_qt_static_windows.bat ${{ matrix.qt_version }} - name: Install Qt uses: jurplel/install-qt-action@v4.3.0 if: matrix.platform != 'windows-latest' @@ -173,6 +181,7 @@ jobs: if: matrix.platform == 'windows-latest' && matrix.qt_version != '6.2.12' run: | export CMAKE_PREFIX_PATH=$PWD/qt6/build/lib/cmake + export OPENSSL_ROOT_DIR=$PWD/openssl mkdir build cd build curl -fLso srslist.h "https://raw.githubusercontent.com/throneproj/routeprofiles/rule-set/srslist.h" @@ -186,8 +195,6 @@ jobs: run: | curl -L -o qt.7z https://github.com/throneproj/env_windows_legacy/releases/download/latest/qt-${{ matrix.target }}.7z 7z x qt.7z - curl -L -o openssl.7z https://github.com/throneproj/env_windows_legacy/releases/download/latest/openssl-${{ matrix.target }}.7z - 7z x openssl.7z export CMAKE_PREFIX_PATH=$PWD/Qt/lib/cmake export OPENSSL_ROOT_DIR=$PWD/openssl mkdir build diff --git a/script/build_qt_static_windows.bat b/script/build_qt_static_windows.bat index da31317..ac8c416 100644 --- a/script/build_qt_static_windows.bat +++ b/script/build_qt_static_windows.bat @@ -3,7 +3,7 @@ cd qt6 git switch %1 mkdir build -CALL .\configure.bat -release -static -prefix ./build -static-runtime -submodules qtbase,qtimageformats,qtsvg,qttranslations -skip tests -skip examples -gui -widgets -init-submodules +CALL .\configure.bat -release -static -prefix ./build -static-runtime -submodules qtbase,qtimageformats,qtsvg,qttranslations -skip tests -skip examples -gui -widgets -init-submodules -no-schannel -openssl-linked -no-dtls -no-ocsp echo on branch %1 echo config complete, building... cmake --build . --parallel