summaryrefslogtreecommitdiff
path: root/lang/gcc-aux/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'lang/gcc-aux/Makefile')
-rw-r--r--lang/gcc-aux/Makefile337
1 files changed, 337 insertions, 0 deletions
diff --git a/lang/gcc-aux/Makefile b/lang/gcc-aux/Makefile
new file mode 100644
index 00000000000..c06d744abed
--- /dev/null
+++ b/lang/gcc-aux/Makefile
@@ -0,0 +1,337 @@
+# $NetBSD: Makefile,v 1.1 2012/07/08 19:30:38 marino Exp $
+#
+
+PKGNAME= gcc-aux-${SNAPSHOT}
+DISTNAME= gcc-${GCC_VERSION}
+CATEGORIES= lang
+MASTER_SITES= ${MASTER_SITE_GNU:=gcc/gcc-${GCC_VERSION}/}
+DISTFILES= ${DISTNAME}.tar.bz2
+
+MAINTAINER= draco@marino.st
+HOMEPAGE= http://www.dragonlace.net/
+COMMENT= GNAT Ada compiler based on GCC ${GCC_BRANCH}
+LICENSE= gnu-gpl-v3 AND gnu-lgpl-v3
+
+SNAPSHOT= 20120614
+GCC_BRANCH= 4.7
+GCC_POINT= 1
+GCC_VERSION= ${GCC_BRANCH}.${GCC_POINT}
+LANGS= c
+
+PKG_DESTDIR_SUPPORT= user-destdir
+
+USE_TOOLS+= gmake sed:run perl makeinfo bzip2 patch pod2man
+USE_BUILTIN.iconv= no
+APPLY_DIFFS= core
+
+.include "../../mk/bsd.prefs.mk"
+.include "options.mk"
+
+# Requires bootstrap compiler, which is only available for NetBSD i386/AMD64
+# DragonFly i386/AMD64 and SunOS i386 Bootstrap compilers for OpenBSD and
+# FreeBSD also exist, but are currently reserved for the native package systems
+# of those platforms.
+
+ONLY_FOR_PLATFORM= DragonFly-*-* \
+ NetBSD-[5-9]*-i386 \
+ NetBSD-[5-9]*-x86_64 \
+ SunOS-5.1[1-9]*-i386
+
+BLD_TARGET= ${MACHINE_ARCH}-aux-${LOWER_OPSYS}${OS_VERSION}
+THREAD_MODEL= posix
+OS_LABEL4VERS= [pkgsrc]
+BOOTSTRAP_COMPILER= NOT_REQUIRED
+INTENDED_COMPILER= NATIVE
+BOOTSTRAP_TRIPLET= NOT SET
+FULL_GNATGCC= NOT SET
+FULL_PATH= /sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/sbin:${PREFIX}/bin:${PREFIX}/gcc-aux/bin
+OLD_EH= register_frame
+REBUILD_LIB= Rebuild the following library first:
+STICONV= ${PREFIX}/lib/libiconv.a
+STINTL= \$${top_builddir}/../intl/libintl.a
+
+
+.if ${OPSYS} == "DragonFly"
+.if ${MACHINE_ARCH} == "i386"
+ OS_LABEL4VERS= [DragonFly]
+ BOOTSTRAP_TRIPLET= i386-bootstrap-dragonfly2.8/4.6.0
+.endif
+.if ${MACHINE_ARCH} == "x86_64"
+ OS_LABEL4VERS= [DragonFly64]
+ BOOTSTRAP_TRIPLET= x86_64-bootstrap-dragonfly2.8/4.6.0
+.endif
+BOOTSTRAP_COMPILER= gnat-bootstrap.${MACHINE_ARCH}.dragonfly.tar.bz2
+LINK_HEADER= /usr/include/sys/link_elf.h
+.endif
+
+
+.if ${OPSYS} == "NetBSD"
+.if !empty(OS_VERSION:M5.99.*)
+ NSUFF= 6.0_DEV
+.elif !empty(OS_VERSION:M6.99.*)
+ NSUFF= 7.0_DEV
+.else
+ NSUFF= ${OS_VERSION}
+.endif
+.if ${MACHINE_ARCH} == "i386"
+ OS_LABEL4VERS= [NetBSD]
+ BOOTSTRAP_TRIPLET= i386-bootstrap-netbsdelf5.1/4.6.0
+ BLD_TARGET= ${MACHINE_ARCH}-aux-netbsdelf${NSUFF}
+.endif
+.if ${MACHINE_ARCH} == "x86_64"
+ OS_LABEL4VERS= [NetBSD64]
+ BOOTSTRAP_TRIPLET= x86_64-bootstrap-netbsd5.1/4.6.0
+ BLD_TARGET= ${MACHINE_ARCH}-aux-netbsd${NSUFF}
+.endif
+BOOTSTRAP_COMPILER= gnat-bootstrap.${MACHINE_ARCH}.netbsd.tar.bz2
+LINK_HEADER= /usr/include/link_elf.h
+.endif
+
+
+.if ${OPSYS} == "SunOS"
+.if ${MACHINE_ARCH} == "i386"
+ OS_LABEL4VERS= [Solaris]
+ BOOTSTRAP_TRIPLET= i386-bootstrap-solaris5.11/4.6.1
+.endif
+SOL_OSV= `expr substr ${OS_VERSION} 3 2`
+BLD_TARGET= ${MACHINE_ARCH}-aux-${LOWER_OPSYS}2.${SOL_OSV}
+BOOTSTRAP_COMPILER= gnat-bootstrap.${MACHINE_ARCH}.solaris.tar.bz2
+MY_CONFIGURE_ENV+= OBJDUMP=/usr/sfw/bin/gobjdump
+. if exists(/usr/sfw/bin/gld)
+EXTRA_CONFARGS+= --with-gnu-ld --with-ld=/usr/sfw/bin/gld
+. else
+EXTRA_CONFARGS+= --without-gnu-ld --with-ld=/usr/ccs/bin/ld
+. endif
+. if exists(/usr/sfw/bin/gas)
+EXTRA_CONFARGS+= --with-gnu-as --with-as=/usr/sfw/bin/gas
+. else
+EXTRA_CONFARGS+= --without-gnu-as --with-as=/usr/ccs/bin/as
+. endif
+.endif
+
+
+# define some important directories and files
+BUILDDIR= ${WRKDIR}/build
+WRKSRC= ${WRKDIR}/gcc-${GCC_VERSION}
+PKG_PREFIX= ${PREFIX}/gcc-aux
+CFG_SCRIPT= ${WRKSRC}/configure
+BOOTSTRAP_PREFIX= ${WRKDIR}/bootstrap
+REVFILE= ${WRKSRC}/gcc/REVISION
+BASELIB= ${PREFIX}/lib
+
+
+
+# testing if gcc-aux, gnatlink, gnatbind and gnatmake are in standard location
+# exists function will NOT expand any variable, so it has to be hard-coded
+.if exists(/usr/pkg/gcc-aux/bin/ada) || exists(/opt/ipp/pkg/gcc-aux/bin/ada)
+.if exists(/usr/pkg/gcc-aux/bin/gnatbind) || exists(/opt/ipp/pkg/gcc-aux/bin/gnatbind)
+.if exists(/usr/pkg/gcc-aux/bin/gnatlink) || exists(/opt/ipp/pkg/gcc-aux/bin/gnatlink)
+.if exists(/usr/pkg/gcc-aux/bin/gnatmake) || exists(/opt/ipp/pkg/gcc-aux/bin/gnatmake)
+FULL_GNATGCC=${PREFIX}/gcc-aux/bin/ada
+.endif #gnatmake
+.endif #gnatlink
+.endif #gnatbind
+.endif #gnatgcc
+
+
+.if ${FULL_GNATGCC} == "NOT SET"
+# here we know we need to install the bootstrap compiler
+INTENDED_COMPILER=BOOTSTRAP
+FULL_GNATGCC=${BOOTSTRAP_PREFIX}/bin/gnatgcc
+DISTFILES+= ${BOOTSTRAP_COMPILER}
+SITES.${BOOTSTRAP_COMPILER}= http://downloads.dragonlace.net/src/ \
+ http://dragonlace.mirrors.ada.cx/src/
+FULL_PATH=${BOOTSTRAP_PREFIX}/bin:/sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/sbin:${PREFIX}/bin
+.endif
+
+
+# For pkg maintenance, uncomment to invoke "bmake mdi"
+#DISTFILES+= \
+# gnat-bootstrap.i386.dragonfly.tar.bz2 \
+# gnat-bootstrap.x86_64.dragonfly.tar.bz2 \
+# gnat-bootstrap.i386.netbsd.tar.bz2 \
+# gnat-bootstrap.x86_64.netbsd.tar.bz2 \
+# gnat-bootstrap.i386.solaris.tar.bz2
+
+
+# establish ada-aware compiler for use
+MY_CONFIGURE_ENV+= CC=${FULL_GNATGCC}
+MY_CONFIGURE_ENV+= PATH=${FULL_PATH}
+MY_MAKE_ENV= PATH=${FULL_PATH}
+MY_MAKE_ENV+= ICONVPREFIX=${PREFIX}
+MY_MAKE_ENV+= LD_LIBRARY_PATH=${BUILDDIR}/gcc
+# ${WRKSRC}/fixincludes/ looks for sed and compiles the path to sed into
+# a binary so we need to make sure we give it the installed sed and not
+# the tool wrapped one.
+MY_MAKE_ENV+= ac_cv_path_SED=${TOOLS_SED}
+MY_MAKE_ENV+= lt_cv_path_SED=${TOOLS_SED}
+
+
+# The standard configuration options
+CONFIGURE_ARGS= --enable-languages=${LANGS:Q}
+CONFIGURE_ARGS+= --build=${BLD_TARGET}
+CONFIGURE_ARGS+= --prefix=${PKG_PREFIX:Q}
+CONFIGURE_ARGS+= --with-system-zlib
+CONFIGURE_ARGS+= --with-gmp=${BUILDLINK_PREFIX.gmp}
+CONFIGURE_ARGS+= --with-mpfr=${BUILDLINK_PREFIX.mpfr}
+CONFIGURE_ARGS+= --with-mpc=${BUILDLINK_PREFIX.mpcomplex}
+CONFIGURE_ARGS+= --with-libiconv-prefix=${PREFIX}
+CONFIGURE_ARGS+= --enable-shared
+CONFIGURE_ARGS+= --enable-threads=${THREAD_MODEL}
+CONFIGURE_ARGS+= --disable-bootstrap
+CONFIGURE_ARGS+= --disable-libmudflap
+CONFIGURE_ARGS+= --disable-libgomp
+CONFIGURE_ARGS+= --disable-libssp
+CONFIGURE_ARGS+= ${EXTRA_CONFARGS}
+
+# Automatic package list generation
+GENERATE_PLIST= cd ${DESTDIR}${PREFIX};
+GENERATE_PLIST+= ${FIND} * \( -type f -or -type l \) | ${SORT} -dr;
+
+
+post-extract:
+ # Personalize GNAT for each different machine
+ @${ECHO} "-=> GCC AUX ${OS_LABEL4VERS}" > ${REVFILE}
+
+ # Create new directories in preparation of applying diff files
+.if !empty(PKG_OPTIONS:Mcxx)
+ ${MKDIR} ${WRKSRC}/libstdc++-v3/config/locale/dragonfly
+ ${MKDIR} ${WRKSRC}/libstdc++-v3/config/os/bsd/dragonfly
+.endif
+
+ # Apply required composite diff files
+.for suffix in ${APPLY_DIFFS}
+ @${ECHO} "Applying composite patch diff-${suffix}"
+ @${PATCH} -d ${WRKSRC} -s -E < ${FILESDIR}/diff-${suffix}
+.endfor
+
+.if !empty(PKG_OPTIONS:Mstatic) || ${OPSYS} == "NetBSD"
+ @${ECHO} "Reconfiguring GCC Makefile to build compiler statically"
+ @${PATCH} -d ${WRKSRC} -s -E < ${FILESDIR}/diff-static-version
+.if empty(PKG_OPTIONS:Mnls)
+ @perl -pi -e 's;\@LIBICONV\@;${STICONV};' \
+ ${WRKSRC}/gcc/Makefile.in \
+ ${WRKSRC}/libcpp/Makefile.in \
+ ${WRKSRC}/gcc/ada/gcc-interface/Makefile.in
+.else
+ @perl -pi -e 's;\@LIBINTL\@;${STINTL} ${STICONV};' ${WRKSRC}/intl/config.intl.in
+ @perl -pi -e 's;\@LIBICONV\@;;' \
+ ${WRKSRC}/gcc/Makefile.in \
+ ${WRKSRC}/libcpp/Makefile.in \
+ ${WRKSRC}/gcc/ada/gcc-interface/Makefile.in
+.endif
+.endif
+
+.if ${INTENDED_COMPILER} == "BOOTSTRAP"
+ # Bootstrap compiler has statically linked z, gmp, mpc, mpfr and iconv
+ # The only shared lib is libc.so.7, so it should work for a long time.
+ # It is at least 28MB and doesn't come with shared libraries.
+
+ ${MKDIR} ${BOOTSTRAP_PREFIX}
+ mv ${BOOTSTRAP_PREFIX}/../bin ${BOOTSTRAP_PREFIX}
+ mv ${BOOTSTRAP_PREFIX}/../lib ${BOOTSTRAP_PREFIX}
+ mv ${BOOTSTRAP_PREFIX}/../libexec ${BOOTSTRAP_PREFIX}
+
+ # Bootstrap compiler malfunctions in NetBSD 6 unless include-fixed
+ # directory is removed first. It will eventually cause problems
+ # for DragonFly and Solaris as well, so just unconditionally kill it.
+ ${RM} -rf ${BOOTSTRAP_PREFIX}/lib/gcc/${BOOTSTRAP_TRIPLET}/include-fixed
+.endif
+
+
+pre-configure:
+# NetBSD's system compiler is not configured to use dl_iterate_phdr which is
+# required to build shared libraries if gnat-aux handles exceptions via
+# dl_iterate_phdr. Therefore the feature requires statically built
+# gmp, mpc, mpfr, and iconv libraries in order to build on NetBSD.
+# DragonFly introduced this functionality with 2.11, but it's possible the
+# shared libraries were built with an earlier compiler in the case of an
+# upgrade. We need to detect this situation on shared library builds and
+# stop the build if the libraries need to be rebuilt.
+.if ${OPSYS} == "DragonFly" && empty(PKG_OPTIONS:Mstatic)
+ @if ${GREP} dl_iterate_phdr ${LINK_HEADER} > /dev/null; then \
+ if ${GREP} ${OLD_EH} ${BASELIB}/libmpc.so > /dev/null; then \
+ ${ERROR_MSG} "${REBUILD_LIB} math/mpcomplex"; \
+ exit 101; \
+ fi; \
+ if ${GREP} ${OLD_EH} ${BASELIB}/libmpfr.so > /dev/null; then \
+ ${ERROR_MSG} "${REBUILD_LIB} math/mpfr"; \
+ exit 102; \
+ fi; \
+ if ${GREP} ${OLD_EH} ${BASELIB}/libgmp.so > /dev/null; then \
+ ${ERROR_MSG} "${REBUILD_LIB} devel/gmp"; \
+ exit 103; \
+ fi; \
+ if ${GREP} ${OLD_EH} ${BASELIB}/libiconv.so > /dev/null; then \
+ ${ERROR_MSG} "${REBUILD_LIB} converters/libiconv"; \
+ exit 104; \
+ fi; \
+ fi
+.endif
+
+
+do-configure:
+ ${MKDIR} ${BUILDDIR}
+ cd ${BUILDDIR} && ${SETENV} ${MY_CONFIGURE_ENV} \
+ ${CFG_SCRIPT} ${CONFIGURE_ARGS}
+
+
+do-build:
+ # The unlimited stacksize is for NetBSD64
+ cd ${BUILDDIR} && \
+ ${ULIMIT_CMD_stacksize} && \
+ ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -j${MAKE_JOBS:U1:Q} all
+
+
+do-test: build test-ada test-fortran test-objc test-cxx test-c
+
+test-ada:
+.if !empty(PKG_OPTIONS:Mtestsuite) && !empty(PKG_OPTIONS:Mada)
+.if (${OPSYS} == "NetBSD") && (${MACHINE_ARCH} == "x86_64")
+ # NetBSD has an extremely small default stacksize of 2MB, which is
+ # insufficient for the gnat.dg testsuite.
+ # specifically: entry_queues test on AMD64
+ # Unlimiting stack resources on i386-netbsdelf* will result in
+ # failure of gnat.dg/task_stack_align.adb execution test.
+ cd ${BUILDDIR} && \
+ ${ULIMIT_CMD_stacksize} && \
+ ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-ada
+.else
+ cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-ada
+.endif
+.endif
+
+test-fortran:
+.if !empty(PKG_OPTIONS:Mtestsuite) && !empty(PKG_OPTIONS:Mfortran)
+ cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-fortran
+.endif
+
+test-objc:
+.if !empty(PKG_OPTIONS:Mtestsuite) && !empty(PKG_OPTIONS:Mobjc)
+ cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-objc
+.endif
+
+test-cxx:
+.if !empty(PKG_OPTIONS:Mtestsuite) && !empty(PKG_OPTIONS:Mcxx)
+ # libstdc++ always ends with error status, so ignore it
+ cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk \
+ check-c++ || ${TRUE}
+.endif
+
+test-c:
+.if !empty(PKG_OPTIONS:Mtestsuite)
+ cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-c
+.endif
+
+
+do-install:
+ cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} install-strip \
+ DESTDIR=${DESTDIR}
+
+
+
+.include "../../converters/libiconv/buildlink3.mk"
+.include "../../devel/gmp/buildlink3.mk"
+.include "../../math/mpfr/buildlink3.mk"
+.include "../../math/mpcomplex/buildlink3.mk"
+.include "../../mk/bsd.pkg.mk"