From 19dc42649183b2e1cd37be1ca69145dafe1330a2 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Fri, 3 May 2019 22:19:55 +0300 Subject: Add implementation --- libcmark-gfm-extensions/.gitignore | 19 ++++++ libcmark-gfm-extensions/COPYING | 1 + libcmark-gfm-extensions/INSTALL | 7 +++ libcmark-gfm-extensions/README | 21 +++++++ libcmark-gfm-extensions/README-DEV | 11 ++++ libcmark-gfm-extensions/build/.gitignore | 3 + libcmark-gfm-extensions/build/bootstrap.build | 26 ++++++++ libcmark-gfm-extensions/build/export.build | 10 ++++ libcmark-gfm-extensions/build/root.build | 20 +++++++ libcmark-gfm-extensions/buildfile | 10 ++++ .../libcmark-gfm-extensions/buildfile | 69 ++++++++++++++++++++++ .../cmark-gfm-extensions_export.h | 48 +++++++++++++++ .../libcmark-gfm-extensions/extensions | 1 + libcmark-gfm-extensions/manifest | 22 +++++++ libcmark-gfm-extensions/tests/.gitignore | 8 +++ libcmark-gfm-extensions/tests/basic/buildfile | 8 +++ libcmark-gfm-extensions/tests/basic/driver.c | 46 +++++++++++++++ libcmark-gfm-extensions/tests/basic/testscript | 5 ++ libcmark-gfm-extensions/tests/build/.gitignore | 3 + .../tests/build/bootstrap.build | 9 +++ libcmark-gfm-extensions/tests/build/root.build | 16 +++++ libcmark-gfm-extensions/tests/buildfile | 5 ++ 22 files changed, 368 insertions(+) create mode 100644 libcmark-gfm-extensions/.gitignore create mode 120000 libcmark-gfm-extensions/COPYING create mode 100644 libcmark-gfm-extensions/INSTALL create mode 100644 libcmark-gfm-extensions/README create mode 100644 libcmark-gfm-extensions/README-DEV create mode 100644 libcmark-gfm-extensions/build/.gitignore create mode 100644 libcmark-gfm-extensions/build/bootstrap.build create mode 100644 libcmark-gfm-extensions/build/export.build create mode 100644 libcmark-gfm-extensions/build/root.build create mode 100644 libcmark-gfm-extensions/buildfile create mode 100644 libcmark-gfm-extensions/libcmark-gfm-extensions/buildfile create mode 100644 libcmark-gfm-extensions/libcmark-gfm-extensions/cmark-gfm-extensions_export.h create mode 120000 libcmark-gfm-extensions/libcmark-gfm-extensions/extensions create mode 100644 libcmark-gfm-extensions/manifest create mode 100644 libcmark-gfm-extensions/tests/.gitignore create mode 100644 libcmark-gfm-extensions/tests/basic/buildfile create mode 100644 libcmark-gfm-extensions/tests/basic/driver.c create mode 100644 libcmark-gfm-extensions/tests/basic/testscript create mode 100644 libcmark-gfm-extensions/tests/build/.gitignore create mode 100644 libcmark-gfm-extensions/tests/build/bootstrap.build create mode 100644 libcmark-gfm-extensions/tests/build/root.build create mode 100644 libcmark-gfm-extensions/tests/buildfile (limited to 'libcmark-gfm-extensions') diff --git a/libcmark-gfm-extensions/.gitignore b/libcmark-gfm-extensions/.gitignore new file mode 100644 index 0000000..cece09c --- /dev/null +++ b/libcmark-gfm-extensions/.gitignore @@ -0,0 +1,19 @@ +# Compiler/linker output. +# +*.d +*.t +*.i +*.ii +*.o +*.obj +*.so +*.dll +*.a +*.lib +*.exp +*.pdb +*.ilk +*.exe +*.exe.dlls/ +*.exe.manifest +*.pc diff --git a/libcmark-gfm-extensions/COPYING b/libcmark-gfm-extensions/COPYING new file mode 120000 index 0000000..0ca50eb --- /dev/null +++ b/libcmark-gfm-extensions/COPYING @@ -0,0 +1 @@ +../upstream/COPYING \ No newline at end of file diff --git a/libcmark-gfm-extensions/INSTALL b/libcmark-gfm-extensions/INSTALL new file mode 100644 index 0000000..ffe1352 --- /dev/null +++ b/libcmark-gfm-extensions/INSTALL @@ -0,0 +1,7 @@ +The aim of this package is to make reading the INSTALL file unnecessary. So +next time try running: + +$ bpkg build libcmark-gfm-extensions + +But if you don't want to use the package manager, then you can also build this +package manually using the standard build2 build system. diff --git a/libcmark-gfm-extensions/README b/libcmark-gfm-extensions/README new file mode 100644 index 0000000..d492628 --- /dev/null +++ b/libcmark-gfm-extensions/README @@ -0,0 +1,21 @@ +cmark-gfm is an extended version of cmark, the reference implementation of +CommonMark parsing and rendering C library. In addition to libcmark, +libcmark-gfm provides extensions management support. The GitHub Flavored +Markdown extensions themselves are provided by libcmark-gfm-extensions. + +https://github.com/github/cmark-gfm + +This package contains the original libcmark-gfm-extensions library source code +overlaid with the build2-based build system and packaged for the build2 +package manager (bpkg). + +See the INSTALL file for the prerequisites and installation instructions. + +Post questions, bug reports, or any other feedback about the library itself at +https://github.com/github/cmark-gfm/issues. Send build system and +packaging-related feedback to the packaging@build2.org mailing list (see +https://lists.build2.org for posting guidelines, etc). + +The packaging of libcmark-gfm for build2 is tracked in a Git repository at: + +https://git.build2.org/cgit/packaging/cmark-gfm/ diff --git a/libcmark-gfm-extensions/README-DEV b/libcmark-gfm-extensions/README-DEV new file mode 100644 index 0000000..d350c92 --- /dev/null +++ b/libcmark-gfm-extensions/README-DEV @@ -0,0 +1,11 @@ +This document describes how libcmark-gfm-extensions was packaged for build2. +In particular, this understanding will be useful when upgrading to a new +upstream version. See ../README-DEV for general notes on cmark-gfm packaging. + +Symlink the required upstream files and directories into +libcmark-gfm-extensions/: + +$ ln -s ../../upstream/extensions libcmark-gfm-extensions + +Create cmark-gfm-extensions_export.h defining CMARK_GFM_EXTENSIONS_EXPORT +macro. diff --git a/libcmark-gfm-extensions/build/.gitignore b/libcmark-gfm-extensions/build/.gitignore new file mode 100644 index 0000000..4a730a3 --- /dev/null +++ b/libcmark-gfm-extensions/build/.gitignore @@ -0,0 +1,3 @@ +config.build +root/ +bootstrap/ diff --git a/libcmark-gfm-extensions/build/bootstrap.build b/libcmark-gfm-extensions/build/bootstrap.build new file mode 100644 index 0000000..c7b7b43 --- /dev/null +++ b/libcmark-gfm-extensions/build/bootstrap.build @@ -0,0 +1,26 @@ +# file : build/bootstrap.build +# copyright : Copyright (c) 2016-2019 Code Synthesis Ltd +# license : FreeBSD License; see accompanying COPYING file + +project = libcmark-gfm-extensions + +using version +using config +using test +using install +using dist + +# Sync with the libcmark-gfm library ABI version (see libcmark-gfm's +# bootstrap.build for details). +# +if ($version.major == 0 && $version.minor == 29 && $version.patch == 0) +{ + upstream_version_major = 0 + upstream_version_minor = 29 + upstream_version_patch = 0 + upstream_version_gfm = 0 + + abi_version = "$upstream_version_major.$upstream_version_minor.$upstream_version_patch.$upstream_version_gfm" +} +else + fail 'increment the ABI version?' diff --git a/libcmark-gfm-extensions/build/export.build b/libcmark-gfm-extensions/build/export.build new file mode 100644 index 0000000..c87cec6 --- /dev/null +++ b/libcmark-gfm-extensions/build/export.build @@ -0,0 +1,10 @@ +# file : build/root.build +# copyright : Copyright (c) 2018-2019 Code Synthesis Ltd +# license : FreeBSD License; see accompanying COPYING file + +$out_root/ +{ + include libcmark-gfm-extensions/ +} + +export $out_root/libcmark-gfm-extensions/$import.target diff --git a/libcmark-gfm-extensions/build/root.build b/libcmark-gfm-extensions/build/root.build new file mode 100644 index 0000000..f1d0273 --- /dev/null +++ b/libcmark-gfm-extensions/build/root.build @@ -0,0 +1,20 @@ +# file : build/root.build +# copyright : Copyright (c) 2018-2019 Code Synthesis Ltd +# license : FreeBSD License; see accompanying COPYING file + +c.std = 99 + +using c + +h{*}: extension = h +c{*}: extension = c + +if ($c.class == 'msvc') +{ + cc.poptions += -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS + cc.coptions += /wd4251 /wd4275 /wd4800 +} + +# The test target for cross-testing (running tests under Wine, etc). +# +test.target = $c.target diff --git a/libcmark-gfm-extensions/buildfile b/libcmark-gfm-extensions/buildfile new file mode 100644 index 0000000..f2c47c5 --- /dev/null +++ b/libcmark-gfm-extensions/buildfile @@ -0,0 +1,10 @@ +# file : buildfile +# copyright : Copyright (c) 2018-2019 Code Synthesis Ltd +# license : FreeBSD License; see accompanying COPYING file + +./: {*/ -build/} doc{COPYING INSTALL README} manifest + +# Don't install tests or the INSTALL file. +# +tests/: install = false +doc{INSTALL}@./: install = false diff --git a/libcmark-gfm-extensions/libcmark-gfm-extensions/buildfile b/libcmark-gfm-extensions/libcmark-gfm-extensions/buildfile new file mode 100644 index 0000000..c0c7fb5 --- /dev/null +++ b/libcmark-gfm-extensions/libcmark-gfm-extensions/buildfile @@ -0,0 +1,69 @@ +# file : libcmark-gfm-extensions/buildfile +# copyright : Copyright (c) 2018-2019 Code Synthesis Ltd +# license : FreeBSD License; see accompanying COPYING file + +import int_libs = libcmark-gfm%lib{cmark-gfm} + +lib{cmark-gfm-extensions}: {h c}{**} $int_libs + +windows = ($c.target.class == 'windows') + +gcc = ($c.class == 'gcc') +msvc = ($c.class == 'msvc') + +# Build options. +# +obja{*}: c.poptions += -DCMARK_GFM_EXTENSIONS_STATIC_BUILD +objs{*}: c.poptions += -DCMARK_GFM_EXTENSIONS_SHARED_BUILD + +if! $windows + c.coptions += -fvisibility=hidden +else + c.poptions += -DWIN32 -D_WINDOWS + +c.poptions =+ "-I$src_base" "-I$src_base/extensions" + +if $msvc +{ + # Disable warnings that pop up with /W3. + # + c.coptions += /wd4311 +} +elif $gcc +{ + c.coptions += -pedantic + + # Disable warnings that pop up with -Wextra. Upstream doesn't seem to care + # about these and it is not easy to disable specific warnings in a way that + # works across compilers/version (some -Wno-* options are only recognized in + # newer versions). There are still some warnings left that appear for + # certain platforms/compilers. We pass them through but disable treating + # them as errors. + # + c.coptions += -Wno-extra -Wno-error +} + +# Export options. +# +lib{cmark-gfm-extensions}: +{ + cc.export.poptions = "-I$src_base" "-I$src_base/extensions" + cc.export.libs = $int_libs +} + +liba{cmark-gfm-extensions}: cc.export.poptions += -DCMARK_GFM_EXTENSIONS_STATIC +libs{cmark-gfm-extensions}: cc.export.poptions += -DCMARK_GFM_EXTENSIONS_SHARED + +# See bootstrap.build for details. +# +if $version.pre_release + lib{cmark-gfm-extensions}: bin.lib.version = @"-$version.project_id" +else + lib{cmark-gfm-extensions}: bin.lib.version = @"-$abi_version" + +# Install the bare minimum of headers. +# +h{*}: install = false + +for h: extensions/cmark-gfm-core-extensions.h cmark-gfm-extensions_export.h + h{$h}@./$path.directory($h): install = include/ diff --git a/libcmark-gfm-extensions/libcmark-gfm-extensions/cmark-gfm-extensions_export.h b/libcmark-gfm-extensions/libcmark-gfm-extensions/cmark-gfm-extensions_export.h new file mode 100644 index 0000000..db966d5 --- /dev/null +++ b/libcmark-gfm-extensions/libcmark-gfm-extensions/cmark-gfm-extensions_export.h @@ -0,0 +1,48 @@ +/* file : libcmark-gfm-extensions/cmark-gfm-extensions_export.h -*- C -*- + * copyright : Copyright (c) 2016-2019 Code Synthesis Ltd + * license : FreeBSD License; see accompanying COPYING file + */ + +#ifndef CMARK_GFM_EXTENSIONS_EXPORT_H +#define CMARK_GFM_EXTENSIONS_EXPORT_H + +/* + * The upstream's version of this file is auto-generated by cmake. We implement + * it from scratch (see cmark-gfm_export.h for details). + */ +#if defined(CMARK_GFM_EXTENSIONS_STATIC) // Using static. +# define CMARK_GFM_EXTENSIONS_EXPORT +#elif defined(CMARK_GFM_EXTENSIONS_STATIC_BUILD) // Building static. +# define CMARK_GFM_EXTENSIONS_EXPORT +#elif defined(CMARK_GFM_EXTENSIONS_SHARED) // Using shared. +# ifdef _WIN32 +# define CMARK_GFM_EXTENSIONS_EXPORT __declspec(dllimport) +# else +# define CMARK_GFM_EXTENSIONS_EXPORT +# endif +#elif defined(CMARK_GFM_EXTENSIONS_SHARED_BUILD) // Building shared. +# ifdef _WIN32 +# define CMARK_GFM_EXTENSIONS_EXPORT __declspec(dllexport) +# else +# define CMARK_GFM_EXTENSIONS_EXPORT __attribute__((visibility("default"))) +# endif +#else +// If none of the above macros are defined, then we assume we are being used +// by some third-party build system that cannot/doesn't signal the library +// type. Note that this fallback works for both static and shared but in case +// of shared will be sub-optimal compared to having dllimport. +// +# define CMARK_GFM_EXTENSIONS_EXPORT // Using static or shared. +#endif + +/* + * Undefining these cmake-generated macros is not technically required, but + * let's keep them for the record. + */ +#undef CMARK_GFM_EXTENSIONS_NO_EXPORT +#undef CMARK_GFM_EXTENSIONS_DEPRECATED +#undef CMARK_GFM_EXTENSIONS_NO_DEPRECATED +#undef CMARK_GFM_EXTENSIONS_DEPRECATED_EXPORT +#undef CMARK_GFM_EXTENSIONS_DEPRECATED_NO_EXPORT + +#endif /* CMARK_GFM_EXTENSIONS_EXPORT_H */ diff --git a/libcmark-gfm-extensions/libcmark-gfm-extensions/extensions b/libcmark-gfm-extensions/libcmark-gfm-extensions/extensions new file mode 120000 index 0000000..b42e4e2 --- /dev/null +++ b/libcmark-gfm-extensions/libcmark-gfm-extensions/extensions @@ -0,0 +1 @@ +../../upstream/extensions \ No newline at end of file diff --git a/libcmark-gfm-extensions/manifest b/libcmark-gfm-extensions/manifest new file mode 100644 index 0000000..5e906f8 --- /dev/null +++ b/libcmark-gfm-extensions/manifest @@ -0,0 +1,22 @@ +: 1 +name: libcmark-gfm-extensions + +# Note: remember to update summary below and build/bootstrap.build! +# +version: 0.29.0-a.0.z + +project: cmark-gfm +summary: GitHub-flavored CommonMark extensions C library, version 0.29.0.gfm.0 +license: 2-clause BSD; FreeBSD License +tags: github, markdown, extensions, cmark, commonmark, gfm, c, api +description-file: README +url: https://github.com/github/cmark-gfm +src-url: https://git.build2.org/cgit/packaging/cmark-gfm/cmark-gfm/tree/libcmark-gfm-extensions/ +package-url: https://git.build2.org/cgit/packaging/cmark-gfm/ +email: packaging@build2.org ; Report issues at https://github.com/github/cmark-gfm/issues. +package-email: packaging@build2.org ; Mailing list. +build-error-email: builds@build2.org +builds: all +depends: * build2 >= 0.10.0- +depends: * bpkg >= 0.10.0- +depends: libcmark-gfm == $ diff --git a/libcmark-gfm-extensions/tests/.gitignore b/libcmark-gfm-extensions/tests/.gitignore new file mode 100644 index 0000000..662178d --- /dev/null +++ b/libcmark-gfm-extensions/tests/.gitignore @@ -0,0 +1,8 @@ +# Test executables. +# +driver + +# Testscript output directories (can be symlinks). +# +test +test-* diff --git a/libcmark-gfm-extensions/tests/basic/buildfile b/libcmark-gfm-extensions/tests/basic/buildfile new file mode 100644 index 0000000..a5014fe --- /dev/null +++ b/libcmark-gfm-extensions/tests/basic/buildfile @@ -0,0 +1,8 @@ +# file : tests/basic/buildfile +# copyright : Copyright (c) 2018-2019 Code Synthesis Ltd +# license : FreeBSD License; see accompanying COPYING file + +import libs = libcmark-gfm-extensions%lib{cmark-gfm-extensions} +import libs += libcmark-gfm%lib{cmark-gfm} + +exe{driver}: {h c}{**} $libs testscript diff --git a/libcmark-gfm-extensions/tests/basic/driver.c b/libcmark-gfm-extensions/tests/basic/driver.c new file mode 100644 index 0000000..4d77abd --- /dev/null +++ b/libcmark-gfm-extensions/tests/basic/driver.c @@ -0,0 +1,46 @@ +/* + * file : tests/basic/driver.c + * copyright : Copyright (c) 2009-2019 Code Synthesis Tools CC + * license : FreeBSD License; see accompanying COPYING file + */ + +#include +#include +#include + +#include +#include +#include + +int +main (int argc, const char* argv[]) +{ + assert (argc == 2); + + const char* from = argv[1]; + + cmark_gfm_core_extensions_ensure_registered (); + + cmark_parser* p = cmark_parser_new (CMARK_OPT_DEFAULT | + CMARK_OPT_VALIDATE_UTF8); + + cmark_syntax_extension* e = cmark_find_syntax_extension ("strikethrough"); + cmark_parser_attach_syntax_extension (p, e); + + + cmark_parser_feed (p, from, strlen (from)); + + cmark_node* doc = cmark_parser_finish (p); + + char* to = cmark_render_html (doc, + CMARK_OPT_DEFAULT, + NULL /* extensions */); + + printf ("%s", to); + + cmark_get_default_mem_allocator ()->free (to); + cmark_node_free (doc); + cmark_parser_free (p); + + return 0; +} diff --git a/libcmark-gfm-extensions/tests/basic/testscript b/libcmark-gfm-extensions/tests/basic/testscript new file mode 100644 index 0000000..438f059 --- /dev/null +++ b/libcmark-gfm-extensions/tests/basic/testscript @@ -0,0 +1,5 @@ +# file : tests/basic/testscript +# copyright : Copyright (c) 2016-2019 Code Synthesis Ltd +# license : FreeBSD License; see accompanying COPYING file + +$* '~~Hi~~ Hello *world*' >'

Hi Hello world

' diff --git a/libcmark-gfm-extensions/tests/build/.gitignore b/libcmark-gfm-extensions/tests/build/.gitignore new file mode 100644 index 0000000..4a730a3 --- /dev/null +++ b/libcmark-gfm-extensions/tests/build/.gitignore @@ -0,0 +1,3 @@ +config.build +root/ +bootstrap/ diff --git a/libcmark-gfm-extensions/tests/build/bootstrap.build b/libcmark-gfm-extensions/tests/build/bootstrap.build new file mode 100644 index 0000000..cb2b962 --- /dev/null +++ b/libcmark-gfm-extensions/tests/build/bootstrap.build @@ -0,0 +1,9 @@ +# file : tests/build/bootstrap.build +# copyright : Copyright (c) 2018-2019 Code Synthesis Ltd +# license : FreeBSD License; see accompanying COPYING file + +project = # Unnamed tests subproject. + +using config +using test +using dist diff --git a/libcmark-gfm-extensions/tests/build/root.build b/libcmark-gfm-extensions/tests/build/root.build new file mode 100644 index 0000000..1a4dbbe --- /dev/null +++ b/libcmark-gfm-extensions/tests/build/root.build @@ -0,0 +1,16 @@ +# file : tests/build/root.build +# copyright : Copyright (c) 2018-2019 Code Synthesis Ltd +# license : FreeBSD License; see accompanying COPYING file + +using c + +h{*}: extension = h +c{*}: extension = c + +# Every exe{} in this subproject is by default a test. +# +exe{*}: test = true + +# The test target for cross-testing (running tests under Wine, etc). +# +test.target = $c.target diff --git a/libcmark-gfm-extensions/tests/buildfile b/libcmark-gfm-extensions/tests/buildfile new file mode 100644 index 0000000..3961c0a --- /dev/null +++ b/libcmark-gfm-extensions/tests/buildfile @@ -0,0 +1,5 @@ +# file : tests/buildfile +# copyright : Copyright (c) 2018-2019 Code Synthesis Ltd +# license : FreeBSD License; see accompanying COPYING file + +./: {*/ -build/} -- cgit v1.1