From 261ae2a57c997b407fbb26ef26af9b53a503e0ad Mon Sep 17 00:00:00 2001 From: Louis Rubet Date: Sat, 26 Feb 2022 15:22:26 +0100 Subject: [PATCH] git tag used as rpn version --- CMakeLists.txt | 79 ++++++++++++++++++------------------- Changelog.md | 1 + liv/rpn-2.1-amd64.deb | Bin 322310 -> 0 bytes liv/rpn-2.1-amd64.rpm | Bin 327476 -> 0 bytes liv/rpn-2.1-amd64.tar.gz | Bin 321809 -> 0 bytes liv/rpn-2.2-amd64.deb | Bin 332530 -> 0 bytes liv/rpn-2.2-amd64.rpm | Bin 339459 -> 0 bytes liv/rpn-2.2-amd64.tar.gz | Bin 332050 -> 0 bytes liv/rpn-2.3-amd64.deb | Bin 99746 -> 0 bytes liv/rpn-2.3-amd64.rpm | Bin 108227 -> 0 bytes liv/rpn-2.3-amd64.tar.gz | Bin 98787 -> 0 bytes liv/rpn-2.3.1-amd64.deb | Bin 104262 -> 0 bytes liv/rpn-2.3.1-amd64.rpm | Bin 113594 -> 0 bytes liv/rpn-2.3.1-amd64.tar.gz | Bin 103310 -> 0 bytes liv/rpn-2.3.2-amd64.deb | Bin 134106 -> 0 bytes liv/rpn-2.3.2-amd64.rpm | Bin 143265 -> 0 bytes liv/rpn-2.3.2-amd64.tar.gz | Bin 133131 -> 0 bytes src/version.h | 2 +- 18 files changed, 40 insertions(+), 42 deletions(-) delete mode 100644 liv/rpn-2.1-amd64.deb delete mode 100644 liv/rpn-2.1-amd64.rpm delete mode 100644 liv/rpn-2.1-amd64.tar.gz delete mode 100644 liv/rpn-2.2-amd64.deb delete mode 100644 liv/rpn-2.2-amd64.rpm delete mode 100644 liv/rpn-2.2-amd64.tar.gz delete mode 100644 liv/rpn-2.3-amd64.deb delete mode 100644 liv/rpn-2.3-amd64.rpm delete mode 100644 liv/rpn-2.3-amd64.tar.gz delete mode 100644 liv/rpn-2.3.1-amd64.deb delete mode 100644 liv/rpn-2.3.1-amd64.rpm delete mode 100644 liv/rpn-2.3.1-amd64.tar.gz delete mode 100644 liv/rpn-2.3.2-amd64.deb delete mode 100644 liv/rpn-2.3.2-amd64.rpm delete mode 100644 liv/rpn-2.3.2-amd64.tar.gz diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a75c5f..8f96e47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,9 @@ # -*- mode: CMAKE; -*- -cmake_minimum_required(VERSION 2.6) - project(rpn) +cmake_minimum_required(VERSION 3.22) + if((NOT CMAKE_BUILD_TYPE MATCHES Debug) AND (NOT CMAKE_BUILD_TYPE MATCHES Release)) set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release" FORCE) @@ -11,12 +11,37 @@ endif() message(STATUS "Build mode: ${CMAKE_BUILD_TYPE}") +if(EXISTS ${PROJECT_SOURCE_DIR}/.git) + EXECUTE_PROCESS( + COMMAND git rev-parse --abbrev-ref --short=10 HEAD + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + OUTPUT_VARIABLE "BRANCH") + MESSAGE( STATUS "Source Git Branch: ${GIT_BRANCH}" ) + EXECUTE_PROCESS( + COMMAND git describe --dirty --tags --long --always + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + OUTPUT_VARIABLE "TAG" + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + MESSAGE( STATUS "Source Git Tag: ${GIT_TAG}" ) + EXECUTE_PROCESS( + COMMAND echo ${TAG}-${BRANCH} + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + OUTPUT_VARIABLE "GIT_VERSION" + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + MESSAGE( STATUS "Source Git version: ${GIT_VERSION}" ) + add_definitions(-DGIT_VERSION="${GIT_VERSION}") + else(EXISTS ${PROJECT_SOURCE_DIR}/.git) + add_definitions(-DGIT_VERSION="unknown") + message("Warning, built outside of a git repo, version set to ${GIT_VERSION}") +endif(EXISTS ${PROJECT_SOURCE_DIR}/.git) + # INFO -set(RPN_VERSION "2.4") set(RPN_DISPLAY_NAME "rpn") set(RPN_URL_INFO_ABOUT "https://github.com/louisrubet/rpn") set(RPN_CONTACT "Louis Rubet ") -set(RPN_FRIENDLY_STRING "rpn - Reverse Polish Notation math language") +set(RPN_FRIENDLY_STRING "Reverse Polish Notation math language") set(RPN_LICENSE "LGPLv3") set(RPN_LICENSE_FILE "${PROJECT_SOURCE_DIR}/LICENSE") set(RPN_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/README.md") @@ -33,16 +58,16 @@ endif() # custom linenoise-ng if(NOT EXISTS "${PROJECT_SOURCE_DIR}/linenoise-ng/.git") - execute_process(COMMAND git submodule init ${PROJECT_SOURCE_DIR}/linenoise-ng) - execute_process(COMMAND git submodule update ${PROJECT_SOURCE_DIR}/linenoise-ng) - execute_process(COMMAND git checkout v1.1.1-rpn WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/linenoise-ng) + execute_process(command git submodule init ${PROJECT_SOURCE_DIR}/linenoise-ng) + execute_process(command git submodule update ${PROJECT_SOURCE_DIR}/linenoise-ng) + execute_process(command git checkout v1.1.1-rpn WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/linenoise-ng) endif() # custom mpreal if(NOT EXISTS "${PROJECT_SOURCE_DIR}/mpreal/.git") - execute_process(COMMAND git submodule init ${PROJECT_SOURCE_DIR}/mpreal) - execute_process(COMMAND git submodule update ${PROJECT_SOURCE_DIR}/mpreal) - execute_process(COMMAND git checkout mpfrc++-3.6.9 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/mpreal) + execute_process(command git submodule init ${PROJECT_SOURCE_DIR}/mpreal) + execute_process(command git submodule update ${PROJECT_SOURCE_DIR}/mpreal) + execute_process(command git checkout mpfrc++-3.6.9 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/mpreal) endif() # includes @@ -74,45 +99,17 @@ add_executable( ${PROJECT_SOURCE_DIR}/linenoise-ng/src/linenoise.cpp ${PROJECT_SOURCE_DIR}/linenoise-ng/src/wcwidth.cpp ) + target_link_libraries(rpn mpfr) target_link_libraries(rpn gmp) # man add_custom_target(man ALL) add_custom_command( - TARGET man - COMMAND gzip -f -k ${CMAKE_CURRENT_SOURCE_DIR}/doc/rpn.1 - OUTPUTS ${CMAKE_CURRENT_SOURCE_DIR}/doc/rpn.1.gz + OUTPUT ${PROJECT_SOURCE_DIR}/doc/rpn.1.gz + COMMAND gzip -f -k ${PROJECT_SOURCE_DIR}/doc/rpn.1 ) # install install(TARGETS rpn DESTINATION bin) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/doc/rpn.1.gz DESTINATION ${CMAKE_INSTALL_PREFIX}/man/man1) - -# packages (common variables for all packages) -set(CPACK_PACKAGE_NAME ${RPN_DISPLAY_NAME}) -set(CPACK_PACKAGE_VENDOR ${RPN_CONTACT}) -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${RPN_FRIENDLY_STRING}) -set(CPACK_PACKAGE_DESCRIPTION ${RPN_FRIENDLY_STRING}) -set(CPACK_PACKAGE_DESCRIPTION_FILE ${RPN_DESCRIPTION_FILE}) -set(CPACK_RESOURCE_FILE_LICENSE ${RPN_LICENSE_FILE}) -set(CPACK_RESOURCE_FILE_README ${RPN_DESCRIPTION_FILE}) - -set(CPACK_PACKAGE_FILE_NAME "${RPN_DISPLAY_NAME}-${RPN_VERSION}-amd64") -set(CPACK_PACKAGE_VERSION ${RPN_VERSION}) -#set(CPACK_PACKAGE_RELEASE 0) -set(CPACK_PACKAGE_CONTACT ${RPN_CONTACT}) -set(CPACK_PACKAGE_LICENSE ${RPN_LICENSE}) -set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) - -# DEB package -set(CPACK_GENERATOR "DEB;RPM;TGZ") -set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${RPN_CONTACT}) -set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${SYSTEM_PROCESSOR}) -set(CPACK_DEBIAN_PACKAGE_SECTION "math") -set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") - -include(CPack) - -# RPM package -set(CPACK_RPM_PACKAGE_REQUIRES "mpfr") diff --git a/Changelog.md b/Changelog.md index 18bc9a7..db89c4a 100644 --- a/Changelog.md +++ b/Changelog.md @@ -22,6 +22,7 @@ Changelog - Test files are now markdown (.md) files, tests result are slightly changed - Delivery as flatpak and snap - error string are slightly different, althought error codes are still the same +- automatic version string from git, slightly change from previous versions New - `«` and `»` are now valid as program delimiters. `<<` and `>>` are still valid diff --git a/liv/rpn-2.1-amd64.deb b/liv/rpn-2.1-amd64.deb deleted file mode 100644 index 9123f61c70aa0c055a77b46419c83948509aafae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 322310 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