Patchwork getopt support in crossgcc

login
register
about
Submitter Patrick Georgi
Date 2010-01-27 23:52:00
Message ID <4B60D1A0.2060007@georgi-clan.de>
Download mbox | patch
Permalink /patch/846/
State Accepted
Headers show

Comments

Patrick Georgi - 2010-01-27 23:52:00
Hi,


attached patch adds the getopt tool to crossgcc. In case it doesn't
exist in the system (eg. mingw), it's compiled and added to the path.

The getopt implementation is taken from dragonflybsd, thus cleanly
sublicensable to GPL, given that it's 3-clause BSD licensed.
Besides, it's never linked to any other code in our tree.

I wouldn't mind to have some GNU implementation, but I just didn't find
one in my short search.


Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de>
Property changes on: util\crossgcc
___________________________________________________________________
Added: svn:ignore
   + getopt
getopt.exe
tarballs
xgcc
ron minnich - 2010-01-27 23:55:47
Acked-by: Ronald G. Minnich <rminnich@gmail.com>

Patch

Index: util/crossgcc/getopt.c

===================================================================
--- util/crossgcc/getopt.c	(revision 0)

+++ util/crossgcc/getopt.c	(revision 0)

@@ -0,0 +1,32 @@ 

+/* $FreeBSD: src/usr.bin/getopt/getopt.c,v 1.4.2.2 2001/07/30 10:16:38 dd Exp $ */
+/* $DragonFly: src/usr.bin/getopt/getopt.c,v 1.4 2004/10/23 13:33:36 eirikn Exp $ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	int status = 0;
+
+	optind = 2;	/* Past the program name and the option letters. */
+	while ((c = getopt(argc, argv, argv[1])) != -1)
+		switch (c) {
+		case '?':
+			status = 1;	/* getopt routine gave message */
+			break;
+		default:
+			if (optarg != NULL)
+				printf(" -%c %s", c, optarg);
+			else
+				printf(" -%c", c);
+			break;
+		}
+	printf(" --");
+	for (; optind < argc; optind++)
+		printf(" %s", argv[optind]);
+	printf("\n");
+	return(status);
+}
Index: util/crossgcc/buildgcc

===================================================================
--- util/crossgcc/buildgcc	(revision 5060)

+++ util/crossgcc/buildgcc	(working copy)

@@ -132,6 +132,10 @@ 

 
 printf "${blue}Welcome to the ${red}coresystems${blue} cross toolchain builder v$CROSSGCC_VERSION ($CROSSGCC_DATE)${NC}\n\n"
 
+# Look if we have getopt. If not, build it.
+export PATH=$PATH:.
+getopt - > /dev/null 2>/dev/null || gcc -o getopt getopt.c
+
 # parse parameters.. try to find out whether we're running GNU getopt
 getoptbrand="`getopt -V`"
 if [ "${getoptbrand:0:6}" == "getopt" ]; then
@@ -205,7 +209,7 @@ 

 		for patch in patches/${!dir}_*.patch; do
 			test -r $patch || continue
 			printf "   o `basename $patch`\n"
-			patch -s -N -p0 < `echo $patch`
+			$PATCH -s -N -p0 < `echo $patch`
 		done
 	)
 done