Skip to content

Commit 00f3f7d

Browse files
committed
Add headers, and other parts conditionally
1 parent defa009 commit 00f3f7d

1 file changed

Lines changed: 91 additions & 24 deletions

File tree

Generators/Makefile/GSXCMakefileGenerator.m

Lines changed: 91 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)