From 84a0853ad52fda2373137ffba07a4f487ad38d87 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Tue, 8 Oct 2019 14:46:31 -0700 Subject: [PATCH] Enable cmark to build as a SwiftPM package Add a `Package.swift` and some extra files that are cmake-generated. --- Package.swift | 21 ++++++++++ src/config.h | 76 +++++++++++++++++++++++++++++++++++++ src/include/cmark.h | 1 + src/include/cmark_export.h | 42 ++++++++++++++++++++ src/include/cmark_version.h | 7 ++++ 5 files changed, 147 insertions(+) create mode 100644 Package.swift create mode 100644 src/config.h create mode 120000 src/include/cmark.h create mode 100644 src/include/cmark_export.h create mode 100644 src/include/cmark_version.h diff --git a/Package.swift b/Package.swift new file mode 100644 index 000000000..c2fee52fa --- /dev/null +++ b/Package.swift @@ -0,0 +1,21 @@ +// swift-tools-version:4.0 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "cmark", + products: [ + .library( + name: "cmark", + targets: ["cmark"]), + ], + targets: [ + .target( + name: "cmark", + path: "src", + // Exclude the main file so cmark is built as a library. + exclude: ["main.c"] + ) + ] +) diff --git a/src/config.h b/src/config.h new file mode 100644 index 000000000..d38c7c7a5 --- /dev/null +++ b/src/config.h @@ -0,0 +1,76 @@ +#ifndef CMARK_CONFIG_H +#define CMARK_CONFIG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define HAVE_STDBOOL_H + +#ifdef HAVE_STDBOOL_H + #include +#elif !defined(__cplusplus) + typedef char bool; +#endif + +#define HAVE___BUILTIN_EXPECT + +#define HAVE___ATTRIBUTE__ + +#ifdef HAVE___ATTRIBUTE__ + #define CMARK_ATTRIBUTE(list) __attribute__ (list) +#else + #define CMARK_ATTRIBUTE(list) +#endif + +#ifndef CMARK_INLINE + #if defined(_MSC_VER) && !defined(__cplusplus) + #define CMARK_INLINE __inline + #else + #define CMARK_INLINE inline + #endif +#endif + +/* snprintf and vsnprintf fallbacks for MSVC before 2015, + due to Valentin Milea http://stackoverflow.com/questions/2915672/ +*/ + +#if defined(_MSC_VER) && _MSC_VER < 1900 + +#include +#include + +#define snprintf c99_snprintf +#define vsnprintf c99_vsnprintf + +CMARK_INLINE int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap) +{ + int count = -1; + + if (size != 0) + count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap); + if (count == -1) + count = _vscprintf(format, ap); + + return count; +} + +CMARK_INLINE int c99_snprintf(char *outBuf, size_t size, const char *format, ...) +{ + int count; + va_list ap; + + va_start(ap, format); + count = c99_vsnprintf(outBuf, size, format, ap); + va_end(ap); + + return count; +} + +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/cmark.h b/src/include/cmark.h new file mode 120000 index 000000000..e210251bf --- /dev/null +++ b/src/include/cmark.h @@ -0,0 +1 @@ +../cmark.h \ No newline at end of file diff --git a/src/include/cmark_export.h b/src/include/cmark_export.h new file mode 100644 index 000000000..9e5dd5d43 --- /dev/null +++ b/src/include/cmark_export.h @@ -0,0 +1,42 @@ + +#ifndef CMARK_EXPORT_H +#define CMARK_EXPORT_H + +#ifdef CMARK_STATIC_DEFINE +# define CMARK_EXPORT +# define CMARK_NO_EXPORT +#else +# ifndef CMARK_EXPORT +# ifdef libcmark_EXPORTS + /* We are building this library */ +# define CMARK_EXPORT __attribute__((visibility("default"))) +# else + /* We are using this library */ +# define CMARK_EXPORT __attribute__((visibility("default"))) +# endif +# endif + +# ifndef CMARK_NO_EXPORT +# define CMARK_NO_EXPORT __attribute__((visibility("hidden"))) +# endif +#endif + +#ifndef CMARK_DEPRECATED +# define CMARK_DEPRECATED __attribute__ ((__deprecated__)) +#endif + +#ifndef CMARK_DEPRECATED_EXPORT +# define CMARK_DEPRECATED_EXPORT CMARK_EXPORT CMARK_DEPRECATED +#endif + +#ifndef CMARK_DEPRECATED_NO_EXPORT +# define CMARK_DEPRECATED_NO_EXPORT CMARK_NO_EXPORT CMARK_DEPRECATED +#endif + +#if 0 /* DEFINE_NO_DEPRECATED */ +# ifndef CMARK_NO_DEPRECATED +# define CMARK_NO_DEPRECATED +# endif +#endif + +#endif /* CMARK_EXPORT_H */ diff --git a/src/include/cmark_version.h b/src/include/cmark_version.h new file mode 100644 index 000000000..19fbfa9c2 --- /dev/null +++ b/src/include/cmark_version.h @@ -0,0 +1,7 @@ +#ifndef CMARK_VERSION_H +#define CMARK_VERSION_H + +#define CMARK_VERSION ((0 << 16) | (28 << 8) | 3) +#define CMARK_VERSION_STRING "0.28.3" + +#endif