2021-08-21 18:03:30 +00:00
cmake_minimum_required ( VERSION 3.7 )
2023-01-23 18:40:54 +00:00
project ( cmark VERSION 0.30.3 )
2016-06-27 18:36:00 +00:00
2015-02-19 18:34:34 +00:00
include ( "FindAsan.cmake" )
2019-12-22 18:29:46 +00:00
include ( GNUInstallDirs )
2014-10-26 05:47:31 +00:00
2014-11-07 06:33:38 +00:00
if ( "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}" )
message ( FATAL_ERROR "Do not build in-source.\nPlease remove CMakeCache.txt and the CMakeFiles/ directory.\nThen: mkdir build ; cd build ; cmake .. ; make" )
endif ( )
2015-08-11 17:30:39 +00:00
option ( CMARK_TESTS "Build cmark tests and enable testing" ON )
2017-01-04 20:12:16 +00:00
option ( CMARK_STATIC "Build static libcmark library" ON )
option ( CMARK_SHARED "Build shared libcmark library" ON )
2017-06-26 19:05:30 +00:00
option ( CMARK_LIB_FUZZER "Build libFuzzer fuzzing harness" OFF )
2015-08-11 17:30:39 +00:00
build: cleanup CMake (#319)
* build: inline a variable
* build: use `LINKER_LANGUAGE` property for C++ runtime
Rather than explicitly name the C++ runtime, use the `LINKER_LANGUAGE`
property to use the driver to spell the C++ runtime appropriately.
* build: use CMake to control C standard
Rather than use compiler specific flags to control the language
standard, indicate to CMake the desired standard.
* build: use the correct variable
These flags are being applied to the *C* compiler, check the C compiler,
not the C++ compiler.
* build: loosen the compiler check
This loosens the compiler identifier check to enable matching AppleClang
which is the identifier for the Xcode compiler.
* build: hoist shared flags to top-level CMakeLists
This hoists the common shared flags handling to the top-level CMakeLists
from sub-layers. This prevents the duplication of the handling.
* build: remove duplicated flags
This is unnecessary, `/TP` is forced on all MSVC builds, no need to
duplicate the flag for older versions.
* build: loosen C compiler identifier check
Loosen the check to a match rather than equality check, this allows it
to match AppleClang which is the identifier for the Apple vended clang
compiler part of Xcode.
* build: use `add_compile_options`
Use `add_compile_options` rather than modify `CMAKE_C_FLAGS`. The
latter is meant to be only modified by the user, not the package
developer.
* build: hoist sanitizer flags to global state
This moves the CMAKE_C_FLAGS handling to the top-level and uses
`add_compile_options` rather than modifying the user controlled flags.
* build: hoist `-fvisibilty` flags to top-level
These are global settings, hoist them to the top level.
* build: hoist the debug flag handling
Use a generator expression and hoist the flag handling for the debug
build.
* build: hoist the profile flag handling
This is a global flag, hoist it to the top level and use
`add_compile_options` rather than modify the user controlled flags.
* build: remove incorrect variable handling
This seemed to be attempting to set the linker not the linker flags for
the profile configuration. This variable is not used, do not set it.
* build: remove unused CMake includes
2019-12-22 18:21:35 +00:00
if ( NOT MSVC )
set ( CMAKE_C_STANDARD 99 )
set ( CMAKE_C_STANDARD_REQUIRED YES )
set ( CMAKE_C_EXTENSIONS NO )
endif ( )
2019-12-22 19:17:48 +00:00
set ( CMAKE_INCLUDE_CURRENT_DIR ON )
2019-05-29 16:28:07 +00:00
# The Linux modules distributed with CMake add "-rdynamic" to the build flags
# which is incompatible with static linking under certain configurations.
# Unsetting CMAKE_SHARED_LIBRARY_LINK_C_FLAGS ensures this does not happen.
if ( CMARK_STATIC AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux" )
SET ( CMAKE_SHARED_LIBRARY_LINK_C_FLAGS )
endif ( )
build: cleanup CMake (#319)
* build: inline a variable
* build: use `LINKER_LANGUAGE` property for C++ runtime
Rather than explicitly name the C++ runtime, use the `LINKER_LANGUAGE`
property to use the driver to spell the C++ runtime appropriately.
* build: use CMake to control C standard
Rather than use compiler specific flags to control the language
standard, indicate to CMake the desired standard.
* build: use the correct variable
These flags are being applied to the *C* compiler, check the C compiler,
not the C++ compiler.
* build: loosen the compiler check
This loosens the compiler identifier check to enable matching AppleClang
which is the identifier for the Xcode compiler.
* build: hoist shared flags to top-level CMakeLists
This hoists the common shared flags handling to the top-level CMakeLists
from sub-layers. This prevents the duplication of the handling.
* build: remove duplicated flags
This is unnecessary, `/TP` is forced on all MSVC builds, no need to
duplicate the flag for older versions.
* build: loosen C compiler identifier check
Loosen the check to a match rather than equality check, this allows it
to match AppleClang which is the identifier for the Apple vended clang
compiler part of Xcode.
* build: use `add_compile_options`
Use `add_compile_options` rather than modify `CMAKE_C_FLAGS`. The
latter is meant to be only modified by the user, not the package
developer.
* build: hoist sanitizer flags to global state
This moves the CMAKE_C_FLAGS handling to the top-level and uses
`add_compile_options` rather than modifying the user controlled flags.
* build: hoist `-fvisibilty` flags to top-level
These are global settings, hoist them to the top level.
* build: hoist the debug flag handling
Use a generator expression and hoist the flag handling for the debug
build.
* build: hoist the profile flag handling
This is a global flag, hoist it to the top level and use
`add_compile_options` rather than modify the user controlled flags.
* build: remove incorrect variable handling
This seemed to be attempting to set the linker not the linker flags for
the profile configuration. This variable is not used, do not set it.
* build: remove unused CMake includes
2019-12-22 18:21:35 +00:00
# Check integrity of node structure when compiled as debug
2019-12-26 21:41:10 +00:00
add_compile_options ( $< $<CONFIG:Debug > :-DCMARK_DEBUG_NODES> )
build: cleanup CMake (#319)
* build: inline a variable
* build: use `LINKER_LANGUAGE` property for C++ runtime
Rather than explicitly name the C++ runtime, use the `LINKER_LANGUAGE`
property to use the driver to spell the C++ runtime appropriately.
* build: use CMake to control C standard
Rather than use compiler specific flags to control the language
standard, indicate to CMake the desired standard.
* build: use the correct variable
These flags are being applied to the *C* compiler, check the C compiler,
not the C++ compiler.
* build: loosen the compiler check
This loosens the compiler identifier check to enable matching AppleClang
which is the identifier for the Xcode compiler.
* build: hoist shared flags to top-level CMakeLists
This hoists the common shared flags handling to the top-level CMakeLists
from sub-layers. This prevents the duplication of the handling.
* build: remove duplicated flags
This is unnecessary, `/TP` is forced on all MSVC builds, no need to
duplicate the flag for older versions.
* build: loosen C compiler identifier check
Loosen the check to a match rather than equality check, this allows it
to match AppleClang which is the identifier for the Apple vended clang
compiler part of Xcode.
* build: use `add_compile_options`
Use `add_compile_options` rather than modify `CMAKE_C_FLAGS`. The
latter is meant to be only modified by the user, not the package
developer.
* build: hoist sanitizer flags to global state
This moves the CMAKE_C_FLAGS handling to the top-level and uses
`add_compile_options` rather than modifying the user controlled flags.
* build: hoist `-fvisibilty` flags to top-level
These are global settings, hoist them to the top level.
* build: hoist the debug flag handling
Use a generator expression and hoist the flag handling for the debug
build.
* build: hoist the profile flag handling
This is a global flag, hoist it to the top level and use
`add_compile_options` rather than modify the user controlled flags.
* build: remove incorrect variable handling
This seemed to be attempting to set the linker not the linker flags for
the profile configuration. This variable is not used, do not set it.
* build: remove unused CMake includes
2019-12-22 18:21:35 +00:00
2021-07-06 17:39:57 +00:00
# In order to maintain compatibility with older platforms which may not have a
# recent version of CMake (i.e. are running CMake <3.3), we cannot simply use
# the `add_compile_options` with a generator expression. This uses the
# `target_compile_options` with `PRIVATE` to add the flags only to the targets
# so that CMark may be used in projects with non-C languages.
function ( cmark_add_compile_options target )
if ( MSVC )
target_compile_options ( ${ target } PRIVATE /W4 /wd4706 )
if ( MSVC_VERSION LESS 1800 )
target_compile_options ( ${ target } PRIVATE /TP )
endif ( )
target_compile_definitions ( ${ target } PRIVATE _CRT_SECURE_NO_WARNINGS )
else ( )
2022-01-24 11:23:31 +00:00
target_compile_options ( ${ target } PRIVATE
- W a l l - W e x t r a - p e d a n t i c
$ < $ < C O M P I L E _ L A N G U A G E : C > : - W s t r i c t - p r o t o t y p e s > )
2021-07-06 17:39:57 +00:00
endif ( )
if ( CMAKE_BUILD_TYPE MATCHES profile )
target_compile_options ( ${ target } PRIVATE -pg )
endif ( )
if ( CMAKE_BUILD_TYPE MATCHES ubsan )
target_compile_options ( ${ target } PRIVATE -fsanitize=undefined )
endif ( )
if ( CMARK_LIB_FUZZER )
target_compile_options ( ${ target } PRIVATE -fsanitize-coverage=trace-pc-guard )
endif ( )
endfunction ( )
build: cleanup CMake (#319)
* build: inline a variable
* build: use `LINKER_LANGUAGE` property for C++ runtime
Rather than explicitly name the C++ runtime, use the `LINKER_LANGUAGE`
property to use the driver to spell the C++ runtime appropriately.
* build: use CMake to control C standard
Rather than use compiler specific flags to control the language
standard, indicate to CMake the desired standard.
* build: use the correct variable
These flags are being applied to the *C* compiler, check the C compiler,
not the C++ compiler.
* build: loosen the compiler check
This loosens the compiler identifier check to enable matching AppleClang
which is the identifier for the Xcode compiler.
* build: hoist shared flags to top-level CMakeLists
This hoists the common shared flags handling to the top-level CMakeLists
from sub-layers. This prevents the duplication of the handling.
* build: remove duplicated flags
This is unnecessary, `/TP` is forced on all MSVC builds, no need to
duplicate the flag for older versions.
* build: loosen C compiler identifier check
Loosen the check to a match rather than equality check, this allows it
to match AppleClang which is the identifier for the Apple vended clang
compiler part of Xcode.
* build: use `add_compile_options`
Use `add_compile_options` rather than modify `CMAKE_C_FLAGS`. The
latter is meant to be only modified by the user, not the package
developer.
* build: hoist sanitizer flags to global state
This moves the CMAKE_C_FLAGS handling to the top-level and uses
`add_compile_options` rather than modifying the user controlled flags.
* build: hoist `-fvisibilty` flags to top-level
These are global settings, hoist them to the top level.
* build: hoist the debug flag handling
Use a generator expression and hoist the flag handling for the debug
build.
* build: hoist the profile flag handling
This is a global flag, hoist it to the top level and use
`add_compile_options` rather than modify the user controlled flags.
* build: remove incorrect variable handling
This seemed to be attempting to set the linker not the linker flags for
the profile configuration. This variable is not used, do not set it.
* build: remove unused CMake includes
2019-12-22 18:21:35 +00:00
2014-11-07 17:31:35 +00:00
add_subdirectory ( src )
2017-11-18 15:08:55 +00:00
if ( CMARK_TESTS AND ( CMARK_SHARED OR CMARK_STATIC ) )
2015-08-11 17:30:39 +00:00
add_subdirectory ( api_test )
endif ( )
2019-12-22 18:32:57 +00:00
# TODO(compnerd) should this be enabled for MinGW, which sets CMAKE_SYSTEM_NAME
# to Windows, but defines `MINGW`.
if ( NOT CMAKE_SYSTEM_NAME STREQUAL Windows )
add_subdirectory ( man )
endif ( )
2015-08-11 17:30:39 +00:00
if ( CMARK_TESTS )
enable_testing ( )
add_subdirectory ( test testdir )
endif ( )
2014-11-12 15:43:17 +00:00
2014-11-10 21:45:16 +00:00
if ( NOT CMAKE_BUILD_TYPE )
set ( CMAKE_BUILD_TYPE "Release" CACHE STRING
2015-05-29 17:15:29 +00:00
" C h o o s e t h e t y p e o f b u i l d , o p t i o n s a r e : D e b u g P r o f i l e R e l e a s e A s a n U b s a n . " F O R C E )
2014-11-10 21:45:16 +00:00
endif ( NOT CMAKE_BUILD_TYPE )