diff -r 333964c621f1 -r cb59d6afeb61 openpkg/bash.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/openpkg/bash.patch Tue Jan 06 23:40:39 2009 +0100 @@ -0,0 +1,362 @@ +This patch documents two implemented and classical command +line options "-v" and "-x". It is derived from Debian GNU/Linux. + +Index: doc/bash.1 +--- doc/bash.1.orig 2004-07-12 17:27:08 +0200 ++++ doc/bash.1 2004-07-27 19:47:10 +0200 +@@ -116,6 +116,12 @@ + This option allows the positional parameters to be set + when invoking an interactive shell. + .TP ++.B \-v ++Print shell input lines as they are read. ++.TP ++.B \-x ++Print commands and their arguments as they are executed. ++.TP + .B \-D + A list of all double-quoted strings preceded by \fB$\fP + is printed on the standard ouput. + +----------------------------------------------------------------------------- + +Port to HP-UX 11i and similar less smart platforms. + +Index: configure +--- configure.orig 2004-07-21 22:18:56 +0200 ++++ configure 2004-07-27 19:47:10 +0200 +@@ -1517,6 +1517,7 @@ + *-beos*) opt_bash_malloc=no ;; # they say it's suitable + *-cygwin*) opt_bash_malloc=no ;; # Cygnus's CYGWIN environment + *-opennt*|*-interix*) opt_bash_malloc=no ;; # Interix, now owned by Microsoft ++*-hpux*) opt_bash_malloc=no ;; # HP HP-UX + esac + + # memory scrambling on free() +@@ -1662,7 +1663,7 @@ + + else + MALLOC_LIB= +- MALLOC_LIBRARY= ++ MALLOC_LIBRARY=dummy + MALLOC_LDFLAGS= + MALLOC_DEP= + fi +Index: syntax.h +--- syntax.h.orig 2004-04-15 05:19:36 +0200 ++++ syntax.h 2004-07-27 19:47:10 +0200 +@@ -21,6 +21,8 @@ + #ifndef _SYNTAX_H_ + #define _SYNTAX_H_ + ++#include "config.h" ++ + /* Defines for use by mksyntax.c */ + + #define slashify_in_quotes "\\`$\"\n" + +----------------------------------------------------------------------------- + +This adds the OpenPKG packaging brand. + +Index: version.c +--- version.c.orig 2003-12-19 22:34:02 +0100 ++++ version.c 2004-07-27 19:47:10 +0200 +@@ -77,7 +77,7 @@ + show_shell_version (extended) + int extended; + { +- printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE); ++ printf ("GNU bash, version %s (%s) [@l_openpkg_release@]\n", shell_version_string (), MACHTYPE); + if (extended) + printf (_("Copyright (C) 2004 Free Software Foundation, Inc.\n")); + } + +----------------------------------------------------------------------------- + +Accumulated vendor patches Bash 3.2 001-005 + +Generated via: + +$ gunzip /tmp/bash.patch +$ popd +$ rm -rf bash-3.2 + +Index: parse.y +--- parse.y.orig 2006-09-19 22:37:21 +0200 ++++ parse.y 2006-12-06 13:32:45 +0100 +@@ -1029,6 +1029,7 @@ + #define PST_CMDTOKEN 0x1000 /* command token OK - unused */ + #define PST_COMPASSIGN 0x2000 /* parsing x=(...) compound assignment */ + #define PST_ASSIGNOK 0x4000 /* assignment statement ok in this context */ ++#define PST_REGEXP 0x8000 /* parsing an ERE/BRE as a single word */ + + /* Initial size to allocate for tokens, and the + amount to grow them by. */ +@@ -2591,6 +2592,9 @@ + return (character); + } + ++ if (parser_state & PST_REGEXP) ++ goto tokword; ++ + /* Shell meta-characters. */ + if MBTEST(shellmeta (character) && ((parser_state & PST_DBLPAREN) == 0)) + { +@@ -2698,6 +2702,7 @@ + if MBTEST(character == '-' && (last_read_token == LESS_AND || last_read_token == GREATER_AND)) + return (character); + ++tokword: + /* Okay, if we got this far, we have to read a word. Read one, + and then check it against the known ones. */ + result = read_token_word (character); +@@ -2735,7 +2740,7 @@ + /* itrace("parse_matched_pair: open = %c close = %c", open, close); */ + count = 1; + pass_next_character = backq_backslash = was_dollar = in_comment = 0; +- check_comment = (flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; ++ check_comment = (flags & P_COMMAND) && qc != '`' && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; + + /* RFLAGS is the set of flags we want to pass to recursive calls. */ + rflags = (qc == '"') ? P_DQUOTE : (flags & P_DQUOTE); +@@ -3202,8 +3207,11 @@ + if (tok == WORD && test_binop (yylval.word->word)) + op = yylval.word; + #if defined (COND_REGEXP) +- else if (tok == WORD && STREQ (yylval.word->word,"=~")) +- op = yylval.word; ++ else if (tok == WORD && STREQ (yylval.word->word, "=~")) ++ { ++ op = yylval.word; ++ parser_state |= PST_REGEXP; ++ } + #endif + else if (tok == '<' || tok == '>') + op = make_word_from_token (tok); /* ( */ +@@ -3234,6 +3242,7 @@ + + /* rhs */ + tok = read_token (READ); ++ parser_state &= ~PST_REGEXP; + if (tok == WORD) + { + tright = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL); +@@ -3419,9 +3428,34 @@ + goto next_character; + } + ++#ifdef COND_REGEXP ++ /* When parsing a regexp as a single word inside a conditional command, ++ we need to special-case characters special to both the shell and ++ regular expressions. Right now, that is only '(' and '|'. */ /*)*/ ++ if MBTEST((parser_state & PST_REGEXP) && (character == '(' || character == '|')) /*)*/ ++ { ++ if (character == '|') ++ goto got_character; ++ ++ push_delimiter (dstack, character); ++ ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0); ++ pop_delimiter (dstack); ++ if (ttok == &matched_pair_error) ++ return -1; /* Bail immediately. */ ++ RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2, ++ token_buffer_size, TOKEN_DEFAULT_GROW_SIZE); ++ token[token_index++] = character; ++ strcpy (token + token_index, ttok); ++ token_index += ttoklen; ++ FREE (ttok); ++ dollar_present = all_digit_token = 0; ++ goto next_character; ++ } ++#endif /* COND_REGEXP */ ++ + #ifdef EXTENDED_GLOB + /* Parse a ksh-style extended pattern matching specification. */ +- if (extended_glob && PATTERN_CHAR (character)) ++ if MBTEST(extended_glob && PATTERN_CHAR (character)) + { + peek_char = shell_getc (1); + if MBTEST(peek_char == '(') /* ) */ +Index: patchlevel.h +--- patchlevel.h.orig 2006-04-13 14:31:04 +0200 ++++ patchlevel.h 2006-12-06 13:32:45 +0100 +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 0 ++#define PATCHLEVEL 5 + + #endif /* _PATCHLEVEL_H_ */ +Index: subst.c +--- subst.c.orig 2006-09-19 14:35:09 +0200 ++++ subst.c 2006-12-06 13:32:45 +0100 +@@ -5707,6 +5707,11 @@ + vtype &= ~VT_STARSUB; + + mflags = 0; ++ if (patsub && *patsub == '/') ++ { ++ mflags |= MATCH_GLOBREP; ++ patsub++; ++ } + + /* Malloc this because expand_string_if_necessary or one of the expansion + functions in its call chain may free it on a substitution error. */ +@@ -5741,13 +5746,12 @@ + } + + /* ksh93 doesn't allow the match specifier to be a part of the expanded +- pattern. This is an extension. */ ++ pattern. This is an extension. Make sure we don't anchor the pattern ++ at the beginning or end of the string if we're doing global replacement, ++ though. */ + p = pat; +- if (pat && pat[0] == '/') +- { +- mflags |= MATCH_GLOBREP|MATCH_ANY; +- p++; +- } ++ if (mflags & MATCH_GLOBREP) ++ mflags |= MATCH_ANY; + else if (pat && pat[0] == '#') + { + mflags |= MATCH_BEG; +Index: y.tab.c +--- y.tab.c.orig 2006-09-25 14:15:16 +0200 ++++ y.tab.c 2006-12-06 13:39:36 +0100 +@@ -2359,6 +2359,7 @@ + #define PST_CMDTOKEN 0x1000 /* command token OK - unused */ + #define PST_COMPASSIGN 0x2000 /* parsing x=(...) compound assignment */ + #define PST_ASSIGNOK 0x4000 /* assignment statement ok in this context */ ++#define PST_REGEXP 0x8000 /* parsing an ERE/BRE as a single word */ + + /* Initial size to allocate for tokens, and the + amount to grow them by. */ +@@ -3921,6 +3922,9 @@ + return (character); + } + ++ if (parser_state & PST_REGEXP) ++ goto tokword; ++ + /* Shell meta-characters. */ + if MBTEST(shellmeta (character) && ((parser_state & PST_DBLPAREN) == 0)) + { +@@ -4028,6 +4032,7 @@ + if MBTEST(character == '-' && (last_read_token == LESS_AND || last_read_token == GREATER_AND)) + return (character); + ++tokword: + /* Okay, if we got this far, we have to read a word. Read one, + and then check it against the known ones. */ + result = read_token_word (character); +@@ -4065,7 +4070,7 @@ + /* itrace("parse_matched_pair: open = %c close = %c", open, close); */ + count = 1; + pass_next_character = backq_backslash = was_dollar = in_comment = 0; +- check_comment = (flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; ++ check_comment = (flags & P_COMMAND) && qc != '`' && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0; + + /* RFLAGS is the set of flags we want to pass to recursive calls. */ + rflags = (qc == '"') ? P_DQUOTE : (flags & P_DQUOTE); +@@ -4532,8 +4537,11 @@ + if (tok == WORD && test_binop (yylval.word->word)) + op = yylval.word; + #if defined (COND_REGEXP) +- else if (tok == WORD && STREQ (yylval.word->word,"=~")) +- op = yylval.word; ++ else if (tok == WORD && STREQ (yylval.word->word, "=~")) ++ { ++ op = yylval.word; ++ parser_state |= PST_REGEXP; ++ } + #endif + else if (tok == '<' || tok == '>') + op = make_word_from_token (tok); /* ( */ +@@ -4564,6 +4572,7 @@ + + /* rhs */ + tok = read_token (READ); ++ parser_state &= ~PST_REGEXP; + if (tok == WORD) + { + tright = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL); +@@ -4749,9 +4758,34 @@ + goto next_character; + } + ++#ifdef COND_REGEXP ++ /* When parsing a regexp as a single word inside a conditional command, ++ we need to special-case characters special to both the shell and ++ regular expressions. Right now, that is only '(' and '|'. */ /*)*/ ++ if MBTEST((parser_state & PST_REGEXP) && (character == '(' || character == '|')) /*)*/ ++ { ++ if (character == '|') ++ goto got_character; ++ ++ push_delimiter (dstack, character); ++ ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0); ++ pop_delimiter (dstack); ++ if (ttok == &matched_pair_error) ++ return -1; /* Bail immediately. */ ++ RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2, ++ token_buffer_size, TOKEN_DEFAULT_GROW_SIZE); ++ token[token_index++] = character; ++ strcpy (token + token_index, ttok); ++ token_index += ttoklen; ++ FREE (ttok); ++ dollar_present = all_digit_token = 0; ++ goto next_character; ++ } ++#endif /* COND_REGEXP */ ++ + #ifdef EXTENDED_GLOB + /* Parse a ksh-style extended pattern matching specification. */ +- if (extended_glob && PATTERN_CHAR (character)) ++ if MBTEST(extended_glob && PATTERN_CHAR (character)) + { + peek_char = shell_getc (1); + if MBTEST(peek_char == '(') /* ) */ + +----------------------------------------------------------------------------- + +Do not require autoconf. Fixes build on Solaris 10 8/07 u4 on sparc64 + +Index: Makefile.in +--- Makefile.in.orig 2006-08-17 20:03:35 +0200 ++++ Makefile.in 2007-10-15 13:00:34 +0200 +@@ -682,13 +682,9 @@ + stamp-h: config.status $(srcdir)/config.h.in $(srcdir)/config-top.h $(srcdir)/config-bot.h + CONFIG_FILES= CONFIG_HEADERS=config.h $(SHELL) ./config.status + +-config.status: $(srcdir)/configure ++config.status: + $(SHELL) ./config.status --recheck + +-# comment out for distribution +-$(srcdir)/configure: $(srcdir)/configure.in $(srcdir)/aclocal.m4 $(srcdir)/config.h.in +- cd $(srcdir) && autoconf +- + # for chet + reconfig: force + sh $(srcdir)/configure -C