Skip to content

Commit 1ce95ba

Browse files
author
Youssef Abukwaik
committed
MSI installer for Windows.
1 parent eeb498c commit 1ce95ba

File tree

6 files changed

+84
-20
lines changed

6 files changed

+84
-20
lines changed

.github/workflows/windows.yml

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,23 @@ jobs:
2121

2222
- name: Setup Environment
2323
run: |
24+
curl -OLS https://github.com/wixtoolset/wix3/releases/download/wix3111rtm/wix311.exe
25+
.\wix311.exe /install /quiet /norestart
26+
$wixToolsetBinPath = ";C:\Program Files (x86)\WiX Toolset v3.11\bin;"
27+
$env:PATH = $env:PATH + $wixToolsetBinPath
2428
"C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
2529
2630
- name: Build
2731
working-directory: ${{env.GITHUB_WORKSPACE}}
28-
# Add additional options to the MSBuild command line here (like platform or verbosity level).
29-
# See https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
3032
run: |
3133
md build
3234
cd build
3335
cmake -DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIGURATION}} ..
34-
cmake --build .
36+
cmake --build .
37+
cpack --verbose
38+
39+
- uses: actions/upload-artifact@v2
40+
with:
41+
name: Windows Installer
42+
path: |
43+
build/packages/*.*

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ build
2323
imgui.ini
2424
pu.sh
2525
ge.sh
26-
.vscode/
26+
.vscode/
27+
cmake/wixpatch.xml

CMakeLists.txt

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ SET(PROJECT_VERSION_MINOR 1)
77
SET(PROJECT_VERSION_PATCH 0)
88

99
project(ImStudio C CXX)
10+
1011
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
1112
if (WIN32 OR APPLE)
1213
include(glfw)
@@ -18,7 +19,6 @@ endif()
1819
find_package(OpenGL REQUIRED)
1920
find_package(Threads REQUIRED)
2021

21-
2222
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
2323

2424
include(CheckCXXCompilerFlag)
@@ -28,6 +28,7 @@ if (WIN32)
2828
add_compile_definitions(NOMINMAX)
2929
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
3030
add_compile_definitions(_SCL_SECURE_NO_WARNINGS)
31+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ENTRY:mainCRTStartup")
3132
else()
3233
find_program(CCACHE_FOUND ccache)
3334
if (CCACHE_FOUND)
@@ -38,16 +39,40 @@ endif()
3839

3940
add_subdirectory(src)
4041

41-
if(UNIX AND NOT APPLE)
42-
SET(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR}/packages)
43-
SET(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
44-
SET(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
45-
SET(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
46-
SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENSE)
47-
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Raais <?? @ ?? .com>")
48-
SET(CPACK_DEBIAN_FILE_NAME "ImStudio-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-Ubuntu.deb")
42+
SET(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR}/packages)
43+
SET(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
44+
SET(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
45+
SET(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
46+
SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENSE)
47+
48+
if (WIN32)
49+
configure_file(${CMAKE_SOURCE_DIR}/cmake/CPackWixPatch.cmake.in ${CMAKE_SOURCE_DIR}/cmake/wixpatch.xml @ONLY)
50+
configure_file("${CMAKE_SOURCE_DIR}/LICENSE" "${CMAKE_BINARY_DIR}/LICENSE.txt" COPYONLY)
51+
52+
set(CPACK_GENERATOR WIX)
53+
set(CPACK_PACKAGE_INSTALL_DIRECTORY "ImStudio")
54+
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/LICENSE.txt")
55+
set(CPACK_PACKAGE_EXECUTABLES "ImStudio" "ImStudio")
56+
set(CPACK_WIX_PATCH_FILE "${CMAKE_SOURCE_DIR}/cmake/wixpatch.xml")
57+
set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "https://github.com/Raais/ImStudio")
58+
set(CPACK_WIX_PROGRAM_MENU_FOLDER "ImStudio")
59+
set(CPACK_WIX_UPGRADE_GUID "9BE85238-AE46-4597-AE56-9D719DDBF4B4")
60+
elseif(APPLE)
61+
# TODO
62+
#set(MACOSX_BUNDLE_BUNDLE_NAME "ImStudio")
63+
#set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.ImStudio")
64+
#set(MACOSX_BUNDLE_INFO_STRING "ImStudio")
65+
#set(MACOSX_BUNDLE_ICON_FILE "icns")
66+
#set(MACOSX_BUNDLE_LONG_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
67+
#set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
68+
#set(MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
69+
70+
elseif(UNIX AND NOT APPLE)
71+
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Raais <?? @ ?? .com>")
72+
set(CPACK_DEBIAN_FILE_NAME "ImStudio-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-Ubuntu.deb")
4973
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libglfw3")
5074
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE all)
51-
SET(CPACK_GENERATOR "TGZ;DEB")
52-
include(CPack)
75+
set(CPACK_GENERATOR "TGZ;DEB")
5376
endif()
77+
78+
include(CPack)

cmake/CPackWixPatch.cmake.in

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<CPackWiXPatch>
2+
<CPackWiXFragment Id="#PRODUCT">
3+
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Run ImStudio" />
4+
<CustomAction Id="LaunchImStudio"
5+
Impersonate="no"
6+
FileKey="CM_FP_bin.ImStudio.exe"
7+
ExeCommand=""
8+
Return="asyncNoWait" />
9+
<UI>
10+
<Publish Dialog="ExitDialog"
11+
Control="Finish"
12+
Event="DoAction"
13+
Value="LaunchImStudio">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
14+
</UI>
15+
</CPackWiXFragment>
16+
</CPackWiXPatch>

cmake/glfw.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ else()
1818
"-DGLFW_BUILD_EXAMPLES=OFF"
1919
"-DGLFW_BUILD_TESTS=OFF"
2020
"-DGLFW_BUILD_DOCS=OFF"
21+
"-DUSE_MSVC_RUNTIME_LIBRARY_DLL=OFF"
2122

2223
CMAKE_CACHE_ARGS
2324
"-DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}"

src/CMakeLists.txt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ include(third-party)
55
file(GLOB_RECURSE SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sources/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/utils/*.cpp)
66
file(GLOB_RECURSE HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/headers/*.h ${CMAKE_CURRENT_SOURCE_DIR}/utils/*.h)
77

8-
add_executable(${TARGET}
8+
add_executable(${TARGET} WIN32 MACOSX_BUNDLE
99
${SOURCES}
1010
${HEADERS}
1111
main.cpp
@@ -25,8 +25,20 @@ target_link_libraries(${TARGET} PRIVATE ${OPENGL_LIBRARIES})
2525
target_link_libraries(${TARGET} PRIVATE ${CMAKE_THREAD_LIBS_INIT})
2626
target_link_libraries(${TARGET} PRIVATE ${CMAKE_DL_LIBS})
2727

28-
if(UNIX AND NOT APPLE)
29-
install(TARGETS ${TARGET} DESTINATION bin)
30-
install(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION share/${TARGET})
31-
install(FILES ${CMAKE_SOURCE_DIR}/README.md DESTINATION share/${TARGET})
28+
29+
if (APPLE)
30+
# TODO:
31+
#set_target_properties(${TARGET} PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "ImStudio")
32+
#set_source_files_properties(icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
33+
34+
#set_target_properties(${GUI_ONLY_BINARIES} PROPERTIES
35+
# MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
36+
# MACOSX_BUNDLE_LONG_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
37+
# MACOSX_BUNDLE_ICON_FILE "icns"
38+
# MACOSX_FRAMEWORK_IDENTIFIER "org.ImStudio"
39+
# MACOSX_BUNDLE_INFO_PLIST "${GLFW_SOURCE_DIR}/cmake/Info.plist.in")
3240
endif()
41+
42+
install(TARGETS ${TARGET} DESTINATION bin)
43+
install(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION share/${TARGET})
44+
install(FILES ${CMAKE_SOURCE_DIR}/README.md DESTINATION share/${TARGET})

0 commit comments

Comments
 (0)