@@ -24,6 +24,40 @@ - (id) objectForString: (NSString *)o
2424 return o != nil ? o : @" " ;
2525}
2626
27+ - (BOOL ) arrayHasValidContent : (NSArray *)array
28+ {
29+ if (array == nil || [array count ] == 0 )
30+ {
31+ return NO ;
32+ }
33+
34+ // Check if all elements are non-empty strings
35+ NSEnumerator *en = [array objectEnumerator ];
36+ id obj = nil ;
37+ while ((obj = [en nextObject ]) != nil )
38+ {
39+ if (![obj isKindOfClass: [NSString class ]] ||
40+ [(NSString *)obj length ] == 0 )
41+ {
42+ continue ; // Skip empty strings but don't reject the whole array
43+ }
44+ return YES ; // Found at least one valid string
45+ }
46+
47+ return NO ; // No valid strings found
48+ }
49+
50+ - (NSString *) safeStringFromArray : (NSArray *)array withMethod : (SEL )method
51+ {
52+ if (![self arrayHasValidContent: array])
53+ {
54+ return @" " ;
55+ }
56+
57+ NSString *result = [array performSelector: method];
58+ return result != nil ? result : @" " ;
59+ }
60+
2761- (BOOL ) generate
2862{
2963 BOOL result = YES ;
@@ -32,14 +66,14 @@ - (BOOL) generate
3266 NSString *appName = [name stringByDeletingPathExtension ];
3367 NSString *makefileName = @" GNUmakefile" ;
3468 NSString *makefileString = @" " ;
35- NSString *headerFilesString = [[context objectForKey: @" HEADERS" ] arrayToList ];
36- NSString *objCFilesString = [[context objectForKey: @" OBJC_FILES" ] arrayToList ];
37- NSString *cFilesString = [[context objectForKey: @" C_FILES" ] arrayToList ];
38- NSString *cppFilesString = [[context objectForKey: @" CPP_FILES" ] arrayToList ];
39- NSString *objCPPFilesString = [[context objectForKey: @" OBJCPP_FILES" ] arrayToList ];
40- NSString *resourceFilesString = [[context objectForKey: @" RESOURCES" ] arrayToList ];
41- NSString *additionalIncludes = [[context objectForKey: @" ADDITIONAL_INCLUDE_DIRS" ] arrayToIncludeList ];
42- NSString *additionalOCflags = [[context objectForKey: @" ADDITIONAL_OBJC_LIBS" ] arrayToLinkList ];
69+ NSString *headerFilesString = [self safeStringFromArray: [context objectForKey: @" HEADERS" ] withMethod: @selector ( arrayToList ) ];
70+ NSString *objCFilesString = [self safeStringFromArray: [context objectForKey: @" OBJC_FILES" ] withMethod: @selector ( arrayToList ) ];
71+ NSString *cFilesString = [self safeStringFromArray: [context objectForKey: @" C_FILES" ] withMethod: @selector ( arrayToList ) ];
72+ NSString *cppFilesString = [self safeStringFromArray: [context objectForKey: @" CPP_FILES" ] withMethod: @selector ( arrayToList ) ];
73+ NSString *objCPPFilesString = [self safeStringFromArray: [context objectForKey: @" OBJCPP_FILES" ] withMethod: @selector ( arrayToList ) ];
74+ NSString *resourceFilesString = [self safeStringFromArray: [context objectForKey: @" RESOURCES" ] withMethod: @selector ( arrayToList ) ];
75+ NSString *additionalIncludes = [self safeStringFromArray: [context objectForKey: @" ADDITIONAL_INCLUDE_DIRS" ] withMethod: @selector ( arrayToIncludeList ) ];
76+ NSString *additionalOCflags = [self safeStringFromArray: [context objectForKey: @" ADDITIONAL_OBJC_LIBS" ] withMethod: @selector ( arrayToLinkList ) ];
4377 NSString *projectType = [context objectForKey: @" PROJECT_TYPE" ];
4478
4579 // Debug output to see what we're getting from the context
@@ -71,22 +105,55 @@ - (BOOL) generate
71105 makefileString = [makefileString stringByAppendingString: @" include $(GNUSTEP_MAKEFILES)/common.make\n\n " ];
72106 makefileString = [makefileString stringByAppendingString:
73107 [NSString stringWithFormat: @" %@ _NAME = %@ \n\n " , [self projectTypeForString: [projectType uppercaseString ]], appName]];
74- makefileString = [makefileString stringByAppendingString:
75- [NSString stringWithFormat: @" %@ _OBJC_FILES = %@ \n\n " , appName, [self objectForString: objCFilesString]]];
76- makefileString = [makefileString stringByAppendingString:
77- [NSString stringWithFormat: @" %@ _C_FILES = %@ \n\n " , appName, [self objectForString: cFilesString]]];
78- makefileString = [makefileString stringByAppendingString:
79- [NSString stringWithFormat: @" %@ _CC_FILES = %@ \n\n " , appName, [self objectForString: cppFilesString]]];
80- makefileString = [makefileString stringByAppendingString:
81- [NSString stringWithFormat: @" %@ _OBJCC_FILES = %@ \n\n " , appName, [self objectForString: objCPPFilesString]]];
82- makefileString = [makefileString stringByAppendingString:
83- [NSString stringWithFormat: @" %@ _HEADER_FILES = %@ \n\n " , appName, [self objectForString: headerFilesString]]];
84- makefileString = [makefileString stringByAppendingString:
85- [NSString stringWithFormat: @" %@ _RESOURCE_FILES = %@ \n\n " , appName, [self objectForString: resourceFilesString]]];
86- makefileString = [makefileString stringByAppendingString:
87- [NSString stringWithFormat: @" ADDITIONAL_INCLUDE_DIRS += %@ \n\n " , [self objectForString: additionalIncludes]]];
88- makefileString = [makefileString stringByAppendingString:
89- [NSString stringWithFormat: @" ADDITIONAL_OBJC_LIBS += %@ \n\n " , [self objectForString: additionalOCflags]]];
108+
109+ // Only add file lists if they have content
110+ if ([objCFilesString length ] > 0 )
111+ {
112+ makefileString = [makefileString stringByAppendingString:
113+ [NSString stringWithFormat: @" %@ _OBJC_FILES = %@ \n\n " , appName, objCFilesString]];
114+ }
115+
116+ if ([cFilesString length ] > 0 )
117+ {
118+ makefileString = [makefileString stringByAppendingString:
119+ [NSString stringWithFormat: @" %@ _C_FILES = %@ \n\n " , appName, cFilesString]];
120+ }
121+
122+ if ([cppFilesString length ] > 0 )
123+ {
124+ makefileString = [makefileString stringByAppendingString:
125+ [NSString stringWithFormat: @" %@ _CC_FILES = %@ \n\n " , appName, cppFilesString]];
126+ }
127+
128+ if ([objCPPFilesString length ] > 0 )
129+ {
130+ makefileString = [makefileString stringByAppendingString:
131+ [NSString stringWithFormat: @" %@ _OBJCC_FILES = %@ \n\n " , appName, objCPPFilesString]];
132+ }
133+
134+ if ([headerFilesString length ] > 0 )
135+ {
136+ makefileString = [makefileString stringByAppendingString:
137+ [NSString stringWithFormat: @" %@ _HEADER_FILES = %@ \n\n " , appName, headerFilesString]];
138+ }
139+
140+ if ([resourceFilesString length ] > 0 )
141+ {
142+ makefileString = [makefileString stringByAppendingString:
143+ [NSString stringWithFormat: @" %@ _RESOURCE_FILES = %@ \n\n " , appName, resourceFilesString]];
144+ }
145+
146+ if ([additionalIncludes length ] > 0 )
147+ {
148+ makefileString = [makefileString stringByAppendingString:
149+ [NSString stringWithFormat: @" ADDITIONAL_INCLUDE_DIRS += %@ \n\n " , additionalIncludes]];
150+ }
151+
152+ if ([additionalOCflags length ] > 0 )
153+ {
154+ makefileString = [makefileString stringByAppendingString:
155+ [NSString stringWithFormat: @" ADDITIONAL_OBJC_LIBS += %@ \n\n " , additionalOCflags]];
156+ }
90157
91158 makefileString = [makefileString stringByAppendingString: @" -include GNUmakefile.preamble\n " ];
92159 makefileString = [makefileString stringByAppendingString: @" include $(GNUSTEP_MAKEFILES)/common.make\n " ];
0 commit comments