head	1.3;
access;
symbols;
locks; strict;
comment	@# @;


1.3
date	2012.11.17.05.58.50;	author svnexp;	state Exp;
branches;
next	1.2;

1.2
date	2012.08.09.06.29.42;	author culot;	state Exp;
branches;
next	1.1;

1.1
date	2012.07.31.17.35.29;	author culot;	state Exp;
branches;
next	;


desc
@@


1.3
log
@Switch exporter over
@
text
@# New ports collection makefile for:  gcc-aux
# Date created:                       2012-07-15
# Whom:                               John Marino <draco@@marino.st>
#
# $FreeBSD: head/lang/gcc-aux/Makefile 302328 2012-08-09 06:29:42Z culot $
#

PORTNAME=	gcc-aux
PORTVERSION=	${SNAPSHOT}
PORTREVISION=	1
CATEGORIES=	lang
MASTER_SITES=	http://downloads.dragonlace.net/src/:boot \
		http://dragonlace.mirrors.ada.cx/src/:boot \
		${MASTER_SITE_GCC}
MASTER_SITE_SUBDIR=	releases/gcc-${GCC_VERSION}
DISTFILES=	gcc-${GCC_VERSION}.tar.bz2

MAINTAINER=	draco@@marino.st
COMMENT=	Version of GCC ${GCC_BRANCH} with full Ada support

.include "${.CURDIR}/Makefile.common"

LANGS=			c
APPLY_DIFFS=		core
INTENDED_COMPILER=	NATIVE
BOOTSTRAP_COMPILER=	NOT_REQUIRED
BOOTSTRAP_TRIPLET=	NOT_SET
FULL_GNATGCC=		NOT_SET

OPTIONS=	ADA        "Build Ada language" on
OPTIONS+=	CXX        "Build C++ language" on
OPTIONS+=	FORT       "Build Fortran language" on
OPTIONS+=	OBJC       "Build Objective-C language" on
OPTIONS+=	STATIC     "Build with no shared libraries other than libc" off
OPTIONS+=	TESTSUITE  "Activate test support" off
OPTIONS+=	NLS        "Native Language Support" off

.include <bsd.port.pre.mk>
.include <bsd.port.options.mk>

.if ${ARCH} == "amd64"
BLD_TARGET=		x86_64-aux-freebsd${OSREL}
OS_LABEL4VERS=		[FreeBSD64]
BOOTSTRAP_TRIPLET=	x86_64-bootstrap-freebsd8.1/4.6.0
BOOTSTRAP_COMPILER=	gnat-bootstrap.x86_64.freebsd.tar.bz2
.else
BLD_TARGET=		i386-aux-freebsd${OSREL}
OS_LABEL4VERS=		[FreeBSD]
BOOTSTRAP_TRIPLET=	i386-bootstrap-freebsd8.0/4.6.0
BOOTSTRAP_COMPILER=	gnat-bootstrap.i386.freebsd.tar.bz2
.endif

WRKSRC=			${WRKDIR}/gcc-${GCC_VERSION}
BUILDDIR=		${WRKDIR}/build
CFG_SCRIPT=		${WRKSRC}/configure
REVFILE=		${WRKSRC}/gcc/REVISION
BOOTSTRAP_PREFIX=	${WRKDIR}/bootstrap
DESTINY=		${WRKDIR}/destdir
PKG_PREFIX=		${PREFIX}/${PORTNAME}
STICONV=		${PREFIX}/lib/libiconv.a
STINTL=			\$${top_builddir}/../intl/libintl.a
USE_LDCONFIG=		${PREFIX}/${PORTNAME}/lib ${PREFIX}/${PORTNAME}/lib/gcc
MAN1=			cpp.1 gcc.1 gcov.1
MAN1PREFIX=		${PREFIX}/${PORTNAME}/share
MAN7PREFIX=		${PREFIX}/${PORTNAME}/share
NO_MANCOMPRESS=		yes

# If we find gnatmake and friends in a standard location, then we'll use this
# compiler instead of downloading the bootstrap.
.if exists (${PREFIX}/${PORTNAME}/bin/ada)
.if exists (${PREFIX}/${PORTNAME}/bin/gnatbind)
.if exists (${PREFIX}/${PORTNAME}/bin/gnatlink)
.if exists (${PREFIX}/${PORTNAME}/bin/gnatmake)
FULL_GNATGCC=${PREFIX}/${PORTNAME}/bin/ada
FULL_PATH=/sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/${PORTNAME}/bin:${PREFIX}/bin
.endif
.endif
.endif
.endif

# If FULL_GNATGCC is not set, we'll request the bootstrap compiler
.if ${FULL_GNATGCC} == "NOT_SET"
INTENDED_COMPILER=BOOTSTRAP
FULL_GNATGCC=${BOOTSTRAP_PREFIX}/bin/gnatgcc
FULL_PATH=${BOOTSTRAP_PREFIX}/bin:/sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/bin
DISTFILES+=	${BOOTSTRAP_COMPILER}:boot
.endif

# for port maintenance, invoke "make makesum PLUS_BOOTSTRAPS=1"
.if defined(PLUS_BOOTSTRAPS)
DISTFILES=gcc-${GCC_VERSION}.tar.bz2 \
   gnat-bootstrap.i386.freebsd.tar.bz2:boot \
   gnat-bootstrap.x86_64.freebsd.tar.bz2:boot
.endif

###########
##  Ada  ##
###########

.if defined(WITH_ADA)
LANGS+=		ada
APPLY_DIFFS+=	ada
.endif

###########
##  C++  ##
###########

.if defined(WITH_CXX)
LANGS+=		c++
APPLY_DIFFS+=	cxx
MAN1+=		g++.1
.endif

###############
##  Fortran  ##
###############

.if defined(WITH_FORT)
LANGS+=		fortran
APPLY_DIFFS+=	fortran
MAN1+=		gfortran.1
EXTRA_CONFIG+=	--enable-libquadmath
.else
EXTRA_CONFIG+=	--disable-libquadmath
.endif

###################
##  Objective-C  ##
###################

.if defined(WITH_OBJC)
LANGS+=		objc
.endif

#########################
##  Testsuite Support  ##
#########################

.if defined(WITH_TESTSUITE)
BUILD_DEPENDS=	dejagnu>=1.4:${PORTSDIR}/misc/dejagnu
APPLY_DIFFS+=	ada-testsuite
APPLY_DIFFS+=	fortran-testsuite
APPLY_DIFFS+=	cxx-testsuite
APPLY_DIFFS+=	gcc-testsuite
.endif

#################################
##  NATIONAL LANGUAGE SUPPORT  ##
#################################

.if defined(WITH_NLS)
BUILD_DEPENDS=	gettext>=0.18:${PORTSDIR}/devel/gettext
EXTRA_CONFIG+=	--enable-nls
.else
EXTRA_CONFIG+=	--disable-nls
.endif

###############################
##  STATICALLY BUILT OPTION  ##
###############################
#
# The "static" option is handled in the post-extract phase.

# Establish Ada-aware compiler for use
ADA_CONFIGURE_ENV=	CC=${FULL_GNATGCC}
ADA_CONFIGURE_ENV+=	PATH=${FULL_PATH}
ADA_MAKE_ENV=		PATH=${FULL_PATH}
ADA_MAKE_ENV+=		ICONVPREFIX=${PREFIX}
ADA_MAKE_ENV+=		LD_LIBRARY_PATH=${BUILDDIR}/gcc

# The standard configuration options
ADA_CONFIG_ARGS=	--enable-languages=${LANGS:Q}
ADA_CONFIG_ARGS+=	--build=${BLD_TARGET}
ADA_CONFIG_ARGS+=	--prefix=${PKG_PREFIX:Q}
ADA_CONFIG_ARGS+=	--with-system-zlib
ADA_CONFIG_ARGS+=	--with-gmp=${PREFIX}
ADA_CONFIG_ARGS+=	--with-mpfr=${PREFIX}
ADA_CONFIG_ARGS+=	--with-mpc=${PREFIX}
ADA_CONFIG_ARGS+=	--with-libiconv-prefix=${PREFIX}
ADA_CONFIG_ARGS+=	--enable-shared
ADA_CONFIG_ARGS+=	--enable-threads=posix
ADA_CONFIG_ARGS+=	--disable-bootstrap
ADA_CONFIG_ARGS+=	--disable-libmudflap
ADA_CONFIG_ARGS+=	--disable-libgomp
ADA_CONFIG_ARGS+=	--disable-libssp
ADA_CONFIG_ARGS+=	${EXTRA_CONFIG}

post-extract:
	# Personalize GNAT for each different machine
	@@${ECHO} "-=> GNAT AUX ${OS_LABEL4VERS}" > ${REVFILE}

	# Create new directories in preparation of applying diff files
.if defined(WITH_CXX)
	${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

	# Update LINK_SPEC to add gcc-aux lib runpath in every binary
	@@${ECHO} "Configuring LINK_SPEC runpath"
	@@perl -pi -e 's;\@@PREFIX\@@;${PREFIX};' \
	  ${WRKSRC}/gcc/config/i386/freebsd64.h \
	  ${WRKSRC}/gcc/config/i386/freebsd.h

.if defined(WITH_STATIC)
	@@${ECHO} "Reconfiguring GCC Makefile to build compiler statically"
	@@${PATCH} -d ${WRKSRC} -s -E < ${FILESDIR}/diff-static-version
.if defined(WITH_NLS)
	@@${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
.else
	@@${PERL} -pi -e 's;\@@LIBICONV\@@;${STICONV};' \
	  ${WRKSRC}/gcc/Makefile.in \
	  ${WRKSRC}/libcpp/Makefile.in \
	  ${WRKSRC}/gcc/ada/gcc-interface/Makefile.in
.endif
.endif

.if ${INTENDED_COMPILER} == "BOOTSTRAP"
	${MKDIR} ${BOOTSTRAP_PREFIX}
	${MV} ${BOOTSTRAP_PREFIX}/../bin ${BOOTSTRAP_PREFIX}
	${MV} ${BOOTSTRAP_PREFIX}/../lib ${BOOTSTRAP_PREFIX}
	${MV} ${BOOTSTRAP_PREFIX}/../libexec ${BOOTSTRAP_PREFIX}

	# 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.

.if ${OSVERSION} > 900000
	# Since June 7, bootstrap compiler's include-fixed headers have been
	# incompatible with FreeBSD 9.0-CURRENT
	${RM} -rf ${BOOTSTRAP_PREFIX}/lib/gcc/${BOOTSTRAP_TRIPLET}/include-fixed
.endif
.endif

do-configure:
	${MKDIR} ${BUILDDIR}
	cd ${BUILDDIR} && ${SETENV} ${ADA_CONFIGURE_ENV} \
	${CFG_SCRIPT} ${ADA_CONFIG_ARGS}

do-build:
	cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} ${_MAKE_JOBS} all

test: build test-ada test-fortran test-objc test-cxx test-c

test-ada:
.if defined(WITH_ADA) && defined(WITH_TESTSUITE)
	cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} -sk check-ada
.endif

test-fortran:
.if defined(WITH_FORT) && defined(WITH_TESTSUITE)
	cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} -sk check-fortran
.endif

test-objc:
.if defined(WITH_OBJC) && defined(WITH_TESTSUITE)
	cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} -sk check-objc
.endif

test-cxx:
.if defined(WITH_CXX) && defined(WITH_TESTSUITE)
	# libstdc++ testsuite will break every time, TRUE used to force continuation
	cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} -sk check-c++ || true
.endif

test-c:
.if defined(WITH_TESTSUITE)
	cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} -sk check-c
.endif

do-install:
	cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} install-strip DESTDIR=${DESTINY}
	${CP} -pr ${DESTINY}${PREFIX}/ ${PREFIX}/

post-install:
	${RM} -f ${WRKDIR}/PLIST.all
	${RM} -rf ${DESTINY}/man
	${MV} ${DESTINY}${PREFIX}/${PORTNAME}/share/man ${DESTINY}/
	cd ${DESTINY}; ${FIND} man -type d \
	   -exec ${MKDIR} ${DESTINY}${PREFIX}/${PORTNAME}/share/{} \;
	cd ${DESTINY}${PREFIX}; ${FIND} ${PORTNAME} \( -type f -or -type l \) | \
	   ${SORT} >> ${WRKDIR}/PLIST.all
	cd ${DESTINY}${PREFIX}; ${FIND} ${PORTNAME}  -type d | ${SORT} -r | \
	   ${SED} -e 's/^/@@dirrm /g' >> ${WRKDIR}/PLIST.all

	cd ${WRKDIR}; ${SED} -i -e "/PLIST.all/ r PLIST.all" ${TMPPLIST}
.if ${OSVERSION} > 900000 && ${OSVERSION} < 900507
	@@${ECHO_MSG} "===================================================================="
	@@${ECHO_MSG} " NOTICE REGARDING ADA TASKING ON FREEBSD 9.0:"
	@@${ECHO_MSG} " Due to a bug in the FreeBSD 9.0 threading library, an exiting task"
	@@${ECHO_MSG} " panics with the message: 'thread exits with resources held!'."
	@@${ECHO_MSG} " This behavior breaks Ada tasking.  These are two solutions:"
	@@${ECHO_MSG} " 1) Upgrade to FreeBSD 9.1 or higher"
	@@${ECHO_MSG} " 2) Patch and rebuild thread library as described in"
	@@${ECHO_MSG} "    http://www.dragonlace.net/posts/F9_Fix/"
	@@${ECHO_MSG} "===================================================================="
.endif

.include <bsd.port.post.mk>
@


1.2
log
@SVN rev 302328 on 2012-08-09 06:29:42Z by culot

- Update diff-core patch to allow faster symbol matching on FreeBSD>=9
- Fix shared libraries issues by automatically adding rpath to generated
  binaries
- Bump portrevision

PR:		ports/170439
Submitted by:	John Marino <draco@@marino.st> (maintainer)
@
text
@d5 1
a5 1
# $FreeBSD$
@


1.1
log
@SVN rev 301801 on 2012-07-31 17:35:29Z by culot

gcc-aux is the successor to the gcc-4.6-based lang/gnat-aux.  Originally it
was planned for lang/gnat-aux to upgrade to version 4.7, then 4.8, etc.
However, some cross-compilers are based on it and there are some significant
differences between gcc 4.6 and 4.7. lang/gnat-aux also installs with a
${LOCALBASE} of /usr/local which has a high potential of file conflicts with
other lang/ compilers. Another reason for keeping them separate is just about
every Ada program will need to be patched for it due to new binding
interpretations stemming from Ada-2012 work. Simply updating gnat-aux would
break them all instantly.

The AUX compiler supports several languages: Ada, C, C++, Fortran and
Objective-C.  Since Ada support must be built by an Ada-capable compiler, only
platforms for which a bootstrap compiler is available can build the AUX
compiler.

The AUX compiler is based on release versions of the Free Software Foundation's
GNU Compiler Collection.  It carries with it the GMGPL license, the modified
version of the GPL that exempts generic instantiation from resulting in a
GPL-licensed executable.  It also carries the GCC Runtime Library Exception, so
the resulting binaries have no licensing requirements.  Binaries produced by
the AUX compiler should be legally handled the same as binaries produced by any
FSF compiler.

The AUX GNAT compiler implements the full Ada-83, Ada-95, Ada-2005 standard and
provides a partial implementation of Ada-2012.

WWW: http://www.dragonlace.net/

PR:		ports/169951
Submitted by:	John Marino <draco@@marino.st>
@
text
@d10 1
d205 6
@

