diff options
Diffstat (limited to 'lang/gcc49')
45 files changed, 2769 insertions, 0 deletions
diff --git a/lang/gcc49/DESCR b/lang/gcc49/DESCR new file mode 100644 index 00000000000..0262b0919e3 --- /dev/null +++ b/lang/gcc49/DESCR @@ -0,0 +1,3 @@ +The GNU Compiler Collection (GCC) includes front ends for C, C++, Objective-C, +Fortran, Java, and Go, as well as libraries for these languages (libstdc++, +libgcj,...). diff --git a/lang/gcc49/Makefile b/lang/gcc49/Makefile new file mode 100644 index 00000000000..f35c79886fe --- /dev/null +++ b/lang/gcc49/Makefile @@ -0,0 +1,162 @@ +# $NetBSD: Makefile,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +GCC_PKGNAME= gcc49 +.include "version.mk" + +DISTNAME= gcc-${GCC49_DIST_VERSION} +PKGNAME= ${GCC_PKGNAME}-${GCC49_DIST_VERSION} + +## When bumping the PKGREVISION of this package the PKGREVISION of +## lang/gcc49-libs needs to be bump to be at least 1 more than the +## PKGREVISION of this package! +#PKGREVISION= + +CATEGORIES= lang +MASTER_SITES= ${MASTER_SITE_GNU:=gcc/gcc-${GCC49_DIST_VERSION}/} +EXTRACT_SUFX= .tar.bz2 + +MAINTAINER= pkgsrc-users@NetBSD.org +HOMEPAGE= http://gcc.gnu.org/ +COMMENT= The GNU Compiler Collection (GCC) - 4.9 Release Series +LICENSE= gnu-gpl-v2 AND gnu-gpl-v3 AND gnu-lgpl-v2 AND gnu-lgpl-v3 + +DISTFILES= ${DEFAULT_DISTFILES} +EXTRACT_ONLY= ${DEFAULT_DISTFILES} + +NOT_FOR_PLATFORM= Interix-*-* + +USE_LANGUAGES= c c++ +USE_TOOLS+= gmake makeinfo sed:run + +GNU_CONFIGURE= yes +## Build outside ${WRKSRC} +OBJDIR= ../build +CONFIGURE_DIRS= ${OBJDIR} +CONFIGURE_SCRIPT= ../${DISTNAME}/configure +GCC_SUBPREFIX= ${GCC_PKGNAME} +GCC_PREFIX= ${PREFIX}/${GCC_SUBPREFIX} +GCC_TARGET_MACHINE?= ${MACHINE_GNU_PLATFORM} +GNU_CONFIGURE_PREFIX= ${GCC_PREFIX} +INFO_FILES= yes + +UNLIMIT_RESOURCES+= datasize +UNLIMIT_RESOURCES+= stacksize + +SUBST_CLASSES+= vars +SUBST_STAGE.vars= pre-configure +SUBST_FILES.vars= gcc/Makefile.in +SUBST_VARS.vars= GCC_TARGET_MACHINE + +.include "../../mk/bsd.prefs.mk" + +LANGS= c + +# In some cases LINKER_RPATH_FLAG needs a trailing space. +LINKER_RPATH_FLAG:= ${LINKER_RPATH_FLAG:S/-rpath/& /} + +## The Library rpath to use in end programs. +LDFLAGS_FOR_TARGET= ${LDFLAGS:M${COMPILER_RPATH_FLAG}*:N*/usr/lib*} + +# The "-static-libstdc++ -static-libgcc" flags are normally added to the +# boot-ldflags by configure but because we are supply the boot-ldflags +# we mash supply them. +BOOT_LDFLAGS= -static-libstdc++ -static-libgcc ${LDFLAGS_FOR_TARGET} +# Needed on Darwin when LDFLAGS point to a SDK +BOOT_LDFLAGS+= ${LDFLAGS:M-Wl,-syslibroot*} + +## For target librarys and libjava programs. +CONFIGURE_ENV+= LDFLAGS_FOR_TARGET=${LDFLAGS_FOR_TARGET:Q} + +CONFIGURE_ARGS+= --enable-languages=${LANGS:Q} +CONFIGURE_ARGS+= --enable-shared +CONFIGURE_ARGS+= --enable-long-long +CONFIGURE_ARGS+= --with-local-prefix=${GCC_PREFIX:Q} +CONFIGURE_ARGS+= --enable-libssp +CONFIGURE_ARGS+= --enable-threads=posix +CONFIGURE_ARGS+= --with-boot-ldflags=${BOOT_LDFLAGS:Q} +.if ${OPSYS} == "NetBSD" +CONFIGURE_ARGS+= --with-gnu-ld --with-ld=/usr/bin/ld +CONFIGURE_ARGS+= --with-gnu-as --with-as=/usr/bin/as +MAKE_ENV+= ac_cv_func_clock_gettime=yes +MAKE_ENV+= ac_cv_func_gethostbyname_r=no +.endif +.if ${OPSYS} == "DragonFly" +CONFIGURE_ARGS+= --disable-bootstrap +.endif +.if ${OPSYS} == "Darwin" +# See ${WRKSRC}/libgcc/config/t-slibgcc-darwin: It uses strip(1) to +# create a stub library, not just to remove symbols, so we must not +# let strip(1) be a no-op regardless of ${INSTALL_UNSTRIPPED} or the +# build fails for missing files. +CONFIGURE_ARGS+= STRIP_FOR_TARGET=${TOOLS_PLATFORM.strip} +.endif + +.if !empty(MACHINE_PLATFORM:MNetBSD-*-i386) || !empty(MACHINE_PLATFORM:MLinux-*-i386) +CONFIGURE_ARGS+= --with-arch=i486 --with-tune=i486 +.endif + +.include "options.mk" + +# ${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. +MAKE_ENV+= ac_cv_path_SED=${TOOLS_SED} +MAKE_ENV+= lt_cv_path_SED=${TOOLS_SED} + +.if ${OPSYS} == "SunOS" +# Determine whether to use binutils +. if exists(/usr/sfw/bin/gobjdump) +CONFIGURE_ENV+= OBJDUMP=/usr/sfw/bin/gobjdump +. endif +. if exists(/usr/bin/ld) +CONFIGURE_ARGS+= --without-gnu-ld --with-ld=/usr/bin/ld +. else +CONFIGURE_ARGS+= --without-gnu-ld --with-ld=/usr/ccs/bin/ld +. endif +. if exists(/usr/sfw/bin/gas) +CONFIGURE_ARGS+= --with-gnu-as --with-as=/usr/sfw/bin/gas +. elif exists(/usr/ccs/bin/as) +CONFIGURE_ARGS+= --without-gnu-as --with-as=/usr/ccs/bin/as +. else +BUILDLINK_DEPMETHOD.binutils= full +. include "../../devel/binutils/buildlink3.mk" +CONFIGURE_ARGS+= --with-gnu-as --with-as=${PREFIX}/bin/gas +. endif +.endif + +pre-configure: + ${RUN} cd ${WRKSRC} && ${MKDIR} ${OBJDIR} + +TEST_TARGET= -k check || ${TRUE} +pre-test: + ${RUN} \ + if runtest --version >/dev/null 2>/dev/null ; then \ + : ; \ + else \ + ${ECHO} "ERROR: Please install devel/dejagnu in order to run the test suite." ; \ + exit 1 ; \ + fi +post-test: + ${RUN} cd ${WRKSRC} && cd ${OBJDIR} && \ + ${SHELL} ${WRKSRC}/contrib/test_summary >${WRKDIR}/test_summary.log + @${INFO_MSG} "Test summary are available in ${WRKDIR}/test_summary.log" + +post-install: + ${TEST} -f ${DESTDIR}${GCC_PREFIX}/bin/cc || \ + ( cd ${DESTDIR}${GCC_PREFIX}/bin ; ${LN} -f gcc cc ) +.if !empty(PKG_OPTIONS:Mgcc-java) + ${RM} -f ${DESTDIR}${JAVA_HOME}/bin/javadoc + ${RM} -f ${DESTDIR}${JAVA_HOME}/jre/lib/${JAVA_ARCH}/libjawt.so +.endif +.if !empty(MACHINE_PLATFORM:MSunOS-*-*86*) && ${OS_VERSION} != "5.11" + ${SH} files/values.c ${DESTDIR}${GCC_PREFIX}/bin/gcc -m32 || ${TRUE} + ${SH} files/values.c ${DESTDIR}${GCC_PREFIX}/bin/gcc -m64 || ${TRUE} +.endif + +GENERATE_PLIST+= \ + cd ${DESTDIR}${PREFIX} && \ + ${FIND} ${GCC_SUBPREFIX} \( -type f -o -type l \) -print | ${SORT} ; + +.include "../../mk/dlopen.buildlink3.mk" +.include "../../mk/pthread.buildlink3.mk" +.include "../../mk/bsd.pkg.mk" diff --git a/lang/gcc49/PLIST.java b/lang/gcc49/PLIST.java new file mode 100644 index 00000000000..56d6a698607 --- /dev/null +++ b/lang/gcc49/PLIST.java @@ -0,0 +1,42 @@ +@comment $NetBSD: PLIST.java,v 1.1 2014/09/04 18:43:11 jperkin Exp $ +bin/${JAVA_NAME}-appletviewer +bin/${JAVA_NAME}-jar +bin/${JAVA_NAME}-jarsigner +bin/${JAVA_NAME}-java +bin/${JAVA_NAME}-javah +bin/${JAVA_NAME}-keytool +bin/${JAVA_NAME}-native2ascii +bin/${JAVA_NAME}-orbd +bin/${JAVA_NAME}-rmic +bin/${JAVA_NAME}-rmid +bin/${JAVA_NAME}-rmiregistry +bin/${JAVA_NAME}-serialver +bin/${JAVA_NAME}-tnameserv +java/${JAVA_NAME}/bin/appletviewer +java/${JAVA_NAME}/bin/jar +java/${JAVA_NAME}/bin/jarsigner +java/${JAVA_NAME}/bin/java +java/${JAVA_NAME}/bin/javah +java/${JAVA_NAME}/bin/keytool +java/${JAVA_NAME}/bin/native2ascii +java/${JAVA_NAME}/bin/orbd +java/${JAVA_NAME}/bin/rmic +java/${JAVA_NAME}/bin/rmid +java/${JAVA_NAME}/bin/rmiregistry +java/${JAVA_NAME}/bin/serialver +java/${JAVA_NAME}/bin/tnameserv +java/${JAVA_NAME}/include/jawt.h +java/${JAVA_NAME}/include/jni.h +java/${JAVA_NAME}/include/linux/jawt_md.h +java/${JAVA_NAME}/include/linux/jni_md.h +java/${JAVA_NAME}/jre/bin/java +java/${JAVA_NAME}/jre/bin/keytool +java/${JAVA_NAME}/jre/bin/orbd +java/${JAVA_NAME}/jre/bin/rmid +java/${JAVA_NAME}/jre/bin/rmiregistry +java/${JAVA_NAME}/jre/bin/tnameserv +java/${JAVA_NAME}/jre/lib/${JAVA_ARCH}/client/libjvm.so +java/${JAVA_NAME}/jre/lib/${JAVA_ARCH}/server/libjvm.so +java/${JAVA_NAME}/jre/lib/rt.jar +java/${JAVA_NAME}/jre/lib/security/java.security +java/${JAVA_NAME}/lib/tools.jar diff --git a/lang/gcc49/buildlink3.mk b/lang/gcc49/buildlink3.mk new file mode 100644 index 00000000000..74dc2a0e8a4 --- /dev/null +++ b/lang/gcc49/buildlink3.mk @@ -0,0 +1,34 @@ +# $NetBSD: buildlink3.mk,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +BUILDLINK_TREE+= gcc49 + +.if !defined(GCC49_BUILDLINK3_MK) +GCC49_BUILDLINK3_MK:= + +BUILDLINK_API_DEPENDS.gcc49+= gcc49>=${_GCC_REQD} +BUILDLINK_ABI_DEPENDS.gcc49+= gcc49>=4.9.1 +BUILDLINK_PKGSRCDIR.gcc49= ../../lang/gcc49 +BUILDLINK_DEPMETHOD.gcc49?= build + +FIND_PREFIX:= BUILDLINK_PREFIX.gcc49=gcc49 +.include "../../mk/find-prefix.mk" +BUILDLINK_PASSTHRU_DIRS+= ${BUILDLINK_PREFIX.gcc49}/gcc49 + +BUILDLINK_FILES.gcc49= #empty +BUILDLINK_AUTO_VARS.gcc49= no + +# Packages that link against shared libraries need a full dependency. +.if defined(_USE_GCC_SHLIB) +DEPENDS+= {gcc49,gcc49-libs}>=${_GCC_REQD}:../../lang/gcc49-libs +.endif + +pkgbase := gcc49 +.include "../../mk/pkg-build-options.mk" +.if !empty(PKG_BUILD_OPTIONS.gcc49:Mgcc-java) +.include "../../devel/zlib/buildlink3.mk" +.endif + +.include "../../mk/dlopen.buildlink3.mk" +.include "../../mk/pthread.buildlink3.mk" +.endif # GCC49_BUILDLINK3_MK +BUILDLINK_TREE+= -gcc49 diff --git a/lang/gcc49/distinfo b/lang/gcc49/distinfo new file mode 100644 index 00000000000..53582fbbccc --- /dev/null +++ b/lang/gcc49/distinfo @@ -0,0 +1,45 @@ +$NetBSD: distinfo,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +SHA1 (ecj-4.5.jar) = 58c1d79c64c8cd718550f32a932ccfde8d1e6449 +RMD160 (ecj-4.5.jar) = d3f4da657f086b6423f74e93f001132f4855368a +Size (ecj-4.5.jar) = 1470676 bytes +SHA1 (gcc-4.9.1.tar.bz2) = 3f303f403053f0ce79530dae832811ecef91197e +RMD160 (gcc-4.9.1.tar.bz2) = 7a829a260648a190afa1d6c616c78ddc861f4f7d +Size (gcc-4.9.1.tar.bz2) = 89854120 bytes +SHA1 (patch-contrib_make__sunver.pl) = 49cbd1a83c9b65d07a373262fcf6f71069283d2e +SHA1 (patch-gcc_Makefile.in) = 45c7a61cf22d02299d2308ba34f0ceb272ad5c5e +SHA1 (patch-gcc_config.gcc) = f8dc39c70aff31b1b9479895a14710ee9b168b3c +SHA1 (patch-gcc_config_dragonfly-stdint.h) = 249e78bf2171fcd29eae498e41a12bf747015a19 +SHA1 (patch-gcc_config_dragonfly.h) = 5d671b7cdf8b8e3798dd7ec47f56708aa3548f38 +SHA1 (patch-gcc_config_dragonfly.opt) = b01bee26978f7feb62fc2ec21186449ccaea0db7 +SHA1 (patch-gcc_config_i386_dragonfly.h) = 5756b62791273f77866f06be1df0c267dc90a2ee +SHA1 (patch-gcc_config_netbsd-stdint.h) = fc430c80adda9d3f58eea47816338f697a659889 +SHA1 (patch-gcc_configure) = eb52890725d2eabb200275b6cb61fd86d976ee31 +SHA1 (patch-gcc_fortran_f95-lang.c) = 9dbac16c146821eed9b06e1e9f0da85ff5c4ee75 +SHA1 (patch-gcc_ginclude_stddef.h) = 8af3e4b4058fc623c61e91f5771699f0ce679957 +SHA1 (patch-include_libiberty.h) = 5254c6a421ae16c71571820f6f07906367f042ba +SHA1 (patch-libcilkrts_runtime_os-unix.c) = 165e736decbc6e0e3d905d418d71cf4873927925 +SHA1 (patch-libgcc_config.host) = c929bfbd17fcef36ec4f0eeebf27ceca7060d24c +SHA1 (patch-libgcc_config_i386_dragonfly-unwind.h) = 5a7b12ece06cd7ad44191ea803ba703bd1464cb8 +SHA1 (patch-libgcc_config_t-slibgcc-darwin) = 5e0d2df4622281f3f9bca3e948d0c7b209fab04c +SHA1 (patch-libgcc_crtstuff.c) = 5ae6b74c6a402cce93b71a7c8100376ebcb20162 +SHA1 (patch-libgcc_unwind-dw2-fde-dip.c) = 4ae2f6280563c0cdc1e59d7516d9f74eb748be5e +SHA1 (patch-libgfortran_configure) = 398088715086a0c7a0398590d2de3a8107e35a0d +SHA1 (patch-libgo_Makefile.in) = dd3429a0a87f024f1709b8dda4758080e4525e71 +SHA1 (patch-libgo_runtime_proc.c) = ba716b2772a83a0c3f0d77d67a40c5a3ac2a3d33 +SHA1 (patch-libiberty_Makefile.in) = a5ab85457d69f7bc9fa637ab830c13920d6c4c7c +SHA1 (patch-libjava_Makefile.in) = a7bc03e3b01f12844106e831dc281a049ee6f906 +SHA1 (patch-libjava_boehm.cc) = b18bc9d410a62543583c77e011f50b86f41ca18a +SHA1 (patch-libjava_configure) = 449e54fd6fe4357bbd3e378cd6bae5a98fb47dac +SHA1 (patch-libjava_contrib_rebuild-gcj-db.in) = bb01d738fc7db05046ae37e8ade32574de1d8297 +SHA1 (patch-libstdc++-v3_config_locale_dragonfly_c__locale.cc) = 633877e5332f4b37d34a394123c29a155576b1dc +SHA1 (patch-libstdc++-v3_config_locale_dragonfly_ctype__members.cc) = 91551840d6482bffa0e032b36d00d8e838920a4c +SHA1 (patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__base.h) = a9c5f9017fe88a25d0c6be217b79ce7eac402b38 +SHA1 (patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__configure__char.cc) = e915ac238afdd24f0ff9ebe5063a1fa54dcdd195 +SHA1 (patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__inline.h) = d66a3e3461bfdf0ee27c382f75f79c701c39dd08 +SHA1 (patch-libstdc++-v3_config_os_bsd_dragonfly_os__defines.h) = eb3304dc7e1e3680e21b826668cc13d0eb19e7a4 +SHA1 (patch-libstdc++-v3_config_os_bsd_netbsd_ctype__base.h) = 79542a20d50d7bfb1feee917177053f0d193cad3 +SHA1 (patch-libstdc++-v3_config_os_bsd_netbsd_ctype__configure__char.cc) = 83d0021b595832c4f5dbe99171a200a943c54ed2 +SHA1 (patch-libstdc++-v3_config_os_bsd_netbsd_ctype__inline.h) = 9af44e44d78d1db0a416f015b489764e8ebd3002 +SHA1 (patch-libstdc++-v3_configure) = a76369b2942ed39a4235417031c08f81d96dfa7a +SHA1 (patch-libstdc++-v3_configure.host) = 2d6b7037ab28cbd21f1aa66551384934f32df0ac diff --git a/lang/gcc49/files/values.c b/lang/gcc49/files/values.c new file mode 100644 index 00000000000..75f00587342 --- /dev/null +++ b/lang/gcc49/files/values.c @@ -0,0 +1,64 @@ +#if 0 /* $NetBSD: values.c,v 1.1 2014/09/04 18:43:11 jperkin Exp $ */ +# +# This is Solaris x86 specific GCC run-time environment patch, which +# makes it possible to reliably deploy .init snippets. Trouble is that +# Solaris linker erroneously pads .init segment with zeros [instead of +# nops], which is bound to SEGV early upon program start-up. This bug +# was recognized by GCC team [it is mentioned in source code], but +# workaround apparently and obviously erroneously slipped away in some +# newer GCC release. This patch compensates for this mishap by dropping +# modified values-X*.o into GCC installation tree. Object modules in +# question are normally provided by Sun and linked prior crtbegin.o. +# Modified versions are additionally crafted with custom .init segment, +# which does some magic:-) +# <appro@fy.chalmers.se> +set -e +gcc=gcc +if [[ "x$1" = x*gcc ]]; then + gcc=$1; shift +fi +gcc_dir=`${gcc} "$@" -print-libgcc-file-name` +gcc_dir=${gcc_dir%/*} #*/ +set -x +${gcc} "$@" -c -o $gcc_dir/values-Xa.o -DXa $0 +${gcc} "$@" -c -o $gcc_dir/values-Xc.o -DXc $0 +${gcc} "$@" -c -o $gcc_dir/values-Xt.o -DXt $0 +exit +#endif + +#include <math.h> + +#if defined(Xa) +const enum version _lib_version = ansi_1; +#elif defined(Xc) +const enum version _lib_version = strict_ansi; +#elif defined(Xt) +const enum version _lib_version = c_issue_4; +#else +#error "compile by issuing 'ksh -f values.c [gcc] [-m64]'" +#endif + +#if defined(__x86_64__) +asm("\n" +".section .init\n" +".align 1\n" +" leaq 1f(%rip),%rax\n" +"1: cmpl $0,2f-1b(%rax)\n" +" jne 2f\n" +" jmp 2f+5\n" +" .skip 9\n" /* pad up to 0x1b bytes */ +"2:\n" +); +#else +asm("\n" +".section .init\n" +".align 1\n" +" call 1f\n" +"1: popl %eax\n" +" cmpl $0,2f-1b(%eax)\n" +" jne 2f\n" +" jmp 2f+5\n" +" .skip 10\n" /* pad up to 0x1b bytes */ +"2:\n" +); +#endif diff --git a/lang/gcc49/options.mk b/lang/gcc49/options.mk new file mode 100644 index 00000000000..64aef408fec --- /dev/null +++ b/lang/gcc49/options.mk @@ -0,0 +1,171 @@ +# $NetBSD: options.mk,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +PKG_OPTIONS_VAR= PKG_OPTIONS.${GCC_PKGNAME} +PKG_SUPPORTED_OPTIONS= nls gcc-inplace-math gcc-c++ gcc-fortran gcc-java \ + gcc-go gcc-objc gcc-objc++ +PKG_SUGGESTED_OPTIONS= gcc-c++ gcc-fortran gcc-objc gcc-objc++ + +.if ${OPSYS} == "NetBSD" || ${OPSYS} == "Linux" +PKG_SUGGESTED_OPTIONS+= nls gcc-java +.elif ${OPSYS} == "DragonFly" +PKG_SUGGESTED_OPTIONS+= nls +.elif ${OPSYS} == "SunOS" +PKG_SUGGESTED_OPTIONS+= gcc-go gcc-inplace-math +.else +PKG_SUGGESTED_OPTIONS+= gcc-java +.endif + +### +### Determine if multilib is avalible. +### +MULTILIB_SUPPORTED?= unknown +.if !empty(MACHINE_PLATFORM:MLinux-*-x86_64) +. if exists(/usr/include/gnu/stubs-64.h) && \ + !exists(/usr/include/gnu/stubs-32.h) +MULTILIB_SUPPORTED=No +. else +MULTILIB_SUPPORTED=Yes +. endif +.endif +.if !empty(MULTILIB_SUPPORTED:M[Yy][Ee][Ss]) +PKG_SUPPORTED_OPTIONS+= gcc-multilib +PKG_SUGGESTED_OPTIONS+= gcc-multilib +.endif + +.include "../../mk/bsd.options.mk" + +### +### Native Language Support +### +.if !empty(PKG_OPTIONS:Mnls) +USE_TOOLS+= msgfmt +CONFIGURE_ARGS+= --enable-nls +CONFIGURE_ARGS+= --with-libiconv-prefix=${BUILDLINK_PREFIX.iconv} +MAKE_ENV+= ICONVPREFIX=${BUILDLINK_PREFIX.iconv} +.include "../../converters/libiconv/buildlink3.mk" +.include "../../devel/gettext-lib/buildlink3.mk" +.else +CONFIGURE_ARGS+= --disable-nls +.endif + +### +### Multilib Support +### +.if (!empty(MULTILIB_SUPPORTED:M[Yy][Ee][Ss]) && \ + empty(PKG_OPTIONS:Mgcc-multilib) ) || \ + !empty(MULTILIB_SUPPORTED:M[Nn][Oo]) +CONFIGURE_ARGS+= --disable-multilib +.endif + +### +### Build math libraries in place +### +.if !empty(PKG_OPTIONS:Mgcc-inplace-math) +. include "../../devel/gmp/inplace.mk" +. include "../../math/mpcomplex/inplace.mk" +. include "../../math/mpfr/inplace.mk" +.else +CONFIGURE_ARGS+= --with-gmp=${BUILDLINK_PREFIX.gmp} +CONFIGURE_ARGS+= --with-mpc=${BUILDLINK_PREFIX.mpcomplex} +CONFIGURE_ARGS+= --with-mpfr=${BUILDLINK_PREFIX.mpfr} +LIBS.SunOS+= -lgmp +. include "../../devel/gmp/buildlink3.mk" +. include "../../math/mpcomplex/buildlink3.mk" +. include "../../math/mpfr/buildlink3.mk" +.endif + +### +### Optional languages +### Ada could be added although there is a bootstrapping issue. See +### ../gcc34-ada for guidance +### + +.if !empty(PKG_OPTIONS:Mgcc-objc++) +. if empty(PKG_OPTIONS:Mgcc-c++) +PKG_OPTIONS+= gcc-c++ +. endif +. if empty(PKG_OPTIONS:Mgcc-objc) +PKG_OPTIONS+= gcc-objc +. endif +LANGS+= obj-c++ +.endif + +.if !empty(PKG_OPTIONS:Mgcc-objc) +LANGS+= objc +.endif + +.if !empty(PKG_OPTIONS:Mgcc-java) +. if empty(PKG_OPTIONS:Mgcc-c++) +PKG_OPTIONS+= gcc-c++ +. endif + +LANGS+= java + +# Add the Eclipse Java compiler for to parse `.java' source files. +ECJ_JAR= ecj-4.5.jar +SITES.${ECJ_JAR}= ftp://sourceware.org/pub/java/ +DISTFILES+= ${ECJ_JAR} +CONFIGURE_ARGS+= --with-ecj-jar=${DISTDIR:Q}/${ECJ_JAR:Q} + +JAVA_NAME= ${GCC_PKGNAME} +JAVA_HOME= ${PREFIX}/java/${JAVA_NAME} +JAVA_WRAPPERS= appletviewer jar jarsigner java javah keytool \ + native2ascii orbd rmic rmid rmiregistry serialver \ + tnameserv + +JAVA_ARCH= ${MACHINE_ARCH:S/x86_64/amd64/} + +PLIST_SRC+= PLIST.java +PLIST_SUBST+= JAVA_NAME=${JAVA_NAME:Q} +PLIST_SUBST+= JAVA_ARCH=${JAVA_ARCH:Q} + +# Create a JPackage compatible SDK environment. +CONFIGURE_ARGS+= --enable-java-home +CONFIGURE_ARGS+= --with-os-directory=${LOWER_OPSYS:Q} +CONFIGURE_ARGS+= --with-arch-directory=${JAVA_ARCH:Q} +CONFIGURE_ARGS+= --with-jvm-root-dir=${JAVA_HOME:Q} +CONFIGURE_ARGS+= --with-java-home=${JAVA_HOME:Q} + +REPLACE_PYTHON= libjava/contrib/aot-compile.in + +USE_TOOLS+= unzip zip:run gmake:run +CONFIGURE_ARGS+= --with-system-zlib + +# libjava/contrib/aotcompile.py.in stores the path to a 'make' program so +# we need to make sure we give it the installed 'make' and not the tool +# wrapped one. +CONFIGURE_ENV+= PKGSRC_MAKE=${TOOLS_PATH.gmake} +MAKE_ENV+= PKGSRC_MAKE=${TOOLS_PATH.gmake} + +# fastjar-0.93 from pkgsrc/archivers/fastjar seems to trigger a build +# failure (seen on NetBSD-5.0/i386) when building java. So in case +# the fastjar package is installed, make sure the configure script +# doesn't pick it up. +CONFIGURE_ENV+= JAR=no +MAKE_ENV+= JAR=no +MAKE_ENV+= ac_cv_prog_JAR=no + +.include "../../devel/zlib/buildlink3.mk" +.include "../../lang/python/application.mk" +.include "../../mk/java-env.mk" +.endif + +.if !empty(PKG_OPTIONS:Mgcc-go) +LANGS+= go +.endif + +.if !empty(PKG_OPTIONS:Mgcc-fortran) +LANGS+= fortran +.endif + +.if !empty(PKG_OPTIONS:Mgcc-c++) +LANGS+= c++ +USE_TOOLS+= perl +.if ${OPSYS} != "SunOS" +CONFIGURE_ARGS+= --enable-__cxa_atexit +.endif +CONFIGURE_ARGS+= --with-gxx-include-dir=${GCC_PREFIX}/include/c++/ +.else +CONFIGURE_ARGS+= --disable-build-with-cxx +CONFIGURE_ARGS+= --disable-build-poststage1-with-cxx +.endif diff --git a/lang/gcc49/patches/patch-contrib_make__sunver.pl b/lang/gcc49/patches/patch-contrib_make__sunver.pl new file mode 100644 index 00000000000..3874ff973cf --- /dev/null +++ b/lang/gcc49/patches/patch-contrib_make__sunver.pl @@ -0,0 +1,20 @@ +$NetBSD: patch-contrib_make__sunver.pl,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Find /usr/bin/elfdump on SmartOS. + +--- contrib/make_sunver.pl.orig 2013-02-27 09:15:35.000000000 +0000 ++++ contrib/make_sunver.pl +@@ -55,7 +55,12 @@ foreach $file (@ARGV) { + # columns. + + # The path to elfdump. +-my $elfdump = "/usr/ccs/bin/elfdump"; ++my $elfdump; ++if (-x "/usr/bin/elfdump") { ++ $elfdump = "/usr/bin/elfdump"; ++} else { ++ $elfdump = "/usr/ccs/bin/elfdump"; ++} + + if (-f $elfdump) { + open ELFDUMP,$elfdump.' -s '.(join ' ',@OBJECTS).'|' or die $!; diff --git a/lang/gcc49/patches/patch-gcc_Makefile.in b/lang/gcc49/patches/patch-gcc_Makefile.in new file mode 100644 index 00000000000..5e8be2a9545 --- /dev/null +++ b/lang/gcc49/patches/patch-gcc_Makefile.in @@ -0,0 +1,14 @@ +$NetBSD: patch-gcc_Makefile.in,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Add this GCC libdir to rpath. + +--- gcc/Makefile.in.orig 2014-04-15 08:04:17.000000000 +0000 ++++ gcc/Makefile.in +@@ -1930,6 +1930,7 @@ prefix.o: $(BASEVER) + # Language-independent files. + + DRIVER_DEFINES = \ ++ -DLINK_LIBGCC_SPEC="\"%D $(LINKER_RPATH_FLAG)$(prefix)/@GCC_TARGET_MACHINE@/lib/%M $(LINKER_RPATH_FLAG)$(libdir)/%M \"" \ + -DSTANDARD_STARTFILE_PREFIX=\"$(unlibsubdir)/\" \ + -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \ + -DSTANDARD_LIBEXEC_PREFIX=\"$(libexecdir)/gcc/\" \ diff --git a/lang/gcc49/patches/patch-gcc_config.gcc b/lang/gcc49/patches/patch-gcc_config.gcc new file mode 100644 index 00000000000..925a357beb9 --- /dev/null +++ b/lang/gcc49/patches/patch-gcc_config.gcc @@ -0,0 +1,85 @@ +$NetBSD: patch-gcc_config.gcc,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +* Add t-crtstuff to tmake_file on NetBSD. +* Add netbsd-stdint.h to tm_file on NetBSD. +* wrap the system stdint.h on NetBSD. +* Add DragonFly support. + +--- gcc/config.gcc.orig 2014-06-16 08:15:35.000000000 +0000 ++++ gcc/config.gcc +@@ -687,6 +687,26 @@ case ${target} in + # need_64bit_hwint=yes # system compiler has this for all arch! + use_gcc_stdint=wrap + ;; ++*-*-dragonfly*) ++ gas=yes ++ gnu_ld=yes ++ tmake_file="t-slibgcc" ++ case ${enable_threads} in ++ "" | yes | posix) ++ thread_file='posix' ++ ;; ++ no | gnat | single) ++ # Let these non-posix thread selections fall through if requested ++ ;; ++ *) ++ echo 'Unknown thread configuration for DragonFly BSD' ++ exit 1 ++ ;; ++ esac ++ extra_options="$extra_options rpath.opt dragonfly.opt" ++ default_use_cxa_atexit=yes ++ use_gcc_stdint=wrap ++ ;; + *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu) + extra_options="$extra_options gnu-user.opt" + gas=yes +@@ -743,6 +763,7 @@ case ${target} in + target_has_targetcm=yes + ;; + *-*-netbsd*) ++ use_gcc_stdint=wrap + tmake_file="t-slibgcc" + gas=yes + gnu_ld=yes +@@ -1352,6 +1373,14 @@ x86_64-*-rdos*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h i386/rdos.h i386/rdos64.h" + tmake_file="i386/t-i386elf t-svr4" + ;; ++i[34567]86-*-dragonfly*) ++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h dragonfly.h dragonfly-stdint.h i386/dragonfly.h" ++ tmake_file="${tmake_file} i386/t-crtstuff" ++ ;; ++x86_64-*-dragonfly*) ++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h dragonfly.h dragonfly-stdint.h i386/x86-64.h i386/dragonfly.h" ++ tmake_file="${tmake_file} i386/t-crtstuff" ++ ;; + i[34567]86-*-freebsd*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/freebsd.h" + ;; +@@ -1359,12 +1388,14 @@ x86_64-*-freebsd*) + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/x86-64.h i386/freebsd.h i386/freebsd64.h" + ;; + i[34567]86-*-netbsdelf*) +- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h" ++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h netbsd-stdint.h" + extra_options="${extra_options} netbsd.opt netbsd-elf.opt" ++ tmake_file="${tmake_file} i386/t-crtstuff" + ;; + x86_64-*-netbsd*) +- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/x86-64.h i386/netbsd64.h" ++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/x86-64.h i386/netbsd64.h netbsd-stdint.h" + extra_options="${extra_options} netbsd.opt netbsd-elf.opt" ++ tmake_file="${tmake_file} i386/t-crtstuff" + ;; + i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123]) + tm_file="i386/i386.h i386/unix.h i386/bsd.h i386/gas.h i386/gstabs.h openbsd-oldgas.h openbsd.h i386/openbsd.h" +@@ -4108,6 +4139,8 @@ case ${target} in + ;; + i[34567]86-*-mingw* | x86_64-*-mingw*) + ;; ++ i[34567]86-*-dragonfly* | x86_64-*-dragonfly*) ++ ;; + i[34567]86-*-freebsd* | x86_64-*-freebsd*) + ;; + ia64*-*-linux*) diff --git a/lang/gcc49/patches/patch-gcc_config_dragonfly-stdint.h b/lang/gcc49/patches/patch-gcc_config_dragonfly-stdint.h new file mode 100644 index 00000000000..1b748591748 --- /dev/null +++ b/lang/gcc49/patches/patch-gcc_config_dragonfly-stdint.h @@ -0,0 +1,63 @@ +$NetBSD: patch-gcc_config_dragonfly-stdint.h,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- gcc/config/dragonfly-stdint.h.orig 2014-09-04 10:04:26.882998028 +0000 ++++ gcc/config/dragonfly-stdint.h +@@ -0,0 +1,56 @@ ++/* Definitions for <stdint.h> types for DragonFly systems. ++ Copyright (C) 2009 Free Software Foundation, Inc. ++ Contributed by Gerald Pfeifer <gerald@pfeifer.com>. ++ ++This file is part of GCC. ++ ++GCC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 3, or (at your option) ++any later version. ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++Under Section 7 of GPL version 3, you are granted additional ++permissions described in the GCC Runtime Library Exception, version ++3.1, as published by the Free Software Foundation. ++ ++You should have received a copy of the GNU General Public License and ++a copy of the GCC Runtime Library Exception along with this program; ++see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++<http://www.gnu.org/licenses/>. */ ++ ++#define SIG_ATOMIC_TYPE "int" ++ ++#define INT8_TYPE "signed char" ++#define INT16_TYPE "short int" ++#define INT32_TYPE "int" ++#define INT64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int") ++#define UINT8_TYPE "unsigned char" ++#define UINT16_TYPE "short unsigned int" ++#define UINT32_TYPE "unsigned int" ++#define UINT64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int") ++ ++#define INT_LEAST8_TYPE INT8_TYPE ++#define INT_LEAST16_TYPE INT16_TYPE ++#define INT_LEAST32_TYPE INT32_TYPE ++#define INT_LEAST64_TYPE INT64_TYPE ++#define UINT_LEAST8_TYPE UINT8_TYPE ++#define UINT_LEAST16_TYPE UINT16_TYPE ++#define UINT_LEAST32_TYPE UINT32_TYPE ++#define UINT_LEAST64_TYPE UINT64_TYPE ++ ++#define INT_FAST8_TYPE INT32_TYPE ++#define INT_FAST16_TYPE INT32_TYPE ++#define INT_FAST32_TYPE INT32_TYPE ++#define INT_FAST64_TYPE INT64_TYPE ++#define UINT_FAST8_TYPE UINT32_TYPE ++#define UINT_FAST16_TYPE UINT32_TYPE ++#define UINT_FAST32_TYPE UINT32_TYPE ++#define UINT_FAST64_TYPE UINT64_TYPE ++ ++#define INTPTR_TYPE (LONG_TYPE_SIZE == 64 ? INT64_TYPE : INT32_TYPE) ++#define UINTPTR_TYPE (LONG_TYPE_SIZE == 64 ? UINT64_TYPE : UINT32_TYPE) diff --git a/lang/gcc49/patches/patch-gcc_config_dragonfly.h b/lang/gcc49/patches/patch-gcc_config_dragonfly.h new file mode 100644 index 00000000000..bcd5572f734 --- /dev/null +++ b/lang/gcc49/patches/patch-gcc_config_dragonfly.h @@ -0,0 +1,142 @@ +$NetBSD: patch-gcc_config_dragonfly.h,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- gcc/config/dragonfly.h.orig 2014-09-04 10:04:26.921134898 +0000 ++++ gcc/config/dragonfly.h +@@ -0,0 +1,135 @@ ++/* Base configuration file for all DragonFly targets. ++ Copyright (C) 1999, 2000, 2001, 2007, 2008 Free Software Foundation, Inc. ++ ++This file is part of GCC. ++ ++GCC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 3, or (at your option) ++any later version. ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with GCC; see the file COPYING3. If not see ++<http://www.gnu.org/licenses/>. */ ++ ++/* Common DragonFly configuration. ++ All DragonFly architectures should include this file, which will specify ++ their commonalities. ++ Adapted from gcc/config/i386/freebsd-elf.h by ++ David O'Brien <obrien@FreeBSD.org>. ++ Further work by David O'Brien <obrien@FreeBSD.org> and ++ Loren J. Rittle <ljrittle@acm.org>. */ ++ ++#undef TARGET_OS_CPP_BUILTINS ++#define TARGET_OS_CPP_BUILTINS() \ ++ do \ ++ { \ ++ builtin_define_std ("unix"); \ ++ builtin_define ("__DragonFly__"); \ ++ builtin_assert ("system=unix"); \ ++ builtin_assert ("system=bsd"); \ ++ builtin_assert ("system=DragonFly"); \ ++ } \ ++ while (0) ++ ++#undef CPP_SPEC ++#define CPP_SPEC \ ++ "%(cpp_cpu) %(cpp_arch) %{posix:-D_POSIX_SOURCE}" ++ ++#undef STARTFILE_SPEC ++#define STARTFILE_SPEC \ ++ "%{!shared: \ ++ %{pg:gcrt1.o%s} \ ++ %{!pg: \ ++ %{p:gcrt1.o%s} \ ++ %{!p: \ ++ %{profile: gcrt1.o%s} \ ++ %{!profile: \ ++ %{pie: Scrt1.o%s;:crt1.o%s}}}}} \ ++ crti.o%s \ ++ %{shared|pie:crtbeginS.o%s;:crtbegin.o%s}" ++ ++#undef ENDFILE_SPEC ++#define ENDFILE_SPEC \ ++ "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" ++ ++#undef LIB_SPEC ++#define LIB_SPEC \ ++ "%{pthread:-lpthread} -lc" ++ ++#if defined(HAVE_LD_EH_FRAME_HDR) ++#define LINK_EH_SPEC "--eh-frame-hdr" ++#endif ++ ++/* Provide a LINK_SPEC appropriate for DragonFly. Here we provide support ++ for the special GCC options -static and -shared, which allow us to ++ link things in one of these three modes by applying the appropriate ++ combinations of options at link-time. ++ ++ When the -shared link option is used a final link is not being ++ done. */ ++ ++#define DFBSD_LINK_SPEC \ ++ "%{p:%nconsider using '-pg' instead of '-p' with gprof(1)} \ ++ %{v:-V} \ ++ %{assert*} %{R*} %{rpath*} %{defsym*} \ ++ %{shared:-Bshareable %{h*} %{soname*}} \ ++ %{!shared: \ ++ %{!static: \ ++ %{rdynamic:-export-dynamic} \ ++ -dynamic-linker %(dfbsd_dynamic_linker) \ ++ } \ ++ %{static:-Bstatic}} \ ++ %{!static:--hash-style=both} \ ++ %{symbolic:-Bsymbolic}" ++ ++#undef LINK_SPEC ++#define LINK_SPEC DFBSD_LINK_SPEC ++ ++#define DFBSD_DYNAMIC_LINKER "/usr/libexec/ld-elf.so.2" ++ ++ ++/* Use --as-needed -lgcc_s for eh support. */ ++#ifdef HAVE_LD_AS_NEEDED ++#define USE_LD_AS_NEEDED 1 ++#endif ++ ++/************************[ Target stuff ]***********************************/ ++ ++/* All DragonFly Architectures support the ELF object file format. */ ++#undef OBJECT_FORMAT_ELF ++#define OBJECT_FORMAT_ELF ++ ++/* Don't assume anything about the header files. */ ++#undef NO_IMPLICIT_EXTERN_C ++#define NO_IMPLICIT_EXTERN_C 1 ++ ++/* Follow DragonFly's standard headers (<machine/stdint.h>, etc...). */ ++ ++#undef WCHAR_TYPE ++#define WCHAR_TYPE "int" ++ ++#undef WINT_TYPE ++#define WINT_TYPE "int" ++ ++/* ++ * Profile libraries are found at /usr/lib/profile with standard names ++ * #define MATH_LIBRARY_PROFILE "m_p" ++ */ ++ ++/* Code generation parameters. */ ++ ++/* Use periods rather than dollar signs in special g++ assembler names. ++ This ensures the configuration knows our system correctly so we can link ++ with libraries compiled with the native cc. */ ++#undef NO_DOLLAR_IN_LABEL ++ ++/* Used by libgcc2.c. We support file locking with fcntl / F_SETLKW. ++ This enables the test coverage code to use file locking when exiting a ++ program, which avoids race conditions if the program has forked. */ ++#define TARGET_POSIX_IO diff --git a/lang/gcc49/patches/patch-gcc_config_dragonfly.opt b/lang/gcc49/patches/patch-gcc_config_dragonfly.opt new file mode 100644 index 00000000000..19cfc18d599 --- /dev/null +++ b/lang/gcc49/patches/patch-gcc_config_dragonfly.opt @@ -0,0 +1,72 @@ +$NetBSD: patch-gcc_config_dragonfly.opt,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- gcc/config/dragonfly.opt.orig 2014-09-04 10:04:26.963474036 +0000 ++++ gcc/config/dragonfly.opt +@@ -0,0 +1,65 @@ ++; DragonFlyBSD options. ++ ++; Copyright (C) 2010, 2011 ++; Free Software Foundation, Inc. ++; ++; This file is part of GCC. ++; ++; GCC is free software; you can redistribute it and/or modify it under ++; the terms of the GNU General Public License as published by the Free ++; Software Foundation; either version 3, or (at your option) any later ++; version. ++; ++; GCC is distributed in the hope that it will be useful, but WITHOUT ANY ++; WARRANTY; without even the implied warranty of MERCHANTABILITY or ++; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++; for more details. ++; ++; You should have received a copy of the GNU General Public License ++; along with GCC; see the file COPYING3. If not see ++; <http://www.gnu.org/licenses/>. ++ ++; See the GCC internals manual (options.texi) for a description of this file's format. ++ ++; Please try to keep this file in ASCII collating order. ++ ++assert ++Driver Separate ++ ++assert= ++Driver JoinedOrMissing ++ ++defsym ++Driver Separate ++ ++defsym= ++Driver JoinedOrMissing ++ ++posix ++Driver ++ ++profile ++Driver ++ ++pthread ++Driver ++ ++rdynamic ++Driver ++ ++rpath-link ++Driver Separate ++ ++rpath-link= ++Driver JoinedOrMissing ++ ++rpath= ++Driver JoinedOrMissing ++ ++soname ++Driver Separate ++ ++soname= ++Driver JoinedOrMissing ++ ++; This comment is to ensure we retain the blank line above. diff --git a/lang/gcc49/patches/patch-gcc_config_i386_dragonfly.h b/lang/gcc49/patches/patch-gcc_config_i386_dragonfly.h new file mode 100644 index 00000000000..09fa805455e --- /dev/null +++ b/lang/gcc49/patches/patch-gcc_config_i386_dragonfly.h @@ -0,0 +1,108 @@ +$NetBSD: patch-gcc_config_i386_dragonfly.h,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- gcc/config/i386/dragonfly.h.orig 2014-09-04 10:04:26.998076438 +0000 ++++ gcc/config/i386/dragonfly.h +@@ -0,0 +1,101 @@ ++/* Definitions for Intel 386 running DragonFly with ELF format ++ Copyright (C) 1996, 2000, 2002, 2004, 2007 Free Software Foundation, Inc. ++ Contributed by Eric Youngdale. ++ Modified for stabs-in-ELF by H.J. Lu. ++ Adapted from GNU/Linux version by John Polstra. ++ Continued development by David O'Brien <obrien@freebsd.org> ++ ++This file is part of GCC. ++ ++GCC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 3, or (at your option) ++any later version. ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with GCC; see the file COPYING3. If not see ++<http://www.gnu.org/licenses/>. */ ++ ++ ++/* Override the default comment-starter of "/". */ ++#undef ASM_COMMENT_START ++#define ASM_COMMENT_START "#" ++ ++#undef ASM_APP_ON ++#define ASM_APP_ON "#APP\n" ++ ++#undef ASM_APP_OFF ++#define ASM_APP_OFF "#NO_APP\n" ++ ++#undef DBX_REGISTER_NUMBER ++#define DBX_REGISTER_NUMBER(n) \ ++ (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) ++ ++#undef NO_PROFILE_COUNTERS ++#define NO_PROFILE_COUNTERS 1 ++ ++/* Tell final.c that we don't need a label passed to mcount. */ ++ ++#undef MCOUNT_NAME ++#define MCOUNT_NAME ".mcount" ++ ++/* Make gcc agree with <machine/ansi.h>. */ ++ ++#undef SIZE_TYPE ++#define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int") ++ ++#undef PTRDIFF_TYPE ++#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int") ++ ++#undef WCHAR_TYPE_SIZE ++#define WCHAR_TYPE_SIZE (TARGET_64BIT ? 32 : BITS_PER_WORD) ++ ++#undef SUBTARGET_EXTRA_SPECS /* i386.h bogusly defines it. */ ++#define SUBTARGET_EXTRA_SPECS \ ++ { "dfbsd_dynamic_linker", DFBSD_DYNAMIC_LINKER } ++ ++ ++/* A C statement to output to the stdio stream FILE an assembler ++ command to advance the location counter to a multiple of 1<<LOG ++ bytes if it is within MAX_SKIP bytes. ++ ++ This is used to align code labels according to Intel recommendations. */ ++ ++#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN ++#undef ASM_OUTPUT_MAX_SKIP_ALIGN ++#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP) \ ++ if ((LOG) != 0) { \ ++ if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ ++ else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ ++ } ++#endif ++ ++/* Don't default to pcc-struct-return, we want to retain compatibility with ++ older gcc versions AND pcc-struct-return is nonreentrant. ++ (even though the SVR4 ABI for the i386 says that records and unions are ++ returned in memory). */ ++ ++#undef DEFAULT_PCC_STRUCT_RETURN ++#define DEFAULT_PCC_STRUCT_RETURN 0 ++ ++/* DragonFly sets the rounding precision of the FPU to 53 bits. Let the ++ compiler get the contents of <float.h> and std::numeric_limits correct. */ ++#undef TARGET_96_ROUND_53_LONG_DOUBLE ++#define TARGET_96_ROUND_53_LONG_DOUBLE (!TARGET_64BIT) ++ ++/* Put all *tf routines in libgcc. */ ++#undef LIBGCC2_HAS_TF_MODE ++#define LIBGCC2_HAS_TF_MODE 1 ++#define LIBGCC2_TF_CEXT q ++#define TF_SIZE 113 ++ ++/* Static stack checking is supported by means of probes. */ ++#define STACK_CHECK_STATIC_BUILTIN 1 ++ ++/* Support for i386 has been removed from DragonFly for several releases */ ++#define SUBTARGET32_DEFAULT_CPU "i486" diff --git a/lang/gcc49/patches/patch-gcc_config_netbsd-stdint.h b/lang/gcc49/patches/patch-gcc_config_netbsd-stdint.h new file mode 100644 index 00000000000..cbaef196785 --- /dev/null +++ b/lang/gcc49/patches/patch-gcc_config_netbsd-stdint.h @@ -0,0 +1,63 @@ +$NetBSD: patch-gcc_config_netbsd-stdint.h,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Copy gcc/config/freebsd-stdint.h to gcc/config/netbsd-stdint.h. + +--- gcc/config/netbsd-stdint.h.orig 2014-09-04 10:04:27.042303825 +0000 ++++ gcc/config/netbsd-stdint.h +@@ -0,0 +1,56 @@ ++/* Definitions for <stdint.h> types for NetBSD systems. ++ Copyright (C) 2009 Free Software Foundation, Inc. ++ Contributed by Gerald Pfeifer <gerald@pfeifer.com>. ++ ++This file is part of GCC. ++ ++GCC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 3, or (at your option) ++any later version. ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++Under Section 7 of GPL version 3, you are granted additional ++permissions described in the GCC Runtime Library Exception, version ++3.1, as published by the Free Software Foundation. ++ ++You should have received a copy of the GNU General Public License and ++a copy of the GCC Runtime Library Exception along with this program; ++see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++<http://www.gnu.org/licenses/>. */ ++ ++#define SIG_ATOMIC_TYPE "int" ++ ++#define INT8_TYPE "signed char" ++#define INT16_TYPE "short int" ++#define INT32_TYPE "int" ++#define INT64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int") ++#define UINT8_TYPE "unsigned char" ++#define UINT16_TYPE "short unsigned int" ++#define UINT32_TYPE "unsigned int" ++#define UINT64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int") ++ ++#define INT_LEAST8_TYPE "signed char" ++#define INT_LEAST16_TYPE "short int" ++#define INT_LEAST32_TYPE "int" ++#define INT_LEAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int") ++#define UINT_LEAST8_TYPE "unsigned char" ++#define UINT_LEAST16_TYPE "short unsigned int" ++#define UINT_LEAST32_TYPE "unsigned int" ++#define UINT_LEAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int") ++ ++#define INT_FAST8_TYPE "int" ++#define INT_FAST16_TYPE "int" ++#define INT_FAST32_TYPE "int" ++#define INT_FAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int") ++#define UINT_FAST8_TYPE "unsigned int" ++#define UINT_FAST16_TYPE "unsigned int" ++#define UINT_FAST32_TYPE "unsigned int" ++#define UINT_FAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int") ++ ++#define INTPTR_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "int") ++#define UINTPTR_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "unsigned int") diff --git a/lang/gcc49/patches/patch-gcc_configure b/lang/gcc49/patches/patch-gcc_configure new file mode 100644 index 00000000000..ca701ce1e2d --- /dev/null +++ b/lang/gcc49/patches/patch-gcc_configure @@ -0,0 +1,29 @@ +$NetBSD: patch-gcc_configure,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Add dl_iterate_phdr detection for FreeBSD and DragonFly. +Detection for NetBSD and OpenBSD is added but commented out in case this +error handling mechanism is activated for these platforms later. + +--- gcc/configure.orig 2014-05-28 11:37:50.000000000 +0000 ++++ gcc/configure +@@ -27449,6 +27449,20 @@ case "$target" in + gcc_cv_target_dl_iterate_phdr=no + fi + ;; ++ *-*-dragonfly* | *-*-freebsd*) ++ if grep dl_iterate_phdr $target_header_dir/sys/link_elf.h > /dev/null 2>&1; then ++ gcc_cv_target_dl_iterate_phdr=yes ++ else ++ gcc_cv_target_dl_iterate_phdr=no ++ fi ++ ;; ++# *-*-netbsd* | *-*-openbsd*) ++# if grep dl_iterate_phdr $target_header_dir/link_elf.h > /dev/null 2>&1; then ++# gcc_cv_target_dl_iterate_phdr=yes ++# else ++# gcc_cv_target_dl_iterate_phdr=no ++# fi ++# ;; + esac + + if test x$gcc_cv_target_dl_iterate_phdr = xyes; then diff --git a/lang/gcc49/patches/patch-gcc_fortran_f95-lang.c b/lang/gcc49/patches/patch-gcc_fortran_f95-lang.c new file mode 100644 index 00000000000..bfb601c5e60 --- /dev/null +++ b/lang/gcc49/patches/patch-gcc_fortran_f95-lang.c @@ -0,0 +1,30 @@ +$NetBSD: patch-gcc_fortran_f95-lang.c,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +No NetBSD the 'cabs' and 'cabsf' functions are are __RENAME so that +thay have '__c99_' prefixes. + +--- gcc/fortran/f95-lang.c.orig 2014-06-30 16:35:48.000000000 +0000 ++++ gcc/fortran/f95-lang.c +@@ -740,12 +740,21 @@ gfc_init_builtin_functions (void) + gfc_define_builtin ("__builtin_truncf", mfunc_float[0], + BUILT_IN_TRUNCF, "truncf", ATTR_CONST_NOTHROW_LEAF_LIST); + ++#if defined(__NetBSD__) ++ gfc_define_builtin ("__builtin_cabs", func_cdouble_double, ++ BUILT_IN_CABS, "__c99_cabs", ATTR_CONST_NOTHROW_LEAF_LIST); ++ gfc_define_builtin ("__builtin_cabsf", func_cfloat_float, ++ BUILT_IN_CABSF, "__c99_cabsf", ATTR_CONST_NOTHROW_LEAF_LIST); + gfc_define_builtin ("__builtin_cabsl", func_clongdouble_longdouble, +- BUILT_IN_CABSL, "cabsl", ATTR_CONST_NOTHROW_LEAF_LIST); ++ BUILT_IN_CABSL, "__c99_cabsl", ATTR_CONST_NOTHROW_LEAF_LIST); ++#else + gfc_define_builtin ("__builtin_cabs", func_cdouble_double, + BUILT_IN_CABS, "cabs", ATTR_CONST_NOTHROW_LEAF_LIST); + gfc_define_builtin ("__builtin_cabsf", func_cfloat_float, + BUILT_IN_CABSF, "cabsf", ATTR_CONST_NOTHROW_LEAF_LIST); ++ gfc_define_builtin ("__builtin_cabsl", func_clongdouble_longdouble, ++ BUILT_IN_CABSL, "cabsl", ATTR_CONST_NOTHROW_LEAF_LIST); ++#endif + + gfc_define_builtin ("__builtin_copysignl", mfunc_longdouble[1], + BUILT_IN_COPYSIGNL, "copysignl", diff --git a/lang/gcc49/patches/patch-gcc_ginclude_stddef.h b/lang/gcc49/patches/patch-gcc_ginclude_stddef.h new file mode 100644 index 00000000000..c24c63bde45 --- /dev/null +++ b/lang/gcc49/patches/patch-gcc_ginclude_stddef.h @@ -0,0 +1,68 @@ +$NetBSD: patch-gcc_ginclude_stddef.h,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Fix build on NetBSD i386/amd64 after the ansi.h header include protection +name change. +Add DragonFly support. + +--- gcc/ginclude/stddef.h.orig 2014-01-02 22:23:26.000000000 +0000 ++++ gcc/ginclude/stddef.h +@@ -50,12 +50,21 @@ see the files COPYING3 and COPYING.RUNTI + one less case to deal with in the following. */ + #if defined (__BSD_NET2__) || defined (____386BSD____) || (defined (__FreeBSD__) && (__FreeBSD__ < 5)) || defined(__NetBSD__) + #include <machine/ansi.h> ++#if !defined(_MACHINE_ANSI_H_) ++#if defined(_I386_ANSI_H_) || defined(_X86_64_ANSI_H_) ++#define _MACHINE_ANSI_H_ ++#endif ++#endif + #endif + /* On FreeBSD 5, machine/ansi.h does not exist anymore... */ + #if defined (__FreeBSD__) && (__FreeBSD__ >= 5) + #include <sys/_types.h> + #endif + ++#if defined(__DragonFly__) ++#include <sys/types.h> ++#endif ++ + /* In 4.3bsd-net2, machine/ansi.h defines these symbols, which are + defined if the corresponding type is *not* defined. + FreeBSD-2.1 defines _MACHINE_ANSI_H_ instead of _ANSI_H_. +@@ -133,6 +142,7 @@ _TYPE_wchar_t; + #ifndef _BSD_PTRDIFF_T_ + #ifndef ___int_ptrdiff_t_h + #ifndef _GCC_PTRDIFF_T ++#ifndef _PTRDIFF_T_DECLARED /* DragonFly */ + #define _PTRDIFF_T + #define _T_PTRDIFF_ + #define _T_PTRDIFF +@@ -141,10 +151,12 @@ _TYPE_wchar_t; + #define _BSD_PTRDIFF_T_ + #define ___int_ptrdiff_t_h + #define _GCC_PTRDIFF_T ++#define _PTRDIFF_T_DECLARED + #ifndef __PTRDIFF_TYPE__ + #define __PTRDIFF_TYPE__ long int + #endif + typedef __PTRDIFF_TYPE__ ptrdiff_t; ++#endif /* _PTRDIFF_T_DECLARED */ + #endif /* _GCC_PTRDIFF_T */ + #endif /* ___int_ptrdiff_t_h */ + #endif /* _BSD_PTRDIFF_T_ */ +@@ -198,6 +210,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t; + #define _GCC_SIZE_T + #define _SIZET_ + #if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \ ++ || defined(__DragonFly__) \ + || defined(__FreeBSD_kernel__) + /* __size_t is a typedef on FreeBSD 5, must not trash it. */ + #elif defined (__VMS__) +@@ -306,7 +319,7 @@ typedef _BSD_RUNE_T_ rune_t; + /* FreeBSD 5 can't be handled well using "traditional" logic above + since it no longer defines _BSD_RUNE_T_ yet still desires to export + rune_t in some cases... */ +-#if defined (__FreeBSD__) && (__FreeBSD__ >= 5) ++#if defined (__DragonFly__) || (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) + #if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE) + #if __BSD_VISIBLE + #ifndef _RUNE_T_DECLARED diff --git a/lang/gcc49/patches/patch-include_libiberty.h b/lang/gcc49/patches/patch-include_libiberty.h new file mode 100644 index 00000000000..b9f9a325215 --- /dev/null +++ b/lang/gcc49/patches/patch-include_libiberty.h @@ -0,0 +1,15 @@ +$NetBSD: patch-include_libiberty.h,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- include/libiberty.h.orig 2014-01-21 15:09:10.000000000 +0000 ++++ include/libiberty.h +@@ -106,7 +106,7 @@ extern int countargv (char**); + to find the declaration so provide a fully prototyped one. If it + is 1, we found it so don't provide any declaration at all. */ + #if !HAVE_DECL_BASENAME +-#if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__) || defined (__OpenBSD__) || defined(__NetBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__) || defined (__MINGW32__) || defined (HAVE_DECL_BASENAME) ++#if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__DragonFly__) || defined (__FreeBSD__) || defined (__OpenBSD__) || defined(__NetBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__) || defined (__MINGW32__) || defined (HAVE_DECL_BASENAME) + extern char *basename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1); + #else + /* Do not allow basename to be used if there is no prototype seen. We diff --git a/lang/gcc49/patches/patch-libcilkrts_runtime_os-unix.c b/lang/gcc49/patches/patch-libcilkrts_runtime_os-unix.c new file mode 100644 index 00000000000..d831c70d069 --- /dev/null +++ b/lang/gcc49/patches/patch-libcilkrts_runtime_os-unix.c @@ -0,0 +1,33 @@ +$NetBSD: patch-libcilkrts_runtime_os-unix.c,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Add NetBSD support. + +--- libcilkrts/runtime/os-unix.c.orig 2014-04-17 11:52:44.000000000 +0000 ++++ libcilkrts/runtime/os-unix.c +@@ -54,7 +54,7 @@ + #elif defined __APPLE__ + # include <sys/sysctl.h> + // Uses sysconf(_SC_NPROCESSORS_ONLN) in verbose output +-#elif defined __FreeBSD__ ++#elif defined __FreeBSD__ || defined __NetBSD__ + // No additional include files + #elif defined __CYGWIN__ + // Cygwin on Windows - no additional include files +@@ -374,7 +374,7 @@ COMMON_SYSDEP int __cilkrts_hardware_cpu + assert((unsigned)count == count); + + return count; +-#elif defined __FreeBSD__ || defined __CYGWIN__ ++#elif defined __FreeBSD__ || __NetBSD__ || defined __CYGWIN__ + int ncores = sysconf(_SC_NPROCESSORS_ONLN); + + return ncores; +@@ -398,7 +398,7 @@ COMMON_SYSDEP void __cilkrts_sleep(void) + + COMMON_SYSDEP void __cilkrts_yield(void) + { +-#if __APPLE__ || __FreeBSD__ || __VXWORKS__ ++#if __APPLE__ || __FreeBSD__ || __NetBSD__ || __VXWORKS__ + // On MacOS, call sched_yield to yield quantum. I'm not sure why we + // don't do this on Linux also. + sched_yield(); diff --git a/lang/gcc49/patches/patch-libgcc_config.host b/lang/gcc49/patches/patch-libgcc_config.host new file mode 100644 index 00000000000..136f6b22dd8 --- /dev/null +++ b/lang/gcc49/patches/patch-libgcc_config.host @@ -0,0 +1,50 @@ +$NetBSD: patch-libgcc_config.host,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- libgcc/config.host.orig 2014-03-27 15:40:31.000000000 +0000 ++++ libgcc/config.host +@@ -207,6 +207,11 @@ case ${host} in + tmake_file="$tmake_file t-darwin ${cpu_type}/t-darwin t-libgcc-pic t-slibgcc-darwin" + extra_parts="crt3.o crttms.o crttme.o" + ;; ++*-*-dragonfly*) ++ tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip" ++ tmake_file="$tmake_file t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver" ++ extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o" ++ ;; + *-*-freebsd*) + # This is the generic ELF configuration of FreeBSD. Later + # machine-specific sections may refine and add to this +@@ -302,7 +307,7 @@ case ${host} in + esac + + case ${host} in +-*-*-darwin* | *-*-freebsd* | *-*-netbsd* | *-*-openbsd* | *-*-solaris2*) ++*-*-darwin* | *-*-freebsd* | *-*-netbsd* | *-*-openbsd* | *-*-solaris2* | *-*-dragonfly*) + enable_execute_stack=enable-execute-stack-mprotect.c + ;; + i[34567]86-*-mingw* | x86_64-*-mingw*) +@@ -545,6 +550,14 @@ i[34567]86-*-elf*) + x86_64-*-elf*) + tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic" + ;; ++i[34567]86-*-dragonfly*) ++ tmake_file="${tmake_file} i386/t-dragonfly i386/t-crtstuff" ++ md_unwind_header=i386/dragonfly-unwind.h ++ ;; ++x86_64-*-dragonfly*) ++ tmake_file="${tmake_file} i386/t-dragonfly i386/t-crtstuff" ++ md_unwind_header=i386/dragonfly-unwind.h ++ ;; + i[34567]86-*-freebsd*) + tmake_file="${tmake_file} i386/t-freebsd i386/t-crtstuff" + ;; +@@ -1262,6 +1275,7 @@ i[34567]86-*-darwin* | x86_64-*-darwin* + i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]* | \ + i[34567]86-*-cygwin* | x86_64-*-cygwin* | \ + i[34567]86-*-mingw* | x86_64-*-mingw* | \ ++ i[34567]86-*-dragonfly* | x86_64-*-dragonfly* | \ + i[34567]86-*-freebsd* | x86_64-*-freebsd* | \ + i[34567]86-*-openbsd* | x86_64-*-openbsd*) + tmake_file="${tmake_file} t-softfp-tf" diff --git a/lang/gcc49/patches/patch-libgcc_config_i386_dragonfly-unwind.h b/lang/gcc49/patches/patch-libgcc_config_i386_dragonfly-unwind.h new file mode 100644 index 00000000000..8d712d87488 --- /dev/null +++ b/lang/gcc49/patches/patch-libgcc_config_i386_dragonfly-unwind.h @@ -0,0 +1,165 @@ +$NetBSD: patch-libgcc_config_i386_dragonfly-unwind.h,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- libgcc/config/i386/dragonfly-unwind.h.orig 2014-09-04 10:04:27.455838710 +0000 ++++ libgcc/config/i386/dragonfly-unwind.h +@@ -0,0 +1,158 @@ ++/* DWARF2 EH unwinding support for DragonFly BSD: AMD x86-64 and x86. ++ Copyright (C) 2010 John Marino <draco@marino.st> */ ++ ++/* Do code reading to identify a signal frame, and set the frame ++ state data appropriately. See unwind-dw2.c for the structs. */ ++ ++#include <sys/types.h> ++#include <sys/sysctl.h> ++#include <signal.h> ++#include <sys/ucontext.h> ++#include <machine/sigframe.h> ++ ++ ++#define REG_NAME(reg) sf_uc.uc_mcontext.mc_## reg ++ ++#ifdef __x86_64__ ++#define MD_FALLBACK_FRAME_STATE_FOR x86_64_dragonfly_fallback_frame_state ++ ++ ++static void ++x86_64_sigtramp_range (unsigned char **start, unsigned char **end) ++{ ++ unsigned long ps_strings; ++ int mib[2]; ++ size_t len; ++ ++ mib[0] = CTL_KERN; ++ mib[1] = KERN_PS_STRINGS; ++ len = sizeof (ps_strings); ++ sysctl (mib, 2, &ps_strings, &len, NULL, 0); ++ ++ *start = (unsigned char *)ps_strings - 32; ++ *end = (unsigned char *)ps_strings; ++} ++ ++ ++static _Unwind_Reason_Code ++x86_64_dragonfly_fallback_frame_state ++(struct _Unwind_Context *context, _Unwind_FrameState *fs) ++{ ++ unsigned char *pc = context->ra; ++ unsigned char *sigtramp_start, *sigtramp_end; ++ struct sigframe *sf; ++ long new_cfa; ++ ++ x86_64_sigtramp_range(&sigtramp_start, &sigtramp_end); ++ if (pc >= sigtramp_end || pc < sigtramp_start) ++ return _URC_END_OF_STACK; ++ ++ sf = (struct sigframe *) context->cfa; ++ new_cfa = sf->REG_NAME(rsp); ++ fs->regs.cfa_how = CFA_REG_OFFSET; ++ /* Register 7 is rsp */ ++ fs->regs.cfa_reg = 7; ++ fs->regs.cfa_offset = new_cfa - (long) context->cfa; ++ ++ /* The SVR4 register numbering macros aren't usable in libgcc. */ ++ fs->regs.reg[0].how = REG_SAVED_OFFSET; ++ fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(rax) - new_cfa; ++ fs->regs.reg[1].how = REG_SAVED_OFFSET; ++ fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(rdx) - new_cfa; ++ fs->regs.reg[2].how = REG_SAVED_OFFSET; ++ fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(rcx) - new_cfa; ++ fs->regs.reg[3].how = REG_SAVED_OFFSET; ++ fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(rbx) - new_cfa; ++ fs->regs.reg[4].how = REG_SAVED_OFFSET; ++ fs->regs.reg[4].loc.offset = (long)&sf->REG_NAME(rsi) - new_cfa; ++ fs->regs.reg[5].how = REG_SAVED_OFFSET; ++ fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(rdi) - new_cfa; ++ fs->regs.reg[6].how = REG_SAVED_OFFSET; ++ fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(rbp) - new_cfa; ++ fs->regs.reg[8].how = REG_SAVED_OFFSET; ++ fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(r8) - new_cfa; ++ fs->regs.reg[9].how = REG_SAVED_OFFSET; ++ fs->regs.reg[9].loc.offset = (long)&sf->REG_NAME(r9) - new_cfa; ++ fs->regs.reg[10].how = REG_SAVED_OFFSET; ++ fs->regs.reg[10].loc.offset = (long)&sf->REG_NAME(r10) - new_cfa; ++ fs->regs.reg[11].how = REG_SAVED_OFFSET; ++ fs->regs.reg[11].loc.offset = (long)&sf->REG_NAME(r11) - new_cfa; ++ fs->regs.reg[12].how = REG_SAVED_OFFSET; ++ fs->regs.reg[12].loc.offset = (long)&sf->REG_NAME(r12) - new_cfa; ++ fs->regs.reg[13].how = REG_SAVED_OFFSET; ++ fs->regs.reg[13].loc.offset = (long)&sf->REG_NAME(r13) - new_cfa; ++ fs->regs.reg[14].how = REG_SAVED_OFFSET; ++ fs->regs.reg[14].loc.offset = (long)&sf->REG_NAME(r14) - new_cfa; ++ fs->regs.reg[15].how = REG_SAVED_OFFSET; ++ fs->regs.reg[15].loc.offset = (long)&sf->REG_NAME(r15) - new_cfa; ++ fs->regs.reg[16].how = REG_SAVED_OFFSET; ++ fs->regs.reg[16].loc.offset = (long)&sf->REG_NAME(rip) - new_cfa; ++ fs->retaddr_column = 16; ++ fs->signal_frame = 1; ++ return _URC_NO_REASON; ++} ++ ++#else /* Next section is for i386 */ ++ ++#define MD_FALLBACK_FRAME_STATE_FOR x86_dragonfly_fallback_frame_state ++ ++ ++static void ++x86_sigtramp_range (unsigned char **start, unsigned char **end) ++{ ++ unsigned long ps_strings; ++ int mib[2]; ++ size_t len; ++ ++ mib[0] = CTL_KERN; ++ mib[1] = KERN_PS_STRINGS; ++ len = sizeof (ps_strings); ++ sysctl (mib, 2, &ps_strings, &len, NULL, 0); ++ ++ *start = (unsigned char *)ps_strings - 128; ++ *end = (unsigned char *)ps_strings; ++} ++ ++ ++static _Unwind_Reason_Code ++x86_dragonfly_fallback_frame_state ++(struct _Unwind_Context *context, _Unwind_FrameState *fs) ++{ ++ unsigned char *pc = context->ra; ++ unsigned char *sigtramp_start, *sigtramp_end; ++ struct sigframe *sf; ++ long new_cfa; ++ ++ x86_sigtramp_range(&sigtramp_start, &sigtramp_end); ++ ++ if (pc >= sigtramp_end || pc < sigtramp_start) ++ return _URC_END_OF_STACK; ++ ++ sf = (struct sigframe *) context->cfa; ++ new_cfa = sf->REG_NAME(esp); ++ fs->regs.cfa_how = CFA_REG_OFFSET; ++ fs->regs.cfa_reg = 4; ++ fs->regs.cfa_offset = new_cfa - (long) context->cfa; ++ ++ /* The SVR4 register numbering macros aren't usable in libgcc. */ ++ fs->regs.reg[0].how = REG_SAVED_OFFSET; ++ fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(eax) - new_cfa; ++ fs->regs.reg[3].how = REG_SAVED_OFFSET; ++ fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(ebx) - new_cfa; ++ fs->regs.reg[1].how = REG_SAVED_OFFSET; ++ fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(ecx) - new_cfa; ++ fs->regs.reg[2].how = REG_SAVED_OFFSET; ++ fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(edx) - new_cfa; ++ fs->regs.reg[6].how = REG_SAVED_OFFSET; ++ fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(esi) - new_cfa; ++ fs->regs.reg[7].how = REG_SAVED_OFFSET; ++ fs->regs.reg[7].loc.offset = (long)&sf->REG_NAME(edi) - new_cfa; ++ fs->regs.reg[5].how = REG_SAVED_OFFSET; ++ fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(ebp) - new_cfa; ++ fs->regs.reg[8].how = REG_SAVED_OFFSET; ++ fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(eip) - new_cfa; ++ fs->retaddr_column = 8; ++ fs->signal_frame = 1; ++ return _URC_NO_REASON; ++} ++#endif /* ifdef __x86_64__ */ diff --git a/lang/gcc49/patches/patch-libgcc_config_t-slibgcc-darwin b/lang/gcc49/patches/patch-libgcc_config_t-slibgcc-darwin new file mode 100644 index 00000000000..b1de548ad61 --- /dev/null +++ b/lang/gcc49/patches/patch-libgcc_config_t-slibgcc-darwin @@ -0,0 +1,26 @@ +$NetBSD: patch-libgcc_config_t-slibgcc-darwin,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +If we don't install libgcc_s.10.[45].dylib, our gcc links binaries +with *both* /usr/lib/libgcc_s.1.dylib and +${GCC_PREFIX}/lib/libgcc_s.1.dylib, which is certainly a bad thing. + +The problem was already reported to the upstream but it caught +seemingly no attention: +http://gcc.gnu.org/ml/gcc-help/2010-07/msg00164.html + +--- libgcc/config/t-slibgcc-darwin.orig 2011-11-02 10:49:46.000000000 +0000 ++++ libgcc/config/t-slibgcc-darwin +@@ -27,13 +27,7 @@ SHLIB_MKMAP_OPTS = -v leading_underscore + SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/libgcc-libsystem.ver + SHLIB_VERPFX = $(srcdir)/config/$(cpu_type)/libgcc-darwin + +-# we're only going to build the stubs if the target slib is /usr/lib +-# there is no other case in which they're useful in a live system. +-ifeq (/usr/lib,$(shlib_slibdir)) + LGCC_STUBS = libgcc_s.10.4.dylib libgcc_s.10.5.dylib +-else +-LGCC_STUBS = +-endif + + LGCC_FILES = libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) + LGCC_FILES += $(LGCC_STUBS) diff --git a/lang/gcc49/patches/patch-libgcc_crtstuff.c b/lang/gcc49/patches/patch-libgcc_crtstuff.c new file mode 100644 index 00000000000..c6699fecb70 --- /dev/null +++ b/lang/gcc49/patches/patch-libgcc_crtstuff.c @@ -0,0 +1,29 @@ +$NetBSD: patch-libgcc_crtstuff.c,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Currently dl_iterate_phdr error handling is hardcoded for FreeBSD 7+ +Expand code to handle all BSDs even though detection is only active for +FreeBSD and DragonFly currently. + +--- libgcc/crtstuff.c.orig 2014-03-10 18:31:20.000000000 +0000 ++++ libgcc/crtstuff.c +@@ -79,11 +79,19 @@ call_ ## FUNC (void) \ + } + #endif + ++#if defined(TARGET_DL_ITERATE_PHDR) && \ ++ ( defined(__FreeBSD__) \ ++ || defined(__OpenBSD__) \ ++ || defined(__NetBSD__) \ ++ || defined(__DragonFly__)) ++#define BSD_DL_ITERATE_PHDR_AVAILABLE ++#endif ++ + #if defined(OBJECT_FORMAT_ELF) \ + && !defined(OBJECT_FORMAT_FLAT) \ + && defined(HAVE_LD_EH_FRAME_HDR) \ + && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \ +- && defined(__FreeBSD__) && __FreeBSD__ >= 7 ++ && defined(BSD_DL_ITERATE_PHDR_AVAILABLE) + #include <link.h> + # define USE_PT_GNU_EH_FRAME + #endif diff --git a/lang/gcc49/patches/patch-libgcc_unwind-dw2-fde-dip.c b/lang/gcc49/patches/patch-libgcc_unwind-dw2-fde-dip.c new file mode 100644 index 00000000000..e6961fcc0b1 --- /dev/null +++ b/lang/gcc49/patches/patch-libgcc_unwind-dw2-fde-dip.c @@ -0,0 +1,26 @@ +$NetBSD: patch-libgcc_unwind-dw2-fde-dip.c,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Add dl_iterate_phdr error handling support for all BSDs. The NetBSD and +OpenBSD code will not run until dl_iterate_phdr detection in the configure +script is uncommented. + +--- libgcc/unwind-dw2-fde-dip.c.orig 2014-01-02 22:25:22.000000000 +0000 ++++ libgcc/unwind-dw2-fde-dip.c +@@ -58,13 +58,15 @@ + #endif + + #if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ +- && defined(__FreeBSD__) && __FreeBSD__ >= 7 ++ && defined(TARGET_DL_ITERATE_PHDR) \ ++ && (defined(__FreeBSD__) || defined(__DragonFly__)) + # define ElfW __ElfN + # define USE_PT_GNU_EH_FRAME + #endif + + #if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ +- && defined(__OpenBSD__) ++ && defined(TARGET_DL_ITERATE_PHDR) \ ++ && (defined(__OpenBSD__) || defined(__NetBSD__)) + # define ElfW(type) Elf_##type + # define USE_PT_GNU_EH_FRAME + #endif diff --git a/lang/gcc49/patches/patch-libgfortran_configure b/lang/gcc49/patches/patch-libgfortran_configure new file mode 100644 index 00000000000..381785e5c89 --- /dev/null +++ b/lang/gcc49/patches/patch-libgfortran_configure @@ -0,0 +1,15 @@ +$NetBSD: patch-libgfortran_configure,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +"#pragma weak" shouldn't be used on NetBSD. + +--- libgfortran/configure.orig 2014-07-16 10:06:03.000000000 +0000 ++++ libgfortran/configure +@@ -26340,7 +26340,7 @@ $as_echo "#define SUPPORTS_WEAK 1" >>con + + fi + case "$host" in +- *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* ) ++ *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* | *-*-netbsd* ) + + $as_echo "#define GTHREAD_USE_WEAK 0" >>confdefs.h + diff --git a/lang/gcc49/patches/patch-libgo_Makefile.in b/lang/gcc49/patches/patch-libgo_Makefile.in new file mode 100644 index 00000000000..4db280e6462 --- /dev/null +++ b/lang/gcc49/patches/patch-libgo_Makefile.in @@ -0,0 +1,16 @@ +$NetBSD: patch-libgo_Makefile.in,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +proc.c will not compile with inline-functions (implied by -O3) +so add -fno-inline-functions to its cflags. + +--- libgo/Makefile.in.orig 2014-01-08 01:08:29.000000000 +0000 ++++ libgo/Makefile.in +@@ -3153,7 +3153,7 @@ print.lo: runtime/print.c + @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o print.lo `test -f 'runtime/print.c' || echo '$(srcdir)/'`runtime/print.c + + proc.lo: runtime/proc.c +-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT proc.lo -MD -MP -MF $(DEPDIR)/proc.Tpo -c -o proc.lo `test -f 'runtime/proc.c' || echo '$(srcdir)/'`runtime/proc.c ++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) -fno-inline-functions $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT proc.lo -MD -MP -MF $(DEPDIR)/proc.Tpo -c -o proc.lo `test -f 'runtime/proc.c' || echo '$(srcdir)/'`runtime/proc.c + @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proc.Tpo $(DEPDIR)/proc.Plo + @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/proc.c' object='proc.lo' libtool=yes @AMDEPBACKSLASH@ + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ diff --git a/lang/gcc49/patches/patch-libgo_runtime_proc.c b/lang/gcc49/patches/patch-libgo_runtime_proc.c new file mode 100644 index 00000000000..3880d8944cb --- /dev/null +++ b/lang/gcc49/patches/patch-libgo_runtime_proc.c @@ -0,0 +1,17 @@ +$NetBSD: patch-libgo_runtime_proc.c,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +SunOS libelf does not support largefile. + +--- libgo/runtime/proc.c.orig 2014-05-27 22:01:08.000000000 +0000 ++++ libgo/runtime/proc.c +@@ -11,6 +11,10 @@ + #include "config.h" + + #ifdef HAVE_DL_ITERATE_PHDR ++#ifdef __sun ++#undef _FILE_OFFSET_BITS ++#define _FILE_OFFSET_BITS 32 ++#endif + #include <link.h> + #endif + diff --git a/lang/gcc49/patches/patch-libiberty_Makefile.in b/lang/gcc49/patches/patch-libiberty_Makefile.in new file mode 100644 index 00000000000..59fefeb6696 --- /dev/null +++ b/lang/gcc49/patches/patch-libiberty_Makefile.in @@ -0,0 +1,16 @@ +$NetBSD: patch-libiberty_Makefile.in,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Ensure we look for includes in our include directory first, otherwise +we may pick up an incompatible ansidecl.h, e.g. from binutils. + +--- libiberty/Makefile.in.orig 2013-06-01 00:20:49.000000000 +0000 ++++ libiberty/Makefile.in +@@ -112,7 +112,7 @@ installcheck: installcheck-subdir + + INCDIR=$(srcdir)/$(MULTISRCTOP)../include + +-COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@ ++COMPILE.c = $(CC) -c @DEFS@ -I. -I$(INCDIR) $(CFLAGS) $(CPPFLAGS) $(HDEFINES) @ac_libiberty_warn_cflags@ + + # Just to make sure we don't use a built-in rule with VPATH + .c.$(objext): diff --git a/lang/gcc49/patches/patch-libjava_Makefile.in b/lang/gcc49/patches/patch-libjava_Makefile.in new file mode 100644 index 00000000000..4f1468876f9 --- /dev/null +++ b/lang/gcc49/patches/patch-libjava_Makefile.in @@ -0,0 +1,16 @@ +$NetBSD: patch-libjava_Makefile.in,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Tell libtool the fact that libjvm.so is a module to be opened with +dlopen(3). This is actually needed on Mach-O systems like Darwin. + +--- libjava/Makefile.in.orig 2014-07-16 10:06:03.000000000 +0000 ++++ libjava/Makefile.in +@@ -1134,7 +1134,7 @@ libgcj_tools_la_LINK = $(LIBLINK) $(libg + libjvm_la_SOURCES = jni-libjvm.cc + libjvm_la_DEPENDENCIES = libgcj.la libgcj.spec $(am__append_20) + libjvm_la_LIBADD = -L$(here)/.libs libgcj.la +-libjvm_la_LDFLAGS = -avoid-version $(LIBGCJ_LD_SYMBOLIC) \ ++libjvm_la_LDFLAGS = -avoid-version -module $(LIBGCJ_LD_SYMBOLIC) \ + $(LIBJAVA_LDFLAGS_NOUNDEF) + + libjvm_la_LINK = $(CXXLINK) $(libjvm_la_LDFLAGS) diff --git a/lang/gcc49/patches/patch-libjava_boehm.cc b/lang/gcc49/patches/patch-libjava_boehm.cc new file mode 100644 index 00000000000..159d35ad7f6 --- /dev/null +++ b/lang/gcc49/patches/patch-libjava_boehm.cc @@ -0,0 +1,27 @@ +$NetBSD: patch-libjava_boehm.cc,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Disable GC_register_my_thread and GC_unregister_my_thread on NetBSD as +the version of boehm-gc bundled with gcc does not support NetBSD threads. + +--- libjava/boehm.cc.orig 2007-10-22 21:24:35.000000000 +0000 ++++ libjava/boehm.cc +@@ -747,7 +747,8 @@ _Jv_GCAttachThread () + // The registration interface is only defined on posixy systems and + // only actually works if pthread_getattr_np is defined. + // FIXME: until gc7 it is simpler to disable this on solaris. +-#if defined(HAVE_PTHREAD_GETATTR_NP) && !defined(GC_SOLARIS_THREADS) ++#if defined(HAVE_PTHREAD_GETATTR_NP) && !defined(GC_SOLARIS_THREADS) \ ++ && !defined(__NetBSD__) + GC_register_my_thread (); + #endif + } +@@ -755,7 +756,8 @@ _Jv_GCAttachThread () + void + _Jv_GCDetachThread () + { +-#if defined(HAVE_PTHREAD_GETATTR_NP) && !defined(GC_SOLARIS_THREADS) ++#if defined(HAVE_PTHREAD_GETATTR_NP) && !defined(GC_SOLARIS_THREADS) \ ++ && !defined(__NetBSD__) + GC_unregister_my_thread (); + #endif + } diff --git a/lang/gcc49/patches/patch-libjava_configure b/lang/gcc49/patches/patch-libjava_configure new file mode 100644 index 00000000000..5aecd81b716 --- /dev/null +++ b/lang/gcc49/patches/patch-libjava_configure @@ -0,0 +1,17 @@ +$NetBSD: patch-libjava_configure,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Avoid a reference to the wrapped make in the pkgsrc work directory from +showing up in an installed file. +See: libjava/contrib/aotcompile.py.in + +--- libjava/configure.orig 2014-07-16 10:06:03.000000000 +0000 ++++ libjava/configure +@@ -24865,7 +24865,7 @@ $as_echo "Python modules dir: ${python_m + + + # needed for aot-compile-rpm +-MAKE=`which make` ++MAKE=${PKGSRC_MAKE} + + + # Check whether --enable-aot-compile-rpm was given. diff --git a/lang/gcc49/patches/patch-libjava_contrib_rebuild-gcj-db.in b/lang/gcc49/patches/patch-libjava_contrib_rebuild-gcj-db.in new file mode 100644 index 00000000000..b940b6d22dc --- /dev/null +++ b/lang/gcc49/patches/patch-libjava_contrib_rebuild-gcj-db.in @@ -0,0 +1,29 @@ +$NetBSD: patch-libjava_contrib_rebuild-gcj-db.in,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +No need to use bash for this small script. + +Also -print0 is not portable to solaris and perhaps others. + +--- libjava/contrib/rebuild-gcj-db.in.orig 2008-07-02 13:17:54.000000000 +0000 ++++ libjava/contrib/rebuild-gcj-db.in +@@ -1,4 +1,4 @@ +-#!/bin/bash ++#!/bin/sh + # rebuild-gcj-db + + ## Copyright (C) 2000, 2002, 2003, 2008 Free Software Foundation +@@ -16,12 +16,12 @@ for i in `@prefix@/bin/gcc --print-multi + base=@prefix@/lib/$dirname + dbLocation=`@prefix@/bin/gcj-dbtool -p $base` + libdir=$base/gcj +- if ! test -d $libdir; then ++ if test ! -d $libdir; then + # No shared libraries here. + continue + fi + dirname $dbLocation | xargs mkdir -p + @prefix@/bin/gcj-dbtool -n $dbLocation 64 +- find $libdir -follow -name '*.db' -print0 | \ ++ find $libdir -follow -name '*.db' -print | @AWK@ '{printf("%s%c", $1, 0);}'|\ + @prefix@/bin/gcj-dbtool -0 -m $dbLocation $dbLocation + done diff --git a/lang/gcc49/patches/patch-libstdc++-v3_config_locale_dragonfly_c__locale.cc b/lang/gcc49/patches/patch-libstdc++-v3_config_locale_dragonfly_c__locale.cc new file mode 100644 index 00000000000..46846aef816 --- /dev/null +++ b/lang/gcc49/patches/patch-libstdc++-v3_config_locale_dragonfly_c__locale.cc @@ -0,0 +1,307 @@ +$NetBSD: patch-libstdc++-v3_config_locale_dragonfly_c__locale.cc,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- libstdc++-v3/config/locale/dragonfly/c_locale.cc.orig 2014-09-04 10:04:50.888905686 +0000 ++++ libstdc++-v3/config/locale/dragonfly/c_locale.cc +@@ -0,0 +1,300 @@ ++// Wrapper for underlying C-language localization -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 ++// Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 3, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// Under Section 7 of GPL version 3, you are granted additional ++// permissions described in the GCC Runtime Library Exception, version ++// 3.1, as published by the Free Software Foundation. ++ ++// You should have received a copy of the GNU General Public License and ++// a copy of the GCC Runtime Library Exception along with this program; ++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++// <http://www.gnu.org/licenses/>. ++ ++// ++// ISO C++ 14882: 22.8 Standard locale categories. ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#include <cerrno> // For errno ++#include <cmath> // For isinf, finite, finitef, fabs ++#include <cstdlib> // For strof, strtold ++#include <cstring> ++#include <cstdio> ++#include <locale> ++#include <limits> ++ ++#ifdef _GLIBCXX_HAVE_IEEEFP_H ++#include <ieeefp.h> ++#endif ++ ++namespace std _GLIBCXX_VISIBILITY(default) ++{ ++_GLIBCXX_BEGIN_NAMESPACE_VERSION ++ ++ template<> ++ void ++ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, ++ const __c_locale&) throw() ++ { ++ // Assumes __s formatted for "C" locale. ++ char* __old = setlocale(LC_ALL, 0); ++ const size_t __len = strlen(__old) + 1; ++ char* __sav = new char[__len]; ++ memcpy(__sav, __old, __len); ++ setlocale(LC_ALL, "C"); ++ char* __sanity; ++ bool __overflow = false; ++ ++#if !__FLT_HAS_INFINITY__ ++ errno = 0; ++#endif ++ ++#ifdef _GLIBCXX_HAVE_STRTOF ++ __v = strtof(__s, &__sanity); ++#else ++ double __d = strtod(__s, &__sanity); ++ __v = static_cast<float>(__d); ++#ifdef _GLIBCXX_HAVE_FINITEF ++ if (!finitef (__v)) ++ __overflow = true; ++#elif defined (_GLIBCXX_HAVE_FINITE) ++ if (!finite (static_cast<double> (__v))) ++ __overflow = true; ++#elif defined (_GLIBCXX_HAVE_ISINF) ++ if (isinf (static_cast<double> (__v))) ++ __overflow = true; ++#else ++ if (fabs(__d) > numeric_limits<float>::max()) ++ __overflow = true; ++#endif ++#endif // _GLIBCXX_HAVE_STRTOF ++ ++ // _GLIBCXX_RESOLVE_LIB_DEFECTS ++ // 23. Num_get overflow result. ++ if (__sanity == __s || *__sanity != '\0') ++ { ++ __v = 0.0f; ++ __err = ios_base::failbit; ++ } ++ else if (__overflow ++#if __FLT_HAS_INFINITY__ ++ || __v == numeric_limits<float>::infinity() ++ || __v == -numeric_limits<float>::infinity() ++#else ++ || ((__v > 1.0f || __v < -1.0f) && errno == ERANGE) ++#endif ++ ) ++ { ++ if (__v > 0.0f) ++ __v = numeric_limits<float>::max(); ++ else ++ __v = -numeric_limits<float>::max(); ++ __err = ios_base::failbit; ++ } ++ ++ setlocale(LC_ALL, __sav); ++ delete [] __sav; ++ } ++ ++ template<> ++ void ++ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, ++ const __c_locale&) throw() ++ { ++ // Assumes __s formatted for "C" locale. ++ char* __old = setlocale(LC_ALL, 0); ++ const size_t __len = strlen(__old) + 1; ++ char* __sav = new char[__len]; ++ memcpy(__sav, __old, __len); ++ setlocale(LC_ALL, "C"); ++ char* __sanity; ++ ++#if !__DBL_HAS_INFINITY__ ++ errno = 0; ++#endif ++ ++ __v = strtod(__s, &__sanity); ++ ++ // _GLIBCXX_RESOLVE_LIB_DEFECTS ++ // 23. Num_get overflow result. ++ if (__sanity == __s || *__sanity != '\0') ++ { ++ __v = 0.0; ++ __err = ios_base::failbit; ++ } ++ else if ( ++#if __DBL_HAS_INFINITY__ ++ __v == numeric_limits<double>::infinity() ++ || __v == -numeric_limits<double>::infinity()) ++#else ++ (__v > 1.0 || __v < -1.0) && errno == ERANGE) ++#endif ++ { ++ if (__v > 0.0) ++ __v = numeric_limits<double>::max(); ++ else ++ __v = -numeric_limits<double>::max(); ++ __err = ios_base::failbit; ++ } ++ ++ setlocale(LC_ALL, __sav); ++ delete [] __sav; ++ } ++ ++ template<> ++ void ++ __convert_to_v(const char* __s, long double& __v, ++ ios_base::iostate& __err, const __c_locale&) throw() ++ { ++ // Assumes __s formatted for "C" locale. ++ char* __old = setlocale(LC_ALL, 0); ++ const size_t __len = strlen(__old) + 1; ++ char* __sav = new char[__len]; ++ memcpy(__sav, __old, __len); ++ setlocale(LC_ALL, "C"); ++ ++#if !__LDBL_HAS_INFINITY__ ++ errno = 0; ++#endif ++ ++#if defined(_GLIBCXX_HAVE_STRTOLD) && !defined(_GLIBCXX_HAVE_BROKEN_STRTOLD) ++ char* __sanity; ++ __v = strtold(__s, &__sanity); ++ ++ // _GLIBCXX_RESOLVE_LIB_DEFECTS ++ // 23. Num_get overflow result. ++ if (__sanity == __s || *__sanity != '\0') ++#else ++ typedef char_traits<char>::int_type int_type; ++ int __p = sscanf(__s, "%Lf", &__v); ++ ++ if (!__p || static_cast<int_type>(__p) == char_traits<char>::eof()) ++#endif ++ { ++ __v = 0.0l; ++ __err = ios_base::failbit; ++ } ++ else if ( ++#if __LDBL_HAS_INFINITY__ ++ __v == numeric_limits<long double>::infinity() ++ || __v == -numeric_limits<long double>::infinity()) ++#else ++ (__v > 1.0l || __v < -1.0l) && errno == ERANGE) ++#endif ++ { ++ if (__v > 0.0l) ++ __v = numeric_limits<long double>::max(); ++ else ++ __v = -numeric_limits<long double>::max(); ++ __err = ios_base::failbit; ++ } ++ ++ setlocale(LC_ALL, __sav); ++ delete [] __sav; ++ } ++ ++ ++ /* DragonFly's implementation of setlocale won't accept something like ++ "de_DE". According to nls manpage, the expected format is: ++ language[_territory][.codeset][@modifier], but it seems that both ++ the _territory and .codeset components are required. ++ ++ As an attempt to correct for this, we'll tack on ".UTF-8" if ++ a period is not detected in the locale string. ++ ++ There are no locales with modifiers on DragonFly so if found, they ++ will just be stripped off silently. e.g "de_DE@euro" will be reduced ++ to "de_DE". The UTF-8 default would be added after that. ++ */ ++ ++ void ++ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, ++ __c_locale) ++ { ++ const size_t size__s = (__s == NULL) ? 1 : strlen (__s); ++ const char UTF8[] = ".UTF-8"; ++ char localspec[size__s + 6 + 1]; ++ ++ if (__s == NULL) { ++ localspec[0] = NULL; ++ } else { ++ strcpy (localspec, __s); ++ char * pch = strchr (localspec, '@'); ++ if (pch != NULL) ++ *pch = 0; ++ ++ if ( (strchr (__s, '.') == NULL) ++ && (strcmp (__s, "C") != 0) ++ && (strcmp (__s, "POSIX") != 0)) ++ strncat (localspec, UTF8, 6); ++ } ++ ++ const char * result = std::setlocale(LC_ALL, localspec); ++ ++ if ((strcmp(result, "C") != 0) && (strcmp (result, localspec) != 0)) ++ __throw_runtime_error(__N("locale::facet::_S_create_c_locale " ++ "name not valid")); ++ __cloc = 0; ++ } ++ ++ void ++ locale::facet::_S_destroy_c_locale(__c_locale& __cloc) ++ { __cloc = 0; } ++ ++ __c_locale ++ locale::facet::_S_clone_c_locale(__c_locale&) throw() ++ { return __c_locale(); } ++ ++ __c_locale ++ locale::facet::_S_lc_ctype_c_locale(__c_locale, const char*) ++ { return __c_locale(); } ++ ++_GLIBCXX_END_NAMESPACE_VERSION ++} // namespace ++ ++namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) ++{ ++_GLIBCXX_BEGIN_NAMESPACE_VERSION ++ ++ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] = ++ { ++ "LC_CTYPE", ++ "LC_NUMERIC", ++ "LC_TIME", ++ "LC_COLLATE", ++ "LC_MONETARY", ++ "LC_MESSAGES" ++ }; ++ ++_GLIBCXX_END_NAMESPACE_VERSION ++} // namespace ++ ++namespace std _GLIBCXX_VISIBILITY(default) ++{ ++_GLIBCXX_BEGIN_NAMESPACE_VERSION ++ ++ const char* const* const locale::_S_categories = __gnu_cxx::category_names; ++ ++_GLIBCXX_END_NAMESPACE_VERSION ++} // namespace ++ ++// XXX GLIBCXX_ABI Deprecated ++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT ++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \ ++ extern "C" void ldbl (void) __attribute__ ((alias (#dbl))) ++_GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPi, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi); ++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT diff --git a/lang/gcc49/patches/patch-libstdc++-v3_config_locale_dragonfly_ctype__members.cc b/lang/gcc49/patches/patch-libstdc++-v3_config_locale_dragonfly_ctype__members.cc new file mode 100644 index 00000000000..deb656cdd3c --- /dev/null +++ b/lang/gcc49/patches/patch-libstdc++-v3_config_locale_dragonfly_ctype__members.cc @@ -0,0 +1,181 @@ +$NetBSD: patch-libstdc++-v3_config_locale_dragonfly_ctype__members.cc,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- libstdc++-v3/config/locale/dragonfly/ctype_members.cc.orig 2014-09-04 10:04:50.938450582 +0000 ++++ libstdc++-v3/config/locale/dragonfly/ctype_members.cc +@@ -0,0 +1,174 @@ ++// std::ctype implementation details, GNU version -*- C++ -*- ++ ++// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 ++// Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 3, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// Under Section 7 of GPL version 3, you are granted additional ++// permissions described in the GCC Runtime Library Exception, version ++// 3.1, as published by the Free Software Foundation. ++ ++// You should have received a copy of the GNU General Public License and ++// a copy of the GCC Runtime Library Exception along with this program; ++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++// <http://www.gnu.org/licenses/>. ++ ++// ++// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions. ++// ++ ++// Written by Benjamin Kosnik <bkoz@redhat.com> ++ ++#include <locale> ++#include <bits/c++locale_internal.h> ++#include <cstdlib> ++#include <cstring> ++#include <cstdio> ++ ++namespace std _GLIBCXX_VISIBILITY(default) ++{ ++ // NB: The other ctype<char> specializations are in src/locale.cc and ++ // various /config/os/* files. ++ ++ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs) ++ : ctype<char>(0, false, __refs) ++ { ++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0) ++ { ++ this->_S_destroy_c_locale(this->_M_c_locale_ctype); ++ this->_S_create_c_locale(this->_M_c_locale_ctype, __s); ++ } ++ } ++ ++ ctype_byname<char>::~ctype_byname() ++ { } ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++ ctype<wchar_t>::__wmask_type ++ ctype<wchar_t>::_M_convert_to_wmask( ++ const mask __attribute__((__unused__)) __m) const throw() ++ { ++ // DragonFly uses the same codes for 'char' as 'wchar_t', so this routine ++ // never gets called. ++ return __wmask_type(); ++ }; ++ ++ wchar_t ++ ctype<wchar_t>::do_toupper(wchar_t __c) const ++ { return towupper(__c); } ++ ++ const wchar_t* ++ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const ++ { ++ while (__lo < __hi) ++ { ++ *__lo = towupper(*__lo); ++ ++__lo; ++ } ++ return __hi; ++ } ++ ++ wchar_t ++ ctype<wchar_t>::do_tolower(wchar_t __c) const ++ { return towlower(__c); } ++ ++ const wchar_t* ++ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const ++ { ++ while (__lo < __hi) ++ { ++ *__lo = towlower(*__lo); ++ ++__lo; ++ } ++ return __hi; ++ } ++ ++ wchar_t ++ ctype<wchar_t>:: ++ do_widen(char __c) const ++ { return _M_widen[static_cast<unsigned char>(__c)]; } ++ ++ const char* ++ ctype<wchar_t>:: ++ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const ++ { ++ while (__lo < __hi) ++ { ++ *__dest = _M_widen[static_cast<unsigned char>(*__lo)]; ++ ++__lo; ++ ++__dest; ++ } ++ return __hi; ++ } ++ ++ char ++ ctype<wchar_t>:: ++ do_narrow(wchar_t __wc, char __dfault) const ++ { ++ if (__wc >= 0 && __wc < 128 && _M_narrow_ok) ++ return _M_narrow[__wc]; ++ const int __c = wctob(__wc); ++ return (__c == EOF ? __dfault : static_cast<char>(__c)); ++ } ++ ++ const wchar_t* ++ ctype<wchar_t>:: ++ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, ++ char* __dest) const ++ { ++ if (_M_narrow_ok) ++ while (__lo < __hi) ++ { ++ if (*__lo >= 0 && *__lo < 128) ++ *__dest = _M_narrow[*__lo]; ++ else ++ { ++ const int __c = wctob(*__lo); ++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c)); ++ } ++ ++__lo; ++ ++__dest; ++ } ++ else ++ while (__lo < __hi) ++ { ++ const int __c = wctob(*__lo); ++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c)); ++ ++__lo; ++ ++__dest; ++ } ++ return __hi; ++ } ++ ++ void ++ ctype<wchar_t>::_M_initialize_ctype() throw() ++ { ++ wint_t __i; ++ for (__i = 0; __i < 128; ++__i) ++ { ++ const int __c = wctob(__i); ++ if (__c == EOF) ++ break; ++ else ++ _M_narrow[__i] = static_cast<char>(__c); ++ } ++ if (__i == 128) ++ _M_narrow_ok = true; ++ else ++ _M_narrow_ok = false; ++ for (size_t __i = 0; ++ __i < sizeof(_M_widen) / sizeof(wint_t); ++__i) ++ _M_widen[__i] = btowc(__i); ++ } ++#endif // _GLIBCXX_USE_WCHAR_T ++} diff --git a/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__base.h b/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__base.h new file mode 100644 index 00000000000..3258b5fadd1 --- /dev/null +++ b/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__base.h @@ -0,0 +1,67 @@ +$NetBSD: patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__base.h,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h.orig 2014-09-04 10:04:50.980991821 +0000 ++++ libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h +@@ -0,0 +1,60 @@ ++// Locale support -*- C++ -*- ++ ++// Copyright (C) 2000, 2003, 2009, 2010 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 3, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// Under Section 7 of GPL version 3, you are granted additional ++// permissions described in the GCC Runtime Library Exception, version ++// 3.1, as published by the Free Software Foundation. ++ ++// You should have received a copy of the GNU General Public License and ++// a copy of the GCC Runtime Library Exception along with this program; ++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++// <http://www.gnu.org/licenses/>. ++ ++// ++// ISO C++ 14882: 22.1 Locales ++// ++ ++// Information as gleaned from /usr/include/ctype.h on DragonFly. ++// Full details can be found from git repo at: ++// http://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/include/ctype.h ++ ++namespace std _GLIBCXX_VISIBILITY(default) ++{ ++_GLIBCXX_BEGIN_NAMESPACE_VERSION ++ ++ /// @brief Base class for ctype. ++ struct ctype_base ++ { ++ // Non-standard typedefs. ++ typedef const int* __to_type; ++ ++ // NB: Offsets into ctype<char>::_M_table force a particular size ++ // on the mask type. Because of this, we don't use an enum. ++ typedef uint16_t mask; ++ static const mask upper = _CTYPEMASK_U; ++ static const mask lower = _CTYPEMASK_L; ++ static const mask alpha = _CTYPEMASK_A; ++ static const mask digit = _CTYPEMASK_D; ++ static const mask xdigit = _CTYPEMASK_X; ++ static const mask space = _CTYPEMASK_S; ++ static const mask print = _CTYPEMASK_R; ++ static const mask graph = _CTYPEMASK_G; ++ static const mask cntrl = _CTYPEMASK_C; ++ static const mask punct = _CTYPEMASK_P; ++ static const mask alnum = _CTYPEMASK_A | _CTYPEMASK_D; ++ }; ++ ++_GLIBCXX_END_NAMESPACE_VERSION ++} // namespace diff --git a/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__configure__char.cc b/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__configure__char.cc new file mode 100644 index 00000000000..64f51ebbae2 --- /dev/null +++ b/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__configure__char.cc @@ -0,0 +1,106 @@ +$NetBSD: patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__configure__char.cc,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- libstdc++-v3/config/os/bsd/dragonfly/ctype_configure_char.cc.orig 2014-09-04 10:04:51.024501545 +0000 ++++ libstdc++-v3/config/os/bsd/dragonfly/ctype_configure_char.cc +@@ -0,0 +1,99 @@ ++// Locale support -*- C++ -*- ++ ++// Copyright (C) 2011 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 3, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// Under Section 7 of GPL version 3, you are granted additional ++// permissions described in the GCC Runtime Library Exception, version ++// 3.1, as published by the Free Software Foundation. ++ ++// You should have received a copy of the GNU General Public License and ++// a copy of the GCC Runtime Library Exception along with this program; ++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++// <http://www.gnu.org/licenses/>. ++ ++/** @file ctype_configure_char.cc */ ++ ++// ++// ISO C++ 14882: 22.1 Locales ++// ++ ++#include <locale> ++#include <cstdlib> ++#include <cstring> ++ ++namespace std _GLIBCXX_VISIBILITY(default) ++{ ++_GLIBCXX_BEGIN_NAMESPACE_VERSION ++ ++// Information as gleaned from /usr/include/ctype.h ++ ++ const ctype_base::mask* ++ ctype<char>::classic_table() throw() ++ { return 0; } ++ ++ ctype<char>::ctype(__c_locale, const mask* __table, bool __del, ++ size_t __refs) ++ : facet(__refs), _M_del(__table != 0 && __del), ++ _M_toupper(NULL), _M_tolower(NULL), ++ _M_table(__table ? __table : classic_table()) ++ { ++ memset(_M_widen, 0, sizeof(_M_widen)); ++ _M_widen_ok = 0; ++ memset(_M_narrow, 0, sizeof(_M_narrow)); ++ _M_narrow_ok = 0; ++ } ++ ++ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) ++ : facet(__refs), _M_del(__table != 0 && __del), ++ _M_toupper(NULL), _M_tolower(NULL), ++ _M_table(__table ? __table : classic_table()) ++ { ++ memset(_M_widen, 0, sizeof(_M_widen)); ++ _M_widen_ok = 0; ++ memset(_M_narrow, 0, sizeof(_M_narrow)); ++ _M_narrow_ok = 0; ++ } ++ ++ char ++ ctype<char>::do_toupper(char __c) const ++ { return ::toupper((int) __c); } ++ ++ const char* ++ ctype<char>::do_toupper(char* __low, const char* __high) const ++ { ++ while (__low < __high) ++ { ++ *__low = ::toupper((int) *__low); ++ ++__low; ++ } ++ return __high; ++ } ++ ++ char ++ ctype<char>::do_tolower(char __c) const ++ { return ::tolower((int) __c); } ++ ++ const char* ++ ctype<char>::do_tolower(char* __low, const char* __high) const ++ { ++ while (__low < __high) ++ { ++ *__low = ::tolower((int) *__low); ++ ++__low; ++ } ++ return __high; ++ } ++ ++_GLIBCXX_END_NAMESPACE_VERSION ++} // namespace diff --git a/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__inline.h b/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__inline.h new file mode 100644 index 00000000000..c3abdce183b --- /dev/null +++ b/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__inline.h @@ -0,0 +1,168 @@ +$NetBSD: patch-libstdc++-v3_config_os_bsd_dragonfly_ctype__inline.h,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- libstdc++-v3/config/os/bsd/dragonfly/ctype_inline.h.orig 2014-09-04 10:04:51.067899081 +0000 ++++ libstdc++-v3/config/os/bsd/dragonfly/ctype_inline.h +@@ -0,0 +1,161 @@ ++// Locale support -*- C++ -*- ++ ++// Copyright (C) 2000, 2003, 2004, 2005, 2009, 2010 ++// Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 3, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// Under Section 7 of GPL version 3, you are granted additional ++// permissions described in the GCC Runtime Library Exception, version ++// 3.1, as published by the Free Software Foundation. ++ ++// You should have received a copy of the GNU General Public License and ++// a copy of the GCC Runtime Library Exception along with this program; ++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++// <http://www.gnu.org/licenses/>. ++ ++/** @file bits/ctype_inline.h ++ * This is an internal header file, included by other library headers. ++ * Do not attempt to use it directly. @headername{locale} ++ */ ++ ++// ++// ISO C++ 14882: 22.1 Locales ++// ++ ++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*) ++// functions go in ctype.cc ++ ++namespace std _GLIBCXX_VISIBILITY(default) ++{ ++_GLIBCXX_BEGIN_NAMESPACE_VERSION ++ ++ bool ++ ctype<char>:: ++ is(mask __m, char __c) const ++ { ++ if (_M_table) ++ return _M_table[static_cast<unsigned char>(__c)] & __m; ++ else ++ return __libc_ctype_ [__c + 1] & __m; ++ } ++ ++ const char* ++ ctype<char>:: ++ is(const char* __low, const char* __high, mask* __vec) const ++ { ++ if (_M_table) ++ while (__low < __high) ++ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)]; ++ else ++ for (;__low < __high; ++__vec, ++__low) ++ { ++ mask __m = 0; ++ if (this->is(upper, *__low)) __m |= upper; ++ if (this->is(lower, *__low)) __m |= lower; ++ if (this->is(alpha, *__low)) __m |= alpha; ++ if (this->is(digit, *__low)) __m |= digit; ++ if (this->is(xdigit, *__low)) __m |= xdigit; ++ if (this->is(space, *__low)) __m |= space; ++ if (this->is(print, *__low)) __m |= print; ++ if (this->is(graph, *__low)) __m |= graph; ++ if (this->is(cntrl, *__low)) __m |= cntrl; ++ if (this->is(punct, *__low)) __m |= punct; ++ // Do not include explicit line for alnum mask since it is a ++ // pure composite of masks on DragonFly. ++ *__vec = __m; ++ } ++ return __high; ++ } ++ ++ const char* ++ ctype<char>:: ++ scan_is(mask __m, const char* __low, const char* __high) const ++ { ++ if (_M_table) ++ while (__low < __high ++ && !(_M_table[static_cast<unsigned char>(*__low)] & __m)) ++ ++__low; ++ else ++ while (__low < __high && !this->is(__m, *__low)) ++ ++__low; ++ return __low; ++ } ++ ++ const char* ++ ctype<char>:: ++ scan_not(mask __m, const char* __low, const char* __high) const ++ { ++ if (_M_table) ++ while (__low < __high ++ && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0) ++ ++__low; ++ else ++ while (__low < __high && this->is(__m, *__low) != 0) ++ ++__low; ++ return __low; ++ } ++ ++#ifdef _GLIBCXX_USE_WCHAR_T ++ inline bool ++ ctype<wchar_t>:: ++ do_is(mask __m, wchar_t __c) const ++ { ++ return __libc_ctype_ [__c + 1] & __m; ++ } ++ ++ inline const wchar_t* ++ ctype<wchar_t>:: ++ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const ++ { ++ for (; __lo < __hi; ++__vec, ++__lo) ++ { ++ mask __m = 0; ++ if (isupper (*__lo)) __m |= _CTYPEMASK_U; ++ if (islower (*__lo)) __m |= _CTYPEMASK_L; ++ if (isdigit (*__lo)) __m |= _CTYPEMASK_D; ++ if (isspace (*__lo)) __m |= _CTYPEMASK_S; ++ if (ispunct (*__lo)) __m |= _CTYPEMASK_P; ++ if (isblank (*__lo)) __m |= _CTYPEMASK_B; ++ if (iscntrl (*__lo)) __m |= _CTYPEMASK_C; ++ if (isalpha (*__lo)) __m |= _CTYPEMASK_A; ++ if (isgraph (*__lo)) __m |= _CTYPEMASK_G; ++ if (isprint (*__lo)) __m |= _CTYPEMASK_R; ++ if (isxdigit(*__lo)) __m |= _CTYPEMASK_X; ++ /* alnum already covered = alpha | digit */ ++ ++ *__vec = __m; ++ } ++ return __hi; ++ } ++ ++ inline const wchar_t* ++ ctype<wchar_t>:: ++ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const ++ { ++ while (__lo < __hi && !(__libc_ctype_ [*__lo + 1] & __m)) ++ ++__lo; ++ return __lo; ++ } ++ ++ inline const wchar_t* ++ ctype<wchar_t>:: ++ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const ++ { ++ while (__lo < __hi && (__libc_ctype_ [*__lo + 1] & __m)) ++ ++__lo; ++ return __lo; ++ } ++#endif ++ ++_GLIBCXX_END_NAMESPACE_VERSION ++} // namespace diff --git a/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_dragonfly_os__defines.h b/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_dragonfly_os__defines.h new file mode 100644 index 00000000000..3ec934b92f4 --- /dev/null +++ b/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_dragonfly_os__defines.h @@ -0,0 +1,48 @@ +$NetBSD: patch-libstdc++-v3_config_os_bsd_dragonfly_os__defines.h,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- libstdc++-v3/config/os/bsd/dragonfly/os_defines.h.orig 2014-09-04 10:04:51.114470897 +0000 ++++ libstdc++-v3/config/os/bsd/dragonfly/os_defines.h +@@ -0,0 +1,41 @@ ++// Specific definitions for BSD -*- C++ -*- ++ ++// Copyright (C) 2000, 2009, 2010 Free Software Foundation, Inc. ++// ++// This file is part of the GNU ISO C++ Library. This library is free ++// software; you can redistribute it and/or modify it under the ++// terms of the GNU General Public License as published by the ++// Free Software Foundation; either version 3, or (at your option) ++// any later version. ++ ++// This library is distributed in the hope that it will be useful, ++// but WITHOUT ANY WARRANTY; without even the implied warranty of ++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++// GNU General Public License for more details. ++ ++// Under Section 7 of GPL version 3, you are granted additional ++// permissions described in the GCC Runtime Library Exception, version ++// 3.1, as published by the Free Software Foundation. ++ ++// You should have received a copy of the GNU General Public License and ++// a copy of the GCC Runtime Library Exception along with this program; ++// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++// <http://www.gnu.org/licenses/>. ++ ++ ++#ifndef _GLIBCXX_OS_DEFINES ++#define _GLIBCXX_OS_DEFINES 1 ++ ++// System-specific #define, typedefs, corrections, etc, go here. This ++// file will come before all others. ++ ++/* FreeBSD approach, likely a mistake for DragonFly. ++#define _GLIBCXX_USE_C99_CHECK 1 ++#define _GLIBCXX_USE_C99_DYNAMIC (!(__ISO_C_VISIBLE >= 1999)) ++#define _GLIBCXX_USE_C99_LONG_LONG_CHECK 1 ++#define _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC (_GLIBCXX_USE_C99_DYNAMIC || !defined __LONG_LONG_SUPPORTED) ++#define _GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_CHECK 1 ++#define _GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_DYNAMIC defined _XOPEN_SOURCE ++*/ ++ ++#endif diff --git a/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_netbsd_ctype__base.h b/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_netbsd_ctype__base.h new file mode 100644 index 00000000000..8f3567afb75 --- /dev/null +++ b/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_netbsd_ctype__base.h @@ -0,0 +1,39 @@ +$NetBSD: patch-libstdc++-v3_config_os_bsd_netbsd_ctype__base.h,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support _CTYPE_BL + +--- libstdc++-v3/config/os/bsd/netbsd/ctype_base.h.orig 2014-01-02 22:30:10.000000000 +0000 ++++ libstdc++-v3/config/os/bsd/netbsd/ctype_base.h +@@ -43,9 +43,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + + // NB: Offsets into ctype<char>::_M_table force a particular size + // on the mask type. Because of this, we don't use an enum. +- typedef unsigned char mask; + +-#ifndef _CTYPE_U ++#if defined(_CTYPE_BL) ++ typedef unsigned short mask; ++ static const mask upper = _CTYPE_U; ++ static const mask lower = _CTYPE_L; ++ static const mask alpha = _CTYPE_A; ++ static const mask digit = _CTYPE_D; ++ static const mask xdigit = _CTYPE_X; ++ static const mask space = _CTYPE_S; ++ static const mask print = _CTYPE_R; ++ static const mask graph = _CTYPE_G; ++ static const mask cntrl = _CTYPE_C; ++ static const mask punct = _CTYPE_P; ++ static const mask alnum = _CTYPE_A | _CTYPE_D; ++#elif !defined(_CTYPE_U) ++ typedef unsigned char mask; + static const mask upper = _U; + static const mask lower = _L; + static const mask alpha = _U | _L; +@@ -58,6 +71,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + static const mask punct = _P; + static const mask alnum = _U | _L | _N; + #else ++ typedef unsigned char mask; + static const mask upper = _CTYPE_U; + static const mask lower = _CTYPE_L; + static const mask alpha = _CTYPE_U | _CTYPE_L; diff --git a/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_netbsd_ctype__configure__char.cc b/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_netbsd_ctype__configure__char.cc new file mode 100644 index 00000000000..092a07a2d09 --- /dev/null +++ b/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_netbsd_ctype__configure__char.cc @@ -0,0 +1,59 @@ +$NetBSD: patch-libstdc++-v3_config_os_bsd_netbsd_ctype__configure__char.cc,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support _CTYPE_BL + +--- libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc.orig 2014-01-02 22:30:10.000000000 +0000 ++++ libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc +@@ -38,11 +38,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Information as gleaned from /usr/include/ctype.h + ++#ifndef _CTYPE_BL + extern "C" const u_int8_t _C_ctype_[]; ++#endif + + const ctype_base::mask* + ctype<char>::classic_table() throw() +- { return _C_ctype_ + 1; } ++#ifdef _CTYPE_BL ++ { return _C_ctype_tab_ + 1; } ++#else ++ { return _C_ctype_ + 1; } ++#endif + + ctype<char>::ctype(__c_locale, const mask* __table, bool __del, + size_t __refs) +@@ -69,14 +75,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + + char + ctype<char>::do_toupper(char __c) const +- { return ::toupper((int) __c); } ++ { return ::toupper((int)(unsigned char) __c); } + + const char* + ctype<char>::do_toupper(char* __low, const char* __high) const + { + while (__low < __high) + { +- *__low = ::toupper((int) *__low); ++ *__low = ::toupper((int)(unsigned char) *__low); + ++__low; + } + return __high; +@@ -84,14 +90,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + + char + ctype<char>::do_tolower(char __c) const +- { return ::tolower((int) __c); } ++ { return ::tolower((int)(unsigned char) __c); } + + const char* + ctype<char>::do_tolower(char* __low, const char* __high) const + { + while (__low < __high) + { +- *__low = ::tolower((int) *__low); ++ *__low = ::tolower((int)(unsigned char) *__low); + ++__low; + } + return __high; diff --git a/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_netbsd_ctype__inline.h b/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_netbsd_ctype__inline.h new file mode 100644 index 00000000000..8fd68f970e5 --- /dev/null +++ b/lang/gcc49/patches/patch-libstdc++-v3_config_os_bsd_netbsd_ctype__inline.h @@ -0,0 +1,15 @@ +$NetBSD: patch-libstdc++-v3_config_os_bsd_netbsd_ctype__inline.h,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support _CTYPE_BL + +--- libstdc++-v3/config/os/bsd/netbsd/ctype_inline.h.orig 2014-01-02 22:30:10.000000000 +0000 ++++ libstdc++-v3/config/os/bsd/netbsd/ctype_inline.h +@@ -48,7 +48,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + is(const char* __low, const char* __high, mask* __vec) const + { + while (__low < __high) +- *__vec++ = _M_table[*__low++]; ++ *__vec++ = _M_table[(unsigned char)*__low++]; + return __high; + } + diff --git a/lang/gcc49/patches/patch-libstdc++-v3_configure b/lang/gcc49/patches/patch-libstdc++-v3_configure new file mode 100644 index 00000000000..4352189efdd --- /dev/null +++ b/lang/gcc49/patches/patch-libstdc++-v3_configure @@ -0,0 +1,49 @@ +$NetBSD: patch-libstdc++-v3_configure,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- libstdc++-v3/configure.orig 2014-03-20 18:57:07.000000000 +0000 ++++ libstdc++-v3/configure +@@ -15811,7 +15811,7 @@ $as_echo "stdio" >&6; } + if test "${enable_clocale+set}" = set; then : + enableval=$enable_clocale; + case "$enableval" in +- generic|gnu|ieee_1003.1-2001|newlib|yes|no|auto) ;; ++ generic|gnu|ieee_1003.1-2001|newlib|darwin|dragonfly|yes|no|auto) ;; + *) as_fn_error "Unknown argument to enable/disable clocale" "$LINENO" 5 ;; + esac + +@@ -15849,6 +15849,9 @@ fi + darwin* | freebsd*) + enable_clocale_flag=darwin + ;; ++ dragonfly*) ++ enable_clocale_flag=dragonfly ++ ;; + openbsd*) + enable_clocale_flag=newlib + ;; +@@ -15988,6 +15991,23 @@ $as_echo "darwin or freebsd" >&6; } + CMESSAGES_H=config/locale/generic/messages_members.h + CMESSAGES_CC=config/locale/generic/messages_members.cc + CMONEY_CC=config/locale/generic/monetary_members.cc ++ CNUMERIC_CC=config/locale/generic/numeric_members.cc ++ CTIME_H=config/locale/generic/time_members.h ++ CTIME_CC=config/locale/generic/time_members.cc ++ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h ++ ;; ++ dragonfly) ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: dragonfly" >&5 ++$as_echo "dragonfly" >&6; } ++ ++ CLOCALE_H=config/locale/generic/c_locale.h ++ CLOCALE_CC=config/locale/dragonfly/c_locale.cc ++ CCODECVT_CC=config/locale/generic/codecvt_members.cc ++ CCOLLATE_CC=config/locale/generic/collate_members.cc ++ CCTYPE_CC=config/locale/dragonfly/ctype_members.cc ++ CMESSAGES_H=config/locale/generic/messages_members.h ++ CMESSAGES_CC=config/locale/generic/messages_members.cc ++ CMONEY_CC=config/locale/generic/monetary_members.cc + CNUMERIC_CC=config/locale/generic/numeric_members.cc + CTIME_H=config/locale/generic/time_members.h + CTIME_CC=config/locale/generic/time_members.cc diff --git a/lang/gcc49/patches/patch-libstdc++-v3_configure.host b/lang/gcc49/patches/patch-libstdc++-v3_configure.host new file mode 100644 index 00000000000..8ac6c65bbd0 --- /dev/null +++ b/lang/gcc49/patches/patch-libstdc++-v3_configure.host @@ -0,0 +1,16 @@ +$NetBSD: patch-libstdc++-v3_configure.host,v 1.1 2014/09/04 18:43:11 jperkin Exp $ + +Support DragonFly. + +--- libstdc++-v3/configure.host.orig 2013-07-04 21:07:44.000000000 +0000 ++++ libstdc++-v3/configure.host +@@ -260,6 +260,9 @@ case "${host_os}" in + os_include_dir="os/djgpp" + error_constants_dir="os/djgpp" + ;; ++ dragonfly*) ++ os_include_dir="os/bsd/dragonfly" ++ ;; + freebsd*) + os_include_dir="os/bsd/freebsd" + ;; diff --git a/lang/gcc49/version.mk b/lang/gcc49/version.mk new file mode 100644 index 00000000000..bde6e079f33 --- /dev/null +++ b/lang/gcc49/version.mk @@ -0,0 +1,2 @@ +# $NetBSD: version.mk,v 1.1 2014/09/04 18:43:11 jperkin Exp $ +GCC49_DIST_VERSION:= 4.9.1 |