NetBSD Problem Report #48863

From raizen@phoenix.lloedy.com  Sun Jun  1 23:37:36 2014
Return-Path: <raizen@phoenix.lloedy.com>
Received: from mail.netbsd.org (mail.netbsd.org [149.20.53.66])
	(using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
	(Client CN "mail.netbsd.org", Issuer "Postmaster NetBSD.org" (verified OK))
	by mollari.NetBSD.org (Postfix) with ESMTPS id 97734A651D
	for <gnats-bugs@gnats.NetBSD.org>; Sun,  1 Jun 2014 23:37:36 +0000 (UTC)
Message-Id: <20140601233108.7FEB13E271F@phoenix.lloedy.com>
Date: Mon,  2 Jun 2014 01:31:08 +0200 (CEST)
From: raizen@lloedy.com
Reply-To: raizen@lloedy.com
To: gnats-bugs@gnats.NetBSD.org
Subject: build.sh fails to build. 
X-Send-Pr-Version: 3.95

>Number:         48863
>Category:       xsrc
>Synopsis:       build.sh fails to build
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    xsrc-manager
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Jun 01 23:40:01 +0000 2014
>Closed-Date:    Sun Nov 09 08:46:12 +0000 2014
>Last-Modified:  Sun Nov 09 08:46:12 +0000 2014
>Originator:     Sandro Millien
>Release:        NetBSD 6.0.1
>Organization:
>Environment:


System: NetBSD phoenix.lloedy.com 6.0.1 NetBSD 6.0.1 (GENERIC) #0: Fri Feb 15 13:59:02 CET 2013 netbsd@phoenix.lloedy.com:/usr/obj/sys/arch/amd64/compile/GENERIC amd64
Architecture: x86_64
Machine: amd64
>Description:

	Build fails.


=$=>	cat /etc/mk.conf


MKDEBUG=			yes
MKDEBUGLIB=			yes
MKTTINTERP=			yes
NOCLEANDIR=			yes

=$=> cd /usr/src && cvs update -r netbsd-6-1
=$=> cd /usr/xsrc && cvs update -r netbsd-6-1

=$=> Following is a log of the build process


===> build.sh command:    ./build.sh -O /usr/obj -T /usr/tools -X /usr/xsrc -U -u -x -j2 tools
===> build.sh started:    Mon Jun  2 00:10:35 CEST 2014
===> NetBSD version:      6.1.4_PATCH
===> MACHINE:             amd64
===> MACHINE_ARCH:        x86_64
===> Build platform:      NetBSD 6.0.1 amd64
===> HOST_SH:             /bin/sh
===> TOOLDIR path:        /usr/tools
===> DESTDIR path:        /usr/obj/destdir.amd64
===> RELEASEDIR path:     /usr/obj/releasedir
===> Updated makewrapper: /usr/tools/bin/nbmake-amd64
--- obj-tools ---
obj ===> tools
--- obj-host-mkdep ---
obj ===> tools/host-mkdep

[ ... ]


--- /usr/tools/share/groff/site-tmac/mdoc.local ---
===> Tools built to /usr/tools
===> build.sh ended:      Mon Jun  2 00:10:55 CEST 2014
===> Summary of results:
	 build.sh command:    ./build.sh -O /usr/obj -T /usr/tools -X /usr/xsrc -U -u -x -j2 tools
	 build.sh started:    Mon Jun  2 00:10:35 CEST 2014
	 NetBSD version:      6.1.4_PATCH
	 MACHINE:             amd64
	 MACHINE_ARCH:        x86_64
	 Build platform:      NetBSD 6.0.1 amd64
	 HOST_SH:             /bin/sh
	 TOOLDIR path:        /usr/tools
	 DESTDIR path:        /usr/obj/destdir.amd64
	 RELEASEDIR path:     /usr/obj/releasedir
	 Updated makewrapper: /usr/tools/bin/nbmake-amd64
	 Tools built to /usr/tools
	 build.sh ended:      Mon Jun  2 00:10:55 CEST 2014
===> .
===> build.sh command:    ./build.sh -O /usr/obj -T /usr/tools -X /usr/xsrc -U -u -x -j2 kernel=GENERIC
===> build.sh started:    Mon Jun  2 00:11:04 CEST 2014
===> NetBSD version:      6.1.4_PATCH
===> MACHINE:             amd64
===> MACHINE_ARCH:        x86_64
===> Build platform:      NetBSD 6.0.1 amd64
===> HOST_SH:             /bin/sh
===> TOOLDIR path:        /usr/tools
===> DESTDIR path:        /usr/obj/destdir.amd64
===> RELEASEDIR path:     /usr/obj/releasedir
===> Updated makewrapper: /usr/tools/bin/nbmake-amd64
===> Building kernel without building new tools
--- obj ---
===> Building kernel:     GENERIC
===> Build directory:     /usr/obj/sys/arch/amd64/compile/GENERIC
Build directory is /usr/obj/sys/arch/amd64/compile/GENERIC
Don't forget to run "make depend"
--- __always_make_kernlib ---
--- __always_make_compatlib ---
--- dependkernlib ---
--- dependcompatlib ---


[ ... ]


===> Kernels built from GENERIC:
  /usr/obj/sys/arch/amd64/compile/GENERIC/netbsd
===> build.sh ended:      Mon Jun  2 00:11:06 CEST 2014
===> Summary of results:
	 build.sh command:    ./build.sh -O /usr/obj -T /usr/tools -X /usr/xsrc -U -u -x -j2 kernel=GENERIC
	 build.sh started:    Mon Jun  2 00:11:04 CEST 2014
	 NetBSD version:      6.1.4_PATCH
	 MACHINE:             amd64
	 MACHINE_ARCH:        x86_64
	 Build platform:      NetBSD 6.0.1 amd64
	 HOST_SH:             /bin/sh
	 TOOLDIR path:        /usr/tools
	 DESTDIR path:        /usr/obj/destdir.amd64
	 RELEASEDIR path:     /usr/obj/releasedir
	 Updated makewrapper: /usr/tools/bin/nbmake-amd64
	 Building kernel without building new tools
	 Building kernel:     GENERIC
	 Build directory:     /usr/obj/sys/arch/amd64/compile/GENERIC
	 Kernels built from GENERIC:
	  /usr/obj/sys/arch/amd64/compile/GENERIC/netbsd
	 build.sh ended:      Mon Jun  2 00:11:06 CEST 2014
===> .
===> build.sh command:    ./build.sh -O /usr/obj -T /usr/tools -X /usr/xsrc -U -u -x -j2 distribution
===> build.sh started:    Mon Jun  2 00:11:15 CEST 2014
===> NetBSD version:      6.1.4_PATCH
===> MACHINE:             amd64
===> MACHINE_ARCH:        x86_64
===> Build platform:      NetBSD 6.0.1 amd64
===> HOST_SH:             /bin/sh
===> TOOLDIR path:        /usr/tools
===> DESTDIR path:        /usr/obj/destdir.amd64
===> RELEASEDIR path:     /usr/obj/releasedir
===> Updated makewrapper: /usr/tools/bin/nbmake-amd64
--- distribution ---
build ===> .	(with: NOPOSTINSTALL=1)
--- build ---
Build started at: Mon Jun  2 00:11:15 CEST 2014
check-tools ===> .
do-top-obj ===> .
--- do-top-obj ---
obj ===> .	(with: NOSUBDIR=)
--- obj ---
do-tools-obj ===> .

[ ... ]


dependall ===> external/mit/xorg/lib/libxkbfile
--- dependall ---
--- dependall-libXt ---
--- ResConfig.go ---
--- ResConfig.po ---
--- ResConfig.go ---
#   compile  libXt/ResConfig.go
/usr/tools/bin/x86_64--netbsd-gcc -O2 -std=gnu99 -Werror   -fno-strict-aliasing  --sysroot=/usr/obj/destdir.amd64  -I/usr/obj/destdir.amd64/usr/X11R7/include/X11 -DUSE_POLL -DUSE_SNPRINTF -DLIBXT -I.  -DCSRG_BASED -DFUNCPROTO=15 -DNARROWPROTO -I/usr/obj/destdir.amd64/usr/X11R7/include -D__AMD64__ -c -DDEBUG    -g /usr/xsrc/external/mit/libXt/dist/src/ResConfig.c -o ResConfig.go
/usr/xsrc/external/mit/libXt/dist/src/ResConfig.c: In function '_XtResourceConfigurationEH':
/usr/xsrc/external/mit/libXt/dist/src/ResConfig.c:992:7: error: expected ')' before 'resource_len'
*** [ResConfig.go] Error code 1
nbmake: stopped in /usr/src/external/mit/xorg/lib/libXt
--- ResConfig.po ---
#   compile  libXt/ResConfig.po
/usr/tools/bin/x86_64--netbsd-gcc -O2 -std=gnu99 -Werror   -fno-strict-aliasing  --sysroot=/usr/obj/destdir.amd64  -I/usr/obj/destdir.amd64/usr/X11R7/include/X11 -DUSE_POLL -DUSE_SNPRINTF -DLIBXT -I.  -DCSRG_BASED -DFUNCPROTO=15 -DNARROWPROTO -I/usr/obj/destdir.amd64/usr/X11R7/include -D__AMD64__ -c -DGPROF -DPROF    -pg /usr/xsrc/external/mit/libXt/dist/src/ResConfig.c -o ResConfig.po
/usr/tools/bin/x86_64--netbsd-objcopy -X ResConfig.po
1 error
nbmake: stopped in /usr/src/external/mit/xorg/lib/libXt
*** [dependall] Error code 2
nbmake: stopped in /usr/src/external/mit/xorg/lib/libXt
1 error
nbmake: stopped in /usr/src/external/mit/xorg/lib/libXt
*** [dependall-libXt] Error code 2
nbmake: stopped in /usr/src/external/mit/xorg/lib
1 error
nbmake: stopped in /usr/src/external/mit/xorg/lib
*** [do-lib] Error code 2
nbmake: stopped in /usr/src/external/mit/xorg
1 error
nbmake: stopped in /usr/src/external/mit/xorg
*** [build] Error code 2

nbmake: stopped in /usr/src/external/mit/xorg
1 error

nbmake: stopped in /usr/src/external/mit/xorg
*** [do-x11] Error code 2
nbmake: stopped in /usr/src
1 error

nbmake: stopped in /usr/src
*** [build] Error code 2
nbmake: stopped in /usr/src
1 error

nbmake: stopped in /usr/src
*** [distribution] Error code 2

nbmake: stopped in /usr/src

nbmake: stopped in /usr/src

>How-To-Repeat:

	cat /etc/mk.conf
	cd /usr/src
	./build.sh -O /usr/obj -T /usr/tools -X /usr/xsrc -U -u -x distribution
>Fix:

Index: ResConfig.c
===================================================================
RCS file: /cvsroot/xsrc/external/mit/libXt/dist/src/ResConfig.c,v
retrieving revision 1.1.1.4.6.1
diff -r1.1.1.4.6.1 ResConfig.c
991c991
< 				fprintf (stderr, "resource_len=%d\n"
---
> 				fprintf (stderr, "resource_len=%d\n",

>Release-Note:

>Audit-Trail:
From: David Holland <dholland-bugs@netbsd.org>
To: gnats-bugs@NetBSD.org
Cc: 
Subject: Re: xsrc/48863: build.sh fails to build.
Date: Mon, 2 Jun 2014 14:47:09 +0000

 On Sun, Jun 01, 2014 at 11:40:01PM +0000, raizen@lloedy.com wrote:
  > MKDEBUG=			yes
  > [...]
  > /usr/xsrc/external/mit/libXt/dist/src/ResConfig.c: In function '_XtResourceConfigurationEH':
  > /usr/xsrc/external/mit/libXt/dist/src/ResConfig.c:992:7: error: expected ')' before 'resource_len'

 Inspecting the history I think this will be fixed by cvs updating
 (even on the netbsd-6-0 branch) - it looks like you can safely cvs
 update just this file.

 -- 
 David A. Holland
 dholland@netbsd.org

State-Changed-From-To: open->feedback
State-Changed-By: dholland@NetBSD.org
State-Changed-When: Sat, 21 Jun 2014 07:13:31 +0000
State-Changed-Why:
please cvs update the broken file and try again


From: Sandro Millien <raizen@lloedy.com>
To: gnats-bugs@NetBSD.org
Cc: 
Subject: Re: xsrc/48863 (build.sh fails to build)
Date: Sat, 21 Jun 2014 20:06:54 +0200

 On Sat, Jun 21, 2014 at 07:13:31AM +0000, dholland@NetBSD.org wrote:
 > Synopsis: build.sh fails to build
 > 
 > State-Changed-From-To: open->feedback
 > State-Changed-By: dholland@NetBSD.org
 > State-Changed-When: Sat, 21 Jun 2014 07:13:31 +0000
 > State-Changed-Why:
 > please cvs update the broken file and try again
 > 
 > 
 > 
 I tried the build for the latest patch level of NetBSD 6.1 .
 The build failed.
 Following is the log of the operations tried.

 I am currently trying for the latest pactch level of NetBSD 6.0 .
 I will give feedback of the result.


 # cat /etc/mk.conf 
 MKDEBUG=			yes
 MKDEBUGLIB=			yes
 MKTTINTERP=			yes
 NOCLEANDIR=			yes

 # cat /usr/src/CVS/Tag
 Tnetbsd-6-1

 # cat /usr/xsrc/CVS/Tag
 Tnetbsd-6-1

 # cd /usr/src && cvs update -dP

 # cd /usr/xsrc && cvs update -dP

 # cd /usr/src && ./build.sh -O /usr/obj -T /usr/tools -X /usr/xsrc -U -u -x -j2 release

 ===> build.sh command:    ./build.sh -O /usr/obj -T /usr/tools -X /usr/xsrc -U -u -x -j2 tools
 ===> build.sh started:    Sat Jun 21 18:31:21 CEST 2014
 ===> NetBSD version:      6.1.4_PATCH
 ===> MACHINE:             amd64
 ===> MACHINE_ARCH:        x86_64
 ===> Build platform:      NetBSD 6.1.4_PATCH amd64
 ===> HOST_SH:             /bin/sh
 ===> TOOLDIR path:        /usr/tools
 ===> DESTDIR path:        /usr/obj/destdir.amd64
 ===> RELEASEDIR path:     /usr/obj/releasedir
 ===> Updated makewrapper: /usr/tools/bin/nbmake-amd64
 --- obj-tools ---
 obj ===> tools
 --- obj-host-mkdep ---
 obj ===> tools/host-mkdep
 --- obj ---
 --- obj-compat ---

 [...]

 --- install.grofflinks ---
 --- /usr/tools/share/groff/tmac/doc2html.tmac ---
 --- /usr/tools/share/groff/site-tmac/man.local ---
 --- /usr/tools/share/groff/site-tmac/mdoc.local ---
 ===> Tools built to /usr/tools
 ===> build.sh ended:      Sat Jun 21 18:32:11 CEST 2014
 ===> Summary of results:
 	 build.sh command:    ./build.sh -O /usr/obj -T /usr/tools -X /usr/xsrc -U -u -x -j2 tools
 	 build.sh started:    Sat Jun 21 18:31:21 CEST 2014
 	 NetBSD version:      6.1.4_PATCH
 	 MACHINE:             amd64
 	 MACHINE_ARCH:        x86_64
 	 Build platform:      NetBSD 6.1.4_PATCH amd64
 	 HOST_SH:             /bin/sh
 	 TOOLDIR path:        /usr/tools
 	 DESTDIR path:        /usr/obj/destdir.amd64
 	 RELEASEDIR path:     /usr/obj/releasedir
 	 Updated makewrapper: /usr/tools/bin/nbmake-amd64
 	 Tools built to /usr/tools
 	 build.sh ended:      Sat Jun 21 18:32:11 CEST 2014
 ===> .
 ===> build.sh command:    ./build.sh -O /usr/obj -T /usr/tools -X /usr/xsrc -U -u -x -j2 kernel=GENERIC
 ===> build.sh started:    Sat Jun 21 18:32:20 CEST 2014
 ===> NetBSD version:      6.1.4_PATCH
 ===> MACHINE:             amd64
 ===> MACHINE_ARCH:        x86_64
 ===> Build platform:      NetBSD 6.1.4_PATCH amd64
 ===> HOST_SH:             /bin/sh
 ===> TOOLDIR path:        /usr/tools
 ===> DESTDIR path:        /usr/obj/destdir.amd64
 ===> RELEASEDIR path:     /usr/obj/releasedir
 ===> Updated makewrapper: /usr/tools/bin/nbmake-amd64
 ===> Building kernel without building new tools
 --- obj ---
 ===> Building kernel:     GENERIC
 ===> Build directory:     /usr/obj/sys/arch/amd64/compile/GENERIC
 Build directory is /usr/obj/sys/arch/amd64/compile/GENERIC
 Don't forget to run "make depend"
 --- __always_make_kernlib ---
 --- __always_make_compatlib ---
 --- dependcompatlib ---

 [...]

 ===> Kernels built from GENERIC:
   /usr/obj/sys/arch/amd64/compile/GENERIC/netbsd
 ===> build.sh ended:      Sat Jun 21 18:32:24 CEST 2014
 ===> Summary of results:
 	 build.sh command:    ./build.sh -O /usr/obj -T /usr/tools -X /usr/xsrc -U -u -x -j2 kernel=GENERIC
 	 build.sh started:    Sat Jun 21 18:32:20 CEST 2014
 	 NetBSD version:      6.1.4_PATCH
 	 MACHINE:             amd64
 	 MACHINE_ARCH:        x86_64
 	 Build platform:      NetBSD 6.1.4_PATCH amd64
 	 HOST_SH:             /bin/sh
 	 TOOLDIR path:        /usr/tools
 	 DESTDIR path:        /usr/obj/destdir.amd64
 	 RELEASEDIR path:     /usr/obj/releasedir
 	 Updated makewrapper: /usr/tools/bin/nbmake-amd64
 	 Building kernel without building new tools
 	 Building kernel:     GENERIC
 	 Build directory:     /usr/obj/sys/arch/amd64/compile/GENERIC
 	 Kernels built from GENERIC:
 	  /usr/obj/sys/arch/amd64/compile/GENERIC/netbsd
 	 build.sh ended:      Sat Jun 21 18:32:24 CEST 2014
 ===> .
 ===> build.sh command:    ./build.sh -O /usr/obj -T /usr/tools -X /usr/xsrc -U -u -x -j2 release
 ===> build.sh started:    Sat Jun 21 18:32:33 CEST 2014
 ===> NetBSD version:      6.1.4_PATCH
 ===> MACHINE:             amd64
 ===> MACHINE_ARCH:        x86_64
 ===> Build platform:      NetBSD 6.1.4_PATCH amd64
 ===> HOST_SH:             /bin/sh
 ===> TOOLDIR path:        /usr/tools
 ===> DESTDIR path:        /usr/obj/destdir.amd64
 ===> RELEASEDIR path:     /usr/obj/releasedir
 ===> Updated makewrapper: /usr/tools/bin/nbmake-amd64
 --- release ---
 distribution ===> .
 --- distribution ---
 build ===> .	(with: NOPOSTINSTALL=1)
 --- build ---
 Build started at: Sat Jun 21 18:32:33 CEST 2014
 check-tools ===> .

 [...]

 dependall ===> external/mit/xorg/lib/libxkbfile
 --- dependall ---
 --- dependall-libXt ---
 --- dependall ---
 --- ResConfig.go ---
 --- ResConfig.pico ---
 --- ResConfig.go ---
 #   compile  libXt/ResConfig.go
 /usr/tools/bin/x86_64--netbsd-gcc -O2 -std=gnu99 -Werror   -fno-strict-aliasing  --sysroot=/usr/obj/destdir.amd64  -I/usr/obj/destdir.amd64/usr/X11R7/include/X11 -DUSE_POLL -DUSE_SNPRINTF -DLIBXT -I.  -DCSRG_BASED -DFUNCPROTO=15 -DNARROWPROTO -I/usr/obj/destdir.amd64/usr/X11R7/include -D__AMD64__ -c -DDEBUG    -g /usr/xsrc/external/mit/libXt/dist/src/ResConfig.c -o ResConfig.go
 --- ResConfig.pico ---
 #   compile  libXt/ResConfig.pico
 /usr/tools/bin/x86_64--netbsd-gcc -O2 -std=gnu99 -Werror   -fno-strict-aliasing  --sysroot=/usr/obj/destdir.amd64  -I/usr/obj/destdir.amd64/usr/X11R7/include/X11 -DUSE_POLL -DUSE_SNPRINTF -DLIBXT -I.  -DCSRG_BASED -DFUNCPROTO=15 -DNARROWPROTO -I/usr/obj/destdir.amd64/usr/X11R7/include -D__AMD64__ -c    -fPIC -DPIC /usr/xsrc/external/mit/libXt/dist/src/ResConfig.c -o ResConfig.pico
 /usr/tools/bin/x86_64--netbsd-objcopy -x ResConfig.pico
 --- ResConfig.po ---
 #   compile  libXt/ResConfig.po
 /usr/tools/bin/x86_64--netbsd-gcc -O2 -std=gnu99 -Werror   -fno-strict-aliasing  --sysroot=/usr/obj/destdir.amd64  -I/usr/obj/destdir.amd64/usr/X11R7/include/X11 -DUSE_POLL -DUSE_SNPRINTF -DLIBXT -I.  -DCSRG_BASED -DFUNCPROTO=15 -DNARROWPROTO -I/usr/obj/destdir.amd64/usr/X11R7/include -D__AMD64__ -c -DGPROF -DPROF    -pg /usr/xsrc/external/mit/libXt/dist/src/ResConfig.c -o ResConfig.po
 --- ResConfig.go ---
 /usr/xsrc/external/mit/libXt/dist/src/ResConfig.c: In function '_XtResourceConfigurationEH':
 /usr/xsrc/external/mit/libXt/dist/src/ResConfig.c:992:7: error: expected ')' before 'resource_len'
 *** [ResConfig.go] Error code 1
 nbmake: stopped in /usr/src/external/mit/xorg/lib/libXt
 --- ResConfig.po ---
 /usr/tools/bin/x86_64--netbsd-objcopy -X ResConfig.po
 1 error
 nbmake: stopped in /usr/src/external/mit/xorg/lib/libXt
 *** [dependall] Error code 2
 nbmake: stopped in /usr/src/external/mit/xorg/lib/libXt
 1 error
 nbmake: stopped in /usr/src/external/mit/xorg/lib/libXt
 *** [dependall-libXt] Error code 2
 nbmake: stopped in /usr/src/external/mit/xorg/lib
 1 error
 nbmake: stopped in /usr/src/external/mit/xorg/lib
 *** [do-lib] Error code 2
 nbmake: stopped in /usr/src/external/mit/xorg
 1 error
 nbmake: stopped in /usr/src/external/mit/xorg
 *** [build] Error code 2
 nbmake: stopped in /usr/src/external/mit/xorg
 1 error
 nbmake: stopped in /usr/src/external/mit/xorg
 *** [do-x11] Error code 2

 nbmake: stopped in /usr/src
 1 error

 nbmake: stopped in /usr/src
 *** [build] Error code 2

 nbmake: stopped in /usr/src
 1 error

 nbmake: stopped in /usr/src
 *** [distribution] Error code 2
 nbmake: stopped in /usr/src
 1 error

 nbmake: stopped in /usr/src
 *** [release] Error code 2

 nbmake: stopped in /usr/src

 nbmake: stopped in /usr/src

From: Sandro Millien <raizen@lloedy.com>
To: gnats-bugs@gnats.netbsd.org
Cc: 
Subject: Re: xsrc/48863 build.sh fails to build
Date: Tue, 28 Oct 2014 18:04:17 +0100

 --MP_/yFbxg3xeNU4dqJCfItsZOyy
 Content-Type: text/plain; charset=US-ASCII
 Content-Transfer-Encoding: 7bit
 Content-Disposition: inline

 The bug still exists.

 I attempted an upgrade from NetBSD 6.1.4 to NetBSD 6.1.5 and
 I could witness the bug.
 Attached is the log of the build attempt.
 --MP_/yFbxg3xeNU4dqJCfItsZOyy
 Content-Type: application/octet-stream; name=build.log.report
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename=build.log.report

 PT09PiBidWlsZC5zaCBjb21tYW5kOiAgICAuL2J1aWxkLnNoIC1PIC91c3Ivb2JqIC1UIC91c3Iv
 dG9vbHMgLVggL3Vzci94c3JjIC1VIC11IC14IC1qMiB0b29scwo9PT0+IGJ1aWxkLnNoIHN0YXJ0
 ZWQ6ICAgIFR1ZSBPY3QgMjggMDk6NTg6MzAgQ0VUIDIwMTQKPT09PiBOZXRCU0QgdmVyc2lvbjog
 ICAgICA2LjEuNV9QQVRDSAo9PT0+IE1BQ0hJTkU6ICAgICAgICAgICAgIGFtZDY0Cj09PT4gTUFD
 SElORV9BUkNIOiAgICAgICAgeDg2XzY0Cj09PT4gQnVpbGQgcGxhdGZvcm06ICAgICAgTmV0QlNE
 IDYuMS40X1BBVENIIGFtZDY0Cj09PT4gSE9TVF9TSDogICAgICAgICAgICAgL2Jpbi9zaAo9PT0+
 IFRPT0xESVIgcGF0aDogICAgICAgIC91c3IvdG9vbHMKPT09PiBERVNURElSIHBhdGg6ICAgICAg
 ICAvdXNyL29iai9kZXN0ZGlyLmFtZDY0Cj09PT4gUkVMRUFTRURJUiBwYXRoOiAgICAgL3Vzci9v
 YmovcmVsZWFzZWRpcgo9PT0+IFVwZGF0ZWQgbWFrZXdyYXBwZXI6IC91c3IvdG9vbHMvYmluL25i
 bWFrZS1hbWQ2NAotLS0gb2JqLXRvb2xzIC0tLQpvYmogPT09PiB0b29scwotLS0gb2JqLWhvc3Qt
 bWtkZXAgLS0tCm9iaiA9PT0+IHRvb2xzL2hvc3QtbWtkZXAKLS0tIG9iaiAtLS0KLS0tIG9iai1j
 b21wYXQgLS0tCm9iaiA9PT0+IHRvb2xzL2NvbXBhdAoKWy4uLl0KCi91c3IvdG9vbHMvYmluL25i
 c2VkIC1mIC91c3Ivc3JjL3Rvb2xzL2dyb2ZmLy4uLy4uL2dudS9kaXN0L2dyb2ZmL3RtYWMvc3Ry
 aXAuc2VkICAvdXNyL3NyYy90b29scy9ncm9mZi8uLi8uLi9nbnUvdXNyLmJpbi9ncm9mZi90bWFj
 L21kb2MubG9jYWwgPiBtZG9jLmxvY2FsLXMKLS0tIC91c3IvdG9vbHMvc2hhcmUvZ3JvZmYvc2l0
 ZS10bWFjL21hbi5sb2NhbCAtLS0KLS0tIC91c3IvdG9vbHMvc2hhcmUvZ3JvZmYvc2l0ZS10bWFj
 L21kb2MubG9jYWwgLS0tCj09PT4gVG9vbHMgYnVpbHQgdG8gL3Vzci90b29scwo9PT0+IGJ1aWxk
 LnNoIGVuZGVkOiAgICAgIFR1ZSBPY3QgMjggMTA6MDU6MDQgQ0VUIDIwMTQKPT09PiBTdW1tYXJ5
 IG9mIHJlc3VsdHM6CgkgYnVpbGQuc2ggY29tbWFuZDogICAgLi9idWlsZC5zaCAtTyAvdXNyL29i
 aiAtVCAvdXNyL3Rvb2xzIC1YIC91c3IveHNyYyAtVSAtdSAteCAtajIgdG9vbHMKCSBidWlsZC5z
 aCBzdGFydGVkOiAgICBUdWUgT2N0IDI4IDA5OjU4OjMwIENFVCAyMDE0CgkgTmV0QlNEIHZlcnNp
 b246ICAgICAgNi4xLjVfUEFUQ0gKCSBNQUNISU5FOiAgICAgICAgICAgICBhbWQ2NAoJIE1BQ0hJ
 TkVfQVJDSDogICAgICAgIHg4Nl82NAoJIEJ1aWxkIHBsYXRmb3JtOiAgICAgIE5ldEJTRCA2LjEu
 NF9QQVRDSCBhbWQ2NAoJIEhPU1RfU0g6ICAgICAgICAgICAgIC9iaW4vc2gKCSBUT09MRElSIHBh
 dGg6ICAgICAgICAvdXNyL3Rvb2xzCgkgREVTVERJUiBwYXRoOiAgICAgICAgL3Vzci9vYmovZGVz
 dGRpci5hbWQ2NAoJIFJFTEVBU0VESVIgcGF0aDogICAgIC91c3Ivb2JqL3JlbGVhc2VkaXIKCSBV
 cGRhdGVkIG1ha2V3cmFwcGVyOiAvdXNyL3Rvb2xzL2Jpbi9uYm1ha2UtYW1kNjQKCSBUb29scyBi
 dWlsdCB0byAvdXNyL3Rvb2xzCgkgYnVpbGQuc2ggZW5kZWQ6ICAgICAgVHVlIE9jdCAyOCAxMDow
 NTowNCBDRVQgMjAxNAo9PT0+IC4KPT09PiBidWlsZC5zaCBjb21tYW5kOiAgICAuL2J1aWxkLnNo
 IC1PIC91c3Ivb2JqIC1UIC91c3IvdG9vbHMgLVggL3Vzci94c3JjIC1VIC11IC14IC1qMiBrZXJu
 ZWw9R0VORVJJQwo9PT0+IGJ1aWxkLnNoIHN0YXJ0ZWQ6ICAgIFR1ZSBPY3QgMjggMTA6MDU6MTMg
 Q0VUIDIwMTQKPT09PiBOZXRCU0QgdmVyc2lvbjogICAgICA2LjEuNV9QQVRDSAo9PT0+IE1BQ0hJ
 TkU6ICAgICAgICAgICAgIGFtZDY0Cj09PT4gTUFDSElORV9BUkNIOiAgICAgICAgeDg2XzY0Cj09
 PT4gQnVpbGQgcGxhdGZvcm06ICAgICAgTmV0QlNEIDYuMS40X1BBVENIIGFtZDY0Cj09PT4gSE9T
 VF9TSDogICAgICAgICAgICAgL2Jpbi9zaAo9PT0+IFRPT0xESVIgcGF0aDogICAgICAgIC91c3Iv
 dG9vbHMKPT09PiBERVNURElSIHBhdGg6ICAgICAgICAvdXNyL29iai9kZXN0ZGlyLmFtZDY0Cj09
 PT4gUkVMRUFTRURJUiBwYXRoOiAgICAgL3Vzci9vYmovcmVsZWFzZWRpcgo9PT0+IFVwZGF0ZWQg
 bWFrZXdyYXBwZXI6IC91c3IvdG9vbHMvYmluL25ibWFrZS1hbWQ2NAo9PT0+IEJ1aWxkaW5nIGtl
 cm5lbCB3aXRob3V0IGJ1aWxkaW5nIG5ldyB0b29scwotLS0gb2JqIC0tLQo9PT0+IEJ1aWxkaW5n
 IGtlcm5lbDogICAgIEdFTkVSSUMKPT09PiBCdWlsZCBkaXJlY3Rvcnk6ICAgICAvdXNyL29iai9z
 eXMvYXJjaC9hbWQ2NC9jb21waWxlL0dFTkVSSUMKQnVpbGQgZGlyZWN0b3J5IGlzIC91c3Ivb2Jq
 L3N5cy9hcmNoL2FtZDY0L2NvbXBpbGUvR0VORVJJQwpEb24ndCBmb3JnZXQgdG8gcnVuICJtYWtl
 IGRlcGVuZCIKLS0tIF9fYWx3YXlzX21ha2Vfa2VybmxpYiAtLS0KLS0tIF9fYWx3YXlzX21ha2Vf
 Y29tcGF0bGliIC0tLQotLS0gZGVwZW5kY29tcGF0bGliIC0tLQotLS0gZGVwZW5ka2VybmxpYiAt
 LS0KClsuLi5dCgoKLS0tIC91c3Ivb2JqL3N5cy9hcmNoL2FtZDY0L2NvbXBpbGUvR0VORVJJQy9s
 aWIva2Vybi9saWJrZXJuLm8gLS0tCmBsaWJrZXJuLm8nIGlzIHVwIHRvIGRhdGUuCj09PT4gS2Vy
 bmVscyBidWlsdCBmcm9tIEdFTkVSSUM6CiAgL3Vzci9vYmovc3lzL2FyY2gvYW1kNjQvY29tcGls
 ZS9HRU5FUklDL25ldGJzZAo9PT0+IGJ1aWxkLnNoIGVuZGVkOiAgICAgIFR1ZSBPY3QgMjggMTA6
 MDU6MTYgQ0VUIDIwMTQKPT09PiBTdW1tYXJ5IG9mIHJlc3VsdHM6CgkgYnVpbGQuc2ggY29tbWFu
 ZDogICAgLi9idWlsZC5zaCAtTyAvdXNyL29iaiAtVCAvdXNyL3Rvb2xzIC1YIC91c3IveHNyYyAt
 VSAtdSAteCAtajIga2VybmVsPUdFTkVSSUMKCSBidWlsZC5zaCBzdGFydGVkOiAgICBUdWUgT2N0
 IDI4IDEwOjA1OjEzIENFVCAyMDE0CgkgTmV0QlNEIHZlcnNpb246ICAgICAgNi4xLjVfUEFUQ0gK
 CSBNQUNISU5FOiAgICAgICAgICAgICBhbWQ2NAoJIE1BQ0hJTkVfQVJDSDogICAgICAgIHg4Nl82
 NAoJIEJ1aWxkIHBsYXRmb3JtOiAgICAgIE5ldEJTRCA2LjEuNF9QQVRDSCBhbWQ2NAoJIEhPU1Rf
 U0g6ICAgICAgICAgICAgIC9iaW4vc2gKCSBUT09MRElSIHBhdGg6ICAgICAgICAvdXNyL3Rvb2xz
 CgkgREVTVERJUiBwYXRoOiAgICAgICAgL3Vzci9vYmovZGVzdGRpci5hbWQ2NAoJIFJFTEVBU0VE
 SVIgcGF0aDogICAgIC91c3Ivb2JqL3JlbGVhc2VkaXIKCSBVcGRhdGVkIG1ha2V3cmFwcGVyOiAv
 dXNyL3Rvb2xzL2Jpbi9uYm1ha2UtYW1kNjQKCSBCdWlsZGluZyBrZXJuZWwgd2l0aG91dCBidWls
 ZGluZyBuZXcgdG9vbHMKCSBCdWlsZGluZyBrZXJuZWw6ICAgICBHRU5FUklDCgkgQnVpbGQgZGly
 ZWN0b3J5OiAgICAgL3Vzci9vYmovc3lzL2FyY2gvYW1kNjQvY29tcGlsZS9HRU5FUklDCgkgS2Vy
 bmVscyBidWlsdCBmcm9tIEdFTkVSSUM6CgkgIC91c3Ivb2JqL3N5cy9hcmNoL2FtZDY0L2NvbXBp
 bGUvR0VORVJJQy9uZXRic2QKCSBidWlsZC5zaCBlbmRlZDogICAgICBUdWUgT2N0IDI4IDEwOjA1
 OjE2IENFVCAyMDE0Cj09PT4gLgo9PT0+IGJ1aWxkLnNoIGNvbW1hbmQ6ICAgIC4vYnVpbGQuc2gg
 LU8gL3Vzci9vYmogLVQgL3Vzci90b29scyAtWCAvdXNyL3hzcmMgLVUgLXUgLXggLWoyIHJlbGVh
 c2UKPT09PiBidWlsZC5zaCBzdGFydGVkOiAgICBUdWUgT2N0IDI4IDEwOjA1OjI1IENFVCAyMDE0
 Cj09PT4gTmV0QlNEIHZlcnNpb246ICAgICAgNi4xLjVfUEFUQ0gKPT09PiBNQUNISU5FOiAgICAg
 ICAgICAgICBhbWQ2NAo9PT0+IE1BQ0hJTkVfQVJDSDogICAgICAgIHg4Nl82NAo9PT0+IEJ1aWxk
 IHBsYXRmb3JtOiAgICAgIE5ldEJTRCA2LjEuNF9QQVRDSCBhbWQ2NAo9PT0+IEhPU1RfU0g6ICAg
 ICAgICAgICAgIC9iaW4vc2gKPT09PiBUT09MRElSIHBhdGg6ICAgICAgICAvdXNyL3Rvb2xzCj09
 PT4gREVTVERJUiBwYXRoOiAgICAgICAgL3Vzci9vYmovZGVzdGRpci5hbWQ2NAo9PT0+IFJFTEVB
 U0VESVIgcGF0aDogICAgIC91c3Ivb2JqL3JlbGVhc2VkaXIKPT09PiBVcGRhdGVkIG1ha2V3cmFw
 cGVyOiAvdXNyL3Rvb2xzL2Jpbi9uYm1ha2UtYW1kNjQKLS0tIHJlbGVhc2UgLS0tCmRpc3RyaWJ1
 dGlvbiA9PT0+IC4KLS0tIGRpc3RyaWJ1dGlvbiAtLS0KYnVpbGQgPT09PiAuCSh3aXRoOiBOT1BP
 U1RJTlNUQUxMPTEpCi0tLSBidWlsZCAtLS0KQnVpbGQgc3RhcnRlZCBhdDogVHVlIE9jdCAyOCAx
 MDowNToyNSBDRVQgMjAxNApjaGVjay10b29scyA9PT0+IC4KZG8tdG9wLW9iaiA9PT0+IC4KLS0t
 IGRvLXRvcC1vYmogLS0tCm9iaiA9PT0+IC4JKHdpdGg6IE5PU1VCRElSPSkKLS0tIG9iaiAtLS0K
 ClsuLi5dCgpsbiAtc2YgbGlieGtiZmlsZS5zby4yLjAgbGlieGtiZmlsZS5zby50bXAKbXYgLWYg
 bGlieGtiZmlsZS5zby50bXAgbGlieGtiZmlsZS5zbwotLS0gbGlieGtiZmlsZS5zby4yLjAuZGVi
 dWcgLS0tCiMgICAgY3JlYXRlICBsaWJ4a2JmaWxlL2xpYnhrYmZpbGUuc28uMi4wLmRlYnVnCigg
 IC91c3IvdG9vbHMvYmluL3g4Nl82NC0tbmV0YnNkLW9iamNvcHkgLS1vbmx5LWtlZXAtZGVidWcg
 bGlieGtiZmlsZS5zby4yLjAgbGlieGtiZmlsZS5zby4yLjAuZGVidWcgICYmIC91c3IvdG9vbHMv
 YmluL3g4Nl82NC0tbmV0YnNkLW9iamNvcHkgLS1zdHJpcC1kZWJ1ZyAtcCAtUiAuZ251X2RlYnVn
 bGluayAgLS1hZGQtZ251LWRlYnVnbGluaz1saWJ4a2JmaWxlLnNvLjIuMC5kZWJ1ZyBsaWJ4a2Jm
 aWxlLnNvLjIuMCAgKSB8fCAocm0gLWYgbGlieGtiZmlsZS5zby4yLjAuZGVidWc7IGZhbHNlKQot
 LS0gZGVwZW5kYWxsLWxpYlh0IC0tLQotLS0gUmVzQ29uZmlnLmdvIC0tLQotLS0gUmVzQ29uZmln
 Lm8gLS0tCi0tLSBSZXNDb25maWcuZ28gLS0tCiMgICBjb21waWxlICBsaWJYdC9SZXNDb25maWcu
 Z28KL3Vzci90b29scy9iaW4veDg2XzY0LS1uZXRic2QtZ2NjIC1PMiAtc3RkPWdudTk5IC1XZXJy
 b3IgICAtZm5vLXN0cmljdC1hbGlhc2luZyAgLS1zeXNyb290PS91c3Ivb2JqL2Rlc3RkaXIuYW1k
 NjQgIC1JL3Vzci9vYmovZGVzdGRpci5hbWQ2NC91c3IvWDExUjcvaW5jbHVkZS9YMTEgLURVU0Vf
 UE9MTCAtRFVTRV9TTlBSSU5URiAtRExJQlhUIC1JLiAgLURDU1JHX0JBU0VEIC1ERlVOQ1BST1RP
 PTE1IC1ETkFSUk9XUFJPVE8gLUkvdXNyL29iai9kZXN0ZGlyLmFtZDY0L3Vzci9YMTFSNy9pbmNs
 dWRlIC1EX19BTUQ2NF9fIC1jIC1EREVCVUcgICAgLWcgL3Vzci94c3JjL2V4dGVybmFsL21pdC9s
 aWJYdC9kaXN0L3NyYy9SZXNDb25maWcuYyAtbyBSZXNDb25maWcuZ28KLS0tIFJlc0NvbmZpZy5v
 IC0tLQojICAgY29tcGlsZSAgbGliWHQvUmVzQ29uZmlnLm8KL3Vzci90b29scy9iaW4veDg2XzY0
 LS1uZXRic2QtZ2NjIC1PMiAtc3RkPWdudTk5IC1XZXJyb3IgICAtZm5vLXN0cmljdC1hbGlhc2lu
 ZyAgLS1zeXNyb290PS91c3Ivb2JqL2Rlc3RkaXIuYW1kNjQgIC1JL3Vzci9vYmovZGVzdGRpci5h
 bWQ2NC91c3IvWDExUjcvaW5jbHVkZS9YMTEgLURVU0VfUE9MTCAtRFVTRV9TTlBSSU5URiAtRExJ
 QlhUIC1JLiAgLURDU1JHX0JBU0VEIC1ERlVOQ1BST1RPPTE1IC1ETkFSUk9XUFJPVE8gLUkvdXNy
 L29iai9kZXN0ZGlyLmFtZDY0L3Vzci9YMTFSNy9pbmNsdWRlIC1EX19BTUQ2NF9fIC1jICAgIC91
 c3IveHNyYy9leHRlcm5hbC9taXQvbGliWHQvZGlzdC9zcmMvUmVzQ29uZmlnLmMgLW8gUmVzQ29u
 ZmlnLm8KLS0tIFJlc0NvbmZpZy5nbyAtLS0KL3Vzci94c3JjL2V4dGVybmFsL21pdC9saWJYdC9k
 aXN0L3NyYy9SZXNDb25maWcuYzogSW4gZnVuY3Rpb24gJ19YdFJlc291cmNlQ29uZmlndXJhdGlv
 bkVIJzoKLS0tIFJlc0NvbmZpZy5vIC0tLQovdXNyL3Rvb2xzL2Jpbi94ODZfNjQtLW5ldGJzZC1v
 Ympjb3B5IC14IFJlc0NvbmZpZy5vCi0tLSBSZXNDb25maWcuZ28gLS0tCi91c3IveHNyYy9leHRl
 cm5hbC9taXQvbGliWHQvZGlzdC9zcmMvUmVzQ29uZmlnLmM6OTkyOjc6IGVycm9yOiBleHBlY3Rl
 ZCAnKScgYmVmb3JlICdyZXNvdXJjZV9sZW4nCi0tLSBsbGliLWxYdC5sbiAtLS0KIyAgIGNvbXBp
 bGUgIGxpYlh0L2xsaWItbFh0LmxuCnJtIC1mIGxsaWItbFh0LmxuCkNDPS91c3IvdG9vbHMvYmlu
 L3g4Nl82NC0tbmV0YnNkLWdjYyAvdXNyL3Rvb2xzL2Jpbi94ODZfNjQtLW5ldGJzZC1saW50IC1D
 WHQgQWN0aW9uSG9vay5sbiBBbGxvYy5sbiBBcmdMaXN0LmxuIENhbGxiYWNrLmxuIENsaWNrVGlt
 ZS5sbiBDb21wb3NpdGUubG4gQ29uc3RyYWludC5sbiBDb252ZXJ0LmxuIENvbnZlcnRlcnMubG4g
 Q29yZS5sbiBDcmVhdGUubG4gRGVzdHJveS5sbiBEaXNwbGF5LmxuIEVycm9yLmxuIEV2ZW50Lmxu
 IEV2ZW50VXRpbC5sbiBGdW5jdGlvbnMubG4gR0NNYW5hZ2VyLmxuIEdlb21ldHJ5LmxuIEdldEFj
 dEtleS5sbiBHZXRSZXNMaXN0LmxuIEdldFZhbHVlcy5sbiBIb29rT2JqLmxuIEhvb2tzLmxuIElu
 aXRpYWxpemUubG4gSW50cmluc2ljLmxuIEtleWJvYXJkLmxuIE1hbmFnZS5sbiBOZXh0RXZlbnQu
 bG4gT2JqZWN0LmxuIFBhc3NpdkdyYWIubG4gUG9pbnRlci5sbiBQb3B1cC5sbiBQb3B1cENCLmxu
 IFJlY3RPYmoubG4gUmVzQ29uZmlnLmxuIFJlc291cmNlcy5sbiBTZWxlY3Rpb24ubG4gU2V0U2Vu
 cy5sbiBTZXRWYWx1ZXMubG4gU2V0V01DVy5sbiBTaGVsbC5sbiBTdHJpbmdEZWZzLmxuIFRNYWN0
 aW9uLmxuIFRNZ3JhYi5sbiBUTWtleS5sbiBUTXBhcnNlLmxuIFRNcHJpbnQubG4gVE1zdGF0ZS5s
 biBUaHJlYWRzLmxuIFZhckNyZWF0ZS5sbiBWYXJHZXQubG4gVmFyYXJncy5sbiBWZW5kb3IubG4g
 LUwvdXNyL29iai9kZXN0ZGlyLmFtZDY0L3Vzci9saWJkYXRhIC1sYwpMaW50IHBhc3MyOgotLS0g
 UmVzQ29uZmlnLmdvIC0tLQoqKiogW1Jlc0NvbmZpZy5nb10gRXJyb3IgY29kZSAxCm5ibWFrZTog
 c3RvcHBlZCBpbiAvdXNyL3NyYy9leHRlcm5hbC9taXQveG9yZy9saWIvbGliWHQKMSBlcnJvcgpu
 Ym1ha2U6IHN0b3BwZWQgaW4gL3Vzci9zcmMvZXh0ZXJuYWwvbWl0L3hvcmcvbGliL2xpYlh0Cioq
 KiBbZGVwZW5kYWxsXSBFcnJvciBjb2RlIDIKbmJtYWtlOiBzdG9wcGVkIGluIC91c3Ivc3JjL2V4
 dGVybmFsL21pdC94b3JnL2xpYi9saWJYdAoxIGVycm9yCm5ibWFrZTogc3RvcHBlZCBpbiAvdXNy
 L3NyYy9leHRlcm5hbC9taXQveG9yZy9saWIvbGliWHQKKioqIFtkZXBlbmRhbGwtbGliWHRdIEVy
 cm9yIGNvZGUgMgpuYm1ha2U6IHN0b3BwZWQgaW4gL3Vzci9zcmMvZXh0ZXJuYWwvbWl0L3hvcmcv
 bGliCjEgZXJyb3IKbmJtYWtlOiBzdG9wcGVkIGluIC91c3Ivc3JjL2V4dGVybmFsL21pdC94b3Jn
 L2xpYgoqKiogW2RvLWxpYl0gRXJyb3IgY29kZSAyCm5ibWFrZTogc3RvcHBlZCBpbiAvdXNyL3Ny
 Yy9leHRlcm5hbC9taXQveG9yZwoxIGVycm9yCm5ibWFrZTogc3RvcHBlZCBpbiAvdXNyL3NyYy9l
 eHRlcm5hbC9taXQveG9yZwoqKiogW2J1aWxkXSBFcnJvciBjb2RlIDIKCm5ibWFrZTogc3RvcHBl
 ZCBpbiAvdXNyL3NyYy9leHRlcm5hbC9taXQveG9yZwoxIGVycm9yCgpuYm1ha2U6IHN0b3BwZWQg
 aW4gL3Vzci9zcmMvZXh0ZXJuYWwvbWl0L3hvcmcKKioqIFtkby14MTFdIEVycm9yIGNvZGUgMgpu
 Ym1ha2U6IHN0b3BwZWQgaW4gL3Vzci9zcmMKMSBlcnJvcgpuYm1ha2U6IHN0b3BwZWQgaW4gL3Vz
 ci9zcmMKKioqIFtidWlsZF0gRXJyb3IgY29kZSAyCgpuYm1ha2U6IHN0b3BwZWQgaW4gL3Vzci9z
 cmMKMSBlcnJvcgoKbmJtYWtlOiBzdG9wcGVkIGluIC91c3Ivc3JjCioqKiBbZGlzdHJpYnV0aW9u
 XSBFcnJvciBjb2RlIDIKCm5ibWFrZTogc3RvcHBlZCBpbiAvdXNyL3NyYwoxIGVycm9yCgpuYm1h
 a2U6IHN0b3BwZWQgaW4gL3Vzci9zcmMKKioqIFtyZWxlYXNlXSBFcnJvciBjb2RlIDIKCm5ibWFr
 ZTogc3RvcHBlZCBpbiAvdXNyL3NyYwoKbmJtYWtlOiBzdG9wcGVkIGluIC91c3Ivc3JjCg==

 --MP_/yFbxg3xeNU4dqJCfItsZOyy--

From: christos@zoulas.com (Christos Zoulas)
To: gnats-bugs@NetBSD.org, xsrc-manager@netbsd.org, gnats-admin@netbsd.org, 
	netbsd-bugs@netbsd.org, raizen@lloedy.com
Cc: 
Subject: Re: xsrc/48863 build.sh fails to build
Date: Tue, 28 Oct 2014 13:55:59 -0400

 On Oct 28,  5:05pm, raizen@lloedy.com (Sandro Millien) wrote:
 -- Subject: Re: xsrc/48863 build.sh fails to build


 Is your ResConfig.c file broken? I don't see resource_len at line 992.

 christos

From: Sandro Millien <raizen@lloedy.com>
To: gnats-bugs@NetBSD.org
Cc: 
Subject: Re: xsrc/48863 build.sh fails to build
Date: Fri, 31 Oct 2014 17:27:52 +0100

 --MP_/H/N30QWgM9xn8ehmfHu6lZO
 Content-Type: text/plain; charset=US-ASCII
 Content-Transfer-Encoding: 7bit
 Content-Disposition: inline

 On Tue, 28 Oct 2014 18:00:00 +0000 (UTC)
 christos@zoulas.com (Christos Zoulas) wrote:

 > The following reply was made to PR xsrc/48863; it has been noted by
 > GNATS.
 > 
 > From: christos@zoulas.com (Christos Zoulas)
 > To: gnats-bugs@NetBSD.org, xsrc-manager@netbsd.org,
 > gnats-admin@netbsd.org, netbsd-bugs@netbsd.org, raizen@lloedy.com
 > Cc: 
 > Subject: Re: xsrc/48863 build.sh fails to build
 > Date: Tue, 28 Oct 2014 13:55:59 -0400
 > 
 >  On Oct 28,  5:05pm, raizen@lloedy.com (Sandro Millien) wrote:
 >  -- Subject: Re: xsrc/48863 build.sh fails to build
 >  
 >  
 >  Is your ResConfig.c file broken? I don't see resource_len at line
 > 992. 
 Before doing the "cvs update" , I deleted file ResConfig.c
 $ rm /usr/xsrc/external/mit/libXt/dist/src/ResConfig.c
 $ cd /usr/xsrc && cvs update -dP

 Attached is my current ResConfig.c
 It was created by the cvs update as far as I can tell.
 It does contain resource_len at line 992.
 And there is a missing "," before resource_len
 When I add this "," ; the build succeeds.

 >  christos
 > 

 --MP_/H/N30QWgM9xn8ehmfHu6lZO
 Content-Type: text/x-c++src
 Content-Transfer-Encoding: 7bit
 Content-Disposition: attachment; filename=ResConfig.c

 /*

 Copyright 1987, 1988, 1998  The Open Group

 Permission to use, copy, modify, distribute, and sell this software and its
 documentation for any purpose is hereby granted without fee, provided that
 the above copyright notice appear in all copies and that both that
 copyright notice and this permission notice appear in supporting
 documentation.

 The above copyright notice and this permission notice shall be included in
 all copies or substantial portions of the Software.

 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 Except as contained in this notice, the name of The Open Group shall not be
 used in advertising or otherwise to promote the sale, use or other dealings
 in this Software without prior written authorization from The Open Group.

 */
 /*****************************************************************

 (C) COPYRIGHT International Business Machines Corp. 1992,1997
     All Rights Reserved

 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software.

 The above copyright notice and this permission notice shall be included in
 all copies or substantial portions of the Software.

 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 THE IBM CORPORATION BE LIABLE FOR ANY CLAIM, DAMAGES, INCLUDING,
 BUT NOT LIMITED TO CONSEQUENTIAL OR INCIDENTAL DAMAGES, OR OTHER LIABILITY,
 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
 IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 Except as contained in this notice, the name of the IBM Corporation shall
 not be used in advertising or otherwise to promote the sale, use or other
 dealings in this Software without prior written authorization from the IBM
 Corporation.

 ******************************************************************/

 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
 #include "Intrinsic.h"
 #include "IntrinsicI.h"
 #include "Core.h"
 #include "CoreP.h"
 #include "ShellP.h"
 #include "StringDefs.h"
 #include "ResConfigP.h"
 #include <X11/Xatom.h>
 #include <stdio.h>
 #include <stdlib.h>

 #define MAX_BUFFER 512

 static void _search_child(Widget, char *, char *, char *, char *, char, char *);
 static void _set_and_search(Widget, char *, char *, char *, char *, char , char *);
 static int _locate_children(Widget, Widget **);

 #if defined(sun) && !defined(SVR4)
 # define Strtoul(a,b,c) (unsigned long)strtol(a,b,c)
 #else
 # define Strtoul(a,b,c) strtoul(a,b,c)
 #endif


 /*
  * NAME: _set_resource_values
  *
  * FUNCTION:
  *	This function sets the value on the widget.  It must first determine
  *	if the last part is a valid resource for that widget.  (eg.
  *	labelString is a valid resource for label but not for bulletin board)
  *	It must also add the resource to the application's resource database
  *	and then query it out using specific resource strings that it builds
  *	from the widget information.  This ensures that a customizing tool
  *	on-the-fly paradigm is followed:  an application that is
  *	instantaneously updated should look the same as one that is restarted
  *	and uses the .Xdefaults file.
  *
  * PARAMETERS:
  *	w		the widget to match
  *	resource	the resource string to be matched
  *	value		the value to be set
  *	last_part	the last resource part (e.g. *background)
  *
  * RETURN VALUES: void
  *
  * ERRORS: none
  */
 static void
 _set_resource_values (
 	Widget w,
 	char *resource,
 	char *value,
 	char *last_part)
 {
 	XrmDatabase 	db = NULL;
 	char		*resource_name = NULL;
 	char		*resource_class = NULL;
 	char		*return_type;
 	XrmValue	return_value;
 	char		*resource_value;
 	Widget		cur = w;
 	char		*temp;
 	XtResourceList	resources_return = NULL;
 	Cardinal 	num_resources_return = 0;
 	Cardinal	res_index;
 	Boolean		found_resource = False;
 	Display		*dpy;
 	XrmDatabase	tmp_db;

 	if (!XtIsWidget (w))
 		dpy = XtDisplay (w->core.parent);
 	else
 		dpy = XtDisplay (w);
 	tmp_db = XtDatabase(dpy);

 	/*
 	 * get a list of all the valid resources for this widget
 	 */
 	XtGetResourceList (w->core.widget_class,
 		&resources_return, &num_resources_return);

 	/*
 	 * try to match the last_part of the resource string with
 	 * a resource in this resource list
 	 */
 	for (res_index=0; res_index<num_resources_return; res_index++) {
 		if ((strcmp (last_part,
 			resources_return[res_index].resource_name) == 0) ||
 		    (strcmp (last_part,
 			resources_return[res_index].resource_class) == 0)) {
 			found_resource = True;
 			break;
 		}
 	}

 	/*
 	 * if resource is not a valid resource for this widget
 	 * or the resource name or class are NULL
 	 * then exit this function
 	 */
 	if (!found_resource
 		|| !resources_return[res_index].resource_name
 		|| !resources_return[res_index].resource_class) {
 		XtFree ((char *) resources_return);
 		return;
 	}

 	/*
 	 * build the full resource name and class specifications so
 	 * that you can query the resource database
 	 * 	eg: .app.button1.foreground
 	 * 	    .App.XmPushButton.Foreground
 	 */
 	while (cur != NULL) {
 		/*
 		 * create resource name string
 		 */
 		if (resource_name) {
 			XtAsprintf (&temp, ".%s%s", cur->core.name, resource_name);
 			XtFree (resource_name);
 		} else if (!XtIsWidget (cur) || !cur->core.name) {
 			cur = XtParent(cur);
 			continue;
 		} else {
 			XtAsprintf (&temp, ".%s", cur->core.name);
 		}
 		resource_name = temp;

 		/*
 		 * create resource class string
 		 */
 		if ((XtIsTopLevelShell (cur)) && (XtParent (cur) == NULL)) {
 			ApplicationShellWidget	top =
 				(ApplicationShellWidget) (cur);

 			if (resource_class) {
 				XtAsprintf (&temp, ".%s%s",
 					top->application.class, resource_class);
 			} else {
 				XtAsprintf (&temp, ".%s",
 					top->application.class);
 			}
 		} else {
 			if (resource_class) {
 				XtAsprintf (&temp, ".%s%s",
 					cur->core.widget_class->core_class.class_name,
 					resource_class);
 			} else {
 				XtAsprintf (&temp, ".%s",
 					cur->core.widget_class->core_class.class_name);
 			}
 		}
 		if (resource_class != NULL)
 			XtFree (resource_class);
 		resource_class = temp;

 		cur = XtParent(cur);
 	}

 	/*
 	 * add the resource name to the end of the resource name string
 	 */
 	XtAsprintf (&temp, "%s.%s", resource_name,
 		resources_return[res_index].resource_name);
 	if (resource_name != NULL)
 		XtFree (resource_name);
 	resource_name = temp;

 	/*
 	 * add the resource class to the end of the resource class string
 	 */
 	XtAsprintf (&temp, "%s.%s", resource_class,
 		resources_return[res_index].resource_class);
 	if (resource_class != NULL)
 		XtFree (resource_class);
 	resource_class = temp;

 #ifdef DEBUG
 	fprintf (stderr, "resource_name = %s\n", resource_name);
 	fprintf (stderr, "resource_class = %s\n", resource_class);
 #endif

 	/*
 	 * put the resource and its value in a resource database and
 	 * then query it back out again using the specific name and
 	 * class resource strings that were built above.  This is
 	 * necessary to maintain a precedence similar to the .Xdefaults
 	 * file
 	 */
 	XrmPutStringResource (&db, resource, value);
 	XrmMergeDatabases (db, &tmp_db);
 	XrmGetResource (tmp_db, resource_name, resource_class,
 		&return_type, &return_value);
 	if (return_type)
 		resource_value = XtNewString (return_value.addr);
 	else
 		resource_value = XtNewString (value);

 #ifdef DEBUG
 	fprintf (stderr,
 		"Apply:\n\twidget = %s\n\tlast_part = %s\n\tvalue = %s\n",
 		(w->core.name == NULL) ? "NULL" : w->core.name,
 		resources_return[res_index].resource_name,
 		resource_value);
 #endif
 	/*
 	 * use XtVaSetValues with XtVaTypedArg to convert the value of
 	 * type String the the same type as the resource (last_part).
 	 * Then set the value.
 	 */
 	XtVaSetValues (w,
 		XtVaTypedArg, resources_return[res_index].resource_name,
 		XtRString, resource_value,
 		strlen (resource_value) + 1,
 		NULL);

 	XtFree ((char *) resources_return);
 	XtFree (resource_name);
 	XtFree (resource_class);
 	XtFree (resource_value);
 }

 /*
  * NAME: _apply_values_to_children
  *
  * FUNCTION:
  *	Once the resource string matches the value must be applied to
  *	all children if applicable. (eg. App*Form.background must apply
  *	background to all children of the Form widget)
  *
  * PARAMETERS:
  *	w		the widget to match
  *	remainder	the part of the resource string left over
  *	resource	the resource string to be matched
  *	value		the value to be set
  *	last_token	the last * or . before the final resoruce part
  *	last_part	the last resource part (e.g. *background)
  *
  * RETURN VALUES: void
  *
  * ERRORS: none
  */
 static void
 _apply_values_to_children (
 	Widget w,
 	char *remainder,
 	char *resource,
 	char *value,
 	char last_token,
 	char *last_part)
 {
 	int 	i;
 	int	num_children;
 	Widget	*children;

 	/*
 	 * Recursively search through the children
 	 */
 	num_children = _locate_children (w, &children);

 	for (i=0; i<num_children; i++) {

 #ifdef DEBUG
 		if (XtIsWidget (children[i]) && XtIsWidget (w))
 			fprintf (stderr, "searching child %s of parent %s\n",
 				children[i]->core.name, w->core.name);
 		else
 			fprintf (stderr,"searching child (NULL) of parent %s\n",
 				w->core.name);
 		if (!XtIsWidget (children[i]))
 			fprintf (stderr, "children[%d] is NOT a widget\n", i);
 		if (!XtIsWidget (w))
 			fprintf (stderr, "w is NOT a widget\n");
 #endif

 		_set_resource_values (children[i], resource, value, last_part);
 		_apply_values_to_children (children[i], remainder,
 				resource, value, last_token, last_part);
 	}

 	XtFree ((char *)children);
 }

 /*
  * NAME: _search_child
  *
  * FUNCTION:
  *	descends through each child of the tree
  *
  * PARAMETERS:
  *	w		the widget whose children are to be searched
  *	indx		index into the resource string
  *	remainder	the remaining part of the resource string
  *	resource	the resource string to be matched
  *	value		the value to be applied
  *	last_token	the last * or . before the final resoruce part
  *	last_part	the last resource part (e.g. *background)
  *
  * RETURN VALUES: none
  *
  * ERRORS: none
  */
 static void
 _search_child (
 	Widget w,
 	char *indx,
 	char *remainder,
 	char *resource,
 	char *value,
 	char last_token,
 	char *last_part)
 {
 	int 	i;
 	int	num_children;
 	Widget	*children;

 	/*
 	 * Recursively search through the children
 	 */
 	num_children = _locate_children (w, &children);
 	for (i=0; i<num_children; i++) {
 		_set_and_search (children[i], indx, remainder, resource,
 			value, last_token, last_part);
 	}

 	XtFree ((char *)children);
 }

 /*
  * NAME: _get_part
  *
  * FUNCTION:
  * 	This routine will return the token and following part of the resource
  * 	when given the current index it will update the index accordingly
  *
  * PARAMETERS:
  *	remainder	the part of the resource string left over
  *	indx		the index into the resource string
  *	part		the parsed off part of the resource string
  *
  * RETURN VALUES:
  *	char		the token (* or . or ?) preceding the resource part
  *	indx		the index into the resource string
  *	part		the parsed off part of the resource string
  *
  * ERRORS: none
  */
 /* ARGSUSED */
 static char
 _get_part (
 	char *remainder,
 	char **indx,
 	char **part)
 {
 	char	buffer[MAX_BUFFER];
 	char	*buf_ptr;
 	char	token = **indx;
 	int	i = 0;

 	/*
 	 * copy the remainder part into the buffer
 	 */
 	buf_ptr = buffer;
 	(*indx)++;			/* get rid of the token		*/
 	while (**indx && (**indx != '.') && (**indx != '*')) {
 		*buf_ptr++ = *(*indx)++;
 		if (++i >= MAX_BUFFER - 1)
 			break;
 	}
 	*buf_ptr = '\0';

 	*part = XtNewString (buffer);	/* return a new string to part	*/

 	if (strcmp (*indx, "") == 0)
 		*indx = NULL;

 	return (token);			/* return the token		*/
 }

 /*
  * NAME: _match_resource_to_widget
  *
  * FUNCTION:
  *	This function matches the resource part to the widget name or class
  *
  * PARAMETERS:
  *	w		the widget to match
  *	part		the parsed off part of the resource string
  *
  * RETURN VALUES:
  *	Boolean		true if a match occurs
  *
  * ERRORS: none
  */
 static Boolean
 _match_resource_to_widget (
 	Widget w,
 	char *part)
 {
 	/*
 	 * Match any widget at this level if the ? is used
 	 */
 	if (strcmp (part, "?") == 0)
 		return (True);

 	/*
 	 * if the object is really a widget then its name can be matched
 	 * otherwise only use its class.  Note that if you try to reference
 	 * a widget name when the object is not a widget, you may get a
 	 * core dump from an invalid pointer reference.
 	 */
 	if (XtIsWidget (w)) {
 		if ((strcmp (w->core.name, part) == 0) ||
 		    (strcmp (w->core.widget_class->core_class.class_name,
 							part) == 0))
 			return (True);
 		else
 			return (False);
 	} else {
 		if ((strcmp (w->core.widget_class->core_class.class_name,
 							part) == 0))
 			return (True);
 		else
 			return (False);
 	}
 }

 /*
  * NAME: _set_and_search
  *
  * FUNCTION:
  * 	The algorithm to search the widget tree and apply a resource string
  *
  * PARAMETERS:
  *	w		the widget to match
  *	indx		the index into the resource string
  *	remainder	the part of the resource string left over
  *	resource	the resource string to be matched
  *	value		the value to be set
  *	last_token	the last * or . before the final resoruce part
  *	last_part	the last resource part (e.g. *background)
  *
  * RETURN VALUES: none
  *
  * ERRORS: none
  *
  * ALGORITHM:
  * loop (look at all children)
  * 	if (resource segment and current widget match)
  *		if '.'
  *			if at end of resource string
  *				set values (	.=over all children
  *						*=this widget only)
  *			else
  *				descend the widget tree
  *				and parse off resource segment
  *			exit the loop
  *		if '*'
  *			if at end of resource string
  *				set values (	.=over all children
  *						*=this widget only)
  *			descend and parse
  *	else
  *		if '.'
  *			continue looping
  *		if '*'
  *			descend but don't parse
  *			continue looping
  * end loop
  *
  * NOTE:  the _set_resource_values routine will not allow a value to be
  *	set on a resource against the rules of the resource database manager
  */
 static void
 _set_and_search (
 	Widget w,
 	char *indx,
 	char *remainder,
 	char *resource,
 	char *value,
 	char last_token,
 	char *last_part)
 {
 	char	*part;
 	char	*local_index = indx;
 	char	token;

 	/*
 	 * parse off one part, return token and the new index
 	 */
 	token = _get_part (remainder, &local_index, &part);

 	if (_match_resource_to_widget (w, part)) {
 		if (token == '.') {
 			if (local_index == NULL) {
 				if (last_token == '.') {
 					_set_resource_values (w, resource,
 						value, last_part);
 				} else if (last_token == '*') {
 					_set_resource_values (w, resource,
 						value, last_part);
 					_apply_values_to_children (w,
 						remainder, resource, value,
 						last_token, last_part);
 				}
 			} else
 				_search_child (w, local_index, remainder,
 					resource, value, last_token, last_part);
 			return;
 		}
 		if (token == '*') {
 			if (local_index == NULL) {
 				if (last_token == '.') {
 					_set_resource_values (w, resource,
 						value, last_part);
 				} else if (last_token == '*') {
 					_set_resource_values (w, resource,
 						value, last_part);
 					_apply_values_to_children ( w,
 						remainder, resource, value,
 						last_token, last_part);
 				}
 			} else
 				_search_child (w, local_index, remainder,
 					resource, value, last_token, last_part);
 		}
 	} else {/* if the widget name and class don't match the part */
 		/* if (token == '.') just continue looping */

 		if (token == '*') {
 			_search_child (w, indx, remainder, resource, value,
 				last_token, last_part);
 		}
 	}

 	XtFree (part);
 }

 /*
  * NAME: _get_last_part
  *
  * FUNCTION:
  * 	This routine will parse off the last segment of a resource string
  * 	and its token and return them.  the remainder of resource is also
  * 	returned.  strcoll is used to guarantee no problems with
  *	international strings.
  *
  * PARAMETERS:
  *	remainder	the part of the resource string left over
  *	part		the parsed off part of the resource string
  *
  * RETURN VALUES:
  *	char		the token (* or . or ?) preceding the resource part
  *	remainder	the part of the resource string left over
  *	part		the parsed off part of the resource string
  *
  * ERRORS: none
  */
 static char
 _get_last_part (
 	char *remainder,
 	char **part)
 {
 	char	*loose, *tight;

 	loose = strrchr (remainder, '*');
 	tight = strrchr (remainder, '.');

 	if ((loose == NULL) && (tight == NULL)) {
 		*part = XtNewString (remainder);
 		return ('.');
 	}
 	if ((loose == NULL) || (tight && (strcoll (loose, tight) < 0))) {
 		*tight++ = '\0';	/* shorten the remainder string */
 		*part = XtNewString (tight);
 		return ('.');
 	}
 	if ((tight == NULL) || (loose && (strcoll (tight, loose) < 0))) {
 		*loose++ = '\0';
 		*part = XtNewString (loose);
 		return ('*');
 	}
 	*part = NULL;

 	return ('0');	/* error - return 0 */
 }

 /*
  * NAME: _search_widget_tree
  *
  * FUNCTION:
  *	This function tries to match a resource string to the widgets
  *	it applies to.  The functions it invokes to do this then set
  *	the value for that resource to each widget.
  *
  *	The resource string has to be parsed into the following format:
  *		resource = App*Form*button1.background
  *		remainder = *Form*button1
  *		last_part = background		last_token = .
  *	As the widget tree is recursively descended, these variables are
  *	passed.  The remainder is parsed at each level in the widget
  *	tree as the _set_and_search function attempts to match
  *	the resource part (eg. part = Form  token = *) to a widget.  When
  *	the entire resource string has been matched, the _set_resource_values
  *	functions is called to apply the value to the widget or widgets.
  *
  * PARAMETERS:
  *	w		a widget from whose toplevel shell ancestor
  *			the search will start
  *	resource	the resource string to match
  *	value		the value to apply
  *
  * RETURN VALUES: none
  *
  * ERRORS: none
  */
 static void
 _search_widget_tree (
 	Widget w,
 	char *resource,
 	char *value)
 {
 	Widget	parent = w;
 	char	*last_part;
 	char	*remainder = NULL;
 	char	last_token;
 	char	*indx, *copy;
 	char	*loose, *tight;
 	int	loose_len, tight_len;

 	/*
 	 * Find the root of the tree given any widget
 	 */
 	while (XtParent(parent) != NULL) {
 		parent = XtParent(parent);
 	}
 #ifdef DEBUG
 	if (XtIsWidget (w) && XtIsWidget (parent))
 		fprintf (stderr, "widget = %s parent = %s\n",
 			w->core.name, parent->core.name);
 	else
 		fprintf (stderr, "widget = NULL parent = NULL\n");
 #endif

 	/*
 	 * parse off the Class name that was prepended to this string in
 	 * a customizing tool
 	 */
 	loose = strchr (resource, '*');
 	tight = strchr (resource, '.');
 	if ((loose == NULL) && (tight == NULL))
 		return;

 	loose_len = (loose) ? strlen (loose) : 0;
 	tight_len = (tight) ? strlen (tight) : 0;

 	if ((loose == NULL) || (tight_len > loose_len))
 		remainder = XtNewString (tight);
 	else if ((tight == NULL) || (loose_len > tight_len))
 		remainder = XtNewString (loose);

 	/*
 	 * Parse last segment off of resource string, (eg. background, font,
 	 * etc.)
 	 */
 	last_token = _get_last_part (remainder, &last_part);
 	/*
 	 * this case covers resources of only one level (eg. *background)
 	 */
 	if (remainder[0] == 0) {
 		_set_resource_values (w, resource, value, last_part);
 		if (last_token == '*')
 			_apply_values_to_children (parent, remainder, resource,
 				value, last_token, last_part);
 	/*
 	 * all other resource strings are recursively applied to the widget tree.
 	 * Prepend a '.' to the remainder string if there is no leading token.
 	 */
 	} else {
 		if (remainder[0] != '*' && remainder[0] != '.') {
 			XtAsprintf (&copy, ".%s", remainder);
 			XtFree (remainder);
 			remainder = copy;
 		}
 		indx = remainder;
 		_set_and_search (parent, indx, remainder, resource, value,
 			last_token, last_part);
 	}

 	XtFree (remainder);
 	XtFree (last_part);
 }

 /*
  * NAME: _locate_children
  *
  * FUNCTION:
  *	returns a list of all of a widget's children
  *
  * PARAMETERS:
  *	w		the parent to search for its children
  *	children	the list of children that is created
  *	normal		flag for normal children
  *	popup		flag for popup children
  *
  * RETURN VALUES:
  *	int		the number of children
  *	children	the list of children found
  *
  * ERRORS: none
  */
 static int
 _locate_children (
 	Widget parent,
 	Widget **children)
 {
 	CompositeWidget comp = (CompositeWidget) parent;
 	Cardinal	i;
 	int	num_children = 0;
 	int	current = 0;

 	/*
 	 * count the number of children
 	 */
 	if (XtIsWidget (parent))
 		num_children += parent->core.num_popups;
 	if (XtIsComposite (parent))
 		num_children += comp->composite.num_children;
 	if (num_children == 0) {
 		*children = NULL;
 		return (0);
 	}

 	*children = (Widget *)
 		XtMalloc ((Cardinal) sizeof(Widget) * num_children);

 	if (XtIsComposite (parent)) {
 		for (i=0; i<comp->composite.num_children; i++) {
 			(*children)[current] = comp->composite.children[i];
 			current++;
 		}
 	}

 	if (XtIsWidget (parent)) {
 		for (i=0; i<parent->core.num_popups; i++) {
 			(*children)[current] = comp->core.popup_list[i];
 			current++;
 		}
 	}

 	return (num_children);
 }

 #ifdef DEBUG
 /*
  * NAME: dump_widget_tree
  *
  * FUNCTION:
  *	recursively printout entire widget tree
  *
  * PARAMETERS:
  *	w		the widget to match
  *	indent		the amount to indent each line
  *
  * RETURN VALUES: void
  *
  * ERRORS: none
  */
 static void
 dump_widget_tree (
 	Widget w,
 	int	indent)
 {
 	int 	i,j;
 	int	num_children;
 	Widget	*children;

 	/*
 	 * Recursively search through the children
 	 */
 	num_children = _locate_children (w, &children);
 	indent += 2;
 	for (i=0; i<num_children; i++) {
 		if (children[i] != NULL) {
 			for (j=0; j<indent; j++)
 				fprintf (stderr, " ");
 			if (XtIsWidget (children[i])) {
 				fprintf (stderr, "(%s)\t",children[i]->core.name);
 				fprintf (stderr, "(%s)\n",
 			children[i]->core.widget_class->core_class.class_name);
 			} else {
 				fprintf (stderr, "(NULL)\t");
 				fprintf (stderr, "(%s)\n",
 			children[i]->core.widget_class->core_class.class_name);
 			}
 		}
 		dump_widget_tree (children[i], indent);
 	}

 	XtFree ((char *)children);
 }
 #endif

 /*
  * NAME: _XtResourceConfiguationEH
  *
  * FUNCTION:
  *	This function is the event handler for the on-the-fly communication
  *	with a resource customization tool.  This event handler must be
  *      registered for the toplevel shell of each app.  This is best done
  *      in the _XtCreatePopupShell and _XtAppCreateShell functions in Xt's
  *	Create.c source file.
  *
  * 	The property used to communicate with a customizing tool is
  *	placed on the toplevel shell window of the application.  The
  *	customizing tool places a property on this window which causes
  *	this event handler to be invoked via the PropertyNotify event.
  *	This event handler reads the property and then deletes it from
  *	the server.  The contents of the property are a resource string
  *	and value.  The event handler then calls functions to walk the
  *	applications widget tree, determining which widgets are affected
  *	by the resource string, and then applying the value with XtSetValues.
  *
  * PARAMETERS:
  *	w		the widget that invoked this event handler
  *	client_data	not used
  *	event		the event structure
  *
  * RETURN VALUES: none
  *
  * ERRORS: none
  */
 /* ARGSUSED */
 void
 _XtResourceConfigurationEH (
 	Widget w,
 	XtPointer client_data,
 	XEvent *event)
 {
 	Atom		actual_type;
 	int		actual_format;
 	unsigned long	nitems;
 	unsigned long	leftover;
 	unsigned char	*data = NULL;
 	unsigned long	resource_len;
 	char		*data_ptr;
 	char		*resource;
 	char		*value;
 #ifdef DEBUG
 	int		indent = 0;
 #endif
 	XtPerDisplay	pd;

 #ifdef DEBUG
 	fprintf (stderr, "in _XtResourceConfiguationEH atom = %d\n",event->xproperty.atom);
 	fprintf (stderr, "    window = %x\n", XtWindow (w));
 	if (XtIsWidget (w))
 		fprintf (stderr, "    widget = %x   name = %s\n", w, w->core.name);
 #endif

 	pd = _XtGetPerDisplay (XtDisplay (w));

 	/*
 	 * The window on which a customizing tool places the property
 	 * is determined at this point.  It should be the applications
 	 * toplevel shell window.
 	 *
 	 * A customizing tool sends a "ping" to the application on
 	 * the RCM_INIT property.  The application answers the ping
 	 * by deleting the property.
 	 */
 	if (event->xproperty.atom == pd->rcm_init) {
 		XDeleteProperty (XtDisplay(w), XtWindow (w), pd->rcm_init);

 #ifdef DEBUG
 		if (XtIsWidget (w))
 			fprintf (stderr, "%s\n", w->core.name);
 		else
 			fprintf (stderr, "NULL name\n");
 		dump_widget_tree(w, indent);

 		fprintf (stderr, "answer ping\n");
 #endif
 	}

 	/*
 	 * This event handler ignores any property notify events that
 	 * are not RCM_INIT or RCM_DATA
 	 */
 	if (event->xproperty.atom != pd->rcm_data)
 		return;

 	/*
 	 * Retrieve the data from the property
 	 */
 #ifdef DEBUG
 	fprintf (stderr, "receiving RCM_DATA property\n");
 #endif
 	if (XGetWindowProperty (XtDisplay(w),
 		XtWindow (w),
 		pd->rcm_data, 0L, 8192L,
 		TRUE, XA_STRING,
 		&actual_type, &actual_format, &nitems, &leftover,
 		&data ) == Success && actual_type == XA_STRING
 			   && actual_format == 8) {
 	/*
 	 *      data format is:
 	 *
 	 *      resource_length, resource, value
 	 *
 	 *      convert the resource_length to a long, skip over it, put a
 	 *      zero byte at the end of the resource, and pick off the
 	 *      resource and value fields.
 	 */
 		if (data) {
 			char *data_end = data + nitems;
 			char *data_value;

 			resource_len = Strtoul ((void *)data, &data_ptr, 10);

 			if (data_ptr != (char *) data) {
 				data_ptr++;
 				data_value = data_ptr + resource_len;
 			} else /* strtoul failed to convert a number */
 				data_ptr = data_value = NULL;

 			if (data_value > data_ptr && data_value < data_end) {
 				*data_value++ = '\0';

 				resource = XtNewString (data_ptr);
 				value = XtNewString (data_value);
 #ifdef DEBUG
 				fprintf (stderr, "resource_len=%d\n"
 					 resource_len);
 				fprintf (stderr, "resource = %s\t value = %s\n",
 					 resource, value);
 #endif
 				/*
 				 * descend the application widget tree and
 				 * apply the value to the appropriate widgets
 				 */
 				_search_widget_tree (w, resource, value);

 				XtFree (resource);
 				XtFree (value);
 			}
 		}
 	}

 	if (data)
 		XFree ((char *)data);
 }

 --MP_/H/N30QWgM9xn8ehmfHu6lZO--

From: christos@zoulas.com (Christos Zoulas)
To: gnats-bugs@NetBSD.org, xsrc-manager@netbsd.org, gnats-admin@netbsd.org, 
	netbsd-bugs@netbsd.org, raizen@lloedy.com
Cc: 
Subject: Re: xsrc/48863 build.sh fails to build
Date: Fri, 31 Oct 2014 12:33:21 -0400

 On Oct 31,  4:30pm, raizen@lloedy.com (Sandro Millien) wrote:
 -- Subject: Re: xsrc/48863 build.sh fails to build

 |  $ rm /usr/xsrc/external/mit/libXt/dist/src/ResConfig.c
 |  $ cd /usr/xsrc && cvs update -dP

 Try cvs update -dAP, you are prolly stuck on some branch. The HEAD revision
 has the missing comma.

 christos

From: Sandro Millien <raizen@lloedy.com>
To: christos@zoulas.com (Christos Zoulas)
Cc: gnats-bugs@NetBSD.org, xsrc-manager@netbsd.org, gnats-admin@netbsd.org,
        netbsd-bugs@netbsd.org
Subject: Re: xsrc/48863 build.sh fails to build
Date: Sat, 1 Nov 2014 20:05:13 +0100

 On Fri, 31 Oct 2014 12:33:21 -0400
 christos@zoulas.com (Christos Zoulas) wrote:

 > On Oct 31,  4:30pm, raizen@lloedy.com (Sandro Millien) wrote:
 > -- Subject: Re: xsrc/48863 build.sh fails to build
 > 
 > |  $ rm /usr/xsrc/external/mit/libXt/dist/src/ResConfig.c
 > |  $ cd /usr/xsrc && cvs update -dP
 > 
 > Try cvs update -dAP, you are prolly stuck on some branch. The HEAD
 > revision has the missing comma.
 >
 If I do that I will switch to the HEAD branch, but I am following the
 6-1 (stable) branch.

 > christos
 > 

From: Christos Zoulas <christos@zoulas.com>
To: Sandro Millien <raizen@lloedy.com>
Cc: "gnats-bugs@NetBSD.org" <gnats-bugs@NetBSD.org>,
 "xsrc-manager@netbsd.org" <xsrc-manager@netbsd.org>,
 "gnats-admin@netbsd.org" <gnats-admin@netbsd.org>,
 "netbsd-bugs@netbsd.org" <netbsd-bugs@netbsd.org>
Subject: Re: xsrc/48863 build.sh fails to build
Date: Sat, 1 Nov 2014 16:46:03 -0400

 Just fix the comma then. We should probably issue a pull-up for this but it i=
 s not critical.

 christos=20


 > On Nov 1, 2014, at 3:05 PM, Sandro Millien <raizen@lloedy.com> wrote:
 >=20
 > On Fri, 31 Oct 2014 12:33:21 -0400
 > christos@zoulas.com (Christos Zoulas) wrote:
 >=20
 >> On Oct 31,  4:30pm, raizen@lloedy.com (Sandro Millien) wrote:
 >> -- Subject: Re: xsrc/48863 build.sh fails to build
 >>=20
 >> |  $ rm /usr/xsrc/external/mit/libXt/dist/src/ResConfig.c
 >> |  $ cd /usr/xsrc && cvs update -dP
 >>=20
 >> Try cvs update -dAP, you are prolly stuck on some branch. The HEAD
 >> revision has the missing comma.
 >>=20
 > If I do that I will switch to the HEAD branch, but I am following the
 > 6-1 (stable) branch.
 >=20
 >> christos
 >>=20

State-Changed-From-To: feedback->pending-pullups
State-Changed-By: snj@NetBSD.org
State-Changed-When: Sun, 02 Nov 2014 23:00:19 +0000
State-Changed-Why:
Pullup requested: http://releng.netbsd.org/cgi-bin/req-6.cgi?show=1181


From: "SAITOH Masanobu" <msaitoh@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/48863 CVS commit: [netbsd-6] xsrc/external/mit/libXt/dist/src
Date: Sun, 9 Nov 2014 07:17:51 +0000

 Module Name:	xsrc
 Committed By:	msaitoh
 Date:		Sun Nov  9 07:17:51 UTC 2014

 Modified Files:
 	xsrc/external/mit/libXt/dist/src [netbsd-6]: ResConfig.c

 Log Message:
 Pull up following revision(s) (requested by snj in ticket #1181):
 	xsrc/external/mit/libXt/dist/src/ResConfig.c	patch

 Fix DEBUG build of libXt.  From Sandro Millien in PR xsrc/48863.


 To generate a diff of this commit:
 cvs rdiff -u -r1.1.1.4.2.1 -r1.1.1.4.2.2 \
     xsrc/external/mit/libXt/dist/src/ResConfig.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

From: "SAITOH Masanobu" <msaitoh@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/48863 CVS commit: [netbsd-6-1] xsrc/external/mit/libXt/dist/src
Date: Sun, 9 Nov 2014 07:18:25 +0000

 Module Name:	xsrc
 Committed By:	msaitoh
 Date:		Sun Nov  9 07:18:25 UTC 2014

 Modified Files:
 	xsrc/external/mit/libXt/dist/src [netbsd-6-1]: ResConfig.c

 Log Message:
 Pull up following revision(s) (requested by snj in ticket #1181):
 	xsrc/external/mit/libXt/dist/src/ResConfig.c	patch

 Fix DEBUG build of libXt.  From Sandro Millien in PR xsrc/48863.


 To generate a diff of this commit:
 cvs rdiff -u -r1.1.1.4.6.1 -r1.1.1.4.6.2 \
     xsrc/external/mit/libXt/dist/src/ResConfig.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

From: "SAITOH Masanobu" <msaitoh@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/48863 CVS commit: [netbsd-6-0] xsrc/external/mit/libXt/dist/src
Date: Sun, 9 Nov 2014 07:19:02 +0000

 Module Name:	xsrc
 Committed By:	msaitoh
 Date:		Sun Nov  9 07:19:01 UTC 2014

 Modified Files:
 	xsrc/external/mit/libXt/dist/src [netbsd-6-0]: ResConfig.c

 Log Message:
 Pull up following revision(s) (requested by snj in ticket #1181):
 	xsrc/external/mit/libXt/dist/src/ResConfig.c	patch

 Fix DEBUG build of libXt.  From Sandro Millien in PR xsrc/48863.


 To generate a diff of this commit:
 cvs rdiff -u -r1.1.1.4.4.1 -r1.1.1.4.4.2 \
     xsrc/external/mit/libXt/dist/src/ResConfig.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

State-Changed-From-To: pending-pullups->closed
State-Changed-By: snj@NetBSD.org
State-Changed-When: Sun, 09 Nov 2014 08:46:12 +0000
State-Changed-Why:
Fix pulled up to the netbsd-6* branches.


>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2014 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.