Skip to content

Commit ae30009

Browse files
authored
Merge pull request libgit2#5547 from pks-t/pks/cmake-modernization-pt2
CMake modernization pt2
2 parents 325375e + 9bc6e65 commit ae30009

File tree

5 files changed

+40
-160
lines changed

5 files changed

+40
-160
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

cmake/CheckPrototypeDefinition.c.in

Lines changed: 0 additions & 29 deletions
This file was deleted.

cmake/CheckPrototypeDefinition.cmake

Lines changed: 0 additions & 96 deletions
This file was deleted.

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: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
add_library(git2internal OBJECT)
2+
set_target_properties(git2internal PROPERTIES C_STANDARD 90)
3+
14
IF(DEBUG_POOL)
25
SET(GIT_DEBUG_POOL 1)
36
ENDIF()
@@ -38,19 +41,19 @@ CHECK_PROTOTYPE_DEFINITION(qsort_r
3841
"void qsort_r(void *base, size_t nmemb, size_t size, void *thunk, int (*compar)(void *, const void *, const void *))"
3942
"" "stdlib.h" HAVE_QSORT_R_BSD)
4043
IF (HAVE_QSORT_R_BSD)
41-
ADD_DEFINITIONS(-DHAVE_QSORT_R_BSD)
44+
target_compile_definitions(git2internal PRIVATE HAVE_QSORT_R_BSD)
4245
ENDIF()
4346

4447
CHECK_PROTOTYPE_DEFINITION(qsort_r
4548
"void qsort_r(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *, void *), void *arg)"
4649
"" "stdlib.h" HAVE_QSORT_R_GNU)
4750
IF (HAVE_QSORT_R_GNU)
48-
ADD_DEFINITIONS(-DHAVE_QSORT_R_GNU)
51+
target_compile_definitions(git2internal PRIVATE HAVE_QSORT_R_GNU)
4952
ENDIF()
5053

5154
CHECK_FUNCTION_EXISTS(qsort_s HAVE_QSORT_S)
5255
IF (HAVE_QSORT_S)
53-
ADD_DEFINITIONS(-DHAVE_QSORT_S)
56+
target_compile_definitions(git2internal PRIVATE HAVE_QSORT_S)
5457
ENDIF ()
5558

5659
# Find required dependencies
@@ -81,6 +84,8 @@ ADD_FEATURE_INFO(threadsafe THREADSAFE "threadsafe support")
8184
if(WIN32 AND EMBED_SSH_PATH)
8285
file(GLOB SRC_SSH "${EMBED_SSH_PATH}/src/*.c")
8386
list(SORT SRC_SSH)
87+
target_sources(git2internal PRIVATE ${SRC_SSH})
88+
8489
list(APPEND LIBGIT2_SYSTEM_INCLUDES "${EMBED_SSH_PATH}/include")
8590
file(WRITE "${EMBED_SSH_PATH}/src/libssh2_config.h" "#define HAVE_WINCNG\n#define LIBSSH2_WINCNG\n#include \"../win32/libssh2_config.h\"")
8691
set(GIT_SSH 1)
@@ -104,8 +109,9 @@ IF (WIN32 AND WINHTTP)
104109
LIST(APPEND LIBGIT2_PC_LIBS "-lrpcrt4" "-lcrypt32" "-lole32")
105110
ENDIF()
106111

107-
Include(SelectHTTPSBackend)
108-
Include(SelectHashes)
112+
include(SelectHTTPSBackend)
113+
include(SelectHashes)
114+
target_sources(git2internal PRIVATE ${SRC_SHA1})
109115

110116
# Specify regular expression implementation
111117
FIND_PACKAGE(PCRE)
@@ -267,30 +273,33 @@ ELSEIF (HAVE_STRUCT_STAT_ST_MTIME_NSEC)
267273
SET(GIT_USE_STAT_MTIME_NSEC 1)
268274
ENDIF()
269275

270-
ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=64)
276+
target_compile_definitions(git2internal PRIVATE _FILE_OFFSET_BITS=64)
271277

272278
# Collect sourcefiles
273279
file(GLOB SRC_H
274280
"${libgit2_SOURCE_DIR}/include/git2.h"
275281
"${libgit2_SOURCE_DIR}/include/git2/*.h"
276282
"${libgit2_SOURCE_DIR}/include/git2/sys/*.h")
277283
list(SORT SRC_H)
284+
target_sources(git2internal PRIVATE ${SRC_H})
278285

279286
# On Windows use specific platform sources
280287
if(WIN32 AND NOT CYGWIN)
281288
SET(WIN_RC "win32/git2.rc")
282289

283290
file(GLOB SRC_OS win32/*.c win32/*.h)
284291
list(SORT SRC_OS)
292+
target_sources(git2internal PRIVATE ${SRC_OS})
285293
elseif(AMIGA)
286-
add_definitions(-DNO_ADDRINFO -DNO_READDIR_R -DNO_MMAP)
294+
target_compile_definitions(git2internal PRIVATE NO_ADDRINFO NO_READDIR_R NO_MMAP)
287295
else()
288296
file(GLOB SRC_OS unix/*.c unix/*.h)
289297
list(SORT SRC_OS)
298+
target_sources(git2internal PRIVATE ${SRC_OS})
290299
endif()
291300

292301
IF (USE_LEAK_CHECKER STREQUAL "valgrind")
293-
ADD_DEFINITIONS(-DVALGRIND)
302+
target_compile_definitions(git2internal PRIVATE VALGRIND)
294303
ENDIF()
295304

296305
file(GLOB SRC_GIT2 *.c *.h
@@ -299,6 +308,7 @@ file(GLOB SRC_GIT2 *.c *.h
299308
transports/*.c transports/*.h
300309
xdiff/*.c xdiff/*.h)
301310
list(SORT SRC_GIT2)
311+
target_sources(git2internal PRIVATE ${SRC_GIT2})
302312

303313
IF(APPLE)
304314
# The old Secure Transport API has been deprecated in macOS 10.15.
@@ -325,10 +335,6 @@ ENDIF()
325335

326336
CONFIGURE_FILE(features.h.in git2/sys/features.h)
327337

328-
SET(LIBGIT2_SOURCES ${SRC_H} ${SRC_GIT2} ${SRC_OS} ${SRC_SSH} ${SRC_SHA1})
329-
330-
ADD_LIBRARY(git2internal OBJECT ${LIBGIT2_SOURCES})
331-
SET_TARGET_PROPERTIES(git2internal PROPERTIES C_STANDARD 90)
332338
IDE_SPLIT_SOURCES(git2internal)
333339
LIST(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:git2internal>)
334340

@@ -364,19 +370,19 @@ ENDIF()
364370

365371
IDE_SPLIT_SOURCES(git2)
366372

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()
373+
if(SONAME)
374+
set_target_properties(git2 PROPERTIES VERSION ${libgit2_VERSION})
375+
set_target_properties(git2 PROPERTIES SOVERSION "${libgit2_VERSION_MAJOR}.${libgit2_VERSION_MINOR}")
376+
if(LIBGIT2_FILENAME)
377+
target_compile_definitions(git2internal PRIVATE LIBGIT2_FILENAME=\"${LIBGIT2_FILENAME}\")
378+
set_target_properties(git2 PROPERTIES OUTPUT_NAME ${LIBGIT2_FILENAME})
379+
elseif(DEFINED LIBGIT2_PREFIX)
380+
set_target_properties(git2 PROPERTIES PREFIX "${LIBGIT2_PREFIX}")
381+
endif()
382+
endif()
377383

378384
PKG_BUILD_CONFIG(NAME libgit2
379-
VERSION ${LIBGIT2_VERSION_STRING}
385+
VERSION ${libgit2_VERSION}
380386
DESCRIPTION "The git library, take 2"
381387
LIBS_SELF git2
382388
PRIVATE_LIBS ${LIBGIT2_PC_LIBS}

0 commit comments

Comments
 (0)