Skip to content

Commit 7920fb6

Browse files
authored
Merge pull request #86 from monome/update-windows-installer
build windows installers
2 parents ceeec34 + d5dedf2 commit 7920fb6

File tree

7 files changed

+683
-8
lines changed

7 files changed

+683
-8
lines changed

.github/workflows/build.yml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,10 @@ jobs:
8585
msystem: CLANG64
8686
update: true
8787
install: >-
88-
mingw-w64-clang-x86_64-toolchain
88+
mingw-w64-clang-x86_64-clang
8989
mingw-w64-clang-x86_64-cmake
9090
mingw-w64-clang-x86_64-ninja
91+
mingw-w64-clang-x86_64-nsis
9192
9293
- name: configure
9394
run: |
@@ -97,11 +98,15 @@ jobs:
9798
run: |
9899
cmake --build build
99100
101+
- name: build installer
102+
run: |
103+
makensis //DFILE_SRC=$(cygpath -w "$PWD/build/bin") //DARCH=x86_64 installers/windows/installer.nsi
104+
100105
- name: upload artifacts
101106
uses: actions/upload-artifact@v4
102107
with:
103108
name: serialosc-windows-x86_64
104-
path: build/bin/
109+
path: installers/windows/serialosc-*.exe
105110
if-no-files-found: warn
106111

107112
windows-arm64:
@@ -123,9 +128,10 @@ jobs:
123128
msystem: CLANGARM64
124129
update: true
125130
install: >-
126-
mingw-w64-clang-aarch64-toolchain
131+
mingw-w64-clang-aarch64-clang
127132
mingw-w64-clang-aarch64-cmake
128133
mingw-w64-clang-aarch64-ninja
134+
mingw-w64-clang-x86_64-nsis
129135
130136
- name: configure
131137
run: |
@@ -135,9 +141,13 @@ jobs:
135141
run: |
136142
cmake --build build
137143
144+
- name: build installer
145+
run: |
146+
/clang64/bin/makensis //DFILE_SRC=$(cygpath -w "$PWD/build/bin") //DARCH=arm64 installers/windows/installer.nsi
147+
138148
- name: upload artifacts
139149
uses: actions/upload-artifact@v4
140150
with:
141151
name: serialosc-windows-arm64
142-
path: build/bin/
152+
path: installers/windows/serialosc-*.exe
143153
if-no-files-found: warn

installers/windows/installer.nsi

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
!include "LogicLib.nsh"
2+
3+
!define PRODUCT_NAME "serialosc"
4+
!define PRODUCT_VERSION "1.4.6"
5+
!define PRODUCT_PUBLISHER "monome"
6+
!define PRODUCT_WEB_SITE "https://monome.org/"
7+
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\serialoscd.exe"
8+
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
9+
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
10+
11+
!ifndef FILE_SRC
12+
!define FILE_SRC "."
13+
!endif
14+
!define SVC_NAME "serialosc"
15+
16+
SetCompressor /SOLID lzma
17+
18+
!include "MUI2.nsh"
19+
20+
; MUI Settings
21+
!define MUI_ABORTWARNING
22+
!define MUI_ICON "mlogo.ico"
23+
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\win-uninstall.ico"
24+
25+
!insertmacro MUI_PAGE_WELCOME
26+
!insertmacro MUI_PAGE_LICENSE "license.txt"
27+
!insertmacro MUI_PAGE_DIRECTORY
28+
!insertmacro MUI_PAGE_INSTFILES
29+
!insertmacro MUI_PAGE_FINISH
30+
31+
; Uninstaller pages
32+
!insertmacro MUI_UNPAGE_INSTFILES
33+
!insertmacro MUI_UNPAGE_FINISH
34+
35+
; Language files
36+
!insertmacro MUI_LANGUAGE "English"
37+
38+
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
39+
!ifdef ARCH
40+
OutFile "${PRODUCT_NAME}-${PRODUCT_VERSION}-${ARCH}.exe"
41+
!else
42+
OutFile "${PRODUCT_NAME}-${PRODUCT_VERSION}.exe"
43+
!endif
44+
InstallDir "$PROGRAMFILES64\Monome\serialosc"
45+
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
46+
RequestExecutionLevel admin
47+
ShowInstDetails show
48+
ShowUnInstDetails show
49+
BrandingText " "
50+
51+
Section "serialosc" SEC01
52+
nsExec::ExecToLog 'net stop ${SVC_NAME}'
53+
54+
SetOutPath "$INSTDIR"
55+
SetOverwrite on
56+
File "${FILE_SRC}\serialoscd.exe"
57+
File "${FILE_SRC}\serialosc-detector.exe"
58+
File "${FILE_SRC}\serialosc-device.exe"
59+
60+
; remove old serialosc executable
61+
Delete "$INSTDIR\serialosc.exe"
62+
63+
; remove old serialosc libs
64+
Delete "$INSTDIR\libmonome.dll"
65+
Delete "$INSTDIR\liblo-7.dll"
66+
67+
Delete "$INSTDIR\monome\protocol_40h.dll"
68+
Delete "$INSTDIR\monome\protocol_mext.dll"
69+
Delete "$INSTDIR\monome\protocol_series.dll"
70+
71+
RMDir "$INSTDIR\monome"
72+
SectionEnd
73+
74+
Section -Post
75+
WriteUninstaller "$INSTDIR\uninstall.exe"
76+
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\serialoscd.exe"
77+
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
78+
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninstall.exe"
79+
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "QuietUninstallString" "$INSTDIR\uninstall.exe /S"
80+
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\serialoscd.exe"
81+
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
82+
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
83+
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
84+
85+
nsExec::ExecToLog 'sc create ${SVC_NAME} binPath= "$INSTDIR\serialoscd.exe" start= auto type= own'
86+
nsExec::ExecToLog 'sc config ${SVC_NAME} binPath= "$INSTDIR\serialoscd.exe"'
87+
nsExec::ExecToLog 'sc description ${SVC_NAME} "OSC server for monome devices"'
88+
nsExec::ExecToLog 'sc start ${SVC_NAME}'
89+
SectionEnd
90+
91+
Section Uninstall
92+
nsExec::ExecToLog 'net stop ${SVC_NAME}'
93+
nsExec::ExecToLog 'sc delete ${SVC_NAME}'
94+
95+
Delete "$INSTDIR\uninstall.exe"
96+
Delete "$INSTDIR\libmonome.dll"
97+
Delete "$INSTDIR\liblo-7.dll"
98+
Delete "$INSTDIR\serialoscd.exe"
99+
Delete "$INSTDIR\serialosc-detector.exe"
100+
Delete "$INSTDIR\serialosc-device.exe"
101+
Delete "$INSTDIR\monome\protocol_series.dll"
102+
Delete "$INSTDIR\monome\protocol_mext.dll"
103+
Delete "$INSTDIR\monome\protocol_40h.dll"
104+
105+
RMDir "$INSTDIR\monome"
106+
RMDir "$INSTDIR"
107+
108+
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
109+
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
110+
SectionEnd

0 commit comments

Comments
 (0)