prep for release

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@36208 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
rfm 2013-02-28 16:50:37 +00:00
parent 60c04b53e6
commit 977ffb20d7
21 changed files with 178 additions and 93 deletions

View file

@ -1,3 +1,27 @@
2013-02-28 Richard Frith-Macdonald <rfm@gnu.org>
* Version:
* Source/NSRegularExpression.m:
* Source/NSURLResponse.m:
* Source/NSString.m:
* Source/DocMakefile:
* Source/GSNetServices.h:
* Documentation/news.texi:
* Documentation/ReleaseNotes.gsdoc:
* Headers/GNUstepBase/GSVersionMacros.h:
* Headers/Foundation/NSNetServices.h:
* Headers/Foundation/NSBundle.h:
* Headers/Foundation/NSXMLDocument.h:
* Headers/Foundation/NSXMLNode.h:
* Headers/Foundation/NSObjCRuntime.h:
* Headers/Foundation/NSXMLDTD.h:
* Headers/Foundation/NSXMLDTDNode.h:
* Headers/Foundation/NSXMLElement.h:
* Headers/Foundation/NSXMLParser.h:
* Tools/DocMakefile:
* Tools/AGSParser.m:
Bump version for new release, add release notes, clean up documentation.
2013-02-28 Richard Frith-Macdonald <rfm@gnu.org>
* Tests/base/NSString/test00.m: Add a few tests for searching subrange

View file

@ -29,6 +29,34 @@ notice and this notice are preserved.
migrate to using a newer version of the library.
</p>
<section>
<heading>Version 1.24.3</heading>
<p>A new stable release.<br />
Many changes in this version are behavior updates/improvements
but there are also new APIs, none of which should effect binary
compatibility with earlier 1.24.x releases.<br />
An important change at the configure stage is that configure policy
now requires you to explicitly disable features in order to build if
external packages that those features depend on are missing. This
should ensure that builds of base contain consistent feature sets
unless you really want to change that.
</p>
<p>The main changes are:<br />
Implementation of the NSXML DOM classes (previously stubs). This is
by far the biggest chunk of new code in this release.
The DOM support has a dependency on the libxml2 library.<br />
Implementation of cookies in the NSURLConnection related classes.<br />
Implementation of common HTTPS support in the NSURLConnection
related classes and the older NSURLHandle. The HTTPS support has
a dependency on the gnutls library.<br />
Implementation of new sorting code for faster sorting and to allow
sorting algorithms to be changed.<br />
Many changes to add support for ObjectiveC-2.0 additions.<br />
Implementation of Encoding/Decoding of NSAffineTransform.<br />
Many, many minor bugfixes and tweaks.
</p>
</section>
<section>
<heading>Version 1.24.0</heading>
<p>A new stable release.<br />

View file

@ -11,6 +11,17 @@ The currently released version of the library is
See the @url{ReleaseNotes.html} document for more information.
@end ifclear
@section Noteworthy changes in version @samp{1.24.3}
@itemize @bullet
@item Implementation of the NSXML DOM classes
@item Implementation of consistent TLS/SSL support
@item Implementation of new/selectable sorting algorithms
@item More explicit dependencies on external libraries.
@end itemize
@ifclear ANNOUNCE-ONLY
@section Noteworthy changes in version @samp{1.24.0}
@itemize @bullet
@ -22,7 +33,6 @@ improvements
@item IPV6 support for NSHost and networking operations
@item Support for UTF-8 string literals in source (compiler permitting)
@end itemize
@ifclear ANNOUNCE-ONLY
@section Noteworthy changes in version @samp{1.23.0}

View file

@ -326,24 +326,17 @@ GS_EXPORT NSString* const NSLoadedClasses;
#endif
/**
<p>Returns the value for the key found in the strings file tableName, or
Localizable.strings if tableName is nil.</p>
<p>If the user default <code>NSShowNonLocalizedStrings</code> is set, the
value of the key will be returned as an uppercase string rather than any
localized equivalent found. This can be useful during development to check
where a given string in the UI is "coming from".</p>
* <p>Returns the value for the key found in the strings file tableName, or
* Localizable.strings if tableName is nil.
* </p>
* <p>If the user default <code>NSShowNonLocalizedStrings</code> is set, the
* value of the key will be returned as an uppercase string rather than any
* localized equivalent found. This can be useful during development to check
* where a given string in the UI is "coming from".</p>
*/
#ifdef __clang__
- (NSString*) localizedStringForKey: (NSString*)key
value: (NSString*)value
table: (NSString*)tableName
__attribute__((format_arg(1)));
#else
- (NSString*) localizedStringForKey: (NSString*)key
value: (NSString*)value
table: (NSString*)tableName;
#endif
/** Returns the absolute path to the resources directory of the bundle. */
- (NSString*) resourcePath;

View file

@ -111,7 +111,7 @@ GS_EXPORT NSString * const NSNetServicesErrorDomain;
@protocol NSNetServiceDelegate
#ifdef __clang__
#ifdef __clang__ /* FIXME ... this is not clang specific */
@optional
#else
@end
@ -224,7 +224,7 @@ GS_EXPORT NSString * const NSNetServicesErrorDomain;
*/
@protocol NSNetServiceBrowserDelegate
#ifdef __clang__
#ifdef __clang__ /* FIXME ... this is not clang specific */
@optional
#else
@end

View file

@ -171,11 +171,6 @@ enum {NSNotFound = NSIntegerMax};
DEFINE_BLOCK_TYPE(NSComparator, NSComparisonResult, id, id);
#ifdef __clang__
#define NS_REQUIRES_NIL_TERMINATION __attribute__((sentinel))
#endif //__clang__
#if defined(__cplusplus)
}
#endif

View file

@ -43,7 +43,7 @@ extern "C" {
{
#if GS_NONFRAGILE
# if defined(GS_NSXMLDTD_IVARS)
@public GS_NSXMLDTD_IVARS
@public GS_NSXMLDTD_IVARS;
# endif
#endif
/* The pointer to private additional data used to avoid breaking ABI
@ -118,7 +118,7 @@ extern "C" {
/**
* Replaces the child at index with another child.
*/
- (void) replaceChildAtIndex: (NSUInteger)index withNode: (NSXMLNode*)node;
- (void) replaceChildAtIndex: (NSUInteger)index withNode: (NSXMLNode*)theNode;
/**
* Replaces all existing children with the child nodes in the array.

View file

@ -77,7 +77,7 @@ typedef NSUInteger NSXMLDTDNodeKind;
{
#if GS_NONFRAGILE
# if defined(GS_NSXMLDTDNode_IVARS)
@public GS_NSXMLDTDNode_IVARS
@public GS_NSXMLDTDNode_IVARS;
# endif
#endif
/* The pointer to private additional data used to avoid breaking ABI
@ -115,7 +115,7 @@ typedef NSUInteger NSXMLDTDNodeKind;
/**
* Sets what kind of DTD node this is.
*/
- (void) setDTDKind: (NSXMLDTDNodeKind)kind;
- (void) setDTDKind: (NSXMLDTDNodeKind)nodeKind;
/**
* Sets the notation name if the receiver is an entity.

View file

@ -76,7 +76,7 @@ typedef NSUInteger NSXMLDocumentContentKind;
{
#if GS_NONFRAGILE
# if defined(GS_NSXMLDocument_IVARS)
@public GS_NSXMLDocument_IVARS
@public GS_NSXMLDocument_IVARS;
# endif
#endif
/* The pointer to private additional data used to avoid breaking ABI
@ -155,7 +155,7 @@ typedef NSUInteger NSXMLDocumentContentKind;
/**
* Sets the kind of document.
*/
- (void) setDocumentContentKind: (NSXMLDocumentContentKind)kind;
- (void) setDocumentContentKind: (NSXMLDocumentContentKind)theContentKind;
/**
* Sets the DTD of the receiver. If this is set then the DTD will be
@ -166,7 +166,7 @@ typedef NSUInteger NSXMLDocumentContentKind;
/**
* Sets the document MIME type (usually text/xml).
*/
- (void) setMIMEType: (NSString*)MIMEType;
- (void) setMIMEType: (NSString*)theMIMEType;
/**
* Sets the root object of the receiver, removing any children which
@ -221,7 +221,7 @@ typedef NSUInteger NSXMLDocumentContentKind;
/**
* Replacs the child at the specified index.
*/
- (void) replaceChildAtIndex: (NSUInteger)index withNode: (NSXMLNode*)node;
- (void) replaceChildAtIndex: (NSUInteger)index withNode: (NSXMLNode*)theNode;
/**
* Outputs XML data using -XMLDataWithOptions: with NSXMLNodeOptionsNone.
@ -231,7 +231,7 @@ typedef NSUInteger NSXMLDocumentContentKind;
/**
* Outputs the reciever encoded using the specified options.
*/
- (NSData*) XMLDataWithOptions: (NSUInteger)options;
- (NSData*) XMLDataWithOptions: (NSUInteger)theOptions;
/**
* Returns a new document created by applying xslt (with a set of
@ -254,7 +254,7 @@ typedef NSUInteger NSXMLDocumentContentKind;
* by applying it (with a set of key/value pairs) to the receiver.
*/
- (id) objectByApplyingXSLTAtURL: (NSURL*)xsltURL
arguments: (NSDictionary*)argument
arguments: (NSDictionary*)arguments
error: (NSError**)error;
/* Validate the receiver according to its DTD.

View file

@ -41,7 +41,7 @@ extern "C" {
{
#if GS_NONFRAGILE
# if defined(GS_NSXMLElement_IVARS)
@public GS_NSXMLElement_IVARS
@public GS_NSXMLElement_IVARS;
# endif
#endif
/* The pointer to private additional data used to avoid breaking ABI
@ -191,7 +191,7 @@ extern "C" {
/**
* Replaces the child at the specified index.
*/
- (void) replaceChildAtIndex: (NSUInteger)index withNode: (NSXMLNode*)node;
- (void) replaceChildAtIndex: (NSUInteger)index withNode: (NSXMLNode*)theNode;
/**
* Merges adjacent text nodes. If a node's value is the empty string,

View file

@ -90,7 +90,7 @@ typedef NSUInteger NSXMLNodeKind;
{
#if GS_NONFRAGILE
# if defined(GS_NSXMLNode_IVARS)
@public GS_NSXMLNode_IVARS
@public GS_NSXMLNode_IVARS;
# endif
#else
/* Pointer to private additional data used to avoid breaking ABI
@ -234,13 +234,13 @@ typedef NSUInteger NSXMLNodeKind;
* Calls -initWithKind:options: using NSXMLNodeOptionsNone and
* returns the result.
*/
- (id) initWithKind: (NSXMLNodeKind)kind;
- (id) initWithKind: (NSXMLNodeKind)theKind;
/** <init />
* Initialises the receiver as the specified kind of node and with the
* specified options.
*/
- (id) initWithKind: (NSXMLNodeKind)kind options: (NSUInteger)options;
- (id) initWithKind: (NSXMLNodeKind)theKind options: (NSUInteger)theOptions;
/** Return the level of the receiver within the tree of nodes.<br />
* A document or a node which is not inside another is at level 0.
@ -274,7 +274,7 @@ typedef NSUInteger NSXMLNodeKind;
* in order to avoid problems where the xpath syntax cannot cope with
* multiple text nodes.
*/
- (NSArray*) nodesForXPath: (NSString*)xpath error: (NSError**)error;
- (NSArray*) nodesForXPath: (NSString*)anxpath error: (NSError**)error;
/** Returns the data resulting from calling the query on the receiver.<br />
* The same as objectsForXQuery:constants:error: without the constants.
@ -381,7 +381,7 @@ typedef NSUInteger NSXMLNodeKind;
* Returns the text of the receiver as XML (ie in the form it would have
* in an XML document), with the specified options controlling it.
*/
- (NSString*) XMLStringWithOptions: (NSUInteger)options;
- (NSString*) XMLStringWithOptions: (NSUInteger)theOptions;
@end

View file

@ -190,7 +190,7 @@ GS_EXPORT NSString* const NSXMLParserErrorDomain;
* This is now a formal protocol.
*/
@protocol NSXMLParserDelegate <NSObject>
#ifdef __clang__
#ifdef __clang__ /* FIXME ... this is not clang specific */
@optional
#else
@end

View file

@ -193,6 +193,32 @@
#import <GNUstepBase/GSConfig.h>
#endif
/* Attribute definitions for attributes which may or may not be supported
* depending on the compiler being used.
* The definition should be of the form GS_XXX_CONTEXT where XXX is the
* name of the attribute and CONTEXT is one of FUNC, METH, or IVAR
* depending on where the attribute can be applied.
*/
#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
# define GS_DEPRECATED_FUNC __attribute__ ((deprecated))
#else
# define GS_DEPRECATED_FUNC
#endif
#ifdef __clang__ /* FIXME .... not clang specific */
# define GS_UNUSED_IVAR __attribute__((unused))
#else
# define GS_UNUSED_IVAR
#endif
#define GS_UNUSED_ARG __attribute__((unused))
#define GS_UNUSED_FUNC __attribute__((unused))
#ifndef __has_feature
#define __has_feature(x) 0
#endif
@ -269,8 +295,8 @@
#endif
#if defined(__clang__) && defined(__OBJC__)
static inline void gs_consumed(id NS_CONSUMED o) __attribute__ ((unused));
static inline void gs_consumed(id NS_CONSUMED __attribute__ ((unused))o) { return; }
static inline void gs_consumed(id NS_CONSUMED o) GS_UNUSED_FUNC;
static inline void gs_consumed(id NS_CONSUMED GS_UNUSED_ARG o) { return; }
#define GS_CONSUMED(O) gs_consumed(O);
#else
#define GS_CONSUMED(O)
@ -322,25 +348,6 @@ static inline void gs_consumed(id NS_CONSUMED __attribute__ ((unused))o) { retur
#endif
/* Attribute definitions for attributes which may or may not be supported
* depending on the compiler being used.
* The definition should be of the form GS_XXX_CONTEXT where XXX is the
* name of the attribute and CONTEXT is one of FUNC, METH, or IVAR
* depending on where the attribute can be applied.
*/
#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
# define GS_DEPRECATED_FUNC __attribute__ ((deprecated))
#else
# define GS_DEPRECATED_FUNC
#endif
#ifdef __clang__
# define GS_UNUSED_IVAR __attribute__((unused))
#else
# define GS_UNUSED_IVAR
#endif
/*
* Attribute definition for root classes, annotates the interface declaration of
@ -354,4 +361,6 @@ static inline void gs_consumed(id NS_CONSUMED __attribute__ ((unused))o) { retur
# endif
#endif
#define NS_REQUIRES_NIL_TERMINATION __attribute__((sentinel))
#endif /* __GNUSTEP_GSVERSIONMACROS_H_INCLUDED_ */

View file

@ -190,15 +190,19 @@ Base_AGSDOC_FLAGS = \
FOUNDATION_STATIC_INLINE="";\
GS_ATTRIB_DEPRECATED="";\
GS_DECLARE="";\
GS_DEPRECATED_FUNC="";\
GS_EXPORT=extern;\
GS_GC_STRONG="";\
GS_GEOM_ATTR="";\
GS_GEOM_SCOPE=extern;\
GS_NORETURN_METHOD="";\
GS_PRIVATE_INTERNAL="//";\
GS_RANGE_ATTR="";\
GS_RANGE_SCOPE=extern;\
GS_ROOT_CLASS="";\
GS_STATIC_INLINE="";\
GS_GC_STRONG="";\
GS_UNUSED_ARG="";\
GS_UNUSED_FUNC="";\
GS_UNUSED_IVAR="";\
GS_ZONE_ATTR="";\
GS_ZONE_SCOPE=extern;\
@ -209,6 +213,8 @@ Base_AGSDOC_FLAGS = \
NS_RETURNS_NOT_RETAINED="";\
NS_RETURNS_RETAINED="";\
WINAPI="";\
__strong="";\
__weak="";\
}' -Up Base
BaseAdditions_AGSDOC_FLAGS = \

View file

@ -134,7 +134,7 @@ NSString* GSNetServiceDotTerminatedNSStringFromString(const char* string);
/**
* NSNetService using the mDNSResponder API.
*/
#ifdef __clang__
#ifdef __clang__ /* FIXME ... this is not clang specific! */
@interface GSMDNSNetService : NSNetService <NSNetServiceDelegate>
#else
@interface GSMDNSNetService : NSNetService
@ -144,7 +144,7 @@ NSString* GSNetServiceDotTerminatedNSStringFromString(const char* string);
/**
* NSNetServiceBrowser using the mDNSResponder API.
*/
#ifdef __clang__
#ifdef __clang__ /* FIXME ... this is not clang specific! */
@interface GSMDNSNetServiceBrowser : NSNetServiceBrowser <NSNetServiceBrowserDelegate>
#else
@interface GSMDNSNetServiceBrowser : NSNetServiceBrowser

View file

@ -526,7 +526,7 @@ prepareResult(NSRegularExpression *regex,
}
#else
# ifdef __clang__
# ifdef __clang__ /* FIXME ... this is blocks specific, not clang specific */
# warning Your compiler does not support blocks. NSRegularExpression will deviate from the documented behaviour when subclassing and any code that subclasses NSRegularExpression may break in unexpected ways. If you must subclass NSRegularExpression, you may want to use a compiler with blocks support.
# warning Your compiler would support blocks if you added -fblocks to your OBJCFLAGS
# endif

View file

@ -2151,10 +2151,10 @@ static UCollator *GSICUCollatorOpen(NSStringCompareOptions mask, NSLocale *local
- (NSRange) rangeOfString: (NSString *)aString
options: (NSStringCompareOptions)mask
range: (NSRange)aRange
range: (NSRange)searchRange
locale: (NSLocale *)locale
{
GS_RANGE_CHECK(aRange, [self length]);
GS_RANGE_CHECK(searchRange, [self length]);
if (aString == nil)
[NSException raise: NSInvalidArgumentException format: @"range of nil"];
@ -2176,7 +2176,7 @@ static UCollator *GSICUCollatorOpen(NSStringCompareOptions mask, NSLocale *local
? NSMatchingAnchored : 0;
r = [regex rangeOfFirstMatchInString: self
options: options
range: aRange];
range: searchRange];
}
[regex release];
return r;
@ -2190,7 +2190,7 @@ static UCollator *GSICUCollatorOpen(NSStringCompareOptions mask, NSLocale *local
{
NSRange result = NSMakeRange(NSNotFound, 0);
UErrorCode status = U_ZERO_ERROR;
NSUInteger countSelf = aRange.length;
NSUInteger countSelf = searchRange.length;
NSUInteger countOther = [aString length];
unichar *charsSelf;
unichar *charsOther;
@ -2203,7 +2203,7 @@ static UCollator *GSICUCollatorOpen(NSStringCompareOptions mask, NSLocale *local
// Copy to buffer
[self getCharacters: charsSelf range: aRange];
[self getCharacters: charsSelf range: searchRange];
[aString getCharacters: charsOther range: NSMakeRange(0, countOther)];
search = usearch_openFromCollator(charsOther, countOther,
@ -2229,18 +2229,26 @@ static UCollator *GSICUCollatorOpen(NSStringCompareOptions mask, NSLocale *local
{
if ((mask & NSBackwardsSearch) == NSBackwardsSearch)
{
if (matchLocation + matchLength == NSMaxRange(aRange))
result = NSMakeRange(aRange.location + matchLocation, matchLength);
if (matchLocation + matchLength
== NSMaxRange(searchRange))
{
result = NSMakeRange(searchRange.location
+ matchLocation, matchLength);
}
}
else
{
if (matchLocation == 0)
result = NSMakeRange(aRange.location + matchLocation, matchLength);
{
result = NSMakeRange(searchRange.location
+ matchLocation, matchLength);
}
}
}
else
{
result = NSMakeRange(aRange.location + matchLocation, matchLength);
result = NSMakeRange(searchRange.location
+ matchLocation, matchLength);
}
}
}
@ -2253,7 +2261,7 @@ static UCollator *GSICUCollatorOpen(NSStringCompareOptions mask, NSLocale *local
}
#endif
return strRangeNsNs(self, aString, mask, aRange);
return strRangeNsNs(self, aString, mask, searchRange);
}
- (NSUInteger) indexOfString: (NSString *)substring
@ -2814,12 +2822,12 @@ static UCollator *GSICUCollatorOpen(NSStringCompareOptions mask, NSLocale *local
- (void) getParagraphStart: (NSUInteger *)startIndex
end: (NSUInteger *)parEndIndex
contentsEnd: (NSUInteger *)contentsEndIndex
forRange: (NSRange)aRange
forRange: (NSRange)range
{
[self _getStart: startIndex
end: parEndIndex
contentsEnd: contentsEndIndex
forRange: aRange
forRange: range
lineSep: NO];
}
@ -5056,23 +5064,26 @@ static NSFileManager *fm = nil;
* ICU collator for that locale. If locale is an instance of a class
* other than NSLocale, perform a comparison using +[NSLocale currentLocale].
* If locale is nil, or ICU is not available, use a POSIX-style
* collation (for example, latin capital letters A-Z are ordered before all of the
* lowercase letter, a-z.)
*
* <p>mask may be <code>NSLiteralSearch</code>, which requests a literal byte-by-byte
* collation (for example, latin capital letters A-Z are ordered before
* all of the lowercase letter, a-z.)
* </p>
* <p>mask may be <code>NSLiteralSearch</code>, which requests a literal
* byte-by-byte
* comparison, which is fastest but may return inaccurate results in cases
* where two different composed character sequences may be used to express
* the same character; <code>NSCaseInsensitiveSearch</code>, which ignores case
* differences; <code>NSDiacriticInsensitiveSearch</code> which ignores accent differences;
* <code>NSNumericSearch</code>, which sorts groups of digits as numbers, so "abc2"
* sorts before "abc100".</p>
*
* <p>compareRange refers to this instance, and should be set to 0..length to compare
* the whole string.</p>
*
* differences; <code>NSDiacriticInsensitiveSearch</code>
* which ignores accent differences;
* <code>NSNumericSearch</code>, which sorts groups of digits as numbers,
* so "abc2" sorts before "abc100".
* </p>
* <p>compareRange refers to this instance, and should be set to 0..length
* to compare the whole string.
* </p>
* <p>Returns <code>NSOrderedAscending</code>, <code>NSOrderedDescending</code>,
* or <code>NSOrderedSame</code>, depending on whether this instance occurs
* before or after string in lexical order, or is equal to it.</p>
* before or after string in lexical order, or is equal to it.
* </p>
*/
- (NSComparisonResult) compare: (NSString *)string
options: (NSUInteger)mask

View file

@ -250,7 +250,7 @@ typedef struct {
- (id) initWithURL: (NSURL*)URL
statusCode: (NSInteger)statusCode
HTTPVersion: (NSString*)HTTPVersion
headerFields: (NSDictionary*)headerFields;
headerFields: (NSDictionary*)headerFields
{
self = [self initWithURL: URL
MIMEType: nil

View file

@ -1782,7 +1782,7 @@ recheck:
[self log: @"strange format function attributes"];
}
}
else if (ident != nil)
else if ([ident length] > 0)
{
[self log: @"ignoring '%@' in function declaration", ident];
}

View file

@ -70,22 +70,31 @@ BaseTools_AGSDOC_FLAGS = \
FOUNDATION_STATIC_INLINE="";\
GS_ATTRIB_DEPRECATED="";\
GS_DECLARE="";\
GS_DEPRECATED_FUNC="";\
GS_EXPORT=extern;\
GS_GC_STRONG="";\
GS_GEOM_ATTR="";\
GS_GEOM_SCOPE=extern;\
GS_NORETURN_METHOD="";\
GS_PRIVATE_INTERNAL="//";\
GS_RANGE_ATTR="";\
GS_RANGE_SCOPE=extern;\
GS_ROOT_CLASS="";\
GS_STATIC_INLINE="";\
GS_UNUSED_ARG="";\
GS_UNUSED_FUNC="";\
GS_UNUSED_IVAR="";\
GS_ZONE_ATTR="";\
GS_ZONE_SCOPE=extern;\
INLINE=inline;\
NS_AUTOMATED_REFCOUNT_UNAVAILABLE="";\
NS_CONSUMED="";\
NS_CONSUMES_SELF="";\
NS_RETURNS_NOT_RETAINED="";\
NS_RETURNS_RETAINED="";\
WINAPI="";\
__strong="";\
__weak="";\
}' -Up BaseTools
# Use local version of autogsdoc in case it is not installed

View file

@ -7,9 +7,9 @@ GCC_VERSION=4.0.0
# The version number of this release.
MAJOR_VERSION=1
MINOR_VERSION=24
SUBMINOR_VERSION=2
SUBMINOR_VERSION=3
# numeric value should match above
VERSION_NUMBER=124.2
VERSION_NUMBER=124.3
GNUSTEP_BASE_VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION}
VERSION=${GNUSTEP_BASE_VERSION}