From 296b18ba5f3dcb07ce58bae0ffdd502565cda0f7 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sat, 18 Jan 2025 01:19:47 +0100 Subject: [PATCH 01/10] Add a minimal launcher for novelWriter on Windows --- launcher/windows/CMakeLists.txt | 5 +++++ launcher/windows/launcher.rc | 1 + launcher/windows/main.cpp | 30 ++++++++++++++++++++++++++++++ launcher/windows/novelwriter.ico | Bin 0 -> 171059 bytes 4 files changed, 36 insertions(+) create mode 100644 launcher/windows/CMakeLists.txt create mode 100644 launcher/windows/launcher.rc create mode 100644 launcher/windows/main.cpp create mode 100644 launcher/windows/novelwriter.ico diff --git a/launcher/windows/CMakeLists.txt b/launcher/windows/CMakeLists.txt new file mode 100644 index 00000000..4f1ec280 --- /dev/null +++ b/launcher/windows/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.14) + +project(novelWriter LANGUAGES CXX) + +add_executable(novelWriter main.cpp launcher.rc) diff --git a/launcher/windows/launcher.rc b/launcher/windows/launcher.rc new file mode 100644 index 00000000..e8851a86 --- /dev/null +++ b/launcher/windows/launcher.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "novelwriter.ico" diff --git a/launcher/windows/main.cpp b/launcher/windows/main.cpp new file mode 100644 index 00000000..a6f9c0e2 --- /dev/null +++ b/launcher/windows/main.cpp @@ -0,0 +1,30 @@ +#include +#include +#include +#include + +void _tmain( int argc, TCHAR *argv[] ) { + STARTUPINFO si; + PROCESS_INFORMATION pi; + + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + ZeroMemory(&pi, sizeof(pi)); + + TCHAR fileName[MAX_PATH]; + auto pathlen = GetModuleFileName(NULL, fileName, MAX_PATH); + fileName[pathlen - 15] = 0; + SetCurrentDirectory(fileName); + std::cout << "WorkDir: " << fileName << std::endl; + + TCHAR cmd[MAX_PATH] = "pythonw.exe novelWriter.pyw"; + if (argc > 1) { + _tcscat_s(cmd, TEXT(" ")); + _tcscat_s(cmd, argv[1]); + } + std::cout << "Command: " << cmd << std::endl; + + CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); + + return; +} diff --git a/launcher/windows/novelwriter.ico b/launcher/windows/novelwriter.ico new file mode 100644 index 0000000000000000000000000000000000000000..54301ffe7141d88ddfe182ccbba955cc28aa59cb GIT binary patch literal 171059 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

pRqp~nls~i|GDjwXIkU`t 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 literal 0 HcmV?d00001 From a89058ab6cf8bed3981eed49a0cd669fe1743187 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sat, 18 Jan 2025 02:06:18 +0100 Subject: [PATCH 02/10] Add license header --- launcher/windows/main.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/launcher/windows/main.cpp b/launcher/windows/main.cpp index a6f9c0e2..21cbc989 100644 --- a/launcher/windows/main.cpp +++ b/launcher/windows/main.cpp @@ -1,3 +1,24 @@ +/* +** novelWriter – Windows Launcher +** ============================== +** +** This file is a part of novelWriter +** Copyright (C) 2025 Veronica Berglyd Olsen and novelWriter contributors +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, but +** WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +*/ + #include #include #include From 6905653bdd87bda969a56afc8cadf55dded3cd83 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sat, 18 Jan 2025 12:46:20 +0100 Subject: [PATCH 03/10] Add file info to windows launcher resource file --- launcher/windows/launcher.rc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/launcher/windows/launcher.rc b/launcher/windows/launcher.rc index e8851a86..d8ad36e2 100644 --- a/launcher/windows/launcher.rc +++ b/launcher/windows/launcher.rc @@ -1 +1,22 @@ IDI_ICON1 ICON DISCARDABLE "novelwriter.ico" +1 VERSIONINFO +FILEVERSION 1,0,0,0 +PRODUCTVERSION 1,0,0,0 +FILEOS 0x4 +FILETYPE 0x1 +{ + BLOCK "StringFileInfo" { + BLOCK "040904b0" { + VALUE "CompanyName", "Veronica Berglyd Olsen\0" + VALUE "FileDescription", "novelWriter Launcher\0" + VALUE "FileVersion", "1.0.0.0\0" + VALUE "LegalCopyright", "© 2025 Veronica Berglyd Olsen\0" + VALUE "OriginalFilename", "novelWriter.exe\0" + VALUE "ProductName", "novelWriter\0" + VALUE "ProductVersion", "1.0.0.0\0" + } + } + BLOCK "VarFileInfo" { + VALUE "Translation", 0x0809, 1200 + } +} From d97b985d1cca9f2128d942e225160f84cd7c23e1 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sat, 18 Jan 2025 12:56:38 +0100 Subject: [PATCH 04/10] Move windows launcher source to the setup folder --- {launcher => setup}/windows/CMakeLists.txt | 0 {launcher => setup}/windows/launcher.rc | 0 {launcher => setup}/windows/main.cpp | 0 {launcher => setup}/windows/novelwriter.ico | Bin 4 files changed, 0 insertions(+), 0 deletions(-) rename {launcher => setup}/windows/CMakeLists.txt (100%) rename {launcher => setup}/windows/launcher.rc (100%) rename {launcher => setup}/windows/main.cpp (100%) rename {launcher => setup}/windows/novelwriter.ico (100%) diff --git a/launcher/windows/CMakeLists.txt b/setup/windows/CMakeLists.txt similarity index 100% rename from launcher/windows/CMakeLists.txt rename to setup/windows/CMakeLists.txt diff --git a/launcher/windows/launcher.rc b/setup/windows/launcher.rc similarity index 100% rename from launcher/windows/launcher.rc rename to setup/windows/launcher.rc diff --git a/launcher/windows/main.cpp b/setup/windows/main.cpp similarity index 100% rename from launcher/windows/main.cpp rename to setup/windows/main.cpp diff --git a/launcher/windows/novelwriter.ico b/setup/windows/novelwriter.ico similarity index 100% rename from launcher/windows/novelwriter.ico rename to setup/windows/novelwriter.ico From 567d61a8ea8762a8a681974a78907a3eda43802a Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sat, 18 Jan 2025 13:44:08 +0100 Subject: [PATCH 05/10] Add make script and update build job --- .github/workflows/build_win.yml | 51 ++++++++++++++++++++++++++++++++- .gitignore | 1 + setup/windows/make.ps1 | 11 +++++++ 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 setup/windows/make.ps1 diff --git a/.github/workflows/build_win.yml b/.github/workflows/build_win.yml index 391a13c5..053e5c38 100644 --- a/.github/workflows/build_win.yml +++ b/.github/workflows/build_win.yml @@ -6,8 +6,51 @@ jobs: buildAssets: uses: ./.github/workflows/build_assets.yml + buildLauncherWin64: + runs-on: windows-latest + steps: + - name: Checkout Source + uses: actions/checkout@v4 + + - name: Build Launcher + id: build + run: | + Set-Location setup\windows + .\make.ps1 + + - name: Upload Unsigned Artifacts + id: upload-unsigned-artifact + uses: actions/upload-artifact@v4 + with: + name: launcher + path: novelWriter.exe + if-no-files-found: error + retention-days: 14 + + - name: Submit Signing Request + uses: signpath/github-action-submit-signing-request@v1 + with: + api-token: "${{ secrets.SIGNPATH_API_TOKEN }}" + organization-id: "0471e52c-66fa-4e9a-bfb9-36167095ca3f" + project-slug: "novelWriter" + signing-policy-slug: "release-signing" + artifact-configuration-slug: "launcher" + github-artifact-id: "${{ steps.upload-unsigned-artifact.outputs.artifact-id }}" + wait-for-completion: true + output-artifact-directory: "." + + - name: Upload Signed Artifacts + uses: actions/upload-artifact@v4 + with: + name: launcher-signed + path: novelWriter.exe + if-no-files-found: error + retention-days: 14 + buildWin64: - needs: buildAssets + needs: + - buildAssets + - buildLauncherWin64 runs-on: windows-latest steps: - name: Python Setup @@ -25,6 +68,12 @@ jobs: name: nw-assets path: novelwriter/assets + - name: Download Artifacts + uses: actions/download-artifact@v4 + with: + name: launcher-signed + path: setup/windows + - name: Build Setup Installer id: build run: | diff --git a/.gitignore b/.gitignore index 90e51a5d..fd69c45f 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ setup.iss /novelwriter.desktop /novelWriter.pyw /setup/macos/Info.plist +/setup/windows/build .venv # Translations diff --git a/setup/windows/make.ps1 b/setup/windows/make.ps1 new file mode 100644 index 00000000..2056ce63 --- /dev/null +++ b/setup/windows/make.ps1 @@ -0,0 +1,11 @@ +if (Test-Path .\build) { + Remove-Item .\build -Recurse +} +New-Item -Path . -Name build -ItemType Directory +Set-Location .\build + +cmake -S .. -B . +cmake --build . --config Release + +Set-Location .. +Copy-Item .\build\Release\novelWriter.exe . -Force From 4e86693a970dc075dad08fe67ccbb58f76f021cf Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sat, 18 Jan 2025 13:49:09 +0100 Subject: [PATCH 06/10] Fix launcher path --- .github/workflows/build_win.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_win.yml b/.github/workflows/build_win.yml index 053e5c38..80dab984 100644 --- a/.github/workflows/build_win.yml +++ b/.github/workflows/build_win.yml @@ -23,7 +23,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: launcher - path: novelWriter.exe + path: setup/windows/novelWriter.exe if-no-files-found: error retention-days: 14 From b6778128dac3da7215ce3135366a8718a759290d Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sat, 18 Jan 2025 14:21:38 +0100 Subject: [PATCH 07/10] Update installer build definitions --- setup/win_setup_embed.iss | 11 +++++------ setup/windows/{novelwriter.ico => novelWriter.ico} | Bin utils/build_windows.py | 3 ++- 3 files changed, 7 insertions(+), 7 deletions(-) rename setup/windows/{novelwriter.ico => novelWriter.ico} (100%) diff --git a/setup/win_setup_embed.iss b/setup/win_setup_embed.iss index f4c55ac9..e1d15de7 100644 --- a/setup/win_setup_embed.iss +++ b/setup/win_setup_embed.iss @@ -5,7 +5,6 @@ #define nwAppVersion "%%version%%" #define nwAppPublisher "novelWriter" #define nwAppURL "https://novelWriter.io" -#define nwAppExeName "novelWriter.pyw" [Setup] AppId={{459A75D0-951F-4932-9809-6002EC8E733E} @@ -50,15 +49,15 @@ Type: filesandordirs; Name: "{app}\novelwriter\*" Source: "{#nwAppDir}\novelWriter\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs [Icons] -Name: "{autoprograms}\{#nwAppName}"; Filename: "{app}\pythonw.exe"; Parameters: "{#nwAppExeName}"; IconFilename: "{app}\novelwriter.ico" -Name: "{autodesktop}\{#nwAppName}"; Filename: "{app}\pythonw.exe"; Parameters: "{#nwAppExeName}"; IconFilename: "{app}\novelwriter.ico"; Tasks: desktopicon; +Name: "{autoprograms}\{#nwAppName}"; Filename: "{app}\novelWriter.exe"; IconFilename: "{app}\novelWriter.ico" +Name: "{autodesktop}\{#nwAppName}"; Filename: "{app}\novelWriter.exe"; IconFilename: "{app}\novelWriter.ico"; Tasks: desktopicon; [Run] -Filename: "{app}\pythonw.exe"; Parameters: "{#nwAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(nwAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent +Filename: "{app}\novelWriter.exe"; Description: "{cm:LaunchProgram,{#StringChange(nwAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent [Registry] Root: HKA; Subkey: "Software\Classes\.nwx\OpenWithProgids"; ValueType: string; ValueName: "novelWriterProject.nwx"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\novelWriterProject.nwx"; ValueType: string; ValueName: ""; ValueData: "novelWriter Project File"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\novelWriterProject.nwx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\novelwriter\assets\icons\x-novelwriter-project.ico" -Root: HKA; Subkey: "Software\Classes\novelWriterProject.nwx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\pythonw.exe"" ""{app}\{#nwAppExeName}"" ""%1""" -Root: HKA; Subkey: "Software\Classes\Applications\{#nwAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".nwx"; ValueData: ""; Flags: uninsdeletekey +Root: HKA; Subkey: "Software\Classes\novelWriterProject.nwx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\novelWriter.exe"" ""%1""" +Root: HKA; Subkey: "Software\Classes\Applications\novelWriter.exe\SupportedTypes"; ValueType: string; ValueName: ".nwx"; ValueData: ""; Flags: uninsdeletekey diff --git a/setup/windows/novelwriter.ico b/setup/windows/novelWriter.ico similarity index 100% rename from setup/windows/novelwriter.ico rename to setup/windows/novelWriter.ico diff --git a/utils/build_windows.py b/utils/build_windows.py index c6401dfd..95cc8564 100644 --- a/utils/build_windows.py +++ b/utils/build_windows.py @@ -44,8 +44,9 @@ def prepareCode(outDir: Path) -> None: ROOT_DIR / "CREDITS.md", ROOT_DIR / "LICENSE.md", ROOT_DIR / "requirements.txt", - SETUP_DIR / "icons" / "novelwriter.ico", SETUP_DIR / "iss_license.txt", + SETUP_DIR / "windows" / "novelWriter.ico", + SETUP_DIR / "windows" / "novelWriter.exe", ] for item in files: From d2e208ef2669689cf6759b5a627643400baa263f Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sat, 18 Jan 2025 14:29:42 +0100 Subject: [PATCH 08/10] Split launcher and installer build, and add launcher exe --- .github/workflows/build_win.yml | 53 +---------------------- .github/workflows/build_win_launcher.yml | 45 +++++++++++++++++++ setup/windows/novelWriter.exe | Bin 0 -> 199360 bytes 3 files changed, 47 insertions(+), 51 deletions(-) create mode 100644 .github/workflows/build_win_launcher.yml create mode 100644 setup/windows/novelWriter.exe diff --git a/.github/workflows/build_win.yml b/.github/workflows/build_win.yml index 80dab984..904d7482 100644 --- a/.github/workflows/build_win.yml +++ b/.github/workflows/build_win.yml @@ -6,51 +6,8 @@ jobs: buildAssets: uses: ./.github/workflows/build_assets.yml - buildLauncherWin64: - runs-on: windows-latest - steps: - - name: Checkout Source - uses: actions/checkout@v4 - - - name: Build Launcher - id: build - run: | - Set-Location setup\windows - .\make.ps1 - - - name: Upload Unsigned Artifacts - id: upload-unsigned-artifact - uses: actions/upload-artifact@v4 - with: - name: launcher - path: setup/windows/novelWriter.exe - if-no-files-found: error - retention-days: 14 - - - name: Submit Signing Request - uses: signpath/github-action-submit-signing-request@v1 - with: - api-token: "${{ secrets.SIGNPATH_API_TOKEN }}" - organization-id: "0471e52c-66fa-4e9a-bfb9-36167095ca3f" - project-slug: "novelWriter" - signing-policy-slug: "release-signing" - artifact-configuration-slug: "launcher" - github-artifact-id: "${{ steps.upload-unsigned-artifact.outputs.artifact-id }}" - wait-for-completion: true - output-artifact-directory: "." - - - name: Upload Signed Artifacts - uses: actions/upload-artifact@v4 - with: - name: launcher-signed - path: novelWriter.exe - if-no-files-found: error - retention-days: 14 - buildWin64: - needs: - - buildAssets - - buildLauncherWin64 + needs: buildAssets runs-on: windows-latest steps: - name: Python Setup @@ -62,18 +19,12 @@ jobs: - name: Checkout Source uses: actions/checkout@v4 - - name: Download Artifacts + - name: Download Assets uses: actions/download-artifact@v4 with: name: nw-assets path: novelwriter/assets - - name: Download Artifacts - uses: actions/download-artifact@v4 - with: - name: launcher-signed - path: setup/windows - - name: Build Setup Installer id: build run: | diff --git a/.github/workflows/build_win_launcher.yml b/.github/workflows/build_win_launcher.yml new file mode 100644 index 00000000..901f8a0d --- /dev/null +++ b/.github/workflows/build_win_launcher.yml @@ -0,0 +1,45 @@ +name: BuildWindowsLauncher + +on: workflow_dispatch + +jobs: + buildLauncherWin64: + runs-on: windows-latest + steps: + - name: Checkout Source + uses: actions/checkout@v4 + + - name: Build Launcher + id: build + run: | + Set-Location setup\windows + .\make.ps1 + + - name: Upload Unsigned Artifacts + id: upload-unsigned-artifact + uses: actions/upload-artifact@v4 + with: + name: launcher + path: setup/windows/novelWriter.exe + if-no-files-found: error + retention-days: 14 + + - name: Submit Signing Request + uses: signpath/github-action-submit-signing-request@v1 + with: + api-token: "${{ secrets.SIGNPATH_API_TOKEN }}" + organization-id: "0471e52c-66fa-4e9a-bfb9-36167095ca3f" + project-slug: "novelWriter" + signing-policy-slug: "release-signing" + artifact-configuration-slug: "launcher" + github-artifact-id: "${{ steps.upload-unsigned-artifact.outputs.artifact-id }}" + wait-for-completion: true + output-artifact-directory: "." + + - name: Upload Signed Artifacts + uses: actions/upload-artifact@v4 + with: + name: launcher-signed + path: novelWriter.exe + if-no-files-found: error + retention-days: 14 diff --git a/setup/windows/novelWriter.exe b/setup/windows/novelWriter.exe new file mode 100644 index 0000000000000000000000000000000000000000..5026cddb997f3e24d9b28cc3d30a6140c539f139 GIT binary patch literal 199360 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

!AG~1KT|LCun~S@JUMVXEktxEgH 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 Date: Sat, 18 Jan 2025 14:56:40 +0100 Subject: [PATCH 09/10] Fix bug in windows installer build script --- utils/build_windows.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/build_windows.py b/utils/build_windows.py index 95cc8564..1a94632a 100644 --- a/utils/build_windows.py +++ b/utils/build_windows.py @@ -204,7 +204,7 @@ def main(args: argparse.Namespace) -> None: outDir.mkdir() libDir.mkdir() - copySourceCode(outDir) + prepareCode(outDir) embedPython(bldDir, outDir) installRequirements(libDir) removeRedundantQt(libDir) From 707427cde408f3c77f4d06b5feb16348f2d11593 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sat, 18 Jan 2025 15:00:23 +0100 Subject: [PATCH 10/10] Remove Unicode character --- setup/windows/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/windows/main.cpp b/setup/windows/main.cpp index 21cbc989..052f57c6 100644 --- a/setup/windows/main.cpp +++ b/setup/windows/main.cpp @@ -1,5 +1,5 @@ /* -** novelWriter – Windows Launcher +** novelWriter - Windows Launcher ** ============================== ** ** This file is a part of novelWriter