-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
make cmake fetch version number and embed it into the binary (#17)
* make cmake fetch version number and embed it into the binary * update the icon, include resource file into cli app
- Loading branch information
Showing
12 changed files
with
404 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
|
||
|
||
include ("CMakeListsVersion.cmake") | ||
|
||
set(GIT_EXECUTABLE git) | ||
set(WARF_DESCRIPTION "Warf, An Interpreter for the Warf Language.") | ||
|
||
# the commit's SHA1, and whether the building workspace was dirty or not | ||
execute_process(COMMAND | ||
"${GIT_EXECUTABLE}" rev-parse --short HEAD | ||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" | ||
OUTPUT_VARIABLE GIT_SHA1 | ||
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) | ||
|
||
# the date of the commit | ||
execute_process(COMMAND | ||
"${GIT_EXECUTABLE}" log -1 --format=%ad --date=local | ||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" | ||
OUTPUT_VARIABLE GIT_DATE | ||
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) | ||
|
||
# the subject of the commit | ||
execute_process(COMMAND | ||
"${GIT_EXECUTABLE}" log -1 --format=%s | ||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" | ||
OUTPUT_VARIABLE GIT_COMMIT_SUBJECT | ||
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) | ||
|
||
# the branch of the commit | ||
execute_process(COMMAND | ||
"${GIT_EXECUTABLE}" branch --show-current | ||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" | ||
OUTPUT_VARIABLE GIT_COMMIT_BRANCH | ||
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) | ||
|
||
|
||
# generate version.cpp | ||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/version.cpp.in" | ||
"${CMAKE_CURRENT_BINARY_DIR}/version.cpp" @ONLY) | ||
|
||
set (SourceFiles | ||
${CMAKE_CURRENT_BINARY_DIR}/version.cpp | ||
) | ||
|
||
if(WIN32) | ||
include(generate_product_version.cmake) | ||
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/icon.ico | ||
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) | ||
generate_product_version( | ||
VersionFilesOutputVariable | ||
NAME "${WARF_NAME}" | ||
ICON ${CMAKE_CURRENT_BINARY_DIR}/icon.ico | ||
VERSION_MAJOR ${WARF_MAJOR} | ||
VERSION_MINOR ${WARF_MINOR} | ||
VERSION_PATCH ${WARF_PATCH} | ||
#VERSION_REVISION 0 #could hook this up with the cli | ||
COMPANY_NAME ${WARF_NAME} | ||
FILE_DESCRIPTION ${WARF_DESCRIPTION} | ||
) | ||
endif() | ||
|
||
|
||
set(HeaderFiles | ||
version.h | ||
) | ||
|
||
add_library (WarfCore.Version OBJECT | ||
${SourceFiles} ${HeaderFiles} | ||
) | ||
set_target_properties(WarfCore.Version PROPERTIES LINKER_LANGUAGE CXX) | ||
|
||
target_include_directories ( | ||
WarfCore.Version PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
# this file is intended to be included by other project CMakeLists.txt files | ||
# in order to make the following Warf version variables available | ||
# WARF_MAJOR : Integer major number (e.g. 0, 1, 2) | ||
# WARF_MINOR : Integer minor number (e.g. 0, 1, 2) | ||
# WARF_PATCH : Integer patch number (e.g. 0, 1, 2) | ||
# WARF_VERSION : Full WARF verion string as MAJOR.MINOR.PATCH+BUILD (e.g. 1.0.5+255) | ||
|
||
file (READ ${CMAKE_CURRENT_LIST_DIR}/version.txt VERSION NEWLINE_CONSUME) | ||
string (REPLACE "." ";" VERSION "${VERSION}") | ||
string (REPLACE "\n" ";" VERSION "${VERSION}") | ||
string (REPLACE "\r" ";" VERSION "${VERSION}") | ||
list (GET VERSION 0 WARF_MAJOR) | ||
list (GET VERSION 1 WARF_MINOR) | ||
list (GET VERSION 2 WARF_PATCH) | ||
|
||
file (READ ${CMAKE_CURRENT_LIST_DIR}/appName.txt WARF_NAME) | ||
|
||
|
||
set (WARF_VERSION "${WARF_MAJOR}.${WARF_MINOR}.${WARF_PATCH}") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
#pragma once | ||
|
||
#ifndef PRODUCT_VERSION_MAJOR | ||
#define PRODUCT_VERSION_MAJOR @PRODUCT_VERSION_MAJOR@ | ||
#endif | ||
|
||
#ifndef PRODUCT_VERSION_MINOR | ||
#define PRODUCT_VERSION_MINOR @PRODUCT_VERSION_MINOR@ | ||
#endif | ||
|
||
#ifndef PRODUCT_VERSION_PATCH | ||
#define PRODUCT_VERSION_PATCH @PRODUCT_VERSION_PATCH@ | ||
#endif | ||
|
||
#ifndef PRODUCT_VERSION_BUILD | ||
#define PRODUCT_VERSION_BUILD @PRODUCT_VERSION_REVISION@ | ||
#endif | ||
|
||
#ifndef FILE_VERSION_MAJOR | ||
#define FILE_VERSION_MAJOR @PRODUCT_VERSION_MAJOR@ | ||
#endif | ||
|
||
#ifndef FILE_VERSION_MINOR | ||
#define FILE_VERSION_MINOR @PRODUCT_VERSION_MINOR@ | ||
#endif | ||
|
||
#ifndef FILE_VERSION_PATCH | ||
#define FILE_VERSION_PATCH @PRODUCT_VERSION_PATCH@ | ||
#endif | ||
|
||
#ifndef FILE_VERSION_BUILD | ||
#define FILE_VERSION_BUILD @PRODUCT_VERSION_REVISION@ | ||
#endif | ||
|
||
#ifndef __TO_STRING | ||
#define __TO_STRING_IMPL(x) #x | ||
#define __TO_STRING(x) __TO_STRING_IMPL(x) | ||
#endif | ||
|
||
#define PRODUCT_VERSION_MAJOR_MINOR_STR __TO_STRING(PRODUCT_VERSION_MAJOR) "." __TO_STRING(PRODUCT_VERSION_MINOR) | ||
#define PRODUCT_VERSION_MAJOR_MINOR_PATCH_STR PRODUCT_VERSION_MAJOR_MINOR_STR "." __TO_STRING(PRODUCT_VERSION_PATCH) | ||
#define PRODUCT_VERSION_FULL_STR PRODUCT_VERSION_MAJOR_MINOR_PATCH_STR "." __TO_STRING(PRODUCT_VERSION_BUILD) | ||
#define PRODUCT_VERSION_RESOURCE PRODUCT_VERSION_MAJOR,PRODUCT_VERSION_MINOR,PRODUCT_VERSION_PATCH,PRODUCT_VERSION_BUILD | ||
#define PRODUCT_VERSION_RESOURCE_STR PRODUCT_VERSION_FULL_STR "\0" | ||
|
||
#define FILE_VERSION_MAJOR_MINOR_STR __TO_STRING(FILE_VERSION_MAJOR) "." __TO_STRING(FILE_VERSION_MINOR) | ||
#define FILE_VERSION_MAJOR_MINOR_PATCH_STR FILE_VERSION_MAJOR_MINOR_STR "." __TO_STRING(FILE_VERSION_PATCH) | ||
#define FILE_VERSION_FULL_STR FILE_VERSION_MAJOR_MINOR_PATCH_STR "." __TO_STRING(FILE_VERSION_BUILD) | ||
#define FILE_VERSION_RESOURCE FILE_VERSION_MAJOR,FILE_VERSION_MINOR,FILE_VERSION_PATCH,FILE_VERSION_BUILD | ||
#define FILE_VERSION_RESOURCE_STR FILE_VERSION_FULL_STR "\0" | ||
|
||
#ifndef PRODUCT_ICON | ||
#define PRODUCT_ICON "@PRODUCT_ICON@" | ||
#endif | ||
|
||
#ifndef PRODUCT_COMMENTS | ||
#define PRODUCT_COMMENTS "@PRODUCT_COMMENTS@\0" | ||
#endif | ||
|
||
#ifndef PRODUCT_COMPANY_NAME | ||
#define PRODUCT_COMPANY_NAME "@PRODUCT_COMPANY_NAME@\0" | ||
#endif | ||
|
||
#ifndef PRODUCT_COMPANY_COPYRIGHT | ||
#define PRODUCT_COMPANY_COPYRIGHT "@PRODUCT_COMPANY_COPYRIGHT@\0" | ||
#endif | ||
|
||
#ifndef PRODUCT_FILE_DESCRIPTION | ||
#define PRODUCT_FILE_DESCRIPTION "@PRODUCT_FILE_DESCRIPTION@\0" | ||
#endif | ||
|
||
#ifndef PRODUCT_INTERNAL_NAME | ||
#define PRODUCT_INTERNAL_NAME "@PRODUCT_NAME@\0" | ||
#endif | ||
|
||
#ifndef PRODUCT_ORIGINAL_FILENAME | ||
#define PRODUCT_ORIGINAL_FILENAME "@PRODUCT_ORIGINAL_FILENAME@\0" | ||
#endif | ||
|
||
#ifndef PRODUCT_BUNDLE | ||
#define PRODUCT_BUNDLE "@PRODUCT_BUNDLE@\0" | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
#include "VersionInfo.h" | ||
|
||
#if defined(__MINGW64__) || defined(__MINGW32__) | ||
// MinGW-w64, MinGW | ||
#if defined(__has_include) && __has_include(<winres.h>) | ||
#include <winres.h> | ||
#else | ||
#include <afxres.h> | ||
#include <winresrc.h> | ||
#endif | ||
#else | ||
// MSVC, Windows SDK | ||
#include <winres.h> | ||
#endif | ||
|
||
IDI_ICON1 ICON PRODUCT_ICON | ||
|
||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US | ||
|
||
VS_VERSION_INFO VERSIONINFO | ||
FILEVERSION FILE_VERSION_RESOURCE | ||
PRODUCTVERSION PRODUCT_VERSION_RESOURCE | ||
FILEFLAGSMASK 0x3fL | ||
#ifdef _DEBUG | ||
FILEFLAGS 0x1L | ||
#else | ||
FILEFLAGS 0x0L | ||
#endif | ||
FILEOS 0x4L | ||
FILETYPE 0x1L | ||
FILESUBTYPE 0x0L | ||
BEGIN | ||
BLOCK "StringFileInfo" | ||
BEGIN | ||
BLOCK "000904b0" | ||
BEGIN | ||
VALUE "Comments", PRODUCT_COMMENTS | ||
VALUE "CompanyName", PRODUCT_COMPANY_NAME | ||
VALUE "FileDescription", PRODUCT_FILE_DESCRIPTION | ||
VALUE "FileVersion", FILE_VERSION_RESOURCE_STR | ||
VALUE "InternalName", PRODUCT_INTERNAL_NAME | ||
VALUE "LegalCopyright", PRODUCT_COMPANY_COPYRIGHT | ||
VALUE "OriginalFilename", PRODUCT_ORIGINAL_FILENAME | ||
VALUE "ProductName", PRODUCT_BUNDLE | ||
VALUE "ProductVersion", PRODUCT_VERSION_RESOURCE_STR | ||
END | ||
END | ||
BLOCK "VarFileInfo" | ||
BEGIN | ||
VALUE "Translation", 0x9, 1200 | ||
END | ||
END |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
include (CMakeParseArguments) | ||
|
||
set (GenerateProductVersionCurrentDir ${CMAKE_CURRENT_LIST_DIR}) | ||
|
||
# generate_product_version() function | ||
# | ||
# This function uses VersionInfo.in template file and VersionResource.rc file | ||
# to generate WIN32 resource with version information and general resource strings. | ||
# | ||
# Usage: | ||
# generate_product_version( | ||
# SomeOutputResourceVariable | ||
# NAME MyGreatProject | ||
# ICON ${PATH_TO_APP_ICON} | ||
# VERSION_MAJOR 2 | ||
# VERSION_MINOR 3 | ||
# VERSION_PATCH ${BUILD_COUNTER} | ||
# VERSION_REVISION ${BUILD_REVISION} | ||
# ) | ||
# where BUILD_COUNTER and BUILD_REVISION could be values from your CI server. | ||
# | ||
# You can use generated resource for your executable targets: | ||
# add_executable(target-name ${target-files} ${SomeOutputResourceVariable}) | ||
# | ||
# You can specify resource strings in arguments: | ||
# NAME - name of executable (no defaults, ex: Microsoft Word) | ||
# BUNDLE - bundle (${NAME} is default, ex: Microsoft Office) | ||
# ICON - path to application icon (${CMAKE_SOURCE_DIR}/product.ico by default) | ||
# VERSION_MAJOR - 1 is default | ||
# VERSION_MINOR - 0 is default | ||
# VERSION_PATCH - 0 is default | ||
# VERSION_REVISION - 0 is default | ||
# COMPANY_NAME - your company name (no defaults) | ||
# COMPANY_COPYRIGHT - ${COMPANY_NAME} (C) Copyright ${CURRENT_YEAR} is default | ||
# COMMENTS - ${NAME} v${VERSION_MAJOR}.${VERSION_MINOR} is default | ||
# ORIGINAL_FILENAME - ${NAME} is default | ||
# INTERNAL_NAME - ${NAME} is default | ||
# FILE_DESCRIPTION - ${NAME} is default | ||
function(generate_product_version outfiles) | ||
set (options) | ||
set (oneValueArgs | ||
NAME | ||
BUNDLE | ||
ICON | ||
VERSION_MAJOR | ||
VERSION_MINOR | ||
VERSION_PATCH | ||
VERSION_REVISION | ||
COMPANY_NAME | ||
COMPANY_COPYRIGHT | ||
COMMENTS | ||
ORIGINAL_FILENAME | ||
INTERNAL_NAME | ||
FILE_DESCRIPTION) | ||
set (multiValueArgs) | ||
cmake_parse_arguments(PRODUCT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) | ||
|
||
if (NOT PRODUCT_BUNDLE OR "${PRODUCT_BUNDLE}" STREQUAL "") | ||
set(PRODUCT_BUNDLE "${PRODUCT_NAME}") | ||
endif() | ||
if (NOT PRODUCT_ICON OR "${PRODUCT_ICON}" STREQUAL "") | ||
set(PRODUCT_ICON "${CMAKE_SOURCE_DIR}/product.ico") | ||
endif() | ||
|
||
if (NOT PRODUCT_VERSION_MAJOR EQUAL 0 AND (NOT PRODUCT_VERSION_MAJOR OR "${PRODUCT_VERSION_MAJOR}" STREQUAL "")) | ||
set(PRODUCT_VERSION_MAJOR 1) | ||
endif() | ||
if (NOT PRODUCT_VERSION_MINOR EQUAL 0 AND (NOT PRODUCT_VERSION_MINOR OR "${PRODUCT_VERSION_MINOR}" STREQUAL "")) | ||
set(PRODUCT_VERSION_MINOR 0) | ||
endif() | ||
if (NOT PRODUCT_VERSION_PATCH EQUAL 0 AND (NOT PRODUCT_VERSION_PATCH OR "${PRODUCT_VERSION_PATCH}" STREQUAL "")) | ||
set(PRODUCT_VERSION_PATCH 0) | ||
endif() | ||
if (NOT PRODUCT_VERSION_REVISION EQUAL 0 AND (NOT PRODUCT_VERSION_REVISION OR "${PRODUCT_VERSION_REVISION}" STREQUAL "")) | ||
set(PRODUCT_VERSION_REVISION 0) | ||
endif() | ||
|
||
if (NOT PRODUCT_COMPANY_COPYRIGHT OR "${PRODUCT_COMPANY_COPYRIGHT}" STREQUAL "") | ||
string(TIMESTAMP PRODUCT_CURRENT_YEAR "%Y") | ||
set(PRODUCT_COMPANY_COPYRIGHT "${PRODUCT_COMPANY_NAME} (C) Copyright ${PRODUCT_CURRENT_YEAR}") | ||
endif() | ||
if (NOT PRODUCT_COMMENTS OR "${PRODUCT_COMMENTS}" STREQUAL "") | ||
set(PRODUCT_COMMENTS "${PRODUCT_NAME} v${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}") | ||
endif() | ||
if (NOT PRODUCT_ORIGINAL_FILENAME OR "${PRODUCT_ORIGINAL_FILENAME}" STREQUAL "") | ||
set(PRODUCT_ORIGINAL_FILENAME "${PRODUCT_NAME}") | ||
endif() | ||
if (NOT PRODUCT_INTERNAL_NAME OR "${PRODUCT_INTERNAL_NAME}" STREQUAL "") | ||
set(PRODUCT_INTERNAL_NAME "${PRODUCT_NAME}") | ||
endif() | ||
if (NOT PRODUCT_FILE_DESCRIPTION OR "${PRODUCT_FILE_DESCRIPTION}" STREQUAL "") | ||
set(PRODUCT_FILE_DESCRIPTION "${PRODUCT_NAME}") | ||
endif() | ||
|
||
set (_VersionInfoFile ${CMAKE_CURRENT_BINARY_DIR}/VersionInfo.h) | ||
set (_VersionResourceFile ${CMAKE_CURRENT_BINARY_DIR}/VersionResource.rc) | ||
configure_file( | ||
${GenerateProductVersionCurrentDir}/VersionInfo.in | ||
${_VersionInfoFile} | ||
@ONLY) | ||
configure_file( | ||
${GenerateProductVersionCurrentDir}/VersionResource.rc | ||
${_VersionResourceFile} | ||
COPYONLY) | ||
list(APPEND ${outfiles} ${_VersionInfoFile} ${_VersionResourceFile}) | ||
set (${outfiles} ${${outfiles}} PARENT_SCOPE) | ||
endfunction() |
Binary file not shown.
Oops, something went wrong.