void-packages/srcpkgs/gcc6/template
q66 6f1c7ff607 New package: gcc6-6.5.0
This is the first part of an effort to allow bootstrapping openjdk
without downloading any binaries. The next part will be an openjdk7
package that will be used to bootstrap openjdk8.

After that, we can proceed to add the missing parts to go all the
way up to 11.

[ci skip]
2019-11-15 22:56:51 +01:00

370 lines
13 KiB
Bash

# Template file for 'gcc6'
_majorver=6
_minorver=${_majorver}.5
# old isl is necessary
_isl_version=0.16
pkgname=gcc6
version=${_minorver}.0
revision=1
wrksrc=gcc-${version}
hostmakedepends="automake libtool perl flex zip unzip"
makedepends="gmp-devel mpfr-devel libmpc-devel zlib-devel"
depends="binutils"
short_desc="GNU C Compiler (6.x)"
maintainer="q66 <daniel@octaforge.org>"
license="GFDL-1.2-or-later, GPL-3.0-or-later, LGPL-2.1-or-later, EPL"
homepage="http://gcc.gnu.org"
distfiles="
${GNU_SITE}/gcc/gcc-${version}/gcc-${version}.tar.xz
http://isl.gforge.inria.fr/isl-${_isl_version}.tar.bz2
https://sourceware.org/pub/java/ecj-4.9.jar"
checksum="
7ef1796ce497e89479183702635b14bb7a46b53249209a5e0f999bebf4740945
3899e68047d0a18db5a7d73bdabcbe9246865e73e86efbd95387817d342fd554
9506e75b862f782213df61af67338eb7a23c35ff425d328affc65585477d34cd"
skip_extraction="ecj-4.9.jar"
nopie=yes
lib32disabled=yes
patch_args="-Np1"
nocross=yes
subpackages="gcc6-gcj gcc6-gcj-ecj libgcj-devel libgcj gcc6-gcj-jdk-compat"
case "$XBPS_TARGET_MACHINE" in
i686) _triplet="i686-pc-linux-gnu";;
i686-musl) _triplet="i686-linux-musl";;
x86_64) _triplet="x86_64-unknown-linux-gnu";;
x86_64-musl) _triplet="x86_64-linux-musl";;
armv5tel) _triplet="arm-linux-gnueabi";;
armv5tel-musl) _triplet="arm-linux-musleabi";;
armv6l) _triplet="arm-linux-gnueabihf";;
armv7l) _triplet="armv7l-linux-gnueabihf";;
armv6l-musl) _triplet="arm-linux-musleabihf";;
armv7l-musl) _triplet="armv7l-linux-musleabihf";;
aarch64) _triplet="aarch64-linux-gnu";;
aarch64-musl) _triplet="aarch64-linux-musl";;
ppc) _triplet="powerpc-linux-gnu";;
ppc-musl) _triplet="powerpc-linux-musl";;
ppc64le) _triplet="powerpc64le-linux-gnu";;
ppc64le-musl) _triplet="powerpc64le-linux-musl";;
ppc64) _triplet="powerpc64-linux-gnu";;
ppc64-musl) _triplet="powerpc64-linux-musl";;
mips-musl) _triplet="mips-linux-musl";;
mipshf-musl) _triplet="mips-linux-muslhf";;
mipsel-musl) _triplet="mipsel-linux-musl";;
mipselhf-musl) _triplet="mipsel-linux-muslhf";;
esac
case "$XBPS_TARGET_MACHINE" in
*-musl) depends+=" musl-devel";;
*) depends+=" glibc-devel";;
esac
post_extract() {
mkdir -p ${wrksrc}/isl
cp -ar ${XBPS_BUILDDIR}/isl-${_isl_version}/* ${wrksrc}/isl/
# https://gcc.gnu.org/ml/java/2008-04/msg00027.html
cp ${XBPS_SRCDISTDIR}/${pkgname}-${version}/ecj-*.jar ${wrksrc}/ecj.jar
}
pre_configure() {
# _FORTIFY_SOURCE needs an optimization level.
sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
# old isl normally tries to call aclocal-1.14 to reconfigure itself
pushd ${wrksrc}/isl
autoreconf -if
popd
}
do_configure() {
local _args _hash
_hash=gnu
case "$XBPS_TARGET_MACHINE" in
mipselhf-musl) _args+=" --with-arch=mips32r2 --with-float=hard"; _hash=sysv;;
mipsel-musl) _args+=" --with-arch=mips32r2 --with-float=soft"; _hash=sysv;;
mipshf-musl) _args+=" --with-arch=mips32r2 --with-float=hard";;
mips-musl) _args+=" --with-arch=mips32r2 --with-float=soft";;
armv5*) _args+=" --with-arch=armv5te --with-float=soft";;
armv6l*) _args+=" --with-arch=armv6 --with-fpu=vfp --with-float=hard";;
armv7l*) _args+=" --with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard";;
aarch64*) _args+=" --with-arch=armv8-a";;
ppc) _args+=" --enable-secureplt";;
ppc-musl) _args+=" --enable-secureplt --disable-decimal-float";;
ppc64*)
_args+=" --with-abi=elfv2 --enable-secureplt"
sed -i 's/lib64/lib/' gcc/config/rs6000/linux64.h
;;
ppc64*-musl)
_args+=" --with-abi=elfv2 --enable-secureplt --disable-decimal-float"
sed -i 's/lib64/lib/' gcc/config/rs6000/linux64.h
;;
x86_64*)
sed -i 's/lib64/lib/' gcc/config/i386/linux64.h
;;
esac
export CFLAGS="${CFLAGS/-D_FORTIFY_SOURCE=2/}"
export CXXFLAGS="${CXXFLAGS/-D_FORTIFY_SOURCE=2/}"
# Disable explicit -fno-PIE, gcc will figure this out itself.
export CFLAGS="${CFLAGS//-fno-PIE/}"
export CXXFLAGS="${CXXFLAGS//-fno-PIE/}"
export LDFLAGS="${LDFLAGS//-no-pie/}"
_args+=" --build=${_triplet}"
_args+=" --program-suffix=-${_majorver}"
_args+=" --enable-version-specific-runtime-libs"
_args+=" --prefix=/usr"
_args+=" --mandir=/usr/share/man"
_args+=" --infodir=/usr/share/info"
_args+=" --libexecdir=/usr/lib"
_args+=" --libdir=/usr/lib"
_args+=" --with-gxx-include-dir=/usr/include/c++/${version}"
_args+=" --enable-languages=c,c++,java,lto"
_args+=" --enable-java-gc=boehm"
_args+=" --with-jvm-root=/usr/lib/jvm/java-1.5-gcj"
_args+=" --enable-fast-character"
_args+=" --disable-fixed-point"
_args+=" --enable-threads=posix"
_args+=" --enable-__cxa_atexit"
_args+=" --disable-multilib"
_args+=" --enable-lto"
_args+=" --disable-bootstrap"
_args+=" --with-system-zlib"
_args+=" --enable-shared"
_args+=" --enable-linker-build-id"
_args+=" --disable-werror"
_args+=" --disable-nls"
_args+=" --enable-default-pie"
_args+=" --enable-default-ssp"
_args+=" --enable-checking=release"
_args+=" --disable-libstdcxx-pch"
_args+=" --with-isl"
_args+=" --with-linker-hash-style=$_hash"
_args+=" --disable-libunwind-exceptions"
_args+=" --disable-target-libiberty"
_args+=" --disable-libquadmath"
_args+=" --disable-libsanitizer"
_args+=" --disable-vtable-verify"
_args+=" --disable-libitm"
_args+=" --disable-libgomp"
_args+=" --disable-libatomic"
_args+=" --disable-libmpx"
_args+=" --disable-libmudflap"
_args+=" --disable-libssp"
if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
_args+=" --disable-symvers"
_args+=" libat_cv_have_ifunc=no"
fi
mkdir -p build
cd build
CONFIG_SHELL=/bin/bash ${wrksrc}/configure ${_args}
}
do_build() {
cd build
make ${makejobs}
}
do_install() {
cd build
if [ "$XBPS_TARGET_WORDSIZE" = "64" ]; then
vmkdir usr/lib
ln -sfr ${DESTDIR}/usr/lib ${DESTDIR}/usr/lib64
fi
mkdir -p ${DESTDIR}/usr/include/c++/${version}
make DESTDIR=${DESTDIR} install
# Make version a symlink of major version to make all versions
# from the same series work automagically.
mv ${DESTDIR}/usr/lib/gcc/${_triplet}/${version} \
${DESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}
ln -sfr ${DESTDIR}/usr/lib/gcc/${_triplet}/${_minorver} \
${DESTDIR}/usr/lib/gcc/${_triplet}/${version}
# Ditto for c++ headers.
mv ${DESTDIR}/usr/include/c++/${version} \
${DESTDIR}/usr/include/c++/${_minorver}
ln -sfr ${DESTDIR}/usr/include/c++/${_minorver} \
${DESTDIR}/usr/include/c++/${version}
if [ -e ${DESTDIR}/usr/lib64 ]; then
rm -f ${DESTDIR}/usr/lib64
fi
# Remove python stuff
rm -rf ${DESTDIR}/usr/share/gcc-${version}/python
# Avoid conflict with gcc
mv ${DESTDIR}/usr/lib/libcc1* ${DESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}
# Version info files to avoid conflicts with gcc
for f in cp-tools cpp cppinternals gcc gccinstall gccint gcj; do
if [ -f ${DESTDIR}/usr/share/info/${f}.info ]; then
mv ${DESTDIR}/usr/share/info/${f}.info \
${DESTDIR}/usr/share/info/${f}-${_majorver}.info
fi
done
# Conflicting manpages, provided by gcc
rm -rf ${DESTDIR}/usr/share/man/man7
# Provided by main libgcc
rm -f ${DESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}/libgcc_s.so*
# Gcj libs need to be available in primary libdir
mv ${DESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}/libgcj*.so* \
${DESTDIR}/usr/lib
mv ${DESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}/libgij.so* \
${DESTDIR}/usr/lib
# Move pkg-config file into a path pkg-config knows about
mkdir -p ${DESTDIR}/usr/lib/pkgconfig
mv ${DESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}/pkgconfig/*.pc \
${DESTDIR}/usr/lib/pkgconfig
rmdir ${DESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}/pkgconfig
# Build ecj - needed for compat package
${DESTDIR}/usr/bin/gcj-6 -Wl,-Bsymbolic -findirect-dispatch \
-o ${DESTDIR}/usr/bin/ecj-gcj -lgcj \
--main=org.eclipse.jdt.internal.compiler.batch.Main \
${DESTDIR}/usr/share/java/ecj.jar
}
gcc6-gcj_package() {
lib32disabled=yes
depends="gcc6>=${_minorver} libgcj-devel>=${_minorver}"
short_desc+=" - Java compiler frontend"
pkg_install() {
for f in gcj jv-convert gjarsigner gjar grmic jcf-dump \
gtnameserv gcjh gnative2ascii gserialver gkeytool \
gij grmiregistry grmid gorbd gcj-dbtool gjavah \
gc-analyze gappletviewer rebuild-gcj-db aot-compile; do
vmove usr/bin/${f}-${_majorver}
done
for f in gcj jv-convert gjarsigner gjar grmic jcf-dump gjdoc \
gtnameserv gcjh gnative2ascii gserialver gkeytool \
gij grmiregistry grmid gorbd gcj-dbtool gjavah \
gc-analyze gappletviewer rebuild-gcj-db aot-compile; do
if [ -f ${DESTDIR}/usr/share/man/man1/${f}-${_majorver}.1 ]; then
vmove usr/share/man/man1/${f}-${_majorver}.1
fi
done
vmove usr/bin/${_triplet}-gcj-${_majorver}
vmove usr/lib/gcc/${_triplet}/${_minorver}/jc1
vmove usr/lib/gcc/${_triplet}/${_minorver}/jvgenmain
vmove usr/lib/gcc/${_triplet}/${_minorver}/ecj1
vmove usr/share/info/gcj-${_majorver}.info
touch ${PKGDESTDIR}/usr/share/info/dir
}
}
gcc6-gcj-ecj_package() {
short_desc+=" - Eclipse Java Compiler frontend"
pkg_install() {
vmove usr/bin/ecj-gcj
}
}
gcc6-gcj-jdk-compat_package() {
lib32disabled=yes
depends="gcc6-gcj gcc6-gcj-ecj fastjar"
short_desc+=" - JDK compatiblity layer"
pkg_install() {
local jvm_dir=$PKGDESTDIR/usr/lib/jvm
local jdk_dir=$jvm_dir/java-1.5-gcj
local jdk_bin_dir=$jdk_dir/bin
local jdk_lib_dir=$jdk_dir/lib
local jdk_inc_dir=$jdk_dir/include
local jre_dir=$jdk_dir/jre
local jre_bin_dir=$jre_dir/bin
local jre_lib_dir=$jre_dir/lib
local arch=
case "$XBPS_TARGET_MACHINE" in
i686*) arch=i386 ;;
x86_64*) arch=amd64 ;;
arm*) arch=arm ;;
aarch64*) arch=aarch64 ;;
ppc64le*) arch=ppc64le ;;
ppc64*) arch=ppc64 ;;
ppc*) arch=ppc ;;
mipsel*) arch=mipsel ;;
mips*) arch=mips ;;
esac
mkdir -p $jdk_bin_dir $jdk_lib_dir
ln -sfr ${PKGDESTDIR}/usr/bin/gij-${_majorver} $jdk_bin_dir/java
ln -sfr ${PKGDESTDIR}/usr/bin/fastjar $jdk_bin_dir/fastjar
ln -sfr ${PKGDESTDIR}/usr/bin/grmic-${_majorver} $jdk_bin_dir/rmic
ln -sfr ${PKGDESTDIR}/usr/bin/gjavah-${_majorver} $jdk_bin_dir/javah
ln -sfr ${PKGDESTDIR}/usr/bin/gappletviewer-${_majorver} $jdk_bin_dir/appletviewer
ln -sfr ${PKGDESTDIR}/usr/bin/gjarsigner-${_majorver} $jdk_bin_dir/jarsigner
ln -sfr ${PKGDESTDIR}/usr/bin/grmiregistry-${_majorver} $jdk_bin_dir/rmiregistry
ln -sfr ${PKGDESTDIR}/usr/bin/gkeytool-${_majorver} $jdk_bin_dir/keytool
ln -sfr ${PKGDESTDIR}/usr/bin/gjar-${_majorver} $jdk_bin_dir/gjar
ln -sfr ${PKGDESTDIR}/usr/bin/gnative2ascii-${_majorver} $jdk_bin_dir/gnative2ascii
ln -sfr ${PKGDESTDIR}/usr/bin/ecj-gcj $jdk_bin_dir/javac
ln -sfr ${PKGDESTDIR}/usr/share/java/libgcj-tools-${version}.jar $jdk_lib_dir/tools.jar
# symlink headers for jni.h and so on, don't do the whole directory
# otherwise undesirable gcc include files might leak into the builds
mkdir -p $jdk_inc_dir
ln -sfr ${PKGDESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}/include/gcj $jdk_inc_dir/gcj
ln -sfr ${PKGDESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}/include/jawt.h $jdk_inc_dir/jawt.h
ln -sfr ${PKGDESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}/include/jawt_md.h $jdk_inc_dir/jawt_md.h
ln -sfr ${PKGDESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}/include/jni.h $jdk_inc_dir/jni.h
ln -sfr ${PKGDESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}/include/jni_md.h $jdk_inc_dir/jni_md.h
ln -sfr ${PKGDESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}/include/jvmpi.h $jdk_inc_dir/jvmpi.h
mkdir -p $jre_bin_dir $jre_lib_dir/$arch
ln -sfr ${PKGDESTDIR}/usr/bin/gij-${_majorver} $jre_bin_dir/java
ln -sfr ${PKGDESTDIR}/usr/bin/grmiregistry-${_majorver} $jre_bin_dir/rmiregistry
ln -sfr ${PKGDESTDIR}/usr/bin/gkeytool-${_majorver} $jre_bin_dir/keytool
ln -sfr ${PKGDESTDIR}/usr/share/java/libgcj-${version}.jar $jre_lib_dir/rt.jar
ln -sfr ${PKGDESTDIR}/usr/share/java/libgcj-tools-${version}.jar $jre_lib_dir/tools.jar
ln -sfr ${PKGDESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}/gcj-$version-*/libjvm.so $jre_lib_dir/$arch
ln -sfr ${PKGDESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}/gcj-$version-*/libjavamath.so $jre_lib_dir/$arch
ln -sfr ${PKGDESTDIR}/usr/lib/gcc/${_triplet}/${_minorver}/gcj-$version-*/classmap.db $jre_lib_dir/$arch
}
}
libgcj-devel_package() {
lib32disabled=yes
depends="libgcj-${version}_${revision}"
short_desc+=" - Java library - development files"
pkg_install() {
vmove usr/include/c++/${_minorver}/gnu
vmove usr/include/c++/${_minorver}/java
vmove usr/include/c++/${_minorver}/javax
vmove usr/include/c++/${_minorver}/sun
vmove usr/include/c++/${_minorver}/gcj
vmove usr/include/c++/${_minorver}/org
vmove "usr/lib/gcc/${_triplet}/${_minorver}/plugin/include/java"
vmove "usr/lib/gcc/${_triplet}/${_minorver}/include/jni*"
vmove "usr/lib/gcc/${_triplet}/${_minorver}/include/gcj*"
vmove "usr/lib/gcc/${_triplet}/${_minorver}/include/jvm*"
vmove "usr/lib/gcc/${_triplet}/${_minorver}/include/jawt*"
vmove usr/lib/pkgconfig/libgcj-${_majorver}.pc
}
}
libgcj_package() {
lib32disabled=yes
short_desc+=" - Java libraries"
pkg_install() {
vmove "usr/lib/libgcj*.so*"
vmove "usr/lib/libgij.so*"
vmove usr/lib/gcc/${_triplet}/${_minorver}/gcj-${version}-*
vmove usr/lib/gcc/${_triplet}/${_minorver}/logging.properties
vmove usr/lib/gcc/${_triplet}/${_minorver}/libgcj.spec
vmove usr/lib/gcc/${_triplet}/${_minorver}/security/classpath.security
vmove usr/share/java
}
}