git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jeffrey Walton <noloader@gmail.com>
To: Eric Sunshine <sunshine@sunshineco.com>
Cc: "Git List" <git@vger.kernel.org>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: Re: Solaris and sed: Too many commands, last: s/\n//
Date: Mon, 11 Mar 2019 22:11:41 -0400	[thread overview]
Message-ID: <CAH8yC8kD3XkYP2o6k3ioCcNB_+wwQ=H2=V03z7Han1K8t2aUsg@mail.gmail.com> (raw)
In-Reply-To: <CAH8yC8=PKro1_WW=wJQoVHC88cziJPfgkHh6jNKOUxeFn3KVsQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2041 bytes --]

On Mon, Mar 11, 2019 at 9:55 PM Jeffrey Walton <noloader@gmail.com> wrote:
>
> On Mon, Mar 11, 2019 at 9:07 PM Jeffrey Walton <noloader@gmail.com> wrote:
> >
> > On Mon, Mar 11, 2019 at 6:28 PM Eric Sunshine <sunshine@sunshineco.com> wrote:
> > >
> > > On Mon, Mar 11, 2019 at 05:43:55PM -0400, Jeffrey Walton wrote:
> > > > On Mon, Mar 11, 2019 at 5:15 PM Eric Sunshine <sunshine@sunshineco.com> wrote:
> > > > > On Mon, Mar 11, 2019 at 4:32 PM Jeffrey Walton <noloader@gmail.com> wrote:
> > > > > > I enabled self tests for Solaris. Solaris has some anemic utilities so
> > > > > > I put /usr/gnu/bin first on-path.
> > > > >
> > > > > The first question is if you are really running GNU 'sed'? My guess is
> > > > > "no, it's still picking up Solaris's 'sed'".
> > > >
> > > > I believe so. After modifying PATH, command -v returns:
> > > >
> > > >     Solaris tools:
> > > >          sed: /usr/gnu/bin/sed
> > > >          awk: /usr/gnu/bin/awk
> > > >         grep: /usr/gnu/bin/grep
> > > >
> > > > (This was added to my scripts to confirm).
> > > ...
> > >
> > > > Maybe Git would benefit from SED, AWK and GREP variables like PERL.
> > >
> > > Very possibly.
> >
> > Another potential workaround is to use Perl. Perl is already a
> > prerequisite, it get passed to the test gear through PERL_PATH, and it
> > avoids Solaris' anemic tools.
> >
> > Sadly my Perl sucks. You would be disappointed if I tried to whip up a patch.
>
> Oh man, you're using GNU make. I thought Git was using that anemic
> Posix Make. See attached.
>
> I think Solaris provides an older gawk. Is this an easier problem:
>
>     awk: chainlint.sed:88: :squash
>     awk: chainlint.sed:88: ^ syntax error
>     awk: chainlint.sed:91:  s/\\\n//
>     awk: chainlint.sed:91:    ^ backslash not last character on line
>     Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
>     Usage: awk [POSIX or GNU style options] [--] 'program' file ...

My bad , there was a typo... 'awk' got assigned to SED variable.

This patch works as expected.

Jeff

[-- Attachment #2: git3.patch --]
[-- Type: application/octet-stream, Size: 2656 bytes --]

diff --git a/t/Makefile b/t/Makefile
index c83fd18861..10abb1c34c 100644
--- a/t/Makefile
+++ b/t/Makefile
@@ -11,11 +11,25 @@ SHELL_PATH ?= $(SHELL)
 TEST_SHELL_PATH ?= $(SHELL_PATH)
 PERL_PATH ?= /usr/bin/perl
 TAR ?= $(TAR)
+AWK ?= $(AWK)
+SED ?= $(SED)
+GREP ?= $(GREP)
 RM ?= rm -f
 PROVE ?= prove
 DEFAULT_TEST_TARGET ?= test
 TEST_LINT ?= test-lint
 
+# Fix Solaris tools. These are Posix. GNU tools located at /usr/gnu/bin.
+ifneq ($(wildcard /usr/gnu/bin/grep),)
+  GREP := /usr/gnu/bin/grep
+endif
+ifneq ($(wildcard /usr/gnu/bin/sed),)
+  SED := /usr/gnu/bin/sed
+endif
+ifneq ($(wildcard /usr/gnu/bin/awk),)
+  SED := /usr/gnu/bin/awk
+endif
+
 ifdef TEST_OUTPUT_DIRECTORY
 TEST_RESULTS_DIRECTORY = $(TEST_OUTPUT_DIRECTORY)/test-results
 CHAINLINTTMP = $(TEST_OUTPUT_DIRECTORY)/chainlinttmp
@@ -35,7 +49,7 @@ T = $(sort $(wildcard t[0-9][0-9][0-9][0-9]-*.sh))
 TGITWEB = $(sort $(wildcard t95[0-9][0-9]-*.sh))
 THELPERS = $(sort $(filter-out $(T),$(wildcard *.sh)))
 CHAINLINTTESTS = $(sort $(patsubst chainlint/%.test,%,$(wildcard chainlint/*.test)))
-CHAINLINT = sed -f chainlint.sed
+CHAINLINT = $(SED) -f chainlint.sed
 
 all: $(DEFAULT_TEST_TARGET)
 
@@ -44,8 +58,8 @@ test: pre-clean check-chainlint $(TEST_LINT)
 
 failed:
 	@failed=$$(cd '$(TEST_RESULTS_DIRECTORY_SQ)' && \
-		grep -l '^failed [1-9]' *.counts | \
-		sed -n 's/\.counts$$/.sh/p') && \
+		$(GREP) -l '^failed [1-9]' *.counts | \
+		$(SED) -n 's/\.counts$$/.sh/p') && \
 	test -z "$$failed" || $(MAKE) $$failed
 
 prove: pre-clean check-chainlint $(TEST_LINT)
@@ -73,7 +87,7 @@ check-chainlint:
 	err=0 && \
 	for i in $(CHAINLINTTESTS); do \
 		$(CHAINLINT) <chainlint/$$i.test | \
-		sed -e '/^# LINT: /d' >'$(CHAINLINTTMP_SQ)'/$$i.actual && \
+		$(SED) -e '/^# LINT: /d' >'$(CHAINLINTTMP_SQ)'/$$i.actual && \
 		diff -u chainlint/$$i.expect '$(CHAINLINTTMP_SQ)'/$$i.actual || err=1; \
 	done && exit $$err
 
@@ -81,7 +95,7 @@ test-lint: test-lint-duplicates test-lint-executable test-lint-shell-syntax \
 	test-lint-filenames
 
 test-lint-duplicates:
-	@dups=`echo $(T) | tr ' ' '\n' | sed 's/-.*//' | sort | uniq -d` && \
+	@dups=`echo $(T) | tr ' ' '\n' | $(SED) 's/-.*//' | sort | uniq -d` && \
 		test -z "$$dups" || { \
 		echo >&2 "duplicate test numbers:" $$dups; exit 1; }
 
@@ -97,7 +111,7 @@ test-lint-filenames:
 	@# We do *not* pass a glob to ls-files but use grep instead, to catch
 	@# non-ASCII characters (which are quoted within double-quotes)
 	@bad="$$(git -c core.quotepath=true ls-files 2>/dev/null | \
-			grep '["*:<>?\\|]')"; \
+			$(GREP) '["*:<>?\\|]')"; \
 		test -z "$$bad" || { \
 		echo >&2 "non-portable file name(s): $$bad"; exit 1; }
 

  reply	other threads:[~2019-03-12  2:12 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-11 20:31 Solaris and sed: Too many commands, last: s/\n// Jeffrey Walton
2019-03-11 21:15 ` Eric Sunshine
2019-03-11 21:43   ` Jeffrey Walton
2019-03-11 22:28     ` Eric Sunshine
2019-03-12  1:07       ` Jeffrey Walton
2019-03-12  1:55         ` Jeffrey Walton
2019-03-12  2:11           ` Jeffrey Walton [this message]
2019-03-12  2:19             ` Jeffrey Walton
2019-03-12  2:45             ` Eric Sunshine
2019-03-12  3:57               ` Jeffrey Walton
2019-03-11 23:52   ` Jeffrey Walton
2019-03-12  0:18     ` Jeffrey Walton
2019-03-12  9:08   ` Ævar Arnfjörð Bjarmason

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAH8yC8kD3XkYP2o6k3ioCcNB_+wwQ=H2=V03z7Han1K8t2aUsg@mail.gmail.com' \
    --to=noloader@gmail.com \
    --cc=avarab@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=sunshine@sunshineco.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).