diff --git a/srcpkgs/plan9port/patches/xd-runewise.patch b/srcpkgs/plan9port/patches/xd-runewise.patch new file mode 100644 index 00000000000..2e92a84b1a8 --- /dev/null +++ b/srcpkgs/plan9port/patches/xd-runewise.patch @@ -0,0 +1,289 @@ +--- man/man1/xd.1 2013-03-12 10:00:08.000000000 +0100 ++++ man/man1/xd.1 2015-04-10 14:06:30.110162757 +0200 +@@ -66,6 +66,13 @@ + .SM ASCII + representations or C escape sequences where possible. + .TP ++.B -R ++Format as ++.B 1x ++but print ++.B Rune ++representations or C escape sequences where possible. ++.TP + .BI -a style + Print file addresses in the given style (and size 4). + .TP +--- src/cmd/xd.c 2013-09-27 11:00:14.000000000 +0200 ++++ src/cmd/xd.c 2015-02-11 14:03:14.000000000 +0100 +@@ -5,6 +5,7 @@ + unsigned char odata[16]; + unsigned char data[16]; + int ndata; ++int nread; + unsigned long addr; + int repeats; + int swizzle; +@@ -12,16 +13,20 @@ + int flush; + int abase=2; + int xd(char *, int); +-void xprint(char *, ulong); ++void xprint(char *, ...); + void initarg(void), swizz(void), swizz8(void); + enum{ +- Narg=10 ++ Narg=10, ++ ++ TNone=0, ++ TAscii, ++ TRune, + }; + typedef struct Arg Arg; + typedef void fmtfn(char *); + struct Arg + { +- int ascii; /* 0==none, 1==ascii */ ++ int chartype; /* TNone, TAscii, TRunes */ + int loglen; /* 0==1, 1==2, 2==4, 3==8 */ + int base; /* 0==8, 1==10, 2==16 */ + fmtfn *fn; /* function to call with data */ +@@ -30,7 +35,7 @@ + }arg[Narg]; + int narg; + +-fmtfn fmt0, fmt1, fmt2, fmt3, fmtc; ++fmtfn fmt0, fmt1, fmt2, fmt3, fmtc, fmtr; + fmtfn *fmt[4] = { + fmt0, + fmt1, +@@ -46,11 +51,15 @@ + }; + + char *cfmt[3][3] = { +- " %c", " %c", " %c", ++ " %c", " %c", " %c", + " %.3s", " %.3s", " %.2s", + " %.3uo", " %.3ud", " %.2ux", + }; + ++char *rfmt[1][1] = { ++ " %2.2C", ++}; ++ + char *afmt[2][3] = { + "%.7luo ", "%.7lud ", "%.7lux ", + "%7luo ", "%7lud ", "%7lux ", +@@ -120,7 +129,13 @@ + while(argv[0][0]){ + switch(argv[0][0]){ + case 'c': +- ap->ascii = 1; ++ ap->chartype = TAscii; ++ ap->loglen = 0; ++ if(argv[0][1] || argv[0][-1]!='-') ++ goto Usage; ++ break; ++ case 'R': ++ ap->chartype = TRune; + ap->loglen = 0; + if(argv[0][1] || argv[0][-1]!='-') + goto Usage; +@@ -157,7 +172,9 @@ + } + argv[0]++; + } +- if(ap->ascii) ++ if(ap->chartype == TRune) ++ ap->fn = fmtr; ++ else if(ap->chartype == TAscii) + ap->fn = fmtc; + else + ap->fn = fmt[ap->loglen]; +@@ -185,7 +202,7 @@ + fprint(2, "xd: too many formats (max %d)\n", Narg); + exits("usage"); + } +- ap->ascii = 0; ++ ap->chartype = TNone; + ap->loglen = 2; + ap->base = 2; + ap->fn = fmt2; +@@ -197,7 +214,7 @@ + xd(char *name, int title) + { + int fd; +- int i, star; ++ int i, star, nsee, nleft; + Arg *ap; + Biobuf *bp; + +@@ -216,21 +233,29 @@ + xprint("%s\n", (long)name); + addr = 0; + star = 0; +- while((ndata=Bread(bp, data, 16)) >= 0){ +- if(ndata < 16) +- for(i=ndata; i<16; i++) ++ nsee = 16; ++ nleft = 0; ++ /* read 32 but see only 16 so that runes are happy */ ++ while((ndata=Bread(bp, data + nleft, 32 - nleft)) >= 0){ ++ ndata += nleft; ++ nleft = 0; ++ nread = ndata; ++ if(ndata>nsee) ++ ndata = nsee; ++ else if(ndata0 && data[0]==odata[0]){ +- for(i=1; i<16; i++) ++ for(i=1; insee){ ++ nleft = nread - nsee; ++ memmove(data, data + nsee, nleft); ++ } + } + Bterm(bp); + return 0; +@@ -353,39 +382,81 @@ + } + + void ++onefmtc(uchar c) ++{ ++ switch(c){ ++ case '\t': ++ xprint(cfmt[1][2], (long)"\\t"); ++ break; ++ case '\r': ++ xprint(cfmt[1][2], (long)"\\r"); ++ break; ++ case '\n': ++ xprint(cfmt[1][2], (long)"\\n"); ++ break; ++ case '\b': ++ xprint(cfmt[1][2], (long)"\\b"); ++ break; ++ default: ++ if(c>=0x7F || ' '>c) ++ xprint(cfmt[2][2], c); ++ else ++ xprint(cfmt[0][2], c); ++ break; ++ } ++} ++ ++void + fmtc(char *f) + { + int i; + + USED(f); + for(i=0; i=0x7F || ' '>data[i]) +- xprint(cfmt[2][2], data[i]); +- else +- xprint(cfmt[0][2], data[i]); +- break; +- } ++ onefmtc(data[i]); + } + + void +-xprint(char *fmt, ulong d) ++fmtr(char *f) + { +- if(Bprint(&bout, fmt, d)<0){ ++ int i, w, cw; ++ Rune r; ++ static int nstart; ++ ++ USED(f); ++ if(nstart) ++ xprint("%*c", 3*nstart, ' '); ++ for(i=nstart; inread) ++ onefmtc(data[i++]); ++ else{ ++ cw = w; ++ if(i + w>ndata) ++ cw = ndata - i; ++ xprint(rfmt[0][0], r); ++ xprint("%*c", 3*cw-3, ' '); ++ i += w; ++ } ++ } ++ if(i > ndata) ++ nstart = i - ndata; ++ else ++ nstart = 0; ++} ++ ++void ++xprint(char *fmt, ...) ++{ ++ va_list arglist; ++ ++ va_start(arglist, fmt); ++ if(Bvprint(&bout, fmt, arglist)<0){ + fprint(2, "xd: i/o error\n"); + exits("i/o error"); + } ++ va_end(arglist); + } diff --git a/srcpkgs/plan9port/template b/srcpkgs/plan9port/template index 39998cef401..5c273feecfd 100644 --- a/srcpkgs/plan9port/template +++ b/srcpkgs/plan9port/template @@ -1,22 +1,27 @@ # Template file for 'plan9port' pkgname=plan9port -version=20140306 -revision=5 -wrksrc=$pkgname +version=20150410 +_githash=3aca22118d808597bc7451adc559d89460ed5a6e +revision=1 +wrksrc="${pkgname}-${_githash}" hostmakedepends="which perl" makedepends="libX11-devel libXt-devel libXext-devel freetype-devel fontconfig-devel" short_desc="Port of many Plan 9 programs to Unix-like operating systems" maintainer="Christian Neukirchen " license="custom" homepage="http://swtch.com/plan9port/" -distfiles="https://${pkgname}.googlecode.com/files/${pkgname}-${version}.tgz" -checksum=cbb826cde693abdaa2051c49e7ebf75119bf2a4791fe3b3229f1ac36a408eaeb +distfiles="https://github.com/9fans/plan9port/archive/${_githash}.tar.gz" +checksum=6c00253ec08b3e5f8fdcfa5219998b3d71a7b135c85fc85d0451d7d0dee33da6 nocross=yes do_build() { + CFLAGS+=' -D_DEFAULT_SOURCE' + echo "CFLAGS='$CFLAGS'" >LOCAL.config + echo "LDFLAGS='$LDFLAGS'" >>LOCAL.config + sed -i 's/-O2/$CFLAGS/' bin/9c + ./INSTALL } - do_install() { xargs -a lib/moveplan9.files -d'\n' sed -i "s#$wrksrc#/opt/plan9#" @@ -26,5 +31,5 @@ do_install() { vmkdir opt cp -a $wrksrc $DESTDIR/opt/plan9 cd $DESTDIR/opt/plan9 - rm -r install.{log,sum} .hg* + rm -f install.{log,sum} }