1+ # Set build variables if env variables are defined
2+ # These are used in configured files such as manifests for different packages
3+ if (DEFINED ENV{BRANCH}) # cmake-lint: disable=W0106
4+ set (GITHUB_BRANCH $ENV{BRANCH} )
5+ endif ()
6+ if (DEFINED ENV{BUILD_VERSION}) # cmake-lint: disable=W0106
7+ set (BUILD_VERSION $ENV{BUILD_VERSION} )
8+ endif ()
9+ if (DEFINED ENV{CLONE_URL}) # cmake-lint: disable=W0106
10+ set (GITHUB_CLONE_URL $ENV{CLONE_URL} )
11+ endif ()
12+ if (DEFINED ENV{COMMIT}) # cmake-lint: disable=W0106
13+ set (GITHUB_COMMIT $ENV{COMMIT} )
14+ endif ()
15+ if (DEFINED ENV{TAG}) # cmake-lint: disable=W0106
16+ set (GITHUB_TAG $ENV{TAG} )
17+ endif ()
18+
119# Check if env vars are defined before attempting to access them, variables will be defined even if blank
2- if ((DEFINED ENV{BRANCH}) AND (DEFINED ENV{BUILD_VERSION}) AND (DEFINED ENV{COMMIT})) # cmake-lint: disable=W0106
3- if (($ENV{BRANCH} STREQUAL "master" ) AND (NOT $ENV{BUILD_VERSION} STREQUAL "" ))
4- # If BRANCH is "master" and BUILD_VERSION is not empty, then we are building a master branch
5- MESSAGE ("Got from CI master branch and version $ENV{BUILD_VERSION} " )
20+ if ((DEFINED ENV{BRANCH}) AND (DEFINED ENV{BUILD_VERSION})) # cmake-lint: disable=W0106
21+ if ((DEFINED ENV{BRANCH}) AND (NOT $ENV{BUILD_VERSION} STREQUAL "" ))
22+ # If BRANCH is defined and BUILD_VERSION is not empty, then we are building from CI
23+ # If BRANCH is master we are building a push/release build
24+ MESSAGE ("Got from CI '$ENV{BRANCH} ' branch and version '$ENV{BUILD_VERSION} '" )
625 set (PROJECT_VERSION $ENV{BUILD_VERSION} )
26+ string (REGEX REPLACE "^v" "" PROJECT_VERSION ${PROJECT_VERSION} ) # remove the v prefix if it exists
727 set (CMAKE_PROJECT_VERSION ${PROJECT_VERSION} ) # cpack will use this to set the binary versions
8- elseif ((DEFINED ENV{BRANCH}) AND (DEFINED ENV{COMMIT}))
9- # If BRANCH is set but not BUILD_VERSION we are building a PR, we gather only the commit hash
10- MESSAGE ("Got from CI $ENV{BRANCH} branch and commit $ENV{COMMIT} " )
11- set (PROJECT_VERSION ${PROJECT_VERSION} .$ENV{COMMIT} )
1228 endif ()
29+ else ()
1330 # Generate Sunshine Version based of the git tag
1431 # https://github.com/nocnokneo/cmake-git-versioning-example/blob/master/LICENSE
15- else ()
1632 find_package (Git )
1733 if (GIT_EXECUTABLE)
1834 MESSAGE ("${CMAKE_SOURCE_DIR} " )
@@ -60,18 +76,24 @@ set(PROJECT_YEAR "1990")
6076set (PROJECT_MONTH "01" )
6177set (PROJECT_DAY "01" )
6278
63- # Extract year, month, and day
64- if (PROJECT_VERSION MATCHES "^([0-9]{4})[.]([0-9]{3,4})" )
79+ # Extract year, month, and day (do this AFTER version parsing)
80+ # Note: Cmake doesn't support "{}" regex syntax
81+ if (PROJECT_VERSION MATCHES "^([0-9][0-9][0-9][0-9])\\ .([0-9][0-9][0-9][0-9]?)\\ .([0-9]+)$" )
82+ message ("Extracting year and month/day from PROJECT_VERSION: ${PROJECT_VERSION} " )
6583 # First capture group is the year
6684 set (PROJECT_YEAR "${CMAKE_MATCH_1} " )
6785
68- # Second capture group is month/ day
86+ # Second capture group contains month and day
6987 set (MONTH_DAY "${CMAKE_MATCH_2} " )
88+
89+ # Extract month (first 1-2 digits) and day (last 2 digits)
7090 string (LENGTH "${MONTH_DAY} " MONTH_DAY_LENGTH)
7191 if (MONTH_DAY_LENGTH EQUAL 3)
92+ # Format: MDD (e.g., 703 = month 7, day 03)
7293 string (SUBSTRING "${MONTH_DAY} " 0 1 PROJECT_MONTH)
7394 string (SUBSTRING "${MONTH_DAY} " 1 2 PROJECT_DAY)
7495 elseif (MONTH_DAY_LENGTH EQUAL 4)
96+ # Format: MMDD (e.g., 1203 = month 12, day 03)
7597 string (SUBSTRING "${MONTH_DAY} " 0 2 PROJECT_MONTH)
7698 string (SUBSTRING "${MONTH_DAY} " 2 2 PROJECT_DAY)
7799 endif ()
@@ -85,3 +107,35 @@ if(PROJECT_VERSION MATCHES "^([0-9]{4})[.]([0-9]{3,4})")
85107 set (PROJECT_DAY "0${PROJECT_DAY} " )
86108 endif ()
87109endif ()
110+
111+ # Parse PROJECT_VERSION to extract major, minor, and patch components
112+ if (PROJECT_VERSION MATCHES "([0-9]+)\\ .([0-9]+)\\ .([0-9]+)" )
113+ set (PROJECT_VERSION_MAJOR "${CMAKE_MATCH_1} " )
114+ set (CMAKE_PROJECT_VERSION_MAJOR "${CMAKE_MATCH_1} " )
115+
116+ set (PROJECT_VERSION_MINOR "${CMAKE_MATCH_2} " )
117+ set (CMAKE_PROJECT_VERSION_MINOR "${CMAKE_MATCH_2} " )
118+
119+ set (PROJECT_VERSION_PATCH "${CMAKE_MATCH_3} " )
120+ set (CMAKE_PROJECT_VERSION_PATCH "${CMAKE_MATCH_3} " )
121+ endif ()
122+
123+ message ("PROJECT_NAME: ${PROJECT_NAME} " )
124+ message ("PROJECT_VERSION: ${PROJECT_VERSION} " )
125+ message ("PROJECT_VERSION_MAJOR: ${PROJECT_VERSION_MAJOR} " )
126+ message ("PROJECT_VERSION_MINOR: ${PROJECT_VERSION_MINOR} " )
127+ message ("PROJECT_VERSION_PATCH: ${PROJECT_VERSION_PATCH} " )
128+ message ("CMAKE_PROJECT_VERSION: ${CMAKE_PROJECT_VERSION} " )
129+ message ("CMAKE_PROJECT_VERSION_MAJOR: ${CMAKE_PROJECT_VERSION_MAJOR} " )
130+ message ("CMAKE_PROJECT_VERSION_MINOR: ${CMAKE_PROJECT_VERSION_MINOR} " )
131+ message ("CMAKE_PROJECT_VERSION_PATCH: ${CMAKE_PROJECT_VERSION_PATCH} " )
132+ message ("PROJECT_YEAR: ${PROJECT_YEAR} " )
133+ message ("PROJECT_MONTH: ${PROJECT_MONTH} " )
134+ message ("PROJECT_DAY: ${PROJECT_DAY} " )
135+
136+ list (APPEND SUNSHINE_DEFINITIONS PROJECT_NAME ="${PROJECT_NAME} " )
137+ list (APPEND SUNSHINE_DEFINITIONS PROJECT_VERSION ="${PROJECT_VERSION} " )
138+ list (APPEND SUNSHINE_DEFINITIONS PROJECT_VERSION_MAJOR ="${PROJECT_VERSION_MAJOR} " )
139+ list (APPEND SUNSHINE_DEFINITIONS PROJECT_VERSION_MINOR ="${PROJECT_VERSION_MINOR} " )
140+ list (APPEND SUNSHINE_DEFINITIONS PROJECT_VERSION_PATCH ="${PROJECT_VERSION_PATCH} " )
141+ list (APPEND SUNSHINE_DEFINITIONS PROJECT_VERSION_COMMIT="${GITHUB_COMMIT} " )
0 commit comments