44# > mkdir build && cd build
55# > cmake .. [-DSETTINGS=VALUE]
66# > cmake --build .
7- #
7+ #
88# Testing:
99# > ctest -V
1010#
@@ -22,37 +22,19 @@ STRING(REGEX REPLACE "^.*LIBGIT2_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1"
2222SET (LIBGIT2_VERSION_STRING "${LIBGIT2_VERSION_MAJOR} .${LIBGIT2_VERSION_MINOR} .${LIBGIT2_VERSION_REV} " )
2323
2424# Find required dependencies
25- INCLUDE_DIRECTORIES (deps/zlib src include )
26-
27- # Try finding openssl
28- FIND_PACKAGE (OpenSSL )
29- IF (OPENSSL_CRYPTO_LIBRARIES)
30- SET (SHA1_TYPE "openssl" CACHE STRING "Which SHA1 implementation to use: builtin, ppc, openssl" )
31- ELSEIF ()
32- SET (SHA1_TYPE "builtin" CACHE STRING "Which SHA1 implementation to use: builtin, ppc" )
33- ENDIF ()
34-
35- INCLUDE (FindPkgConfig )
36-
37- # Show SQLite3 settings in GUI (if they won't be found out)
38- SET (SQLITE3_INCLUDE_DIRS "" CACHE PATH "SQLite include directory" )
39- SET (SQLITE3_LIBRARIES "" CACHE FILEPATH "SQLite library" )
40-
41- # Are SQLite3 variables already set up? (poor Windows/no pkg-config/no sqlite3.pc)
42- IF (SQLITE3_INCLUDE_DIRS AND SQLITE3_LIBRARIES)
43- SET (SQLITE3_FOUND 1)
44- ENDIF ()
45-
46- # Try to find SQLite3 via pkg-config
47- IF (PKG_CONFIG_FOUND AND NOT SQLITE3_FOUND)
48- pkg_check_modules (SQLITE3 sqlite3 )
49- ENDIF ()
25+ INCLUDE_DIRECTORIES (src include )
26+ IF (NOT WIN32 )
27+ FIND_PACKAGE (ZLIB )
28+ ENDIF ()
5029
51- # Compile SQLite backend if SQLite3 is available
52- IF (SQLITE3_FOUND)
53- ADD_DEFINITIONS (-DGIT2_SQLITE_BACKEND )
54- INCLUDE_DIRECTORIES (${SQLITE3_INCLUDE_DIRS} )
55- ENDIF ()
30+ IF (ZLIB_FOUND)
31+ INCLUDE_DIRECTORIES (${ZLIB_INCLUDE_DIRS} )
32+ LINK_LIBRARIES (${ZLIB_LIBRARIES} )
33+ ELSE (ZLIB_FOUND )
34+ INCLUDE_DIRECTORIES (deps/zlib )
35+ ADD_DEFINITIONS (-DNO_VIZ -DSTDC -DNO_GZIP )
36+ FILE (GLOB SRC_ZLIB deps/zlib/*.c )
37+ ENDIF ()
5638
5739# Installation paths
5840SET (INSTALL_BIN bin CACHE PATH "Where to install binaries to." )
@@ -63,10 +45,27 @@ SET(INSTALL_INC include CACHE PATH "Where to install headers to.")
6345OPTION (BUILD_SHARED_LIBS "Build Shared Library (OFF for Static)" ON )
6446OPTION (BUILD_TESTS "Build Tests" ON )
6547OPTION (THREADSAFE "Build libgit2 as threadsafe" OFF )
48+ OPTION (STDCALL "Buildl libgit2 with the __stdcall convention (Windows)" ON )
49+
50+ # Platform specific compilation flags
51+ IF (MSVC )
52+ SET (CMAKE_C_FLAGS "/W4 /WX /nologo /Zi" )
53+ IF (STDCALL)
54+ SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS } /Gz" )
55+ ENDIF ()
56+ # TODO: bring back /RTC1 /RTCc
57+ SET (CMAKE_C_FLAGS_DEBUG "/Od /DEBUG /MTd" )
58+ SET (CMAKE_C_FLAGS_RELEASE "/MT /O2" )
59+ ELSE ()
60+ SET (CMAKE_C_FLAGS "-O2 -g -Wall -Wextra" )
61+ IF (NOT MINGW) # MinGW always does PIC and complains if we tell it to
62+ SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS } -fPIC" )
63+ ENDIF ()
64+ ENDIF ()
6665
67- # Build Release by default
66+ # Build Debug by default
6867IF (NOT CMAKE_BUILD_TYPE )
69- SET (CMAKE_BUILD_TYPE "Release " CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE )
68+ SET (CMAKE_BUILD_TYPE "Debug " CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE )
7069ENDIF ()
7170
7271IF (THREADSAFE)
@@ -77,57 +76,59 @@ IF (THREADSAFE)
7776 ADD_DEFINITIONS (-DGIT_THREADS )
7877ENDIF ()
7978
79+ ADD_DEFINITIONS (-D_FILE_OFFSET_BITS=64 )
80+
8081# Collect sourcefiles
81- FILE (GLOB SRC src/*.c src/backends/*.c )
82- FILE (GLOB SRC_ZLIB deps/zlib/*.c )
83- FILE (GLOB SRC_SHA1 src/block-sha1/*.c )
84- FILE (GLOB SRC_PLAT src/unix/*.c )
8582FILE (GLOB SRC_H include /git2/*.h )
8683
8784# On Windows use specific platform sources
8885IF (WIN32 AND NOT CYGWIN )
8986 ADD_DEFINITIONS (-DWIN32 -D_DEBUG -D_LIB )
90- FILE (GLOB SRC_PLAT src/win32/*.c )
87+ FILE (GLOB SRC src/*.c src/win32/*.c )
88+ ELSE ()
89+ FILE (GLOB SRC src/*.c src/unix/*.c )
9190ENDIF ()
9291
93- # Specify sha1 implementation
94- IF (SHA1_TYPE STREQUAL "ppc" )
95- ADD_DEFINITIONS (-DPPC_SHA1 )
96- FILE (GLOB SRC_SHA1 src/ppc/*.c )
97- ELSEIF (SHA1_TYPE STREQUAL "openssl" )
98- ADD_DEFINITIONS (-DOPENSSL_SHA1 )
99- SET (SRC_SHA1)
100- INCLUDE_DIRECTORIES (${OPENSSL_INCLUDE_DIR} )
101- SET (LIB_SHA1 ${OPENSSL_CRYPTO_LIBRARIES} )
92+ # Compile and link libgit2
93+ ADD_LIBRARY (git2 ${SRC} ${SRC_ZLIB} )
94+
95+ IF (WIN32 )
96+ TARGET_LINK_LIBRARIES (git2 ws2_32 )
97+ ELSEIF (CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)" )
98+ TARGET_LINK_LIBRARIES (git2 socket nsl )
10299ENDIF ()
103100
104- # Compile and link libgit2
105- ADD_LIBRARY (git2 ${SRC} ${SRC_PLAT} ${SRC_SHA1} ${SRC_ZLIB} )
106- TARGET_LINK_LIBRARIES (git2 ${LIB_SHA1} ${CMAKE_THREAD_LIBS_INIT} ${SQLITE3_LIBRARIES} )
101+ TARGET_LINK_LIBRARIES (git2 ${CMAKE_THREAD_LIBS_INIT} )
107102SET_TARGET_PROPERTIES (git2 PROPERTIES VERSION ${LIBGIT2_VERSION_STRING} )
108103SET_TARGET_PROPERTIES (git2 PROPERTIES SOVERSION ${LIBGIT2_VERSION_MAJOR} )
104+ CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR } /libgit2.pc.in ${CMAKE_CURRENT_BINARY_DIR } /libgit2.pc @ONLY )
109105
110106# Install
111- INSTALL (TARGETS git2
107+ INSTALL (TARGETS git2
112108 RUNTIME DESTINATION ${INSTALL_BIN}
113109 LIBRARY DESTINATION ${INSTALL_LIB}
114110 ARCHIVE DESTINATION ${INSTALL_LIB}
115111)
112+ INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR } /libgit2.pc DESTINATION ${INSTALL_LIB} /pkgconfig )
116113INSTALL (DIRECTORY include/git2 DESTINATION ${INSTALL_INC} )
117114INSTALL (FILES include/git2.h DESTINATION ${INSTALL_INC} )
118115
119116# Tests
120117IF (BUILD_TESTS)
121- SET (TEST_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR } /tests/resources" CACHE PATH "Path to test resources." )
118+ SET (TEST_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR } /tests/resources" CACHE PATH "Path to test resources." )
122119 ADD_DEFINITIONS (-DTEST_RESOURCES= \"${TEST_RESOURCES} \" )
123-
124- ENABLE_TESTING()
125- INCLUDE_DIRECTORIES(tests)
126120
121+ INCLUDE_DIRECTORIES(tests)
127122 FILE(GLOB SRC_TEST tests/t??-*.c)
128123
129- ADD_EXECUTABLE(libgit2_test tests/test_main.c tests/test_lib.c tests/test_helpers.c ${SRC} ${SRC_PLAT} ${SRC_SHA1} ${SRC_TEST} ${SRC_ZLIB} )
130- TARGET_LINK_LIBRARIES(libgit2_test ${LIB_SHA1} ${CMAKE_THREAD_LIBS_INIT} ${SQLITE3_LIBRARIES} )
124+ ADD_EXECUTABLE(libgit2_test tests/test_main.c tests/test_lib.c tests/test_helpers.c ${SRC} ${SRC_TEST} ${SRC_ZLIB} )
125+ TARGET_LINK_LIBRARIES(libgit2_test ${CMAKE_THREAD_LIBS_INIT} )
126+ IF (WIN32)
127+ TARGET_LINK_LIBRARIES(libgit2_test ws2_32)
128+ ELSEIF (CMAKE_SYSTEM_NAME MATCHES " (Solaris|SunOS )")
129+ TARGET_LINK_LIBRARIES(libgit2_test socket nsl)
130+ ENDIF ()
131131
132+ ENABLE_TESTING()
132133 ADD_TEST(libgit2_test libgit2_test)
133134ENDIF ()
0 commit comments