From 66e3bf736e9909f1dbeb2e7c1076faca97ff9edb Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 31 Jul 2022 22:54:37 +0300 Subject: [PATCH] windows-build: Get a C compiler to work again (#1105) --- .github/workflows/build.yml | 7 +++---- README.md | 9 ++------- launcher/Porcupine.exe | Bin 74093 -> 0 bytes launcher/main.c | 8 ++++++-- scripts/build-exe-installer.py | 12 +++++++----- 5 files changed, 18 insertions(+), 18 deletions(-) delete mode 100644 launcher/Porcupine.exe diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 936c0c93c..4295fd0bd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,10 +13,9 @@ jobs: with: python-version: "3.8" # last version supporting windows 7 - run: pip install -r requirements.txt -r requirements-dev.txt - # FIXME: recompile launcher when this is fixed: https://github.com/egor-tensin/setup-mingw/issues/6 -# - uses: egor-tensin/setup-mingw@v2 -# with: -# platform: x64 + - uses: egor-tensin/setup-clang@v1 + with: + platform: x64 # -u makes print show in real time - run: python -u scripts/build-exe-installer.py - uses: actions/upload-artifact@v2 diff --git a/README.md b/README.md index 8c565fb8d..9b201ab00 100644 --- a/README.md +++ b/README.md @@ -259,17 +259,12 @@ Other people shouldn't need them. 2. Make a pull request of your changelog edits. Review carefully: changing the changelog afterwards is difficult, as the text gets copied into the releases page. 3. Merge the pull request and pull the merge commit to your local `master` branch. -4. On a Windows computer (or VM), install Resource Hacker and change the version number in `launcher/Porcupine.exe`. - Hopefully I will eventually get a C compiler to work again, - so that this step can be skipped (see [#1086](https://github.com/Akuli/porcupine/pull/1086)). - ![resource-hacker.png](resource-hacker.png) - Push the new `.exe` file directly to master. -5. Run `python3 scripts/release.py` from the `master` branch. +4. Run `python3 scripts/release.py` from the `master` branch. The script pushes a tag named e.g. `v2022.07.29`, which triggers the parts of `.github/workflows/build.yml` that have `if: startsWith(github.ref, 'refs/tags/v')` in them. They build and deploy docs, copy the changelog to the releases page, and so on. -6. Update `porcupine.wiki` if you added new features that are likely not obvious to users. +5. Update `porcupine.wiki` if you added new features that are likely not obvious to users. If you want, you can also do a release from a branch named `bugfix-release` instead of `master`. This is useful if you fixed a bug that made Porcupine unusable for someone, diff --git a/launcher/Porcupine.exe b/launcher/Porcupine.exe deleted file mode 100644 index 14d182fa4577d715de1e329286f4eb565c8077b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74093 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 diff --git a/launcher/main.c b/launcher/main.c index 9eaf7ba07..e207fd7ef 100644 --- a/launcher/main.c +++ b/launcher/main.c @@ -1,8 +1,8 @@ -#include #include #include #include #include +#include static noreturn void fatal_error(const wchar_t *msg) { @@ -13,8 +13,12 @@ static noreturn void fatal_error(const wchar_t *msg) typedef int(WINAPI *PyMainProc)(int argc, wchar_t **argv); -int wmain(int argc, wchar_t **argv) +int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) { + // this is basically what cpython's PC/WinMain.c does + int argc = __argc; + wchar_t **argv = __wargv; + wchar_t *launcherpath = calloc(sizeof(launcherpath[0]), MAX_PATH); if (!launcherpath) fatal_error(L"allocating memory failed"); diff --git a/scripts/build-exe-installer.py b/scripts/build-exe-installer.py index 754200cf2..b14a25309 100644 --- a/scripts/build-exe-installer.py +++ b/scripts/build-exe-installer.py @@ -93,9 +93,8 @@ print("Converting logo to .ico format") PIL.Image.open("porcupine/images/logo-200x200.gif").save("build/porcupine-logo.ico") -# FIXME: Currently I can't get C compiler to work on github actions. -# I have committed a copy of the Porcupine.exe launcher here. -# Unfortunately the launcher contains an old version number that I can't update... +# If you can't get a C compiler to work, you can install an older version of Porcupine and copy +# its Porcupine.exe to launcher/Porcupine.exe if os.path.exists("build/launcher/Porcupine.exe"): print("Found launcher/Porcupine.exe, no C compiler needed") else: @@ -108,14 +107,17 @@ ) subprocess.check_call( [ - "gcc.exe", + "clang.exe", "-municode", - "-mwindows", "-o", "Porcupine.exe", "main.c", "icon.res", "metadata.res", + "-luser32", + # https://stackoverflow.com/a/37409970 + # https://stackoverflow.com/q/64911334 + "-Wl,/subsystem:windows", ], cwd="build/launcher", )