From efd5db9a97f0868947032968a4d30ae4245ffb1d Mon Sep 17 00:00:00 2001 From: Igor Gayday Date: Thu, 3 Sep 2020 16:57:45 -0500 Subject: [PATCH 1/2] Fixes arbitrary selection of regex implementation --- makefile | 7 +++++-- src/ftlRegex.F90 | 8 ++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/makefile b/makefile index d03541d..8ae4684 100644 --- a/makefile +++ b/makefile @@ -119,7 +119,7 @@ cleanall: # Shared library of non-template components: -$(BUILDDIR)/libftl.so: $(BUILDDIR)/ftlKinds.o $(BUILDDIR)/ftlString.o $(BUILDDIR)/ftlHash.o $(BUILDDIR)/ftlRegex.o +$(BUILDDIR)/libftl.so: $(BUILDDIR)/ftlKinds.o $(BUILDDIR)/ftlString.o $(BUILDDIR)/ftlHash.o $(BUILDDIR)/ftlRegex.o $(BUILDDIR)/ftlRegex_c.o $(COMPILER) $(FLAGS) $(INCLUDES) $(DEFINES) $^ $(LDFLAGS) $(SOLDFLAGS) -o $@ @@ -155,7 +155,7 @@ $(BUILDDIR)/ftlSharedPtrTests.o: tests/ftlSharedPtrTests.F90 $(BUILDDIR)/ftlShar $(BUILDDIR)/ftlStringTests.o: tests/ftlStringTests.F90 $(BUILDDIR)/ftlString.o $(BUILDDIR)/ftlDynArrayString.o $(BUILDDIR)/Animals.o | $(BUILDDIR) $(COMPILER) $(FLAGS) $(INCLUDES) $(DEFINES) -c $< -o $@ -$(BUILDDIR)/ftlRegexTests.o: tests/ftlRegexTests.F90 $(BUILDDIR)/ftlRegex.o | $(BUILDDIR) +$(BUILDDIR)/ftlRegexTests.o: tests/ftlRegexTests.F90 $(BUILDDIR)/ftlRegex.o $(BUILDDIR)/ftlRegex_c.o | $(BUILDDIR) $(COMPILER) $(FLAGS) $(INCLUDES) $(DEFINES) -c $< -o $@ @@ -248,6 +248,9 @@ $(BUILDDIR)/ftlString.o: src/ftlString.F90 $(BUILDDIR)/ftlHash.o $(BUILDDIR)/ftl $(BUILDDIR)/ftlRegex.o: src/ftlRegex.F90 src/configure_ftlRegex.inc $(BUILDDIR)/ftlString.o | $(BUILDDIR) $(COMPILER) $(FLAGS) $(INCLUDES) $(DEFINES) $(SOFLAGS) -c $< -o $@ +$(BUILDDIR)/ftlRegex_c.o: src/ftlRegex_c.c | $(BUILDDIR) + $(CXXCOMPILER) $(DEFINES) -c $< -o $@ + src/configure_ftlRegex.inc: configure/configure_ftlRegex.c $(CXXCOMPILER) $(DEFINES) configure/configure_ftlRegex.c -o configure/configure_ftlRegex ./configure/configure_ftlRegex | tee src/configure_ftlRegex.inc diff --git a/src/ftlRegex.F90 b/src/ftlRegex.F90 index 24b0e3e..8cbae7d 100644 --- a/src/ftlRegex.F90 +++ b/src/ftlRegex.F90 @@ -110,7 +110,7 @@ module ftlRegexModule interface - function C_regcomp(preg, pattern, flags) result(status) bind(C,name='regcomp') + function C_regcomp(preg, pattern, flags) result(status) bind(C) import type(C_ptr) , intent(in), value :: preg character(kind=C_char), intent(in) :: pattern(*) @@ -118,12 +118,12 @@ function C_regcomp(preg, pattern, flags) result(status) bind(C,name='regcomp') integer(C_int) :: status end function - subroutine C_regfree(preg) bind(C,name='regfree') + subroutine C_regfree(preg) bind(C) import type(C_ptr), intent(in), value :: preg end subroutine - function C_regerror(errcode, preg, errbuf, errbuf_size) result(errlen) bind(C,name='regerror') + function C_regerror(errcode, preg, errbuf, errbuf_size) result(errlen) bind(C) import integer(C_int) , intent(in) , value :: errcode type(C_ptr) , intent(in) , value :: preg @@ -132,7 +132,7 @@ function C_regerror(errcode, preg, errbuf, errbuf_size) result(errlen) bind(C,na integer(C_size_t) :: errlen end function - function C_regexec(preg, string, nmatch, pmatch, eflags) result(status) bind(C,name='regexec') + function C_regexec(preg, string, nmatch, pmatch, eflags) result(status) bind(C) import type(C_ptr) , intent(in) , value :: preg character(kind=C_char), intent(in) :: string(*) From faa4ce1834dfb9e0e93526a23b7c19743c3f8778 Mon Sep 17 00:00:00 2001 From: Igor Gayday Date: Thu, 3 Sep 2020 16:58:13 -0500 Subject: [PATCH 2/2] Fixes arbitrary selection of regex implementation --- src/ftlRegex_c.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/ftlRegex_c.c diff --git a/src/ftlRegex_c.c b/src/ftlRegex_c.c new file mode 100644 index 0000000..32d78f4 --- /dev/null +++ b/src/ftlRegex_c.c @@ -0,0 +1,24 @@ +#ifdef USE_PCRE +#include +#else +#include +#endif + +extern "C" { + int c_regcomp(regex_t* preg, const char* pattern, int cflags) { + return regcomp(preg, pattern, cflags); + } + + void c_regfree(regex_t* preg) { + regfree(preg); + } + + size_t c_regerror(int errcode, const regex_t* preg, char* errbuf, size_t errbuf_size) { + return regerror(errcode, preg, errbuf, errbuf_size); + } + + int c_regexec(const regex_t* preg, const char* string, size_t nmatch, regmatch_t pmatch[], int eflags) { + return regexec(preg, string, nmatch, pmatch, eflags); + } +} +