Index: Info.plist ================================================================== --- Info.plist +++ Info.plist @@ -15,12 +15,12 @@ CFBundleName objfw CFBundlePackageType FMWK CFBundleShortVersionString - 0.3-dev + 0.3 CFBundleSignature OBJF CFBundleVersion - 0.3-dev + 0.3 Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -1,6 +1,6 @@ -AC_INIT(ObjFW, 0.3-dev, js@webkeks.org) +AC_INIT(ObjFW, 0.3, js@webkeks.org) AC_CONFIG_SRCDIR(src) AC_CANONICAL_HOST AC_LANG([Objective C]) Index: src/OFXMLElement.m ================================================================== --- src/OFXMLElement.m +++ src/OFXMLElement.m @@ -15,259 +15,14 @@ #include #include #import "OFXMLElement.h" #import "OFString.h" -#import "OFArray.h" -#import "OFAutoreleasePool.h" #import "OFExceptions.h" int _OFXMLElement_reference; -@implementation OFXMLAttribute -+ attributeWithName: (OFString*)name - prefix: (OFString*)prefix - namespace: (OFString*)ns - stringValue: (OFString*)value -{ - return [[[self alloc] initWithName: name - prefix: prefix - namespace: ns - stringValue: value] autorelease]; -} - -- initWithName: (OFString*)name_ - prefix: (OFString*)prefix_ - namespace: (OFString*)ns - stringValue: (OFString*)value -{ - self = [super init]; - - name = [name_ copy]; - prefix = [prefix_ copy]; - namespace = [ns copy]; - stringValue = [value copy]; - - return self; -} - -- (void)dealloc -{ - [name release]; - [prefix release]; - [namespace release]; - [stringValue release]; - - [super dealloc]; -} - -- (OFString*)name -{ - return [[name copy] autorelease]; -} - -- (OFString*)prefix -{ - return [[prefix copy] autorelease]; -} - -- (OFString*)namespace -{ - return [[namespace copy] autorelease]; -} - -- (OFString*)stringValue -{ - return [[stringValue copy] autorelease]; -} -@end - -@implementation OFXMLElement -+ elementWithName: (OFString*)name_ -{ - return [[[self alloc] initWithName: name_] autorelease]; -} - -+ elementWithName: (OFString*)name - stringValue: (OFString*)stringval -{ - return [[[self alloc] initWithName: name - stringValue: stringval] autorelease]; -} - -- init -{ - @throw [OFNotImplementedException newWithClass: isa - selector: _cmd]; -} - -- initWithName: (OFString*)name_ -{ - self = [super init]; - - name = [name_ copy]; - - return self; -} - -- initWithName: (OFString*)name_ - stringValue: (OFString*)stringval -{ - self = [super init]; - - name = [name_ copy]; - stringValue = [stringval copy]; - - return self; -} - -- (OFString*)string -{ - OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; - char *str_c; - size_t len, i, j, attrs_count; - OFXMLAttribute **attrs_carray; - OFString *ret, *tmp; - - len = [name cStringLength] + 3; - str_c = [self allocMemoryWithSize: len]; - - /* Start of tag */ - *str_c = '<'; - memcpy(str_c + 1, [name cString], [name cStringLength]); - i = [name cStringLength] + 1; - - /* Attributes */ - attrs_carray = [attributes cArray]; - attrs_count = [attributes count]; - - for (j = 0; j < attrs_count; j++) { - /* FIXME: Add namespace support */ - OFString *attr_name = [attrs_carray[j] name]; - tmp = [[attrs_carray[j] stringValue] stringByXMLEscaping]; - - len += [attr_name cStringLength] + [tmp cStringLength] + 4; - @try { - str_c = [self resizeMemory: str_c - toSize: len]; - } @catch (OFException *e) { - [self freeMemory: str_c]; - @throw e; - } - - str_c[i++] = ' '; - memcpy(str_c + i, [attr_name cString], - [attr_name cStringLength]); - i += [attr_name cStringLength]; - str_c[i++] = '='; - str_c[i++] = '\''; - memcpy(str_c + i, [tmp cString], [tmp cStringLength]); - i += [tmp cStringLength]; - str_c[i++] = '\''; - - [pool releaseObjects]; - } - - /* Childen */ - if (stringValue != nil || children != nil) { - if (stringValue != nil) - tmp = [stringValue stringByXMLEscaping]; - else if (children != nil) { - OFXMLElement **children_carray = [children cArray]; - size_t children_count = [children count]; - IMP append; - - tmp = [OFMutableString string]; - append = [tmp methodForSelector: - @selector(appendCStringWithoutUTF8Checking:)]; - - for (j = 0; j < children_count; j++) - append(tmp, @selector( - appendCStringWithoutUTF8Checking:), - [[children_carray[j] string] cString]); - } - - len += [tmp cStringLength] + [name cStringLength] + 2; - @try { - str_c = [self resizeMemory: str_c - toSize: len]; - } @catch (OFException *e) { - [self freeMemory: str_c]; - @throw e; - } - - str_c[i++] = '>'; - memcpy(str_c + i, [tmp cString], [tmp cStringLength]); - i += [tmp cStringLength]; - str_c[i++] = '<'; - str_c[i++] = '/'; - memcpy(str_c + i, [name cString], [name cStringLength]); - i += [name cStringLength]; - } else - str_c[i++] = '/'; - - str_c[i++] = '>'; - assert(i == len); - - [pool release]; - - @try { - ret = [OFString stringWithCString: str_c - length: len]; - } @finally { - [self freeMemory: str_c]; - } - return ret; -} - -- (void)addAttribute: (OFXMLAttribute*)attr -{ - if (attributes == nil) - attributes = [[OFMutableArray alloc] init]; - - /* FIXME: Prevent having it twice! */ - - [attributes addObject: attr]; -} - -- (void)addAttributeWithName: (OFString*)name_ - stringValue: (OFString*)value -{ - OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; - [self addAttribute: [OFXMLAttribute attributeWithName: name_ - prefix: nil - namespace: nil - stringValue: value]]; - [pool release]; -} - -/* TODO: Replace attribute */ -/* TODO: Remove attribute */ - -- (void)addChild: (OFXMLElement*)child -{ - if (stringValue != nil) - @throw [OFInvalidArgumentException newWithClass: isa - selector: _cmd]; - - if (children == nil) - children = [[OFMutableArray alloc] init]; - - [children addObject: child]; -} - -- (void)dealloc -{ - [name release]; - [attributes release]; - [stringValue release]; - [children release]; - - [super dealloc]; -} -@end - @implementation OFString (OFXMLEscaping) - (OFString*)stringByXMLEscaping { char *str_c, *append, *tmp; size_t len, append_len; Index: src/OFXMLParser.m ================================================================== --- src/OFXMLParser.m +++ src/OFXMLParser.m @@ -13,27 +13,16 @@ #include #import "OFXMLParser.h" #import "OFString.h" -#import "OFArray.h" #import "OFAutoreleasePool.h" #import "OFExceptions.h" #import "macros.h" int _OFXMLParser_reference; -static OF_INLINE OFString* -transform_string(OFMutableString *cache, - OFObject *handler) -{ - /* TODO: Support for xml:space */ - - [cache removeLeadingAndTrailingWhitespaces]; - return [cache stringByXMLUnescapingWithHandler: handler]; -} - static OF_INLINE OFString* parse_numeric_entity(const char *entity, size_t length) { of_unichar_t c; size_t i; @@ -78,426 +67,10 @@ return [OFString stringWithCString: buf length: i]; } -@implementation OFXMLParser -+ xmlParser -{ - return [[[self alloc] init] autorelease]; -} - -- init -{ - self = [super init]; - - @try { - cache = [[OFMutableString alloc] init]; - previous = [[OFMutableArray alloc] init]; - } @catch (OFException *e) { - /* We can't use [super dealloc] on OS X here. Compiler bug? */ - [self dealloc]; - @throw e; - } - - return self; -} - -- (void)dealloc -{ - [delegate release]; - - [cache release]; - [name release]; - [prefix release]; - [ns release]; - [attrs release]; - [attrName release]; - [attrPrefix release]; - [previous release]; - - [super dealloc]; -} - -- (id)delegate -{ - return [[delegate retain] autorelease]; -} - -- (void)setDelegate: (OFObject *)delegate_ -{ - [delegate_ retain]; - [delegate release]; - delegate = delegate_; -} - -- (void)parseBuffer: (const char*)buf - withSize: (size_t)size -{ - OFAutoreleasePool *pool; - size_t i, last, len; - - last = 0; - - for (i = 0; i < size; i++) { - switch (state) { - /* Not in a tag */ - case OF_XMLPARSER_OUTSIDE_TAG: - if (buf[i] == '<') { - len = i - last; - - if (len > 0) - [cache appendCString: buf + last - withLength: len]; - - if ([cache cStringLength] > 0) { - OFString *str; - - pool = [[OFAutoreleasePool alloc] init]; - str = transform_string(cache, self); - [delegate xmlParser: self - foundString: str]; - [pool release]; - } - - [cache setToCString: ""]; - - last = i + 1; - state = OF_XMLPARSER_TAG_OPENED; - } - break; - - /* Tag was just opened */ - case OF_XMLPARSER_TAG_OPENED: - if (buf[i] == '/') { - last = i + 1; - state = OF_XMLPARSER_IN_CLOSE_TAG_NAME; - } else if(buf[i] == '!') { - last = i + 1; - state = OF_XMLPARSER_IN_COMMENT_1; - } else { - state = OF_XMLPARSER_IN_TAG_NAME; - i--; - } - break; - - /* Inside a tag, no name yet */ - case OF_XMLPARSER_IN_TAG_NAME: - if (buf[i] == ' ' || buf[i] == '>' || buf[i] == '/') { - const char *cache_c, *tmp; - size_t cache_len; - - len = i - last; - if (len > 0) - [cache appendCString: buf + last - withLength: len]; - cache_c = [cache cString]; - cache_len = [cache cStringLength]; - - if ((tmp = memchr(cache_c, ':', - cache_len)) != NULL) { - name = [[OFString alloc] - initWithCString: tmp + 1 - length: cache_len - (tmp - - cache_c) - 1]; - prefix = [[OFString alloc] - initWithCString: cache_c - length: tmp - cache_c]; - } else { - name = [cache copy]; - prefix = nil; - } - - if (buf[i] == '>' || buf[i] == '/') { - pool = [[OFAutoreleasePool alloc] init]; - - [delegate xmlParser: self - didStartTagWithName: name - prefix: prefix - namespace: ns - attributes: nil]; - - if (buf[i] == '/') - [delegate xmlParser: self - didEndTagWithName: name - prefix: prefix - namespace: ns]; - else - [previous addObject: - [[cache copy] autorelease]]; - - [pool release]; - - [name release]; - [prefix release]; - [ns release]; - name = prefix = ns = nil; - - state = (buf[i] == '/' - ? OF_XMLPARSER_EXPECT_CLOSE - : OF_XMLPARSER_OUTSIDE_TAG); - } else - state = OF_XMLPARSER_IN_TAG; - - [cache setToCString: ""]; - last = i + 1; - } - break; - - /* Inside a close tag, no name yet */ - case OF_XMLPARSER_IN_CLOSE_TAG_NAME: - if (buf[i] == ' ' || buf[i] == '>') { - const char *cache_c, *tmp; - size_t cache_len; - - len = i - last; - if (len > 0) - [cache appendCString: buf + last - withLength: len]; - cache_c = [cache cString]; - cache_len = [cache cStringLength]; - - if ((tmp = memchr(cache_c, ':', - cache_len)) != NULL) { - name = [[OFString alloc] - initWithCString: tmp + 1 - length: cache_len - (tmp - - cache_c) - 1]; - prefix = [[OFString alloc] - initWithCString: cache_c - length: tmp - cache_c]; - } else { - name = [cache copy]; - prefix = nil; - } - - if (![[previous lastObject] isEqual: cache]) - @throw [OFMalformedXMLException - newWithClass: isa]; - [previous removeNObjects: 1]; - - [cache setToCString: ""]; - - pool = [[OFAutoreleasePool alloc] init]; - - [delegate xmlParser: self - didEndTagWithName: name - prefix: prefix - namespace: ns]; - - [pool release]; - - [name release]; - [prefix release]; - [ns release]; - name = prefix = ns = nil; - - last = i + 1; - state = (buf[i] == ' ' - ? OF_XMLPARSER_EXPECT_SPACE_OR_CLOSE - : OF_XMLPARSER_OUTSIDE_TAG); - } - break; - - /* Inside a tag, name found */ - case OF_XMLPARSER_IN_TAG: - if (buf[i] == '>' || buf[i] == '/') { - pool = [[OFAutoreleasePool alloc] init]; - - [delegate xmlParser: self - didStartTagWithName: name - prefix: prefix - namespace: ns - attributes: attrs]; - - if (buf[i] == '/') - [delegate xmlParser: self - didEndTagWithName: name - prefix: prefix - namespace: ns]; - else if (prefix != nil) { - OFString *str = [OFString - stringWithFormat: @"%s:%s", - [prefix cString], - [name cString]]; - [previous addObject: str]; - } else - [previous addObject: name]; - - [pool release]; - - [name release]; - [prefix release]; - [ns release]; - [attrs release]; - name = prefix = ns = nil; - attrs = nil; - - last = i + 1; - state = (buf[i] == '/' - ? OF_XMLPARSER_EXPECT_CLOSE - : OF_XMLPARSER_OUTSIDE_TAG); - } else if (buf[i] != ' ') { - last = i; - state = OF_XMLPARSER_IN_ATTR_NAME; - i--; - } - break; - - /* Looking for attribute name */ - case OF_XMLPARSER_IN_ATTR_NAME: - if (buf[i] == '=') { - const char *cache_c, *tmp; - size_t cache_len; - - len = i - last; - if (len > 0) - [cache appendCString: buf + last - withLength: len]; - - cache_c = [cache cString]; - cache_len = [cache cStringLength]; - - if ((tmp = memchr(cache_c, ':', - cache_len)) != NULL ) { - attrName = [[OFString alloc] - initWithCString: tmp + 1 - length: cache_len - (tmp - - cache_c) - 1]; - attrPrefix = [[OFString alloc] - initWithCString: cache_c - length: tmp - cache_c]; - } else { - attrName = [cache copy]; - attrPrefix = nil; - } - - [cache setToCString: ""]; - - last = i + 1; - state = OF_XMLPARSER_EXPECT_DELIM; - } - break; - - /* Expecting delimiter */ - case OF_XMLPARSER_EXPECT_DELIM: - if (buf[i] != '\'' && buf[i] != '"') - @throw [OFMalformedXMLException - newWithClass: isa]; - - delim = buf[i]; - last = i + 1; - state = OF_XMLPARSER_IN_ATTR_VALUE; - break; - - /* Looking for attribute value */ - case OF_XMLPARSER_IN_ATTR_VALUE: - if (buf[i] == delim) { - OFString *attr_val; - - len = i - last; - if (len > 0) - [cache appendCString: buf + last - withLength: len]; - - if (attrs == nil) - attrs = [[OFMutableArray alloc] init]; - - pool = [[OFAutoreleasePool alloc] init]; - attr_val = [cache - stringByXMLUnescapingWithHandler: self]; - [attrs addObject: [OFXMLAttribute - attributeWithName: attrName - prefix: attrPrefix - namespace: nil - stringValue: attr_val]]; - [pool release]; - - [cache setToCString: ""]; - [attrName release]; - [attrPrefix release]; - attrName = attrPrefix = nil; - - last = i + 1; - state = OF_XMLPARSER_IN_TAG; - } - break; - - /* Expecting closing '>' */ - case OF_XMLPARSER_EXPECT_CLOSE: - if (buf[i] == '>') { - last = i + 1; - state = OF_XMLPARSER_OUTSIDE_TAG; - } else - @throw [OFMalformedXMLException - newWithClass: isa]; - break; - - /* Expecting closing '>' or space */ - case OF_XMLPARSER_EXPECT_SPACE_OR_CLOSE: - if (buf[i] == '>') { - last = i + 1; - state = OF_XMLPARSER_OUTSIDE_TAG; - } else if (buf[i] != ' ') - @throw [OFMalformedXMLException - newWithClass: isa]; - break; - - /* Comment */ - case OF_XMLPARSER_IN_COMMENT_1: - case OF_XMLPARSER_IN_COMMENT_2: - if (buf[i] != '-') - @throw [OFMalformedXMLException - newWithClass: isa]; - last = i + 1; - state++; - break; - case OF_XMLPARSER_IN_COMMENT_3: - if (buf[i] == '-') - state = OF_XMLPARSER_IN_COMMENT_4; - break; - case OF_XMLPARSER_IN_COMMENT_4: - if (buf[i] == '-') { - size_t cache_len; - - [cache appendCString: buf + last - withLength: i - last]; - cache_len = [cache length]; - - pool = [[OFAutoreleasePool alloc] init]; - [cache removeCharactersFromIndex: cache_len - 1 - toIndex: cache_len]; - [cache removeLeadingAndTrailingWhitespaces]; - [delegate xmlParser: self - foundComment: cache]; - [pool release]; - - [cache setToCString: ""]; - - last = i + 1; - state = OF_XMLPARSER_EXPECT_CLOSE; - } else - state = OF_XMLPARSER_IN_COMMENT_3; - - break; - } - } - - len = size - last; - /* In OF_XMLPARSER_IN_TAG, there can be only spaces */ - if (len > 0 && state != OF_XMLPARSER_IN_TAG) - [cache appendCString: buf + last - withLength: len]; -} - -- (OFString*)foundUnknownEntityNamed: (OFString*)entity -{ - return [delegate xmlParser: self - foundUnknownEntityNamed: entity]; -} -@end - @implementation OFString (OFXMLUnescaping) - (OFString*)stringByXMLUnescaping { return [self stringByXMLUnescapingWithHandler: nil]; } @@ -591,39 +164,6 @@ [ret appendCStringWithoutUTF8Checking: string + last length: i - last]; return ret; } -@end - -@implementation OFObject (OFXMLParserDelegate) -- (void)xmlParser: (OFXMLParser*)parser - didStartTagWithName: (OFString*)name - prefix: (OFString*)prefix - namespace: (OFString*)ns - attributes: (OFArray*)attrs -{ -} - -- (void)xmlParser: (OFXMLParser*)parser - didEndTagWithName: (OFString*)name - prefix: (OFString*)prefix - namespace: (OFString*)ns -{ -} - -- (void)xmlParser: (OFXMLParser*)parser - foundString: (OFString*)string -{ -} - -- (void)xmlParser: (OFXMLParser*)parser - foundComment: (OFString*)comment -{ -} - -- (OFString*)xmlParser: (OFXMLParser*)parser - foundUnknownEntityNamed: (OFString*)entity -{ - return nil; -} @end Index: tests/Makefile ================================================================== --- tests/Makefile +++ tests/Makefile @@ -14,12 +14,10 @@ ${OFPLUGINTESTS_M} \ OFStreamTests.m \ OFStringTests.m \ OFTCPSocketTests.m \ ${OFTHREADTESTS_M} \ - OFXMLElementTests.m \ - OFXMLParserTests.m \ ${PROPERTIESTESTS_M} \ TestsAppDelegate.m IPHONE_USER = mobile IPHONE_TMP = /tmp/objfw-test DELETED tests/OFXMLElementTests.m Index: tests/OFXMLElementTests.m ================================================================== --- tests/OFXMLElementTests.m +++ tests/OFXMLElementTests.m @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2008 - 2010 - * Jonathan Schleifer - * - * All rights reserved. - * - * This file is part of ObjFW. It may be distributed under the terms of the - * Q Public License 1.0, which can be found in the file LICENSE included in - * the packaging of this file. - */ - -#include "config.h" - -#import "OFXMLElement.h" -#import "OFString.h" -#import "OFArray.h" -#import "OFAutoreleasePool.h" -#import "OFString.h" -#import "OFExceptions.h" - -#import "TestsAppDelegate.h" - -static OFString *module = @"OFXMLElement"; - -@implementation TestsAppDelegate (OFXMLElementTests) -- (void)XMLElementTests -{ - OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; - OFXMLElement *elem[2]; - - TEST(@"+[elementWithName:]", - (elem[0] = [OFXMLElement elementWithName: @"foo"]) && - [[elem[0] string] isEqual: @""]) - - TEST(@"+[elementWithName:stringValue:]", - (elem[1] = [OFXMLElement elementWithName: @"foo" - stringValue: @"b&ar"]) && - [[elem[1] string] isEqual: @"b&ar"]) - - TEST(@"-[addAttributeWithName:stringValue:]", - R([elem[0] addAttributeWithName: @"foo" - stringValue: @"b&ar"]) && - [[elem[0] string] isEqual: @""] && - R([elem[1] addAttributeWithName: @"foo" - stringValue: @"b&ar"]) && - [[elem[1] string] isEqual: @"b&ar"]) - - TEST(@"-[addChild:]", - R([elem[0] addChild: [OFXMLElement elementWithName: @"bar"]]) && - [[elem[0] string] isEqual: @""]) - - [pool drain]; -} -@end DELETED tests/OFXMLParserTests.m Index: tests/OFXMLParserTests.m ================================================================== --- tests/OFXMLParserTests.m +++ tests/OFXMLParserTests.m @@ -1,215 +0,0 @@ -/* - * Copyright (c) 2008 - 2010 - * Jonathan Schleifer - * - * All rights reserved. - * - * This file is part of ObjFW. It may be distributed under the terms of the - * Q Public License 1.0, which can be found in the file LICENSE included in - * the packaging of this file. - */ - -#include "config.h" - -#include - -#import "OFXMLParser.h" -#import "OFString.h" -#import "OFArray.h" -#import "OFAutoreleasePool.h" -#import "OFString.h" -#import "OFExceptions.h" - -#import "TestsAppDelegate.h" - -static OFString *module = @"OFXMLParser"; -static int i = 0; - -enum event_type { - TAG_START, - TAG_END, - STRING, - COMMENT -}; - -@implementation TestsAppDelegate (OFXMLParser) -- (void)xmlParserCallbackWithEventType: (enum event_type)et - name: (OFString*)name - prefix: (OFString*)prefix - namespace: (OFString*)ns - attributes: (OFArray*)attrs - string: (OFString*)string - comment: (OFString*)comment -{ - OFString *msg; - id *carray; - size_t count; - - i++; - msg = [OFString stringWithFormat: @"Parsing part #%d", i]; - - switch (i) { - case 1: - case 5: - TEST(msg, et == STRING && [string isEqual: @"bar"]) - break; - case 2: - /* FIXME: Namespace */ - carray = [attrs cArray]; - count = [attrs count]; - - TEST(msg, et == TAG_START && [name isEqual: @"bar"] && - [prefix isEqual: @"foo"] && ns == nil && - attrs != nil && count == 2 && - /* Attribute 1 */ - [[carray[0] name] isEqual: @"bar"] && - [carray[0] prefix] == nil && - [[carray[0] stringValue] isEqual: @"b&az"] && - [carray[0] namespace] == nil && - /* Attribute 2 */ - [[carray[1] name] isEqual: @"qux"] && - [[carray[1] prefix] isEqual: @"qux"] && - [[carray[1] stringValue] isEqual: @" quux "] && - [carray[1] namespace] == nil) - break; - case 3: - TEST(msg, et == STRING && [string isEqual: @"foo\r\n" - "foo<barbar quxbar\r\n" - ""; - size_t j, len; - - TEST(@"+[xmlParser]", (parser = [OFXMLParser xmlParser])) - - TEST(@"-[setDelegate:]", R([parser setDelegate: self])) - - /* Simulate a stream where we only get chunks */ - len = strlen(str); - - for (j = 0; j < len; j+= 2) { - if (j + 2 > len) - [parser parseBuffer: str + j - withSize: 1]; - else - [parser parseBuffer: str + j - withSize: 2]; - } - - TEST(@"Checking if everything was parsed", i == 11) - - [pool drain]; -} -@end Index: tests/TestsAppDelegate.h ================================================================== --- tests/TestsAppDelegate.h +++ tests/TestsAppDelegate.h @@ -120,13 +120,5 @@ @end @interface TestsAppDelegate (OFThreadTests) - (void)threadTests; @end - -@interface TestsAppDelegate (OFXMLElementTests) -- (void)XMLElementTests; -@end - -@interface TestsAppDelegate (OFXMLParserTests) -- (void)XMLParserTests; -@end Index: tests/TestsAppDelegate.m ================================================================== --- tests/TestsAppDelegate.m +++ tests/TestsAppDelegate.m @@ -88,12 +88,10 @@ [self streamTests]; [self TCPSocketTests]; #ifdef OF_THREADS [self threadTests]; #endif - [self XMLElementTests]; - [self XMLParserTests]; #ifdef OF_PLUGINS [self pluginTests]; #endif #ifdef OF_HAVE_PROPERTIES [self propertiesTests]; Index: utils/objfw-config.in ================================================================== --- utils/objfw-config.in +++ utils/objfw-config.in @@ -10,11 +10,11 @@ OBJCFLAGS="$OBJCFLAGS -fconstant-string-class=OFConstString" OBJCFLAGS="$OBJCFLAGS @NO_CONST_CFSTRINGS@ @NO_WARN_UNUSED@ @ATOMIC_OBJCFLAGS@" LDFLAGS="" LDFLAGS_RPATH="@LDFLAGS_RPATH@" LIBS="-L${libdir} -lobjfw @LIBS@" -VERSION="0.3-dev" +VERSION="0.3" show_help() { cat <<__EOF__ objfw-config: Available arguments are: