summaryrefslogtreecommitdiff
path: root/src/libgit2/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/libgit2/CMakeLists.txt')
-rw-r--r--src/libgit2/CMakeLists.txt103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/libgit2/CMakeLists.txt b/src/libgit2/CMakeLists.txt
new file mode 100644
index 000000000..594feb69f
--- /dev/null
+++ b/src/libgit2/CMakeLists.txt
@@ -0,0 +1,103 @@
+# libgit2: the git library
+
+#
+# An object library so that our tests can link to the objects directly and
+# test internal state, instead of linking with libgit2.so and testing only
+# the public interfaces.
+#
+
+add_library(libgit2 OBJECT)
+set_target_properties(libgit2 PROPERTIES C_STANDARD 90)
+
+set(LIBGIT2_INCLUDES
+ "${CMAKE_BINARY_DIR}/src"
+ "${libgit2_SOURCE_DIR}/src/libgit2"
+ "${libgit2_SOURCE_DIR}/src/util"
+ "${libgit2_SOURCE_DIR}/include")
+
+file(GLOB LIBGIT2_SRC *.c *.h
+ streams/*.c streams/*.h
+ transports/*.c transports/*.h
+ xdiff/*.c xdiff/*.h)
+list(SORT LIBGIT2_SRC)
+
+#
+# Platform specific options
+#
+
+target_compile_definitions(libgit2 PRIVATE _FILE_OFFSET_BITS=64)
+
+if(AMIGA)
+ target_compile_definitions(libgit2 PRIVATE NO_ADDRINFO NO_READDIR_R NO_MMAP)
+endif()
+
+if(MSVC)
+ # the xdiff dependency is not (yet) warning-free, disable warnings as
+ # errors for the xdiff sources until we've sorted them out
+ set_source_files_properties(xdiff/xdiffi.c PROPERTIES COMPILE_FLAGS -WX-)
+ set_source_files_properties(xdiff/xutils.c PROPERTIES COMPILE_FLAGS -WX-)
+endif()
+
+if(MSVC_IDE)
+ # precompiled headers
+ set_target_properties(git2 PROPERTIES COMPILE_FLAGS "/Yuprecompiled.h /FIprecompiled.h")
+ set_source_files_properties(libgit2/win32/precompiled.c COMPILE_FLAGS "/Ycprecompiled.h")
+endif()
+
+if(APPLE)
+ # the old Secure Transport API has been deprecated in macOS 10.15.
+ set_source_files_properties(streams/stransport.c PROPERTIES COMPILE_FLAGS -Wno-deprecated)
+endif()
+
+#
+# Preprocessor definitions
+#
+
+if(DEPRECATE_HARD)
+ target_compile_definitions(libgit2 PRIVATE GIT_DEPRECATE_HARD)
+endif()
+
+if(USE_LEAK_CHECKER STREQUAL "valgrind")
+ target_compile_definitions(util PRIVATE VALGRIND)
+endif()
+
+target_sources(libgit2 PRIVATE ${LIBGIT2_SRC})
+
+target_include_directories(libgit2 PRIVATE ${LIBGIT2_INCLUDES} ${LIBGIT2_DEPENDENCY_INCLUDES} PUBLIC ${libgit2_SOURCE_DIR}/include)
+target_include_directories(libgit2 SYSTEM PRIVATE ${LIBGIT2_SYSTEM_INCLUDES})
+
+#
+# The actual libgit2 public consumable (libgit2.so/git2.dll)
+#
+
+add_library(libgit2public $<TARGET_OBJECTS:libgit2> $<TARGET_OBJECTS:util> ${LIBGIT2_DEPENDENCY_OBJECTS})
+target_link_libraries(libgit2public ${LIBGIT2_SYSTEM_LIBS})
+
+set_target_properties(libgit2public PROPERTIES OUTPUT_NAME ${LIBGIT2_FILENAME})
+
+set_target_properties(libgit2public PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
+set_target_properties(libgit2public PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
+set_target_properties(libgit2public PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
+
+if(SONAME)
+ set_target_properties(libgit2public PROPERTIES VERSION ${libgit2_VERSION})
+ set_target_properties(libgit2public PROPERTIES SOVERSION "${libgit2_VERSION_MAJOR}.${libgit2_VERSION_MINOR}")
+endif()
+
+pkg_build_config(NAME libgit2
+ VERSION ${libgit2_VERSION}
+ DESCRIPTION "A cross-platform linkable library implementation of Git"
+ LIBS_SELF ${LIBGIT2_FILENAME}
+ PRIVATE_LIBS ${LIBGIT2_PC_LIBS}
+ REQUIRES ${LIBGIT2_PC_REQUIRES})
+
+#
+# Installation
+#
+
+install(TARGETS libgit2public
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(DIRECTORY ${libgit2_SOURCE_DIR}/include/git2 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+install(FILES ${libgit2_SOURCE_DIR}/include/git2.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})