openpkg/bash.patch

Thu, 08 Jan 2009 10:21:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 08 Jan 2009 10:21:08 +0100
changeset 36
88242dc55a66
child 333
4ecfc2416fd8
permissions
-rw-r--r--

Clean up packaging, use parallel make, and port to Solaris 11.

michael@13 1 This patch documents two implemented and classical command
michael@13 2 line options "-v" and "-x". It is derived from Debian GNU/Linux.
michael@13 3
michael@13 4 Index: doc/bash.1
michael@13 5 --- doc/bash.1.orig 2004-07-12 17:27:08 +0200
michael@13 6 +++ doc/bash.1 2004-07-27 19:47:10 +0200
michael@13 7 @@ -116,6 +116,12 @@
michael@13 8 This option allows the positional parameters to be set
michael@13 9 when invoking an interactive shell.
michael@13 10 .TP
michael@13 11 +.B \-v
michael@13 12 +Print shell input lines as they are read.
michael@13 13 +.TP
michael@13 14 +.B \-x
michael@13 15 +Print commands and their arguments as they are executed.
michael@13 16 +.TP
michael@13 17 .B \-D
michael@13 18 A list of all double-quoted strings preceded by \fB$\fP
michael@13 19 is printed on the standard ouput.
michael@13 20
michael@13 21 -----------------------------------------------------------------------------
michael@13 22
michael@13 23 Port to HP-UX 11i and similar less smart platforms.
michael@13 24
michael@13 25 Index: configure
michael@13 26 --- configure.orig 2004-07-21 22:18:56 +0200
michael@13 27 +++ configure 2004-07-27 19:47:10 +0200
michael@13 28 @@ -1517,6 +1517,7 @@
michael@13 29 *-beos*) opt_bash_malloc=no ;; # they say it's suitable
michael@13 30 *-cygwin*) opt_bash_malloc=no ;; # Cygnus's CYGWIN environment
michael@13 31 *-opennt*|*-interix*) opt_bash_malloc=no ;; # Interix, now owned by Microsoft
michael@13 32 +*-hpux*) opt_bash_malloc=no ;; # HP HP-UX
michael@13 33 esac
michael@13 34
michael@13 35 # memory scrambling on free()
michael@13 36 @@ -1662,7 +1663,7 @@
michael@13 37
michael@13 38 else
michael@13 39 MALLOC_LIB=
michael@13 40 - MALLOC_LIBRARY=
michael@13 41 + MALLOC_LIBRARY=dummy
michael@13 42 MALLOC_LDFLAGS=
michael@13 43 MALLOC_DEP=
michael@13 44 fi
michael@13 45 Index: syntax.h
michael@13 46 --- syntax.h.orig 2004-04-15 05:19:36 +0200
michael@13 47 +++ syntax.h 2004-07-27 19:47:10 +0200
michael@13 48 @@ -21,6 +21,8 @@
michael@13 49 #ifndef _SYNTAX_H_
michael@13 50 #define _SYNTAX_H_
michael@13 51
michael@13 52 +#include "config.h"
michael@13 53 +
michael@13 54 /* Defines for use by mksyntax.c */
michael@13 55
michael@13 56 #define slashify_in_quotes "\\`$\"\n"
michael@13 57
michael@13 58 -----------------------------------------------------------------------------
michael@13 59
michael@13 60 This adds the OpenPKG packaging brand.
michael@13 61
michael@13 62 Index: version.c
michael@13 63 --- version.c.orig 2003-12-19 22:34:02 +0100
michael@13 64 +++ version.c 2004-07-27 19:47:10 +0200
michael@13 65 @@ -77,7 +77,7 @@
michael@13 66 show_shell_version (extended)
michael@13 67 int extended;
michael@13 68 {
michael@13 69 - printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE);
michael@13 70 + printf ("GNU bash, version %s (%s) [@l_openpkg_release@]\n", shell_version_string (), MACHTYPE);
michael@13 71 if (extended)
michael@13 72 printf (_("Copyright (C) 2004 Free Software Foundation, Inc.\n"));
michael@13 73 }
michael@13 74
michael@13 75 -----------------------------------------------------------------------------
michael@13 76
michael@13 77 Accumulated vendor patches Bash 3.2 001-005
michael@13 78
michael@13 79 Generated via:
michael@13 80
michael@13 81 $ gunzip <bash-3.2.tar.gz | tar xf -
michael@13 82 $ pushd bash-3.2
michael@13 83 $ cat bash32-[0-9]* | patch -p0 -Vt -b
michael@13 84 $ shtool move -e '*.~1~' '%1.orig'
michael@13 85 $ pushd /tmp
michael@13 86 $ curl -O ftp://ftp.gnu.org/gnu/bison/bison-1.28.tar.gz
michael@13 87 $ cd bison-1.28
michael@13 88 $ ./configure --prefix=/tmp/bison
michael@13 89 $ make
michael@13 90 $ make install
michael@13 91 $ popd
michael@13 92 $ mv y.tab.c y.tab.c.orig
michael@13 93 $ mv y.tab.h y.tab.h.orig
michael@13 94 $ /tmp/bison/bin/bison -y -d parse.y
michael@13 95 $ rm -rf /tmp/bison /tmp/bison-1.28 /tmp/bison-1.28.tar.gz
michael@13 96 $ shtool subst -b.dummy \
michael@13 97 -e 's;parse\.y;/Users/chet/src/bash/src/parse.y;g' \
michael@13 98 -e 's;/tmp/bison/share/bison\.simple;/usr/share/bison.simple;g' y.tab.c
michael@13 99 $ svs diff >/tmp/bash.patch
michael@13 100 $ popd
michael@13 101 $ rm -rf bash-3.2
michael@13 102
michael@13 103 Index: parse.y
michael@13 104 --- parse.y.orig 2006-09-19 22:37:21 +0200
michael@13 105 +++ parse.y 2006-12-06 13:32:45 +0100
michael@13 106 @@ -1029,6 +1029,7 @@
michael@13 107 #define PST_CMDTOKEN 0x1000 /* command token OK - unused */
michael@13 108 #define PST_COMPASSIGN 0x2000 /* parsing x=(...) compound assignment */
michael@13 109 #define PST_ASSIGNOK 0x4000 /* assignment statement ok in this context */
michael@13 110 +#define PST_REGEXP 0x8000 /* parsing an ERE/BRE as a single word */
michael@13 111
michael@13 112 /* Initial size to allocate for tokens, and the
michael@13 113 amount to grow them by. */
michael@13 114 @@ -2591,6 +2592,9 @@
michael@13 115 return (character);
michael@13 116 }
michael@13 117
michael@13 118 + if (parser_state & PST_REGEXP)
michael@13 119 + goto tokword;
michael@13 120 +
michael@13 121 /* Shell meta-characters. */
michael@13 122 if MBTEST(shellmeta (character) && ((parser_state & PST_DBLPAREN) == 0))
michael@13 123 {
michael@13 124 @@ -2698,6 +2702,7 @@
michael@13 125 if MBTEST(character == '-' && (last_read_token == LESS_AND || last_read_token == GREATER_AND))
michael@13 126 return (character);
michael@13 127
michael@13 128 +tokword:
michael@13 129 /* Okay, if we got this far, we have to read a word. Read one,
michael@13 130 and then check it against the known ones. */
michael@13 131 result = read_token_word (character);
michael@13 132 @@ -2735,7 +2740,7 @@
michael@13 133 /* itrace("parse_matched_pair: open = %c close = %c", open, close); */
michael@13 134 count = 1;
michael@13 135 pass_next_character = backq_backslash = was_dollar = in_comment = 0;
michael@13 136 - check_comment = (flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0;
michael@13 137 + check_comment = (flags & P_COMMAND) && qc != '`' && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0;
michael@13 138
michael@13 139 /* RFLAGS is the set of flags we want to pass to recursive calls. */
michael@13 140 rflags = (qc == '"') ? P_DQUOTE : (flags & P_DQUOTE);
michael@13 141 @@ -3202,8 +3207,11 @@
michael@13 142 if (tok == WORD && test_binop (yylval.word->word))
michael@13 143 op = yylval.word;
michael@13 144 #if defined (COND_REGEXP)
michael@13 145 - else if (tok == WORD && STREQ (yylval.word->word,"=~"))
michael@13 146 - op = yylval.word;
michael@13 147 + else if (tok == WORD && STREQ (yylval.word->word, "=~"))
michael@13 148 + {
michael@13 149 + op = yylval.word;
michael@13 150 + parser_state |= PST_REGEXP;
michael@13 151 + }
michael@13 152 #endif
michael@13 153 else if (tok == '<' || tok == '>')
michael@13 154 op = make_word_from_token (tok); /* ( */
michael@13 155 @@ -3234,6 +3242,7 @@
michael@13 156
michael@13 157 /* rhs */
michael@13 158 tok = read_token (READ);
michael@13 159 + parser_state &= ~PST_REGEXP;
michael@13 160 if (tok == WORD)
michael@13 161 {
michael@13 162 tright = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL);
michael@13 163 @@ -3419,9 +3428,34 @@
michael@13 164 goto next_character;
michael@13 165 }
michael@13 166
michael@13 167 +#ifdef COND_REGEXP
michael@13 168 + /* When parsing a regexp as a single word inside a conditional command,
michael@13 169 + we need to special-case characters special to both the shell and
michael@13 170 + regular expressions. Right now, that is only '(' and '|'. */ /*)*/
michael@13 171 + if MBTEST((parser_state & PST_REGEXP) && (character == '(' || character == '|')) /*)*/
michael@13 172 + {
michael@13 173 + if (character == '|')
michael@13 174 + goto got_character;
michael@13 175 +
michael@13 176 + push_delimiter (dstack, character);
michael@13 177 + ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0);
michael@13 178 + pop_delimiter (dstack);
michael@13 179 + if (ttok == &matched_pair_error)
michael@13 180 + return -1; /* Bail immediately. */
michael@13 181 + RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2,
michael@13 182 + token_buffer_size, TOKEN_DEFAULT_GROW_SIZE);
michael@13 183 + token[token_index++] = character;
michael@13 184 + strcpy (token + token_index, ttok);
michael@13 185 + token_index += ttoklen;
michael@13 186 + FREE (ttok);
michael@13 187 + dollar_present = all_digit_token = 0;
michael@13 188 + goto next_character;
michael@13 189 + }
michael@13 190 +#endif /* COND_REGEXP */
michael@13 191 +
michael@13 192 #ifdef EXTENDED_GLOB
michael@13 193 /* Parse a ksh-style extended pattern matching specification. */
michael@13 194 - if (extended_glob && PATTERN_CHAR (character))
michael@13 195 + if MBTEST(extended_glob && PATTERN_CHAR (character))
michael@13 196 {
michael@13 197 peek_char = shell_getc (1);
michael@13 198 if MBTEST(peek_char == '(') /* ) */
michael@13 199 Index: patchlevel.h
michael@13 200 --- patchlevel.h.orig 2006-04-13 14:31:04 +0200
michael@13 201 +++ patchlevel.h 2006-12-06 13:32:45 +0100
michael@13 202 @@ -25,6 +25,6 @@
michael@13 203 regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
michael@13 204 looks for to find the patch level (for the sccs version string). */
michael@13 205
michael@13 206 -#define PATCHLEVEL 0
michael@13 207 +#define PATCHLEVEL 5
michael@13 208
michael@13 209 #endif /* _PATCHLEVEL_H_ */
michael@13 210 Index: subst.c
michael@13 211 --- subst.c.orig 2006-09-19 14:35:09 +0200
michael@13 212 +++ subst.c 2006-12-06 13:32:45 +0100
michael@13 213 @@ -5707,6 +5707,11 @@
michael@13 214 vtype &= ~VT_STARSUB;
michael@13 215
michael@13 216 mflags = 0;
michael@13 217 + if (patsub && *patsub == '/')
michael@13 218 + {
michael@13 219 + mflags |= MATCH_GLOBREP;
michael@13 220 + patsub++;
michael@13 221 + }
michael@13 222
michael@13 223 /* Malloc this because expand_string_if_necessary or one of the expansion
michael@13 224 functions in its call chain may free it on a substitution error. */
michael@13 225 @@ -5741,13 +5746,12 @@
michael@13 226 }
michael@13 227
michael@13 228 /* ksh93 doesn't allow the match specifier to be a part of the expanded
michael@13 229 - pattern. This is an extension. */
michael@13 230 + pattern. This is an extension. Make sure we don't anchor the pattern
michael@13 231 + at the beginning or end of the string if we're doing global replacement,
michael@13 232 + though. */
michael@13 233 p = pat;
michael@13 234 - if (pat && pat[0] == '/')
michael@13 235 - {
michael@13 236 - mflags |= MATCH_GLOBREP|MATCH_ANY;
michael@13 237 - p++;
michael@13 238 - }
michael@13 239 + if (mflags & MATCH_GLOBREP)
michael@13 240 + mflags |= MATCH_ANY;
michael@13 241 else if (pat && pat[0] == '#')
michael@13 242 {
michael@13 243 mflags |= MATCH_BEG;
michael@13 244 Index: y.tab.c
michael@13 245 --- y.tab.c.orig 2006-09-25 14:15:16 +0200
michael@13 246 +++ y.tab.c 2006-12-06 13:39:36 +0100
michael@13 247 @@ -2359,6 +2359,7 @@
michael@13 248 #define PST_CMDTOKEN 0x1000 /* command token OK - unused */
michael@13 249 #define PST_COMPASSIGN 0x2000 /* parsing x=(...) compound assignment */
michael@13 250 #define PST_ASSIGNOK 0x4000 /* assignment statement ok in this context */
michael@13 251 +#define PST_REGEXP 0x8000 /* parsing an ERE/BRE as a single word */
michael@13 252
michael@13 253 /* Initial size to allocate for tokens, and the
michael@13 254 amount to grow them by. */
michael@13 255 @@ -3921,6 +3922,9 @@
michael@13 256 return (character);
michael@13 257 }
michael@13 258
michael@13 259 + if (parser_state & PST_REGEXP)
michael@13 260 + goto tokword;
michael@13 261 +
michael@13 262 /* Shell meta-characters. */
michael@13 263 if MBTEST(shellmeta (character) && ((parser_state & PST_DBLPAREN) == 0))
michael@13 264 {
michael@13 265 @@ -4028,6 +4032,7 @@
michael@13 266 if MBTEST(character == '-' && (last_read_token == LESS_AND || last_read_token == GREATER_AND))
michael@13 267 return (character);
michael@13 268
michael@13 269 +tokword:
michael@13 270 /* Okay, if we got this far, we have to read a word. Read one,
michael@13 271 and then check it against the known ones. */
michael@13 272 result = read_token_word (character);
michael@13 273 @@ -4065,7 +4070,7 @@
michael@13 274 /* itrace("parse_matched_pair: open = %c close = %c", open, close); */
michael@13 275 count = 1;
michael@13 276 pass_next_character = backq_backslash = was_dollar = in_comment = 0;
michael@13 277 - check_comment = (flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0;
michael@13 278 + check_comment = (flags & P_COMMAND) && qc != '`' && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0;
michael@13 279
michael@13 280 /* RFLAGS is the set of flags we want to pass to recursive calls. */
michael@13 281 rflags = (qc == '"') ? P_DQUOTE : (flags & P_DQUOTE);
michael@13 282 @@ -4532,8 +4537,11 @@
michael@13 283 if (tok == WORD && test_binop (yylval.word->word))
michael@13 284 op = yylval.word;
michael@13 285 #if defined (COND_REGEXP)
michael@13 286 - else if (tok == WORD && STREQ (yylval.word->word,"=~"))
michael@13 287 - op = yylval.word;
michael@13 288 + else if (tok == WORD && STREQ (yylval.word->word, "=~"))
michael@13 289 + {
michael@13 290 + op = yylval.word;
michael@13 291 + parser_state |= PST_REGEXP;
michael@13 292 + }
michael@13 293 #endif
michael@13 294 else if (tok == '<' || tok == '>')
michael@13 295 op = make_word_from_token (tok); /* ( */
michael@13 296 @@ -4564,6 +4572,7 @@
michael@13 297
michael@13 298 /* rhs */
michael@13 299 tok = read_token (READ);
michael@13 300 + parser_state &= ~PST_REGEXP;
michael@13 301 if (tok == WORD)
michael@13 302 {
michael@13 303 tright = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL);
michael@13 304 @@ -4749,9 +4758,34 @@
michael@13 305 goto next_character;
michael@13 306 }
michael@13 307
michael@13 308 +#ifdef COND_REGEXP
michael@13 309 + /* When parsing a regexp as a single word inside a conditional command,
michael@13 310 + we need to special-case characters special to both the shell and
michael@13 311 + regular expressions. Right now, that is only '(' and '|'. */ /*)*/
michael@13 312 + if MBTEST((parser_state & PST_REGEXP) && (character == '(' || character == '|')) /*)*/
michael@13 313 + {
michael@13 314 + if (character == '|')
michael@13 315 + goto got_character;
michael@13 316 +
michael@13 317 + push_delimiter (dstack, character);
michael@13 318 + ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0);
michael@13 319 + pop_delimiter (dstack);
michael@13 320 + if (ttok == &matched_pair_error)
michael@13 321 + return -1; /* Bail immediately. */
michael@13 322 + RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2,
michael@13 323 + token_buffer_size, TOKEN_DEFAULT_GROW_SIZE);
michael@13 324 + token[token_index++] = character;
michael@13 325 + strcpy (token + token_index, ttok);
michael@13 326 + token_index += ttoklen;
michael@13 327 + FREE (ttok);
michael@13 328 + dollar_present = all_digit_token = 0;
michael@13 329 + goto next_character;
michael@13 330 + }
michael@13 331 +#endif /* COND_REGEXP */
michael@13 332 +
michael@13 333 #ifdef EXTENDED_GLOB
michael@13 334 /* Parse a ksh-style extended pattern matching specification. */
michael@13 335 - if (extended_glob && PATTERN_CHAR (character))
michael@13 336 + if MBTEST(extended_glob && PATTERN_CHAR (character))
michael@13 337 {
michael@13 338 peek_char = shell_getc (1);
michael@13 339 if MBTEST(peek_char == '(') /* ) */
michael@13 340
michael@13 341 -----------------------------------------------------------------------------
michael@13 342
michael@13 343 Do not require autoconf. Fixes build on Solaris 10 8/07 u4 on sparc64
michael@13 344
michael@13 345 Index: Makefile.in
michael@13 346 --- Makefile.in.orig 2006-08-17 20:03:35 +0200
michael@13 347 +++ Makefile.in 2007-10-15 13:00:34 +0200
michael@13 348 @@ -682,13 +682,9 @@
michael@13 349 stamp-h: config.status $(srcdir)/config.h.in $(srcdir)/config-top.h $(srcdir)/config-bot.h
michael@13 350 CONFIG_FILES= CONFIG_HEADERS=config.h $(SHELL) ./config.status
michael@13 351
michael@13 352 -config.status: $(srcdir)/configure
michael@13 353 +config.status:
michael@13 354 $(SHELL) ./config.status --recheck
michael@13 355
michael@13 356 -# comment out for distribution
michael@13 357 -$(srcdir)/configure: $(srcdir)/configure.in $(srcdir)/aclocal.m4 $(srcdir)/config.h.in
michael@13 358 - cd $(srcdir) && autoconf
michael@13 359 -
michael@13 360 # for chet
michael@13 361 reconfig: force
michael@13 362 sh $(srcdir)/configure -C

mercurial