Blame CMakeLists.txt

Packit Service 20376f
# CMake build script for the libgit2 project
Packit Service 20376f
#
Packit Service 20376f
# Building (out of source build):
Packit Service 20376f
# > mkdir build && cd build
Packit Service 20376f
# > cmake .. [-DSETTINGS=VALUE]
Packit Service 20376f
# > cmake --build .
Packit Service 20376f
#
Packit Service 20376f
# Testing:
Packit Service 20376f
# > ctest -V
Packit Service 20376f
#
Packit Service 20376f
# Install:
Packit Service 20376f
# > cmake --build . --target install
Packit Service 20376f
Packit Service 20376f
PROJECT(libgit2 C)
Packit Service 20376f
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
Packit Service 20376f
CMAKE_POLICY(SET CMP0015 NEW)
Packit Service 20376f
Packit Service 20376f
# Add find modules to the path
Packit Service 20376f
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/")
Packit Service 20376f
Packit Service 20376f
INCLUDE(CheckLibraryExists)
Packit Service 20376f
INCLUDE(CheckFunctionExists)
Packit Service 20376f
INCLUDE(CheckSymbolExists)
Packit Service 20376f
INCLUDE(CheckStructHasMember)
Packit Service 20376f
INCLUDE(AddCFlagIfSupported)
Packit Service 20376f
INCLUDE(FindPkgConfig)
Packit Service 20376f
Packit Service 20376f
# Build options
Packit Service 20376f
#
Packit Service 20376f
OPTION( SONAME				"Set the (SO)VERSION of the target"		ON  )
Packit Service 20376f
OPTION( BUILD_SHARED_LIBS	"Build Shared Library (OFF for Static)"	ON  )
Packit Service 20376f
OPTION( THREADSAFE			"Build libgit2 as threadsafe"			ON )
Packit Service 20376f
OPTION( BUILD_CLAR			"Build Tests using the Clar suite"		ON  )
Packit Service 20376f
OPTION( BUILD_EXAMPLES		"Build library usage example apps"		OFF )
Packit Service 20376f
OPTION( TAGS				"Generate tags"							OFF )
Packit Service 20376f
OPTION( PROFILE				"Generate profiling information"		OFF )
Packit Service 20376f
OPTION( ENABLE_TRACE		"Enables tracing support"				OFF )
Packit Service 20376f
OPTION( LIBGIT2_FILENAME	"Name of the produced binary"			OFF )
Packit Service 20376f
Packit Service 20376f
OPTION( USE_SHA1DC			"Use SHA-1 with collision detection"	OFF )
Packit Service 20376f
OPTION( USE_ICONV			"Link with and use iconv library" 		OFF )
Packit Service 20376f
OPTION( USE_SSH				"Link with libssh to enable SSH support" ON )
Packit Service 20376f
OPTION( USE_GSSAPI			"Link with libgssapi for SPNEGO auth"   OFF )
Packit Service 20376f
OPTION( VALGRIND			"Configure build for valgrind"			OFF )
Packit Service 20376f
OPTION( CURL			"Use curl for HTTP if available" ON)
Packit Service 20376f
OPTION( DEBUG_POOL			"Enable debug pool allocator"			OFF )
Packit Service 20376f
Packit Service 20376f
IF(DEBUG_POOL)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_DEBUG_POOL)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
Packit Service 20376f
	SET( USE_ICONV ON )
Packit Service 20376f
	FIND_PACKAGE(Security)
Packit Service 20376f
	FIND_PACKAGE(CoreFoundation REQUIRED)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
IF(MSVC)
Packit Service 20376f
	# This option is only available when building with MSVC. By default, libgit2
Packit Service 20376f
	# is build using the cdecl calling convention, which is useful if you're
Packit Service 20376f
	# writing C. However, the CLR and Win32 API both expect stdcall.
Packit Service 20376f
	#
Packit Service 20376f
	# If you are writing a CLR program and want to link to libgit2, you'll want
Packit Service 20376f
	# to turn this on by invoking CMake with the "-DSTDCALL=ON" argument.
Packit Service 20376f
	OPTION( STDCALL			"Build libgit2 with the __stdcall convention"	OFF  )
Packit Service 20376f
Packit Service 20376f
	# This option must match the settings used in your program, in particular if you
Packit Service 20376f
	# are linking statically
Packit Service 20376f
	OPTION( STATIC_CRT		"Link the static CRT libraries"	ON  )
Packit Service 20376f
Packit Service 20376f
	# If you want to embed a copy of libssh2 into libgit2, pass a
Packit Service 20376f
	# path to libssh2
Packit Service 20376f
	OPTION( EMBED_SSH_PATH		"Path to libssh2 to embed (Windows)" OFF )
Packit Service 20376f
Packit Service 20376f
	ADD_DEFINITIONS(-D_SCL_SECURE_NO_WARNINGS)
Packit Service 20376f
	ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE)
Packit Service 20376f
	ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_DEPRECATE)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
Packit Service 20376f
IF(WIN32)
Packit Service 20376f
	# By default, libgit2 is built with WinHTTP.  To use the built-in
Packit Service 20376f
	# HTTP transport, invoke CMake with the "-DWINHTTP=OFF" argument.
Packit Service 20376f
	OPTION(	WINHTTP			"Use Win32 WinHTTP routines"	ON	)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
IF(MSVC)
Packit Service 20376f
	# Enable MSVC CRTDBG memory leak reporting when in debug mode.
Packit Service 20376f
	OPTION(MSVC_CRTDBG "Enable CRTDBG memory leak reporting" OFF)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
IF (NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
Packit Service 20376f
	OPTION( USE_OPENSSL                     "Link with and use openssl library"             ON )
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
CHECK_STRUCT_HAS_MEMBER ("struct stat" st_mtim "sys/types.h;sys/stat.h"
Packit Service 20376f
	HAVE_STRUCT_STAT_ST_MTIM LANGUAGE C)
Packit Service 20376f
CHECK_STRUCT_HAS_MEMBER ("struct stat" st_mtimespec "sys/types.h;sys/stat.h"
Packit Service 20376f
	HAVE_STRUCT_STAT_ST_MTIMESPEC LANGUAGE C)
Packit Service 20376f
CHECK_STRUCT_HAS_MEMBER("struct stat" st_mtime_nsec sys/stat.h
Packit Service 20376f
	HAVE_STRUCT_STAT_MTIME_NSEC LANGUAGE C)
Packit Service 20376f
Packit Service 20376f
IF (HAVE_STRUCT_STAT_ST_MTIM)
Packit Service 20376f
	CHECK_STRUCT_HAS_MEMBER("struct stat" st_mtim.tv_nsec sys/stat.h
Packit Service 20376f
		HAVE_STRUCT_STAT_NSEC LANGUAGE C)
Packit Service 20376f
ELSEIF (HAVE_STRUCT_STAT_ST_MTIMESPEC)
Packit Service 20376f
	CHECK_STRUCT_HAS_MEMBER("struct stat" st_mtimespec.tv_nsec sys/stat.h
Packit Service 20376f
		HAVE_STRUCT_STAT_NSEC LANGUAGE C)
Packit Service 20376f
ELSE ()
Packit Service 20376f
	SET( HAVE_STRUCT_STAT_NSEC ON )
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
IF (HAVE_STRUCT_STAT_NSEC OR WIN32)
Packit Service 20376f
	OPTION( USE_NSEC		"Care about sub-second file mtimes and ctimes"	ON  )
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
# This variable will contain the libraries we need to put into
Packit Service 20376f
# libgit2.pc's Requires.private. That is, what we're linking to or
Packit Service 20376f
# what someone who's statically linking us needs to link to.
Packit Service 20376f
SET(LIBGIT2_PC_REQUIRES "")
Packit Service 20376f
# This will be set later if we use the system's http-parser library or
Packit Service 20376f
# use iconv (OSX) and will be written to the Libs.private field in the
Packit Service 20376f
# pc file.
Packit Service 20376f
SET(LIBGIT2_PC_LIBS "")
Packit Service 20376f
Packit Service 20376f
# Installation paths
Packit Service 20376f
#
Packit Service 20376f
SET(BIN_INSTALL_DIR bin CACHE PATH "Where to install binaries to.")
Packit Service 20376f
SET(LIB_INSTALL_DIR lib CACHE PATH "Where to install libraries to.")
Packit Service 20376f
SET(INCLUDE_INSTALL_DIR include CACHE PATH "Where to install headers to.")
Packit Service 20376f
Packit Service 20376f
# Set a couple variables to be substituted inside the .pc file.
Packit Service 20376f
# We can't just use LIB_INSTALL_DIR in the .pc file, as passing them as absolue
Packit Service 20376f
# or relative paths is both valid and supported by cmake.
Packit Service 20376f
SET (PKGCONFIG_PREFIX ${CMAKE_INSTALL_PREFIX})
Packit Service 20376f
Packit Service 20376f
IF(IS_ABSOLUTE ${LIB_INSTALL_DIR})
Packit Service 20376f
  SET (PKGCONFIG_LIBDIR ${LIB_INSTALL_DIR})
Packit Service 20376f
ELSE(IS_ABSOLUTE ${LIB_INSTALL_DIR})
Packit Service 20376f
  SET (PKGCONFIG_LIBDIR "\${prefix}/${LIB_INSTALL_DIR}")
Packit Service 20376f
ENDIF (IS_ABSOLUTE ${LIB_INSTALL_DIR})
Packit Service 20376f
Packit Service 20376f
IF(IS_ABSOLUTE ${INCLUDE_INSTALL_DIR})
Packit Service 20376f
  SET (PKGCONFIG_INCLUDEDIR ${INCLUDE_INSTALL_DIR})
Packit Service 20376f
ELSE(IS_ABSOLUTE ${INCLUDE_INSTALL_DIR})
Packit Service 20376f
  SET (PKGCONFIG_INCLUDEDIR "\${prefix}/${INCLUDE_INSTALL_DIR}")
Packit Service 20376f
ENDIF(IS_ABSOLUTE ${INCLUDE_INSTALL_DIR})
Packit Service 20376f
Packit Service 20376f
FUNCTION(TARGET_OS_LIBRARIES target)
Packit Service 20376f
	IF(WIN32)
Packit Service 20376f
		TARGET_LINK_LIBRARIES(${target} ws2_32)
Packit Service 20376f
	ELSEIF(CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
Packit Service 20376f
		TARGET_LINK_LIBRARIES(${target} socket nsl)
Packit Service 20376f
		LIST(APPEND LIBGIT2_PC_LIBS "-lsocket" "-lnsl")
Packit Service 20376f
		SET(LIBGIT2_PC_LIBS ${LIBGIT2_PC_LIBS} PARENT_SCOPE)
Packit Service 20376f
	ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Haiku")
Packit Service 20376f
		TARGET_LINK_LIBRARIES(${target} network)
Packit Service 20376f
		LIST(APPEND LIBGIT2_PC_LIBS "-lnetwork")
Packit Service 20376f
		SET(LIBGIT2_PC_LIBS ${LIBGIT2_PC_LIBS} PARENT_SCOPE)
Packit Service 20376f
	ENDIF()
Packit Service 20376f
	CHECK_LIBRARY_EXISTS(rt clock_gettime "time.h" NEED_LIBRT)
Packit Service 20376f
	IF(NEED_LIBRT)
Packit Service 20376f
		TARGET_LINK_LIBRARIES(${target} rt)
Packit Service 20376f
		LIST(APPEND LIBGIT2_PC_LIBS "-lrt")
Packit Service 20376f
		SET(LIBGIT2_PC_LIBS ${LIBGIT2_PC_LIBS} PARENT_SCOPE)
Packit Service 20376f
	ENDIF()
Packit Service 20376f
Packit Service 20376f
	IF(THREADSAFE)
Packit Service 20376f
		TARGET_LINK_LIBRARIES(${target} ${CMAKE_THREAD_LIBS_INIT})
Packit Service 20376f
		LIST(APPEND LIBGIT2_PC_LIBS ${CMAKE_THREAD_LIBS_INIT})
Packit Service 20376f
		SET(LIBGIT2_PC_LIBS ${LIBGIT2_PC_LIBS} PARENT_SCOPE)
Packit Service 20376f
	ENDIF()
Packit Service 20376f
ENDFUNCTION()
Packit Service 20376f
Packit Service 20376f
# This function splits the sources files up into their appropriate
Packit Service 20376f
# subdirectories.  This is especially useful for IDEs like Xcode and
Packit Service 20376f
# Visual Studio, so that you can navigate into the libgit2_clar project,
Packit Service 20376f
# and see the folders within the tests folder (instead of just seeing all
Packit Service 20376f
# source and tests in a single folder.)
Packit Service 20376f
FUNCTION(IDE_SPLIT_SOURCES target)
Packit Service 20376f
	IF(MSVC_IDE OR CMAKE_GENERATOR STREQUAL Xcode)
Packit Service 20376f
		GET_TARGET_PROPERTY(sources ${target} SOURCES)
Packit Service 20376f
		FOREACH(source ${sources})
Packit Service 20376f
			IF(source MATCHES ".*/")
Packit Service 20376f
				STRING(REPLACE ${CMAKE_CURRENT_SOURCE_DIR}/ "" rel ${source})
Packit Service 20376f
				IF(rel)
Packit Service 20376f
					STRING(REGEX REPLACE "/([^/]*)$" "" rel ${rel})
Packit Service 20376f
					IF(rel)
Packit Service 20376f
						STRING(REPLACE "/" "\\\\" rel ${rel})
Packit Service 20376f
						SOURCE_GROUP(${rel} FILES ${source})
Packit Service 20376f
					ENDIF()
Packit Service 20376f
				ENDIF()
Packit Service 20376f
			ENDIF()
Packit Service 20376f
		ENDFOREACH()
Packit Service 20376f
	ENDIF()
Packit Service 20376f
ENDFUNCTION()
Packit Service 20376f
Packit Service 20376f
FILE(STRINGS "include/git2/version.h" GIT2_HEADER REGEX "^#define LIBGIT2_VERSION \"[^\"]*\"$")
Packit Service 20376f
Packit Service 20376f
STRING(REGEX REPLACE "^.*LIBGIT2_VERSION \"([0-9]+).*$" "\\1" LIBGIT2_VERSION_MAJOR "${GIT2_HEADER}")
Packit Service 20376f
STRING(REGEX REPLACE "^.*LIBGIT2_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" LIBGIT2_VERSION_MINOR  "${GIT2_HEADER}")
Packit Service 20376f
STRING(REGEX REPLACE "^.*LIBGIT2_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" LIBGIT2_VERSION_REV "${GIT2_HEADER}")
Packit Service 20376f
SET(LIBGIT2_VERSION_STRING "${LIBGIT2_VERSION_MAJOR}.${LIBGIT2_VERSION_MINOR}.${LIBGIT2_VERSION_REV}")
Packit Service 20376f
Packit Service 20376f
FILE(STRINGS "include/git2/version.h" GIT2_HEADER_SOVERSION REGEX "^#define LIBGIT2_SOVERSION [0-9]+$")
Packit Service 20376f
STRING(REGEX REPLACE "^.*LIBGIT2_SOVERSION ([0-9]+)$" "\\1" LIBGIT2_SOVERSION "${GIT2_HEADER_SOVERSION}")
Packit Service 20376f
Packit Service 20376f
# Find required dependencies
Packit Service 20376f
INCLUDE_DIRECTORIES(src include)
Packit Service 20376f
Packit Service 20376f
IF (SECURITY_FOUND)
Packit Service 20376f
  # OS X 10.7 and older do not have some functions we use, fall back to OpenSSL there
Packit Service 20376f
  CHECK_LIBRARY_EXISTS("${SECURITY_DIRS}" SSLCreateContext "Security/SecureTransport.h" HAVE_NEWER_SECURITY)
Packit Service 20376f
  IF (HAVE_NEWER_SECURITY)
Packit Service 20376f
    MESSAGE("-- Found Security ${SECURITY_DIRS}")
Packit Service 20376f
    LIST(APPEND LIBGIT2_PC_LIBS "-framework Security")
Packit Service 20376f
  ELSE()
Packit Service 20376f
    MESSAGE("-- Security framework is too old, falling back to OpenSSL")
Packit Service 20376f
    SET(SECURITY_FOUND "NO")
Packit Service 20376f
    SET(SECURITY_DIRS "")
Packit Service 20376f
    SET(SECURITY_DIR "")
Packit Service 20376f
    SET(USE_OPENSSL "ON")
Packit Service 20376f
  ENDIF()
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
IF (COREFOUNDATION_FOUND)
Packit Service 20376f
  MESSAGE("-- Found CoreFoundation ${COREFOUNDATION_DIRS}")
Packit Service 20376f
  LIST(APPEND LIBGIT2_PC_LIBS "-framework CoreFoundation")
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
Packit Service 20376f
IF (WIN32 AND EMBED_SSH_PATH)
Packit Service 20376f
	FILE(GLOB SRC_SSH "${EMBED_SSH_PATH}/src/*.c")
Packit Service 20376f
	INCLUDE_DIRECTORIES("${EMBED_SSH_PATH}/include")
Packit Service 20376f
	FILE(WRITE "${EMBED_SSH_PATH}/src/libssh2_config.h" "#define HAVE_WINCNG\n#define LIBSSH2_WINCNG\n#include \"../win32/libssh2_config.h\"")
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_SSH)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
IF (WIN32 AND WINHTTP)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_WINHTTP)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_HTTPS)
Packit Service 20376f
Packit Service 20376f
	# Since MinGW does not come with headers or an import library for winhttp,
Packit Service 20376f
	# we have to include a private header and generate our own import library
Packit Service 20376f
	IF (MINGW)
Packit Service 20376f
		FIND_PROGRAM(DLLTOOL dlltool CMAKE_FIND_ROOT_PATH_BOTH)
Packit Service 20376f
		IF (NOT DLLTOOL)
Packit Service 20376f
			MESSAGE(FATAL_ERROR "Could not find dlltool command")
Packit Service 20376f
		ENDIF ()
Packit Service 20376f
Packit Service 20376f
		SET(LIBWINHTTP_PATH "${CMAKE_CURRENT_BINARY_DIR}/deps/winhttp")
Packit Service 20376f
		FILE(MAKE_DIRECTORY ${LIBWINHTTP_PATH})
Packit Service 20376f
Packit Service 20376f
		IF (CMAKE_SIZEOF_VOID_P EQUAL 8)
Packit Service 20376f
			set(WINHTTP_DEF "${CMAKE_CURRENT_SOURCE_DIR}/deps/winhttp/winhttp64.def")
Packit Service 20376f
		ELSE()
Packit Service 20376f
			set(WINHTTP_DEF "${CMAKE_CURRENT_SOURCE_DIR}/deps/winhttp/winhttp.def")
Packit Service 20376f
		ENDIF()
Packit Service 20376f
Packit Service 20376f
		ADD_CUSTOM_COMMAND(
Packit Service 20376f
			OUTPUT ${LIBWINHTTP_PATH}/libwinhttp.a
Packit Service 20376f
			COMMAND ${DLLTOOL} -d ${WINHTTP_DEF} -k -D winhttp.dll -l libwinhttp.a
Packit Service 20376f
			DEPENDS ${WINHTTP_DEF}
Packit Service 20376f
			WORKING_DIRECTORY ${LIBWINHTTP_PATH}
Packit Service 20376f
		)
Packit Service 20376f
Packit Service 20376f
		SET_SOURCE_FILES_PROPERTIES(
Packit Service 20376f
			${CMAKE_CURRENT_SOURCE_DIR}/src/transports/winhttp.c
Packit Service 20376f
			PROPERTIES OBJECT_DEPENDS ${LIBWINHTTP_PATH}/libwinhttp.a
Packit Service 20376f
		)
Packit Service 20376f
Packit Service 20376f
		INCLUDE_DIRECTORIES(deps/winhttp)
Packit Service 20376f
		LINK_DIRECTORIES(${LIBWINHTTP_PATH})
Packit Service 20376f
	ENDIF ()
Packit Service 20376f
Packit Service 20376f
	LINK_LIBRARIES(winhttp rpcrt4 crypt32 ole32)
Packit Service 20376f
	LIST(APPEND LIBGIT2_PC_LIBS "-lwinhttp" "-lrpcrt4" "-lcrypt32" "-lole32")
Packit Service 20376f
ELSE ()
Packit Service 20376f
	IF (CURL)
Packit Service 20376f
		PKG_CHECK_MODULES(CURL libcurl)
Packit Service 20376f
	ENDIF ()
Packit Service 20376f
Packit Service 20376f
	IF (NOT AMIGA AND USE_OPENSSL)
Packit Service 20376f
		FIND_PACKAGE(OpenSSL)
Packit Service 20376f
	ENDIF ()
Packit Service 20376f
Packit Service 20376f
	IF (CURL_FOUND)
Packit Service 20376f
		ADD_DEFINITIONS(-DGIT_CURL)
Packit Service 20376f
		INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIRS})
Packit Service 20376f
		LINK_DIRECTORIES(${CURL_LIBRARY_DIRS})
Packit Service 20376f
		LINK_LIBRARIES(${CURL_LIBRARIES})
Packit Service 20376f
		LIST(APPEND LIBGIT2_PC_LIBS ${CURL_LDFLAGS})
Packit Service 20376f
	ENDIF()
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
# Specify sha1 implementation
Packit Service 20376f
IF (USE_SHA1DC)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_SHA1_COLLISIONDETECT)
Packit Service 20376f
	ADD_DEFINITIONS(-DSHA1DC_NO_STANDARD_INCLUDES=1)
Packit Service 20376f
	ADD_DEFINITIONS(-DSHA1DC_CUSTOM_INCLUDE_SHA1_C=\"common.h\")
Packit Service 20376f
	ADD_DEFINITIONS(-DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C=\"common.h\")
Packit Service 20376f
	FILE(GLOB SRC_SHA1 src/hash/hash_collisiondetect.c src/hash/sha1dc/*)
Packit Service 20376f
ELSEIF (WIN32 AND NOT MINGW)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_SHA1_WIN32)
Packit Service 20376f
	FILE(GLOB SRC_SHA1 src/hash/hash_win32.c)
Packit Service 20376f
ELSEIF (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_SHA1_COMMON_CRYPTO)
Packit Service 20376f
ELSEIF (OPENSSL_FOUND)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_SHA1_OPENSSL)
Packit Service 20376f
	IF (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
Packit Service 20376f
		LIST(APPEND LIBGIT2_PC_LIBS "-lssl")
Packit Service 20376f
	ELSE()
Packit Service 20376f
		SET(LIBGIT2_PC_REQUIRES "${LIBGIT2_PC_REQUIRES} openssl")
Packit Service 20376f
	ENDIF ()
Packit Service 20376f
ELSE()
Packit Service 20376f
	FILE(GLOB SRC_SHA1 src/hash/hash_generic.c)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
# Enable tracing
Packit Service 20376f
IF (ENABLE_TRACE STREQUAL "ON")
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_TRACE)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
# Include POSIX regex when it is required
Packit Service 20376f
IF(WIN32 OR AMIGA OR CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
Packit Service 20376f
	INCLUDE_DIRECTORIES(deps/regex)
Packit Service 20376f
	SET(SRC_REGEX deps/regex/regex.c)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
# Optional external dependency: http-parser
Packit Service 20376f
FIND_PACKAGE(HTTP_Parser)
Packit Service 20376f
IF (HTTP_PARSER_FOUND AND HTTP_PARSER_VERSION_MAJOR EQUAL 2)
Packit Service 20376f
	INCLUDE_DIRECTORIES(${HTTP_PARSER_INCLUDE_DIRS})
Packit Service 20376f
	LINK_LIBRARIES(${HTTP_PARSER_LIBRARIES})
Packit Service 20376f
	LIST(APPEND LIBGIT2_PC_LIBS "-lhttp_parser")
Packit Service 20376f
ELSE()
Packit Service 20376f
	MESSAGE(STATUS "http-parser version 2 was not found; using bundled 3rd-party sources.")
Packit Service 20376f
	INCLUDE_DIRECTORIES(deps/http-parser)
Packit Service 20376f
	FILE(GLOB SRC_HTTP deps/http-parser/*.c deps/http-parser/*.h)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
# Optional external dependency: zlib
Packit Service 20376f
FIND_PACKAGE(ZLIB)
Packit Service 20376f
IF (ZLIB_FOUND)
Packit Service 20376f
	INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIRS})
Packit Service 20376f
	LINK_LIBRARIES(${ZLIB_LIBRARIES})
Packit Service 20376f
	IF(APPLE OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
Packit Service 20376f
		LIST(APPEND LIBGIT2_PC_LIBS "-lz")
Packit Service 20376f
	ELSE()
Packit Service 20376f
		SET(LIBGIT2_PC_REQUIRES "${LIBGIT2_PC_REQUIRES} zlib")
Packit Service 20376f
	ENDIF()
Packit Service 20376f
ELSE()
Packit Service 20376f
	MESSAGE(STATUS "zlib was not found; using bundled 3rd-party sources." )
Packit Service 20376f
	INCLUDE_DIRECTORIES(deps/zlib)
Packit Service 20376f
	ADD_DEFINITIONS(-DNO_VIZ -DSTDC -DNO_GZIP)
Packit Service 20376f
	FILE(GLOB SRC_ZLIB deps/zlib/*.c deps/zlib/*.h)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
# Optional external dependency: libssh2
Packit Service 20376f
IF (USE_SSH)
Packit Service 20376f
	PKG_CHECK_MODULES(LIBSSH2 libssh2)
Packit Service 20376f
ENDIF()
Packit Service 20376f
IF (LIBSSH2_FOUND)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_SSH)
Packit Service 20376f
	INCLUDE_DIRECTORIES(${LIBSSH2_INCLUDE_DIRS})
Packit Service 20376f
	LINK_DIRECTORIES(${LIBSSH2_LIBRARY_DIRS})
Packit Service 20376f
	LIST(APPEND LIBGIT2_PC_LIBS ${LIBSSH2_LDFLAGS})
Packit Service 20376f
	#SET(LIBGIT2_PC_LIBS "${LIBGIT2_PC_LIBS} ${LIBSSH2_LDFLAGS}")
Packit Service 20376f
	SET(SSH_LIBRARIES ${LIBSSH2_LIBRARIES})
Packit Service 20376f
Packit Service 20376f
	CHECK_LIBRARY_EXISTS("${LIBSSH2_LIBRARIES}" libssh2_userauth_publickey_frommemory "${LIBSSH2_LIBRARY_DIRS}" HAVE_LIBSSH2_MEMORY_CREDENTIALS)
Packit Service 20376f
	IF (HAVE_LIBSSH2_MEMORY_CREDENTIALS)
Packit Service 20376f
		ADD_DEFINITIONS(-DGIT_SSH_MEMORY_CREDENTIALS)
Packit Service 20376f
	ENDIF()
Packit Service 20376f
ELSE()
Packit Service 20376f
	MESSAGE(STATUS "LIBSSH2 not found. Set CMAKE_PREFIX_PATH if it is installed outside of the default search path.")
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
# Optional external dependency: libgssapi
Packit Service 20376f
IF (USE_GSSAPI)
Packit Service 20376f
	FIND_PACKAGE(GSSAPI)
Packit Service 20376f
ENDIF()
Packit Service 20376f
IF (GSSAPI_FOUND)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_GSSAPI)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
# Optional external dependency: iconv
Packit Service 20376f
IF (USE_ICONV)
Packit Service 20376f
	FIND_PACKAGE(Iconv)
Packit Service 20376f
ENDIF()
Packit Service 20376f
IF (ICONV_FOUND)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_USE_ICONV)
Packit Service 20376f
	INCLUDE_DIRECTORIES(${ICONV_INCLUDE_DIR})
Packit Service 20376f
	LIST(APPEND LIBGIT2_PC_LIBS ${ICONV_LIBRARIES})
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
# Platform specific compilation flags
Packit Service 20376f
IF (MSVC)
Packit Service 20376f
Packit Service 20376f
	STRING(REPLACE "/Zm1000" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
Packit Service 20376f
Packit Service 20376f
	# /GF - String pooling
Packit Service 20376f
	# /MP - Parallel build
Packit Service 20376f
	SET(CMAKE_C_FLAGS "/GF /MP /nologo ${CMAKE_C_FLAGS}")
Packit Service 20376f
Packit Service 20376f
	IF (STDCALL)
Packit Service 20376f
		# /Gz - stdcall calling convention
Packit Service 20376f
		SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gz")
Packit Service 20376f
	ENDIF ()
Packit Service 20376f
Packit Service 20376f
	IF (STATIC_CRT)
Packit Service 20376f
		SET(CRT_FLAG_DEBUG "/MTd")
Packit Service 20376f
		SET(CRT_FLAG_RELEASE "/MT")
Packit Service 20376f
	ELSE()
Packit Service 20376f
		SET(CRT_FLAG_DEBUG "/MDd")
Packit Service 20376f
		SET(CRT_FLAG_RELEASE "/MD")
Packit Service 20376f
	ENDIF()
Packit Service 20376f
Packit Service 20376f
	IF (MSVC_CRTDBG)
Packit Service 20376f
		SET(CRT_FLAG_DEBUG "${CRT_FLAG_DEBUG} /DGIT_MSVC_CRTDBG")
Packit Service 20376f
		SET(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} Dbghelp.lib")
Packit Service 20376f
	ENDIF()
Packit Service 20376f
Packit Service 20376f
	# /Zi - Create debugging information
Packit Service 20376f
	# /Od - Disable optimization
Packit Service 20376f
	# /D_DEBUG - #define _DEBUG
Packit Service 20376f
	# /MTd - Statically link the multithreaded debug version of the CRT
Packit Service 20376f
	# /MDd - Dynamically link the multithreaded debug version of the CRT
Packit Service 20376f
	# /RTC1 - Run time checks
Packit Service 20376f
	SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Zi /Od /D_DEBUG /RTC1 ${CRT_FLAG_DEBUG}")
Packit Service 20376f
Packit Service 20376f
	# /DNDEBUG - Disables asserts
Packit Service 20376f
	# /MT - Statically link the multithreaded release version of the CRT
Packit Service 20376f
	# /MD - Dynamically link the multithreaded release version of the CRT
Packit Service 20376f
	# /O2 - Optimize for speed
Packit Service 20376f
	# /Oy - Enable frame pointer omission (FPO) (otherwise CMake will automatically turn it off)
Packit Service 20376f
	# /GL - Link time code generation (whole program optimization)
Packit Service 20376f
	# /Gy - Function-level linking
Packit Service 20376f
	SET(CMAKE_C_FLAGS_RELEASE "/DNDEBUG /O2 /Oy /GL /Gy ${CRT_FLAG_RELEASE}")
Packit Service 20376f
Packit Service 20376f
	# /Oy- - Disable frame pointer omission (FPO)
Packit Service 20376f
	SET(CMAKE_C_FLAGS_RELWITHDEBINFO "/DNDEBUG /Zi /O2 /Oy- /GL /Gy ${CRT_FLAG_RELEASE}")
Packit Service 20376f
Packit Service 20376f
	# /O1 - Optimize for size
Packit Service 20376f
	SET(CMAKE_C_FLAGS_MINSIZEREL "/DNDEBUG /O1 /Oy /GL /Gy ${CRT_FLAG_RELEASE}")
Packit Service 20376f
Packit Service 20376f
	# /DYNAMICBASE - Address space load randomization (ASLR)
Packit Service 20376f
	# /NXCOMPAT - Data execution prevention (DEP)
Packit Service 20376f
	# /LARGEADDRESSAWARE - >2GB user address space on x86
Packit Service 20376f
	# /VERSION - Embed version information in PE header
Packit Service 20376f
	SET(CMAKE_EXE_LINKER_FLAGS "/DYNAMICBASE /NXCOMPAT /LARGEADDRESSAWARE /VERSION:${LIBGIT2_VERSION_MAJOR}.${LIBGIT2_VERSION_MINOR}")
Packit Service 20376f
Packit Service 20376f
	# /DEBUG - Create a PDB
Packit Service 20376f
	# /LTCG - Link time code generation (whole program optimization)
Packit Service 20376f
	# /OPT:REF /OPT:ICF - Fold out duplicate code at link step
Packit Service 20376f
	# /INCREMENTAL:NO - Required to use /LTCG
Packit Service 20376f
	# /DEBUGTYPE:cv,fixup - Additional data embedded in the PDB (requires /INCREMENTAL:NO, so not on for Debug)
Packit Service 20376f
	SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG")
Packit Service 20376f
	SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "/RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO")
Packit Service 20376f
	SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/DEBUG /RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO /DEBUGTYPE:cv,fixup")
Packit Service 20376f
	SET(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "/RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO")
Packit Service 20376f
Packit Service 20376f
	# Same linker settings for DLL as EXE
Packit Service 20376f
	SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
Packit Service 20376f
	SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
Packit Service 20376f
	SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
Packit Service 20376f
	SET(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}")
Packit Service 20376f
	SET(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL}")
Packit Service 20376f
Packit Service 20376f
	SET(WIN_RC "src/win32/git2.rc")
Packit Service 20376f
ELSE ()
Packit Service 20376f
	SET(CMAKE_C_FLAGS "-D_GNU_SOURCE ${CMAKE_C_FLAGS}")
Packit Service 20376f
Packit Service 20376f
	ADD_C_FLAG_IF_SUPPORTED(-Wall)
Packit Service 20376f
	ADD_C_FLAG_IF_SUPPORTED(-Wextra)
Packit Service 20376f
Packit Service 20376f
	IF (CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
Packit Service 20376f
		SET(CMAKE_C_FLAGS "-std=c99 -D_POSIX_C_SOURCE=200112L -D__EXTENSIONS__ -D_POSIX_PTHREAD_SEMANTICS ${CMAKE_C_FLAGS}")
Packit Service 20376f
	ENDIF()
Packit Service 20376f
Packit Service 42c08d
	SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
Packit Service 20376f
Packit Service 20376f
	IF (MINGW OR MSYS) # MinGW and MSYS always do PIC and complain if we tell them to
Packit Service 20376f
		STRING(REGEX REPLACE "-fPIC" "" CMAKE_SHARED_LIBRARY_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}")
Packit Service 20376f
	ELSEIF (BUILD_SHARED_LIBS)
Packit Service 20376f
		ADD_C_FLAG_IF_SUPPORTED(-fvisibility=hidden)
Packit Service 20376f
Packit Service 20376f
		SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
Packit Service 20376f
	ENDIF ()
Packit Service 20376f
Packit Service 20376f
	IF (MINGW)
Packit Service 20376f
		# MinGW >= 3.14 uses the C99-style stdio functions
Packit Service 20376f
		# automatically, but forks like mingw-w64 still want
Packit Service 20376f
		# us to define this in order to use them
Packit Service 20376f
		ADD_DEFINITIONS(-D__USE_MINGW_ANSI_STDIO=1)
Packit Service 20376f
	ENDIF ()
Packit Service 20376f
Packit Service 20376f
	ADD_C_FLAG_IF_SUPPORTED(-Wdocumentation)
Packit Service 20376f
	ADD_C_FLAG_IF_SUPPORTED(-Wno-missing-field-initializers)
Packit Service a81f02
	ADD_C_FLAG_IF_SUPPORTED(-Wstrict-aliasing)
Packit Service 20376f
	ADD_C_FLAG_IF_SUPPORTED(-Wstrict-prototypes)
Packit Service 20376f
	ADD_C_FLAG_IF_SUPPORTED(-Wdeclaration-after-statement)
Packit Service 20376f
	ADD_C_FLAG_IF_SUPPORTED(-Wno-unused-const-variable)
Packit Service 20376f
	ADD_C_FLAG_IF_SUPPORTED(-Wno-unused-function)
Packit Service 20376f
Packit Service 20376f
	IF (APPLE) # Apple deprecated OpenSSL
Packit Service 20376f
		ADD_C_FLAG_IF_SUPPORTED(-Wno-deprecated-declarations)
Packit Service 20376f
	ENDIF()
Packit Service 20376f
Packit Service 20376f
	IF (PROFILE)
Packit Service 20376f
		SET(CMAKE_C_FLAGS "-pg ${CMAKE_C_FLAGS}")
Packit Service 20376f
		SET(CMAKE_EXE_LINKER_FLAGS "-pg ${CMAKE_EXE_LINKER_FLAGS}")
Packit Service 20376f
	ENDIF ()
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
CHECK_SYMBOL_EXISTS(regcomp_l "regex.h;xlocale.h" HAVE_REGCOMP_L)
Packit Service 20376f
IF (HAVE_REGCOMP_L)
Packit Service 20376f
	ADD_DEFINITIONS(-DHAVE_REGCOMP_L)
Packit Service 20376f
ENDIF ()
Packit Service 20376f
Packit Service 20376f
CHECK_FUNCTION_EXISTS(futimens HAVE_FUTIMENS)
Packit Service 20376f
IF (HAVE_FUTIMENS)
Packit Service 20376f
	ADD_DEFINITIONS(-DHAVE_FUTIMENS)
Packit Service 20376f
ENDIF ()
Packit Service 20376f
Packit Service 20376f
CHECK_FUNCTION_EXISTS(qsort_r HAVE_QSORT_R)
Packit Service 20376f
IF (HAVE_QSORT_R)
Packit Service 20376f
	ADD_DEFINITIONS(-DHAVE_QSORT_R)
Packit Service 20376f
ENDIF ()
Packit Service 20376f
Packit Service 20376f
CHECK_FUNCTION_EXISTS(qsort_s HAVE_QSORT_S)
Packit Service 20376f
IF (HAVE_QSORT_S)
Packit Service 20376f
	ADD_DEFINITIONS(-DHAVE_QSORT_S)
Packit Service 20376f
ENDIF ()
Packit Service 20376f
Packit Service 20376f
IF( NOT CMAKE_CONFIGURATION_TYPES )
Packit Service 20376f
	# Build Debug by default
Packit Service 20376f
	IF (NOT CMAKE_BUILD_TYPE)
Packit Service 20376f
		SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
Packit Service 20376f
	ENDIF ()
Packit Service 20376f
ELSE()
Packit Service 20376f
	# Using a multi-configuration generator eg MSVC or Xcode
Packit Service 20376f
	# that uses CMAKE_CONFIGURATION_TYPES and not CMAKE_BUILD_TYPE
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
IF (SECURITY_FOUND)
Packit Service 20376f
  ADD_DEFINITIONS(-DGIT_SECURE_TRANSPORT)
Packit Service 20376f
  ADD_DEFINITIONS(-DGIT_HTTPS)
Packit Service 20376f
  INCLUDE_DIRECTORIES(${SECURITY_INCLUDE_DIR})
Packit Service 20376f
ENDIF ()
Packit Service 20376f
Packit Service 20376f
IF (OPENSSL_FOUND)
Packit Service 20376f
  ADD_DEFINITIONS(-DGIT_OPENSSL)
Packit Service 20376f
  ADD_DEFINITIONS(-DGIT_HTTPS)
Packit Service 20376f
  INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR})
Packit Service 20376f
  SET(SSL_LIBRARIES ${OPENSSL_LIBRARIES})
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
Packit Service 20376f
Packit Service 20376f
IF (THREADSAFE)
Packit Service 20376f
	IF (NOT WIN32)
Packit Service 20376f
		FIND_PACKAGE(Threads REQUIRED)
Packit Service 20376f
	ENDIF()
Packit Service 20376f
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_THREADS)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
IF (USE_NSEC)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_USE_NSEC)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
IF (HAVE_STRUCT_STAT_ST_MTIM)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_USE_STAT_MTIM)
Packit Service 20376f
ELSEIF (HAVE_STRUCT_STAT_ST_MTIMESPEC)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_USE_STAT_MTIMESPEC)
Packit Service 20376f
ELSEIF (HAVE_STRUCT_STAT_ST_MTIME_NSEC)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_USE_STAT_MTIME_NSEC)
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=64)
Packit Service 20376f
Packit Service 20376f
# Collect sourcefiles
Packit Service 20376f
FILE(GLOB SRC_H include/git2.h include/git2/*.h include/git2/sys/*.h)
Packit Service 20376f
Packit Service 20376f
# On Windows use specific platform sources
Packit Service 20376f
IF (WIN32 AND NOT CYGWIN)
Packit Service 20376f
	ADD_DEFINITIONS(-DWIN32 -D_WIN32_WINNT=0x0501)
Packit Service 20376f
	FILE(GLOB SRC_OS src/win32/*.c src/win32/*.h)
Packit Service 20376f
ELSEIF (AMIGA)
Packit Service 20376f
	ADD_DEFINITIONS(-DNO_ADDRINFO -DNO_READDIR_R -DNO_MMAP)
Packit Service 20376f
ELSE()
Packit Service 20376f
	IF (VALGRIND)
Packit Service 20376f
		ADD_DEFINITIONS(-DNO_MMAP)
Packit Service 20376f
	ENDIF()
Packit Service 20376f
	FILE(GLOB SRC_OS src/unix/*.c src/unix/*.h)
Packit Service 20376f
ENDIF()
Packit Service 20376f
FILE(GLOB SRC_GIT2 src/*.c src/*.h src/transports/*.c src/transports/*.h src/xdiff/*.c src/xdiff/*.h)
Packit Service 20376f
Packit Service 20376f
# Determine architecture of the machine
Packit Service 20376f
IF (CMAKE_SIZEOF_VOID_P EQUAL 8)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_ARCH_64)
Packit Service 20376f
ELSEIF (CMAKE_SIZEOF_VOID_P EQUAL 4)
Packit Service 20376f
	ADD_DEFINITIONS(-DGIT_ARCH_32)
Packit Service 20376f
ELSEIF (CMAKE_SIZEOF_VOID_P)
Packit Service 20376f
	MESSAGE(FATAL_ERROR "Unsupported architecture (pointer size is ${CMAKE_SIZEOF_VOID_P} bytes)")
Packit Service 20376f
ELSE()
Packit Service 20376f
	MESSAGE(FATAL_ERROR "Unsupported architecture (CMAKE_SIZEOF_VOID_P is unset)")
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
# Compile and link libgit2
Packit Service 20376f
ADD_LIBRARY(git2 ${SRC_H} ${SRC_GIT2} ${SRC_OS} ${SRC_ZLIB} ${SRC_HTTP} ${SRC_REGEX} ${SRC_SSH} ${SRC_SHA1} ${WIN_RC})
Packit Service 20376f
TARGET_LINK_LIBRARIES(git2 ${SECURITY_DIRS})
Packit Service 20376f
TARGET_LINK_LIBRARIES(git2 ${COREFOUNDATION_DIRS})
Packit Service 20376f
TARGET_LINK_LIBRARIES(git2 ${SSL_LIBRARIES})
Packit Service 20376f
TARGET_LINK_LIBRARIES(git2 ${SSH_LIBRARIES})
Packit Service 20376f
TARGET_LINK_LIBRARIES(git2 ${GSSAPI_LIBRARIES})
Packit Service 20376f
TARGET_LINK_LIBRARIES(git2 ${ICONV_LIBRARIES})
Packit Service 20376f
TARGET_OS_LIBRARIES(git2)
Packit Service 20376f
Packit Service 20376f
# Workaround for Cmake bug #0011240 (see http://public.kitware.com/Bug/view.php?id=11240)
Packit Service 20376f
# Win64+MSVC+static libs = linker error
Packit Service 20376f
IF(MSVC AND GIT_ARCH_64 AND NOT BUILD_SHARED_LIBS)
Packit Service 20376f
  SET_TARGET_PROPERTIES(git2 PROPERTIES STATIC_LIBRARY_FLAGS "/MACHINE:x64")
Packit Service 20376f
ENDIF()
Packit Service 20376f
Packit Service 20376f
IDE_SPLIT_SOURCES(git2)
Packit Service 20376f
Packit Service 20376f
IF (SONAME)
Packit Service 20376f
	SET_TARGET_PROPERTIES(git2 PROPERTIES VERSION ${LIBGIT2_VERSION_STRING})
Packit Service 20376f
	SET_TARGET_PROPERTIES(git2 PROPERTIES SOVERSION ${LIBGIT2_SOVERSION})
Packit Service 20376f
	IF (LIBGIT2_FILENAME)
Packit Service 20376f
		ADD_DEFINITIONS(-DLIBGIT2_FILENAME=\"${LIBGIT2_FILENAME}\")
Packit Service 20376f
		SET_TARGET_PROPERTIES(git2 PROPERTIES OUTPUT_NAME ${LIBGIT2_FILENAME})
Packit Service 20376f
	ELSEIF (DEFINED LIBGIT2_PREFIX)
Packit Service 20376f
		SET_TARGET_PROPERTIES(git2 PROPERTIES PREFIX "${LIBGIT2_PREFIX}")
Packit Service 20376f
	ENDIF()
Packit Service 20376f
ENDIF()
Packit Service 20376f
STRING(REPLACE ";" " " LIBGIT2_PC_LIBS "${LIBGIT2_PC_LIBS}")
Packit Service 20376f
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/libgit2.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libgit2.pc @ONLY)
Packit Service 20376f
Packit Service 20376f
IF (MSVC_IDE)
Packit Service 20376f
   # Precompiled headers
Packit Service 20376f
   SET_TARGET_PROPERTIES(git2 PROPERTIES COMPILE_FLAGS "/Yuprecompiled.h /FIprecompiled.h")
Packit Service 20376f
   SET_SOURCE_FILES_PROPERTIES(src/win32/precompiled.c COMPILE_FLAGS "/Ycprecompiled.h")
Packit Service 20376f
ENDIF ()
Packit Service 20376f
Packit Service 20376f
# Install
Packit Service 20376f
INSTALL(TARGETS git2
Packit Service 20376f
	RUNTIME DESTINATION ${BIN_INSTALL_DIR}
Packit Service 20376f
	LIBRARY DESTINATION ${LIB_INSTALL_DIR}
Packit Service 20376f
	ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
Packit Service 20376f
)
Packit Service 20376f
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libgit2.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig )
Packit Service 20376f
INSTALL(DIRECTORY include/git2 DESTINATION ${INCLUDE_INSTALL_DIR} )
Packit Service 20376f
INSTALL(FILES include/git2.h DESTINATION ${INCLUDE_INSTALL_DIR} )
Packit Service 20376f
Packit Service 20376f
# Tests
Packit Service 20376f
IF (BUILD_CLAR)
Packit Service 20376f
	FIND_PACKAGE(PythonInterp)
Packit Service 20376f
Packit Service 20376f
	IF(NOT PYTHONINTERP_FOUND)
Packit Service 20376f
	  MESSAGE(FATAL_ERROR "Could not find a python interpeter, which is needed to build the tests. "
Packit Service 20376f
	    "Make sure python is available, or pass -DBUILD_CLAR=OFF to skip building the tests")
Packit Service 20376f
	ENDIF()
Packit Service 20376f
Packit Service 20376f
	SET(CLAR_FIXTURES "${CMAKE_CURRENT_SOURCE_DIR}/tests/resources/")
Packit Service 20376f
	SET(CLAR_PATH "${CMAKE_CURRENT_SOURCE_DIR}/tests")
Packit Service 20376f
	SET(CLAR_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/tests/resources" CACHE PATH "Path to test resources.")
Packit Service 20376f
	ADD_DEFINITIONS(-DCLAR_FIXTURE_PATH=\"${CLAR_FIXTURES}\")
Packit Service 20376f
	ADD_DEFINITIONS(-DCLAR_RESOURCES=\"${TEST_RESOURCES}\")
Packit Service 20376f
	ADD_DEFINITIONS(-DCLAR_TMPDIR=\"libgit2_tests\")
Packit Service 20376f
Packit Service 20376f
	INCLUDE_DIRECTORIES(${CLAR_PATH})
Packit Service 20376f
	FILE(GLOB_RECURSE SRC_TEST ${CLAR_PATH}/*/*.c ${CLAR_PATH}/*/*.h)
Packit Service 20376f
	SET(SRC_CLAR "${CLAR_PATH}/main.c" "${CLAR_PATH}/clar_libgit2.c" "${CLAR_PATH}/clar_libgit2_trace.c" "${CLAR_PATH}/clar_libgit2_timer.c" "${CLAR_PATH}/clar.c")
Packit Service 20376f
Packit Service 20376f
	ADD_CUSTOM_COMMAND(
Packit Service 20376f
		OUTPUT ${CLAR_PATH}/clar.suite
Packit Service 20376f
		COMMAND ${PYTHON_EXECUTABLE} generate.py -f -xonline -xstress -xperf .
Packit Service 20376f
		DEPENDS ${SRC_TEST}
Packit Service 20376f
		WORKING_DIRECTORY ${CLAR_PATH}
Packit Service 20376f
	)
Packit Service 20376f
Packit Service 20376f
	SET_SOURCE_FILES_PROPERTIES(
Packit Service 20376f
		${CLAR_PATH}/clar.c
Packit Service 20376f
		PROPERTIES OBJECT_DEPENDS ${CLAR_PATH}/clar.suite)
Packit Service 20376f
Packit Service 20376f
	ADD_EXECUTABLE(libgit2_clar ${SRC_H} ${SRC_GIT2} ${SRC_OS} ${SRC_CLAR} ${SRC_TEST} ${SRC_ZLIB} ${SRC_HTTP} ${SRC_REGEX} ${SRC_SSH} ${SRC_SHA1})
Packit Service 20376f
Packit Service 20376f
	TARGET_LINK_LIBRARIES(libgit2_clar ${COREFOUNDATION_DIRS})
Packit Service 20376f
	TARGET_LINK_LIBRARIES(libgit2_clar ${SECURITY_DIRS})
Packit Service 20376f
	TARGET_LINK_LIBRARIES(libgit2_clar ${SSL_LIBRARIES})
Packit Service 20376f
	TARGET_LINK_LIBRARIES(libgit2_clar ${SSH_LIBRARIES})
Packit Service 20376f
	TARGET_LINK_LIBRARIES(libgit2_clar ${GSSAPI_LIBRARIES})
Packit Service 20376f
	TARGET_LINK_LIBRARIES(libgit2_clar ${ICONV_LIBRARIES})
Packit Service 20376f
	TARGET_OS_LIBRARIES(libgit2_clar)
Packit Service 20376f
	IDE_SPLIT_SOURCES(libgit2_clar)
Packit Service 20376f
Packit Service 20376f
	IF (MSVC_IDE)
Packit Service 20376f
		# Precompiled headers
Packit Service 20376f
		SET_TARGET_PROPERTIES(libgit2_clar PROPERTIES COMPILE_FLAGS "/Yuprecompiled.h /FIprecompiled.h")
Packit Service 20376f
	ENDIF ()
Packit Service 20376f
Packit Service 20376f
	ENABLE_TESTING()
Packit Service 20376f
Packit Service 20376f
	ADD_TEST(offline   libgit2_clar -v -xonline)
Packit Service 20376f
	ADD_TEST(online    libgit2_clar -v -sonline)
Packit Service 20376f
	ADD_TEST(gitdaemon libgit2_clar -v -sonline::push)
Packit Service 20376f
	ADD_TEST(ssh       libgit2_clar -v -sonline::push -sonline::clone::ssh_cert -sonline::clone::ssh_with_paths)
Packit Service 20376f
	ADD_TEST(proxy     libgit2_clar -v -sonline::clone::proxy_credentials_in_url -sonline::clone::proxy_credentials_request)
Packit Service 20376f
ENDIF ()
Packit Service 20376f
Packit Service 20376f
IF (TAGS)
Packit Service 20376f
	FIND_PROGRAM(CTAGS ctags)
Packit Service 20376f
	IF (NOT CTAGS)
Packit Service 20376f
		MESSAGE(FATAL_ERROR "Could not find ctags command")
Packit Service 20376f
	ENDIF ()
Packit Service 20376f
Packit Service 20376f
	FILE(GLOB_RECURSE SRC_ALL *.[ch])
Packit Service 20376f
Packit Service 20376f
	ADD_CUSTOM_COMMAND(
Packit Service 20376f
		OUTPUT tags
Packit Service 20376f
		COMMAND ${CTAGS} -a ${SRC_ALL}
Packit Service 20376f
		DEPENDS ${SRC_ALL}
Packit Service 20376f
	)
Packit Service 20376f
	ADD_CUSTOM_TARGET(
Packit Service 20376f
		do_tags ALL
Packit Service 20376f
		DEPENDS tags
Packit Service 20376f
	)
Packit Service 20376f
ENDIF ()
Packit Service 20376f
Packit Service 20376f
IF (BUILD_EXAMPLES)
Packit Service 20376f
	ADD_SUBDIRECTORY(examples)
Packit Service 20376f
ENDIF ()