Skip to content

Commit

Permalink
Merge pull request #40 from Lihis/build-windows-installer
Browse files Browse the repository at this point in the history
Build installer for Windows
  • Loading branch information
Lihis authored Feb 23, 2020
2 parents 5fa1e3b + e3cac83 commit 4d708ea
Show file tree
Hide file tree
Showing 10 changed files with 269 additions and 6 deletions.
11 changes: 11 additions & 0 deletions .appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ install:
- conan user
- conan remote add public-conan https://api.bintray.com/conan/bincrafters/public-conan
- conan remote add theirix https://api.bintray.com/conan/bincrafters/theirix
- choco install -y innosetup
- set PATH=%PATH%;'C:\Program Files (x86)\Inno Setup 6';
- cd "%APPVEYOR_BUILD_FOLDER%"
- git submodule update --init --recursive

Expand All @@ -18,3 +20,12 @@ build_script:
- call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
- cmake .. -G "Visual Studio 15 2017 Win64"
- cmake --build . --config Release

after_build:
- cd "%APPVEYOR_BUILD_FOLDER%"
- iscc build\InnoSetup.iss

artifacts:
- path: 'build\Output\ETS2JobLogger-v*.exe'
- path: 'build\bin\ets2-job-logger.exe'
- path: 'build\bin\ets2-job-logger.dll'
10 changes: 7 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,19 @@ project(ets2-job-logger)

set(CMAKE_CXX_STANDARD 11)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")

if(MSVC)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
endif()

if(MSVC OR MINGW)
configure_file(packaging/Windows/InnoSetup.iss.in InnoSetup.iss @ONLY)
endif()

add_subdirectory(scs-sdk)
add_subdirectory(plugin)
if(NOT MINGW)
add_subdirectory(gui)
endif()
add_subdirectory(gui)
172 changes: 172 additions & 0 deletions cmake/modules/GetGitRevisionDescription.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
# - Returns a version string from Git
#
# These functions force a re-configure on each git commit so that you can
# trust the values of the variables in your build system.
#
# get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
#
# Returns the refspec and sha hash of the current head revision
#
# git_describe(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe on the source tree, and adjusting
# the output so that it tests false if an error occurs.
#
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe --exact-match on the source tree,
# and adjusting the output so that it tests false if there was no exact
# matching tag.
#
# git_local_changes(<var>)
#
# Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes.
# Uses the return code of "git diff-index --quiet HEAD --".
# Does not regard untracked files.
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <[email protected]> <[email protected]>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)

if(__get_git_revision_description)
return()
endif()
set(__get_git_revision_description YES)

# We must run the following at "include" time, not at function call time,
# to find the path to this module rather than the path to a calling list file
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)

function(get_git_head_revision _refspecvar _hashvar)
set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories
set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
# We have reached the root directory, we are not in git
set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
return()
endif()
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
endwhile()
# check if this is a submodule
if(NOT IS_DIRECTORY ${GIT_DIR})
file(READ ${GIT_DIR} submodule)
string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
endif()
if(NOT IS_DIRECTORY "${GIT_DIR}")
file(READ ${GIT_DIR} worktree)
string(REGEX REPLACE "gitdir: (.*)worktrees(.*)\n$" "\\1" GIT_DIR ${worktree})
endif()
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
if(NOT EXISTS "${GIT_DATA}")
file(MAKE_DIRECTORY "${GIT_DATA}")
endif()

if(NOT EXISTS "${GIT_DIR}/HEAD")
return()
endif()
set(HEAD_FILE "${GIT_DATA}/HEAD")
configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)

configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
"${GIT_DATA}/grabRef.cmake"
@ONLY)
include("${GIT_DATA}/grabRef.cmake")

set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
endfunction()

function(git_describe _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND)
set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
return()
endif()

# TODO sanitize
#if((${ARGN}" MATCHES "&&") OR
# (ARGN MATCHES "||") OR
# (ARGN MATCHES "\\;"))
# message("Please report the following error to the project!")
# message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
#endif()

#message(STATUS "Arguments to execute_process: ${ARGN}")

execute_process(COMMAND
"${GIT_EXECUTABLE}"
describe
${hash}
${ARGN}
WORKING_DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE
res
OUTPUT_VARIABLE
out
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()

set(${_var} "${out}" PARENT_SCOPE)
endfunction()

function(git_get_exact_tag _var)
git_describe(out --exact-match ${ARGN})
set(${_var} "${out}" PARENT_SCOPE)
endfunction()

function(git_local_changes _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND)
set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
return()
endif()

execute_process(COMMAND
"${GIT_EXECUTABLE}"
diff-index --quiet HEAD --
WORKING_DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE
res
OUTPUT_VARIABLE
out
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(res EQUAL 0)
set(${_var} "CLEAN" PARENT_SCOPE)
else()
set(${_var} "DIRTY" PARENT_SCOPE)
endif()
endfunction()
41 changes: 41 additions & 0 deletions cmake/modules/GetGitRevisionDescription.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#
# Internal file for GetGitRevisionDescription.cmake
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <[email protected]> <[email protected]>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)

set(HEAD_HASH)

file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)

string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
if(HEAD_CONTENTS MATCHES "ref")
# named branch
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
else()
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
set(HEAD_HASH "${CMAKE_MATCH_1}")
endif()
endif()
else()
# detached HEAD
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
endif()

if(NOT HEAD_HASH)
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
string(STRIP "${HEAD_HASH}" HEAD_HASH)
endif()
2 changes: 1 addition & 1 deletion gui/AboutDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,5 @@ AboutDialog::AboutDialog(wxWindow *parent) : base::AboutDialog(parent) {
auto titleFont = m_staticTextName->GetFont();
titleFont.SetPointSize(titleFont.GetPointSize() + 4);
m_staticTextName->SetFont(titleFont);
m_staticTextVersion->SetLabel("v" APP_VERSION_FULL);
m_staticTextVersion->SetLabel("v" APP_VERSION_FULL " (" GIT_SHA1 ")");
}
13 changes: 12 additions & 1 deletion gui/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,24 @@ if(NOT WIN32)
endif()
endif()

include(GetGitRevisionDescription)
git_describe(GIT_SHA1)
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
string(SUBSTRING ${GIT_SHA1} 0 7 GIT_SHA1)
git_local_changes(GIT_STATUS)
if(${GIT_STATUS} STREQUAL "DIRTY")
set(GIT_SHA1 "${GIT_SHA1}-${GIT_STATUS}")
endif()
configure_file(Version.h.in Version.h)
configure_file(Logger/PluginInstallerDefs.h.in PluginInstallerDefs.h)
if(MSVC OR MINGW)
configure_file(version.iss.in version.iss)
endif()

add_executable(ets2-job-logger WIN32 ${SOURCES})

if(MINGW)
set(WIN32_LIBS -lws2_32)
set(WIN32_LIBS -lws2_32 -lcrypt32)
elseif (WIN32)
find_library(WS2_32_LIB ws2_32.lib REQUIRED)
find_library(GDI32_LIB gdi32.lib REQUIRED)
Expand Down
2 changes: 1 addition & 1 deletion gui/Logger/Settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ wxString Settings::getConfigFile() const {
if (path.empty()) {
return "";
} else {
path += wxFileName::GetPathSeparator() + wxString("ets2-job-logger");
path += wxFileName::GetPathSeparator() + wxString("ets2-job-logger");
}

return path + wxFileName::GetPathSeparator() + wxString("config.ini");
Expand Down
1 change: 1 addition & 0 deletions gui/Version.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,6 @@
#define ETS2_JOB_LOGGER_VERSION_H

#define APP_VERSION_FULL "@PROJECT_VERSION@"
#define GIT_SHA1 "@GIT_SHA1@"

#endif //ETS2_JOB_LOGGER_VERSION_H
1 change: 1 addition & 0 deletions gui/version.iss.in
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#define APP_VERSION_FULL = "@PROJECT_VERSION@";
22 changes: 22 additions & 0 deletions packaging/Windows/InnoSetup.iss.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#include "@CMAKE_CURRENT_BINARY_DIR@\gui\version.iss"

[Setup]
AppName=ETS2 Job Logger
AppVersion={#APP_VERSION_FULL}
LicenseFile=@CMAKE_CURRENT_LIST_DIR@\LICENSE.md
OutputBaseFilename=ETS2JobLogger-v{#APP_VERSION_FULL}
UsePreviousAppDir=yes
PrivilegesRequired=none
DefaultDirName={userappdata}\ets2-job-logger
DefaultGroupName=ETS2 Job Logger

[Tasks]
Name: AutoRunRegistry; Description: "Start on startup"; GroupDescription: "{cm:AdditionalIcons}"

[Registry]
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "ETS2JobLogger"; ValueData: "{app}\ets2-job-logger.exe --minimized"; Tasks: AutoRunRegistry;

[Files]
Source: "@CMAKE_CURRENT_LIST_DIR@\LICENSE.md"; DestDir: "{app}"; DestName: "License.txt"
Source: "@CMAKE_CURRENT_BINARY_DIR@\bin\ets2-job-logger.exe"; DestDir: "{app}"
Source: "@CMAKE_CURRENT_BINARY_DIR@\bin\ets2-job-logger.dll"; DestDir: "{app}\win_x64"

0 comments on commit 4d708ea

Please sign in to comment.