Skip to content

Commit 19eb1e4

Browse files
committed
cmake: specify project version
We currently do not set up a project version within CMake, meaning that it can't be use by other projects including libgit2 as a sub-project and also not by other tools like IDEs. This commit changes this to always set up a project version, but instead of extracting it from the "version.h" header we now set it up directly. This is mostly to avoid mis-use of the previous `LIBGIT2_VERSION` variables, as we should now always use the `libgit2_VERSION` ones that are set up by CMake if one provides the "VERSION" keyword to the `project()` call. While this is one more moving target we need to adjust on releases, this commit also adjusts our release script to verify that the project version was incremented as expected.
1 parent 325375e commit 19eb1e4

File tree

3 files changed

+22
-23
lines changed

3 files changed

+22
-23
lines changed

CMakeLists.txt

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
CMAKE_MINIMUM_REQUIRED(VERSION 3.5.1)
1515

16-
project(libgit2 C)
16+
project(libgit2 VERSION "1.0.1" LANGUAGES C)
1717

1818
# Add find modules to the path
1919
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${libgit2_SOURCE_DIR}/cmake/")
@@ -93,16 +93,6 @@ IF(MSVC)
9393
OPTION(MSVC_CRTDBG "Enable CRTDBG memory leak reporting" OFF)
9494
ENDIF()
9595

96-
FILE(STRINGS "${libgit2_SOURCE_DIR}/include/git2/version.h" GIT2_HEADER REGEX "^#define LIBGIT2_VERSION \"[^\"]*\"$")
97-
98-
STRING(REGEX REPLACE "^.*LIBGIT2_VERSION \"([0-9]+).*$" "\\1" LIBGIT2_VERSION_MAJOR "${GIT2_HEADER}")
99-
STRING(REGEX REPLACE "^.*LIBGIT2_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" LIBGIT2_VERSION_MINOR "${GIT2_HEADER}")
100-
STRING(REGEX REPLACE "^.*LIBGIT2_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" LIBGIT2_VERSION_REV "${GIT2_HEADER}")
101-
SET(LIBGIT2_VERSION_STRING "${LIBGIT2_VERSION_MAJOR}.${LIBGIT2_VERSION_MINOR}.${LIBGIT2_VERSION_REV}")
102-
103-
FILE(STRINGS "${libgit2_SOURCE_DIR}/include/git2/version.h" GIT2_HEADER_SOVERSION REGEX "^#define LIBGIT2_SOVERSION \"([0-9.]+)\"$")
104-
STRING(REGEX REPLACE "^.*LIBGIT2_SOVERSION \"([0-9.]+)\"$" "\\1" LIBGIT2_SOVERSION "${GIT2_HEADER_SOVERSION}")
105-
10696
IF (DEPRECATE_HARD)
10797
ADD_DEFINITIONS(-DGIT_DEPRECATE_HARD)
10898
ENDIF()
@@ -175,7 +165,7 @@ IF (MSVC)
175165
# /NXCOMPAT - Data execution prevention (DEP)
176166
# /LARGEADDRESSAWARE - >2GB user address space on x86
177167
# /VERSION - Embed version information in PE header
178-
SET(CMAKE_EXE_LINKER_FLAGS "/DYNAMICBASE /NXCOMPAT /LARGEADDRESSAWARE /VERSION:${LIBGIT2_VERSION_MAJOR}.${LIBGIT2_VERSION_MINOR}")
168+
SET(CMAKE_EXE_LINKER_FLAGS "/DYNAMICBASE /NXCOMPAT /LARGEADDRESSAWARE /VERSION:${libgit2_VERSION_MAJOR}.${libgit2_VERSION_MINOR}")
179169

180170
IF (NOT (MSVC_VERSION LESS 1900))
181171
# /GUARD:CF - Enable Control Flow Guard

script/release.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,15 @@ def verify_version(version):
4040
'SOVERSION': [ '"{}.{}"'.format(version.major, version.minor), None ],
4141
}
4242

43+
# Parse CMakeLists
44+
with open('CMakeLists.txt') as f:
45+
for line in f.readlines():
46+
if line.startswith('project(libgit2 VERSION "{}"'.format(version)):
47+
break
48+
else:
49+
raise Error("cmake: invalid project definition")
50+
51+
# Parse version.h
4352
with open('include/git2/version.h') as f:
4453
lines = f.readlines()
4554

src/CMakeLists.txt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -364,19 +364,19 @@ ENDIF()
364364

365365
IDE_SPLIT_SOURCES(git2)
366366

367-
IF (SONAME)
368-
SET_TARGET_PROPERTIES(git2 PROPERTIES VERSION ${LIBGIT2_VERSION_STRING})
369-
SET_TARGET_PROPERTIES(git2 PROPERTIES SOVERSION ${LIBGIT2_SOVERSION})
370-
IF (LIBGIT2_FILENAME)
371-
ADD_DEFINITIONS(-DLIBGIT2_FILENAME=\"${LIBGIT2_FILENAME}\")
372-
SET_TARGET_PROPERTIES(git2 PROPERTIES OUTPUT_NAME ${LIBGIT2_FILENAME})
373-
ELSEIF (DEFINED LIBGIT2_PREFIX)
374-
SET_TARGET_PROPERTIES(git2 PROPERTIES PREFIX "${LIBGIT2_PREFIX}")
375-
ENDIF()
376-
ENDIF()
367+
if(SONAME)
368+
set_target_properties(git2 PROPERTIES VERSION ${libgit2_VERSION})
369+
set_target_properties(git2 PROPERTIES SOVERSION "${libgit2_VERSION_MAJOR}.${libgit2_VERSION_MINOR}")
370+
if(LIBGIT2_FILENAME)
371+
add_definitions(-DLIBGIT2_FILENAME=\"${LIBGIT2_FILENAME}\")
372+
set_target_properties(git2 PROPERTIES OUTPUT_NAME ${LIBGIT2_FILENAME})
373+
elseif(DEFINED LIBGIT2_PREFIX)
374+
set_target_properties(git2 PROPERTIES PREFIX "${LIBGIT2_PREFIX}")
375+
endif()
376+
endif()
377377

378378
PKG_BUILD_CONFIG(NAME libgit2
379-
VERSION ${LIBGIT2_VERSION_STRING}
379+
VERSION ${libgit2_VERSION}
380380
DESCRIPTION "The git library, take 2"
381381
LIBS_SELF git2
382382
PRIVATE_LIBS ${LIBGIT2_PC_LIBS}

0 commit comments

Comments
 (0)