From 8fef09d5a477cc8167e62a04d50de9a955692b5ffb93eeeca1653f5828ee9140 Mon Sep 17 00:00:00 2001 From: OBS User autobuild Date: Mon, 20 Sep 2010 14:03:33 +0000 Subject: [PATCH] Accepting request 48513 from Base:System checked in (request 48513) OBS-URL: https://build.opensuse.org/request/show/48513 OBS-URL: https://build.opensuse.org/package/show/Base:System/diffutils?expand=0&rev=12 --- diffutils-2.8.1-i18n-0.2.patch | 817 +++++++++++++++++++++++++++++++++ diffutils-2.8.7-autoconf.patch | 21 + diffutils-2.8.7-cvs.tar.bz2 | 3 + diffutils-3.0.tar.bz2 | 3 - diffutils.changes | 52 --- diffutils.spec | 34 +- 6 files changed, 862 insertions(+), 68 deletions(-) create mode 100644 diffutils-2.8.1-i18n-0.2.patch create mode 100644 diffutils-2.8.7-autoconf.patch create mode 100644 diffutils-2.8.7-cvs.tar.bz2 delete mode 100644 diffutils-3.0.tar.bz2 diff --git a/diffutils-2.8.1-i18n-0.2.patch b/diffutils-2.8.1-i18n-0.2.patch new file mode 100644 index 0000000..cc7b2e6 --- /dev/null +++ b/diffutils-2.8.1-i18n-0.2.patch @@ -0,0 +1,817 @@ +--- diffutils-2.8.7-cvs/configure.ac ++++ diffutils-2.8.7-cvs/configure.ac +@@ -57,6 +57,7 @@ if test $ac_cv_func_sigprocmask = no; th + fi + AC_FUNC_CLOSEDIR_VOID + AC_FUNC_FORK ++AC_FUNC_MBRTOWC + + AM_GNU_GETTEXT([external], [need-formatstring-macros]) + AM_GNU_GETTEXT_VERSION([0.15]) +--- diffutils-2.8.7-cvs/src/diff.c ++++ diffutils-2.8.7-cvs/src/diff.c +@@ -276,6 +276,13 @@ main (int argc, char **argv) + re_set_syntax (RE_SYNTAX_GREP | RE_NO_POSIX_BACKTRACKING); + excluded = new_exclude (); + ++#ifdef HANDLE_MULTIBYTE ++ if (MB_CUR_MAX > 1) ++ lines_differ = lines_differ_multibyte; ++ else ++#endif ++ lines_differ = lines_differ_singlebyte; ++ + /* Decode the options. */ + + while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != -1) +--- diffutils-2.8.7-cvs/src/diff.h ++++ diffutils-2.8.7-cvs/src/diff.h +@@ -23,6 +23,17 @@ + #include + #include + ++/* For platform which support the ISO C amendement 1 functionality we ++ support user defined character classes. */ ++#if defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H ++/* Solaris 2.5 has a bug: must be included before . */ ++# include ++# include ++# if defined (HAVE_MBRTOWC) ++# define HANDLE_MULTIBYTE 1 ++# endif ++#endif ++ + /* What kind of changes a hunk contains. */ + enum changes + { +@@ -353,7 +364,13 @@ extern char const change_letter[4]; + extern char const pr_program[]; + char *concat (char const *, char const *, char const *); + char *dir_file_pathname (char const *, char const *); +-bool lines_differ (char const *, char const *); ++ ++bool (*lines_differ) (char const *, char const *); ++bool lines_differ_singlebyte (char const *, char const *); ++#ifdef HANDLE_MULTIBYTE ++bool lines_differ_multibyte (char const *, char const *); ++#endif ++ + lin translate_line_number (struct file_data const *, lin); + struct change *find_change (struct change *); + struct change *find_reverse_change (struct change *); +--- diffutils-2.8.7-cvs/src/io.c ++++ diffutils-2.8.7-cvs/src/io.c +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + + /* Rotate an unsigned value to the left. */ + #define ROL(v, n) ((v) << (n) | (v) >> (sizeof (v) * CHAR_BIT - (n))) +@@ -194,6 +195,28 @@ slurp (struct file_data *current) + + /* Split the file into lines, simultaneously computing the equivalence + class for each line. */ ++#ifdef HANDLE_MULTIBYTE ++# define MBC2WC(P, END, MBLENGTH, WC, STATE, CONVFAIL) \ ++do \ ++{ \ ++ mbstate_t state_bak = STATE; \ ++ \ ++ CONVFAIL = 0; \ ++ MBLENGTH = mbrtowc (&WC, P, END - (char const *) P, &STATE); \ ++ \ ++ switch (MBLENGTH) \ ++ { \ ++ case (size_t) -2: \ ++ case (size_t) -1: \ ++ STATE = state_bak; \ ++ ++CONVFAIL; \ ++ /* Fall through. */ \ ++ case 0: \ ++ MBLENGTH = 1; \ ++ } \ ++} \ ++while (0) ++#endif + + static void + find_and_hash_each_line (struct file_data *current) +@@ -220,11 +243,294 @@ find_and_hash_each_line (struct file_dat + bool same_length_diff_contents_compare_anyway = + diff_length_compare_anyway | ignore_case; + ++#ifdef HANDLE_MULTIBYTE ++ wchar_t wc; ++ size_t mblength; ++ mbstate_t state; ++ int convfail; ++ ++ memset (&state, '\0', sizeof (mbstate_t)); ++#endif ++ + while (p < suffix_begin) + { + char const *ip = p; + + h = 0; ++#ifdef HANDLE_MULTIBYTE ++ if (MB_CUR_MAX > 1) ++ { ++ wchar_t lo_wc; ++ char mbc[MB_LEN_MAX]; ++ mbstate_t state_wc; ++ ++ /* Hash this line until we find a newline. */ ++ switch (ignore_white_space) ++ { ++ case IGNORE_ALL_SPACE: ++ while (1) ++ { ++ if (*p == '\n') ++ { ++ ++p; ++ break; ++ } ++ ++ MBC2WC (p, suffix_begin, mblength, wc, state, convfail); ++ ++ if (convfail) ++ mbc[0] = *p++; ++ else if (!iswspace (wc)) ++ { ++ bool flag = 0; ++ ++ if (ignore_case) ++ { ++ lo_wc = towlower (wc); ++ if (lo_wc != wc) ++ { ++ flag = 1; ++ ++ p += mblength; ++ memset (&state_wc, '\0', sizeof (mbstate_t)); ++ mblength = wcrtomb (mbc, lo_wc, &state_wc); ++ ++ assert (mblength != (size_t) -1 && ++ mblength != (size_t) -2); ++ ++ mblength = mblength < 1 ? 1 : mblength; ++ } ++ } ++ ++ if (!flag) ++ { ++ for (i = 0; i < mblength; i++) ++ mbc[i] = *p++; ++ } ++ } ++ else ++ { ++ p += mblength; ++ continue; ++ } ++ ++ for (i = 0; i < mblength; i++) ++ { ++ c = mbc[i]; ++ h = HASH (h, c); ++ } ++ } ++ break; ++ ++ case IGNORE_SPACE_CHANGE: ++ while (1) ++ { ++ if (*p == '\n') ++ { ++ ++p; ++ break; ++ } ++ ++ MBC2WC (p, suffix_begin, mblength, wc, state, convfail); ++ ++ if (!convfail && iswspace (wc)) ++ { ++ while (1) ++ { ++ if (*p == '\n') ++ { ++ ++p; ++ goto hashing_done; ++ } ++ ++ p += mblength; ++ MBC2WC (p, suffix_begin, mblength, wc, state, convfail); ++ if (convfail || (!convfail && !iswspace (wc))) ++ break; ++ } ++ h = HASH (h, ' '); ++ } ++ ++ /* WC is now the first non-space. */ ++ if (convfail) ++ mbc[0] = *p++; ++ else ++ { ++ bool flag = 0; ++ ++ if (ignore_case) ++ { ++ lo_wc = towlower (wc); ++ if (lo_wc != wc) ++ { ++ flag = 1; ++ ++ p += mblength; ++ memset (&state_wc, '\0', sizeof (mbstate_t)); ++ mblength = wcrtomb (mbc, lo_wc, &state_wc); ++ ++ assert (mblength != (size_t) -1 && ++ mblength != (size_t) -2); ++ ++ mblength = mblength < 1 ? 1 : mblength; ++ } ++ } ++ ++ if (!flag) ++ { ++ for (i = 0; i < mblength; i++) ++ mbc[i] = *p++; ++ } ++ } ++ ++ for (i = 0; i < mblength; i++) ++ { ++ c = mbc[i]; ++ h = HASH (h, c); ++ } ++ } ++ break; ++ ++ case IGNORE_TAB_EXPANSION: ++ { ++ size_t column = 0; ++ ++ while (1) ++ { ++ if (*p == '\n') ++ { ++ ++p; ++ break; ++ } ++ ++ MBC2WC (p, suffix_begin, mblength, wc, state, convfail); ++ ++ if (convfail) ++ { ++ c = *p++; ++ h = HASH (h, c); ++ ++column; ++ } ++ else ++ { ++ bool flag; ++ ++ switch (wc) ++ { ++ case L'\b': ++ column -= 0 < column; ++ h = HASH (h, '\b'); ++ ++p; ++ break; ++ ++ case L'\t': ++ { ++ size_t repetitions; ++ repetitions = tabsize - column % tabsize; ++ column = (column + repetitions < column ++ ? 0 ++ : column + repetitions); ++ do ++ h = HASH (h, ' '); ++ while (--repetitions != 0); ++ ++p; ++ } ++ break; ++ ++ case L'\r': ++ column = 0; ++ h = HASH (h, '\r'); ++ ++p; ++ break; ++ ++ default: ++ flag = 0; ++ column += wcwidth (wc); ++ if (ignore_case) ++ { ++ lo_wc = towlower (wc); ++ if (lo_wc != wc) ++ { ++ flag = 1; ++ p += mblength; ++ memset (&state_wc, '\0', sizeof (mbstate_t)); ++ mblength = wcrtomb (mbc, lo_wc, &state_wc); ++ ++ assert (mblength != (size_t) -1 && ++ mblength != (size_t) -2); ++ ++ mblength = mblength < 1 ? 1 : mblength; ++ } ++ } ++ ++ if (!flag) ++ { ++ for (i = 0; i < mblength; i++) ++ mbc[i] = *p++; ++ } ++ ++ for (i = 0; i < mblength; i++) ++ { ++ c = mbc[i]; ++ h = HASH (h, c); ++ } ++ } ++ } ++ } ++ } ++ break; ++ ++ default: ++ while (1) ++ { ++ if (*p == '\n') ++ { ++ ++p; ++ break; ++ } ++ ++ MBC2WC (p, suffix_begin, mblength, wc, state, convfail); ++ ++ if (convfail) ++ mbc[0] = *p++; ++ else ++ { ++ int flag = 0; ++ ++ if (ignore_case) ++ { ++ lo_wc = towlower (wc); ++ if (lo_wc != wc) ++ { ++ flag = 1; ++ p += mblength; ++ memset (&state_wc, '\0', sizeof (mbstate_t)); ++ mblength = wcrtomb (mbc, lo_wc, &state_wc); ++ ++ assert (mblength != (size_t) -1 && ++ mblength != (size_t) -2); ++ ++ mblength = mblength < 1 ? 1 : mblength; ++ } ++ } ++ ++ if (!flag) ++ { ++ for (i = 0; i < mblength; i++) ++ mbc[i] = *p++; ++ } ++ } ++ ++ for (i = 0; i < mblength; i++) ++ { ++ c = mbc[i]; ++ h = HASH (h, c); ++ } ++ } ++ } ++ goto hashing_done; ++ } ++#endif + + /* Hash this line until we find a newline. */ + if (ignore_case) +--- diffutils-2.8.7-cvs/src/side.c ++++ diffutils-2.8.7-cvs/src/side.c +@@ -73,11 +73,72 @@ print_half_line (char const *const *line + register size_t out_position = 0; + register char const *text_pointer = line[0]; + register char const *text_limit = line[1]; ++#if defined HAVE_WCHAR_H && defined HAVE_WCTYPE_H ++ unsigned char mbc[MB_LEN_MAX]; ++ wchar_t wc; ++ mbstate_t state, state_bak; ++ size_t mbc_pos, mblength; ++ int mbc_loading_flag = 0; ++ int wc_width; ++ ++ memset (&state, '\0', sizeof (mbstate_t)); ++#endif + + while (text_pointer < text_limit) + { + register unsigned char c = *text_pointer++; + ++#if defined HAVE_WCHAR_H && defined HAVE_WCTYPE_H ++ if (MB_CUR_MAX > 1 && mbc_loading_flag) ++ { ++ mbc_loading_flag = 0; ++ state_bak = state; ++ mbc[mbc_pos++] = c; ++ ++process_mbc: ++ mblength = mbrtowc (&wc, mbc, mbc_pos, &state); ++ ++ switch (mblength) ++ { ++ case (size_t)-2: /* Incomplete multibyte character. */ ++ mbc_loading_flag = 1; ++ state = state_bak; ++ break; ++ ++ case (size_t)-1: /* Invalid as a multibyte character. */ ++ if (in_position++ < out_bound) ++ { ++ out_position = in_position; ++ putc (mbc[0], out); ++ } ++ memmove (mbc, mbc + 1, --mbc_pos); ++ if (mbc_pos > 0) ++ { ++ mbc[mbc_pos] = '\0'; ++ goto process_mbc; ++ } ++ break; ++ ++ default: ++ wc_width = wcwidth (wc); ++ if (wc_width < 1) /* Unprintable multibyte character. */ ++ { ++ if (in_position <= out_bound) ++ fprintf (out, "%lc", (wint_t)wc); ++ } ++ else /* Printable multibyte character. */ ++ { ++ in_position += wc_width; ++ if (in_position <= out_bound) ++ { ++ out_position = in_position; ++ fprintf (out, "%lc", (wint_t)wc); ++ } ++ } ++ } ++ continue; ++ } ++#endif + switch (c) + { + case '\t': +@@ -135,8 +196,39 @@ print_half_line (char const *const *line + break; + + default: +- if (! isprint (c)) +- goto control_char; ++#if defined HAVE_WCHAR_H && defined HAVE_WCTYPE_H ++ if (MB_CUR_MAX > 1) ++ { ++ memset (mbc, '\0', MB_LEN_MAX); ++ mbc_pos = 0; ++ mbc[mbc_pos++] = c; ++ state_bak = state; ++ ++ mblength = mbrtowc (&wc, mbc, mbc_pos, &state); ++ ++ /* The value of mblength is always less than 2 here. */ ++ switch (mblength) ++ { ++ case (size_t)-2: /* Incomplete multibyte character. */ ++ state = state_bak; ++ mbc_loading_flag = 1; ++ continue; ++ ++ case (size_t)-1: /* Invalid as a multibyte character. */ ++ state = state_bak; ++ break; ++ ++ default: ++ if (! iswprint (wc)) ++ goto control_char; ++ } ++ } ++ else ++#endif ++ { ++ if (! isprint (c)) ++ goto control_char; ++ } + /* falls through */ + case ' ': + if (in_position++ < out_bound) +--- diffutils-2.8.7-cvs/src/util.c ++++ diffutils-2.8.7-cvs/src/util.c +@@ -317,7 +317,7 @@ finish_output (void) + Return nonzero if the lines differ. */ + + bool +-lines_differ (char const *s1, char const *s2) ++lines_differ_singlebyte (char const *s1, char const *s2) + { + register char const *t1 = s1; + register char const *t2 = s2; +@@ -446,6 +446,293 @@ lines_differ (char const *s1, char const + + return true; + } ++ ++#ifdef HANDLE_MULTIBYTE ++# define MBC2WC(T, END, MBLENGTH, WC, STATE, CONVFAIL) \ ++do \ ++{ \ ++ mbstate_t bak = STATE; \ ++ \ ++ CONVFAIL = 0; \ ++ MBLENGTH = mbrtowc (&WC, T, END - T, &STATE); \ ++ \ ++ switch (MBLENGTH) \ ++ { \ ++ case (size_t)-2: \ ++ case (size_t)-1: \ ++ STATE = bak; \ ++ ++CONVFAIL; \ ++ /* Fall through. */ \ ++ case 0: \ ++ MBLENGTH = 1; \ ++ } \ ++} \ ++while (0) ++ ++bool ++lines_differ_multibyte (char const *s1, char const *s2) ++{ ++ unsigned char const *end1, *end2; ++ unsigned char c1, c2; ++ wchar_t wc1, wc2, wc1_bak, wc2_bak; ++ size_t mblen1, mblen2; ++ mbstate_t state1, state2, state1_bak, state2_bak; ++ int convfail1, convfail2, convfail1_bak, convfail2_bak; ++ ++ unsigned char const *t1 = (unsigned char const *) s1; ++ unsigned char const *t2 = (unsigned char const *) s2; ++ unsigned char const *t1_bak, *t2_bak; ++ size_t column = 0; ++ ++ if (ignore_white_space == IGNORE_NO_WHITE_SPACE && !ignore_case) ++ { ++ while (*t1 != '\n') ++ if (*t1++ != * t2++) ++ return 1; ++ return 0; ++ } ++ ++ memset (&state1, '\0', sizeof (mbstate_t)); ++ memset (&state2, '\0', sizeof (mbstate_t)); ++ ++ end1 = s1 + strlen (s1); ++ end2 = s2 + strlen (s2); ++ ++ while (1) ++ { ++ c1 = *t1; ++ c2 = *t2; ++ MBC2WC (t1, end1, mblen1, wc1, state1, convfail1); ++ MBC2WC (t2, end2, mblen2, wc2, state2, convfail2); ++ ++ /* Test for exact char equality first, since it's a common case. */ ++ if (convfail1 ^ convfail2) ++ break; ++ else if (convfail1 && convfail2 && c1 != c2) ++ break; ++ else if (!convfail1 && !convfail2 && wc1 != wc2) ++ { ++ switch (ignore_white_space) ++ { ++ case IGNORE_ALL_SPACE: ++ /* For -w, just skip past any white space. */ ++ while (1) ++ { ++ if (convfail1) ++ break; ++ else if (wc1 == L'\n' || !iswspace (wc1)) ++ break; ++ ++ t1 += mblen1; ++ c1 = *t1; ++ MBC2WC (t1, end1, mblen1, wc1, state1, convfail1); ++ } ++ ++ while (1) ++ { ++ if (convfail2) ++ break; ++ else if (wc2 == L'\n' || !iswspace (wc2)) ++ break; ++ ++ t2 += mblen2; ++ c2 = *t2; ++ MBC2WC (t2, end2, mblen2, wc2, state2, convfail2); ++ } ++ t1 += mblen1; ++ t2 += mblen2; ++ break; ++ ++ case IGNORE_SPACE_CHANGE: ++ /* For -b, advance past any sequence of white space in ++ line 1 and consider it just one space, or nothing at ++ all if it is at the end of the line. */ ++ if (wc1 != L'\n' && iswspace (wc1)) ++ { ++ size_t mblen_bak; ++ mbstate_t state_bak; ++ ++ do ++ { ++ t1 += mblen1; ++ mblen_bak = mblen1; ++ state_bak = state1; ++ MBC2WC (t1, end1, mblen1, wc1, state1, convfail1); ++ } ++ while (!convfail1 && (wc1 != L'\n' && iswspace (wc1))); ++ ++ state1 = state_bak; ++ mblen1 = mblen_bak; ++ t1 -= mblen1; ++ convfail1 = 0; ++ wc1 = L' '; ++ } ++ ++ /* Likewise for line 2. */ ++ if (wc2 != L'\n' && iswspace (wc2)) ++ { ++ size_t mblen_bak; ++ mbstate_t state_bak; ++ ++ do ++ { ++ t2 += mblen2; ++ mblen_bak = mblen2; ++ state_bak = state2; ++ MBC2WC (t2, end2, mblen2, wc2, state2, convfail2); ++ } ++ while (!convfail2 && (wc2 != L'\n' && iswspace (wc2))); ++ ++ state2 = state_bak; ++ mblen2 = mblen_bak; ++ t2 -= mblen2; ++ convfail2 = 0; ++ wc2 = L' '; ++ } ++ ++ if (wc1 != wc2) ++ { ++ if (wc2 == L' ' && wc1 != L'\n' && ++ t1 > (unsigned char const *)s1 && ++ !convfail1_bak && iswspace (wc1_bak)) ++ { ++ t1 = t1_bak; ++ wc1 = wc1_bak; ++ state1 = state1_bak; ++ convfail1 = convfail1_bak; ++ continue; ++ } ++ if (wc1 == L' ' && wc2 != L'\n' ++ && t2 > (unsigned char const *)s2 ++ && !convfail2_bak && iswspace (wc2_bak)) ++ { ++ t2 = t2_bak; ++ wc2 = wc2_bak; ++ state2 = state2_bak; ++ convfail2 = convfail2_bak; ++ continue; ++ } ++ } ++ ++ t1_bak = t1; t2_bak = t2; ++ wc1_bak = wc1; wc2_bak = wc2; ++ state1_bak = state1; state2_bak = state2; ++ convfail1_bak = convfail1; convfail2_bak = convfail2; ++ ++ if (wc1 == L'\n') ++ wc1 = L' '; ++ else ++ t1 += mblen1; ++ ++ if (wc2 == L'\n') ++ wc2 = L' '; ++ else ++ t2 += mblen2; ++ ++ break; ++ ++ case IGNORE_TAB_EXPANSION: ++ if ((wc1 == L' ' && wc2 == L'\t') ++ || (wc1 == L'\t' && wc2 == L' ')) ++ { ++ size_t column2 = column; ++ ++ while (1) ++ { ++ if (convfail1) ++ { ++ ++t1; ++ break; ++ } ++ else if (wc1 == L' ') ++ column++; ++ else if (wc1 == L'\t') ++ column += tabsize - column % tabsize; ++ else ++ { ++ t1 += mblen1; ++ break; ++ } ++ ++ t1 += mblen1; ++ c1 = *t1; ++ MBC2WC (t1, end1, mblen1, wc1, state1, convfail1); ++ } ++ ++ while (1) ++ { ++ if (convfail2) ++ { ++ ++t2; ++ break; ++ } ++ else if (wc2 == L' ') ++ column2++; ++ else if (wc2 == L'\t') ++ column2 += tabsize - column2 % tabsize; ++ else ++ { ++ t2 += mblen2; ++ break; ++ } ++ ++ t2 += mblen2; ++ c2 = *t2; ++ MBC2WC (t2, end2, mblen2, wc2, state2, convfail2); ++ } ++ ++ if (column != column2) ++ return 1; ++ } ++ else ++ { ++ t1 += mblen1; ++ t2 += mblen2; ++ } ++ break; ++ ++ case IGNORE_NO_WHITE_SPACE: ++ t1 += mblen1; ++ t2 += mblen2; ++ break; ++ } ++ ++ /* Lowercase all letters if -i is specified. */ ++ if (ignore_case) ++ { ++ if (!convfail1) ++ wc1 = towlower (wc1); ++ if (!convfail2) ++ wc2 = towlower (wc2); ++ } ++ ++ if (convfail1 ^ convfail2) ++ break; ++ else if (convfail1 && convfail2 && c1 != c2) ++ break; ++ else if (!convfail1 && !convfail2 && wc1 != wc2) ++ break; ++ } ++ else ++ { ++ t1_bak = t1; t2_bak = t2; ++ wc1_bak = wc1; wc2_bak = wc2; ++ state1_bak = state1; state2_bak = state2; ++ convfail1_bak = convfail1; convfail2_bak = convfail2; ++ ++ t1 += mblen1; t2 += mblen2; ++ } ++ ++ if (!convfail1 && wc1 == L'\n') ++ return 0; ++ ++ column += convfail1 ? 1 : ++ (wc1 == L'\t') ? tabsize - column % tabsize : wcwidth (wc1); ++ } ++ ++ return 1; ++} ++#endif + + /* Find the consecutive changes at the start of the script START. + Return the last link before the first gap. */ diff --git a/diffutils-2.8.7-autoconf.patch b/diffutils-2.8.7-autoconf.patch new file mode 100644 index 0000000..cf9b15f --- /dev/null +++ b/diffutils-2.8.7-autoconf.patch @@ -0,0 +1,21 @@ +Index: m4/c-stack.m4 +=================================================================== +--- m4/c-stack.m4.orig 2007-09-24 11:55:43.000000000 +0200 ++++ m4/c-stack.m4 2010-02-13 14:56:24.000000000 +0100 +@@ -12,6 +12,8 @@ AC_DEFUN([AC_SYS_XSI_STACK_OVERFLOW_HEUR + AC_REQUIRE([AC_FUNC_ALLOCA]) + AC_CHECK_FUNCS(setrlimit) + ++ saved_CFLAGS=$CFLAGS ++ CFLAGS=-O0 + AC_CACHE_CHECK([for working C stack overflow detection], + ac_cv_sys_xsi_stack_overflow_heuristic, + [AC_TRY_RUN( +@@ -113,6 +115,7 @@ AC_DEFUN([AC_SYS_XSI_STACK_OVERFLOW_HEUR + [ac_cv_sys_xsi_stack_overflow_heuristic=yes], + [ac_cv_sys_xsi_stack_overflow_heuristic=no], + [ac_cv_sys_xsi_stack_overflow_heuristic=cross-compiling])]) ++ CFLAGS=$saved_CFLAGS + + if test $ac_cv_sys_xsi_stack_overflow_heuristic = yes; then + AC_DEFINE(HAVE_XSI_STACK_OVERFLOW_HEURISTIC, 1, diff --git a/diffutils-2.8.7-cvs.tar.bz2 b/diffutils-2.8.7-cvs.tar.bz2 new file mode 100644 index 0000000..f1131cd --- /dev/null +++ b/diffutils-2.8.7-cvs.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a55f870c2dddde476f13cddfa013b4f429068b91ceaeeab45d383a92633e2ff1 +size 922261 diff --git a/diffutils-3.0.tar.bz2 b/diffutils-3.0.tar.bz2 deleted file mode 100644 index afc6176..0000000 --- a/diffutils-3.0.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4227343cde98067e8cd14487d04ca1f360fdf49618e9408263c9317a5f07d609 -size 1331576 diff --git a/diffutils.changes b/diffutils.changes index 3319273..c0cfbc0 100644 --- a/diffutils.changes +++ b/diffutils.changes @@ -1,55 +1,3 @@ -------------------------------------------------------------------- -Sun Sep 19 10:02:52 CEST 2010 - vuntz@opensuse.org - -- Update to version 3.0: - + Bug fixes - - diff once again prints the required "\ No newline at end of - file" line when at least one input lacks a newline-at-EOF and - the final hunk plus context-length aligns exactly with the end - of the newline-lacking file. - [bug introduced between 2.8.7 and 2.9] - + Changes in behavior - - In context-style diffs, diff prints a portion of a preceding - "function" line for each hunk, with --show-function-line=RE - (-F) or --show-c-function (-p). Now, it trims leading blanks - from such lines before extracting a prefix. This is useful - especially when a function line is so far indented that the - name itself would be truncated or not included in the - limited-width substring that diff appends. - - diff once again reports a difference with the diagnostic - "Binary files A and B differ" when at least one of the files - appears to be binary. From 2.8.4 through diffutils-2.9, it - printed "Files A and B differ". -- Changes from version 2.9: - + New features - - New diff option --suppress-blank-empty. - - Bring back support for `diff -NUM', where NUM is a number, - even when conforming to POSIX 1003.1-2001. This change - reverts to the behavior of GNU diff 2.7 and earlier. This is - a change only when conforming to POSIX 1003.1-2001; there is - no effect when conforming to older POSIX versions. - - sdiff now understands '1' and '2' as synonyms for 'l' and - 'r'. - + Changes in behavior - - sdiff and diff3 now invoke diff, not $(bindir)/diff - + Administrivia - - updated gnulib support -- Drop diffutils-no_binary_mode.patch: fixed upstream. -- Drop diffutils-2.8.1-i18n-0.2.patch: this doesn't apply anymore, - the only reference I can guess about it goes back to 2004, and - commit 8983b8d9 upstream is about handling multibyte characters - in side-by-side format. So I'm assuming it's fixed. This also - means we can drop the call to autoreconf. -- Drop diffutils-2.8.7-autoconf.patch: this is not needed anymore. -- Remove AutoReqProv: it's default now. -- Stop touching the main pages in %build. -- Use %configure and %makeinstall macros. - -------------------------------------------------------------------- -Fri Aug 20 10:15:36 UTC 2010 - pth@novell.com - -- Only do freopen if O_BINARY is true. - ------------------------------------------------------------------- Mon Jun 28 06:38:35 UTC 2010 - jengelh@medozas.de diff --git a/diffutils.spec b/diffutils.spec index 75af1a3..b98536b 100644 --- a/diffutils.spec +++ b/diffutils.spec @@ -1,5 +1,5 @@ # -# spec file for package diffutils (Version 3.0) +# spec file for package diffutils (Version 2.8.7) # # Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -22,13 +22,16 @@ Name: diffutils Url: http://www.gnu.org/software/diffutils/ License: GFDLv1.2 ; GPLv3+ Group: Productivity/Text/Utilities -Provides: diff -Obsoletes: diff +Provides: diff +Obsoletes: diff +AutoReqProv: on PreReq: %{install_info_prereq} -Version: 3.0 -Release: 1 +Version: 2.8.7 +Release: 146 Summary: GNU diff Utilities -Source: %{name}-%{version}.tar.bz2 +Source: diffutils-%{version}-cvs.tar.bz2 +Patch1: diffutils-2.8.1-i18n-0.2.patch +Patch2: diffutils-2.8.7-autoconf.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -36,14 +39,19 @@ The GNU diff utilities find differences between files. diff is used to make source code patches, for instance. %prep -%setup -q +%setup -q -n %{name}-%{version}-cvs +%patch1 -p1 +%patch2 %build -%configure +AUTOPOINT=true autoreconf -fi +touch man/*.1 +./configure CFLAGS="$RPM_OPT_FLAGS" \ + --prefix=/usr --infodir=%{_infodir} --mandir=%{_mandir} make %{?_smp_mflags} %install -%makeinstall +make install DESTDIR="$RPM_BUILD_ROOT" %find_lang %name %post @@ -58,10 +66,10 @@ rm -rf $RPM_BUILD_ROOT %files -f %name.lang %defattr(-,root,root) %doc AUTHORS COPYING NEWS README THANKS -%{_bindir}/cmp -%{_bindir}/diff -%{_bindir}/diff3 -%{_bindir}/sdiff +/usr/bin/cmp +/usr/bin/diff +/usr/bin/diff3 +/usr/bin/sdiff %doc %{_infodir}/diff.info*.gz %doc %{_mandir}/man1/*.gz