diff --git a/.cvsignore b/.cvsignore index d9fbffb..1994f71 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -gcc-4.0.2-20051121.tar.bz2 +gcc-4.1.0-20051128.tar.bz2 diff --git a/gcc41-ada-pr18302.patch b/gcc41-ada-pr18302.patch new file mode 100644 index 0000000..433b71b --- /dev/null +++ b/gcc41-ada-pr18302.patch @@ -0,0 +1,75 @@ +gcc/ada/ +2004-11-28 James A. Morrison + + PR ada/18302 + * Make-lang.in (check-gnat): Set EXPECT environment variable. + +testsuite/ +2005-05-18 Jakub Jelinek + + * ada/acats/run_all.sh: Filter out spawn line from target_bit. + +2004-11-28 James A. Morrison + + PR ada/18302 + * ada/acats/run_all.sh (target_run): Run test through run_test.expect. + * ada/acats/run_test.expect: Expect script for ACATS tests. + +--- gcc/testsuite/ada/acats/run_all.sh (.../gcc-4_0-branch) (revision 107266) ++++ gcc/testsuite/ada/acats/run_all.sh (.../redhat/gcc-4_0-branch) (revision 107414) +@@ -13,7 +13,8 @@ + gnatflags="-gnatws" + + target_run () { +-$* ++ LD_LIBRARY_PATH=$ADA_INCLUDE_PATH${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} \ ++ $EXPECT -f $testdir/run_test.exp $1 > $2 + } + + # End of customization section. +@@ -92,8 +93,8 @@ + + # Find out the size in bit of an address on the target + target_gnatmake $testdir/support/impbit.adb >> $dir/acats.log 2>&1 +-target_run $dir/support/impbit > $dir/support/impbit.out 2>&1 +-target_bit=`cat $dir/support/impbit.out` ++target_run $dir/support/impbit $dir/support/impbit.out 2>/dev/null ++target_bit=`egrep -v -e ^spawn $dir/support/impbit.out` + echo target_bit="$target_bit" >> $dir/acats.log + + # Find out a suitable asm statement +@@ -259,7 +260,7 @@ + if [ ! -x $dir/tests/$chapter/$i/$binmain ]; then + sync + fi +- target_run $dir/tests/$chapter/$i/$binmain > $dir/tests/$chapter/$i/${i}.log 2>&1 ++ target_run $dir/tests/$chapter/$i/$binmain $dir/tests/$chapter/$i/${i}.log 2>&1 + cd $dir/tests/$chapter/$i + cat ${i}.log >> $dir/acats.log + egrep -e '(==== |\+\+\+\+ |\!\!\!\! )' ${i}.log > /dev/null 2>&1 +--- gcc/testsuite/ada/acats/run_test.exp (.../gcc-4_0-branch) (revision 0) ++++ gcc/testsuite/ada/acats/run_test.exp (.../redhat/gcc-4_0-branch) (revision 107414) +@@ -0,0 +1,13 @@ ++#!/usr/bin/expect -f ++ ++if {[info exists env(DEJAGNU_TIMEOUT)]} { ++ set timeout $env(DEJAGNU_TIMEOUT) ++} else { ++ set timeout 300 ++} ++ ++spawn $argv ++expect timeout { ++ send_user "Program timed out.\n" ++ exit 1 ++} +--- gcc/ada/Make-lang.in (.../gcc-4_0-branch) (revision 107266) ++++ gcc/ada/Make-lang.in (.../redhat/gcc-4_0-branch) (revision 107414) +@@ -809,6 +809,7 @@ + check-gnat: + test -d $(ACATSDIR) || mkdir -p $(ACATSDIR) + testdir=`cd ${srcdir}/${ACATSDIR}; ${PWD_COMMAND}`; \ ++ EXPECT=${EXPECT} ; export EXPECT ; \ + export testdir; cd $(ACATSDIR); $${testdir}/run_acats $(CHAPTERS) + + .PHONY: check-gnat diff --git a/gcc41-ada-tweaks.patch b/gcc41-ada-tweaks.patch new file mode 100644 index 0000000..992ed65 --- /dev/null +++ b/gcc41-ada-tweaks.patch @@ -0,0 +1,67 @@ +2004-10-04 Jakub Jelinek + + * gnat_ugn.texi: Add : and . to direntry. + * gnat-style.texi: Change dircategory to GNU Ada tools. + +2005-02-08 Jakub Jelinek + + * Makefile.in (gnatlib-shared-default): Disallow dlopening of + libgnat.so. + +--- gcc/ada/gnat-style.texi (.../gcc-4_0-branch) (revision 107266) ++++ gcc/ada/gnat-style.texi (.../redhat/gcc-4_0-branch) (revision 107414) +@@ -28,7 +28,7 @@ + @setchapternewpage odd + + +-@dircategory Programming ++@dircategory GNU Ada tools + @direntry + * gnat-style: (gnat-style). GNAT Coding Style + @end direntry +--- gcc/ada/Makefile.in (.../gcc-4_0-branch) (revision 107266) ++++ gcc/ada/Makefile.in (.../redhat/gcc-4_0-branch) (revision 107414) +@@ -1316,7 +1316,7 @@ + LIBRARY_VERSION := $(LIB_VERSION) + endif + +-ifeq ($(strip $(filter-out powerpc% linux%,$(arch) $(osys))),) ++ifeq ($(strip $(filter-out powerpc% ppc% linux%,$(arch) $(osys))),) + LIBGNAT_TARGET_PAIRS = \ + a-intnam.ads + + * c-cppbuiltin.c (define__GNUC__): Also define __GNUC_RH_RELEASE__. + +--- gcc/c-cppbuiltin.c.jj 2004-10-07 21:27:38.000000000 +0200 ++++ gcc/c-cppbuiltin.c 2004-10-19 11:41:50.000000000 +0200 +@@ -257,13 +257,13 @@ define__GNUC__ (void) + { + /* The format of the version string, enforced below, is + ([^0-9]*-)?[0-9]+[.][0-9]+([.][0-9]+)?([- ].*)? */ +- const char *q, *v = version_string; ++ const char *q, *v = version_string, *vstart, *vend; + + while (*v && !ISDIGIT (*v)) + v++; + gcc_assert (*v && (v <= version_string || v[-1] == '-')); + +- q = v; ++ vstart = q = v; + while (ISDIGIT (*v)) + v++; + builtin_define_with_value_n ("__GNUC__", q, v - q); +@@ -289,6 +289,27 @@ define__GNUC__ (void) + builtin_define_with_value_n ("__GNUC_PATCHLEVEL__", "0", 1); + + gcc_assert (!*v || *v == ' ' || *v == '-'); ++ ++ vend = v; ++ v = strchr (v, '('); ++ if (v != NULL && strncmp (v + 1, "Red Hat ", 8) == 0) ++ { ++ v += 9; ++ if (strncmp (v, "Linux ", 6) == 0) ++ v += 6; ++ ++ gcc_assert (strncmp (v, vstart, vend - vstart) == 0); ++ gcc_assert (v[vend - vstart] == '-'); ++ ++ v += vend - vstart + 1; ++ q = v; ++ gcc_assert (ISDIGIT (*v)); ++ while (ISDIGIT (*v)) ++ v++; ++ builtin_define_with_value_n ("__GNUC_RH_RELEASE__", q, v - q); ++ ++ gcc_assert (!*v || *v == ')' || *v == '.'); ++ } + } + + /* Define macros used by . Currently only defines limits diff --git a/gcc41-ia64-libunwind.patch b/gcc41-ia64-libunwind.patch new file mode 100644 index 0000000..e4fdd61 --- /dev/null +++ b/gcc41-ia64-libunwind.patch @@ -0,0 +1,538 @@ +2004-11-27 Jakub Jelinek + + * config.gcc (ia64*-*-linux*): If native and libelf is installed, + use ia64/t-glibc-no-libunwind instead of the other t-*unwind* + fragments. + * config/ia64/t-glibc-no-libunwind: New file. + * config/ia64/change-symver.c: New file. + * config/ia64/unwind-ia64.c: If USE_SYMVER_GLOBAL and SHARED, + define _Unwind_* to __symverglobal_Unwind_*. + (alias): Undefine. + (symverglobal): Define. Use it on _Unwind_*. + * config/ia64/mkmap-symver-multi.awk: New file. + * config/ia64/libgcc-ia64-no-libunwind.ver: New file. + +--- gcc/config.gcc.jj 2004-10-04 08:55:44.000000000 -0400 ++++ gcc/config.gcc 2004-11-13 05:23:50.000000000 -0500 +@@ -1185,9 +1185,16 @@ ia64*-*-freebsd*) + ;; + ia64*-*-linux*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h ia64/sysv4.h ia64/linux.h" +- tmake_file="${tmake_file} ia64/t-ia64 t-libunwind ia64/t-glibc" +- if test x$with_system_libunwind != xyes ; then +- tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind" ++ tmake_file="${tmake_file} ia64/t-ia64" ++ if test x${target} = x${host} && test x${target} = x${build} \ ++ && grep gelf_getverdef /usr/include/gelf.h > /dev/null 2>&1 \ ++ && test -f /usr/lib/libelf.so; then ++ tmake_file="${tmake_file} ia64/t-glibc-no-libunwind" ++ else ++ tmake_file="${tmake_file} t-libunwind ia64/t-glibc" ++ if test x$with_system_libunwind != xyes ; then ++ tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind" ++ fi + fi + target_cpu_default="MASK_GNU_AS|MASK_GNU_LD" + extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o" +--- gcc/config/ia64/t-glibc-no-libunwind.jj 2004-02-18 10:27:36.000000000 -0500 ++++ gcc/config/ia64/t-glibc-no-libunwind 2004-11-15 09:56:33.000000000 -0500 +@@ -0,0 +1,30 @@ ++# Don't use system libunwind library on IA-64 GLIBC based system, ++# but make _Unwind_* symbols unversioned, so that created programs ++# are usable even when libgcc_s uses libunwind. ++LIB2ADDEH += $(srcdir)/config/ia64/fde-glibc.c ++SHLIB_MAPFILES += $(srcdir)/config/ia64/libgcc-ia64-no-libunwind.ver ++SHLIB_MKMAP = $(srcdir)/config/ia64/mkmap-symver-multi.awk ++ ++SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ ++ -Wl,--soname=$(SHLIB_SONAME) \ ++ -Wl,--version-script=$(SHLIB_MAP) \ ++ -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ $(SHLIB_OBJS) -lc && \ ++ rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \ ++ if [ -f $(SHLIB_DIR)/$(SHLIB_SONAME) ]; then \ ++ mv -f $(SHLIB_DIR)/$(SHLIB_SONAME) \ ++ $(SHLIB_DIR)/$(SHLIB_SONAME).backup; \ ++ else true; fi && \ ++ gcc -O2 -o $(SHLIB_DIR)/$(SHLIB_SONAME).tweak \ ++ $(srcdir)/config/ia64/change-symver.c -lelf && \ ++ $(SHLIB_DIR)/$(SHLIB_SONAME).tweak $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \ ++ GCC_3.4.2 _GLOBAL_ \ ++ _Unwind_GetGR _Unwind_RaiseException _Unwind_GetRegionStart _Unwind_SetIP \ ++ _Unwind_GetIP _Unwind_GetLanguageSpecificData _Unwind_Resume \ ++ _Unwind_DeleteException _Unwind_SetGR _Unwind_ForcedUnwind \ ++ _Unwind_Backtrace _Unwind_FindEnclosingFunction _Unwind_GetCFA \ ++ _Unwind_Resume_or_Rethrow _Unwind_GetBSP && \ ++ rm -f $(SHLIB_DIR)/$(SHLIB_SONAME).tweak && \ ++ mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \ ++ $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK) ++ ++TARGET_LIBGCC2_CFLAGS += -DUSE_SYMVER_GLOBAL +--- gcc/config/ia64/change-symver.c.jj 2004-02-18 10:27:36.000000000 -0500 ++++ gcc/config/ia64/change-symver.c 2004-11-13 05:23:50.000000000 -0500 +@@ -0,0 +1,211 @@ ++#define _GNU_SOURCE 1 ++#define _FILE_OFFSET_BITS 64 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++int ++compute_veridx (const char *name, Elf *elf, Elf_Data *verd, GElf_Shdr *verd_shdr) ++{ ++ if (strcmp (name, "_GLOBAL_") == 0) ++ return 1; ++ ++ int cnt; ++ size_t offset = 0; ++ for (cnt = verd_shdr->sh_info; --cnt >= 0; ) ++ { ++ GElf_Verdef defmem; ++ GElf_Verdef *def; ++ GElf_Verdaux auxmem; ++ GElf_Verdaux *aux; ++ unsigned int auxoffset; ++ ++ /* Get the data at the next offset. */ ++ def = gelf_getverdef (verd, offset, &defmem); ++ if (def == NULL) ++ break; ++ ++ auxoffset = offset + def->vd_aux; ++ aux = gelf_getverdaux (verd, auxoffset, &auxmem); ++ if (aux == NULL) ++ break; ++ ++ if (strcmp (name, elf_strptr (elf, verd_shdr->sh_link, ++ aux->vda_name)) == 0) ++ return def->vd_ndx; ++ ++ /* Find the next offset. */ ++ offset += def->vd_next; ++ } ++ ++ return -1; ++} ++ ++int ++main (int argc, char **argv) ++{ ++ if (argc < 4) ++ error (1, 0, "Usage: change_symver library from_symver to_symver symbol...\nExample: change_symver libfoo.so FOO_1.0 *global* bar baz"); ++ ++ const char *fname = argv[1]; ++ ++ /* Open the file. */ ++ int fd; ++ fd = open (fname, O_RDWR); ++ if (fd == -1) ++ error (1, errno, fname); ++ ++ elf_version (EV_CURRENT); ++ ++ /* Now get the ELF descriptor. */ ++ Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL); ++ if (elf == NULL || elf_kind (elf) != ELF_K_ELF) ++ error (1, 0, "Couldn't open %s: %s", fname, elf_errmsg (-1)); ++ ++ size_t shstrndx; ++ /* Get the section header string table index. */ ++ if (elf_getshstrndx (elf, &shstrndx) < 0) ++ error (1, 0, "cannot get shstrndx from %s", fname); ++ ++ GElf_Ehdr ehdr_mem; ++ GElf_Ehdr *ehdr; ++ ++ /* We need the ELF header in a few places. */ ++ ehdr = gelf_getehdr (elf, &ehdr_mem); ++ if (ehdr == NULL) ++ error (1, 0, "couldn't get ELF headers %s: %s", fname, elf_errmsg (-1)); ++ ++ Elf_Scn *scn = NULL; ++ GElf_Shdr shdr_mem, verd_shdr, ver_shdr, dynsym_shdr; ++ Elf_Data *ver = NULL, *verd = NULL, *dynsym = NULL; ++ ++ while ((scn = elf_nextscn (elf, scn)) != NULL) ++ { ++ GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); ++ ++ if (shdr == NULL) ++ error (1, 0, "couldn't get shdr from %s", fname); ++ ++ if ((shdr->sh_flags & SHF_ALLOC) != 0) ++ { ++ const char *name = elf_strptr (elf, shstrndx, shdr->sh_name); ++ Elf_Data **p; ++ ++ if (strcmp (name, ".gnu.version") == 0) ++ { ++ p = &ver; ++ ver_shdr = *shdr; ++ } ++ else if (strcmp (name, ".gnu.version_d") == 0) ++ { ++ p = &verd; ++ verd_shdr = *shdr; ++ } ++ else if (strcmp (name, ".dynsym") == 0) ++ { ++ p = &dynsym; ++ dynsym_shdr = *shdr; ++ } ++ else ++ continue; ++ ++ if (*p != NULL) ++ error (1, 0, "Two %s sections in %s", name, fname); ++ *p = elf_getdata (scn, NULL); ++ if (*p == NULL || elf_getdata (scn, *p) != NULL) ++ error (1, 0, "No data or non-contiguous data in %s section in %s", ++ name, fname); ++ } ++ } ++ ++ if (ver == NULL || verd == NULL || dynsym == NULL) ++ error (1, 0, "Couldn't find one of the needed sections in %s", fname); ++ ++ int from_idx = compute_veridx (argv[2], elf, verd, &verd_shdr); ++ if (from_idx == -1) ++ error (1, 0, "Could not find symbol version %s in %s", argv[2], fname); ++ ++ int to_idx = compute_veridx (argv[3], elf, verd, &verd_shdr); ++ if (to_idx == -1) ++ error (1, 0, "Could not find symbol version %s in %s", argv[3], fname); ++ ++ if (dynsym_shdr.sh_entsize != gelf_fsize (elf, ELF_T_SYM, 1, ehdr->e_version) ++ || dynsym_shdr.sh_size % dynsym_shdr.sh_entsize ++ || ver_shdr.sh_entsize != 2 ++ || (ver_shdr.sh_size & 1) ++ || dynsym_shdr.sh_size / dynsym_shdr.sh_entsize != ver_shdr.sh_size / 2) ++ error (1, 0, "Unexpected sh_size or sh_entsize in %s", fname); ++ ++ size_t nentries = ver_shdr.sh_size / 2; ++ size_t cnt; ++ GElf_Versym array[nentries]; ++ for (cnt = 0; cnt < nentries; ++cnt) ++ { ++ GElf_Versym vsymmem; ++ GElf_Versym *vsym; ++ ++ vsym = gelf_getversym (ver, cnt, &vsymmem); ++ if (vsym == NULL) ++ error (1, 0, "gelt_getversym failed in %s: %s", fname, elf_errmsg (-1)); ++ ++ array[cnt] = *vsym; ++ if (*vsym != from_idx) ++ continue; ++ ++ GElf_Sym sym_mem; ++ GElf_Sym *sym; ++ sym = gelf_getsym (dynsym, cnt, &sym_mem); ++ if (sym == NULL) ++ error (1, 0, "gelt_getsym failed in %s: %s", fname, elf_errmsg (-1)); ++ ++ const char *name = elf_strptr (elf, dynsym_shdr.sh_link, sym->st_name); ++ ++ int argn; ++ for (argn = 4; argn < argc; ++argn) ++ if (fnmatch (argv[argn], name, 0) == 0) ++ { ++ array[cnt] = to_idx; ++ break; ++ } ++ } ++ ++ if (sizeof (array[0]) != 2) ++ abort (); ++ ++#if __BYTE_ORDER == __LITTLE_ENDIAN ++ if (ehdr->e_ident[EI_DATA] == ELFDATA2LSB) ++ ; ++ else if (ehdr->e_ident[EI_DATA] == ELFDATA2MSB) ++#elif __BYTE_ORDER == __BIG_ENDIAN ++ if (ehdr->e_ident[EI_DATA] == ELFDATA2MSB) ++ ; ++ else if (ehdr->e_ident[EI_DATA] == ELFDATA2LSB) ++#else ++# error Unsupported endianity ++#endif ++ { ++ for (cnt = 0; cnt < nentries; ++cnt) ++ array[cnt] = ((array[cnt] & 0xff) << 8) | ((array[cnt] & 0xff00) >> 8); ++ } ++ else ++ error (1, 0, "Unknown EI_DATA %d in %s", ehdr->e_ident[EI_DATA], fname); ++ ++ if (elf_end (elf) != 0) ++ error (1, 0, "couldn't close %s: %s", fname, elf_errmsg (-1)); ++ ++ if (lseek (fd, ver_shdr.sh_offset, SEEK_SET) != (off_t) ver_shdr.sh_offset) ++ error (1, 0, "failed to seek to %zd in %s", (size_t) ver_shdr.sh_offset, ++ fname); ++ ++ if (write (fd, array, 2 * nentries) != (ssize_t) (2 * nentries)) ++ error (1, 0, "failed to write .gnu.version section into %s", fname); ++ ++ close (fd); ++ return 0; ++} +--- gcc/config/ia64/unwind-ia64.c.jj 2004-10-04 08:55:57.000000000 -0400 ++++ gcc/config/ia64/unwind-ia64.c 2004-11-15 09:07:45.000000000 -0500 +@@ -51,6 +51,51 @@ + #define UNW_FLAG_UHANDLER(x) ((x) & 0x0000000200000000L) + #define UNW_LENGTH(x) ((x) & 0x00000000ffffffffL) + ++#if defined (USE_SYMVER_GLOBAL) && defined (SHARED) ++extern _Unwind_Reason_Code __symverglobal_Unwind_Backtrace ++ (_Unwind_Trace_Fn, void *); ++extern void __symverglobal_Unwind_DeleteException ++ (struct _Unwind_Exception *); ++extern void * __symverglobal_Unwind_FindEnclosingFunction (void *); ++extern _Unwind_Reason_Code __symverglobal_Unwind_ForcedUnwind ++ (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *); ++extern _Unwind_Word __symverglobal_Unwind_GetCFA ++ (struct _Unwind_Context *); ++extern _Unwind_Word __symverglobal_Unwind_GetBSP ++ (struct _Unwind_Context *); ++extern _Unwind_Word __symverglobal_Unwind_GetGR ++ (struct _Unwind_Context *, int ); ++extern _Unwind_Ptr __symverglobal_Unwind_GetIP (struct _Unwind_Context *); ++extern void *__symverglobal_Unwind_GetLanguageSpecificData ++ (struct _Unwind_Context *); ++extern _Unwind_Ptr __symverglobal_Unwind_GetRegionStart ++ (struct _Unwind_Context *); ++extern _Unwind_Reason_Code __symverglobal_Unwind_RaiseException ++ (struct _Unwind_Exception *); ++extern void __symverglobal_Unwind_Resume (struct _Unwind_Exception *); ++extern _Unwind_Reason_Code __symverglobal_Unwind_Resume_or_Rethrow ++ (struct _Unwind_Exception *); ++extern void __symverglobal_Unwind_SetGR ++ (struct _Unwind_Context *, int, _Unwind_Word); ++extern void __symverglobal_Unwind_SetIP ++ (struct _Unwind_Context *, _Unwind_Ptr); ++#define _Unwind_Backtrace __symverglobal_Unwind_Backtrace ++#define _Unwind_DeleteException __symverglobal_Unwind_DeleteException ++#define _Unwind_FindEnclosingFunction __symverglobal_Unwind_FindEnclosingFunction ++#define _Unwind_ForcedUnwind __symverglobal_Unwind_ForcedUnwind ++#define _Unwind_GetBSP __symverglobal_Unwind_GetBSP ++#define _Unwind_GetCFA __symverglobal_Unwind_GetCFA ++#define _Unwind_GetGR __symverglobal_Unwind_GetGR ++#define _Unwind_GetIP __symverglobal_Unwind_GetIP ++#define _Unwind_GetLanguageSpecificData __symverglobal_Unwind_GetLanguageSpecificData ++#define _Unwind_GetRegionStart __symverglobal_Unwind_GetRegionStart ++#define _Unwind_RaiseException __symverglobal_Unwind_RaiseException ++#define _Unwind_Resume __symverglobal_Unwind_Resume ++#define _Unwind_Resume_or_Rethrow __symverglobal_Unwind_Resume_or_Rethrow ++#define _Unwind_SetGR __symverglobal_Unwind_SetGR ++#define _Unwind_SetIP __symverglobal_Unwind_SetIP ++#endif ++ + enum unw_application_register + { + UNW_AR_BSP, +@@ -2402,4 +2447,44 @@ alias (_Unwind_SetGR); + alias (_Unwind_SetIP); + #endif + ++#if defined (USE_SYMVER_GLOBAL) && defined (SHARED) ++#undef alias ++#define symverglobal(name, version) \ ++__typeof (__symverglobal##name) __symverlocal##name \ ++ __attribute__ ((alias ("__symverglobal" #name))); \ ++__asm__ (".symver __symverglobal" #name"," #name "@@GCC_3.4.2");\ ++__asm__ (".symver __symverlocal" #name"," #name "@" #version) ++ ++#undef _Unwind_Backtrace ++#undef _Unwind_DeleteException ++#undef _Unwind_FindEnclosingFunction ++#undef _Unwind_ForcedUnwind ++#undef _Unwind_GetBSP ++#undef _Unwind_GetCFA ++#undef _Unwind_GetGR ++#undef _Unwind_GetIP ++#undef _Unwind_GetLanguageSpecificData ++#undef _Unwind_GetRegionStart ++#undef _Unwind_RaiseException ++#undef _Unwind_Resume ++#undef _Unwind_Resume_or_Rethrow ++#undef _Unwind_SetGR ++#undef _Unwind_SetIP ++symverglobal (_Unwind_Backtrace, GCC_3.3); ++symverglobal (_Unwind_DeleteException, GCC_3.0); ++symverglobal (_Unwind_FindEnclosingFunction, GCC_3.3); ++symverglobal (_Unwind_ForcedUnwind, GCC_3.0); ++symverglobal (_Unwind_GetBSP, GCC_3.3.2); ++symverglobal (_Unwind_GetCFA, GCC_3.3); ++symverglobal (_Unwind_GetGR, GCC_3.0); ++symverglobal (_Unwind_GetIP, GCC_3.0); ++symverglobal (_Unwind_GetLanguageSpecificData, GCC_3.0); ++symverglobal (_Unwind_GetRegionStart, GCC_3.0); ++symverglobal (_Unwind_RaiseException, GCC_3.0); ++symverglobal (_Unwind_Resume, GCC_3.0); ++symverglobal (_Unwind_Resume_or_Rethrow, GCC_3.3); ++symverglobal (_Unwind_SetGR, GCC_3.0); ++symverglobal (_Unwind_SetIP, GCC_3.0); ++#endif ++ + #endif +--- gcc/config/ia64/mkmap-symver-multi.awk.jj 2004-02-18 10:27:36.000000000 -0500 ++++ gcc/config/ia64/mkmap-symver-multi.awk 2004-11-15 09:46:50.000000000 -0500 +@@ -0,0 +1,133 @@ ++# Generate an ELF symbol version map a-la Solaris and GNU ld. ++# Contributed by Richard Henderson ++# ++# This file is part of GCC. ++# ++# GCC 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 2, or (at your option) any later ++# version. ++# ++# GCC 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 GCC; see the file COPYING. If not, write to the Free ++# Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA ++# 02110-1301, USA. ++ ++BEGIN { ++ state = "nm"; ++ sawsymbol = 0; ++} ++ ++# Remove comment and blank lines. ++/^ *#/ || /^ *$/ { ++ next; ++} ++ ++# We begin with nm input. Collect the set of symbols that are present ++# so that we can not emit them into the final version script -- Solaris ++# complains at us if we do. ++ ++state == "nm" && /^%%/ { ++ state = "ver"; ++ next; ++} ++ ++state == "nm" && ($1 == "U" || $2 == "U") { ++ next; ++} ++ ++state == "nm" && NF == 3 { ++ if ($3 ~ /^[^@]*@GCC_[0-9.]*$/) { ++ def[$3] = 1 ++ tl=$3 ++ sub(/^.*@/,"",tl) ++ ver[$3] = tl ++ } else { ++ sub(/@@?GCC_[0-9.]*$/,"",$3) ++ def[$3] = 1; ++ } ++ sawsymbol = 1; ++ next; ++} ++ ++state == "nm" { ++ next; ++} ++ ++# Now we process a simplified variant of the Solaris symbol version ++# script. We have one symbol per line, no semicolons, simple markers ++# for beginning and ending each section, and %inherit markers for ++# describing version inheritence. A symbol may appear in more than ++# one symbol version, and the last seen takes effect. ++ ++NF == 3 && $1 == "%inherit" { ++ inherit[$2] = $3; ++ next; ++} ++ ++NF == 2 && $2 == "{" { ++ libs[$1] = 1; ++ thislib = $1; ++ next; ++} ++ ++$1 == "}" { ++ thislib = ""; ++ next; ++} ++ ++{ ++ ver[$1] = thislib; ++ next; ++} ++ ++END { ++ if (!sawsymbol) ++ { ++ print "No symbols seen -- broken or mis-installed nm?" | "cat 1>&2"; ++ exit 1; ++ } ++ for (l in libs) ++ output(l); ++} ++ ++function output(lib) { ++ if (done[lib]) ++ return; ++ done[lib] = 1; ++ if (inherit[lib]) ++ output(inherit[lib]); ++ ++ empty=1 ++ for (sym in ver) ++ if ((ver[sym] == lib) && (sym in def)) ++ { ++ if (empty) ++ { ++ printf("%s {\n", lib); ++ printf(" global:\n"); ++ empty = 0; ++ } ++ symp = sym; ++ sub(/@GCC_[0-9.]*$/,"",symp); ++ printf("\t%s;\n", symp); ++ if (dotsyms) ++ printf("\t.%s;\n", symp); ++ } ++ ++ if (empty) ++ { ++ for (l in libs) ++ if (inherit[l] == lib) ++ inherit[l] = inherit[lib]; ++ } ++ else if (inherit[lib]) ++ printf("} %s;\n", inherit[lib]); ++ else ++ printf ("\n local:\n\t*;\n};\n"); ++} +--- gcc/config/ia64/libgcc-ia64-no-libunwind.ver.jj 2004-02-18 10:27:36.000000000 -0500 ++++ gcc/config/ia64/libgcc-ia64-no-libunwind.ver 2004-11-15 09:19:56.000000000 -0500 +@@ -0,0 +1,17 @@ ++GCC_3.4.2 { ++ _Unwind_GetGR ++ _Unwind_RaiseException ++ _Unwind_GetRegionStart ++ _Unwind_SetIP ++ _Unwind_GetIP ++ _Unwind_GetLanguageSpecificData ++ _Unwind_Resume ++ _Unwind_DeleteException ++ _Unwind_SetGR ++ _Unwind_ForcedUnwind ++ _Unwind_Backtrace ++ _Unwind_FindEnclosingFunction ++ _Unwind_GetCFA ++ _Unwind_Resume_or_Rethrow ++ _Unwind_GetBSP ++} diff --git a/gcc41-ice-hack.patch b/gcc41-ice-hack.patch new file mode 100644 index 0000000..00b5362 --- /dev/null +++ b/gcc41-ice-hack.patch @@ -0,0 +1,316 @@ +2004-01-23 Jakub Jelinek + + * system.h (ICE_EXIT_CODE): Define. + * gcc.c (execute): Don't free first string early, but at the end + of the function. Call retry_ice if compiler exited with + ICE_EXIT_CODE. + (retry_ice): New function. + * diagnostic.c (diagnostic_count_diagnostic, + diagnostic_action_after_output, error_recursion): Exit with + ICE_EXIT_CODE instead of FATAL_EXIT_CODE. + +--- gcc/system.h.jj 2004-01-19 17:29:30.000000000 +0100 ++++ gcc/system.h 2004-01-21 11:53:41.000000000 +0100 +@@ -153,6 +153,10 @@ extern int errno; + # endif + #endif + ++#ifndef ICE_EXIT_CODE ++# define ICE_EXIT_CODE 27 ++#endif ++ + #ifdef HAVE_UNISTD_H + # include + #endif +--- gcc/gcc.c.jj 2004-01-21 11:45:20.000000000 +0100 ++++ gcc/gcc.c 2004-01-21 11:56:46.000000000 +0100 +@@ -346,6 +346,9 @@ static void init_gcc_specs (struct obsta + #if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX) + static const char *convert_filename (const char *, int, int); + #endif ++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS)) ++static void retry_ice (const char *prog, const char **argv); ++#endif + + static const char *if_exists_spec_function (int, const char **); + static const char *if_exists_else_spec_function (int, const char **); +@@ -2841,7 +2844,7 @@ execute (void) + } + } + +- if (string != commands[i].prog) ++ if (i && string != commands[i].prog) + free ((void *) string); + } + +@@ -2897,6 +2900,16 @@ See %s for instructions.", + else if (WIFEXITED (status) + && WEXITSTATUS (status) >= MIN_FATAL_STATUS) + { ++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS)) ++ /* For ICEs in cc1, cc1obj, cc1plus see if it is ++ reproducible or not. */ ++ char *p; ++ if (WEXITSTATUS (status) == ICE_EXIT_CODE ++ && i == 0 ++ && (p = strrchr (commands[0].argv[0], DIR_SEPARATOR)) ++ && ! strncmp (p + 1, "cc1", 3)) ++ retry_ice (commands[0].prog, commands[0].argv); ++#endif + if (WEXITSTATUS (status) > greatest_status) + greatest_status = WEXITSTATUS (status); + ret_code = -1; +@@ -2917,6 +2930,9 @@ See %s for instructions.", + } + } + ++ if (commands[0].argv[0] != commands[0].prog) ++ free ((PTR) commands[0].argv[0]); ++ + return ret_code; + } + } +@@ -5898,6 +5914,224 @@ give_switch (int switchnum, int omit_fir + switches[switchnum].validated = 1; + } + ++#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS)) ++#define RETRY_ICE_ATTEMPTS 2 ++ ++static void ++retry_ice (const char *prog, const char **argv) ++{ ++ int nargs, out_arg = -1, quiet = 0, attempt; ++ int pid, retries, sleep_interval; ++ const char **new_argv; ++ char *temp_filenames[RETRY_ICE_ATTEMPTS * 2 + 2]; ++ ++ if (input_filename == NULL || ! strcmp (input_filename, "-")) ++ return; ++ ++ for (nargs = 0; argv[nargs] != NULL; ++nargs) ++ /* Only retry compiler ICEs, not preprocessor ones. */ ++ if (! strcmp (argv[nargs], "-E")) ++ return; ++ else if (argv[nargs][0] == '-' && argv[nargs][1] == 'o') ++ { ++ if (out_arg == -1) ++ out_arg = nargs; ++ else ++ return; ++ } ++ /* If the compiler is going to output any time information, ++ it might varry between invocations. */ ++ else if (! strcmp (argv[nargs], "-quiet")) ++ quiet = 1; ++ else if (! strcmp (argv[nargs], "-ftime-report")) ++ return; ++ ++ if (out_arg == -1 || !quiet) ++ return; ++ ++ memset (temp_filenames, '\0', sizeof (temp_filenames)); ++ new_argv = alloca ((nargs + 3) * sizeof (const char *)); ++ memcpy (new_argv, argv, (nargs + 1) * sizeof (const char *)); ++ new_argv[nargs++] = "-frandom-seed=0"; ++ new_argv[nargs] = NULL; ++ if (new_argv[out_arg][2] == '\0') ++ new_argv[out_arg + 1] = "-"; ++ else ++ new_argv[out_arg] = "-o-"; ++ ++ for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS + 1; ++attempt) ++ { ++ int fd = -1; ++ int status; ++ ++ temp_filenames[attempt * 2] = make_temp_file (".out"); ++ temp_filenames[attempt * 2 + 1] = make_temp_file (".err"); ++ ++ if (attempt == RETRY_ICE_ATTEMPTS) ++ { ++ int i; ++ int fd1, fd2; ++ struct stat st1, st2; ++ size_t n, len; ++ char *buf; ++ ++ buf = xmalloc (8192); ++ ++ for (i = 0; i < 2; ++i) ++ { ++ fd1 = open (temp_filenames[i], O_RDONLY); ++ fd2 = open (temp_filenames[2 + i], O_RDONLY); ++ ++ if (fd1 < 0 || fd2 < 0) ++ { ++ i = -1; ++ close (fd1); ++ close (fd2); ++ break; ++ } ++ ++ if (fstat (fd1, &st1) < 0 || fstat (fd2, &st2) < 0) ++ { ++ i = -1; ++ close (fd1); ++ close (fd2); ++ break; ++ } ++ ++ if (st1.st_size != st2.st_size) ++ { ++ close (fd1); ++ close (fd2); ++ break; ++ } ++ ++ len = 0; ++ for (n = st1.st_size; n; n -= len) ++ { ++ len = n; ++ if (len > 4096) ++ len = 4096; ++ ++ if (read (fd1, buf, len) != (int) len ++ || read (fd2, buf + 4096, len) != (int) len) ++ { ++ i = -1; ++ break; ++ } ++ ++ if (memcmp (buf, buf + 4096, len) != 0) ++ break; ++ } ++ ++ close (fd1); ++ close (fd2); ++ ++ if (n) ++ break; ++ } ++ ++ free (buf); ++ if (i == -1) ++ break; ++ ++ if (i != 2) ++ { ++ notice ("The bug is not reproducible, so it is likely a hardware or OS problem.\n"); ++ break; ++ } ++ ++ fd = open (temp_filenames[attempt * 2], O_RDWR); ++ if (fd < 0) ++ break; ++ write (fd, "//", 2); ++ for (i = 0; i < nargs; i++) ++ { ++ write (fd, " ", 1); ++ write (fd, new_argv[i], strlen (new_argv[i])); ++ } ++ write (fd, "\n", 1); ++ new_argv[nargs] = "-E"; ++ new_argv[nargs + 1] = NULL; ++ } ++ ++ /* Fork a subprocess; wait and retry if it fails. */ ++ sleep_interval = 1; ++ pid = -1; ++ for (retries = 0; retries < 4; retries++) ++ { ++ pid = fork (); ++ if (pid >= 0) ++ break; ++ sleep (sleep_interval); ++ sleep_interval *= 2; ++ } ++ ++ if (pid < 0) ++ break; ++ else if (pid == 0) ++ { ++ if (attempt != RETRY_ICE_ATTEMPTS) ++ fd = open (temp_filenames[attempt * 2], O_RDWR); ++ if (fd < 0) ++ exit (-1); ++ if (fd != 1) ++ { ++ close (1); ++ dup (fd); ++ close (fd); ++ } ++ ++ fd = open (temp_filenames[attempt * 2 + 1], O_RDWR); ++ if (fd < 0) ++ exit (-1); ++ if (fd != 2) ++ { ++ close (2); ++ dup (fd); ++ close (fd); ++ } ++ ++ if (prog == new_argv[0]) ++ execvp (prog, (char *const *) new_argv); ++ else ++ execv (new_argv[0], (char *const *) new_argv); ++ exit (-1); ++ } ++ ++ if (waitpid (pid, &status, 0) < 0) ++ break; ++ ++ if (attempt < RETRY_ICE_ATTEMPTS ++ && (! WIFEXITED (status) || WEXITSTATUS (status) != ICE_EXIT_CODE)) ++ { ++ notice ("The bug is not reproducible, so it is likely a hardware or OS problem.\n"); ++ break; ++ } ++ else if (attempt == RETRY_ICE_ATTEMPTS) ++ { ++ close (fd); ++ if (WIFEXITED (status) ++ && WEXITSTATUS (status) == SUCCESS_EXIT_CODE) ++ { ++ notice ("Preprocessed source stored into %s file, please attach this to your bugreport.\n", ++ temp_filenames[attempt * 2]); ++ /* Make sure it is not deleted. */ ++ free (temp_filenames[attempt * 2]); ++ temp_filenames[attempt * 2] = NULL; ++ break; ++ } ++ } ++ } ++ ++ for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS * 2 + 2; attempt++) ++ if (temp_filenames[attempt]) ++ { ++ unlink (temp_filenames[attempt]); ++ free (temp_filenames[attempt]); ++ } ++} ++#endif ++ + /* Search for a file named NAME trying various prefixes including the + user's -B prefix and some standard ones. + Return the absolute file name found. If nothing is found, return NAME. */ +--- gcc/diagnostic.c.jj 2003-10-01 12:09:21.000000000 +0200 ++++ gcc/diagnostic.c 2004-01-21 11:54:47.000000000 +0100 +@@ -237,14 +237,14 @@ diagnostic_action_after_output (diagnost + fnotice (stderr, "Please submit a full bug report,\n" + "with preprocessed source if appropriate.\n" + "See %s for instructions.\n", bug_report_url); +- exit (FATAL_EXIT_CODE); ++ exit (ICE_EXIT_CODE); + + case DK_FATAL: + if (context->abort_on_error) + real_abort (); + + fnotice (stderr, "compilation terminated.\n"); +- exit (FATAL_EXIT_CODE); ++ exit (ICE_EXIT_CODE); + + default: + gcc_unreachable (); diff --git a/gcc41-java-nomulti.patch b/gcc41-java-nomulti.patch new file mode 100644 index 0000000..3a6554d --- /dev/null +++ b/gcc41-java-nomulti.patch @@ -0,0 +1,25 @@ +--- libjava/configure.ac.jj 2004-08-16 21:13:29.000000000 +0200 ++++ libjava/configure.ac 2004-08-21 11:44:59.020755542 +0200 +@@ -367,6 +367,10 @@ use_gtk_awt="" + TOOLKIT= + AC_SUBST(TOOLKIT) + ++if test -n "${with_multisubdir}"; then ++ peerlibs=no ++fi ++ + for peer in $peerlibs ; do + case $peer in + xlib) +--- libjava/configure.jj 2004-08-16 21:22:14.000000000 +0200 ++++ libjava/configure 2004-08-21 11:45:16.260738060 +0200 +@@ -4118,6 +4118,9 @@ use_gtk_awt="" + # The default toolkit to use is the first one specified. + TOOLKIT= + ++if test -n "${with_multisubdir}"; then ++ peerlibs=no ++fi + + for peer in $peerlibs ; do + case $peer in diff --git a/gcc41-java-slow_pthread_self.patch b/gcc41-java-slow_pthread_self.patch new file mode 100644 index 0000000..de160be --- /dev/null +++ b/gcc41-java-slow_pthread_self.patch @@ -0,0 +1,15 @@ +2005-05-20 Jakub Jelinek + + * configure.host (slow_pthread_self): Set to empty unconditionally + on Linux targets. + +--- libjava/configure.host (.../gcc-4_0-branch) (revision 107266) ++++ libjava/configure.host (.../redhat/gcc-4_0-branch) (revision 107414) +@@ -174,6 +174,7 @@ + sh-linux* | sh[34]*-linux*) + can_unwind_signal=yes + libgcj_ld_symbolic='-Wl,-Bsymbolic' ++ slow_pthread_self= + if test x$slow_pthread_self = xyes \ + && test x$cross_compiling != xyes; then + cat > conftest.c < + + * config/rs6000/rs6000.c (rs6000_return_addr): If COUNT == 0, + read word RETURN_ADDRESS_OFFSET bytes above arg_pointer_rtx + instead of doing an extran indirection from frame_pointer_rtx. + + * gcc.dg/20051128-1.c: New test. + +--- gcc/config/rs6000/rs6000.c.jj 2005-11-26 14:38:01.000000000 +0100 ++++ gcc/config/rs6000/rs6000.c 2005-11-28 20:32:18.000000000 +0100 +@@ -13166,17 +13166,22 @@ rs6000_return_addr (int count, rtx frame + don't try to be too clever here. */ + if (count != 0 || (DEFAULT_ABI != ABI_AIX && flag_pic)) + { ++ rtx x; + cfun->machine->ra_needs_full_frame = 1; + +- return +- gen_rtx_MEM +- (Pmode, +- memory_address +- (Pmode, +- plus_constant (copy_to_reg +- (gen_rtx_MEM (Pmode, +- memory_address (Pmode, frame))), +- RETURN_ADDRESS_OFFSET))); ++ if (count == 0) ++ { ++ gcc_assert (frame == frame_pointer_rtx); ++ x = arg_pointer_rtx; ++ } ++ else ++ { ++ x = memory_address (Pmode, frame); ++ x = copy_to_reg (gen_rtx_MEM (Pmode, x)); ++ } ++ ++ x = plus_constant (x, RETURN_ADDRESS_OFFSET); ++ return gen_rtx_MEM (Pmode, memory_address (Pmode, x)); + } + + cfun->machine->ra_need_lr = 1; +--- gcc/testsuite/gcc.dg/20051128-1.c.jj 2005-10-10 11:21:41.096999000 +0200 ++++ gcc/testsuite/gcc.dg/20051128-1.c 2005-11-28 12:30:57.000000000 +0100 +@@ -0,0 +1,41 @@ ++/* { dg-do run } */ ++/* { dg-options "-O2 -fpic" } */ ++ ++extern void exit (int); ++extern void abort (void); ++ ++int b; ++ ++struct A ++{ ++ void *pad[147]; ++ void *ra, *h; ++ long o; ++}; ++ ++void ++__attribute__((noinline)) ++foo (struct A *a, void *x) ++{ ++ __builtin_memset (a, 0, sizeof (a)); ++ if (!b) ++ exit (0); ++} ++ ++void ++__attribute__((noinline)) ++bar (void) ++{ ++ struct A a; ++ ++ __builtin_unwind_init (); ++ foo (&a, __builtin_return_address (0)); ++} ++ ++int ++main (void) ++{ ++ bar (); ++ abort (); ++ return 0; ++} diff --git a/gcc41-ppc64-m32-m64-multilib-only.patch b/gcc41-ppc64-m32-m64-multilib-only.patch new file mode 100644 index 0000000..00dbeac --- /dev/null +++ b/gcc41-ppc64-m32-m64-multilib-only.patch @@ -0,0 +1,22 @@ +--- gcc/config/rs6000/t-linux64 2003-06-03 05:11:45.000000000 -0400 ++++ gcc/config/rs6000/t-linux64 2003-06-11 17:07:16.000000000 -0400 +@@ -4,13 +4,13 @@ LIB2FUNCS_EXTRA = tramp.S $(srcdir)/conf + # Modify the shared lib version file + SHLIB_MKMAP_OPTS = -v dotsyms=1 + +-MULTILIB_OPTIONS = m64/m32 msoft-float +-MULTILIB_DIRNAMES = 64 32 nof ++MULTILIB_OPTIONS = m64/m32 ++MULTILIB_DIRNAMES = 64 32 + MULTILIB_EXTRA_OPTS = fPIC mstrict-align +-MULTILIB_EXCEPTIONS = m64/msoft-float +-MULTILIB_EXCLUSIONS = m64/!m32/msoft-float +-MULTILIB_OSDIRNAMES = ../lib64 ../lib nof +-MULTILIB_MATCHES = $(MULTILIB_MATCHES_FLOAT) ++MULTILIB_EXCEPTIONS = ++MULTILIB_EXCLUSIONS = ++MULTILIB_OSDIRNAMES = ../lib64 ../lib ++MULTILIB_MATCHES = + + TARGET_LIBGCC2_CFLAGS = -mno-minimal-toc -fPIC + diff --git a/gcc41.spec b/gcc41.spec new file mode 100644 index 0000000..30883b0 --- /dev/null +++ b/gcc41.spec @@ -0,0 +1,1551 @@ +%define DATE 20051128 +%define gcc_version 4.1.0 +%define gcc_release 0.3 +%define _unpackaged_files_terminate_build 0 +%define multilib_64_archs sparc64 ppc64 s390x x86_64 +%ifarch %{ix86} x86_64 ia64 +%define build_ada 1 +%else +%define build_ada 0 +%endif +%define build_java 1 +%ifarch s390x +%define multilib_32_arch s390 +%endif +%ifarch sparc64 +%define multilib_32_arch sparc +%endif +%ifarch ppc64 +%define multilib_32_arch ppc +%endif +%ifarch x86_64 +%define multilib_32_arch i386 +%endif +Summary: Various compilers (C, C++, Objective-C, Java, ...) +Name: gcc +Version: %{gcc_version} +Release: %{gcc_release} +License: GPL +Group: Development/Languages +Source0: gcc-%{version}-%{DATE}.tar.bz2 +Source1: libgcc_post_upgrade.c +URL: http://gcc.gnu.org +BuildRoot: /var/tmp/gcc-root +# Need binutils with -pie support >= 2.14.90.0.4-4 +# Need binutils which can omit dot symbols and overlap .opd on ppc64 >= 2.15.91.0.2-4 +# Need binutils which handle -msecure-plt on ppc >= 2.16.91.0.2-2 +# Need binutils which support .weakref >= 2.16.91.0.3-1 +BuildRequires: binutils >= 2.16.91.0.3-1 +BuildRequires: zlib-devel, gettext, dejagnu, bison, flex, texinfo +# Make sure pthread.h doesn't contain __thread tokens +# Make sure glibc supports stack protector +BuildRequires: glibc-devel >= 2.3.90-2 +%ifarch %{multilib_64_archs} sparc ppc +# Ensure glibc{,-devel} is installed for both multilib arches +BuildRequires: /lib/libc.so.6 /usr/lib/libc.so /lib64/libc.so.6 /usr/lib64/libc.so +%endif +%if %{build_ada} +# Ada requires Ada to build +BuildRequires: gcc-gnat >= 3.1, libgnat >= 3.1 +%endif +Requires: cpp = %{version}-%{release} +# Need .eh_frame ld optimizations +# Need proper visibility support +# Need -pie support +# Need --as-needed/--no-as-needed support +# On ppc64, need omit dot symbols support and --non-overlapping-opd +# Need binutils that owns /usr/bin/c++filt +# Need binutils that support .weakref +Requires: binutils >= 2.16.91.0.3-1 +# Make sure gdb will understand DW_FORM_strp +Conflicts: gdb < 5.1-2 +Requires: glibc-devel >= 2.2.90-12 +Requires: libgcc >= %{version}-%{release} +Obsoletes: gcc3 +Obsoletes: egcs +Obsoletes: gcc-chill +%if !%{build_ada} +Obsoletes: gcc-gnat < %{version}-%{release} +Obsoletes: libgnat < %{version}-%{release} +%endif +%ifarch sparc sparc64 +Obsoletes: egcs64 +%endif +Obsoletes: gcc34 +Obsoletes: gcc35 +Obsoletes: gcc4 +Provides: gcc4 = %{version}-%{release} +Prereq: /sbin/install-info +AutoReq: true + +Patch1: gcc41-ice-hack.patch +Patch2: gcc41-ppc64-m32-m64-multilib-only.patch +Patch3: gcc41-ia64-libunwind.patch +Patch4: gcc41-gnuc-rh-release.patch +Patch5: gcc41-java-nomulti.patch +Patch6: gcc41-multi32-hack.patch +Patch7: gcc41-ia64-stack-protector.patch +Patch8: gcc41-ada-pr18302.patch +Patch9: gcc41-ada-tweaks.patch +Patch10: gcc41-java-rmic.patch +Patch11: gcc41-java-slow_pthread_self.patch +Patch12: gcc41-libjava-libltdl.patch +Patch13: gcc41-test-20050330-2.patch +Patch14: gcc41-test-c++-struct_layout.patch +Patch15: gcc41-test-pr17828.patch +Patch16: gcc41-test-pr19005.patch +Patch17: gcc41-test-pr19317.patch +Patch18: gcc41-fortran-finclude.patch +Patch19: gcc41-ppc64-sync.patch +Patch20: gcc41-ppc32-retaddr.patch +Patch21: gcc41-gomp-atomic.patch +Patch22: gcc41-libgfortran-host_subdir.patch +Patch23: gcc41-ia64-fetchadd.patch +Patch24: gcc41-ia64-tls-le.patch + +%define _gnu %{nil} +%ifarch sparc +%define gcc_target_platform sparc64-%{_vendor}-%{_target_os} +%endif +%ifarch ppc +%define gcc_target_platform ppc64-%{_vendor}-%{_target_os} +%endif +%ifnarch sparc ppc +%define gcc_target_platform %{_target_platform} +%endif + +%description +The gcc package contains the GNU Compiler Collection version 4.1. +You'll need this package in order to compile C code. + +%package -n libgcc +Summary: GCC version 4.1 shared support library +Group: System Environment/Libraries +Autoreq: false + +%description -n libgcc +This package contains GCC shared support library which is needed +e.g. for exception handling support. + +%package c++ +Summary: C++ support for GCC +Group: Development/Languages +Requires: gcc = %{version}-%{release} +Requires: libstdc++ = %{version}-%{release} +Requires: libstdc++-devel = %{version}-%{release} +Obsoletes: gcc3-c++ +Obsoletes: gcc34-c++ +Obsoletes: gcc35-c++ +Obsoletes: gcc4-c++ +Provides: gcc4-c++ = %{version}-%{release} +Autoreq: true + +%description c++ +This package adds C++ support to the GNU Compiler Collection. +It includes support for most of the current C++ specification, +including templates and exception handling. + +%package -n libstdc++ +Summary: GNU Standard C++ Library +Group: System Environment/Libraries +Obsoletes: libstdc++3 +Obsoletes: libstdc++34 +Provides: libstdc++34 +Autoreq: true + +%description -n libstdc++ +The libstdc++ package contains a rewritten standard compliant GCC Standard +C++ Library. + +%package -n libstdc++-devel +Summary: Header files and libraries for C++ development +Group: Development/Libraries +Requires: libstdc++ = %{version}-%{release} +Obsoletes: libstdc++3-devel +Obsoletes: libstdc++34-devel +Provides: libstdc++34-devel +Autoreq: true + +%description -n libstdc++-devel +This is the GNU implementation of the standard C++ libraries. This +package includes the header files and libraries needed for C++ +development. This includes rewritten implementation of STL. + +%package objc +Summary: Objective-C support for GCC +Group: Development/Languages +Requires: gcc = %{version}-%{release} +Requires: libobjc = %{version}-%{release} +Obsoletes: gcc3-objc +Autoreq: true + +%description objc +gcc-objc provides Objective-C support for the GCC. +Mainly used on systems running NeXTSTEP, Objective-C is an +object-oriented derivative of the C language. + +%package objc++ +Summary: Objective-C++ support for GCC +Group: Development/Languages +Requires: gcc-c++ = %{version}-%{release}, gcc-objc = %{version}-%{release} +Autoreq: true + +%description objc++ +gcc-objc++ package provides Objective-C++ support for the GCC. + +%package -n libobjc +Summary: Objective-C runtime +Group: System Environment/Libraries +Autoreq: true + +%description -n libobjc +This package contains Objective-C shared library which is needed to run +Objective-C dynamically linked programs. + +%package gfortran +Summary: Fortran 95 support +Group: Development/Languages +Requires: gcc = %{version}-%{release} +Requires: libgfortran = %{version}-%{release} +BuildRequires: gmp-devel >= 4.1.2-8 +Prereq: /sbin/install-info +Obsoletes: gcc3-g77 +Obsoletes: gcc-g77 +Obsoletes: gcc4-gfortran +Autoreq: true + +%description gfortran +The gcc-gfortran package provides support for compiling Fortran 95 +programs with the GNU Compiler Collection. + +%package -n libgfortran +Summary: Fortran 95 runtime +Group: System Environment/Libraries +Obsoletes: libf2c +Autoreq: true + +%description -n libgfortran +This package contains Fortran 95 shared library which is needed to run +Fortran 95 dynamically linked programs. + +%package -n libgomp +Summary: GCC OpenMP 2.5 shared support library +Group: System Environment/Libraries + +%description -n libgomp +This package contains GCC shared support library which is needed +for OpenMP 2.5 support. + +%package -n libmudflap +Summary: GCC mudflap shared support library +Group: System Environment/Libraries + +%description -n libmudflap +This package contains GCC shared support library which is needed +for mudflap support. + +%package -n libmudflap-devel +Summary: GCC mudflap support +Group: Development/Libraries +Requires: libmudflap = %{version}-%{release} +Requires: gcc = %{version}-%{release} + +%description -n libmudflap-devel +This package contains headers and static libraries for building +mudflap-instrumented programs. + +To instrument a non-threaded program, add -fmudflap +option to GCC and when linking add -lmudflap, for threaded programs +also add -fmudflapth and -lmudflapth. + +%package java +Summary: Java support for GCC +Group: Development/Languages +Requires: gcc = %{version}-%{release} +Requires: libgcj = %{version}-%{release} +Requires: libgcj-devel = %{version}-%{release}, zlib-devel +Obsoletes: gcc3-java +Obsoletes: gcc34-java +Obsoletes: gcc35-java +Obsoletes: gcc4-java +Provides: gcc4-java +Prereq: /sbin/install-info +Autoreq: true + +%description java +This package adds support for compiling Java(tm) programs and +bytecode into native code. + +%package -n libgcj +Summary: Java runtime library for gcc +Group: System Environment/Libraries +Prereq: /sbin/install-info +Requires: zip >= 2.1 +Requires: gtk2 >= 2.4.0 +BuildRequires: gtk2-devel >= 2.4.0 +Requires: glib2 >= 2.4.0 +BuildRequires: glib2-devel >= 2.4.0 +Requires: libart_lgpl >= 2.1.0 +BuildRequires: libart_lgpl-devel >= 2.1.0 +Obsoletes: gcc-libgcj +Obsoletes: libgcj3 +Obsoletes: libgcj34 +Obsoletes: libgcj4 +Provides: libgcj4 +Autoreq: true + +%description -n libgcj +The Java(tm) runtime library. You will need this package to run your Java +programs compiled using the Java compiler from GNU Compiler Collection (gcj). + +%package -n libgcj-devel +Summary: Libraries for Java development using GCC +Group: Development/Languages +Requires: zip >= 2.1, libgcj = %{version}-%{release} +Obsoletes: libgcj3-devel +Obsoletes: libgcj34-devel +Obsoletes: libgcj4-devel +Provides: libgcj4-devel +Autoreq: true + +%description -n libgcj-devel +The Java(tm) static libraries and C header files. You will need this +package to compile your Java programs using the GCC Java compiler (gcj). + +%package -n libgcj-src +Summary: Java library sources from GCC4 preview +Group: System Environment/Libraries +Requires: libgcj = %{version}-%{release} +Obsoletes: libgcj4-src +Provides: libgcj4-src +Autoreq: true + +%description -n libgcj-src +The Java(tm) runtime library sources for use in Eclipse. + +%package sparc32 +Summary: The C compiler optimized for generating SPARC 32bit code +Group: Development/Languages +Requires: gcc = %{version}-%{release}, %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcc.a +Autoreq: true + +%description sparc32 +This package contains the GNU C compiler which only supports generating +32bit SPARC code, but should be faster than the 32/64bit gcc package. You +should install this package if you want to trade disk space required for +this package for faster compilation of 32bit code. + +%package c++-sparc32 +Summary: The C++ compiler optimized for generating SPARC 32bit code +Group: Development/Languages +Requires: gcc-c++ = %{version}-%{release}, gcc-sparc32 = %{version}-%{release} +Requires: %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libstdc++.so +Autoreq: true + +%description c++-sparc32 +This package contains the GNU C++ compiler which only supports generating +32bit SPARC code, but should be faster than the 32/64bit gcc package. You +should install this package if you want to trade disk space required for +this package for faster compilation of 32bit code. + +%package ppc32 +Summary: The C compiler optimized for generating PowerPC 32bit code +Group: Development/Languages +Requires: gcc = %{version}-%{release}, %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcc.a +Autoreq: true + +%description ppc32 +This package contains the GNU C compiler which only supports generating +32bit PowerPC code, but should be faster than the 32/64bit gcc package. You +should install this package if you want to trade disk space required for +this package for faster compilation of 32bit code. + +%package c++-ppc32 +Summary: The C++ compiler optimized for generating PowerPC 32bit code +Group: Development/Languages +Requires: gcc-c++ = %{version}-%{release}, gcc-ppc32 = %{version}-%{release} +Requires: %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libstdc++.so +Autoreq: true + +%description c++-ppc32 +This package contains the GNU C++ compiler which only supports generating +32bit PowerPC code, but should be faster than the 32/64bit gcc package. You +should install this package if you want to trade disk space required for +this package for faster compilation of 32bit code. + +%package -n cpp +Summary: The C Preprocessor. +Group: Development/Languages +Prereq: /sbin/install-info +%ifarch ia64 +Obsoletes: gnupro +%endif +Autoreq: true + +%description -n cpp +Cpp is the GNU C-Compatible Compiler Preprocessor. +Cpp is a macro processor which is used automatically +by the C compiler to transform your program before actual +compilation. It is called a macro processor because it allows +you to define macros, abbreviations for longer +constructs. + +The C preprocessor provides four separate functionalities: the +inclusion of header files (files of declarations that can be +substituted into your program); macro expansion (you can define macros, +and the C preprocessor will replace the macros with their definitions +throughout the program); conditional compilation (using special +preprocessing directives, you can include or exclude parts of the +program according to various conditions); and line control (if you use +a program to combine or rearrange source files into an intermediate +file which is then compiled, you can use line control to inform the +compiler about where each source line originated). + +You should install this package if you are a C programmer and you use +macros. + +%package gnat +Summary: Ada 95 support for GCC +Group: Development/Languages +Requires: gcc = %{version}-%{release}, libgnat = %{version}-%{release} +Obsoletes: gnat-devel, gcc3-gnat +Prereq: /sbin/install-info +Autoreq: true + +%description gnat +GNAT is a GNU Ada 95 front-end to GCC. This package includes development tools, +the documents and Ada 95 compiler. + +%package -n libgnat +Summary: GNU Ada 95 runtime shared libraries +Group: System Environment/Libraries +Obsoletes: gnat libgnat3 +Autoreq: true + +%description -n libgnat +GNAT is a GNU Ada 95 front-end to GCC. This package includes shared libraries, +which are required to run programs compiled with the GNAT. + +%prep +%setup -q -n gcc-%{version}-%{DATE} +%patch1 -p0 -b .ice-hack~ +%patch2 -p0 -b .ppc64-m32-m64-multilib-only~ +%patch3 -p0 -b .ia64-libunwind~ +%patch4 -p0 -b .gnuc-rh-release~ +%patch5 -p0 -b .java-nomulti~ +%ifarch ppc sparc +%patch6 -p0 -b .multi32-hack~ +%endif +%patch7 -p0 -b .ia64-stack-protector~ +%patch8 -p0 -b .ada-pr18302~ +%patch9 -p0 -b .ada-tweaks~ +%patch10 -p0 -b .java-rmic~ +%patch11 -p0 -b .java-slow_pthread_self~ +%patch12 -p0 -b .libjava-libltdl~ +%patch13 -p0 -b .test-20050330-2~ +%patch14 -p0 -b .test-c++-struct_layout~ +%patch15 -p0 -b .test-pr17828~ +%patch16 -p0 -b .test-pr19005~ +%patch17 -p0 -b .test-pr19317~ +%patch18 -p0 -b .fortran-finclude~ +%patch19 -p0 -b .ppc64-sync~ +%patch20 -p0 -b .ppc32-retaddr~ +%patch21 -p0 -b .gomp-atomic~ +%patch22 -p0 -b .libgfortran-host_subdir~ +%patch23 -p0 -b .ia64-fetchadd~ +%patch24 -p0 -b .ia64-tls-le~ + +sed -i -e 's/4\.1\.0/4.1.0/' gcc/BASE-VER gcc/version.c +sed -i -e 's/" (Red Hat[^)]*)"/" (Red Hat %{version}-%{gcc_release})"/' gcc/version.c + +sed -i -e 's/libjawt/libgcjawt/g' libjava/Makefile.{am,in} + +cp -a libstdc++-v3/config/cpu/i{4,3}86/atomicity.h + +# Hack to avoid building multilib libjava +perl -pi -e 's/^all: all-redirect/ifeq (\$(MULTISUBDIR),)\nall: all-redirect\nelse\nall:\n\techo Multilib libjava build disabled\nendif/' libjava/Makefile.in +perl -pi -e 's/^install: install-redirect/ifeq (\$(MULTISUBDIR),)\ninstall: install-redirect\nelse\ninstall:\n\techo Multilib libjava install disabled\nendif/' libjava/Makefile.in +perl -pi -e 's/^check: check-redirect/ifeq (\$(MULTISUBDIR),)\ncheck: check-redirect\nelse\ncheck:\n\techo Multilib libjava check disabled\nendif/' libjava/Makefile.in +perl -pi -e 's/^all: all-recursive/ifeq (\$(MULTISUBDIR),)\nall: all-recursive\nelse\nall:\n\techo Multilib libjava build disabled\nendif/' libjava/Makefile.in +perl -pi -e 's/^install: install-recursive/ifeq (\$(MULTISUBDIR),)\ninstall: install-recursive\nelse\ninstall:\n\techo Multilib libjava install disabled\nendif/' libjava/Makefile.in +perl -pi -e 's/^check: check-recursive/ifeq (\$(MULTISUBDIR),)\ncheck: check-recursive\nelse\ncheck:\n\techo Multilib libjava check disabled\nendif/' libjava/Makefile.in + +./contrib/gcc_update --touch + +%ifarch ppc +if [ -d libstdc++-v3/config/abi/powerpc64-linux-gnu ]; then + mkdir -p libstdc++-v3/config/abi/powerpc64-linux-gnu/64 + mv libstdc++-v3/config/abi/powerpc64-linux-gnu/{,64/}baseline_symbols.txt + mv libstdc++-v3/config/abi/powerpc64-linux-gnu/{32/,}baseline_symbols.txt + rm -rf libstdc++-v3/config/abi/powerpc64-linux-gnu/32 +fi +%endif +%ifarch sparc +if [ -d libstdc++-v3/config/abi/sparc64-linux-gnu ]; then + mkdir -p libstdc++-v3/config/abi/sparc64-linux-gnu/64 + mv libstdc++-v3/config/abi/sparc64-linux-gnu/{,64/}baseline_symbols.txt + mv libstdc++-v3/config/abi/sparc64-linux-gnu/{32/,}baseline_symbols.txt + rm -rf libstdc++-v3/config/abi/sparc64-linux-gnu/32 +fi +%endif + +%build + +rm -fr obj-%{gcc_target_platform} +mkdir obj-%{gcc_target_platform} +cd obj-%{gcc_target_platform} + +if [ ! -f /usr/lib/locale/de_DE/LC_CTYPE ]; then + mkdir locale + localedef -f ISO-8859-1 -i de_DE locale/de_DE + export LOCPATH=`pwd`/locale:/usr/lib/locale +fi + +CC=gcc +OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[12]//g'` +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-m64//g;s/-m32//g;s/-m31//g'` +%ifarch sparc sparc64 +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mcpu=ultrasparc/-mtune=ultrasparc/g'` +%endif +%ifarch sparc64 +cat > gcc64 <<"EOF" +#!/bin/sh +exec /usr/bin/gcc -m64 "$@" +EOF +chmod +x gcc64 +CC=`pwd`/gcc64 +%endif +%ifarch ppc64 +if gcc -m64 -xc -S /dev/null -o - > /dev/null 2>&1; then + cat > gcc64 <<"EOF" +#!/bin/sh +exec /usr/bin/gcc -m64 "$@" +EOF + chmod +x gcc64 + CC=`pwd`/gcc64 +fi +%endif +OPT_FLAGS=`echo "$OPT_FLAGS" | sed -e 's/[[:blank:]]\+/ /g'` +CC="$CC" CFLAGS="$OPT_FLAGS" CXXFLAGS="$OPT_FLAGS" XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \ + GCJFLAGS="$OPT_FLAGS" \ + ../configure --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \ + --enable-shared --enable-threads=posix --enable-checking=release \ + --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions \ + --enable-libgcj-multifile \ +%if !%{build_ada} + --enable-languages=c,c++,objc,obj-c++,java,fortran \ +%else + --enable-languages=c,c++,objc,obj-c++,java,fortran,ada \ +%endif +%if !%{build_java} + --disable-libgcj \ +%else + --enable-java-awt=gtk \ + --with-java-home=%{_prefix}/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre \ +%endif +%ifarch ppc ppc64 + --enable-secureplt \ +%endif +%ifarch sparc + --host=%{gcc_target_platform} --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=v7 +%endif +%ifarch ppc + --host=%{gcc_target_platform} --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=default32 +%endif +%ifnarch sparc ppc + --host=%{gcc_target_platform} +%endif + +make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" bootstrap +#%ifarch %{ix86} x86_64 +#make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" profiledbootstrap +#%else +#make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" bootstrap-lean +#%endif + +# run the tests. +make %{?_smp_mflags} -k check RUNTESTFLAGS="ALT_CC_UNDER_TEST=gcc ALT_CXX_UNDER_TEST=g++" || : +cd gcc +mv testsuite{,.normal} +make %{?_smp_mflags} -k \ + `sed -n 's/check-ada//;s/^CHECK_TARGETS[[:blank:]]*=[[:blank:]]*//p' Makefile` \ + RUNTESTFLAGS="--target_board=unix/-fstack-protector ALT_CC_UNDER_TEST=gcc ALT_CXX_UNDER_TEST=g++" || : +mv testsuite{,.ssp} +mv testsuite{.normal,} +cd .. +echo ====================TESTING========================= +( ../contrib/test_summary || : ) 2>&1 | sed -n '/^cat.*EOF/,/^EOF/{/^cat.*EOF/d;/^EOF/d;/^LAST_UPDATED:/d;p;}' +echo ====================TESTING END===================== + +# Make protoize +make -C gcc CC="./xgcc -B ./ -O2" proto + +%ifarch sparc ppc +# Build the -m32 only compiler which does not use long long for HOST_WIDE_INT +mkdir gcc32 +cd gcc32 +OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-fno-rtti//g' -e 's/-fno-exceptions//g'` +echo "#!/bin/sh" > gcc32 +echo "exec `cd ../gcc; pwd`/xgcc -B `cd ../gcc; pwd`/ $OPT_FLAGS "'"$@"' >> gcc32 +chmod +x gcc32 +CC=`pwd`/gcc32 CFLAGS="$OPT_FLAGS" CXXFLAGS="$OPT_FLAGS" XCFLAGS="$OPT_FLAGS" \ + TCFLAGS="$OPT_FLAGS" ../../configure --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \ + --enable-shared --enable-threads=posix --enable-checking=release --disable-libunwind-exceptions \ + --with-system-zlib --enable-__cxa_atexit --enable-languages=c,c++ \ + --host=%{_target_platform} --build=%{_target_platform} --target=%{_target_platform} +make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" all-gcc +cd .. +%endif + +# Make generated man pages even if Pod::Man is not new enough +perl -pi -e 's/head3/head2/' ../contrib/texi2pod.pl +for i in ../gcc/doc/*.texi; do + cp -a $i $i.orig; sed 's/ftable/table/' $i.orig > $i +done +make -C gcc generated-manpages +for i in ../gcc/doc/*.texi; do mv -f $i.orig $i; done + +# Copy various doc files here and there +cd .. +mkdir -p rpm.doc/gfortran rpm.doc/objc +mkdir -p rpm.doc/boehm-gc rpm.doc/fastjar rpm.doc/libffi rpm.doc/libjava +mkdir -p rpm.doc/changelogs/{gcc/cp,gcc/java,gcc/ada,libstdc++-v3,libobjc,libmudflap,libgomp} + +for i in {gcc,gcc/cp,gcc/java,gcc/ada,libstdc++-v3,libobjc,libmudflap,libgomp}/ChangeLog*; do + cp -p $i rpm.doc/changelogs/$i +done + +(cd gcc/f; for i in ChangeLog*; do + cp -p $i ../../rpm.doc/gfortran/$i.f +done) +(cd libgfortran; for i in ChangeLog*; do + cp -p $i ../rpm.doc/gfortran/$i.libgfortran +done) +(cd gcc/objc; for i in README*; do + cp -p $i ../../rpm.doc/objc/$i.objc +done) +(cd libobjc; for i in README*; do + cp -p $i ../rpm.doc/objc/$i.libobjc +done) +(cd boehm-gc; for i in ChangeLog*; do + cp -p $i ../rpm.doc/boehm-gc/$i.gc +done) +(cd fastjar; for i in ChangeLog* README*; do + cp -p $i ../rpm.doc/fastjar/$i.fastjar +done) +(cd libffi; for i in ChangeLog* README* LICENSE; do + cp -p $i ../rpm.doc/libffi/$i.libffi +done) +(cd libjava; for i in ChangeLog* README*; do + cp -p $i ../rpm.doc/libjava/$i.libjava +done) +cp -p libjava/LIBGCJ_LICENSE rpm.doc/libjava/ + +rm -f rpm.doc/changelogs/gcc/ChangeLog.[1-9] +find rpm.doc -name \*ChangeLog\* | xargs bzip2 -9 + +%install +rm -fr $RPM_BUILD_ROOT + +perl -pi -e \ + 's~href="l(ibstdc|atest)~href="http://gcc.gnu.org/onlinedocs/libstdc++/l\1~' \ + libstdc++-v3/docs/html/documentation.html +ln -sf documentation.html libstdc++-v3/docs/html/index.html + +cd obj-%{gcc_target_platform} + +if [ ! -f /usr/lib/locale/de_DE/LC_CTYPE ]; then + export LOCPATH=`pwd`/locale:/usr/lib/locale +fi + +TARGET_PLATFORM=%{gcc_target_platform} + +# There are some MP bugs in libstdc++ Makefiles +make -C %{gcc_target_platform}/libstdc++-v3 + +make prefix=$RPM_BUILD_ROOT%{_prefix} mandir=$RPM_BUILD_ROOT%{_mandir} \ + infodir=$RPM_BUILD_ROOT%{_infodir} install +%if %{build_java} +make DESTDIR=$RPM_BUILD_ROOT -C %{gcc_target_platform}/libjava install-src.zip +%endif +%if %{build_ada} +chmod 644 $RPM_BUILD_ROOT%{_infodir}/gnat* +%endif + +FULLPATH=$RPM_BUILD_ROOT%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +FULLEPATH=$RPM_BUILD_ROOT%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} + +# fix some things +ln -sf gcc $RPM_BUILD_ROOT%{_prefix}/bin/cc +mkdir -p $RPM_BUILD_ROOT/lib +ln -sf ..%{_prefix}/bin/cpp $RPM_BUILD_ROOT/lib/cpp +ln -sf gfortran $RPM_BUILD_ROOT%{_prefix}/bin/f95 +rm -f $RPM_BUILD_ROOT%{_infodir}/dir +gzip -9 $RPM_BUILD_ROOT%{_infodir}/*.info* +ln -sf gcc $RPM_BUILD_ROOT%{_prefix}/bin/gnatgcc + +cxxconfig="`find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h`" +for i in `find %{gcc_target_platform}/[36]*/libstdc++-v3/include -name c++config.h 2>/dev/null`; do + if ! diff -up $cxxconfig $i; then + cat > $RPM_BUILD_ROOT%{_prefix}/include/c++/%{gcc_version}/%{gcc_target_platform}/bits/c++config.h < +#if __WORDSIZE == 32 +%ifarch %{multilib_64_archs} +`cat $(find %{gcc_target_platform}/32/libstdc++-v3/include -name c++config.h)` +%else +`cat $(find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h)` +%endif +#else +%ifarch %{multilib_64_archs} +`cat $(find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h)` +%else +`cat $(find %{gcc_target_platform}/64/libstdc++-v3/include -name c++config.h)` +%endif +#endif +#endif +EOF + break + fi +done + +%ifarch sparc ppc +# Install the sparc/ppc -m32 only compilers +FULLPATH32=$RPM_BUILD_ROOT%{_prefix}/lib/gcc/%{_target_platform}/%{gcc_version} +FULLEPATH32=$RPM_BUILD_ROOT%{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version} +mkdir -p $FULLPATH32 $FULLEPATH32 +ln -sf %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include \ + $FULLPATH32/ +install -m 755 gcc32/gcc/cc1 $FULLEPATH32/ +install -m 755 gcc32/gcc/cc1plus $FULLEPATH32/ +ln -f $RPM_BUILD_ROOT%{_prefix}/bin/%{gcc_target_platform}-gcc \ + $RPM_BUILD_ROOT%{_prefix}/bin/%{_target_platform}-gcc +%endif +%ifarch sparc ppc +cp -al $RPM_BUILD_ROOT%{_prefix}/include/c++/%{gcc_version}/%{gcc_target_platform} \ + $RPM_BUILD_ROOT%{_prefix}/include/c++/%{gcc_version}/%{_target_platform} +%endif +%ifarch sparc64 +ln -f $RPM_BUILD_ROOT%{_prefix}/bin/%{gcc_target_platform}-gcc \ + $RPM_BUILD_ROOT%{_prefix}/bin/sparc-%{_vendor}-%{_target_os}-gcc +%endif +%ifarch ppc64 +ln -f $RPM_BUILD_ROOT%{_prefix}/bin/%{gcc_target_platform}-gcc \ + $RPM_BUILD_ROOT%{_prefix}/bin/ppc-%{_vendor}-%{_target_os}-gcc +%endif + +%ifarch sparc ppc +FULLLPATH=$FULLPATH/lib32 +%endif +%ifarch sparc64 ppc64 +FULLLPATH=$FULLPATH/lib64 +%endif +if [ -n "$FULLLPATH" ]; then + mkdir -p $FULLLPATH +else + FULLLPATH=$FULLPATH +fi + +find $RPM_BUILD_ROOT -name \*.la | xargs rm -f +if [ "%{build_java}" -gt 0 ]; then +# gcj -static doesn't work properly anyway, unless using --whole-archive +# and saving 35MB is not bad. +find $RPM_BUILD_ROOT -name libgcj.a -o -name lib-gnu-java-awt-peer-gtk.a \ + -o -name libgjsmalsa.a \ + -o -name libgij.a -o -name libgcjawt.a | xargs rm -f + +mv $RPM_BUILD_ROOT%{_prefix}/lib/libgcj.spec $FULLPATH/ +sed -i -e 's/lib: /&%%{static:%%eJava programs cannot be linked statically}/' \ + $FULLPATH/libgcj.spec +fi + +mkdir -p $RPM_BUILD_ROOT/%{_lib} +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgcc_s.so.1 $RPM_BUILD_ROOT/%{_lib}/libgcc_s-%{gcc_version}-%{DATE}.so.1 +chmod 755 $RPM_BUILD_ROOT/%{_lib}/libgcc_s-%{gcc_version}-%{DATE}.so.1 +ln -sf libgcc_s-%{gcc_version}-%{DATE}.so.1 $RPM_BUILD_ROOT/%{_lib}/libgcc_s.so.1 +ln -sf /%{_lib}/libgcc_s.so.1 $FULLPATH/libgcc_s.so +%ifarch sparc ppc +ln -sf /lib64/libgcc_s.so.1 $FULLPATH/64/libgcc_s.so +%endif +%ifarch %{multilib_64_archs} +ln -sf /lib/libgcc_s.so.1 $FULLPATH/32/libgcc_s.so +%endif + +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgomp.spec $FULLPATH/ +mv -f $RPM_BUILD_ROOT%{_prefix}/include/omp.h $FULLPATH/include/ +mkdir -p $FULLPATH/finclude +mv -f $RPM_BUILD_ROOT%{_prefix}/include/omp_lib* $FULLPATH/finclude/ + +%if %{build_ada} +mv -f $FULLPATH/adalib/libgnarl-*.so $RPM_BUILD_ROOT%{_prefix}/%{_lib}/ +mv -f $FULLPATH/adalib/libgnat-*.so $RPM_BUILD_ROOT%{_prefix}/%{_lib}/ +rm -f $FULLPATH/adalib/libgnarl.so* $FULLPATH/adalib/libgnat.so* +%endif + +mkdir -p $RPM_BUILD_ROOT%{_prefix}/libexec/getconf +if gcc/xgcc -B gcc/ -E -dD -xc /dev/null | grep __LONG_MAX__.*2147483647; then + ln -sf POSIX_V6_ILP32_OFF32 $RPM_BUILD_ROOT%{_prefix}/libexec/getconf/default +else + ln -sf POSIX_V6_LP64_OFF64 $RPM_BUILD_ROOT%{_prefix}/libexec/getconf/default +fi + +%if %{build_java} +#mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/classpath/libgjsmalsa.so* \ +# $RPM_BUILD_ROOT%{_prefix}/%{_lib}/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib/classpath/libgjsmalsa.so* \ + $RPM_BUILD_ROOT%{_prefix}/%{_lib}/ +%endif + +pushd $FULLPATH +if [ "%{_lib}" = "lib" ]; then +ln -sf ../../../libobjc.so.1 libobjc.so +ln -sf ../../../libstdc++.so.6.* libstdc++.so +ln -sf ../../../libgfortran.so.1.* libgfortran.so +ln -sf ../../../libgomp.so.1.* libgomp.so +ln -sf ../../../libmudflap.so.0.* libmudflap.so +ln -sf ../../../libmudflapth.so.0.* libmudflapth.so +%if %{build_java} +ln -sf ../../../libgcj.so.6.* libgcj.so +ln -sf ../../../lib-gnu-java-awt-peer-gtk.so.6.* lib-gnu-java-awt-peer-gtk.so +ln -sf ../../../libgjsmalsa.so.6.* libgjsmalsa.so +ln -sf ../../../libgij.so.6.* libgij.so +ln -sf ../../../libgcjawt.so.6.* libgcjawt.so +%endif +%if %{build_ada} +cd adalib +ln -sf ../../../../libgnarl-*.so libgnarl.so +ln -sf ../../../../libgnarl-*.so libgnarl-4.1.so +ln -sf ../../../../libgnat-*.so libgnat.so +ln -sf ../../../../libgnat-*.so libgnat-4.1.so +cd .. +%endif +else +ln -sf ../../../../%{_lib}/libobjc.so.1 libobjc.so +ln -sf ../../../../%{_lib}/libstdc++.so.6.* libstdc++.so +ln -sf ../../../../%{_lib}/libgfortran.so.1.* libgfortran.so +ln -sf ../../../../%{_lib}/libgomp.so.1.* libgomp.so +ln -sf ../../../../%{_lib}/libmudflap.so.0.* libmudflap.so +ln -sf ../../../../%{_lib}/libmudflapth.so.0.* libmudflapth.so +%if %{build_java} +ln -sf ../../../../%{_lib}/libgcj.so.6.* libgcj.so +ln -sf ../../../../%{_lib}/lib-gnu-java-awt-peer-gtk.so.6.* lib-gnu-java-awt-peer-gtk.so +ln -sf ../../../../%{_lib}/libgjsmalsa.so.6.* libgjsmalsa.so +ln -sf ../../../../%{_lib}/libgij.so.6.* libgij.so +ln -sf ../../../../%{_lib}/libgcjawt.so.6.* libgcjawt.so +%endif +%if %{build_ada} +cd adalib +ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl.so +ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl-4.1.so +ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat.so +ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat-4.1.so +cd .. +%endif +fi +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libstdc++.*a $FULLLPATH/ +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libsupc++.*a . +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgfortran.*a . +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgfortranbegin.*a . +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libobjc.*a . +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgomp.*a . +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libmudflap{,th}.*a . +mv -f $RPM_BUILD_ROOT%{_prefix}/include/mf-runtime.h include/ + +%ifarch sparc ppc +ln -sf ../../../../../lib64/libobjc.so.1 64/libobjc.so +ln -sf ../`echo ../../../../lib/libstdc++.so.6.* | sed s~/lib/~/lib64/~` 64/libstdc++.so +ln -sf ../`echo ../../../../lib/libgfortran.so.1.* | sed s~/lib/~/lib64/~` 64/libgfortran.so +ln -sf ../`echo ../../../../lib/libgomp.so.1.* | sed s~/lib/~/lib64/~` 64/libgomp.so +ln -sf ../`echo ../../../../lib/libmudflap.so.0.* | sed s~/lib/~/lib64/~` 64/libmudflap.so +ln -sf ../`echo ../../../../lib/libmudflapth.so.0.* | sed s~/lib/~/lib64/~` 64/libmudflapth.so +if [ "%{build_java}" -gt 0 ]; then +ln -sf ../`echo ../../../../lib/libgcj.so.6.* | sed s~/lib/~/lib64/~` 64/libgcj.so +ln -sf ../`echo ../../../../lib/lib-gnu-java-awt-peer-gtk.so.6.* | sed s~/lib/~/lib64/~` 64/lib-gnu-java-awt-peer-gtk.so +ln -sf ../`echo ../../../../lib/libgjsmalsa.so.6.* | sed s~/lib/~/lib64/~` 64/libgjsmalsa.so +ln -sf ../`echo ../../../../lib/libgij.so.6.* | sed s~/lib/~/lib64/~` 64/libgij.so +ln -sf ../`echo ../../../../lib/libgcjawt.so.6.* | sed s~/lib/~/lib64/~` 64/libgcjawt.so +fi +mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libsupc++.*a 64/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libgfortran.*a 64/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libgfortranbegin.*a 64/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libobjc.*a 64/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libgomp.*a 64/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libmudflap{,th}.*a 64/ +ln -sf lib32/libstdc++.a libstdc++.a +ln -sf ../lib64/libstdc++.a 64/libstdc++.a +%endif +%ifarch %{multilib_64_archs} +mkdir -p 32 +ln -sf ../../../../libobjc.so.1 32/libobjc.so +ln -sf ../`echo ../../../../lib64/libstdc++.so.6.* | sed s~/../lib64/~/~` 32/libstdc++.so +ln -sf ../`echo ../../../../lib64/libgfortran.so.1.* | sed s~/../lib64/~/~` 32/libgfortran.so +ln -sf ../`echo ../../../../lib64/libgomp.so.1.* | sed s~/../lib64/~/~` 32/libgomp.so +ln -sf ../`echo ../../../../lib64/libmudflap.so.0.* | sed s~/../lib64/~/~` 32/libmudflap.so +ln -sf ../`echo ../../../../lib64/libmudflapth.so.0.* | sed s~/../lib64/~/~` 32/libmudflapth.so +if [ "%{build_java}" -gt 0 ]; then +ln -sf ../`echo ../../../../lib64/libgcj.so.6.* | sed s~/../lib64/~/~` 32/libgcj.so +ln -sf ../`echo ../../../../lib64/lib-gnu-java-awt-peer-gtk.so.6.* | sed s~/../lib64/~/~` 32/lib-gnu-java-awt-peer-gtk.so +ln -sf ../`echo ../../../../lib64/libgjsmalsa.so.6.* | sed s~/../lib64/~/~` 32/libgjsmalsa.so +ln -sf ../`echo ../../../../lib64/libgij.so.6.* | sed s~/../lib64/~/~` 32/libgij.so +ln -sf ../`echo ../../../../lib64/libgcjawt.so.6.* | sed s~/../lib64/~/~` 32/libgcjawt.so +fi +mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libsupc++.*a 32/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libgfortran.*a 32/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libgfortranbegin.*a 32/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libobjc.*a 32/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libgomp.*a 32/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libmudflap{,th}.*a 32/ +%endif +%ifarch sparc64 ppc64 +ln -sf ../lib32/libstdc++.a 32/libstdc++.a +ln -sf lib64/libstdc++.a libstdc++.a +%else +%ifarch %{multilib_64_archs} +ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libstdc++.a 32/libstdc++.a +if [ "%{build_java}" -gt 0 ]; then +ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libgcj.a 32/libgcj.a +ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/lib-gnu-java-awt-peer-gtk.a 32/lib-gnu-java-awt-peer-gtk.a +ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libgij.a 32/libgij.a +ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libgcjawt.a 32/libgcjawt.a +fi +%endif +%endif + +# Strip debug info from Fortran/ObjC/Java static libraries +strip -g `find . \( -name libgfortran.a -o -name libobjc.a -o -name libgomp.a \ + -o -name libmudflap.a -o -name libmudflapth.a \ + -o -name libgcc.a -o -name libgcov.a \) -a -type f` +popd +chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgfortran.so.1.* +chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgomp.so.1.* +chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libmudflap{,th}.so.0.* +chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libobjc.so.1.* + +%if %{build_ada} +chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgnarl*so* +chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgnat*so* +%endif + +for h in `find $FULLPATH/include -name \*.h`; do + if grep -q 'It has been auto-edited by fixincludes from' $h; then + rh=`grep -A2 'It has been auto-edited by fixincludes from' $h | tail -1 | sed 's|^.*"\(.*\)".*$|\1|'` + diff -up $rh $h || : + rm -f $h + fi +done + +cat > $RPM_BUILD_ROOT%{_prefix}/bin/c89 <<"EOF" +#!/bin/sh +fl="-std=c89" +for opt; do + case "$opt" in + -ansi|-std=c89|-std=iso9899:1990) fl="";; + -std=*) echo "`basename $0` called with non ANSI/ISO C option $opt" >&2 + exit 1;; + esac +done +exec gcc $fl ${1+"$@"} +EOF +cat > $RPM_BUILD_ROOT%{_prefix}/bin/c99 <<"EOF" +#!/bin/sh +fl="-std=c99" +for opt; do + case "$opt" in + -std=c99|-std=iso9899:1999) fl="";; + -std=*) echo "`basename $0` called with non ISO C99 option $opt" >&2 + exit 1;; + esac +done +exec gcc $fl ${1+"$@"} +EOF +chmod 755 $RPM_BUILD_ROOT%{_prefix}/bin/c?9 + +mkdir -p $RPM_BUILD_ROOT%{_prefix}/sbin +gcc -static -Os %{SOURCE1} -o $RPM_BUILD_ROOT%{_prefix}/sbin/libgcc_post_upgrade +strip $RPM_BUILD_ROOT%{_prefix}/sbin/libgcc_post_upgrade + +cd .. +%find_lang %{name} +%find_lang cpplib + +# Remove binaries we will not be including, so that they don't end up in +# gcc-debuginfo +rm -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/{libffi*,libiberty.a} +rm -f $FULLEPATH/install-tools/{mkheaders,fixincl} +rm -f $RPM_BUILD_ROOT%{_prefix}/lib/{32,64}/libiberty.a +rm -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libssp* + +%if %{build_java} +mkdir -p $RPM_BUILD_ROOT%{_prefix}/share/java/gcj-endorsed \ + $RPM_BUILD_ROOT%{_prefix}/%{_lib}/gcj-%{version}/classmap.db.d +chmod 755 $RPM_BUILD_ROOT%{_prefix}/share/java/gcj-endorsed \ + $RPM_BUILD_ROOT%{_prefix}/%{_lib}/gcj-%{version} \ + $RPM_BUILD_ROOT%{_prefix}/%{_lib}/gcj-%{version}/classmap.db.d +touch $RPM_BUILD_ROOT%{_prefix}/%{_lib}/gcj-%{version}/classmap.db +%endif + +%clean +rm -rf $RPM_BUILD_ROOT + +%post +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gcc.info.gz + +%preun +if [ $1 = 0 ]; then + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/gcc.info.gz +fi + +%post -n cpp +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/cpp.info.gz + +%preun -n cpp +if [ $1 = 0 ]; then + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/cpp.info.gz +fi + +%post gfortran +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gfortran.info.gz + +%preun gfortran +if [ $1 = 0 ]; then + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/gfortran.info.gz +fi + +%post java +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gcj.info.gz + +%preun java +if [ $1 = 0 ]; then + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/gcj.info.gz +fi + +%post gnat +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gnat_rm.info.gz +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gnat_ugn_unw.info.gz +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gnat-style.info.gz + +%preun gnat +if [ $1 = 0 ]; then + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/gnat_rm.info.gz + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/gnat_ugn_unw.info.gz + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/gnat-style.info.gz +fi + +# Because glibc Prereq's libgcc and /sbin/ldconfig +# comes from glibc, it might not exist yet when +# libgcc is installed +%post -n libgcc -p %{_prefix}/sbin/libgcc_post_upgrade + +%post -n libstdc++ -p /sbin/ldconfig + +%postun -n libstdc++ -p /sbin/ldconfig + +%post -n libobjc -p /sbin/ldconfig + +%postun -n libobjc -p /sbin/ldconfig + +%post -n libgcj +/sbin/ldconfig +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/fastjar.info.gz + +%preun -n libgcj +if [ $1 = 0 ]; then + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/fastjar.info.gz +fi + +%postun -n libgcj -p /sbin/ldconfig + +%post -n libgfortran -p /sbin/ldconfig + +%postun -n libgfortran -p /sbin/ldconfig + +%post -n libgnat -p /sbin/ldconfig + +%postun -n libgnat -p /sbin/ldconfig + +%post -n libgomp -p /sbin/ldconfig + +%postun -n libgomp -p /sbin/ldconfig + +%post -n libmudflap -p /sbin/ldconfig + +%postun -n libmudflap -p /sbin/ldconfig + +%files -f %{name}.lang +%defattr(-,root,root) +%{_prefix}/bin/cc +%{_prefix}/bin/c89 +%{_prefix}/bin/c99 +%{_prefix}/bin/gcc +%{_prefix}/bin/gcov +%{_prefix}/bin/protoize +%{_prefix}/bin/unprotoize +%ifarch sparc ppc +%{_prefix}/bin/%{_target_platform}-gcc +%endif +%ifarch sparc64 +%{_prefix}/bin/sparc-%{_vendor}-%{_target_os}-gcc +%endif +%ifarch ppc64 +%{_prefix}/bin/ppc-%{_vendor}-%{_target_os}-gcc +%endif +%{_prefix}/bin/%{gcc_target_platform}-gcc +%{_mandir}/man1/gcc.1* +%{_mandir}/man1/gcov.1* +%{_infodir}/gcc* +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stddef.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stdarg.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/varargs.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/float.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/limits.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stdbool.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/iso646.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/syslimits.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/unwind.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/omp.h +%ifarch %{ix86} x86_64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mmintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/xmmintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/emmintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/pmmintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm_malloc.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm3dnow.h +%endif +%ifarch ia64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/ia64intrin.h +%endif +%ifarch ppc ppc64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/ppc-asm.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/altivec.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/spe.h +%endif +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/README +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/collect2 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/crt*.o +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcc.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcov.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcc_eh.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcc_s.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgomp.spec +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgomp.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgomp.so +%ifarch sparc ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/crt*.o +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcc.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcov.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcc_eh.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcc_s.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgomp.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgomp.so +%endif +%ifarch %{multilib_64_archs} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/crt*.o +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcc.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcov.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcc_eh.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcc_s.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgomp.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgomp.so +%endif +%dir %{_prefix}/libexec/getconf +%{_prefix}/libexec/getconf/default +%doc gcc/README* rpm.doc/changelogs/gcc/ChangeLog* gcc/COPYING* + +%files -n cpp -f cpplib.lang +%defattr(-,root,root) +/lib/cpp +%{_prefix}/bin/cpp +%{_mandir}/man1/cpp.1* +%{_infodir}/cpp* +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1 + +%files -n libgcc +%defattr(-,root,root) +/%{_lib}/libgcc_s-%{gcc_version}-%{DATE}.so.1 +/%{_lib}/libgcc_s.so.1 +%{_prefix}/sbin/libgcc_post_upgrade +%doc gcc/COPYING.LIB + +%files c++ +%defattr(-,root,root) +%{_prefix}/bin/%{gcc_target_platform}-*++ +%{_prefix}/bin/g++ +%{_prefix}/bin/c++ +%{_mandir}/man1/g++.1* +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1plus +%ifarch sparc ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libstdc++.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libstdc++.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libsupc++.a +%endif +%ifarch %{multilib_64_archs} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libstdc++.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libstdc++.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libsupc++.a +%endif +%ifarch sparc ppc %{multilib_64_archs} +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libsupc++.a +%endif +%ifarch sparc sparc64 ppc ppc64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.a +%endif +%doc rpm.doc/changelogs/gcc/cp/ChangeLog* + +%files -n libstdc++ +%defattr(-,root,root) +%{_prefix}/%{_lib}/libstdc++.so.6* + +%files -n libstdc++-devel +%defattr(-,root,root) +%dir %{_prefix}/include/c++ +%dir %{_prefix}/include/c++/%{gcc_version} +%{_prefix}/include/c++/%{gcc_version}/[^gj]* +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%ifarch sparc ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libstdc++.a +%endif +%ifarch sparc64 ppc64 +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libstdc++.a +%endif +%ifnarch sparc sparc64 ppc ppc64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.a +%endif +%ifnarch sparc ppc %{multilib_64_archs} +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libsupc++.a +%endif +%doc rpm.doc/changelogs/libstdc++-v3/ChangeLog* libstdc++-v3/README* libstdc++-v3/docs/html/ + +%files objc +%defattr(-,root,root) +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/objc +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1obj +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libobjc.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libobjc.so +%ifarch sparc ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libobjc.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libobjc.so +%endif +%ifarch %{multilib_64_archs} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libobjc.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libobjc.so +%endif +%doc rpm.doc/objc/* +%doc libobjc/THREADS* rpm.doc/changelogs/libobjc/ChangeLog* + +%files objc++ +%defattr(-,root,root) +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1objplus + +%files -n libobjc +%defattr(-,root,root) +%{_prefix}/%{_lib}/libobjc.so.1* + +%files gfortran +%defattr(-,root,root) +%{_prefix}/bin/gfortran +%{_prefix}/bin/f95 +%{_mandir}/man1/gfortran.1* +%{_infodir}/gfortran* +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib.f90 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib.mod +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib_kinds.mod +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/f951 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgfortranbegin.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgfortran.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgfortran.so +%ifarch sparc ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgfortranbegin.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgfortran.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgfortran.so +%endif +%ifarch %{multilib_64_archs} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgfortranbegin.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgfortran.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgfortran.so +%endif +%doc rpm.doc/gfortran/* + +%files -n libgfortran +%defattr(-,root,root) +%{_prefix}/%{_lib}/libgfortran.so.1* + +%if %{build_java} +%files java +%defattr(-,root,root) +%{_prefix}/bin/gcj +%{_prefix}/bin/gcjh +%{_prefix}/bin/gjnih +%{_prefix}/bin/jcf-dump +%{_prefix}/bin/jv-scan +%{_mandir}/man1/gcj.1* +%{_mandir}/man1/gcjh.1* +%{_mandir}/man1/gjnih.1* +%{_mandir}/man1/jcf-dump.1* +%{_mandir}/man1/jv-scan.1* +%{_infodir}/gcj* +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/jc1 +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/jvgenmain +%doc rpm.doc/changelogs/gcc/java/ChangeLog* + +%files -n libgcj +%defattr(-,root,root) +%{_prefix}/bin/jv-convert +%{_prefix}/bin/gij +%{_prefix}/bin/fastjar +%{_prefix}/bin/grepjar +%{_prefix}/bin/grmic +%{_prefix}/bin/grmiregistry +%{_prefix}/bin/gcj-dbtool +%{_mandir}/man1/fastjar.1* +%{_mandir}/man1/grepjar.1* +%{_mandir}/man1/jv-convert.1* +%{_mandir}/man1/gij.1* +%{_mandir}/man1/grmic.1* +%{_mandir}/man1/grmiregistry.1* +%{_mandir}/man1/gcj-dbtool.1* +%{_infodir}/fastjar* +%{_prefix}/%{_lib}/libgcj.so.* +%{_prefix}/%{_lib}/lib-gnu-java-awt-peer-gtk.so.* +%{_prefix}/%{_lib}/libgjsmalsa.so.* +%{_prefix}/%{_lib}/libgij.so.* +%{_prefix}/%{_lib}/libgcjawt.so.* +%dir %{_prefix}/share/java +%{_prefix}/share/java/[^s]* +%dir %{_prefix}/lib/security +%config(noreplace) %{_prefix}/lib/security/classpath.security +%config(noreplace) %{_prefix}/lib/security/libgcj.security +%{_prefix}/lib/logging.properties +%dir %{_prefix}/%{_lib}/gcj-%{version} +%dir %{_prefix}/%{_lib}/gcj-%{version}/classmap.db.d +%attr(0644,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) %{_prefix}/%{_lib}/gcj-%{version}/classmap.db + +%files -n libgcj-devel +%defattr(-,root,root) +%{_prefix}/bin/addr2name.awk +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/gcj +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jawt.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jawt_md.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jni.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jni_md.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jvmpi.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcj.spec +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcj.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib-gnu-java-awt-peer-gtk.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgij.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcjawt.so +%ifarch sparc ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcj.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/lib-gnu-java-awt-peer-gtk.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgij.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcjawt.so +%endif +%ifarch %{multilib_64_archs} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcj.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/lib-gnu-java-awt-peer-gtk.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgij.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcjawt.so +%endif +%dir %{_prefix}/include/c++ +%dir %{_prefix}/include/c++/%{gcc_version} +%{_prefix}/include/c++/%{gcc_version}/[gj]* +%{_prefix}/lib/pkgconfig/libgcj.pc +%doc rpm.doc/boehm-gc/* rpm.doc/fastjar/* rpm.doc/libffi/* +%doc rpm.doc/libjava/* +%endif + +%files -n libgcj-src +%defattr(-,root,root) +%dir %{_prefix}/share/java +%{_prefix}/share/java/src*.zip + +%if %{build_ada} +%files gnat +%defattr(-,root,root) +%{_prefix}/bin/gnat* +%{_prefix}/bin/gpr* +%{_infodir}/gnat* +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/adainclude +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/adalib +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/gnat1 +%doc rpm.doc/changelogs/gcc/ada/ChangeLog* + +%files -n libgnat +%defattr(-,root,root) +%{_prefix}/%{_lib}/libgnat-*.so +%{_prefix}/%{_lib}/libgnarl-*.so +%endif + +%files -n libgomp +%defattr(-,root,root) +%{_prefix}/%{_lib}/libgomp.so.1* +%doc rpm.doc/changelogs/libgomp/ChangeLog* + +%files -n libmudflap +%defattr(-,root,root) +%{_prefix}/%{_lib}/libmudflap.so.0* +%{_prefix}/%{_lib}/libmudflapth.so.0* + +%files -n libmudflap-devel +%defattr(-,root,root) +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mf-runtime.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflap.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflapth.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflap.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflapth.so +%ifarch sparc ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libmudflap.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libmudflapth.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libmudflap.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libmudflapth.so +%endif +%ifarch %{multilib_64_archs} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libmudflap.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libmudflapth.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libmudflap.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libmudflapth.so +%endif +%doc rpm.doc/changelogs/libmudflap/ChangeLog* + +%ifarch sparc +%files sparc32 +%defattr(-,root,root) +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{_target_platform} +%dir %{_prefix}/lib/gcc/%{_target_platform}/%{gcc_version} +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{_target_platform} +%dir %{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version} +%{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version}/cc1 +%{_prefix}/lib/gcc/%{_target_platform}/%{gcc_version}/include + +%files c++-sparc32 +%defattr(-,root,root) +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{_target_platform} +%dir %{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version} +%{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version}/cc1plus +%endif + +%ifarch ppc +%files ppc32 +%defattr(-,root,root) +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{_target_platform} +%dir %{_prefix}/lib/gcc/%{_target_platform}/%{gcc_version} +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{_target_platform} +%dir %{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version} +%{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version}/cc1 +%{_prefix}/lib/gcc/%{_target_platform}/%{gcc_version}/include + +%files c++-ppc32 +%defattr(-,root,root) +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{_target_platform} +%dir %{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version} +%{_prefix}/libexec/gcc/%{_target_platform}/%{gcc_version}/cc1plus +%endif + +%changelog +* Tue Nov 29 2005 Jakub Jelinek 4.1.0-0.3 +- fix IA-64 local-exec TLS handling +- fix IA-64 __sync_fetch_and_{sub,xor,...} + +* Mon Nov 28 2005 Jakub Jelinek 4.1.0-0.2 +- update from gcc-4_1-branch (-r107462:107618) + - PRs fortran/24917, libgcj/25016, libgfortran/24945, middle-end/21309, + middle-end/25022, libfortran/24991 +- update from gomp-20050608-branch (up to -r107619) + - fix omp_get_wti{me,ck} on older kernels +- ppc32 EH fix +- fix #pragma omp atomic +- resurrected multi32 hack for ppc32 and sparc32 + +* Thu Nov 24 2005 Jakub Jelinek 4.1.0-0.1 +- initial 4.1 package, using newly created redhat/gcc-4_1-branch diff --git a/sources b/sources index a1200b5..03cb092 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -b86ed46e2feb3747ac4fa9b45ed74ce9 gcc-4.0.2-20051121.tar.bz2 +51cbbf9003c62e5aecf940acd2264add gcc-4.1.0-20051128.tar.bz2