Index: devel/powerpc64-gcc/Makefile
===================================================================
--- devel/powerpc64-gcc/Makefile
+++ devel/powerpc64-gcc/Makefile
@@ -26,14 +26,22 @@
PATCH_WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}
WRKSRC= ${WRKDIR}/build-gcc
+.if empty(GCC_TARGET)
+# We are building for a FreeBSD target
+GCC_TARGET= ${PKGNAMEPREFIX}portbld-${OPSYS:tl}${OSREL}
+BU_PREFIX= ${PKGNAMEPREFIX}${OPSYS:tl}
+EXTRA_PATCHES+= ${FILESDIR}/freebsd-format-extensions
+.else
+BU_PREFIX= ${GCC_TARGET}
+.endif
GNU_CONFIGURE= yes
-CONFIGURE_ARGS= --target=${PKGNAMEPREFIX}portbld-${OPSYS:tl}${OSREL} --disable-nls --enable-languages=c,c++ \
+CONFIGURE_ARGS= --target=${GCC_TARGET} --disable-nls --enable-languages=c,c++ \
--without-headers --disable-shared \
--with-gmp=${LOCALBASE} \
--with-pkgversion="FreeBSD Ports Collection for ${PKGNAMEPREFIX:C/-//g}" \
--with-system-zlib \
- --with-as=${LOCALBASE}/bin/${PKGNAMEPREFIX}${OPSYS:tl}-as \
- --with-ld=${LOCALBASE}/bin/${PKGNAMEPREFIX}${OPSYS:tl}-ld
+ --with-as=${LOCALBASE}/bin/${BU_PREFIX}-as \
+ --with-ld=${LOCALBASE}/bin/${BU_PREFIX}-ld
CONFIGURE_SCRIPT= ../${PORTNAME}-${PORTVERSION}/configure
Index: devel/powerpc64-gcc/files/patch-format-extensions
===================================================================
--- devel/powerpc64-gcc/files/patch-format-extensions
+++ devel/powerpc64-gcc/files/patch-format-extensions
@@ -1,117 +0,0 @@
-Index: gcc/c-family/c-format.c
-===================================================================
---- gcc/c-family/c-format.c (revision 216017)
-+++ gcc/c-family/c-format.c (working copy)
-@@ -622,6 +622,26 @@
- { NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL }
- };
-
-+static const format_char_info fbsd_ext_char_info =
-+{ NULL, 1, STD_EXT, { T89_C, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "cR", NULL };
-+
-+static const format_char_info fbsd_print_char_table[] =
-+{
-+ /* BSD conversion specifiers. */
-+ /* FreeBSD kernel extensions (src/sys/kern/subr_prf.c).
-+ The format %b is supported to decode error registers.
-+ Its usage is: printf("reg=%b\n", regval, "*");
-+ which produces: reg=3
-+ The format %D provides a hexdump given a pointer and separator string:
-+ ("%6D", ptr, ":") -> XX:XX:XX:XX:XX:XX
-+ ("%*D", len, ptr, " ") -> XX XX XX XX ...
-+ */
-+ { "D", 1, STD_EXT, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "cR", &fbsd_ext_char_info },
-+ { "b", 0, STD_EXT, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp", "", &fbsd_ext_char_info },
-+ { "ry", 0, STD_EXT, { T89_I, BADLEN, BADLEN, T89_L, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wp0 +#", "i", NULL },
-+ { NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL }
-+};
-+
- static const format_char_info asm_fprintf_char_table[] =
- {
- /* C89 conversion specifiers. */
-@@ -872,6 +892,12 @@
- strfmon_flag_specs, strfmon_flag_pairs,
- FMT_FLAG_ARG_CONVERT, 'w', '#', 'p', 0, 'L', 0,
- NULL, NULL
-+ },
-+ { "printf0", printf_length_specs, print_char_table, " +#0-'I", NULL,
-+ printf_flag_specs, printf_flag_pairs,
-+ FMT_FLAG_ARG_CONVERT|FMT_FLAG_DOLLAR_MULTIPLE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_EMPTY_PREC_OK|FMT_FLAG_NULL_FORMAT_OK,
-+ 'w', 0, 'p', 0, 'L', 0,
-+ &integer_type_node, &integer_type_node
- }
- };
-
-@@ -1426,6 +1452,9 @@
-
- if (integer_zerop (format_tree))
- {
-+ if (!(format_types[info->format_type].flags & FMT_FLAG_NULL_FORMAT_OK))
-+ warning (OPT_Wformat_, "null format string");
-+
- /* Skip to first argument to check, so we can see if this format
- has any arguments (it shouldn't). */
- while (arg_num + 1 < info->first_arg_num)
-@@ -1926,6 +1955,14 @@
- while (fli->name != 0
- && strncmp (fli->name, format_chars, strlen (fli->name)))
- fli++;
-+ /*
-+ * Make sure FreeBSD's D format char takes preference
-+ * over new DD length specifier if FreeBSD format
-+ * extensions are requested.
-+ */
-+ if (fli->index == FMT_LEN_D && flag_format_extensions
-+ && fki->conversion_specs == print_char_table)
-+ while (fli->name != 0) fli++;
- if (fli->name != 0)
- {
- format_chars += strlen (fli->name);
-@@ -1993,6 +2030,14 @@
- while (fci->format_chars != 0
- && strchr (fci->format_chars, format_char) == 0)
- ++fci;
-+ if (fci->format_chars == 0 && flag_format_extensions
-+ && fki->conversion_specs == print_char_table)
-+ {
-+ fci = fbsd_print_char_table;
-+ while (fci->format_chars != 0
-+ && strchr (fci->format_chars, format_char) == 0)
-+ ++fci;
-+ }
- if (fci->format_chars == 0)
- {
- if (ISGRAPH (format_char))
-Index: gcc/c-family/c-format.h
-===================================================================
---- gcc/c-family/c-format.h (revision 216017)
-+++ gcc/c-family/c-format.h (working copy)
-@@ -75,11 +75,12 @@
- FMT_FLAG_DOLLAR_GAP_POINTER_OK = 128,
- /* The format arg is an opaque object that will be parsed by an external
- facility. */
-- FMT_FLAG_PARSE_ARG_CONVERT_EXTERNAL = 256
-+ FMT_FLAG_PARSE_ARG_CONVERT_EXTERNAL = 256,
- /* Not included here: details of whether width or precision may occur
- (controlled by width_char and precision_char); details of whether
- '*' can be used for these (width_type and precision_type); details
- of whether length modifiers can occur (length_char_specs). */
-+ FMT_FLAG_NULL_FORMAT_OK = 512
- };
-
- /* Structure describing a length modifier supported in format checking, and
-Index: gcc/config/freebsd.opt
-===================================================================
---- gcc/config/freebsd.opt (revision 216017)
-+++ gcc/config/freebsd.opt (working copy)
-@@ -34,6 +34,10 @@
- defsym=
- Driver JoinedOrMissing
-
-+fformat-extensions
-+Common Report Var(flag_format_extensions) Init(0)
-+Allow FreeBSD kernel-specific printf format specifiers.
-+
- posix
- Driver
-