forked from p-ranav/cppgit2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
75 lines (63 loc) · 2.66 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
PROJECT(cppgit2)
CMAKE_MINIMUM_REQUIRED(VERSION 3.8)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
# Add libgit2
find_package(PkgConfig)
if(PkgConfig_FOUND)
PKG_CHECK_MODULES(LIBGIT2 libgit2>=0.99)
endif()
if(NOT LIBGIT2_FOUND)
ADD_SUBDIRECTORY(ext/libgit2 ${CMAKE_BINARY_DIR}/lib)
set(LIBGIT2_INCLUDEDIR ext/libgit2/include)
endif()
INCLUDE(CMakePackageConfigHelpers)
# Sources for cppgit2
FILE(GLOB CPPGIT2_SOURCES "src/*.cpp")
# Version information
SET(CPPGIT2_VERSION_MAJOR 0)
SET(CPPGIT2_VERSION_MINOR 1)
SET(CPPGIT2_VERSION_REV 0)
SET(CPPGIT2_VERSION_STRING "${CPPGIT2_VERSION_MAJOR}.${CPPGIT2_VERSION_MINOR}.${CPPGIT2_VERSION_REV}")
# Build option for shared vs. static lib (Same option as for libgit2)
OPTION(BUILD_SHARED_LIBS "Build Shared Library (OFF for Static)" ON)
# Build object library
ADD_LIBRARY(CPPGIT2_OBJECT_LIBRARY OBJECT ${CPPGIT2_SOURCES})
INCLUDE_DIRECTORIES("include" "${LIBGIT2_INCLUDEDIR}" "test")
SET_PROPERTY(TARGET CPPGIT2_OBJECT_LIBRARY PROPERTY CXX_STANDARD 11)
# Shared libraries need PIC
SET_PROPERTY(TARGET CPPGIT2_OBJECT_LIBRARY PROPERTY POSITION_INDEPENDENT_CODE 1)
# Build shared/static library
if (BUILD_SHARED_LIBS)
ADD_LIBRARY(cppgit2 SHARED $<TARGET_OBJECTS:CPPGIT2_OBJECT_LIBRARY>)
SET_TARGET_PROPERTIES(cppgit2 PROPERTIES
VERSION ${CPPGIT2_VERSION_STRING}
SOVERSION ${CPPGIT2_VERSION_MINOR}
WINDOWS_EXPORT_ALL_SYMBOLS ON)
else ()
ADD_LIBRARY(cppgit2 STATIC $<TARGET_OBJECTS:CPPGIT2_OBJECT_LIBRARY>)
endif ()
SET_TARGET_PROPERTIES(cppgit2 PROPERTIES CXX_STANDARD 11)
TARGET_LINK_LIBRARIES(cppgit2 git2)
# Copy include directories to build/include
FILE(COPY "include" DESTINATION "${CMAKE_BINARY_DIR}/.")
FILE(COPY "${LIBGIT2_INCLUDEDIR}/git2" DESTINATION "${CMAKE_BINARY_DIR}/include")
FILE(COPY "${LIBGIT2_INCLUDEDIR}/git2.h" DESTINATION "${CMAKE_BINARY_DIR}/include")
# Build samples
FILE(GLOB SAMPLES "samples/*.cpp")
FOREACH(SAMPLE ${SAMPLES})
GET_FILENAME_COMPONENT(SAMPLE_EXE ${SAMPLE} NAME_WE)
ADD_EXECUTABLE(${SAMPLE_EXE} ${SAMPLE})
SET_TARGET_PROPERTIES(${SAMPLE_EXE} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/samples")
TARGET_LINK_LIBRARIES(${SAMPLE_EXE} cppgit2)
SET_PROPERTY(TARGET ${SAMPLE_EXE} PROPERTY CXX_STANDARD 11)
ENDFOREACH()
# Build tests
FILE(GLOB TESTS "test/*.cpp")
SET_SOURCE_FILES_PROPERTIES(test/main.cpp
PROPERTIES
COMPILE_DEFINITIONS DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN)
ADD_EXECUTABLE(cppgit2_test ${TESTS})
SET_TARGET_PROPERTIES(cppgit2_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/test")
TARGET_LINK_LIBRARIES(cppgit2_test cppgit2)
SET_PROPERTY(TARGET cppgit2_test PROPERTY CXX_STANDARD 11)