Sun, 03 Apr 2011 13:34:55 +0200
Correct and improve several packaging aspects including...
Correct datadir path for python modules, correct jar(1) path for
building libgcj classes, strip libexecdir path of version numbers,
improve name of oblbld build path, clean whitespace from as(1) and
ld(1) GNU detection, remove seemingly discarded '--with-local-prefix'
configure argument, and correct hardcoded lto plugin libtool archive
dependency information.
Most importantly, correct IA32 architecture detection logic in
config.gcc to correctly emit SSE2 instructions conditionally, leading
to the removal of all '-march' bootstrap options and replacement with
unconditional (for IA32/AMD64) '-mtune=native' options. Comments and
buildtime warnings are corrected appropriately. In theory these changes
cause a more portable, orthoganal, and optimal bootstrap to be built.
michael@320 | 1 | ## |
michael@320 | 2 | ## gcc.spec -- OpenPKG RPM Package Specification |
michael@320 | 3 | ## Copyright (c) 2000-2010 OpenPKG Foundation e.V. <http://openpkg.net/> |
michael@320 | 4 | ## |
michael@320 | 5 | ## Permission to use, copy, modify, and distribute this software for |
michael@320 | 6 | ## any purpose with or without fee is hereby granted, provided that |
michael@320 | 7 | ## the above copyright notice and this permission notice appear in all |
michael@320 | 8 | ## copies. |
michael@320 | 9 | ## |
michael@320 | 10 | ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED |
michael@320 | 11 | ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
michael@320 | 12 | ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
michael@320 | 13 | ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR |
michael@320 | 14 | ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
michael@320 | 15 | ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
michael@320 | 16 | ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
michael@320 | 17 | ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
michael@320 | 18 | ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
michael@320 | 19 | ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
michael@320 | 20 | ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
michael@320 | 21 | ## SUCH DAMAGE. |
michael@320 | 22 | ## |
michael@320 | 23 | |
michael@320 | 24 | # package version |
michael@332 | 25 | %define V_full 4.6.0 |
michael@320 | 26 | %define V_comp %nil |
michael@320 | 27 | |
michael@320 | 28 | # package information |
michael@320 | 29 | Name: gcc |
michael@320 | 30 | Summary: GNU Compiler Collection |
michael@320 | 31 | URL: http://gcc.gnu.org/ |
michael@320 | 32 | Vendor: Free Software Foundation |
michael@320 | 33 | Packager: OpenPKG Foundation e.V. |
michael@320 | 34 | Distribution: OpenPKG Community |
michael@320 | 35 | Class: CORE |
michael@320 | 36 | Group: Compiler |
michael@320 | 37 | License: GPL |
michael@320 | 38 | Version: %{V_full} |
michael@337 | 39 | Release: 20110331 |
michael@320 | 40 | |
michael@320 | 41 | # package options |
michael@320 | 42 | %option with_binutils yes |
michael@320 | 43 | %option with_cxx yes |
michael@320 | 44 | %option with_objc no |
michael@320 | 45 | %option with_java no |
michael@320 | 46 | %option with_fortran no |
michael@320 | 47 | %option with_optimize yes |
michael@320 | 48 | %option with_profile no |
michael@320 | 49 | %option with_threads yes |
michael@320 | 50 | %option with_multilib no |
michael@320 | 51 | |
michael@335 | 52 | # fix intermodule dependencies implicitly |
michael@335 | 53 | %if "%{with_java}" == "yes" |
michael@335 | 54 | %define with_cxx yes |
michael@335 | 55 | %define with_threads yes |
michael@335 | 56 | %endif |
michael@335 | 57 | |
michael@320 | 58 | # list of sources |
michael@320 | 59 | Source0: ftp://gcc.gnu.org/pub/gcc/releases/gcc-%{V_full}/gcc-core-%{V_full}.tar.bz2 |
michael@320 | 60 | Source1: ftp://gcc.gnu.org/pub/gcc/releases/gcc-%{V_full}/gcc-g++-%{V_full}.tar.bz2 |
michael@320 | 61 | Source2: ftp://gcc.gnu.org/pub/gcc/releases/gcc-%{V_full}/gcc-objc-%{V_full}.tar.bz2 |
michael@320 | 62 | Source3: ftp://gcc.gnu.org/pub/gcc/releases/gcc-%{V_full}/gcc-java-%{V_full}.tar.bz2 |
michael@320 | 63 | Source4: ftp://gcc.gnu.org/pub/gcc/releases/gcc-%{V_full}/gcc-fortran-%{V_full}.tar.bz2 |
michael@320 | 64 | Patch0: gcc.patch |
michael@320 | 65 | |
michael@320 | 66 | # build information |
michael@321 | 67 | Prefix: %{l_prefix} |
michael@321 | 68 | BuildRoot: %{l_buildroot} |
michael@332 | 69 | BuildPreReq: OpenPKG, openpkg >= 20060823, make |
michael@322 | 70 | PreReq: OpenPKG, openpkg >= 20060823 |
michael@332 | 71 | BuildPreReq: mpc, mpfr, gmp |
michael@332 | 72 | PreReq: mpc, mpfr, gmp |
michael@320 | 73 | %if "%{with_binutils}" == "yes" |
michael@320 | 74 | BuildPreReq: binutils >= 2.14 |
michael@320 | 75 | PreReq: binutils >= 2.14 |
michael@320 | 76 | %endif |
michael@320 | 77 | %if "%{with_cxx}" == "yes" |
michael@320 | 78 | BuildPreReq: libiconv |
michael@320 | 79 | PreReq: libiconv |
michael@320 | 80 | %endif |
michael@320 | 81 | %if "%{with_java}" == "yes" |
michael@335 | 82 | BuildPreReq: zlib, infozip |
michael@320 | 83 | PreReq: zlib |
michael@320 | 84 | %endif |
michael@321 | 85 | AutoReq: no |
michael@321 | 86 | AutoReqProv: no |
michael@320 | 87 | |
michael@320 | 88 | %description |
michael@320 | 89 | The GNU Compiler Collection (GCC) provides standard conforming and |
michael@320 | 90 | highly portable compilers for the ISO C, ISO C++, Objective-C, |
michael@320 | 91 | Fortran and Java languages. |
michael@320 | 92 | |
michael@320 | 93 | %track |
michael@320 | 94 | prog gcc = { |
michael@320 | 95 | version = %{V_full} |
michael@320 | 96 | url = ftp://gcc.gnu.org/pub/gcc/releases/ |
michael@320 | 97 | regex = gcc-(4\.\d+\.\d+) |
michael@320 | 98 | url = ftp://gcc.gnu.org/pub/gcc/releases/gcc-__NEWVER__/ |
michael@320 | 99 | regex = gcc-core-(\d+\.\d+\.\d+)\.tar\.bz2 |
michael@320 | 100 | } |
michael@320 | 101 | |
michael@320 | 102 | %prep |
michael@320 | 103 | %setup -q |
michael@320 | 104 | %if "%{with_cxx}" == "yes" |
michael@320 | 105 | %setup -q -T -D -b 1 |
michael@320 | 106 | %endif |
michael@320 | 107 | %if "%{with_objc}" == "yes" |
michael@320 | 108 | %setup -q -T -D -b 2 |
michael@320 | 109 | %endif |
michael@320 | 110 | %if "%{with_java}" == "yes" |
michael@320 | 111 | %setup -q -T -D -b 3 |
michael@320 | 112 | %endif |
michael@320 | 113 | %if "%{with_fortran}" == "yes" |
michael@320 | 114 | %setup -q -T -D -b 4 |
michael@320 | 115 | %endif |
michael@320 | 116 | %patch -p0 |
michael@332 | 117 | %{l_shtool} subst \ |
michael@332 | 118 | -e 's;\(instname="\$dir/\$name"\)i;\1;' \ |
michael@332 | 119 | ltmain.sh |
michael@320 | 120 | %{l_shtool} subst -v -s \ |
michael@328 | 121 | -e 's;\(gmplibs="-lmpc\) \(-lmpfr -lgmp\);\1 -lm \2;' \ |
michael@328 | 122 | configure |
michael@328 | 123 | %{l_shtool} subst -v -s \ |
michael@335 | 124 | -e 's;\(LDEXP_LIB=\)"$LIBS";\1"$LDFLAGS";' \ |
michael@320 | 125 | -e 's;PREFIX_INCLUDE_DIR;PREFIX_INCLUDE_DIR_DISABLED;g' \ |
michael@320 | 126 | gcc/configure |
michael@332 | 127 | %{l_shtool} subst \ |
michael@332 | 128 | -e 's;[ \t]*-W[a-zA-Z0-9_\-][a-zA-Z0-9_\-]*,*;;g' \ |
michael@332 | 129 | lto-plugin/Makefile.in |
michael@332 | 130 | %{l_shtool} subst \ |
michael@332 | 131 | -e 's;-rpath *[^ \t][^ \t]*;;g' \ |
michael@332 | 132 | -e 's;--tag=disable-static;--tag=disable-shared;g' \ |
michael@332 | 133 | -e 's;\.\./libiberty/libiberty\.a;-L../libiberty -liberty;g' \ |
michael@332 | 134 | -e 's;\.\./libiberty/pic/libiberty\.a;-L../libiberty/pic -liberty;g' \ |
michael@332 | 135 | lto-plugin/Makefile.in |
michael@337 | 136 | %if "%{with_cxx}" == "yes" |
michael@337 | 137 | %{l_shtool} subst \ |
michael@337 | 138 | -e 's;\(pythondir *= *\$(datadir)\)/gcc-\$(gcc_version);\1/gcc;' \ |
michael@337 | 139 | libstdc++-v3/python/Makefile.in |
michael@337 | 140 | %endif |
michael@337 | 141 | %if "%{with_java}" == "yes" |
michael@337 | 142 | %{l_shtool} subst \ |
michael@337 | 143 | -e 's;\(default_python_dir\) *=.*;\1=/share/gcc/python/libjava;' \ |
michael@337 | 144 | libjava/configure |
michael@337 | 145 | %{l_shtool} subst \ |
michael@337 | 146 | -e 's;JAR *= *@JAR@;JAR = $(here)/scripts/jar;' \ |
michael@337 | 147 | libjava/Makefile.in |
michael@337 | 148 | %endif |
michael@320 | 149 | if [ ".%{V_comp}" != . ]; then |
michael@320 | 150 | %{l_shtool} subst -v -s \ |
michael@320 | 151 | -e 's;(libdir)/gcc/;(libdir)/gcc%{V_comp}/;' \ |
michael@337 | 152 | -e 's;(libexecdir)/gcc/;(libexecdir)/gcc%{V_comp}/;' \ |
michael@320 | 153 | `find . -name Makefile.in -type f -print` |
michael@320 | 154 | fi |
michael@334 | 155 | %{l_shtool} subst \ |
michael@334 | 156 | -e 's;^\(do-compare\) *\(=.*\);#\1-shouldnt-be-defined-here \2;' \ |
michael@334 | 157 | config/*.mk |
michael@320 | 158 | case "%{l_platform -t}" in |
michael@334 | 159 | amd64-linux* ) |
michael@320 | 160 | %{l_shtool} subst \ |
michael@320 | 161 | -e 's/GLIBCXX_IS_NATIVE=false/GLIBCXX_IS_NATIVE=true/g' \ |
michael@320 | 162 | -e 's/test x.gcc_no_link = xyes/false/g' \ |
michael@320 | 163 | libstdc++-v3/configure |
michael@320 | 164 | ;; |
michael@320 | 165 | esac |
michael@320 | 166 | %{l_shtool} subst \ |
michael@320 | 167 | -e 's;<iconv\.h>;"%{l_prefix}/include/iconv.h";' \ |
michael@320 | 168 | libstdc++-v3/include/ext/codecvt_specializations.h |
michael@337 | 169 | %{l_shtool} subst \ |
michael@337 | 170 | -e 's;.*with_arch_32=\${with_arch_32:-pentium4}.*;;' \ |
michael@337 | 171 | -e 's;with_arch_32=\${with_arch_32:-pentiumpro};arch_without_sse2=yes;' \ |
michael@337 | 172 | gcc/config.gcc |
michael@320 | 173 | |
michael@320 | 174 | %build |
michael@334 | 175 | # create build subdirectory |
michael@337 | 176 | %{l_shtool} mkdir -p objbld |
michael@337 | 177 | cd objbld |
michael@320 | 178 | |
michael@334 | 179 | # locate ld(1) and as(1) accordingly |
michael@328 | 180 | %if "%{with_binutils}" == "yes" |
michael@334 | 181 | # allow OpenPKG binutils |
michael@328 | 182 | LD=%{l_tool_locate ld ld} |
michael@328 | 183 | AS=%{l_tool_locate as as} |
michael@322 | 184 | %else |
michael@334 | 185 | # ignore OpenPKG binutils |
michael@334 | 186 | LD=`PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/ccs/bin:/opt/bin:/opt/sbin:/usr/local/bin:/usr/local/sbin which ld` |
michael@334 | 187 | AS=`PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/ccs/bin:/opt/bin:/opt/sbin:/usr/local/bin:/usr/local/sbin which as` |
michael@322 | 188 | %endif |
michael@320 | 189 | l_with_gnu_ld_as="" |
michael@322 | 190 | echo $LD | grep '^/' >/dev/null && l_with_gnu_ld_as="--with-ld=$LD" |
michael@320 | 191 | echo $AS | grep '^/' >/dev/null && l_with_gnu_ld_as="${l_with_gnu_ld_as} --with-as=$AS" |
michael@337 | 192 | $LD --version </dev/null 2>/dev/null | grep "^GNU ld" >/dev/null && l_with_gnu_ld_as="${l_with_gnu_ld_as} --with-gnu-ld" || l_with_gnu_ld_as="${l_with_gnu_ld_as} --without-gnu-ld" |
michael@337 | 193 | $AS --version </dev/null 2>/dev/null | grep "^GNU assembler" >/dev/null && l_with_gnu_ld_as="${l_with_gnu_ld_as} --with-gnu-as" || l_with_gnu_ld_as="${l_with_gnu_ld_as} --without-gnu-as" |
michael@320 | 194 | |
michael@334 | 195 | # determine threads use |
michael@320 | 196 | %if "%{with_threads}" == "yes" |
michael@320 | 197 | l_enable_threads="posix" |
michael@320 | 198 | %else |
michael@320 | 199 | l_enable_threads="single" |
michael@320 | 200 | %endif |
michael@320 | 201 | |
michael@334 | 202 | # determine language use |
michael@320 | 203 | l_enable_languages="c" |
michael@320 | 204 | %if "%{with_cxx}" == "yes" |
michael@320 | 205 | l_enable_languages="${l_enable_languages},c++" |
michael@320 | 206 | %endif |
michael@320 | 207 | %if "%{with_objc}" == "yes" |
michael@320 | 208 | l_enable_languages="${l_enable_languages},objc" |
michael@320 | 209 | %endif |
michael@320 | 210 | %if "%{with_java}" == "yes" |
michael@320 | 211 | l_enable_languages="${l_enable_languages},java" |
michael@320 | 212 | %endif |
michael@320 | 213 | %if "%{with_fortran}" == "yes" |
michael@320 | 214 | l_enable_languages="${l_enable_languages},f95" |
michael@320 | 215 | %endif |
michael@320 | 216 | |
michael@334 | 217 | # disable GNU iconv use |
michael@320 | 218 | ( echo "am_cv_func_iconv=no" |
michael@320 | 219 | echo "am_cv_lib_iconv=no" |
michael@320 | 220 | ) >config.cache |
michael@334 | 221 | # platforms failing 'compare' make target (see prep as well) |
michael@332 | 222 | case "%{l_platform -t}" in |
michael@334 | 223 | *i?86-sunos* ) echo "gcc_cv_prog_cmp_skip=true" >>config.cache ;; |
michael@334 | 224 | *amd64-linux* ) echo "gcc_cv_prog_cmp_skip=true" >>config.cache ;; |
michael@332 | 225 | esac |
michael@332 | 226 | |
michael@320 | 227 | # configure the package |
michael@322 | 228 | LD="$LD" \ |
michael@322 | 229 | AS="$AS" \ |
michael@320 | 230 | CC="%{l_cc}" \ |
michael@320 | 231 | CFLAGS="%{l_cflags}" \ |
michael@335 | 232 | %if "%{with_cxx}" == "yes" |
michael@320 | 233 | CPPFLAGS="%{l_cppflags}" \ |
michael@320 | 234 | LDFLAGS="%{l_ldflags}" \ |
michael@320 | 235 | %endif |
michael@320 | 236 | CONFIG_SHELL="%{l_bash}" \ |
michael@332 | 237 | GREP="%{l_bash}" \ |
michael@320 | 238 | ../configure \ |
michael@320 | 239 | --with-bugurl="http://openpkg.org/" \ |
michael@320 | 240 | --with-pkgversion="%{l_openpkg_release -F "OpenPKG-%%t"}" \ |
michael@320 | 241 | --cache-file=./config.cache \ |
michael@320 | 242 | --srcdir=`pwd`/.. \ |
michael@320 | 243 | --prefix=%{l_prefix} \ |
michael@320 | 244 | --exec-prefix=%{l_prefix} \ |
michael@320 | 245 | --mandir=%{l_prefix}/man \ |
michael@320 | 246 | --infodir=%{l_prefix}/info \ |
michael@320 | 247 | --includedir=%{l_prefix}/include/gcc%{V_comp} \ |
michael@320 | 248 | --with-gxx-include-dir=%{l_prefix}/include/g++%{V_comp} \ |
michael@320 | 249 | --enable-languages="${l_enable_languages}" \ |
michael@320 | 250 | --enable-threads="${l_enable_threads}" \ |
michael@320 | 251 | --disable-maintainer-mode \ |
michael@320 | 252 | --disable-shared \ |
michael@320 | 253 | --disable-nls \ |
michael@320 | 254 | %if "%{with_java}" == "yes" |
michael@320 | 255 | --with-system-zlib \ |
michael@320 | 256 | %endif |
michael@320 | 257 | %if "%{with_multilib}" == "yes" |
michael@320 | 258 | --enable-multilib \ |
michael@320 | 259 | %else |
michael@320 | 260 | --disable-multilib \ |
michael@320 | 261 | %endif |
michael@320 | 262 | %if "%{with_cxx}" == "yes" |
michael@320 | 263 | --with-libiconv-prefix=%{l_prefix} \ |
michael@320 | 264 | %endif |
michael@320 | 265 | --with-gmp=%{l_prefix} \ |
michael@320 | 266 | --with-mpfr=%{l_prefix} \ |
michael@320 | 267 | --with-mpc=%{l_prefix} \ |
michael@320 | 268 | ${l_with_gnu_ld_as} |
michael@320 | 269 | |
michael@320 | 270 | # determine build flags |
michael@320 | 271 | l_ccisgcc=no |
michael@320 | 272 | if [ ".`(%{l_cc} -v; %{l_cc} --version) </dev/null 2>&1 | grep -i 'gcc'`" != . ]; then |
michael@320 | 273 | l_ccisgcc=yes |
michael@320 | 274 | fi |
michael@320 | 275 | l_cflags="" |
michael@320 | 276 | l_cxxflags="" |
michael@320 | 277 | l_boot_cflags="" |
michael@320 | 278 | l_libcflags="-g" |
michael@320 | 279 | l_libcxxflags="-g" |
michael@320 | 280 | # at least GNU as from GNU binutils supports -pipe always |
michael@332 | 281 | "$AS" --version </dev/null 2>/dev/null | grep "^GNU assembler" >/dev/null && { |
michael@320 | 282 | l_boot_cflags="$l_boot_cflags -pipe" |
michael@320 | 283 | l_libcxxflags="$l_libcxxflags -pipe" |
michael@320 | 284 | } |
michael@320 | 285 | %if "%{with_optimize}" == "yes" |
michael@334 | 286 | # GCC authors are not keeping up with optimized portability expectations |
michael@334 | 287 | ( echo "As GCC advances its optimization logic becomes increasingly complex (and" |
michael@334 | 288 | echo "buggy?) Since at least GCC 4.5, problems have been reported using arguments" |
michael@334 | 289 | echo "-O, -mtune, or -march implicitly or explicitly during different bootstrap" |
michael@334 | 290 | echo "stages as well as stage comparison and even the final installation." |
michael@334 | 291 | echo "" |
michael@334 | 292 | echo "Pay attention when building on one computer and installing on another as" |
michael@334 | 293 | echo "problems may be platform specific. If in doubt, disable optimization." |
michael@334 | 294 | ) | %{l_rpmtool} msg -b -t warn |
michael@337 | 295 | if [ ".$l_ccisgcc" != .yes ]; then |
michael@334 | 296 | # CPU native detection only works with GCC (see driver-i386.c) |
michael@334 | 297 | ( echo "Platform specific optimization is enabled, but detection of appropriate" |
michael@334 | 298 | echo "native architecture is only possible when bootstrapping GCC using a pre-" |
michael@337 | 299 | echo "installed GCC. The current build is using a different compiler, so such" |
michael@337 | 300 | echo "optimization is generically built while deferring native architecture" |
michael@337 | 301 | echo "detection to the final GCC binary." |
michael@334 | 302 | echo "" |
michael@337 | 303 | echo "To achieve native architecture detection while bootstrapping please" |
michael@337 | 304 | echo "install GCC first and then build GCC a second time." |
michael@334 | 305 | ) | %{l_rpmtool} msg -b -t notice |
michael@332 | 306 | fi |
michael@337 | 307 | # tuning without specifying '-march' is portable and in theory |
michael@337 | 308 | # allows the resulting GCC binaries to execute on other hosts! |
michael@332 | 309 | case "%{l_platform -t}" in |
michael@337 | 310 | *sun4[uv]-* ) l_boot_cflags="$l_boot_cflags -mtune=v9" ;; |
michael@337 | 311 | *sun*-* ) l_boot_cflags="$l_boot_cflags -mtune=v8" ;; |
michael@337 | 312 | *i?86-* | *amd64-* | *ia64-* ) l_boot_cflags="$l_boot_cflags -mtune=native" ;; |
michael@337 | 313 | * ) l_boot_cflags="$l_boot_cflags -mtune=generic" ;; |
michael@332 | 314 | esac |
michael@332 | 315 | l_cflags="$l_cflags -O" |
michael@332 | 316 | l_boot_cflags="$l_boot_cflags -O3 -fomit-frame-pointer" |
michael@332 | 317 | l_libcxxflags="$l_libcxxflags -O3 -fno-implicit-templates" |
michael@332 | 318 | %else |
michael@334 | 319 | # don't optimize at all to avoid problems |
michael@320 | 320 | l_boot_cflags="$l_boot_cflags -O0" |
michael@320 | 321 | l_libcxxflags="$l_libcxxflags -O0" |
michael@320 | 322 | %endif |
michael@334 | 323 | %if "%{with_profile}" == "yes" |
michael@335 | 324 | # generate profile feedback |
michael@334 | 325 | maketarget="profiledbootstrap" |
michael@334 | 326 | loc_makeflags="%{l_mflags}" |
michael@335 | 327 | |
michael@335 | 328 | # warn about exceptional build duration for profile feedback |
michael@335 | 329 | ( echo "Building profile feedback on some hosts can take many days to complete!" |
michael@335 | 330 | echo "Now continuing to build a profiled bootstrap with parallel make logic" |
michael@335 | 331 | echo "disabled according to profiling requirements..." |
michael@335 | 332 | ) | %{l_rpmtool} msg -b -t warn |
michael@335 | 333 | |
michael@335 | 334 | # warn about profiled bootstrap requirement of 64-bit arithmetic |
michael@334 | 335 | if [ ".$l_ccisgcc" != .yes ]; then |
michael@335 | 336 | ( echo "A preinstalled GCC was not detected although one is recommended for" |
michael@335 | 337 | echo "building a profiled bootstrap. Buildtime or runtime errors can occur if" |
michael@335 | 338 | echo "the compiler used to build profile feedback doesn't support 64-bit math." |
michael@334 | 339 | echo "" |
michael@334 | 340 | echo "If in doubt, stop now and start the build again with profiling disabled." |
michael@334 | 341 | ) | %{l_rpmtool} msg -b -t warn |
michael@334 | 342 | fi |
michael@334 | 343 | %else |
michael@335 | 344 | # build in three stages |
michael@332 | 345 | maketarget="bootstrap" |
michael@334 | 346 | loc_makeflags="%{l_mflags -O}" |
michael@320 | 347 | %endif |
michael@320 | 348 | case "%{l_platform -t}" in |
michael@332 | 349 | *64-* ) l_cflags="$l_cflags -fPIC"; l_cxxflags="$l_cxxflags -fPIC" ;; |
michael@320 | 350 | esac |
michael@335 | 351 | %if "%{with_cxx}" == "yes" |
michael@320 | 352 | l_cflags="$l_cflags %{l_cppflags}" |
michael@320 | 353 | l_cxxflags="$l_cxxflags %{l_cppflags}" |
michael@320 | 354 | l_libcflags="$l_libcflags %{l_cppflags}" |
michael@320 | 355 | l_libcxxflags="$l_libcxxflags %{l_cppflags}" |
michael@320 | 356 | %endif |
michael@320 | 357 | |
michael@320 | 358 | # build the package |
michael@334 | 359 | MAKE="%{l_make} ${loc_makeflags}" \ |
michael@334 | 360 | %{l_make} ${loc_makeflags} \ |
michael@332 | 361 | GREP="grep" \ |
michael@334 | 362 | MAKE="%{l_make} ${loc_makeflags}" \ |
michael@320 | 363 | BOOT_CFLAGS="${l_boot_cflags}" \ |
michael@320 | 364 | CFLAGS="${l_cflags}" \ |
michael@320 | 365 | CXXFLAGS="${l_cxxflags}" \ |
michael@335 | 366 | %if "%{with_cxx}" == "yes" |
michael@335 | 367 | CPPFLAGS="%{l_cppflags}" \ |
michael@335 | 368 | LDFLAGS="%{l_ldflags}" \ |
michael@335 | 369 | BOOT_LDFLAGS="%{l_ldflags}" \ |
michael@335 | 370 | %endif |
michael@320 | 371 | LIBCFLAGS="${l_libcflags}" \ |
michael@320 | 372 | LIBCXXFLAGS="${l_libcxxflags}" \ |
michael@320 | 373 | $maketarget |
michael@320 | 374 | |
michael@320 | 375 | %install |
michael@321 | 376 | rm -rf $RPM_BUILD_ROOT |
michael@320 | 377 | |
michael@320 | 378 | # fetch GNU platform triple |
michael@320 | 379 | triple=`./config.guess` |
michael@320 | 380 | |
michael@337 | 381 | # perform standard installation procedure |
michael@337 | 382 | ( cd objbld |
michael@320 | 383 | %{l_make} %{l_mflags} install DESTDIR=$RPM_BUILD_ROOT |
michael@320 | 384 | ) || exit $? |
michael@320 | 385 | |
michael@320 | 386 | # cleanup installation tree |
michael@320 | 387 | mv $RPM_BUILD_ROOT%{l_prefix}/lib/{lib*.a,*.spec} \ |
michael@320 | 388 | $RPM_BUILD_ROOT%{l_prefix}/lib/gcc%{V_comp}/${triple}/[0-9]*/ \ |
michael@320 | 389 | >/dev/null 2>&1 || true |
michael@320 | 390 | mv $RPM_BUILD_ROOT%{l_prefix}/lib64/{lib*.a,*.spec} \ |
michael@320 | 391 | $RPM_BUILD_ROOT%{l_prefix}/lib/gcc%{V_comp}/${triple}/[0-9]*/ \ |
michael@320 | 392 | >/dev/null 2>&1 || true |
michael@320 | 393 | dirs="" |
michael@320 | 394 | for multilib in `$RPM_BUILD_ROOT%{l_prefix}/bin/gcc --print-multi-lib`; do |
michael@320 | 395 | subdir=`echo "$multilib" | sed -e 's/;.*$//'` |
michael@320 | 396 | [ ".$subdir" = .. ] && continue |
michael@320 | 397 | mv $RPM_BUILD_ROOT%{l_prefix}/lib/$subdir/lib*.a \ |
michael@320 | 398 | $RPM_BUILD_ROOT%{l_prefix}/lib/gcc%{V_comp}/${triple}/[0-9]*/$subdir/ \ |
michael@320 | 399 | >/dev/null 2>&1 || true |
michael@320 | 400 | mv $RPM_BUILD_ROOT%{l_prefix}/lib64/$subdir/lib*.a \ |
michael@320 | 401 | $RPM_BUILD_ROOT%{l_prefix}/lib/gcc%{V_comp}/${triple}/[0-9]*/$subdir/ \ |
michael@320 | 402 | >/dev/null 2>&1 || true |
michael@320 | 403 | dirs="$dirs $subdir" |
michael@320 | 404 | done |
michael@320 | 405 | for subdir in $dirs; do |
michael@320 | 406 | rm -rf $RPM_BUILD_ROOT%{l_prefix}/lib/$subdir >/dev/null 2>&1 || true |
michael@320 | 407 | done |
michael@320 | 408 | mv $RPM_BUILD_ROOT%{l_prefix}/${triple}/include/* \ |
michael@320 | 409 | $RPM_BUILD_ROOT%{l_prefix}/lib/gcc%{V_comp}/${triple}/[0-9]*/include/ \ |
michael@320 | 410 | >/dev/null 2>&1 || true |
michael@320 | 411 | |
michael@332 | 412 | # correct hardcoded paths |
michael@332 | 413 | %{l_shtool} subst \ |
michael@337 | 414 | -e "s;\(dependency_libs\) *=.*;\1='-L%{l_prefix}/lib\ -L%{l_prefix}/lib/gcc%{V_comp}/${triple}/%{V_full}\ -liberty';" \ |
michael@337 | 415 | $RPM_BUILD_ROOT%{l_prefix}/libexec/gcc%{V_comp}/${triple}/[0-9]*/liblto_plugin.la |
michael@332 | 416 | |
michael@320 | 417 | # strip installation tree |
michael@320 | 418 | rm -rf $RPM_BUILD_ROOT%{l_prefix}/${triple} |
michael@320 | 419 | rm -f $RPM_BUILD_ROOT%{l_prefix}/info/dir |
michael@320 | 420 | rm -rf $RPM_BUILD_ROOT%{l_prefix}/man/man7 >/dev/null 2>&1 || true |
michael@320 | 421 | rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/*.la >/dev/null 2>&1 || true |
michael@320 | 422 | rm -rf $RPM_BUILD_ROOT%{l_prefix}/lib64 >/dev/null 2>&1 || true |
michael@320 | 423 | rm -f $RPM_BUILD_ROOT%{l_prefix}/bin/*-gcc* >/dev/null 2>&1 || true |
michael@320 | 424 | %if "%{with_cxx}" == "yes" |
michael@320 | 425 | rm -f $RPM_BUILD_ROOT%{l_prefix}/bin/*-c++ >/dev/null 2>&1 || true |
michael@320 | 426 | rm -f $RPM_BUILD_ROOT%{l_prefix}/bin/*-g++ >/dev/null 2>&1 || true |
michael@320 | 427 | %endif |
michael@320 | 428 | strip $RPM_BUILD_ROOT%{l_prefix}/bin/* >/dev/null 2>&1 || true |
michael@320 | 429 | for prog in cc1 cc1plus collect2 cpp; do |
michael@320 | 430 | strip $RPM_BUILD_ROOT%{l_prefix}/lib/gcc%{V_comp}/${triple}/[0-9]*/${prog} \ |
michael@320 | 431 | >/dev/null 2>&1 || true |
michael@320 | 432 | done |
michael@320 | 433 | |
michael@320 | 434 | # bump up installation tree |
michael@320 | 435 | ln $RPM_BUILD_ROOT%{l_prefix}/bin/gcc \ |
michael@320 | 436 | $RPM_BUILD_ROOT%{l_prefix}/bin/cc |
michael@320 | 437 | ln $RPM_BUILD_ROOT%{l_prefix}/man/man1/gcc.1 \ |
michael@320 | 438 | $RPM_BUILD_ROOT%{l_prefix}/man/man1/cc.1 |
michael@320 | 439 | %if "%{with_cxx}" == "yes" |
michael@320 | 440 | ln $RPM_BUILD_ROOT%{l_prefix}/man/man1/g++.1 \ |
michael@320 | 441 | $RPM_BUILD_ROOT%{l_prefix}/man/man1/c++.1 |
michael@320 | 442 | %endif |
michael@320 | 443 | |
michael@320 | 444 | # determine installation file list |
michael@320 | 445 | %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT %{l_files_std} |
michael@320 | 446 | |
michael@320 | 447 | %files -f files |
michael@320 | 448 | |
michael@320 | 449 | %clean |
michael@321 | 450 | rm -rf $RPM_BUILD_ROOT |
michael@320 | 451 |