From 8e4ee5b94bde3bceb4db9fa10ebba640e9f0bf96 Mon Sep 17 00:00:00 2001 From: Norihiro Tanaka
Date: Wed, 14 May 2014 16:37:52 +0900 Subject: [PATCH] grep: revert egrep and fgrep to executables from shell scripts and simplify them Revert egrep and fgrep to executables due to not suppoted POSIX shells and simplify them. * src/Makefile.am (bin_PROGRAMS): Add egrep, fgrep. (bin_SCRIPTS): Remove it. (grep_SOURCES): Move searchutils.c, dfa.c, dfasearch.c, kwset.c, kwsearch.c, pcresearch.c here to libgrep_a_SOURCES. (egrep_SOURCES, fgrep_SOURCES): New macro. (noinst_LIBRARIES): Add libgrep.a. (libgrep_a_SOURCES): Move searchutils.c, dfa.c, dfasearch.c, kwset.c, kwsearch.c, pcresearch.c here from grep_SOURCES. (LDADD): Add libgrep.a. (egrep, fgrep): Use rule of grep. (CLEANFILES): Remove macro. * src/grep.c (SELECTED_MATCHER, DEFAULT_MATCHER): New macro. (do_execute, usage, matchers, main): Use them. * src/egrep.c: Define SELECTED_MATCHER macro for egrep. * src/fgrep.c: Define SELECTED_MATCHER macro for fgrep. --- src/Makefile.am | 35 ++++++++++------------------------- src/egrep.c | 22 ++++++++++++++++++++++ src/egrep.sh | 11 ----------- src/fgrep.c | 22 ++++++++++++++++++++++ src/grep.c | 29 +++++++++++++++++++++++++---- src/search.h | 2 ++ 6 files changed, 81 insertions(+), 40 deletions(-) create mode 100644 src/egrep.c delete mode 100644 src/egrep.sh create mode 100644 src/fgrep.c diff --git a/src/Makefile.am b/src/Makefile.am index e2c82a4..80754be 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -21,20 +21,23 @@ AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) # Tell the linker to omit references to unused shared libraries. AM_LDFLAGS = $(IGNORE_UNUSED_LIBRARIES_CFLAGS) -bin_PROGRAMS = grep -bin_SCRIPTS = egrep fgrep -grep_SOURCES = grep.c searchutils.c \ - dfa.c dfasearch.c \ - kwset.c kwsearch.c \ - pcresearch.c +bin_PROGRAMS = grep egrep fgrep +grep_SOURCES = grep.c +egrep_SOURCES = egrep.c +fgrep_SOURCES = fgrep.c noinst_HEADERS = grep.h dfa.h kwset.h search.h system.h +noinst_LIBRARIES = libgrep.a +libgrep_a_SOURCES = kwset.c dfa.c searchutils.c dfasearch.c kwsearch.c \ + pcresearch.c + # Sometimes, the expansion of $(LIBINTL) includes -lc which may # include modules defining variables like 'optind', so libgreputils.a # must precede $(LIBINTL) in order to ensure we use GNU getopt. # But libgreputils.a must also follow $(LIBINTL), since libintl uses # replacement functions defined in libgreputils.a. LDADD = \ + libgrep.a \ ../lib/libgreputils.a $(LIBINTL) ../lib/libgreputils.a $(LIBICONV) \ $(LIBTHREAD) @@ -42,22 +45,4 @@ grep_LDADD = $(LDADD) $(LIB_PCRE) localedir = $(datadir)/locale AM_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib -EXTRA_DIST = dosbuf.c egrep.sh - -egrep fgrep: egrep.sh Makefile - $(AM_V_GEN)grep=`echo grep | sed -e '$(transform)'` && \ - case $@ in egrep) option=-E;; fgrep) option=-F;; esac && \ - shell_does_substrings='set x/y && d=$${1%/*} && test "$$d" = x' && \ - if $(SHELL) -c "$$shell_does_substrings" 2>/dev/null; then \ - edit_substring='s,X,X,'; \ - else \ - edit_substring='s,\$${0%/\*},`expr "X$$0" : '\''X\\(.*\\)/'\''`,g'; \ - fi && \ - sed -e 's|address@hidden@|$(SHELL)|g' \ - -e "$$edit_substring" \ - -e "s|address@hidden@|$$grep|g" \ - -e "s|address@hidden@|$$option|g" <$(srcdir)/egrep.sh >address@hidden - $(AM_V_at)chmod +x address@hidden - $(AM_V_at)mv address@hidden $@ - -CLEANFILES = egrep fgrep *-t +EXTRA_DIST = dosbuf.c diff --git a/src/egrep.c b/src/egrep.c new file mode 100644 index 0000000..c5e7438 --- /dev/null +++ b/src/egrep.c @@ -0,0 +1,22 @@ +/* egrep.c - wrapper file for egrep. + Copyright (C) 1992, 1997-2002, 2004-2014 Free Software Foundation, Inc. + + 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, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA + 02110-1301, USA. */ + +#undef SELECTED_MATCHER +#define SELECTED_MATCHER "egrep" + +#include "grep.c" diff --git a/src/egrep.sh b/src/egrep.sh deleted file mode 100644 index 1a03d2a..0000000 --- a/src/egrep.sh +++ /dev/null @@ -1,11 +0,0 @@ address@hidden@ -grep=grep -case $0 in - */*) - dir=${0%/*} - if test -x "$dir/@grep@"; then - PATH=$dir:$PATH - address@hidden@ - fi;; -esac -exec $grep @option@ "$@" diff --git a/src/fgrep.c b/src/fgrep.c new file mode 100644 index 0000000..d8728ff --- /dev/null +++ b/src/fgrep.c @@ -0,0 +1,22 @@ +/* fgrep.c - wrapper file for fgrep. + Copyright (C) 1992, 1997-2002, 2004-2014 Free Software Foundation, Inc. + + 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, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA + 02110-1301, USA. */ + +#undef SELECTED_MATCHER +#define SELECTED_MATCHER "fgrep" + +#include "grep.c" diff --git a/src/grep.c b/src/grep.c index ec955d8..c204956 100644 --- a/src/grep.c +++ b/src/grep.c @@ -53,6 +53,15 @@ #define SEP_CHAR_REJECTED '-' #define SEP_STR_GROUP "--" +#ifdef SELECTED_MATCHER +# undef DEFAULT_MATCHER +# define DEFAULT_MATCHER SELECTED_MATCHER +#else +# ifndef DEFAULT_MATCHER +# define DEFAULT_MATCHER "grep" +# endif +#endif + #define AUTHORS \ proper_name ("Mike Haertel"), \ _("others, see