source: npl/system/gcc/gcc.SlackBuild.orig @ 548499b

perl-5.22
Last change on this file since 548499b was 1a19ecd, checked in by Edwin Eefting <edwin@datux.nl>, 8 years ago

upgrade glibc/gcc to gcc 5.4.0 and glibc 2.24

  • Property mode set to 100755
File size: 28.5 KB
Line 
1#!/bin/sh
2# GCC package build script (written by volkerdi@slackware.com)
3#
4# Copyright 2003, 2004  Slackware Linux, Inc., Concord, California, USA
5# Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016  Patrick J. Volkerding, Sebeka, MN, USA
6# All rights reserved.
7#
8# Redistribution and use of this script, with or without modification, is
9# permitted provided that the following conditions are met:
10#
11# 1. Redistributions of this script must retain the above copyright
12#    notice, this list of conditions and the following disclaimer.
13#
14#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
15#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
16#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
17#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
18#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
22#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
23#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24#
25
26# Modified 2011 by Eric Hameleers <alien at slackware.com> for OpenJDK.
27
28# Some notes, Fri May 16 12:31:32 PDT 2003:
29#
30# Why i486 and not i386?  Because the shared C++ libraries in gcc-3.2.x will
31# require 486 opcodes even when a 386 target is used (so we already weren't
32# compatible with the i386 for Slackware 9.0, didn't notice, and nobody
33# complained :-).  gcc-3.3 fixes this issue and allows you to build a 386
34# compiler, but the fix is done in a way that produces binaries that are not
35# compatible with gcc-3.2.x compiled binaries.  To retain compatibility with
36# Slackware 9.0, we'll have to use i486 (or better) as the compiler target
37# for gcc-3.3.
38#
39# It's time to say goodbye to i386 support in Slackware.  I've surveyed 386
40# usage online, and the most common thing I see people say when someone asks
41# about running Linux on a 386 is to "run Slackware", but then they also
42# usually go on to say "be sure to get an OLD version, like 4.0, before glibc,
43# because it'll be more efficient."  Now, if that's the general advice, then
44# I see no reason to continue 386 support in the latest Slackware (and indeed
45# it's no longer easily possible).
46
47# Some more notes, Mon Aug  3 19:49:51 UTC 2015:
48#
49# Changing to -march=i586 for 32-bit x86 as several things (Mesa being one of
50# them) no longer work if constrained to -march=i486.  We're not going to use
51# -march=i686 since the only additional opcode is CMOV, which is actually less
52# efficient on modern CPUs running in 32-bit mode than the alternate i586
53# instructions.  No need to throw i586 CPUs under the bus (yet).
54
55PKGNAM=gcc
56VERSION=${VERSION:-$(echo $PKGNAM-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
57BUILD=${BUILD:-1}
58
59# How many jobs to run in parallel:
60NUMJOBS=" -j 7 "
61
62# Automatically determine the architecture we're building on:
63if [ -z "$ARCH" ]; then
64  case "$(uname -m)" in
65    i?86) ARCH=i586 ;;
66    arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
67    # Unless $ARCH is already set, use uname -m for all other archs:
68    *) ARCH=$(uname -m) ;;
69  esac
70  export ARCH
71fi
72
73if [ "$ARCH" = "i386" ]; then
74  SLKCFLAGS="-O2 -march=i386 -mcpu=i686"
75  LIBDIRSUFFIX=""
76  LIB_ARCH=i386
77elif [ "$ARCH" = "i486" ]; then
78  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
79  LIBDIRSUFFIX=""
80  LIB_ARCH=i386
81elif [ "$ARCH" = "i586" ]; then
82  SLKCFLAGS="-O2 -march=i586 -mtune=i686"
83  LIBDIRSUFFIX=""
84  LIB_ARCH=i386
85elif [ "$ARCH" = "i686" ]; then
86  SLKCFLAGS="-O2 -march=i686"
87  LIBDIRSUFFIX=""
88  LIB_ARCH=i386
89elif [ "$ARCH" = "s390" ]; then
90  SLKCFLAGS="-O2"
91  LIBDIRSUFFIX=""
92  LIB_ARCH=s390
93elif [ "$ARCH" = "x86_64" ]; then
94  SLKCFLAGS="-O2 -fPIC"
95  LIBDIRSUFFIX="64"
96  LIB_ARCH=amd64
97elif [ "$ARCH" = "armv7hl" ]; then
98  SLKCFLAGS="-O3 -march=armv7-a -mfpu=vfpv3-d16"
99  LIBDIRSUFFIX=""
100  LIB_ARCH=armv7hl
101else
102  SLKCFLAGS="-O2"
103  LIBDIRSUFFIX=""
104  LIB_ARCH=$ARCH
105fi
106
107case "$ARCH" in
108    arm*) TARGET=$ARCH-slackware-linux-gnueabi ;;
109    *)    TARGET=$ARCH-slackware-linux ;;
110esac
111
112CWD=$(pwd)
113# Temporary build location.  This should *NOT* be a directory
114# path a non-root user could create later...
115TMP=${TMP:-"/gcc-$(mcookie)"}
116
117# This is the main DESTDIR target:
118PKG1=$TMP/package-gcc
119# These are the directories to build other packages in:
120PKG2=$TMP/package-gcc-g++
121PKG3=$TMP/package-gcc-gfortran
122PKG4=$TMP/package-gcc-gnat
123PKG5=$TMP/package-gcc-java
124PKG6=$TMP/package-gcc-objc
125PKG7=$TMP/package-gcc-g++-gch
126PKG8=$TMP/package-gcc-go
127
128# Clear the build locations:
129if [ -d $TMP ]; then
130  rm -rf $TMP
131fi
132mkdir -p $PKG{1,2,3,4,5,6,7,8}/usr/doc/gcc-$VERSION
133
134# Insert package descriptions:
135mkdir -p $PKG{1,2,3,4,5,6,7,8}/install
136cat $CWD/slack-desc.gcc > $PKG1/install/slack-desc
137cat $CWD/slack-desc.gcc-g++ > $PKG2/install/slack-desc
138cat $CWD/slack-desc.gcc-gfortran > $PKG3/install/slack-desc
139cat $CWD/slack-desc.gcc-gnat > $PKG4/install/slack-desc
140cat $CWD/slack-desc.gcc-java > $PKG5/install/slack-desc
141cat $CWD/slack-desc.gcc-objc > $PKG6/install/slack-desc
142# cat $CWD/slack-desc.gcc-g++-gch > $PKG7/install/slack-desc
143cat $CWD/slack-desc.gcc-go > $PKG8/install/slack-desc
144
145cd $TMP
146tar xvf $CWD/gcc-$VERSION.tar.?z*
147
148( cd gcc-$VERSION/gcc
149  zcat $CWD/gcc.66782.diff.gz | patch -p0 --verbose || exit 1
150) || exit 1
151
152# Copy ecj.jar into the TLD of the source. Needed for java compiler.
153# This can be retrieved from ftp://sourceware.org/pub/java
154cp $CWD/ecj-4.9.jar gcc-$VERSION/ecj.jar
155
156# Use an antlr runtime to compile javadoc.
157# The runtime can be obtained from:
158#https://oss.sonatype.org/content/repositories/releases/org/antlr/antlr-runtime/
159ANTLJAR=$(echo $CWD/antlr-*.jar | tail -1)
160
161# install docs
162( cd gcc-$VERSION
163  # Smite the fixincludes:
164  zcat $CWD/gcc-no_fixincludes.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit 1
165  # Fix perms/owners
166  chown -R root:root .
167  find . -perm 777 -exec chmod 755 {} \;
168  find . -perm 775 -exec chmod 755 {} \;
169  find . -perm 754 -exec chmod 755 {} \;
170  find . -perm 664 -exec chmod 644 {} \;
171  mkdir -p $PKG1/usr/doc/gcc-$VERSION
172  cp -a \
173    COPYING* ChangeLog* INSTALL \
174    LAST_UPDATED MAINTAINERS NEWS \
175    README*  \
176  $PKG1/usr/doc/gcc-$VERSION
177
178  # We will keep part of these, but they are really big...
179  if [ -r ChangeLog ]; then
180    DOCSDIR=$(echo $PKG1/usr/doc/gcc-$VERSION)
181    cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog
182    touch -r ChangeLog $DOCSDIR/ChangeLog
183  fi
184  if [ -r NEWS ]; then
185    DOCSDIR=$(echo $PKG1/usr/doc/gcc-$VERSION)
186    cat NEWS | head -n 1000 > $DOCSDIR/NEWS
187    touch -r NEWS $DOCSDIR/NEWS
188  fi
189
190  mkdir -p $PKG1/usr/doc/gcc-${VERSION}/gcc
191  ( cd gcc
192    cp -a \
193      ABOUT* COPYING* DATESTAMP DEV-PHASE LANG* ONEWS README* SERVICE \
194    $PKG1/usr/doc/gcc-$VERSION/gcc
195         
196    mkdir -p $PKG3/usr/doc/gcc-${VERSION}/gcc/fortran
197    ( cd fortran
198      if [ -r ChangeLog ]; then
199        cat ChangeLog | head -n 1000 > $PKG3/usr/doc/gcc-$VERSION/gcc/fortran/ChangeLog
200        touch -r ChangeLog $PKG3/usr/doc/gcc-$VERSION/gcc/fortran/ChangeLog
201      fi
202    )
203
204    mkdir -p $PKG4/usr/doc/gcc-${VERSION}/gcc/ada
205    ( cd ada
206      cp -a \
207        ChangeLog.tree-ssa \
208      $PKG4/usr/doc/gcc-$VERSION/gcc/ada
209      if [ -r ChangeLog ]; then
210        cat ChangeLog | head -n 1000 > $PKG4/usr/doc/gcc-$VERSION/gcc/ada/ChangeLog
211        touch -r ChangeLog $PKG4/usr/doc/gcc-$VERSION/gcc/ada/ChangeLog
212      fi
213    )
214
215    mkdir -p $PKG5/usr/doc/gcc-${VERSION}/gcc/java
216    ( cd java
217      cp -a \
218        ChangeLog.tree-ssa \
219      $PKG5/usr/doc/gcc-${VERSION}/gcc/java
220      if [ -r ChangeLog ]; then
221        cat ChangeLog | head -n 1000 > $PKG5/usr/doc/gcc-${VERSION}/gcc/java/ChangeLog
222        touch -r ChangeLog $PKG5/usr/doc/gcc-${VERSION}/gcc/java/ChangeLog
223      fi
224    )
225 
226    mkdir -p $PKG6/usr/doc/gcc-${VERSION}/gcc/objc
227    ( cd objc
228      cp -a \
229        README* \
230      $PKG6/usr/doc/gcc-${VERSION}/gcc/objc
231      if [ -r ChangeLog ]; then
232        cat ChangeLog | head -n 1000 > $PKG6/usr/doc/gcc-${VERSION}/gcc/objc/ChangeLog
233        touch -r ChangeLog $PKG6/usr/doc/gcc-${VERSION}/gcc/objc/ChangeLog
234      fi
235    )
236
237    mkdir -p $PKG8/usr/doc/gcc-${VERSION}/gcc/go
238    ( cd go
239      if [ -r ChangeLog ]; then
240        cat ChangeLog | head -n 1000 > $PKG8/usr/doc/gcc-${VERSION}/gcc/go/ChangeLog
241        touch -r ChangeLog $PKG8/usr/doc/gcc-${VERSION}/gcc/go/ChangeLog
242      fi
243      cp -a \
244        README*  \
245        gofrontend/{LICENSE,PATENTS,README} \
246      $PKG8/usr/doc/gcc-${VERSION}/gcc/go
247    )
248
249  ) || exit 1
250
251  mkdir -p $PKG3/usr/doc/gcc-${VERSION}/libgfortran
252  ( cd libgfortran
253    if [ -r ChangeLog ]; then
254      cat ChangeLog | head -n 1000 > $PKG3/usr/doc/gcc-${VERSION}/libgfortran/ChangeLog
255      touch -r ChangeLog $PKG3/usr/doc/gcc-${VERSION}/libgfortran/ChangeLog
256    fi
257  )
258
259  mkdir -p $PKG4/usr/doc/gcc-${VERSION}/libada
260  ( cd libada
261    if [ -r ChangeLog ]; then
262      cat ChangeLog | head -n 1000 > $PKG4/usr/doc/gcc-${VERSION}/libada/ChangeLog
263      touch -r ChangeLog $PKG4/usr/doc/gcc-${VERSION}/libada/ChangeLog
264    fi
265  )
266
267  mkdir -p $PKG5/usr/doc/gcc-${VERSION}/libffi
268  ( cd libffi
269    cp -a \
270      ChangeLog.libgcj ChangeLog.v1 \
271      LICENSE* README* \
272    $PKG5/usr/doc/gcc-${VERSION}/libffi
273    if [ -r ChangeLog ]; then
274      cat ChangeLog | head -n 1000 > $PKG5/usr/doc/gcc-${VERSION}/libffi/ChangeLog
275      touch -r ChangeLog $PKG5/usr/doc/gcc-${VERSION}/libffi/ChangeLog
276    fi
277  )
278
279  mkdir -p $PKG5/usr/doc/gcc-${VERSION}/libjava
280  ( cd libjava
281    cp -a \
282      COPYING* HACKING LIBGCJ_LICENSE \
283      NEWS README* THANKS \
284    $PKG5/usr/doc/gcc-${VERSION}/libjava
285    if [ -r ChangeLog ]; then
286      cat ChangeLog | head -n 1000 > $PKG5/usr/doc/gcc-${VERSION}/libjava/ChangeLog
287      touch -r ChangeLog $PKG5/usr/doc/gcc-${VERSION}/libjava/ChangeLog
288    fi
289  )
290
291
292  mkdir -p $PKG1/usr/doc/gcc-${VERSION}/libgomp
293  ( cd libgomp
294    if [ -r ChangeLog ]; then
295      cat ChangeLog | head -n 1000 > $PKG1/usr/doc/gcc-${VERSION}/libgomp/ChangeLog
296      touch -r ChangeLog $PKG1/usr/doc/gcc-${VERSION}/libgomp/ChangeLog
297    fi
298  )
299 
300  mkdir -p $PKG6/usr/doc/gcc-${VERSION}/libobjc
301  ( cd libobjc
302    if [ -r ChangeLog ]; then
303      cat ChangeLog | head -n 1000 > $PKG6/usr/doc/gcc-${VERSION}/libobjc/ChangeLog
304      touch -r ChangeLog $PKG6/usr/doc/gcc-${VERSION}/libobjc/ChangeLog
305    fi
306    cp -a \
307      README* THREADS* \
308    $PKG6/usr/doc/gcc-${VERSION}/libobjc
309  )
310   
311  mkdir -p $PKG2/usr/doc/gcc-${VERSION}/libstdc++-v3
312  ( cd libstdc++-v3
313    cp -a \
314      README* \
315      doc/html/faq.html \
316    $PKG2/usr/doc/gcc-${VERSION}/libstdc++-v3
317    if [ -r ChangeLog ]; then
318      cat ChangeLog | head -n 1000 > $PKG2/usr/doc/gcc-${VERSION}/libstdc++-v3/ChangeLog
319      touch -r ChangeLog $PKG2/usr/doc/gcc-${VERSION}/libstdc++-v3/ChangeLog
320    fi
321  )
322
323)
324
325# Add fastjar to the gcc-java package:
326( cd $TMP
327  FASTJARVER=$(echo $CWD/fastjar-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev)
328  echo
329  echo "Building fastjar-$FASTJARVER first"
330  echo
331  rm -rf fastjar-$FASTJARVER
332  tar xvf $CWD/fastjar-$FASTJARVER.tar.xz || exit 1
333  cd fastjar-$FASTJARVER || exit 1
334  chown -R root:root .
335  find . \
336    \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
337    -exec chmod 755 {} \; -o \
338    \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
339    -exec chmod 644 {} \;
340  for patch in $CWD/fastjar-patches/*.gz ; do
341    zcat $patch | patch -p1 --verbose || exit 1
342  done
343  CFLAGS="$SLKCFLAGS" \
344  CXXFLAGS="$SLKCFLAGS" \
345  ./configure \
346     --prefix=/usr \
347     --libdir=/usr/lib$LIBDIRSUFFIX \
348     --mandir=/usr/man \
349     --infodir=/usr/info \
350     --build=$TARGET
351  make $NUMJOBS || exit 1
352  make install DESTDIR=$PKG5 || exit 1
353  mkdir -p $PKG5/usr/doc/fastjar-$FASTJARVER
354  cp -a \
355    AUTHORS CHANGES COPYING* INSTALL NEWS README* TODO \
356    $PKG5/usr/doc/fastjar-$FASTJARVER
357  # If there's a ChangeLog, installing at least part of the recent history
358  # is useful, but don't let it get totally out of control:
359  if [ -r ChangeLog ]; then
360    DOCSDIR=$(echo $PKG5/usr/doc/fastjar-$FASTJARVER)
361    cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog
362    touch -r ChangeLog $DOCSDIR/ChangeLog
363  fi
364  find $PKG5 | xargs file | grep -e "executable" -e "shared object" | grep ELF \
365    | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
366  # Compress and if needed symlink the man pages:
367  if [ -d $PKG5/usr/man ]; then
368    ( cd $PKG5/usr/man
369      for manpagedir in $(find . -type d -name "man*") ; do
370        ( cd $manpagedir
371          for eachpage in $( find . -type l -maxdepth 1) ; do
372            ln -s $( readlink $eachpage ).gz $eachpage.gz
373            rm $eachpage
374          done
375          gzip -9 *.?
376        )
377      done
378    )
379  fi
380  # Compress info files, if any:
381  if [ -d $PKG5/usr/info ]; then
382    ( cd $PKG5/usr/info
383      rm -f dir
384      gzip -9 *
385    )
386  fi
387  echo
388) || exit 1
389
390# build gcc
391( mkdir gcc.build.lnx;
392  cd gcc.build.lnx;
393
394  # If enough people need "treelang" support for it may be considered.
395  #  --enable-languages=ada,c,c++,fortran,java,objc,treelang
396  # I think it's incorrect to include this option (as it'll end up set
397  # to i586 on x86 platforms), and we want to tune the binary structure
398  # for i686, as that's where almost all of the optimization speedups
399  # are to be found.
400  # Correct me if my take on this is wrong.
401  #  --with-cpu=$ARCH
402 
403  if [ "$ARCH" != "x86_64" ]; then
404    GCC_ARCHOPTS="--with-arch=$ARCH"
405  else
406    GCC_ARCHOPTS="--disable-multilib"
407  fi
408 
409  # NOTE:  For Slackware 15.0, look into removing --with-default-libstdcxx-abi=gcc4-compatible,
410  # which will then require rebuilding all C++ libraries.  That is, if there's any benefit.
411
412  CFLAGS="$SLKCFLAGS" \
413  CXXFLAGS="$SLKCFLAGS" \
414  ../gcc-$VERSION/configure --prefix=/usr \
415     --libdir=/usr/lib$LIBDIRSUFFIX \
416     --mandir=/usr/man \
417     --infodir=/usr/info \
418     --enable-shared \
419     --enable-bootstrap \
420     --enable-languages=c,c++,fortran,go,java,lto,objc \
421     --enable-threads=posix \
422     --enable-checking=release \
423     --enable-objc-gc \
424     --with-system-zlib \
425     --with-python-dir=/lib$LIBDIRSUFFIX/python2.7/site-packages \
426     --enable-libstdcxx-dual-abi \
427     --with-default-libstdcxx-abi=gcc4-compatible \
428     --disable-libunwind-exceptions \
429     --enable-__cxa_atexit \
430     --enable-libssp \
431     --enable-lto \
432     --disable-install-libiberty \
433     --with-gnu-ld \
434     --verbose \
435     --enable-java-home \
436     --with-java-home=/usr/lib$LIBDIRSUFFIX/jvm/jre \
437     --with-jvm-root-dir=/usr/lib$LIBDIRSUFFIX/jvm \
438     --with-jvm-jar-dir=/usr/lib$LIBDIRSUFFIX/jvm/jvm-exports \
439     --with-arch-directory=$LIB_ARCH \
440     --with-antlr-jar=$ANTLJAR \
441     --enable-java-awt=gtk \
442     --disable-gtktest \
443     $GCC_ARCHOPTS \
444     --target=${TARGET} \
445     --build=${TARGET} \
446     --host=${TARGET} || exit 1
447
448  # Start the build:
449
450  # Include all debugging info (for now):
451  make $NUMJOBS bootstrap >/dev/null
452
453#  ( cd gcc
454#    make $NUMJOBS gnatlib GNATLIBCFLAGS="$SLKCFLAGS"
455    # This wants a shared -ladd2line?
456    #make gnatlib-shared
457   
458#    CFLAGS="$SLKCFLAGS" \
459#    CXXFLAGS="$SLKCFLAGS" \
460#    make $NUMJOBS gnattools
461#  )
462  make info
463
464  # Set GCCCHECK=something to run the tests
465  if [ ! -z $GCCCHECK ]; then
466    make $NUMJOBS check
467  fi
468
469  make install DESTDIR=$PKG1
470
471# KLUDGE ALERT
472# These *gdb.py files are causing ldconfig to complain, so they are going
473# to be REMOVED for now...  at some point, they might be moved somewhere
474# else, in which case things should Just Work(tm).  Keep an eye on it.
475rm -f $PKG1/usr/lib${LIBDIRSUFFIX}/*gdb.py
476
477# Be sure the "specs" file is installed.
478if [ ! -r $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/specs ]; then
479  cat stage1-gcc/specs > $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/specs
480fi
481
482# Make our 64bit gcc look for 32bit gcc binaries in ./32 subdirectory:
483if [ "$ARCH" = "x86_64" ]; then
484  sed -i 's#;.\(:../lib !m64 m32;\)$#;32\1#' \
485    $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/specs
486fi
487
488#  make ada.install-common DESTDIR=$PKG1
489#  make install-gnatlib DESTDIR=$PKG1
490make -i install-info DESTDIR=$PKG1
491
492chmod 755 $PKG1/usr/lib${LIBDIRSUFFIX}/libgcc_s.so.1
493
494# The (huge) static GNU java libraries are not packaged.  In nearly all
495# cases one or more dependencies will not be available as static anyway.
496rm -f $PKG1/usr/lib${LIBDIRSUFFIX}/libgcj.a
497rm -f $PKG1/usr/lib${LIBDIRSUFFIX}/libgcj-tools.a
498
499# Fix stuff up:
500( cd $PKG1/usr/info ; rm dir ; gzip -9 * )
501( cd $PKG1
502  # *not* ${LIBDIRSUFFIX}
503  mkdir -p lib
504  cd lib
505  ln -sf /usr/bin/cpp .
506)
507
508( cd $PKG1/usr/bin
509  mv g++ g++-gcc-$VERSION
510  mv gcc gcc-$VERSION
511  mv ${TARGET}-gfortran gfortran-gcc-$VERSION
512  ln -sf g++-gcc-$VERSION g++
513  ln -sf gcc-$VERSION gcc
514  ln -sf g++ c++
515  ln -sf gcc cc
516  ln -sf gcc-$VERSION ${TARGET}-gcc
517  ln -sf gcc-$VERSION ${TARGET}-gcc-$VERSION
518  ln -sf gcc-ar ${TARGET}-gcc-ar
519  ln -sf gcc-nm ${TARGET}-gcc-nm
520  ln -sf gcc-ranlib ${TARGET}-gcc-ranlib
521  ln -sf gcj ${TARGET}-gcj
522  ln -sf gcjh ${TARGET}-gcjh
523  ln -sf g++-gcc-$VERSION ${TARGET}-c++
524  ln -sf g++-gcc-$VERSION ${TARGET}-g++
525  ln -sf gfortran-gcc-$VERSION gfortran
526  ln -sf gfortran-gcc-$VERSION ${TARGET}-gfortran
527  ln -sf gfortran-gcc-$VERSION ${TARGET}-gfortran-$VERSION
528  ln -sf gfortran-gcc-$VERSION ${TARGET}-g95
529  ln -sf gfortran g95
530  ln -sf gfortran f95
531  ln -sf gfortran-gcc-$VERSION ${TARGET}-g77
532  ln -sf gfortran g77
533  ln -sf gfortran f77
534  cat $CWD/c89.sh > c89
535  cat $CWD/c99.sh > c99
536  chmod 755 c89 c99
537)
538
539( cd $PKG1/usr/man
540  gzip -9 */*
541  cd man1
542  ln -sf g++.1.gz c++.1.gz
543  ln -sf gcc.1.gz cc.1.gz
544
545
546## build the txz package
547#(
548#  cd $PKG1;
549#  makepkg -l y -c n $TMP/gcc-$VERSION-$ARCH-$BUILD.txz
550#)
551# keep a log
552) 2>&1 | tee $TMP/gcc.build.log
553
554# OK, time to split the big package where needed:
555
556# gcc-g++:
557( cd $PKG2
558  mkdir -p usr/bin
559  mv $PKG1/usr/bin/*++* usr/bin
560  mkdir -p usr/include
561  mv $PKG1/usr/include/c++ usr/include
562  mkdir -p usr/lib${LIBDIRSUFFIX}
563  mv $PKG1/usr/lib${LIBDIRSUFFIX}/*++* usr/lib${LIBDIRSUFFIX}
564  mkdir -p usr/libexec/gcc/$TARGET/$VERSION
565  mv $PKG1/usr/libexec/gcc/$TARGET/$VERSION/cc1plus usr/libexec/gcc/$TARGET/$VERSION/cc1plus
566  mkdir -p usr/man/man1
567  mv $PKG1/usr/man/man1/*++* usr/man/man1
568)
569
570# gcc-gfortran:
571( cd $PKG3
572  mkdir -p usr/bin
573  mv $PKG1/usr/bin/*gfortran* usr/bin
574  mv $PKG1/usr/bin/*95* usr/bin
575  mv $PKG1/usr/bin/*77* usr/bin
576  # Doesn't this seem like a logical idea?
577  ( cd usr/bin ; ln -sf gfortran-gcc-${VERSION} fortran )
578  mkdir -p usr/info
579  mv $PKG1/usr/info/gfortran* usr/info
580  mkdir -p usr/lib${LIBDIRSUFFIX}
581  mv $PKG1/usr/lib${LIBDIRSUFFIX}/libgfortran* usr/lib${LIBDIRSUFFIX}
582  mkdir -p usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION
583  mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/finclude usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION
584  mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/libgfortran* usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION
585  mkdir -p usr/libexec/gcc/$TARGET/$VERSION
586  mv $PKG1/usr/libexec/gcc/$TARGET/$VERSION/f951 usr/libexec/gcc/$TARGET/$VERSION/f951
587  #mv $PKG1/usr/libexec/gcc/$TARGET/$VERSION/libgfortran* usr/libexec/gcc/$TARGET/$VERSION
588  mkdir -p usr/man/man1
589  mv $PKG1/usr/man/man1/gfortran* usr/man/man1
590)
591
592# gcc-gnat:
593# First, relocate usr/bin/gnative2ascii to the gcc-java package so it
594# isn't matched and accidentally put in gcc-gnat:
595#mkdir -p $PKG5/usr/bin
596#mv $PKG1/usr/bin/gnative2ascii $PKG5/usr/bin
597# Now make the gcc-gnat package tree:
598#( cd $PKG4
599#  mkdir -p usr/bin
600#  mv $PKG1/usr/bin/gnat* usr/bin
601#  mv $PKG1/usr/bin/gpr* usr/bin
602#  mkdir -p usr/info
603#  mv $PKG1/usr/info/gnat* usr/info
604#  mkdir -p usr/libexec/gcc/$TARGET/$VERSION
605#  mv $PKG1/usr/libexec/gcc/$TARGET/$VERSION/gnat1 usr/libexec/gcc/$TARGET/$VERSION
606#  mkdir -p usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION
607#  mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/adainclude usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION
608#  mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/adalib usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION
609#)
610
611# gcc-java:
612( cd $PKG5
613  mkdir -p usr/bin
614  mv $PKG1/usr/bin/aot-compile usr/bin
615  #mv $PKG1/usr/bin/addr2name.awk usr/bin
616  # mv $PKG1/usr/bin/fastjar usr/bin
617  mv $PKG1/usr/bin/gappletviewer usr/bin
618  mv $PKG1/usr/bin/gc-analyze usr/bin
619  mv $PKG1/usr/bin/*gcj* usr/bin
620  mv $PKG1/usr/bin/gij usr/bin
621  mv $PKG1/usr/bin/gjar usr/bin
622  mv $PKG1/usr/bin/gjarsigner usr/bin
623  mv $PKG1/usr/bin/gjdoc usr/bin
624  mv $PKG1/usr/bin/gkeytool usr/bin
625  #mv $PKG1/usr/bin/grepjar usr/bin
626  mv $PKG1/usr/bin/grmid usr/bin
627  mv $PKG1/usr/bin/grmic usr/bin
628  mv $PKG1/usr/bin/grmiregistry usr/bin
629  mv $PKG1/usr/bin/gserialver usr/bin
630  mv $PKG1/usr/bin/gtnameserv usr/bin
631  mv $PKG1/usr/bin/gjavah usr/bin
632  mv $PKG1/usr/bin/gorbd usr/bin
633  #mv $PKG1/usr/bin/jar usr/bin
634  mv $PKG1/usr/bin/jcf-dump usr/bin
635  mv $PKG1/usr/bin/jv-* usr/bin
636  #mv $PKG1/usr/bin/rmi* usr/bin
637  mkdir -p usr/include/c++/$VERSION
638  # Move some Java only C++ headers from the C++ package:
639  mv $PKG2/usr/include/c++/$VERSION/{gcj,gnu,java,javax,org,sun} usr/include/c++/$VERSION
640  #mv $PKG1/usr/include/ffi.h usr/include
641  mkdir -p usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include
642  mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include/jawt.h usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include
643  #mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include/ffi.h usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include
644  #mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include/ffitarget.h usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include
645  mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include/jawt_md.h usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include
646  mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include/jni.h usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include
647  mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include/jni_md.h usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include
648  mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include/jvmpi.h usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include
649  #mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include/libffi usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include
650  # aot-compile Python plugins:
651  if [ ! -d $PKG1/usr/lib${LIBDIRSUFFIX}/python2.7 ]; then
652    echo "NO $PKG1/usr/lib${LIBDIRSUFFIX}/python2.7 !"
653    exit 1
654  fi
655  mv $PKG1/usr/lib${LIBDIRSUFFIX}/python2.7 usr/lib${LIBDIRSUFFIX}
656  mkdir -p usr/info
657  mv $PKG1/usr/info/gcj.* usr/info
658  # mv $PKG1/usr/info/fastjar.* usr/info
659  mkdir -p usr/lib${LIBDIRSUFFIX}
660  #mv $PKG1/usr/lib${LIBDIRSUFFIX}/libffi* usr/lib${LIBDIRSUFFIX}
661  mv $PKG1/usr/lib${LIBDIRSUFFIX}/logging.properties usr/lib${LIBDIRSUFFIX}
662  mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcj* usr/lib${LIBDIRSUFFIX}
663  mv $PKG1/usr/lib${LIBDIRSUFFIX}/libgcj* usr/lib${LIBDIRSUFFIX}
664  mv $PKG1/usr/lib${LIBDIRSUFFIX}/libgij* usr/lib${LIBDIRSUFFIX}
665#  mv $PKG1/usr/lib${LIBDIRSUFFIX}/lib-org* usr/lib${LIBDIRSUFFIX}
666  mv $PKG1/usr/lib${LIBDIRSUFFIX}/security usr/lib${LIBDIRSUFFIX}
667  mkdir -p usr/lib${LIBDIRSUFFIX}/pkgconfig
668  mv $PKG1/usr/lib${LIBDIRSUFFIX}/pkgconfig/libgcj*.pc usr/lib${LIBDIRSUFFIX}/pkgconfig
669  rmdir $PKG1/usr/lib${LIBDIRSUFFIX}/pkgconfig 2> /dev/null
670  mkdir -p usr/libexec/gcc/$TARGET/$VERSION
671  mv $PKG1/usr/libexec/gcc/$TARGET/$VERSION/jc1 usr/libexec/gcc/$TARGET/$VERSION
672  mv $PKG1/usr/libexec/gcc/$TARGET/$VERSION/ecj1 usr/libexec/gcc/$TARGET/$VERSION
673  mv $PKG1/usr/libexec/gcc/$TARGET/$VERSION/jvgenmain usr/libexec/gcc/$TARGET/$VERSION
674  mkdir -p usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include
675  mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include/gcj usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include
676  mkdir -p usr/man/man1
677  mv $PKG1/usr/man/man1/aot-compile.1.gz usr/man/man1
678  mv $PKG1/usr/man/man1/gappletviewer.1.gz usr/man/man1
679  mv $PKG1/usr/man/man1/gc-analyze.1.gz usr/man/man1
680  mv $PKG1/usr/man/man1/gcj.1.gz usr/man/man1
681  mv $PKG1/usr/man/man1/gcjh.1.gz usr/man/man1
682  mv $PKG1/usr/man/man1/gcj-dbtool.1.gz usr/man/man1
683  mv $PKG1/usr/man/man1/gij.1.gz usr/man/man1
684  mv $PKG1/usr/man/man1/gjar.1.gz usr/man/man1
685  mv $PKG1/usr/man/man1/gjarsigner.1.gz usr/man/man1
686  mv $PKG1/usr/man/man1/gjavah.1.gz usr/man/man1
687  mv $PKG1/usr/man/man1/gjdoc.1.gz usr/man/man1
688  #mv $PKG1/usr/man/man1/gjnih.1.gz usr/man/man1
689  mv $PKG1/usr/man/man1/gkeytool.1.gz usr/man/man1
690  mv $PKG1/usr/man/man1/gnative2ascii.1.gz usr/man/man1
691  mv $PKG1/usr/man/man1/gorbd.1.gz usr/man/man1
692  mv $PKG1/usr/man/man1/grmic.1.gz usr/man/man1
693  mv $PKG1/usr/man/man1/grmid.1.gz usr/man/man1
694  mv $PKG1/usr/man/man1/grmiregistry.1.gz usr/man/man1
695  mv $PKG1/usr/man/man1/gserialver.1.gz usr/man/man1
696  mv $PKG1/usr/man/man1/gtnameserv.1.gz usr/man/man1
697  mv $PKG1/usr/man/man1/jcf-dump.1.gz usr/man/man1
698  mv $PKG1/usr/man/man1/jv-convert.1.gz usr/man/man1
699  #mv $PKG1/usr/man/man1/jv-scan.1.gz usr/man/man1
700  mv $PKG1/usr/man/man1/rebuild-gcj-db.1.gz usr/man/man1
701  mkdir -p usr/man/man3
702  #mv $PKG1/usr/man/man3/ffi* usr/man/man3
703  mkdir -p usr/share
704  mv $PKG1/usr/share/java usr/share
705  # The ecj wrapper script:
706  cat $CWD/ecj.sh | sed -e "s,@JAVADIR@,/usr/share/java," > usr/bin/ecj
707  chmod 755 usr/bin/ecj
708  # The JAVA_HOME compatibility links.
709  # Caution: non-multilib arch-independent stuff! No lib64 here.
710  mkdir -p usr/lib$LIBDIRSUFFIX
711  mv $PKG1/usr/lib$LIBDIRSUFFIX/jvm* usr/lib$LIBDIRSUFFIX
712  # And add the missing javac symlink:
713  ln -s ../../../bin/ecj usr/lib$LIBDIRSUFFIX/jvm/bin/javac
714  # Don't package libffi stuff anymore.  GCC will link the internal version
715  # statically, and we'll need a newer one elsewhere.
716  #find . -name "ffi*.h" | xargs rm
717  #find . -name "libffi*" | xargs rm
718  #rm -f usr/man/man3/ffi*
719  #rm -f usr/info/libffi*
720)
721
722# gcc-objc:
723( cd $PKG6
724  mkdir -p usr/lib${LIBDIRSUFFIX}
725  mv $PKG1/usr/lib${LIBDIRSUFFIX}/libobjc* usr/lib${LIBDIRSUFFIX}
726  mkdir -p usr/libexec/gcc/$TARGET/$VERSION
727  mv $PKG1/usr/libexec/gcc/$TARGET/$VERSION/cc1obj usr/libexec/gcc/$TARGET/$VERSION
728  mkdir -p usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include
729  mv $PKG1/usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include/objc usr/lib${LIBDIRSUFFIX}/gcc/$TARGET/$VERSION/include
730)
731
732## NOTE: Thought about this, because the precompiled headers are so large.
733## Probably easier to keep everything together, though.
734## gcc-g++-gch (precompiled c++ headers)
735#( cd $PKG7
736#  mkdir -p usr/include/c++/$VERSION/$TARGET/bits
737#  mv $PKG2/usr/include/c++/$VERSION/$TARGET/bits/stdc++.h.gch usr/include/c++/$VERSION/$TARGET/bits
738#)
739
740# gcc-go:
741( cd $PKG8
742  mkdir -p usr/bin
743  mv $PKG1/usr/bin/*gccgo* usr/bin
744  mv $PKG1/usr/bin/go{,fmt} usr/bin
745  mkdir -p usr/libexec/gcc/$TARGET/$VERSION
746  mv $PKG1/usr/libexec/gcc/$TARGET/$VERSION/{cgo,go1} usr/libexec/gcc/$TARGET/$VERSION
747  mkdir -p usr/info
748  mv $PKG1/usr/info/gccgo.info.gz usr/info
749  mkdir -p usr/lib${LIBDIRSUFFIX}
750  mv $PKG1/usr/lib${LIBDIRSUFFIX}/go usr/lib${LIBDIRSUFFIX}
751  mv $PKG1/usr/lib${LIBDIRSUFFIX}/{libgo.la,libgo.so*,libgobegin.a,libgolibbegin.a,libnetgo.a} usr/lib${LIBDIRSUFFIX} || exit 1
752  # Ordinarily Slackware doesn't package static libraries, but in this case
753  # it is useful for deploying compiled binaries on machines that do not yet
754  # have libgo.so.0.0.0.
755  mv $PKG1/usr/lib${LIBDIRSUFFIX}/libgo.a usr/lib${LIBDIRSUFFIX}
756  mkdir -p usr/man/man1
757  mv $PKG1/usr/man/man1/gccgo.1.gz usr/man/man1
758  mv $PKG1/usr/man/man1/go.1.gz usr/man/man1
759  mv $PKG1/usr/man/man1/gofmt.1.gz usr/man/man1
760) || exit 1
761
762# Filter all .la files (thanks much to Mark Post for the sed script):
763( cd $TMP
764  for file in $(find . -type f -name "*.la") ; do
765    cat $file | sed -e 's%-L/gcc-[[:graph:]]* % %g' > $TMP/tmp-la-file
766    cat $TMP/tmp-la-file > $file
767  done
768  rm $TMP/tmp-la-file
769)
770
771## Strip bloated binaries and libraries:
772for dir in $PKG{1,2,3,4,5,6,8}; do
773  ( cd $dir
774    find . -name "lib*so*" -exec strip --strip-unneeded "{}" \; || true
775    find . -name "lib*a" -exec strip -g "{}" \; || true
776    strip --strip-unneeded usr/bin/* 2> /dev/null || true
777    find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
778    find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
779  )
780done
781
782( cd $PKG1
783  makepkg -l y -c n $TMP/gcc-$VERSION-$ARCH-$BUILD.txz )
784( cd $PKG2
785  makepkg -l y -c n $TMP/gcc-g++-$VERSION-$ARCH-$BUILD.txz )
786( cd $PKG3
787  makepkg -l y -c n $TMP/gcc-gfortran-$VERSION-$ARCH-$BUILD.txz )
788#( cd $PKG4
789#  makepkg -l y -c n $TMP/gcc-gnat-$VERSION-$ARCH-$BUILD.txz )
790( cd $PKG5
791  makepkg -l y -c n $TMP/gcc-java-$VERSION-$ARCH-$BUILD.txz )
792( cd $PKG6
793  makepkg -l y -c n $TMP/gcc-objc-$VERSION-$ARCH-$BUILD.txz )
794#( cd $PKG7
795#  makepkg -l y -c n $TMP/gcc-g++-gch-$VERSION-$ARCH-$BUILD.txz )
796( cd $PKG8
797  makepkg -l y -c n $TMP/gcc-go-$VERSION-$ARCH-$BUILD.txz )
798
799echo
800echo "Slackware GCC package build complete!"
801echo
802
Note: See TracBrowser for help on using the repository browser.