Get project version from git tag
This commit is contained in:
parent
f69011d589
commit
1a92f2b22a
|
@ -6,17 +6,36 @@ find_package(PkgConfig REQUIRED)
|
||||||
find_package(Doxygen)
|
find_package(Doxygen)
|
||||||
pkg_check_modules(LIBUSB REQUIRED libusb-1.0)
|
pkg_check_modules(LIBUSB REQUIRED libusb-1.0)
|
||||||
|
|
||||||
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
|
||||||
|
include(GitVersion)
|
||||||
|
get_version_from_git()
|
||||||
|
message("Building version ${PROJECT_VERSION}")
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_C_STANDARD 11)
|
set(CMAKE_C_STANDARD 11)
|
||||||
|
|
||||||
|
add_compile_definitions(VERSION_MAJOR=${CMAKE_PROJECT_VERSION_MAJOR})
|
||||||
|
add_compile_definitions(VERSION_MINOR=${CMAKE_PROJECT_VERSION_MINOR})
|
||||||
|
add_compile_definitions(VERSION_PATCH=${CMAKE_PROJECT_VERSION_PATCH})
|
||||||
|
|
||||||
set(SRC_FILES eismultiplexer.c usbshm.c)
|
set(SRC_FILES eismultiplexer.c usbshm.c)
|
||||||
|
|
||||||
|
if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
|
||||||
|
message(FATAL_ERROR "Windows builds have to be cross compiled on UNIX")
|
||||||
|
endif()
|
||||||
|
|
||||||
message("Platform " ${CMAKE_SYSTEM_NAME})
|
message("Platform " ${CMAKE_SYSTEM_NAME})
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
message("Building for Windows")
|
message("Building for Windows")
|
||||||
file(GLOB_RECURSE ARGP_SRC ${PROJECT_SOURCE_DIR}/argp/*.*)
|
file(GLOB_RECURSE ARGP_SRC ${PROJECT_SOURCE_DIR}/argp/*.*)
|
||||||
set(SRC_FILES ${SRC_FILES} ${ARGP_SRC})
|
set(SRC_FILES ${SRC_FILES} ${ARGP_SRC})
|
||||||
include_directories(./argp)
|
include_directories(./argp)
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/release-win.sh ${CMAKE_CURRENT_BINARY_DIR}/release.sh @ONLY)
|
||||||
|
add_custom_target(package
|
||||||
|
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/release.sh
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
COMMENT "Createing release archive"
|
||||||
|
VERBATIM)
|
||||||
else()
|
else()
|
||||||
message("Building for UNIX")
|
message("Building for UNIX")
|
||||||
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||||
|
@ -25,8 +44,8 @@ else()
|
||||||
endif(WIN32)
|
endif(WIN32)
|
||||||
|
|
||||||
add_library(${PROJECT_NAME} SHARED ${SRC_FILES})
|
add_library(${PROJECT_NAME} SHARED ${SRC_FILES})
|
||||||
target_link_libraries(${PROJECT_NAME} ${LIBUSB_LIBRARIES})
|
|
||||||
target_include_directories(${PROJECT_NAME} PUBLIC ${LIBUSB_INCLUDE_DIRS})
|
target_include_directories(${PROJECT_NAME} PUBLIC ${LIBUSB_INCLUDE_DIRS})
|
||||||
|
target_link_libraries(${PROJECT_NAME} ${LIBUSB_LIBRARIES})
|
||||||
add_definitions("-std=c17 -Wall -O2 -fno-strict-aliasing")
|
add_definitions("-std=c17 -Wall -O2 -fno-strict-aliasing")
|
||||||
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
|
install(TARGETS ${PROJECT_NAME} DESTINATION lib)
|
||||||
install(FILES ./eismultiplexer.h DESTINATION include)
|
install(FILES ./eismultiplexer.h DESTINATION include)
|
||||||
|
|
Binary file not shown.
38
cmake/GitVersion.cmake
Normal file
38
cmake/GitVersion.cmake
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
function(get_version_from_git)
|
||||||
|
find_package(Git REQUIRED)
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${GIT_EXECUTABLE} describe --tags --always
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
|
OUTPUT_VARIABLE GIT_TAG
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
RESULT_VARIABLE GIT_RESULT
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT GIT_RESULT EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Failed to get git tag")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${GIT_EXECUTABLE} rev-parse --short=7 HEAD
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
|
OUTPUT_VARIABLE GIT_COMMIT_SHORT_HASH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
string(REGEX REPLACE "^v" "" CLEAN_TAG "${GIT_TAG}")
|
||||||
|
if(CLEAN_TAG MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-.*)?$")
|
||||||
|
|
||||||
|
set(PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1})
|
||||||
|
set(PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1} PARENT_SCOPE)
|
||||||
|
set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_2})
|
||||||
|
set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_2} PARENT_SCOPE)
|
||||||
|
set(PROJECT_VERSION_PATCH ${CMAKE_MATCH_3})
|
||||||
|
set(PROJECT_VERSION_PATCH ${CMAKE_MATCH_3} PARENT_SCOPE)
|
||||||
|
|
||||||
|
set(PROJECT_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
|
||||||
|
set(PROJECT_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}" PARENT_SCOPE)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Tag '${CLEAN_TAG}' does not match semver format")
|
||||||
|
endif()
|
||||||
|
endfunction()
|
|
@ -1,4 +1,5 @@
|
||||||
set(CMAKE_SYSTEM_NAME Windows)
|
set(CMAKE_SYSTEM_NAME Windows)
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR AMD64)
|
||||||
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
|
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
|
||||||
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
|
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
|
||||||
set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)
|
set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)
|
||||||
|
|
Loading…
Reference in a new issue