reassign 644868 libgnustep-base1.22 retitle 644868 Programs abort on kfreebsd* when arguments exceed 512 affects 644868 gnustep-back-common block 629477 with 644868 thanks
On Sun, Oct 09, 2011 at 11:02:25PM +0200, Axel Beckert wrote: > Package: gnustep-back-common > Version: 0.20.1-2 > Severity: serious > gnustep-back-common reproducibly fails to configure after upgrade on > one of my systems (kfreebsd-i386) as follows. > Error: for some reason, argv not properly set up during GNUstep base > initialization > xargs: mknfonts: terminated by signal 6 This is a reincarnation of #593898, when the number of arguments exceeds 512. The attached test program demonstrates the problem: $ make $ i=0; d=0; while test $i -eq 0; do for d in `expr $((d + 1))`; do \ ./obj/test `seq $d`; i=$?; done; done Arguments given: 1 Arguments given: 2 ... Arguments given: 512 Error: for some reason, argv not properly set up during GNUstep base initialization The condition which leads to the error is if (argv != 0 && argv[0] != 0) which for some bizarre reason is false in this case. It's either a kernel bug or limitation, I hope the GNU/kFreeBSD people have some clue? There's nothing wrong in the gnustep-base code... The only way I see as a workaround is to build gnustep-base with --enable-fake-main, which is already the case on a number of *BSD systems. However, this change is ABI-incompatible so all GNUstep packages must be binNMUed _again_ on kfreebsd*. Is this acceptable for the release team?
#import <Foundation/Foundation.h> int main (int argc, char **argv) { CREATE_AUTORELEASE_POOL (pool); NSProcessInfo *procinfo = [NSProcessInfo processInfo]; NSArray *args = [procinfo arguments]; printf ("Arguments given: %d\n", [args count]); RELEASE (pool); exit (EXIT_SUCCESS); }
ifndef GNUSTEP_MAKEFILES GNUSTEP_MAKEFILES := $(shell gnustep-config --variable=GNUSTEP_MAKEFILES) endif include $(GNUSTEP_MAKEFILES)/common.make TOOL_NAME = test test_OBJC_FILES = test.m include $(GNUSTEP_MAKEFILES)/tool.make