changeset: 157:e1a7916b66a9 user: John Donoghue date: Thu Jan 09 16:37:00 2020 -0500 summary: Add configure scripts to detect new octave functionality (Bug #55385) --- a/NEWS +++ b/NEWS @@ -1,3 +1,8 @@ +Summary of important user-visible changes for strings 1.2.1+: +------------------------------------------------------------------- + + ** Update package to compile in GNU Octave 5+ + Summary of important user-visible changes for strings 1.2.1: ------------------------------------------------------------------- @@ -5,7 +10,6 @@ trailing zeros which have been introduced by padding (bug #38974), returns uint8 vectors instead of binary64 vectors, and should perform faster. - Summary of important user-visible changes for strings 1.2.0: ------------------------------------------------------------------- --- a/src/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -OCTAVE ?= octave -MKOCTFILE ?= mkoctfile -Wall - -PCRE_SWITCHES := $(shell $(OCTAVE) \ - --no-gui --no-init-file --no-site-file --silent --no-history \ - --eval 'disp (octave_config_info ("PCRE_LIBS"));' \ - --eval 'disp (octave_config_info ("PCRE_CPPFLAGS"));' \ - ) - -pcregexp.oct: %.oct: %.cc - $(MKOCTFILE) $(PCRE_SWITCHES) -o $@ $< --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,42 @@ +# Makefile for strings package for Octave +# +# Copyright (C) 2019 John Donoghue +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . + + +# before cross building, pre-build at least $(TEXIFILE) natively, +# e.g. with targets 'doc', 'html', or 'prebuild' + +PCRE_CXXFLAGS ?= @PCRE_CFLAGS@ +PCRE_LIBS ?= @PCRE_LIBS@ + +MKOCTFILE ?= @MKOCTFILE@ + +.PHONY: all clean distclean maintainer-clean + +all: pcregexp.oct + +%.oct: %.cc + $(MKOCTFILE) -o $@ $< $(PCRE_CXXFLAGS) $(PCRE_LIBS) + +clean: + $(RM) *.o octave-core *.oct *~ + +distclean: clean + $(RM) config.h config.log config.status Makefile oct-alt-includes.h + $(RM) -r autom4te.cache + +maintainer-clean: distclean + $(RM) configure config.h.in aclocal.m4 --- /dev/null +++ b/src/bootstrap @@ -0,0 +1,7 @@ +#! /bin/sh + +aclocal + +autoconf + +autoheader -f --- /dev/null +++ b/src/configure.ac @@ -0,0 +1,102 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. +# +### Copyright (C) 2015-2018 Olaf Till +### Copyright (C) 2019 John Donoghue +### +### This program is free software; you can redistribute it and/or +### modify it under the terms of the GNU General Public License as +### published by the Free Software Foundation; either version 3 of the +### License, or (at your option) any later version. +### +### This program is distributed in the hope that it will be useful, +### but WITHOUT ANY WARRANTY; without even the implied warranty of +### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +### General Public License for more details. +### +### You should have received a copy of the GNU General Public License +### along with this program; if not, see +### . + +AC_PREREQ([2.67]) +AC_INIT([strings], [1.2.0]) +AC_CONFIG_SRCDIR([pcregexp.cc]) +AC_CONFIG_HEADERS([config.h]) + +# Avoid warnings for redefining AH-generated preprocessor symbols of +# Octave. +AH_TOP([#include "undef-ah-octave.h"]) + +AC_CONFIG_MACRO_DIRS([m4]) + +# Checks for programs. +AC_CHECK_PROG(MKOCTFILE, mkoctfile, mkoctfile) +if test -z "$MKOCTFILE"; then +AC_MSG_ERROR([mkoctfile not found], 1); +fi +AC_CHECK_PROG(OCTAVE_CONFIG, octave-config, octave-config) +if test -z "$OCTAVE_CONFIG"; then +AC_MSG_ERROR([octave-config not found], 1); +fi + +#AC_CHECK_TOOL(PKG_CONFIG, pkg-config, []) +#if test -z "$PKG_CONFIG"; then +# AC_MSG_ERROR([pkg-config not found], 1); +#fi + + +# The same value of CXX as Octave was compiled with is supposed to be used. +CXX=${CXX:-`${MKOCTFILE} -p CXX`} +AC_PROG_CXX + +AC_PROG_CXXCPP + +# Checks for typedefs, structures, and compiler characteristics. + +# Checks for library functions. +PKG_CHECK_MODULES([PCRE],[libpcre], + [], + [AC_MSG_ERROR([libpcre not found])] +) + + +# Start of checks for Octave features, preparations for checks. +OCTLIBDIR=${OCTLIBDIR:-`$OCTAVE_CONFIG -p OCTLIBDIR`} +## We need Octaves include path both with and without '/octave' +## appended. The path without '/octave' is needed to selectively test +## for Octave headers, like octave/....h. The path with '/octave' is +## needed since some Octave headers contain include directives for +## other Octave headers with <> instead of "". +OCTINCLUDEDIR=${OCTINCLUDEDIR:-`$MKOCTFILE -p INCFLAGS`} +AC_LANG_PUSH([C++]) +TCXXFLAGS=$CXXFLAGS +TLDFLAGS=$LDFLAGS +TLIBS=$LIBS +TCPPFLAGS=$CPPFLAGS +LDFLAGS="-L$OCTLIBDIR $LDFLAGS" +LIBS="-loctinterp $LIBS" +# CXXFLAGS= +CPPFLAGS="$OCTINCLUDEDIR $CPPFLAGS" + +## Simple symbol alternatives of different Octave versions. +OF_OCTAVE_LIST_ALT_SYMS([ +[dnl + [gripe_wrong_type_arg], + [err_wrong_type_arg], + [[err_wrong_type_arg("test");]], + [OCTAVE__WRONG_TYPE_ARG], + [], + [] +] +], + [oct-alt-includes.h]) + +LIBS=$TLIBS +LDFLAGS=$TLDFLAGS +CXXFLAGS=$TCXXFLAGS +CPPFLAGS=$TCPPFLAGS +AC_LANG_POP([C++]) +# End of checks for Octave features. + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT --- /dev/null +++ b/src/m4/octave-forge.m4 @@ -0,0 +1,93 @@ +# Copyright (C) 2017-2018 Olaf Till +# Modifications to print what is searching for by JohnD +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . + +# arguments of OF_OCTAVE_ALT_SYMS (see also description of +# OF_OCTAVE_LIST_ALT_SYMS below): +# +# $1: symbol version 1 +# $2: symbol version 2 +# $3: test for symbol version 2 +# $4: macro name to access alternative symbols +# $5: include directives for symbol version 1 +# $6: include directives for symbol version 2 +# (a list of lists of args 1--6 is $1 of OF_OCTAVE_LIST_ALT_SYMS) +# $7: name of generated include file with alternatives of Octave headers +# (arg7 is $2 of OF_OCTAVE_LIST_ALT_SYMS) +AC_DEFUN([OF_OCTAVE_ALT_SYMS], [ +AC_MSG_CHECKING([$1 or $2]) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include ] + $6], + [$3])], + [AC_DEFINE($4, + [[$2]], + [macro for alternative Octave symbols]) + AC_MSG_RESULT([$2]) + echo '$6' >> $7], + [AC_DEFINE($4, + [[$1]], + [macro for alternative Octave symbols]) + AC_MSG_RESULT([$1]) + echo '$5' >> $7] +) +]) + + +# OF_OCTAVE_LIST_ALT_SYMS is called in the following way: +# +# OF_OCTAVE_LIST_ALT_SYMS([ +# [dnl +# [old_octave_symbol], +# [new_octave_symbol], +# [[compilation test] +# [for new_octave_symbol]], +# [NAME_OF_GENERATED_MACRO____WILL_EXPAND_TO_OLD_OR_NEW_SYMBOL], +# [[include directives] +# [except #include ] +# [necessary to compile with old_octave_symbol]], +# [[include directives] +# [except #include ] +# [nessary to compile with new_octave_symbol] +# [and to compile the test]] +# ], +# +# ... further such lists as the above +# +# ], +# +# [name-of-header-file-for-alternative-octave-iclude-directives.h]) +# +# +# This file should be put into src/m4/, and the line +# +# AC_CONFIG_MACRO_DIRS([m4]) +# +# should be put into src/configure.ac. The package should use +# autoheader to generate config.h.in (src/bootstrap should contain the +# lines 'aclocal', 'autoconf', and 'autoheader -f'). Package code +# should include config.h and use the generated macros to access the +# alternative symbols of Octave. An example of a call to +# OF_OCTAVE_LIST_ALT_SYMS in src/configure.ac is available together +# with this file. +AC_DEFUN([OF_OCTAVE_LIST_ALT_SYMS], [ + +echo '/* generated by configure */' > $2 + +m4_foreach([it], [$1], [m4_apply([OF_OCTAVE_ALT_SYMS], [it, $2])]) + +AH_BOTTOM([#include "$2"]) + +]) --- a/src/pcregexp.cc +++ b/src/pcregexp.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2004 Stefan van der Walt +// Copyright (C) 2004-2019 Stefan van der Walt // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -26,6 +26,8 @@ #include #include +#include "config.h" + //FIXME This function needs some documentation DEFUN_DLD(pcregexp, args, nargout, "\ -*- texinfo -*-\n\ @@ -49,7 +51,7 @@ std::string pattern = args(0).string_value(); std::string input = args(1).string_value(); if (error_state) { - gripe_wrong_type_arg("pcregexp", args(0)); + OCTAVE__WRONG_TYPE_ARG("pcregexp", args(0)); return retval; } --- /dev/null +++ b/src/undef-ah-octave.h @@ -0,0 +1,27 @@ +/* To be included at the top of config.h (by autoheader). Avoid + warnings for redefining AH-generated preprocessor symbols of + Octave. */ + +#ifdef PACKAGE_BUGREPORT +#undef PACKAGE_BUGREPORT +#endif + +#ifdef PACKAGE_NAME +#undef PACKAGE_NAME +#endif + +#ifdef PACKAGE_STRING +#undef PACKAGE_STRING +#endif + +#ifdef PACKAGE_TARNAME +#undef PACKAGE_TARNAME +#endif + +#ifdef PACKAGE_URL +#undef PACKAGE_URL +#endif + +#ifdef PACKAGE_VERSION +#undef PACKAGE_VERSION +#endif