@@ -184,6 +184,164 @@ SET(LIBGIT2_VERSION_STRING "${LIBGIT2_VERSION_MAJOR}.${LIBGIT2_VERSION_MINOR}.${
184184FILE (STRINGS "include/git2/version.h" GIT2_HEADER_SOVERSION REGEX "^#define LIBGIT2_SOVERSION [0-9]+$" )
185185STRING (REGEX REPLACE "^.*LIBGIT2_SOVERSION ([0-9]+)$" "\\ 1" LIBGIT2_SOVERSION "${GIT2_HEADER_SOVERSION} " )
186186
187+ # Enable tracing
188+ IF (ENABLE_TRACE STREQUAL "ON" )
189+ SET (GIT_TRACE 1)
190+ ENDIF ()
191+
192+ # Platform specific compilation flags
193+ IF (MSVC )
194+ ADD_DEFINITIONS (-D_SCL_SECURE_NO_WARNINGS)
195+ ADD_DEFINITIONS (-D_CRT_SECURE_NO_DEPRECATE)
196+ ADD_DEFINITIONS (-D_CRT_NONSTDC_NO_DEPRECATE)
197+
198+ STRING (REPLACE "/Zm1000" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS} " )
199+
200+ # /GF - String pooling
201+ # /MP - Parallel build
202+ SET (CMAKE_C_FLAGS "/GF /MP /nologo ${CMAKE_C_FLAGS} " )
203+
204+ IF (STDCALL)
205+ # /Gz - stdcall calling convention
206+ SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gz" )
207+ ENDIF ()
208+
209+ IF (STATIC_CRT)
210+ SET (CRT_FLAG_DEBUG "/MTd" )
211+ SET (CRT_FLAG_RELEASE "/MT" )
212+ ELSE ()
213+ SET (CRT_FLAG_DEBUG "/MDd" )
214+ SET (CRT_FLAG_RELEASE "/MD" )
215+ ENDIF ()
216+
217+ IF (MSVC_CRTDBG)
218+ SET (GIT_MSVC_CRTDBG 1)
219+ SET (CRT_FLAG_DEBUG "${CRT_FLAG_DEBUG} " )
220+ SET (CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} " "Dbghelp.lib" )
221+ ENDIF ()
222+
223+ # /Zi - Create debugging information
224+ # /Od - Disable optimization
225+ # /D_DEBUG - #define _DEBUG
226+ # /MTd - Statically link the multithreaded debug version of the CRT
227+ # /MDd - Dynamically link the multithreaded debug version of the CRT
228+ # /RTC1 - Run time checks
229+ SET (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Zi /Od /D_DEBUG /RTC1 ${CRT_FLAG_DEBUG} " )
230+
231+ # /DNDEBUG - Disables asserts
232+ # /MT - Statically link the multithreaded release version of the CRT
233+ # /MD - Dynamically link the multithreaded release version of the CRT
234+ # /O2 - Optimize for speed
235+ # /Oy - Enable frame pointer omission (FPO) (otherwise CMake will automatically turn it off)
236+ # /GL - Link time code generation (whole program optimization)
237+ # /Gy - Function-level linking
238+ SET (CMAKE_C_FLAGS_RELEASE "/DNDEBUG /O2 /Oy /GL /Gy ${CRT_FLAG_RELEASE} " )
239+
240+ # /Oy- - Disable frame pointer omission (FPO)
241+ SET (CMAKE_C_FLAGS_RELWITHDEBINFO "/DNDEBUG /Zi /O2 /Oy- /GL /Gy ${CRT_FLAG_RELEASE} " )
242+
243+ # /O1 - Optimize for size
244+ SET (CMAKE_C_FLAGS_MINSIZEREL "/DNDEBUG /O1 /Oy /GL /Gy ${CRT_FLAG_RELEASE} " )
245+
246+ # /DYNAMICBASE - Address space load randomization (ASLR)
247+ # /NXCOMPAT - Data execution prevention (DEP)
248+ # /LARGEADDRESSAWARE - >2GB user address space on x86
249+ # /VERSION - Embed version information in PE header
250+ SET (CMAKE_EXE_LINKER_FLAGS "/DYNAMICBASE /NXCOMPAT /LARGEADDRESSAWARE /VERSION:${LIBGIT2_VERSION_MAJOR} .${LIBGIT2_VERSION_MINOR} " )
251+
252+ # /DEBUG - Create a PDB
253+ # /LTCG - Link time code generation (whole program optimization)
254+ # /OPT:REF /OPT:ICF - Fold out duplicate code at link step
255+ # /INCREMENTAL:NO - Required to use /LTCG
256+ # /DEBUGTYPE:cv,fixup - Additional data embedded in the PDB (requires /INCREMENTAL:NO, so not on for Debug)
257+ SET (CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" )
258+ SET (CMAKE_EXE_LINKER_FLAGS_RELEASE "/RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO" )
259+ SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/DEBUG /RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO /DEBUGTYPE:cv,fixup" )
260+ SET (CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "/RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO" )
261+
262+ # Same linker settings for DLL as EXE
263+ SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} " )
264+ SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} " )
265+ SET (CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} " )
266+ SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} " )
267+ SET (CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} " )
268+
269+ SET (WIN_RC "src/win32/git2.rc" )
270+ ELSE ()
271+ SET (CMAKE_C_FLAGS "-D_GNU_SOURCE ${CMAKE_C_FLAGS} " )
272+
273+ ADD_C_FLAG_IF_SUPPORTED(-Wall)
274+ ADD_C_FLAG_IF_SUPPORTED(-Wextra)
275+
276+ IF (CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)" )
277+ SET (CMAKE_C_FLAGS "-std=c99 -D_POSIX_C_SOURCE=200112L -D__EXTENSIONS__ -D_POSIX_PTHREAD_SEMANTICS ${CMAKE_C_FLAGS} " )
278+ ENDIF ()
279+
280+ SET (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG -O0" )
281+
282+ IF (MINGW OR MSYS) # MinGW and MSYS always do PIC and complain if we tell them to
283+ STRING (REGEX REPLACE "-fPIC" "" CMAKE_SHARED_LIBRARY_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} " )
284+ ELSEIF (BUILD_SHARED_LIBS )
285+ ADD_C_FLAG_IF_SUPPORTED(-fvisibility=hidden)
286+
287+ SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC" )
288+ ENDIF ()
289+
290+ IF (MINGW)
291+ # MinGW >= 3.14 uses the C99-style stdio functions
292+ # automatically, but forks like mingw-w64 still want
293+ # us to define this in order to use them
294+ ADD_DEFINITIONS (-D__USE_MINGW_ANSI_STDIO=1)
295+ ENDIF ()
296+
297+ ADD_C_FLAG_IF_SUPPORTED(-Wdocumentation)
298+ ADD_C_FLAG_IF_SUPPORTED(-Wno-missing-field-initializers)
299+ ADD_C_FLAG_IF_SUPPORTED(-Wstrict-aliasing=2)
300+ ADD_C_FLAG_IF_SUPPORTED(-Wstrict-prototypes)
301+ ADD_C_FLAG_IF_SUPPORTED(-Wdeclaration-after-statement)
302+ ADD_C_FLAG_IF_SUPPORTED(-Wno-unused-const-variable )
303+ ADD_C_FLAG_IF_SUPPORTED(-Wno-unused-function)
304+
305+ IF (APPLE ) # Apple deprecated OpenSSL
306+ ADD_C_FLAG_IF_SUPPORTED(-Wno-deprecated-declarations)
307+ ENDIF ()
308+
309+ IF (PROFILE)
310+ SET (CMAKE_C_FLAGS "-pg ${CMAKE_C_FLAGS} " )
311+ SET (CMAKE_EXE_LINKER_FLAGS "-pg ${CMAKE_EXE_LINKER_FLAGS} " )
312+ ENDIF ()
313+ ENDIF ()
314+
315+ CHECK_SYMBOL_EXISTS(regcomp_l "regex.h;xlocale.h" HAVE_REGCOMP_L)
316+ IF (HAVE_REGCOMP_L)
317+ SET (GIT_USE_REGCOMP_L 1)
318+ ENDIF ()
319+
320+ CHECK_FUNCTION_EXISTS(futimens HAVE_FUTIMENS)
321+ IF (HAVE_FUTIMENS)
322+ SET (GIT_USE_FUTIMENS 1)
323+ ENDIF ()
324+
325+ CHECK_FUNCTION_EXISTS(qsort_r HAVE_QSORT_R)
326+ IF (HAVE_QSORT_R)
327+ ADD_DEFINITIONS (-DHAVE_QSORT_R)
328+ ENDIF ()
329+
330+ CHECK_FUNCTION_EXISTS(qsort_s HAVE_QSORT_S)
331+ IF (HAVE_QSORT_S)
332+ ADD_DEFINITIONS (-DHAVE_QSORT_S)
333+ ENDIF ()
334+
335+ IF ( NOT CMAKE_CONFIGURATION_TYPES )
336+ # Build Debug by default
337+ IF (NOT CMAKE_BUILD_TYPE )
338+ SET (CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
339+ ENDIF ()
340+ ELSE ()
341+ # Using a multi-configuration generator eg MSVC or Xcode
342+ # that uses CMAKE_CONFIGURATION_TYPES and not CMAKE_BUILD_TYPE
343+ ENDIF ()
344+
187345# Find required dependencies
188346
189347IF (WIN32 )
@@ -315,10 +473,6 @@ ELSE()
315473 FILE (GLOB SRC_SHA1 src/hash/hash_generic.c)
316474ENDIF ()
317475
318- # Enable tracing
319- IF (ENABLE_TRACE STREQUAL "ON" )
320- SET (GIT_TRACE 1)
321- ENDIF ()
322476
323477# Include POSIX regex when it is required
324478IF (WIN32 OR AMIGA OR CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)" )
@@ -396,159 +550,6 @@ IF (ICONV_FOUND)
396550 LIST (APPEND LIBGIT2_PC_LIBS ${ICONV_LIBRARIES} )
397551ENDIF ()
398552
399- # Platform specific compilation flags
400- IF (MSVC )
401- ADD_DEFINITIONS (-D_SCL_SECURE_NO_WARNINGS)
402- ADD_DEFINITIONS (-D_CRT_SECURE_NO_DEPRECATE)
403- ADD_DEFINITIONS (-D_CRT_NONSTDC_NO_DEPRECATE)
404-
405- STRING (REPLACE "/Zm1000" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS} " )
406-
407- # /GF - String pooling
408- # /MP - Parallel build
409- SET (CMAKE_C_FLAGS "/GF /MP /nologo ${CMAKE_C_FLAGS} " )
410-
411- IF (STDCALL)
412- # /Gz - stdcall calling convention
413- SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gz" )
414- ENDIF ()
415-
416- IF (STATIC_CRT)
417- SET (CRT_FLAG_DEBUG "/MTd" )
418- SET (CRT_FLAG_RELEASE "/MT" )
419- ELSE ()
420- SET (CRT_FLAG_DEBUG "/MDd" )
421- SET (CRT_FLAG_RELEASE "/MD" )
422- ENDIF ()
423-
424- IF (MSVC_CRTDBG)
425- SET (GIT_MSVC_CRTDBG 1)
426- SET (CRT_FLAG_DEBUG "${CRT_FLAG_DEBUG} " )
427- SET (CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} " "Dbghelp.lib" )
428- ENDIF ()
429-
430- # /Zi - Create debugging information
431- # /Od - Disable optimization
432- # /D_DEBUG - #define _DEBUG
433- # /MTd - Statically link the multithreaded debug version of the CRT
434- # /MDd - Dynamically link the multithreaded debug version of the CRT
435- # /RTC1 - Run time checks
436- SET (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Zi /Od /D_DEBUG /RTC1 ${CRT_FLAG_DEBUG} " )
437-
438- # /DNDEBUG - Disables asserts
439- # /MT - Statically link the multithreaded release version of the CRT
440- # /MD - Dynamically link the multithreaded release version of the CRT
441- # /O2 - Optimize for speed
442- # /Oy - Enable frame pointer omission (FPO) (otherwise CMake will automatically turn it off)
443- # /GL - Link time code generation (whole program optimization)
444- # /Gy - Function-level linking
445- SET (CMAKE_C_FLAGS_RELEASE "/DNDEBUG /O2 /Oy /GL /Gy ${CRT_FLAG_RELEASE} " )
446-
447- # /Oy- - Disable frame pointer omission (FPO)
448- SET (CMAKE_C_FLAGS_RELWITHDEBINFO "/DNDEBUG /Zi /O2 /Oy- /GL /Gy ${CRT_FLAG_RELEASE} " )
449-
450- # /O1 - Optimize for size
451- SET (CMAKE_C_FLAGS_MINSIZEREL "/DNDEBUG /O1 /Oy /GL /Gy ${CRT_FLAG_RELEASE} " )
452-
453- # /DYNAMICBASE - Address space load randomization (ASLR)
454- # /NXCOMPAT - Data execution prevention (DEP)
455- # /LARGEADDRESSAWARE - >2GB user address space on x86
456- # /VERSION - Embed version information in PE header
457- SET (CMAKE_EXE_LINKER_FLAGS "/DYNAMICBASE /NXCOMPAT /LARGEADDRESSAWARE /VERSION:${LIBGIT2_VERSION_MAJOR} .${LIBGIT2_VERSION_MINOR} " )
458-
459- # /DEBUG - Create a PDB
460- # /LTCG - Link time code generation (whole program optimization)
461- # /OPT:REF /OPT:ICF - Fold out duplicate code at link step
462- # /INCREMENTAL:NO - Required to use /LTCG
463- # /DEBUGTYPE:cv,fixup - Additional data embedded in the PDB (requires /INCREMENTAL:NO, so not on for Debug)
464- SET (CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" )
465- SET (CMAKE_EXE_LINKER_FLAGS_RELEASE "/RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO" )
466- SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/DEBUG /RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO /DEBUGTYPE:cv,fixup" )
467- SET (CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "/RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO" )
468-
469- # Same linker settings for DLL as EXE
470- SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} " )
471- SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} " )
472- SET (CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} " )
473- SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} " )
474- SET (CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} " )
475-
476- SET (WIN_RC "src/win32/git2.rc" )
477- ELSE ()
478- SET (CMAKE_C_FLAGS "-D_GNU_SOURCE ${CMAKE_C_FLAGS} " )
479-
480- ADD_C_FLAG_IF_SUPPORTED(-Wall)
481- ADD_C_FLAG_IF_SUPPORTED(-Wextra)
482-
483- IF (CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)" )
484- SET (CMAKE_C_FLAGS "-std=c99 -D_POSIX_C_SOURCE=200112L -D__EXTENSIONS__ -D_POSIX_PTHREAD_SEMANTICS ${CMAKE_C_FLAGS} " )
485- ENDIF ()
486-
487- SET (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG -O0" )
488-
489- IF (MINGW OR MSYS) # MinGW and MSYS always do PIC and complain if we tell them to
490- STRING (REGEX REPLACE "-fPIC" "" CMAKE_SHARED_LIBRARY_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} " )
491- ELSEIF (BUILD_SHARED_LIBS )
492- ADD_C_FLAG_IF_SUPPORTED(-fvisibility=hidden)
493-
494- SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC" )
495- ENDIF ()
496-
497- IF (MINGW)
498- # MinGW >= 3.14 uses the C99-style stdio functions
499- # automatically, but forks like mingw-w64 still want
500- # us to define this in order to use them
501- ADD_DEFINITIONS (-D__USE_MINGW_ANSI_STDIO=1)
502- ENDIF ()
503-
504- ADD_C_FLAG_IF_SUPPORTED(-Wdocumentation)
505- ADD_C_FLAG_IF_SUPPORTED(-Wno-missing-field-initializers)
506- ADD_C_FLAG_IF_SUPPORTED(-Wstrict-aliasing=2)
507- ADD_C_FLAG_IF_SUPPORTED(-Wstrict-prototypes)
508- ADD_C_FLAG_IF_SUPPORTED(-Wdeclaration-after-statement)
509- ADD_C_FLAG_IF_SUPPORTED(-Wno-unused-const-variable )
510- ADD_C_FLAG_IF_SUPPORTED(-Wno-unused-function)
511-
512- IF (APPLE ) # Apple deprecated OpenSSL
513- ADD_C_FLAG_IF_SUPPORTED(-Wno-deprecated-declarations)
514- ENDIF ()
515-
516- IF (PROFILE)
517- SET (CMAKE_C_FLAGS "-pg ${CMAKE_C_FLAGS} " )
518- SET (CMAKE_EXE_LINKER_FLAGS "-pg ${CMAKE_EXE_LINKER_FLAGS} " )
519- ENDIF ()
520- ENDIF ()
521-
522- CHECK_SYMBOL_EXISTS(regcomp_l "regex.h;xlocale.h" HAVE_REGCOMP_L)
523- IF (HAVE_REGCOMP_L)
524- SET (GIT_USE_REGCOMP_L 1)
525- ENDIF ()
526-
527- CHECK_FUNCTION_EXISTS(futimens HAVE_FUTIMENS)
528- IF (HAVE_FUTIMENS)
529- SET (GIT_USE_FUTIMENS 1)
530- ENDIF ()
531-
532- CHECK_FUNCTION_EXISTS(qsort_r HAVE_QSORT_R)
533- IF (HAVE_QSORT_R)
534- ADD_DEFINITIONS (-DHAVE_QSORT_R)
535- ENDIF ()
536-
537- CHECK_FUNCTION_EXISTS(qsort_s HAVE_QSORT_S)
538- IF (HAVE_QSORT_S)
539- ADD_DEFINITIONS (-DHAVE_QSORT_S)
540- ENDIF ()
541-
542- IF ( NOT CMAKE_CONFIGURATION_TYPES )
543- # Build Debug by default
544- IF (NOT CMAKE_BUILD_TYPE )
545- SET (CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
546- ENDIF ()
547- ELSE ()
548- # Using a multi-configuration generator eg MSVC or Xcode
549- # that uses CMAKE_CONFIGURATION_TYPES and not CMAKE_BUILD_TYPE
550- ENDIF ()
551-
552553IF (SECURITY_FOUND)
553554 SET (GIT_SECURE_TRANSPORT 1)
554555 SET (GIT_HTTPS 1)
0 commit comments