CMakeLists.txt 13.6 KB
Newer Older
1 2 3
add_library(git2internal OBJECT)
set_target_properties(git2internal PROPERTIES C_STANDARD 90)

4 5 6
IF(DEBUG_POOL)
	SET(GIT_DEBUG_POOL 1)
ENDIF()
7
ADD_FEATURE_INFO(debugpool GIT_DEBUG_POOL "debug pool allocator")
8

9
INCLUDE(PkgBuildConfig)
10
INCLUDE(SanitizeBool)
11

12 13 14 15 16 17 18 19 20
# This variable will contain the libraries we need to put into
# libgit2.pc's Requires.private. That is, what we're linking to or
# what someone who's statically linking us needs to link to.
SET(LIBGIT2_PC_REQUIRES "")
# This will be set later if we use the system's http-parser library or
# use iconv (OSX) and will be written to the Libs.private field in the
# pc file.
SET(LIBGIT2_PC_LIBS "")

21 22
SET(LIBGIT2_INCLUDES
	"${CMAKE_CURRENT_BINARY_DIR}"
23 24
	"${libgit2_SOURCE_DIR}/src"
	"${libgit2_SOURCE_DIR}/include")
25
SET(LIBGIT2_SYSTEM_INCLUDES "")
26 27
SET(LIBGIT2_LIBS "")

28 29
enable_warnings(missing-declarations)

30
# Enable tracing
31
IF(ENABLE_TRACE)
32 33
	SET(GIT_TRACE 1)
ENDIF()
34
ADD_FEATURE_INFO(tracing GIT_TRACE "tracing support")
35 36 37 38 39 40

CHECK_FUNCTION_EXISTS(futimens HAVE_FUTIMENS)
IF (HAVE_FUTIMENS)
	SET(GIT_USE_FUTIMENS 1)
ENDIF ()

41 42 43 44
CHECK_PROTOTYPE_DEFINITION(qsort_r
	"void qsort_r(void *base, size_t nmemb, size_t size, void *thunk, int (*compar)(void *, const void *, const void *))"
	"" "stdlib.h" HAVE_QSORT_R_BSD)
IF (HAVE_QSORT_R_BSD)
45
	target_compile_definitions(git2internal PRIVATE HAVE_QSORT_R_BSD)
46 47 48 49 50 51
ENDIF()

CHECK_PROTOTYPE_DEFINITION(qsort_r
	"void qsort_r(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *, void *), void *arg)"
	"" "stdlib.h" HAVE_QSORT_R_GNU)
IF (HAVE_QSORT_R_GNU)
52
	target_compile_definitions(git2internal PRIVATE HAVE_QSORT_R_GNU)
53
ENDIF()
54 55 56

CHECK_FUNCTION_EXISTS(qsort_s HAVE_QSORT_S)
IF (HAVE_QSORT_S)
57
	target_compile_definitions(git2internal PRIVATE HAVE_QSORT_S)
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
ENDIF ()

# Find required dependencies

IF(WIN32)
	LIST(APPEND LIBGIT2_LIBS ws2_32)
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
	LIST(APPEND LIBGIT2_LIBS socket nsl)
	LIST(APPEND LIBGIT2_PC_LIBS "-lsocket" "-lnsl")
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Haiku")
	LIST(APPEND LIBGIT2_LIBS network)
	LIST(APPEND LIBGIT2_PC_LIBS "-lnetwork")
ENDIF()

CHECK_LIBRARY_EXISTS(rt clock_gettime "time.h" NEED_LIBRT)
IF(NEED_LIBRT)
	LIST(APPEND LIBGIT2_LIBS rt)
	LIST(APPEND LIBGIT2_PC_LIBS "-lrt")
ENDIF()

IF(THREADSAFE)
	LIST(APPEND LIBGIT2_LIBS ${CMAKE_THREAD_LIBS_INIT})
	LIST(APPEND LIBGIT2_PC_LIBS ${CMAKE_THREAD_LIBS_INIT})
ENDIF()
82
ADD_FEATURE_INFO(threadsafe THREADSAFE "threadsafe support")
83 84


85 86 87
if(WIN32 AND EMBED_SSH_PATH)
	file(GLOB SRC_SSH "${EMBED_SSH_PATH}/src/*.c")
	list(SORT SRC_SSH)
88 89
	target_sources(git2internal PRIVATE ${SRC_SSH})

90 91 92 93
	list(APPEND LIBGIT2_SYSTEM_INCLUDES "${EMBED_SSH_PATH}/include")
	file(WRITE "${EMBED_SSH_PATH}/src/libssh2_config.h" "#define HAVE_WINCNG\n#define LIBSSH2_WINCNG\n#include \"../win32/libssh2_config.h\"")
	set(GIT_SSH 1)
endif()
94 95 96 97 98 99 100

IF (WIN32 AND WINHTTP)
	SET(GIT_WINHTTP 1)

	# Since MinGW does not come with headers or an import library for winhttp,
	# we have to include a private header and generate our own import library
	IF (MINGW)
101
		ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/winhttp" "${libgit2_BINARY_DIR}/deps/winhttp")
102
		LIST(APPEND LIBGIT2_LIBS winhttp)
103
		LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/winhttp")
104 105 106 107 108 109 110 111 112
	ELSE()
		LIST(APPEND LIBGIT2_LIBS "winhttp")
		LIST(APPEND LIBGIT2_PC_LIBS "-lwinhttp")
	ENDIF ()

	LIST(APPEND LIBGIT2_LIBS "rpcrt4" "crypt32" "ole32")
	LIST(APPEND LIBGIT2_PC_LIBS "-lrpcrt4" "-lcrypt32" "-lole32")
ENDIF()

113 114 115
include(SelectHTTPSBackend)
include(SelectHashes)
target_sources(git2internal PRIVATE ${SRC_SHA1})
116

117
# Specify regular expression implementation
118 119
FIND_PACKAGE(PCRE)

120
IF(REGEX_BACKEND STREQUAL "")
121 122 123
	CHECK_SYMBOL_EXISTS(regcomp_l "regex.h;xlocale.h" HAVE_REGCOMP_L)

	IF(HAVE_REGCOMP_L)
124
		SET(REGEX_BACKEND "regcomp_l")
125
	ELSEIF(PCRE_FOUND)
126
		SET(REGEX_BACKEND "pcre")
127
	ELSE()
128
		SET(REGEX_BACKEND "builtin")
129 130 131
	ENDIF()
ENDIF()

132
IF(REGEX_BACKEND STREQUAL "regcomp_l")
133
	ADD_FEATURE_INFO(regex ON "using system regcomp_l")
134
	SET(GIT_REGEX_REGCOMP_L 1)
135
ELSEIF(REGEX_BACKEND STREQUAL "pcre2")
136 137 138 139 140 141 142 143 144 145 146
	FIND_PACKAGE(PCRE2)

	IF(NOT PCRE2_FOUND)
		MESSAGE(FATAL_ERROR "PCRE2 support was requested but not found")
	ENDIF()

	ADD_FEATURE_INFO(regex ON "using system PCRE2")
	SET(GIT_REGEX_PCRE2 1)

	LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${PCRE2_INCLUDE_DIRS})
	LIST(APPEND LIBGIT2_LIBS ${PCRE2_LIBRARIES})
147
	LIST(APPEND LIBGIT2_PC_REQUIRES "libpcre2-8")
148
ELSEIF(REGEX_BACKEND STREQUAL "pcre")
149 150
	ADD_FEATURE_INFO(regex ON "using system PCRE")
	SET(GIT_REGEX_PCRE 1)
151 152 153

	LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${PCRE_INCLUDE_DIRS})
	LIST(APPEND LIBGIT2_LIBS ${PCRE_LIBRARIES})
154
	LIST(APPEND LIBGIT2_PC_REQUIRES "libpcre")
155
ELSEIF(REGEX_BACKEND STREQUAL "regcomp")
156 157
	ADD_FEATURE_INFO(regex ON "using system regcomp")
	SET(GIT_REGEX_REGCOMP 1)
158
ELSEIF(REGEX_BACKEND STREQUAL "builtin")
159
	ADD_FEATURE_INFO(regex ON "using bundled PCRE")
160
	SET(GIT_REGEX_BUILTIN 1)
161

162 163 164
	ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/pcre" "${libgit2_BINARY_DIR}/deps/pcre")
	LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/pcre")
	LIST(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:pcre>)
165
ELSE()
166
	MESSAGE(FATAL_ERROR "The REGEX_BACKEND option provided is not supported")
167 168
ENDIF()

169
# Optional external dependency: http-parser
170 171 172 173 174 175 176 177 178 179 180
IF(USE_HTTP_PARSER STREQUAL "system")
	FIND_PACKAGE(HTTP_Parser)

	IF (HTTP_PARSER_FOUND AND HTTP_PARSER_VERSION_MAJOR EQUAL 2)
		LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${HTTP_PARSER_INCLUDE_DIRS})
		LIST(APPEND LIBGIT2_LIBS ${HTTP_PARSER_LIBRARIES})
		LIST(APPEND LIBGIT2_PC_LIBS "-lhttp_parser")
		ADD_FEATURE_INFO(http-parser ON "http-parser support (system)")
	ELSE()
		MESSAGE(FATAL_ERROR "http-parser support was requested but not found")
	ENDIF()
181 182
ELSE()
	MESSAGE(STATUS "http-parser version 2 was not found or disabled; using bundled 3rd-party sources.")
183
	ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/http-parser" "${libgit2_BINARY_DIR}/deps/http-parser")
184
	LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/http-parser")
185
	LIST(APPEND LIBGIT2_OBJECTS "$<TARGET_OBJECTS:http-parser>")
186
	ADD_FEATURE_INFO(http-parser ON "http-parser support (bundled)")
187 188 189
ENDIF()

# Optional external dependency: zlib
190 191 192 193 194 195
SanitizeBool(USE_BUNDLED_ZLIB)
IF(USE_BUNDLED_ZLIB STREQUAL ON)
	SET(USE_BUNDLED_ZLIB "Bundled")
ENDIF()

IF(USE_BUNDLED_ZLIB STREQUAL "OFF")
196 197
	FIND_PACKAGE(ZLIB)
	IF(ZLIB_FOUND)
198
		LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${ZLIB_INCLUDE_DIRS})
199
		LIST(APPEND LIBGIT2_LIBS ${ZLIB_LIBRARIES})
200 201 202 203 204
		IF(APPLE OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
			LIST(APPEND LIBGIT2_PC_LIBS "-lz")
		ELSE()
			LIST(APPEND LIBGIT2_PC_REQUIRES "zlib")
		ENDIF()
205
		ADD_FEATURE_INFO(zlib ON "using system zlib")
206
	ELSE()
207
		MESSAGE(STATUS "zlib was not found; using bundled 3rd-party sources." )
208
	ENDIF()
209
ENDIF()
210 211 212 213 214 215 216 217 218 219
IF(USE_BUNDLED_ZLIB STREQUAL "Chromium")
	ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/chromium-zlib" "${libgit2_BINARY_DIR}/deps/chromium-zlib")
	LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/chromium-zlib")
	LIST(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:chromium_zlib>)
	ADD_FEATURE_INFO(zlib ON "using (Chromium) bundled zlib")
ELSEIF(USE_BUNDLED_ZLIB OR NOT ZLIB_FOUND)
	ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/zlib" "${libgit2_BINARY_DIR}/deps/zlib")
	LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/zlib")
	LIST(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:zlib>)
	ADD_FEATURE_INFO(zlib ON "using bundled zlib")
220 221 222 223
ENDIF()

# Optional external dependency: libssh2
IF (USE_SSH)
224
	FIND_PKGLIBRARIES(LIBSSH2 libssh2)
225 226 227
ENDIF()
IF (LIBSSH2_FOUND)
	SET(GIT_SSH 1)
228
	LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${LIBSSH2_INCLUDE_DIRS})
229 230 231 232 233 234 235 236 237 238
	LIST(APPEND LIBGIT2_LIBS ${LIBSSH2_LIBRARIES})
	LIST(APPEND LIBGIT2_PC_LIBS ${LIBSSH2_LDFLAGS})

	CHECK_LIBRARY_EXISTS("${LIBSSH2_LIBRARIES}" libssh2_userauth_publickey_frommemory "${LIBSSH2_LIBRARY_DIRS}" HAVE_LIBSSH2_MEMORY_CREDENTIALS)
	IF (HAVE_LIBSSH2_MEMORY_CREDENTIALS)
		SET(GIT_SSH_MEMORY_CREDENTIALS 1)
	ENDIF()
ELSE()
	MESSAGE(STATUS "LIBSSH2 not found. Set CMAKE_PREFIX_PATH if it is installed outside of the default search path.")
ENDIF()
239
ADD_FEATURE_INFO(SSH GIT_SSH "SSH transport support")
240

241 242 243 244 245 246 247 248 249
# Optional external dependency: ntlmclient
IF (USE_NTLMCLIENT)
	SET(GIT_NTLM 1)
	ADD_SUBDIRECTORY("${libgit2_SOURCE_DIR}/deps/ntlmclient" "${libgit2_BINARY_DIR}/deps/ntlmclient")
	LIST(APPEND LIBGIT2_INCLUDES "${libgit2_SOURCE_DIR}/deps/ntlmclient")
	LIST(APPEND LIBGIT2_OBJECTS "$<TARGET_OBJECTS:ntlmclient>")
ENDIF()
ADD_FEATURE_INFO(ntlmclient GIT_NTLM "NTLM authentication support for Unix")

250 251 252
# Optional external dependency: GSSAPI

INCLUDE(SelectGSSAPI)
253 254

# Optional external dependency: iconv
255
IF (USE_ICONV)
256 257 258 259
	FIND_PACKAGE(Iconv)
ENDIF()
IF (ICONV_FOUND)
	SET(GIT_USE_ICONV 1)
260
	LIST(APPEND LIBGIT2_SYSTEM_INCLUDES ${ICONV_INCLUDE_DIR})
261 262 263
	LIST(APPEND LIBGIT2_LIBS ${ICONV_LIBRARIES})
	LIST(APPEND LIBGIT2_PC_LIBS ${ICONV_LIBRARIES})
ENDIF()
264
ADD_FEATURE_INFO(iconv GIT_USE_ICONV "iconv encoding conversion support")
265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286


IF (THREADSAFE)
	IF (NOT WIN32)
		FIND_PACKAGE(Threads REQUIRED)
	ENDIF()

	SET(GIT_THREADS 1)
ENDIF()

IF (USE_NSEC)
	SET(GIT_USE_NSEC 1)
ENDIF()

IF (HAVE_STRUCT_STAT_ST_MTIM)
	SET(GIT_USE_STAT_MTIM 1)
ELSEIF (HAVE_STRUCT_STAT_ST_MTIMESPEC)
	SET(GIT_USE_STAT_MTIMESPEC 1)
ELSEIF (HAVE_STRUCT_STAT_ST_MTIME_NSEC)
	SET(GIT_USE_STAT_MTIME_NSEC 1)
ENDIF()

287
target_compile_definitions(git2internal PRIVATE _FILE_OFFSET_BITS=64)
288 289

# Collect sourcefiles
290
file(GLOB SRC_H
291 292 293
	"${libgit2_SOURCE_DIR}/include/git2.h"
	"${libgit2_SOURCE_DIR}/include/git2/*.h"
	"${libgit2_SOURCE_DIR}/include/git2/sys/*.h")
294
list(SORT SRC_H)
295
target_sources(git2internal PRIVATE ${SRC_H})
296 297

# On Windows use specific platform sources
298
if(WIN32 AND NOT CYGWIN)
299 300
	SET(WIN_RC "win32/git2.rc")

301 302
	file(GLOB SRC_OS win32/*.c win32/*.h)
	list(SORT SRC_OS)
303
	target_sources(git2internal PRIVATE ${SRC_OS})
304
elseif(AMIGA)
305
	target_compile_definitions(git2internal PRIVATE NO_ADDRINFO NO_READDIR_R NO_MMAP)
306 307 308
else()
	file(GLOB SRC_OS unix/*.c unix/*.h)
	list(SORT SRC_OS)
309
	target_sources(git2internal PRIVATE ${SRC_OS})
310
endif()
311

312
IF (USE_LEAK_CHECKER STREQUAL "valgrind")
313
	target_compile_definitions(git2internal PRIVATE VALGRIND)
314 315
ENDIF()

316
file(GLOB SRC_GIT2 *.c *.h
317
	allocators/*.c allocators/*.h
318 319 320
	streams/*.c streams/*.h
	transports/*.c transports/*.h
	xdiff/*.c xdiff/*.h)
321
list(SORT SRC_GIT2)
322
target_sources(git2internal PRIVATE ${SRC_GIT2})
323

324 325 326 327
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()
328

329 330 331 332 333 334 335
# the xdiff dependency is not (yet) warning-free, disable warnings as
# errors for the xdiff sources until we've sorted them out
IF(MSVC)
	SET_SOURCE_FILES_PROPERTIES(xdiff/xdiffi.c PROPERTIES COMPILE_FLAGS -WX-)
	SET_SOURCE_FILES_PROPERTIES(xdiff/xutils.c PROPERTIES COMPILE_FLAGS -WX-)
ENDIF()

336 337 338 339 340 341 342 343 344 345 346 347 348
# Determine architecture of the machine
IF (CMAKE_SIZEOF_VOID_P EQUAL 8)
	SET(GIT_ARCH_64 1)
ELSEIF (CMAKE_SIZEOF_VOID_P EQUAL 4)
	SET(GIT_ARCH_32 1)
ELSEIF (CMAKE_SIZEOF_VOID_P)
	MESSAGE(FATAL_ERROR "Unsupported architecture (pointer size is ${CMAKE_SIZEOF_VOID_P} bytes)")
ELSE()
	MESSAGE(FATAL_ERROR "Unsupported architecture (CMAKE_SIZEOF_VOID_P is unset)")
ENDIF()

CONFIGURE_FILE(features.h.in git2/sys/features.h)

349 350
IDE_SPLIT_SOURCES(git2internal)
LIST(APPEND LIBGIT2_OBJECTS $<TARGET_OBJECTS:git2internal>)
351

352 353
TARGET_INCLUDE_DIRECTORIES(git2internal PRIVATE ${LIBGIT2_INCLUDES} PUBLIC ${libgit2_SOURCE_DIR}/include)
TARGET_INCLUDE_DIRECTORIES(git2internal SYSTEM PRIVATE ${LIBGIT2_SYSTEM_INCLUDES})
354

355
SET(LIBGIT2_OBJECTS ${LIBGIT2_OBJECTS} PARENT_SCOPE)
356
SET(LIBGIT2_INCLUDES ${LIBGIT2_INCLUDES} PARENT_SCOPE)
357
SET(LIBGIT2_SYSTEM_INCLUDES ${LIBGIT2_SYSTEM_INCLUDES} PARENT_SCOPE)
358 359
SET(LIBGIT2_LIBS ${LIBGIT2_LIBS} PARENT_SCOPE)

360 361 362 363 364 365 366
IF(XCODE_VERSION)
	# This is required for Xcode to actually link the libgit2 library
	# when using only object libraries.
	FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/dummy.c "")
	LIST(APPEND LIBGIT2_OBJECTS ${CMAKE_CURRENT_BINARY_DIR}/dummy.c)
ENDIF()

367
# Compile and link libgit2
368
ADD_LIBRARY(git2 ${WIN_RC} ${LIBGIT2_OBJECTS})
369 370
TARGET_LINK_LIBRARIES(git2 ${LIBGIT2_LIBS})

371
SET_TARGET_PROPERTIES(git2 PROPERTIES C_STANDARD 90)
372 373 374
SET_TARGET_PROPERTIES(git2 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
SET_TARGET_PROPERTIES(git2 PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
SET_TARGET_PROPERTIES(git2 PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
375 376 377 378 379 380 381 382 383

# Workaround for Cmake bug #0011240 (see http://public.kitware.com/Bug/view.php?id=11240)
# Win64+MSVC+static libs = linker error
IF(MSVC AND GIT_ARCH_64 AND NOT BUILD_SHARED_LIBS)
  SET_TARGET_PROPERTIES(git2 PROPERTIES STATIC_LIBRARY_FLAGS "/MACHINE:x64")
ENDIF()

IDE_SPLIT_SOURCES(git2)

384 385 386 387
if(SONAME)
	set_target_properties(git2 PROPERTIES VERSION ${libgit2_VERSION})
	set_target_properties(git2 PROPERTIES SOVERSION "${libgit2_VERSION_MAJOR}.${libgit2_VERSION_MINOR}")
	if(LIBGIT2_FILENAME)
388
		target_compile_definitions(git2internal PRIVATE LIBGIT2_FILENAME=\"${LIBGIT2_FILENAME}\")
389 390 391 392 393
		set_target_properties(git2 PROPERTIES OUTPUT_NAME ${LIBGIT2_FILENAME})
	elseif(DEFINED LIBGIT2_PREFIX)
		set_target_properties(git2 PROPERTIES PREFIX "${LIBGIT2_PREFIX}")
	endif()
endif()
394

395
PKG_BUILD_CONFIG(NAME libgit2
396
	VERSION ${libgit2_VERSION}
397 398 399 400 401
	DESCRIPTION "The git library, take 2"
	LIBS_SELF git2
	PRIVATE_LIBS ${LIBGIT2_PC_LIBS}
	REQUIRES ${LIBGIT2_PC_REQUIRES}
)
402 403 404 405 406 407 408 409 410

IF (MSVC_IDE)
   # Precompiled headers
   SET_TARGET_PROPERTIES(git2 PROPERTIES COMPILE_FLAGS "/Yuprecompiled.h /FIprecompiled.h")
   SET_SOURCE_FILES_PROPERTIES(win32/precompiled.c COMPILE_FLAGS "/Ycprecompiled.h")
ENDIF ()

# Install
INSTALL(TARGETS git2
411 412 413
	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
	ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
414
)
415 416
INSTALL(DIRECTORY ${libgit2_SOURCE_DIR}/include/git2 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
INSTALL(FILES ${libgit2_SOURCE_DIR}/include/git2.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})