attila <[email protected]> writes:
> Michael McConville <[email protected]> writes:
>
>> attila wrote:
>>> Ping.
>>>
>>> Just tested that the diff works against recentish i386 snap (22 May).
>>> Patch attached.
>>
>> I can't comment on all of the changes, but this builds and runs fine for
>> me.
>>
>
> Attached is an update that brings us from 4.7.1 to 5.4.0, released 8
> Aug. It shuffles the patches around because the source tree was
> rearranged and adds support for tests. Sadly, the tests don't all
> pass. I think I need a t-dep for something LaTeXish but I'm not sure
> what is best, nor am I sure if that's the only reason for the
> failures. If anyone has a spare cycle or two to look at it I'd
> appreciate it. If not I'll get back to it by the end of the week.
>
> Pax, -A
I finally got back to this. It turns out there wasn't much standing
in the way of the tests working other than me. Attached is a patch
that brings textproc/multimarkdown up to the latest release (5.4.0
released 5 Aug). Notable changes:
* Switched to CMake;
* Ditched the patches I tried and failed to upstream (strcat/sprintf);
* Reworked two remaining patches (HAVE_SRAND_DETERMINISTIC) in the hope
I might get them upstream;
* Added pledge;
* make test now passes all tests.
Tested on amd64.
Comments, feedback most welcome.
Pax, -A
--
http://haqistan.net/~attila | [email protected] | 0x62A729CF
Index: Makefile
===================================================================
RCS file: /cvs/ports/textproc/multimarkdown/Makefile,v
retrieving revision 1.2
diff -u -p -r1.2 Makefile
--- Makefile 5 Apr 2015 13:31:15 -0000 1.2
+++ Makefile 15 Sep 2016 21:41:05 -0000
@@ -1,34 +1,45 @@
# $OpenBSD: Makefile,v 1.2 2015/04/05 13:31:15 sthen Exp $
-V = 4.7.1
+V = 5.4.0
COMMENT = marked-up plain text to formatted document converter
DISTNAME = ${GH_PROJECT}-${V}
-PKGNAME = multimarkdown-${V}
+PKGNAME = multimarkdown-${V:C/-/./}
CATEGORIES = textproc
GH_ACCOUNT = fletcher
-GH_PROJECT = MultiMarkdown-4
+GH_PROJECT = MultiMarkdown-5
GH_TAGNAME = ${V}
+TESTS_COMMIT = 8d5ad66e3bbaeb0de8646783bfe964261ddb39c7
+DIST_SUBDIR = multimarkdown
+MASTER_SITES_GITHUB = https://github.com/fletcher/MMD-Test-Suite/archive/
+DISTFILES = ${DISTNAME}${EXTRACT_SUFX} ${TESTS_COMMIT}${EXTRACT_SUFX}
HOMEPAGE = http://fletcherpenney.net/multimarkdown/
MAINTAINER = Sean Levy <[email protected]>
# Dual licensed: MIT and GPLv2+
PERMIT_PACKAGE_CDROM = Yes
-WANTLIB += c
+# uses pledge()
+WANTLIB += c
BUILD_DEPENDS = devel/greg
-USE_GMAKE = Yes
-ALL_TARGET = ALL
-MAKE_FLAGS = CFLAGS="${CFLAGS} -include GLibFacade.h -DHAVE_ARC4RANDOM" \
- GREG=${LOCALBASE}/bin/greg
+MODULES = devel/cmake
-# Test files aren't included in distfile.
-NO_TEST = Yes
+CFLAGS += -DHAVE_SRAND_DETERMINISTIC
+
+CONFIGURE_ARGS += -DGREG=${LOCALBASE}/bin/greg
+
+post-extract:
+ rm -rf ${WRKSRC}/submodules/MarkdownTest
+ cp -r ${WRKDIR}/MMD-Test-Suite-${TESTS_COMMIT} \
+ ${WRKSRC}/submodules/MarkdownTest
+
+pre-configure:
+ touch ${WRKBUILD}/README.html
do-install:
- ${INSTALL_PROGRAM} ${WRKSRC}/multimarkdown ${PREFIX}/bin/
+ ${INSTALL_PROGRAM} ${WRKBUILD}/multimarkdown ${PREFIX}/bin/
.include <bsd.port.mk>
Index: distinfo
===================================================================
RCS file: /cvs/ports/textproc/multimarkdown/distinfo,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 distinfo
--- distinfo 24 Mar 2015 19:16:13 -0000 1.1.1.1
+++ distinfo 15 Sep 2016 21:41:05 -0000
@@ -1,2 +1,4 @@
-SHA256 (MultiMarkdown-4-4.7.1.tar.gz) = gy5dzm+hv/TWfmSsLMJPCSCujZEoDlPqh5I3odQ/SGU=
-SIZE (MultiMarkdown-4-4.7.1.tar.gz) = 120896
+SHA256 (multimarkdown/8d5ad66e3bbaeb0de8646783bfe964261ddb39c7.tar.gz) = xGdoX+aZ/y+8ND+LXK24XSgNCccYJV9S6qAW2NI/DKw=
+SHA256 (multimarkdown/MultiMarkdown-5-5.4.0.tar.gz) = HMA4X/1sghwmXpcPgcxOwAnH7Lv7EuDhFce7WzPQmoM=
+SIZE (multimarkdown/8d5ad66e3bbaeb0de8646783bfe964261ddb39c7.tar.gz) = 185408
+SIZE (multimarkdown/MultiMarkdown-5-5.4.0.tar.gz) = 136693
Index: patches/patch-CMakeLists_txt
===================================================================
RCS file: patches/patch-CMakeLists_txt
diff -N patches/patch-CMakeLists_txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-CMakeLists_txt 15 Sep 2016 21:41:05 -0000
@@ -0,0 +1,14 @@
+$OpenBSD$
+
+Use installed greg
+--- CMakeLists.txt.orig Mon Feb 22 20:05:02 2016
++++ CMakeLists.txt Tue Mar 22 12:45:41 2016
+@@ -149,7 +149,7 @@ endif ()
+ # Need to build parser.c via greg
+ add_custom_command (
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/parser.c
+- COMMAND ${PROJECT_SOURCE_DIR}/submodules/greg/greg -o ${CMAKE_CURRENT_BINARY_DIR}/parser.c ${PROJECT_SOURCE_DIR}/src/parser.leg
++ COMMAND ${GREG} -o ${CMAKE_CURRENT_BINARY_DIR}/parser.c ${PROJECT_SOURCE_DIR}/src/parser.leg
+ )
+
+ # src_files are the primary files, and will be included in doxygen documentation
Index: patches/patch-Makefile
===================================================================
RCS file: patches/patch-Makefile
diff -N patches/patch-Makefile
--- patches/patch-Makefile 24 Mar 2015 19:16:13 -0000 1.1.1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,37 +0,0 @@
-$OpenBSD: patch-Makefile,v 1.1.1.1 2015/03/24 19:16:13 okan Exp $
-
-Make it possible to pass GREG=/usr/local/bin/greg in on the
-command line and avoid git submodules.
-
---- Makefile.orig Mon Mar 23 18:21:56 2015
-+++ Makefile Mon Mar 23 18:32:22 2015
-@@ -32,18 +32,25 @@ ifeq ($(MAKECMDGOALS),static)
- LDFLAGS += -static -static-libgcc
- endif
-
--GREG= greg/greg
-+# OUR_GREG: the version of greg in a submodule
-+# GREG: the path to greg we want to use for parser.leg
-+#
-+# This way we can pass GREG=/usr/local/bin/greg in on
-+# the command line if we have greg installed already.
-
-+OUR_GREG=greg/greg
-+GREG?=$(OUR_GREG)
-+
- ALL : $(PROGRAM) enumMap.txt
- static : $(PROGRAM) enumMap.txt
-
- %.o : %.c parser.h
- $(CC) -c $(CFLAGS) -o $@ $<
-
--parser.c : parser.leg greg/greg parser.h
-- greg/greg -o parser.c parser.leg
-+parser.c : parser.leg $(GREG) parser.h
-+ $(GREG) -o parser.c parser.leg
-
--$(GREG): greg
-+$(OUR_GREG): greg
- $(MAKE) -C greg
-
- $(PROGRAM) : $(OBJS)
Index: patches/patch-html_c
===================================================================
RCS file: patches/patch-html_c
diff -N patches/patch-html_c
--- patches/patch-html_c 24 Mar 2015 19:16:13 -0000 1.1.1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,59 +0,0 @@
-$OpenBSD: patch-html_c,v 1.1.1.1 2015/03/24 19:16:13 okan Exp $
-
-Switch to using arc4random(3) everywhere, since they don't really want
-repeatability (as evidenced by the arguments they pass to srand(3)).
-
---- html.c.orig Mon Mar 9 18:52:39 2015
-+++ html.c Sat Mar 21 15:44:10 2015
-@@ -112,8 +112,12 @@ void print_html_node(GString *out, node *n, scratch_pa
- scratch->footnote_para_counter --;
- if (scratch->footnote_para_counter == 0) {
- if (scratch->extensions & EXT_RANDOM_FOOT) {
-+#ifdef HAVE_ARC4RANDOM
-+ random = arc4random_uniform(99999) + 1;
-+#else
- srand(scratch->random_seed_base + scratch->footnote_to_print);
- random = rand() % 99999 + 1;
-+#endif
- } else {
- random = scratch->footnote_to_print;
- }
-@@ -574,8 +578,12 @@ void print_html_node(GString *out, node *n, scratch_pa
- temp_node = node_for_count(scratch->used_notes, lev);
-
- if (scratch->extensions & EXT_RANDOM_FOOT) {
-+#ifdef HAVE_ARC4RANDOM
-+ random = arc4random_uniform(99999) + 1;
-+#else
- srand(scratch->random_seed_base + lev);
- random = rand() % 99999 + 1;
-+#endif
- } else {
- random = lev;
- }
-@@ -628,8 +636,12 @@ void print_html_node(GString *out, node *n, scratch_pa
- fprintf(stderr, "matching cite found - %d\n",lev);
- #endif
- if (scratch->extensions & EXT_RANDOM_FOOT) {
-+#ifdef HAVE_ARC4RANDOM
-+ random = arc4random_uniform(99999) + 1;
-+#else
- srand(scratch->random_seed_base + lev);
- random = rand() % 99999 + 1;
-+#endif
- } else {
- random = lev;
- }
-@@ -901,8 +913,12 @@ void print_html_endnotes(GString *out, scratch_pad *sc
- pad(out, 1, scratch);
-
- if (scratch->extensions & EXT_RANDOM_FOOT) {
-+#ifdef HAVE_ARC4RANDOM
-+ random = arc4random_uniform(99999) + 1;
-+#else
- srand(scratch->random_seed_base + counter);
- random = rand() % 99999 + 1;
-+#endif
- } else {
- random = counter;
- }
Index: patches/patch-latex_c
===================================================================
RCS file: patches/patch-latex_c
diff -N patches/patch-latex_c
--- patches/patch-latex_c 24 Mar 2015 19:16:13 -0000 1.1.1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,29 +0,0 @@
-$OpenBSD: patch-latex_c,v 1.1.1.1 2015/03/24 19:16:13 okan Exp $
-
-Switch from strcat(3) to a safer idiom.
-
---- latex.c.orig Mon Mar 9 18:52:39 2015
-+++ latex.c Sat Mar 21 15:44:10 2015
-@@ -1202,16 +1202,16 @@ void print_latex_url(GString *out, char *str, scratch_
- char * correct_dimension_units(char *original) {
- char *result;
- int i;
--
-+ size_t result_len;
-+
- result = strdup(original);
--
-+ result_len = strlen(result);
-+
- for (i = 0; result[i]; i++)
- result[i] = tolower(result[i]);
-
-- if (strstr(&result[strlen(result)-2],"px")) {
-- result[strlen(result)-2] = '\0';
-- strcat(result, "pt");
-- }
-+ if (strstr(&result[result_len-2],"px"))
-+ result[result_len-1] = 't';
-
- return result;
- }
Index: patches/patch-parse_utilities_c
===================================================================
RCS file: patches/patch-parse_utilities_c
diff -N patches/patch-parse_utilities_c
--- patches/patch-parse_utilities_c 24 Mar 2015 19:16:13 -0000 1.1.1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,52 +0,0 @@
-$OpenBSD: patch-parse_utilities_c,v 1.1.1.1 2015/03/24 19:16:13 okan Exp $
-
-ifdef out pragmas that don't work under OpenBSD. Use arc4random(3).
-
---- parse_utilities.c.orig Mon Sep 22 12:57:41 2014
-+++ parse_utilities.c Wed Jan 7 16:02:19 2015
-@@ -22,7 +22,9 @@
- #include "parser.h"
- #include <libgen.h>
-
-+#ifndef __OpenBSD__
- #pragma mark - Parse Tree
-+#endif /* __OpenBSD__ */
-
- /* Create a new node in the parse tree */
- node * mk_node(int key) {
-@@ -219,7 +221,9 @@ void append_list(node *new, node *list) {
- }
- }
-
-+#ifndef __OpenBSD__
- #pragma mark - Parser Data
-+#endif /* __OpenBSD__ */
-
- /* Create parser data - this is where you stash stuff to communicate
- into and out of the parser */
-@@ -250,7 +254,9 @@ void free_parser_data(parser_data *data) {
- }
-
- /* mk_scratch_pad -- store stuff here while exporting the result tree */
-+#ifndef HAVE_ARC4RANDOM
- void ran_start(long seed);
-+#endif
- scratch_pad * mk_scratch_pad(unsigned long extensions) {
- scratch_pad *result = (scratch_pad *)malloc(sizeof(scratch_pad));
- result->extensions = extensions;
-@@ -277,6 +283,7 @@ scratch_pad * mk_scratch_pad(unsigned long extensions)
- result->table_alignment = NULL;
- result->table_column = 0;
-
-+#ifndef HAVE_ARC4RANDOM
- if (extensions & EXT_RANDOM_FOOT) {
- srand((int)time(NULL));
- result->random_seed_base = rand() % 32000;
-@@ -285,6 +292,7 @@ scratch_pad * mk_scratch_pad(unsigned long extensions)
- result->random_seed_base = 0;
- }
- ran_start(310952L);
-+#endif /* !HAVE_ARC4RANDOM */
-
- result->lyx_para_type = PARA; /* CRC - Simple paragraph */
- result->lyx_level = 0; /* CRC - out outside level */
Index: patches/patch-parser_leg
===================================================================
RCS file: patches/patch-parser_leg
diff -N patches/patch-parser_leg
--- patches/patch-parser_leg 24 Mar 2015 19:16:13 -0000 1.1.1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,19 +0,0 @@
-$OpenBSD: patch-parser_leg,v 1.1.1.1 2015/03/24 19:16:13 okan Exp $
-
-Switch from sprintf(3) to snprintf(3)
-
---- parser.leg.orig Mon Mar 9 18:52:39 2015
-+++ parser.leg Sat Mar 21 15:44:10 2015
-@@ -562,8 +562,10 @@ AutoLinkUrl = '<' < [A-Za-z]+ "://" ( !Newline !'>'
-
- AutoLinkEmail = '<' ( "mailto:" )? < [-A-Za-z0-9+_./!%~$]+ '@' ( !Newline !'>' . )+ > '>'
- {
-- char *mailto = malloc(strlen(yytext) + 8);
-- sprintf(mailto, "mailto:%s", yytext);
-+ size_t mailto_len = strlen(yytext) + 8;
-+ char *mailto = malloc(mailto_len);
-+ assert(mailto);
-+ assert(snprintf(mailto,mailto_len,"mailto:%s",yytext) < mailto_len);
- $$ = mk_link(str(yytext), NULL, mailto, NULL, NULL);
- free(mailto);
- }
Index: patches/patch-src_html_c
===================================================================
RCS file: patches/patch-src_html_c
diff -N patches/patch-src_html_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_html_c 15 Sep 2016 21:41:05 -0000
@@ -0,0 +1,53 @@
+$OpenBSD$
+
+Use srand_deterministic(3) if available.
+--- src/html.c.orig Fri Aug 5 09:08:36 2016
++++ src/html.c Thu Sep 15 15:35:50 2016
+@@ -115,7 +115,11 @@ void print_html_node(GString *out, node *n, scratch_pa
+ scratch->footnote_para_counter --;
+ if (scratch->footnote_para_counter == 0) {
+ if (scratch->extensions & EXT_RANDOM_FOOT) {
++#ifdef HAVE_SRAND_DETERMINISTIC
++ srand_deterministic(scratch->random_seed_base + scratch->footnote_to_print);
++#else
+ srand(scratch->random_seed_base + scratch->footnote_to_print);
++#endif /* HAVE_SRAND_DETERMINISTIC */
+ random = rand() % 99999 + 1;
+ } else {
+ random = scratch->footnote_to_print;
+@@ -604,7 +608,11 @@ void print_html_node(GString *out, node *n, scratch_pa
+ temp_node = node_for_count(scratch->used_notes, lev);
+
+ if (scratch->extensions & EXT_RANDOM_FOOT) {
++#ifdef HAVE_SRAND_DETERMINISTIC
++ srand_deterministic(scratch->random_seed_base + lev);
++#else
+ srand(scratch->random_seed_base + lev);
++#endif /* HAVE_SRAND_DETERMINISTIC */
+ random = rand() % 99999 + 1;
+ } else {
+ random = lev;
+@@ -658,7 +666,11 @@ void print_html_node(GString *out, node *n, scratch_pa
+ fprintf(stderr, "matching cite found - %d\n",lev);
+ #endif
+ if (scratch->extensions & EXT_RANDOM_FOOT) {
++#ifdef HAVE_SRAND_DETERMINISTIC
++ srand_deterministic(scratch->random_seed_base + lev);
++#else
+ srand(scratch->random_seed_base + lev);
++#endif /* HAVE_SRAND_DETERMINISTIC */
+ random = rand() % 99999 + 1;
+ } else {
+ random = lev;
+@@ -951,7 +963,11 @@ void print_html_endnotes(GString *out, scratch_pad *sc
+ pad(out, 1, scratch);
+
+ if (scratch->extensions & EXT_RANDOM_FOOT) {
++#ifdef HAVE_SRAND_DETERMINISTIC
++ srand_deterministic(scratch->random_seed_base + counter);
++#else
+ srand(scratch->random_seed_base + counter);
++#endif /* HAVE_SRAND_DETERMINISTIC */
+ random = rand() % 99999 + 1;
+ } else {
+ random = counter;
Index: patches/patch-src_multimarkdown_c
===================================================================
RCS file: patches/patch-src_multimarkdown_c
diff -N patches/patch-src_multimarkdown_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_multimarkdown_c 15 Sep 2016 21:41:05 -0000
@@ -0,0 +1,25 @@
+$OpenBSD$
+
+Use pledge(2) on OpenBSD.
+--- src/multimarkdown.c.orig Fri Aug 5 09:08:36 2016
++++ src/multimarkdown.c Thu Sep 15 17:28:27 2016
+@@ -58,6 +58,7 @@
+ */
+
+
++#include <errno.h>
+ #include <getopt.h>
+ #include <libgen.h>
+ #include "parser.h"
+@@ -262,6 +263,11 @@ int main(int argc, char **argv)
+ abort();
+ }
+ }
++
++ if (pledge("stdio rpath wpath cpath", NULL) == -1) {
++ fprintf(stderr,"pledge: error #%d\n", errno);
++ exit(EXIT_FAILURE);
++ }
+
+ /* Compatibility mode emulates the behavior of Markdown.pl */
+ if (compatibility_flag) {
Index: patches/patch-src_parse_utilities_c
===================================================================
RCS file: patches/patch-src_parse_utilities_c
diff -N patches/patch-src_parse_utilities_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_parse_utilities_c 15 Sep 2016 21:41:05 -0000
@@ -0,0 +1,31 @@
+$OpenBSD$
+
+Use srand_deterministic(3) on OpenBSD
+--- src/parse_utilities.c.orig Fri Aug 5 09:08:36 2016
++++ src/parse_utilities.c Thu Sep 15 15:35:50 2016
+@@ -268,10 +268,18 @@ scratch_pad * mk_scratch_pad(unsigned long extensions)
+ result->inside_footnote = 0;
+
+ if (extensions & EXT_RANDOM_FOOT) {
++#ifdef HAVE_SRAND_DETERMINISTIC
++ srand_deterministic((int)time(NULL));
++#else
+ srand((int)time(NULL));
++#endif /* HAVE_SRAND_DETERMINISTIC */
+ result->random_seed_base = rand() % 32000;
+ } else {
++#ifdef HAVE_SRAND_DETERMINISTIC
++ srand_deterministic(1);
++#else
+ srand(1);
++#endif /* HAVE_SRAND_DETERMINISTIC */
+ result->random_seed_base = 0;
+ }
+ ran_start(310952L);
+@@ -909,4 +917,4 @@ char * my_strndup(const char * source, size_t n) {
+ result[len] = '\0';
+
+ return result;
+-}
+\ No newline at end of file
++}
Index: patches/patch-writer_c
===================================================================
RCS file: patches/patch-writer_c
diff -N patches/patch-writer_c
--- patches/patch-writer_c 24 Mar 2015 19:16:13 -0000 1.1.1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,42 +0,0 @@
-$OpenBSD: patch-writer_c,v 1.1.1.1 2015/03/24 19:16:13 okan Exp $
-
-Switch from strcat to a safer idiom.
-
---- writer.c.orig Mon Mar 9 18:52:39 2015
-+++ writer.c Sat Mar 21 15:44:10 2015
-@@ -648,6 +648,7 @@ char * dimension_for_attribute(char *querystring, node
- int i;
- char *upper;
- GString *result;
-+ size_t dimension_len;
-
- attribute = node_for_attribute(querystring, list);
- if (attribute == NULL) return NULL;
-@@ -655,6 +656,7 @@ char * dimension_for_attribute(char *querystring, node
- fprintf(stderr, "a\n");
- #endif
-
-+ dimension_len = strlen(attribute->children->str);
- dimension = strdup(attribute->children->str);
- upper = strdup(attribute->children->str);
-
-@@ -667,15 +669,13 @@ char * dimension_for_attribute(char *querystring, node
- fprintf(stderr, "b\n");
- #endif
-
-- if (strstr(dimension, "px")) {
-- ptr = strstr(dimension,"px");
-- ptr[0] = '\0';
-- strcat(ptr,"pt");
-- }
-+ ptr = strstr(dimension, "px");
-+ if (ptr)
-+ ptr[1] = 't';
-
- result = g_string_new(dimension);
-
-- if ((strcmp(dimension,upper) == 0) && (dimension[strlen(dimension) -1] != '%')) {
-+ if ((strcmp(dimension,upper) == 0) && (dimension[dimension_len-1] != '%')) {
- /* no units */
- g_string_append_printf(result, "pt");
- }