Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,15 @@ jobs:
- name: Check header is up to date
run: ./tools/is_header_up_to_date.sh

version-updated:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check version is up to date
run: ./tools/check_version.sh

posix-coverage:
runs-on: ubuntu-latest
steps:
Expand Down
12 changes: 11 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10)
# CMake fix for crosscompile (MinGW-w64)
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")

project(tinycsocket VERSION 0.4)
project(tinycsocket)

include(CheckSymbolExists)
include(CheckIncludeFile)
Expand Down Expand Up @@ -69,6 +69,15 @@ set(TINYCSOCKET_SRC
"src/tinycsocket_posix.c"
)

# Version generation
add_custom_target(
generate_version
COMMAND ${CMAKE_COMMAND} -DSRC_DIR=${CMAKE_CURRENT_SOURCE_DIR}
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/GenerateVersion.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
set_target_properties(generate_version PROPERTIES FOLDER tinycsocket)

# Header generation
add_custom_command(
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/tinycsocket.h
Expand All @@ -81,6 +90,7 @@ add_custom_command(
add_custom_target(
generate_header
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/include/tinycsocket.h
DEPENDS generate_version
)
set_target_properties(generate_header PROPERTIES FOLDER tinycsocket)

Expand Down
51 changes: 51 additions & 0 deletions cmake/GenerateVersion.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Generates TCS_VERSION_TXT from git tag + commit count.
# Format: {tag}.{count}

find_package(Git QUIET)
if(NOT GIT_FOUND)
message(WARNING "Git not found, skipping version generation")
return()
endif()

# Get latest tag
execute_process(
COMMAND "${GIT_EXECUTABLE}" describe --tags --abbrev=0
WORKING_DIRECTORY "${SRC_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE tag
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)

if(NOT res EQUAL 0)
message(WARNING "No git tags found, skipping version generation")
return()
endif()

# Count commits since tag
execute_process(
COMMAND "${GIT_EXECUTABLE}" rev-list --count "${tag}..HEAD"
WORKING_DIRECTORY "${SRC_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE count
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)

if(NOT res EQUAL 0)
set(count "0")
endif()

set(version "${tag}.${count}")

# Update header
set(HEADER_FILE "${SRC_DIR}/src/tinycsocket_internal.h")
file(READ "${HEADER_FILE}" content)

string(REGEX REPLACE
"(static const char\\* const TCS_VERSION_TXT = \")[^\"]*(\")"
"\\1${version}\\2"
new_content "${content}")

if(NOT "${content}" STREQUAL "${new_content}")
file(WRITE "${HEADER_FILE}" "${new_content}")
message(STATUS "Updated TCS_VERSION_TXT to \"${version}\"")
else()
message(STATUS "TCS_VERSION_TXT already \"${version}\"")
endif()
2 changes: 1 addition & 1 deletion include/tinycsocket.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@

#define tcs_static_assert(name, expr) typedef char tcs_sa_##name[(expr) ? 1 : -1]

static const char* const TCS_VERSION_TXT = "v0.4-dev";
static const char* const TCS_VERSION_TXT = "v0.3.175";
static const char* const TCS_LICENSE_TXT =
"Copyright 2018 Markus Lindelöw\n"
"\n"
Expand Down
2 changes: 1 addition & 1 deletion src/tinycsocket_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

#define tcs_static_assert(name, expr) typedef char tcs_sa_##name[(expr) ? 1 : -1]

static const char* const TCS_VERSION_TXT = "v0.4-dev";
static const char* const TCS_VERSION_TXT = "v0.3.175";
static const char* const TCS_LICENSE_TXT =
"Copyright 2018 Markus Lindelöw\n"
"\n"
Expand Down
22 changes: 22 additions & 0 deletions tools/check_version.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/bin/sh
# Verifies that TCS_VERSION_TXT matches what generate_version would produce.
# Returns 0 if up to date.
set -e

PROJPATH="$(dirname "$(readlink -f "$0")")"/..

# Get expected version
TAG=$(git -C "$PROJPATH" describe --tags --abbrev=0)
COUNT=$(git -C "$PROJPATH" rev-list --count "$TAG..HEAD")
EXPECTED="${TAG}.${COUNT}"

# Get actual version from header
ACTUAL=$(grep 'TCS_VERSION_TXT' "$PROJPATH/src/tinycsocket_internal.h" | sed 's/.*"\(.*\)".*/\1/')

if [ "$EXPECTED" != "$ACTUAL" ]; then
echo "Version mismatch: header has \"$ACTUAL\", expected \"$EXPECTED\""
echo "Run: cmake --build . --target generate_version"
exit 1
fi

echo "Version OK: $ACTUAL"
Loading