The GNUstep-base make check for NSTimeZone's +timeZoneWithName: is based on an invalid assumption. As a result, it fails on my FreeBSD 9.1 system (and could give the impression that the class has a bug in it).
The test is meant to check whether an NSTimeZone can be built from a timezone name. Turns out when it is given a timezone name that matches its platform's zones directory, it works. The invalid assumption is that the sample name picked is going to be found in each platform's zones directory. The test that is bundled with GNUstep's core/base uses the @"GB" name. But on my FreeBSD 9.1 system, the /usr/share/zoneinfo directory doesn't have a file with that name. So the class returns nil and the test reports a failure. Ironically, or perhaps not, there is a GB timezone file provided by the GNUstep installation. But it is not left in a directory that the NSTimeZone class looks in first. The class lookup seems a bit odd. It uses a hardcoded list of possible directories, and just uses the first one that is actually a directory. If the file doesn't exist in that directory, it doesn't bother to check other directories. There is the option of building the code with a TZDIR define, but I didn't find an install script or instructions for setting it as part of the configuration step. NSTimeZone does use the GNUstep supplied directory, for matching my defaults setup of 'defaults write NSGlobalDomain "Local Time Zone" America/New_York'. I noticed that before I had the defaults setup, NSLog would cause NSTimeZone to printout a warning that the local timezone wasn't set. /usr/GNUstep/Local/Library/Libraries/gnustep-base/Versions/1.24/Resources/NSTimeZones/zones/America/New_York Odd that the timeZoneWithName: doesn't use the same lookup mechanism. Here's some test code to show that the lookup works when passed a name that can be found. $ cat test00.m #import <Foundation/Foundation.h> int main(int argc, char * argv[]){ id current; for (NSString *name in [NSArray arrayWithObjects: @"GB", // This one won't be found. @"EST", // This one will be found. nil] ) { current = [NSTimeZone timeZoneWithName: name]; NSLog(@"For name:'%@' timezone: %@\n", name, current); } return 0; } $ ./test00 2013-06-14 09:50:45.738 test00[11019] For name:'GB' timezone: (null) 2013-06-14 09:50:45.740 test00[11019] For name:'EST' timezone: EST And GB is not found because it is not in this FreeBSD directory. $ ls /usr/share/zoneinfo Africa Australia Etc MST WET America CET Europe MST7MDT posixrules Antarctica CST6CDT Factory PST8PDT zone.tab Arctic EET HST Pacific Asia EST Indian SystemV Atlantic EST5EDT MET UTC GB would have been found if this directory had been searched. $ ls /usr/GNUstep/Local/Library/Libraries/gnustep-base/Versions/1.24/Resources/NSTimeZones/zones/ Africa Etc GMT+8 Greenwich Navajo America Europe GMT+9 HST PRC Antarctica GB GMT-0 Hongkong PST8PDT Arctic GB-Eire GMT-1 Iceland Pacific Asia GMT GMT-10 Indian Poland Atlantic GMT+0 GMT-11 Iran Portugal Australia GMT+1 GMT-12 Israel ROC Brazil GMT+10 GMT-13 Jamaica ROK CET GMT+11 GMT-14 Japan Singapore CST6CDT GMT+12 GMT-2 Kwajalein Turkey Canada GMT+13 GMT-3 Libya UCT Chile GMT+14 GMT-4 MET US Cuba GMT+2 GMT-5 MST UTC EET GMT+3 GMT-6 MST7MDT Universal EST GMT+4 GMT-7 Mexico W-SU EST5EDT GMT+5 GMT-8 Mideast WET Egypt GMT+6 GMT-9 NZ Zulu Eire GMT+7 GMT0 NZ-CHAT
_______________________________________________ Gnustep-dev mailing list Gnustep-dev@gnu.org https://lists.gnu.org/mailman/listinfo/gnustep-dev