]>
Commit | Line | Data |
---|---|---|
583cf169 | 1 | # CMake build script for the libgit2 project |
73c46d53 | 2 | # |
bfe0658e | 3 | # Building (out of source build): |
73c46d53 | 4 | # > mkdir build && cd build |
bfe0658e PD |
5 | # > cmake .. [-DSETTINGS=VALUE] |
6 | # > cmake --build . | |
73c46d53 PD |
7 | # |
8 | # Testing: | |
9 | # > ctest -V | |
10 | # | |
11 | # Install: | |
bfe0658e | 12 | # > cmake --build . --target install |
73c46d53 | 13 | |
583cf169 PD |
14 | PROJECT(libgit2 C) |
15 | CMAKE_MINIMUM_REQUIRED(VERSION 2.6) | |
16 | ||
9d1dcca2 VM |
17 | FILE(STRINGS "src/git2.h" GIT2_HEADER REGEX "^#define LIBGIT2_VERSION \"[^\"]*\"$") |
18 | ||
19 | STRING(REGEX REPLACE "^.*LIBGIT2_VERSION \"([0-9]+).*$" "\\1" LIBGIT2_VERSION_MAJOR "${GIT2_HEADER}") | |
20 | STRING(REGEX REPLACE "^.*LIBGIT2_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" LIBGIT2_VERSION_MINOR "${GIT2_HEADER}") | |
21 | STRING(REGEX REPLACE "^.*LIBGIT2_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" LIBGIT2_VERSION_REV "${GIT2_HEADER}") | |
22 | SET(LIBGIT2_VERSION_STRING "${LIBGIT2_VERSION_MAJOR}.${LIBGIT2_VERSION_MINOR}.${LIBGIT2_VERSION_REV}") | |
23 | ||
7cbdaf7f | 24 | # Find required dependencies |
64840082 | 25 | FIND_PACKAGE(ZLIB REQUIRED) |
032db4d0 | 26 | INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR} src) |
7cbdaf7f PD |
27 | |
28 | # Try finding openssl | |
29 | FIND_PACKAGE(OpenSSL) | |
30 | IF (OPENSSL_CRYPTO_LIBRARIES) | |
31 | SET(SHA1_TYPE "openssl" CACHE STRING "Which SHA1 implementation to use: builtin, ppc, openssl") | |
32 | ELSEIF () | |
33 | SET(SHA1_TYPE "builtin" CACHE STRING "Which SHA1 implementation to use: builtin, ppc") | |
34 | ENDIF () | |
35 | ||
f443a879 VM |
36 | # Try to find SQLite3 to compile the SQLite backend |
37 | IF (NOT WIN32) | |
38 | INCLUDE(FindPkgConfig) | |
39 | pkg_check_modules(SQLITE3 sqlite3) | |
40 | ENDIF () | |
41 | ||
911fd457 | 42 | IF (SQLITE3_FOUND) |
f443a879 VM |
43 | ADD_DEFINITIONS(-DGIT2_SQLITE_BACKEND) |
44 | INCLUDE_DIRECTORIES(${SQLITE3_INCLUDE_DIRS}) | |
45 | ENDIF () | |
46 | ||
5b8bb8e7 | 47 | # Installation paths |
73c46d53 PD |
48 | SET(INSTALL_BIN bin CACHE PATH "Where to install binaries to.") |
49 | SET(INSTALL_LIB lib CACHE PATH "Where to install libraries to.") | |
032db4d0 | 50 | SET(INSTALL_INC include CACHE PATH "Where to install headers to.") |
5b8bb8e7 PD |
51 | |
52 | # Build options | |
583cf169 PD |
53 | OPTION (BUILD_SHARED_LIBS "Build Shared Library (OFF for Static)" ON) |
54 | OPTION (BUILD_TESTS "Build Tests" ON) | |
5b8bb8e7 PD |
55 | |
56 | # Build Release by default | |
583cf169 PD |
57 | IF (NOT CMAKE_BUILD_TYPE) |
58 | SET(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE) | |
59 | ENDIF () | |
60 | ||
583cf169 | 61 | # Collect sourcefiles |
f443a879 | 62 | FILE(GLOB SRC src/*.c src/backends/*.c) |
7cbdaf7f | 63 | FILE(GLOB SRC_SHA1 src/block-sha1/*.c) |
583cf169 PD |
64 | FILE(GLOB SRC_PLAT src/unix/*.c) |
65 | FILE(GLOB SRC_H src/git/*.h) | |
66 | ||
67 | # On Windows use specific platform sources | |
5b8bb8e7 PD |
68 | IF (WIN32 AND NOT CYGWIN) |
69 | ADD_DEFINITIONS(-DWIN32 -D_DEBUG -D_LIB -DZLIB_WINAPI) | |
583cf169 | 70 | FILE(GLOB SRC_PLAT src/win32/*.c) |
5b8bb8e7 PD |
71 | IF (MINGW) |
72 | SET(PTHREAD_LIBRARY pthread) | |
73 | ENDIF () | |
74 | ENDIF () | |
75 | ||
5b8bb8e7 | 76 | # Specify sha1 implementation |
7cbdaf7f PD |
77 | IF (SHA1_TYPE STREQUAL "ppc") |
78 | ADD_DEFINITIONS(-DPPC_SHA1) | |
79 | FILE(GLOB SRC_SHA1 src/ppc/*.c) | |
80 | ELSEIF (SHA1_TYPE STREQUAL "openssl") | |
81 | ADD_DEFINITIONS(-DOPENSSL_SHA1) | |
82 | SET (SRC_SHA1) | |
83 | INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) | |
84 | SET (LIB_SHA1 ${OPENSSL_CRYPTO_LIBRARIES}) | |
85 | ENDIF () | |
583cf169 PD |
86 | |
87 | # Compile and link libgit2 | |
7cbdaf7f | 88 | ADD_LIBRARY(git2 ${SRC} ${SRC_PLAT} ${SRC_SHA1}) |
f443a879 | 89 | TARGET_LINK_LIBRARIES(git2 ${ZLIB_LIBRARY} ${LIB_SHA1} ${PTHREAD_LIBRARY} ${SQLITE3_LIBRARIES}) |
9d1dcca2 VM |
90 | SET_TARGET_PROPERTIES(git2 PROPERTIES VERSION ${LIBGIT2_VERSION_STRING}) |
91 | SET_TARGET_PROPERTIES(git2 PROPERTIES SOVERSION ${LIBGIT2_VERSION_MAJOR}) | |
583cf169 PD |
92 | |
93 | # Install | |
94 | INSTALL(TARGETS git2 | |
73c46d53 PD |
95 | RUNTIME DESTINATION ${INSTALL_BIN} |
96 | LIBRARY DESTINATION ${INSTALL_LIB} | |
97 | ARCHIVE DESTINATION ${INSTALL_LIB} | |
583cf169 | 98 | ) |
032db4d0 PD |
99 | INSTALL(DIRECTORY src/git2 DESTINATION ${INSTALL_INC} ) |
100 | INSTALL(FILES src/git2.h DESTINATION ${INSTALL_INC} ) | |
583cf169 PD |
101 | |
102 | # Tests | |
103 | IF (BUILD_TESTS) | |
bfe0658e PD |
104 | SET(TEST_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/tests/resources" CACHE PATH "Path to test resources.") |
105 | ADD_DEFINITIONS(-DTEST_RESOURCES=\"${TEST_RESOURCES}\") | |
106 | ||
73c46d53 | 107 | ENABLE_TESTING() |
73c46d53 | 108 | INCLUDE_DIRECTORIES(tests) |
73c46d53 | 109 | |
b02c371e VM |
110 | FILE(GLOB SRC_TEST tests/t??-*.c) |
111 | ||
112 | ADD_EXECUTABLE(libgit2_test tests/test_main.c tests/test_lib.c tests/test_helpers.c ${SRC} ${SRC_PLAT} ${SRC_SHA1} ${SRC_TEST}) | |
f443a879 | 113 | TARGET_LINK_LIBRARIES(libgit2_test ${ZLIB_LIBRARY} ${LIB_SHA1} ${PTHREAD_LIBRARY} ${SQLITE3_LIBRARIES}) |
73c46d53 | 114 | |
b02c371e | 115 | ADD_TEST(libgit2_test libgit2_test) |
583cf169 | 116 | ENDIF () |