Skip to content

Commit f5016c2

Browse files
Merge branch 'QuietMisdreavus/more-build-tweaks' into QuietMisdreavus/swift-build
2 parents 685699f + 87fa5e7 commit f5016c2

14 files changed

+127
-103
lines changed

CMakeLists.txt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.0)
1+
cmake_minimum_required(VERSION 3.12)
22
project(cmark-gfm)
33

44
set(PROJECT_VERSION_MAJOR 0)
@@ -20,6 +20,17 @@ option(CMARK_SHARED "Build shared libcmark-gfm library" ON)
2020
option(CMARK_LIB_FUZZER "Build libFuzzer fuzzing harness" OFF)
2121
option(CMARK_THREADING "Add locks around static accesses" OFF)
2222

23+
# set a required C standard so we can load stdbool.h
24+
if(MSVC)
25+
set(CMAKE_C_STANDARD 11)
26+
else()
27+
set(CMAKE_C_STANDARD 99)
28+
endif()
29+
set(CMAKE_C_STANDARD_REQUIRED YES)
30+
31+
# Use CMake's generated headers instead of the Swift package prebuilt ones
32+
add_compile_definitions(CMARK_USE_CMAKE_HEADERS)
33+
2334
add_subdirectory(src)
2435
add_subdirectory(extensions)
2536
if(CMARK_TESTS AND (CMARK_SHARED OR CMARK_STATIC))

api_test/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ add_executable(api_test
66
)
77
include_directories(
88
${PROJECT_SOURCE_DIR}/src/include
9-
${PROJECT_BINARY_DIR}/src/include
9+
${PROJECT_BINARY_DIR}/src
1010
${PROJECT_SOURCE_DIR}/extensions/include
11-
${PROJECT_BINARY_DIR}/extensions/include
11+
${PROJECT_BINARY_DIR}/extensions
1212
)
1313
if(CMARK_SHARED)
1414
target_link_libraries(api_test libcmark-gfm-extensions libcmark-gfm)

extensions/CMakeLists.txt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ set(LIBRARY_SOURCES
1515

1616
include_directories(
1717
${PROJECT_SOURCE_DIR}/src/include
18-
${PROJECT_BINARY_DIR}/src/include
18+
${PROJECT_BINARY_DIR}/src
1919
)
2020

2121
include (GenerateExportHeader)
@@ -86,7 +86,7 @@ install(TARGETS ${CMARK_INSTALL}
8686
if (CMARK_SHARED OR CMARK_STATIC)
8787
install(FILES
8888
${CMAKE_CURRENT_SOURCE_DIR}/include/cmark-gfm-core-extensions.h
89-
${CMAKE_CURRENT_SOURCE_DIR}/include/cmark-gfm-extensions_export.h
89+
${CMAKE_CURRENT_SOURCE_DIR}/include/extensions-export.h
9090
DESTINATION include
9191
)
9292

@@ -98,14 +98,10 @@ include(CheckIncludeFile)
9898
include(CheckCSourceCompiles)
9999
include(CheckCSourceRuns)
100100
include(CheckSymbolExists)
101-
CHECK_INCLUDE_FILE(stdbool.h HAVE_STDBOOL_H)
101+
CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
102102
CHECK_C_SOURCE_COMPILES(
103103
"int main() { __builtin_expect(0,0); return 0; }"
104104
HAVE___BUILTIN_EXPECT)
105-
CHECK_C_SOURCE_COMPILES("
106-
int f(void) __attribute__ (());
107-
int main() { return 0; }
108-
" HAVE___ATTRIBUTE__)
109105

110106
# Always compile with warnings
111107
if(MSVC)

extensions/include/cmark-gfm-core-extensions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ extern "C" {
66
#endif
77

88
#include "cmark-gfm-extension_api.h"
9-
#include "cmark-gfm-extensions_export.h"
9+
#include "extensions-export.h"
1010
#include "cmark-gfm_config.h" // for bool
1111
#include <stdint.h>
1212

extensions/include/cmark-gfm-extensions_export.h

Lines changed: 0 additions & 42 deletions
This file was deleted.
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#ifndef CMARK_GFM_EXTENSIONS_EXPORT_H
2+
#define CMARK_GFM_EXTENSIONS_EXPORT_H
3+
4+
#ifdef CMARK_USE_CMAKE_HEADERS
5+
// if the CMake config header exists, use that instead of this Swift package prebuilt one
6+
// we need to undefine the header guard, since export.h uses the same one
7+
#undef CMARK_GFM_EXTENSIONS_EXPORT_H
8+
#include "cmark-gfm-extensions_export.h"
9+
#else
10+
11+
#ifdef CMARK_GFM_EXTENSIONS_STATIC_DEFINE
12+
# define CMARK_GFM_EXTENSIONS_EXPORT
13+
# define CMARK_GFM_EXTENSIONS_NO_EXPORT
14+
#else
15+
# if defined(_WIN32)
16+
# ifndef CMARK_GFM_EXTENSIONS_EXPORT
17+
# ifdef libcmark_gfm_extensions_EXPORTS
18+
# define CMARK_GFM_EXTENSIONS_EXPORT __declspec(dllexport)
19+
# else
20+
# define CMARK_GFM_EXTENSIONS_EXPORT __declspec(dllimport)
21+
# endif
22+
# endif
23+
24+
# ifndef CMARK_GFM_EXTENSIONS_NO_EXPORT
25+
# define CMARK_GFM_EXTENSIONS_NO_EXPORT
26+
# endif
27+
# else
28+
# ifndef CMARK_GFM_EXTENSIONS_EXPORT
29+
# ifdef libcmark_gfm_extensions_EXPORTS
30+
# define CMARK_GFM_EXTENSIONS_EXPORT __attribute__((__visibility__("default")))
31+
# else
32+
# define CMARK_GFM_EXTENSIONS_EXPORT __attribute__((__visibility__("default")))
33+
# endif
34+
# endif
35+
36+
# ifndef CMARK_GFM_EXTENSIONS_NO_EXPORT
37+
# define CMARK_GFM_EXTENSIONS_NO_EXPORT __attribute__((__visibility__("hidden")))
38+
# endif
39+
# endif
40+
#endif
41+
42+
#ifndef CMARK_GFM_EXTENSIONS_DEPRECATED
43+
# if defined(_WIN32)
44+
# define CMARK_GFM_EXTENSIONS_DEPRECATED __declspec(deprecated)
45+
# else
46+
# define CMARK_GFM_EXTENSIONS_DEPRECATED __attribute__ ((__deprecated__))
47+
# endif
48+
#endif
49+
50+
#ifndef CMARK_GFM_EXTENSIONS_DEPRECATED_EXPORT
51+
# define CMARK_GFM_EXTENSIONS_DEPRECATED_EXPORT CMARK_GFM_EXTENSIONS_EXPORT CMARK_GFM_EXTENSIONS_DEPRECATED
52+
#endif
53+
54+
#ifndef CMARK_GFM_EXTENSIONS_DEPRECATED_NO_EXPORT
55+
# define CMARK_GFM_EXTENSIONS_DEPRECATED_NO_EXPORT CMARK_GFM_EXTENSIONS_NO_EXPORT CMARK_GFM_EXTENSIONS_DEPRECATED
56+
#endif
57+
58+
#endif /* CMARK_GFM_EXTENSIONS_EXPORT_H */
59+
60+
#endif /* "cmark-gfm-extensions_export.h" */

src/CMakeLists.txt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ set(PROGRAM_SOURCES "${PROJECT_SOURCE_DIR}/bin/main.c")
4545
include_directories(include ${CMAKE_CURRENT_BINARY_DIR})
4646
include_directories(
4747
${PROJECT_SOURCE_DIR}/extensions/include
48-
${PROJECT_BINARY_DIR}/extensions/include
48+
${PROJECT_BINARY_DIR}/extensions
4949
)
5050

5151
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmark-gfm_version.h.in
@@ -152,7 +152,7 @@ if(CMARK_SHARED OR CMARK_STATIC)
152152
${CMAKE_CURRENT_SOURCE_DIR}/include/cmark-gfm.h
153153
${CMAKE_CURRENT_SOURCE_DIR}/include/cmark-gfm_config.h
154154
${CMAKE_CURRENT_SOURCE_DIR}/include/cmark-gfm-extension_api.h
155-
${CMAKE_CURRENT_SOURCE_DIR}/include/cmark-gfm_export.h
155+
${CMAKE_CURRENT_SOURCE_DIR}/include/export.h
156156
${CMAKE_CURRENT_SOURCE_DIR}/include/cmark-gfm_version.h
157157
DESTINATION include
158158
)
@@ -178,14 +178,10 @@ include(CheckIncludeFile)
178178
include(CheckCSourceCompiles)
179179
include(CheckCSourceRuns)
180180
include(CheckSymbolExists)
181-
CHECK_INCLUDE_FILE(stdbool.h HAVE_STDBOOL_H)
181+
CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
182182
CHECK_C_SOURCE_COMPILES(
183183
"int main() { __builtin_expect(0,0); return 0; }"
184184
HAVE___BUILTIN_EXPECT)
185-
CHECK_C_SOURCE_COMPILES("
186-
int f(void) __attribute__ (());
187-
int main() { return 0; }
188-
" HAVE___ATTRIBUTE__)
189185

190186
CONFIGURE_FILE(
191187
${CMAKE_CURRENT_SOURCE_DIR}/config.h.in

src/config.h.in

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,18 @@
55
extern "C" {
66
#endif
77

8-
#cmakedefine HAVE_STDBOOL_H
9-
10-
#ifdef HAVE_STDBOOL_H
8+
#if __STDC_VERSION__ >= 199901l
119
#include <stdbool.h>
1210
#elif !defined(__cplusplus)
1311
typedef char bool;
1412
#endif
1513

16-
#cmakedefine HAVE___BUILTIN_EXPECT
14+
#cmakedefine HAVE_UNISTD_H
1715

18-
#cmakedefine HAVE___ATTRIBUTE__
16+
#cmakedefine HAVE___BUILTIN_EXPECT
1917

2018
#cmakedefine CMARK_THREADING
2119

22-
#ifdef HAVE___ATTRIBUTE__
23-
#define CMARK_ATTRIBUTE(list) __attribute__ (list)
24-
#else
25-
#define CMARK_ATTRIBUTE(list)
26-
#endif
27-
2820
#ifndef CMARK_INLINE
2921
#if defined(_MSC_VER) && !defined(__cplusplus)
3022
#define CMARK_INLINE __inline

src/include/cmark-gfm.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
#include <stdio.h>
55
#include <stdint.h>
6-
#include "cmark-gfm_export.h"
6+
#include "export.h"
77
#include "cmark-gfm_version.h"
88

99
#ifdef __cplusplus
@@ -807,7 +807,7 @@ const char *cmark_version_string(void);
807807
* John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer.
808808
*/
809809

810-
#ifndef CMARK_NO_SHORT_NAMES
810+
#if !defined(CMARK_NO_SHORT_NAMES)
811811
#define NODE_DOCUMENT CMARK_NODE_DOCUMENT
812812
#define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE
813813
#define NODE_LIST CMARK_NODE_LIST

src/include/cmark-gfm_config.h

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,36 @@
11
#ifndef CMARK_CONFIG_H
22
#define CMARK_CONFIG_H
33

4+
#ifdef CMARK_USE_CMAKE_HEADERS
5+
// if the CMake config header exists, use that instead of this Swift package prebuilt one
6+
// we need to undefine the header guard, since config.h uses the same one
7+
#undef CMARK_CONFIG_H
8+
#include "config.h"
9+
#else
10+
411
#ifdef __cplusplus
512
extern "C" {
613
#endif
714

8-
#define HAVE_STDBOOL_H
9-
10-
#ifdef HAVE_STDBOOL_H
15+
#if __STDC_VERSION__ >= 199901l
1116
#include <stdbool.h>
1217
#elif !defined(__cplusplus)
1318
typedef char bool;
1419
#endif
1520

16-
#define HAVE___BUILTIN_EXPECT
21+
#if defined(__has_include)
22+
# if __has_include(<unistd.h>)
23+
# define HAVE_UNISTD_H
24+
# endif
25+
#elif defined(unix) || defined(__unix__) || defined(__unix) || defined(__APPLE__)
26+
// Apple Clang does not define any of the unix symbols, even though it provides unistd.h
27+
# define HAVE_UNISTD_H
28+
#endif
1729

18-
#define HAVE___ATTRIBUTE__
30+
#define HAVE___BUILTIN_EXPECT
1931

2032
#define CMARK_THREADING
2133

22-
#ifdef HAVE___ATTRIBUTE__
23-
#define CMARK_ATTRIBUTE(list) __attribute__ (list)
24-
#else
25-
#define CMARK_ATTRIBUTE(list)
26-
#endif
27-
2834
#ifndef CMARK_INLINE
2935
#if defined(_MSC_VER) && !defined(__cplusplus)
3036
#define CMARK_INLINE __inline
@@ -75,4 +81,6 @@ CMARK_INLINE int c99_snprintf(char *outBuf, size_t size, const char *format, ...
7581
}
7682
#endif
7783

78-
#endif
84+
#endif /* not CMARK_USE_CMAKE_HEADERS */
85+
86+
#endif /* not CMARK_CONFIG_H */

src/include/cmark_ctype.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
extern "C" {
66
#endif
77

8-
#include "cmark-gfm_export.h"
8+
#include "export.h"
99

1010
/** Locale-independent versions of functions from ctype.h.
1111
* We want cmark to behave the same no matter what the system locale.
Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1-
21
#ifndef CMARK_GFM_EXPORT_H
32
#define CMARK_GFM_EXPORT_H
43

4+
#ifdef CMARK_USE_CMAKE_HEADERS
5+
// if the CMake config header exists, use that instead of this Swift package prebuilt one
6+
// we need to undefine the header guard, since export.h uses the same one
7+
#undef CMARK_GFM_EXPORT_H
8+
#include "cmark-gfm_export.h"
9+
#else
10+
511
#ifdef CMARK_GFM_STATIC_DEFINE
612
# define CMARK_GFM_EXPORT
713
# define CMARK_GFM_NO_EXPORT
@@ -15,11 +21,7 @@
1521
# define CMARK_GFM_NO_EXPORT
1622
# else
1723
# if defined(libcmark_gfm_EXPORTS)
18-
# if defined(__linux__)
19-
# define CMARK_GFM_EXPORT __attribute__((__visibility__("protected")))
20-
# else
21-
# define CMARK_GFM_EXPORT __attribute__((__visibility__("default")))
22-
# endif
24+
# define CMARK_GFM_EXPORT __attribute__((__visibility__("default")))
2325
# else
2426
# define CMARK_GFM_EXPORT __attribute__((__visibility__("default")))
2527
# endif
@@ -28,7 +30,11 @@
2830
#endif
2931

3032
#ifndef CMARK_GFM_DEPRECATED
31-
# define CMARK_GFM_DEPRECATED __attribute__ ((__deprecated__))
33+
# if defined(_WIN32)
34+
# define CMARK_GFM_DEPRECATED __declspec(deprecated)
35+
# else
36+
# define CMARK_GFM_DEPRECATED __attribute__ ((__deprecated__))
37+
# endif
3238
#endif
3339

3440
#ifndef CMARK_GFM_DEPRECATED_EXPORT
@@ -39,10 +45,6 @@
3945
# define CMARK_GFM_DEPRECATED_NO_EXPORT CMARK_GFM_NO_EXPORT CMARK_GFM_DEPRECATED
4046
#endif
4147

42-
#if 0 /* DEFINE_NO_DEPRECATED */
43-
# ifndef CMARK_GFM_NO_DEPRECATED
44-
# define CMARK_GFM_NO_DEPRECATED
45-
# endif
46-
#endif
48+
#endif /* not CMARK_USE_CMAKE_HEADERS */
4749

48-
#endif /* CMARK_GFM_EXPORT_H */
50+
#endif /* not CMARK_GFM_EXPORT_H */

0 commit comments

Comments
 (0)