mirror of
https://github.com/gnustep/apps-projectcenter.git
synced 2025-02-20 18:32:17 +00:00
The project now uses the shared makefile factory too.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/projectcenter/trunk@12925 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
c974abfafd
commit
66bdfda587
5 changed files with 60 additions and 229 deletions
|
@ -45,8 +45,7 @@ PC.proj
|
||||||
|
|
||||||
PCBundleProj_HEADERS= \
|
PCBundleProj_HEADERS= \
|
||||||
PCBundleProject.h \
|
PCBundleProject.h \
|
||||||
PCBundleProj.h \
|
PCBundleProj.h
|
||||||
PCBundleMakefileFactory.h
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
||||||
|
@ -55,8 +54,7 @@ PCBundleMakefileFactory.h
|
||||||
|
|
||||||
PCBundleProj_OBJC_FILES= \
|
PCBundleProj_OBJC_FILES= \
|
||||||
PCBundleProject.m \
|
PCBundleProject.m \
|
||||||
PCBundleProj.m \
|
PCBundleProj.m
|
||||||
PCBundleMakefileFactory.m
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
/*
|
|
||||||
GNUstep ProjectCenter - http://www.gnustep.org
|
|
||||||
|
|
||||||
Copyright (C) 2001 Free Software Foundation
|
|
||||||
|
|
||||||
Author: Philippe C.D. Robert <phr@3dkit.org>
|
|
||||||
|
|
||||||
This file is part of GNUstep.
|
|
||||||
|
|
||||||
This application is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This application is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public
|
|
||||||
License along with this library; if not, write to the Free
|
|
||||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
|
|
||||||
|
|
||||||
$Id$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import <ProjectCenter/PCProject.h>
|
|
||||||
|
|
||||||
@interface PCBundleMakefileFactory : NSObject
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
+ (PCBundleMakefileFactory *)sharedFactory;
|
|
||||||
|
|
||||||
- (NSData *)makefileForProject:(PCProject *)aProject;
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,176 +0,0 @@
|
||||||
/*
|
|
||||||
GNUstep ProjectCenter - http://www.gnustep.org
|
|
||||||
|
|
||||||
Copyright (C) 2001 Free Software Foundation
|
|
||||||
|
|
||||||
Author: Philippe C.D. Robert <phr@3dkit.org>
|
|
||||||
|
|
||||||
This file is part of GNUstep.
|
|
||||||
|
|
||||||
This application is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This application is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public
|
|
||||||
License along with this library; if not, write to the Free
|
|
||||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
|
|
||||||
|
|
||||||
$Id$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#import "PCBundleMakefileFactory.h"
|
|
||||||
|
|
||||||
@implementation PCBundleMakefileFactory
|
|
||||||
|
|
||||||
static PCBundleMakefileFactory *_factory = nil;
|
|
||||||
|
|
||||||
+ (PCBundleMakefileFactory *)sharedFactory
|
|
||||||
{
|
|
||||||
if (!_factory) {
|
|
||||||
_factory = [[[self class] alloc] init];
|
|
||||||
}
|
|
||||||
return _factory;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSData *)makefileForProject:(PCProject *)aProject;
|
|
||||||
{
|
|
||||||
NSMutableString *string = [NSMutableString string];
|
|
||||||
NSString *prName = [aProject projectName];
|
|
||||||
NSDictionary *prDict = [aProject projectDict];
|
|
||||||
NSString *tmp;
|
|
||||||
NSEnumerator *enumerator;
|
|
||||||
int i;
|
|
||||||
NSString *installDir;
|
|
||||||
|
|
||||||
installDir = [prDict objectForKey:PCInstallDir];
|
|
||||||
if( [installDir isEqualToString:@""] )
|
|
||||||
{
|
|
||||||
installDir = [NSString stringWithString:@"$(GNUSTEP_LOCAL_ROOT)/Library/Bundles"];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Header information
|
|
||||||
[string appendString:@"#\n"];
|
|
||||||
[string appendString:@"# GNUmakefile - Generated by ProjectCenter\n"];
|
|
||||||
[string appendString:@"# Written by Philippe C.D. Robert <phr@3dkit.org>\n"];
|
|
||||||
[string appendString:@"#\n"];
|
|
||||||
[string appendString:@"# NOTE: Do NOT change this file -- ProjectCenter maintains it!\n"];
|
|
||||||
[string appendString:@"#\n"];
|
|
||||||
[string appendString:@"# Put all of your customisations in GNUmakefile.preamble and\n"];
|
|
||||||
[string appendString:@"# GNUmakefile.postamble\n"];
|
|
||||||
[string appendString:@"#\n\n"];
|
|
||||||
|
|
||||||
// The 'real' thing
|
|
||||||
[string appendString:@"include $(GNUSTEP_MAKEFILES)/common.make\n"];
|
|
||||||
|
|
||||||
[string appendString:@"#\n\n"];
|
|
||||||
[string appendString:@"# Subprojects\n"];
|
|
||||||
[string appendString:@"#\n\n"];
|
|
||||||
|
|
||||||
if ([[aProject subprojects] count]) {
|
|
||||||
enumerator = [[prDict objectForKey:PCSubprojects] objectEnumerator];
|
|
||||||
while (tmp = [enumerator nextObject]) {
|
|
||||||
[string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[string appendString:@"#\n"];
|
|
||||||
[string appendString:@"# Bundle\n"];
|
|
||||||
[string appendString:@"#\n\n"];
|
|
||||||
|
|
||||||
[string appendString:[NSString stringWithFormat:@"PACKAGE_NAME=%@\n",prName]];
|
|
||||||
[string appendString:[NSString stringWithFormat:@"BUNDLE_NAME=%@\n",prName]];
|
|
||||||
[string appendString:[NSString stringWithFormat:@"BUNDLE_EXTENSION=.bundle\n"]];
|
|
||||||
[string appendString:[NSString stringWithFormat:@"BUNDLE_INSTALL_DIR=%@\n",installDir]];
|
|
||||||
if ((tmp = [prDict objectForKey:PCPrincipalClass]) &&
|
|
||||||
[tmp isEqualToString:@""] == NO) {
|
|
||||||
}
|
|
||||||
else if (([[prDict objectForKey:PCClasses] count])) {
|
|
||||||
tmp = [[[prDict objectForKey:PCClasses] objectAtIndex:0] stringByDeletingPathExtension];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
tmp = [NSString string];
|
|
||||||
}
|
|
||||||
|
|
||||||
[string appendString:[NSString stringWithFormat:@"%@_PRINCIPAL_CLASS=%@\n",prName,tmp]];
|
|
||||||
|
|
||||||
[string appendString:@"#\n\n"];
|
|
||||||
[string appendString:@"# Additional libraries\n"];
|
|
||||||
[string appendString:@"#\n\n"];
|
|
||||||
|
|
||||||
[string appendString:[NSString stringWithFormat:@"%@_LIBRARIES_DEPEND_UPON += ",prName]];
|
|
||||||
|
|
||||||
if ([[prDict objectForKey:PCLibraries] count]) {
|
|
||||||
enumerator = [[prDict objectForKey:PCLibraries] objectEnumerator];
|
|
||||||
while (tmp = [enumerator nextObject]) {
|
|
||||||
if (![tmp isEqualToString:@"gnustep-base"] &&
|
|
||||||
![tmp isEqualToString:@"gnustep-gui"]) {
|
|
||||||
[string appendString:[NSString stringWithFormat:@"-l%@ ",tmp]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[string appendString:@"\n\n#\n\n"];
|
|
||||||
[string appendString:@"# Resource files\n"];
|
|
||||||
[string appendString:@"#\n\n"];
|
|
||||||
|
|
||||||
[string appendString:[NSString stringWithFormat:@"%@_RESOURCE_FILES= ",prName]];
|
|
||||||
|
|
||||||
for (i=0;i<[[aProject resourceFileKeys] count];i++) {
|
|
||||||
NSString *k = [[aProject resourceFileKeys] objectAtIndex:i];
|
|
||||||
|
|
||||||
enumerator = [[prDict objectForKey:k] objectEnumerator];
|
|
||||||
while (tmp = [enumerator nextObject]) {
|
|
||||||
[string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[string appendString:@"\n\n#\n\n"];
|
|
||||||
[string appendString:@"# Header files\n"];
|
|
||||||
[string appendString:@"#\n\n"];
|
|
||||||
|
|
||||||
[string appendString:[NSString stringWithFormat:@"%@_HEADERS= ",prName]];
|
|
||||||
|
|
||||||
enumerator = [[prDict objectForKey:PCHeaders] objectEnumerator];
|
|
||||||
while (tmp = [enumerator nextObject]) {
|
|
||||||
[string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]];
|
|
||||||
}
|
|
||||||
|
|
||||||
[string appendString:@"\n\n#\n\n"];
|
|
||||||
[string appendString:@"# Class files\n"];
|
|
||||||
[string appendString:@"#\n\n"];
|
|
||||||
|
|
||||||
[string appendString:[NSString stringWithFormat:@"%@_OBJC_FILES= ",prName]];
|
|
||||||
|
|
||||||
enumerator = [[prDict objectForKey:PCClasses] objectEnumerator];
|
|
||||||
while (tmp = [enumerator nextObject]) {
|
|
||||||
[string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]];
|
|
||||||
}
|
|
||||||
|
|
||||||
[string appendString:@"\n\n#\n\n"];
|
|
||||||
[string appendString:@"# C files\n"];
|
|
||||||
[string appendString:@"#\n\n"];
|
|
||||||
|
|
||||||
[string appendString:[NSString stringWithFormat:@"%@_C_FILES= ",prName]];
|
|
||||||
|
|
||||||
enumerator = [[prDict objectForKey:PCOtherSources] objectEnumerator];
|
|
||||||
while (tmp = [enumerator nextObject]) {
|
|
||||||
[string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]];
|
|
||||||
}
|
|
||||||
|
|
||||||
[string appendString:@"\n\n"];
|
|
||||||
|
|
||||||
[string appendString:@"-include GNUmakefile.preamble\n"];
|
|
||||||
[string appendString:@"-include GNUmakefile.local\n"];
|
|
||||||
[string appendString:@"include $(GNUSTEP_MAKEFILES)/bundle.make\n"];
|
|
||||||
[string appendString:@"-include GNUmakefile.postamble\n"];
|
|
||||||
|
|
||||||
return [string dataUsingEncoding:[NSString defaultCStringEncoding]];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -5,8 +5,7 @@
|
||||||
BUILDTOOL = "/usr/bin/make";
|
BUILDTOOL = "/usr/bin/make";
|
||||||
CLASS_FILES = (
|
CLASS_FILES = (
|
||||||
PCBundleProject.m,
|
PCBundleProject.m,
|
||||||
PCBundleProj.m,
|
PCBundleProj.m
|
||||||
PCBundleMakefileFactory.m
|
|
||||||
);
|
);
|
||||||
COMPILEROPTIONS = "";
|
COMPILEROPTIONS = "";
|
||||||
CREATION_DATE = "";
|
CREATION_DATE = "";
|
||||||
|
@ -17,8 +16,7 @@
|
||||||
);
|
);
|
||||||
HEADER_FILES = (
|
HEADER_FILES = (
|
||||||
PCBundleProject.h,
|
PCBundleProject.h,
|
||||||
PCBundleProj.h,
|
PCBundleProj.h
|
||||||
PCBundleMakefileFactory.h
|
|
||||||
);
|
);
|
||||||
IMAGES = (
|
IMAGES = (
|
||||||
);
|
);
|
||||||
|
|
|
@ -26,10 +26,12 @@
|
||||||
|
|
||||||
#import "PCBundleProject.h"
|
#import "PCBundleProject.h"
|
||||||
#import "PCBundleProj.h"
|
#import "PCBundleProj.h"
|
||||||
#import "PCBundleMakefileFactory.h"
|
#import "PCMakefileFactory.h"
|
||||||
|
|
||||||
#import <ProjectCenter/ProjectCenter.h>
|
#import <ProjectCenter/ProjectCenter.h>
|
||||||
|
|
||||||
|
#define BUNDLE_INSTALL @"$(GNUSTEP_LOCAL_ROOT)/Library/Bundles/"
|
||||||
|
|
||||||
@interface PCBundleProject (CreateUI)
|
@interface PCBundleProject (CreateUI)
|
||||||
|
|
||||||
- (void)_initUI;
|
- (void)_initUI;
|
||||||
|
@ -117,19 +119,66 @@
|
||||||
|
|
||||||
- (BOOL)writeMakefile
|
- (BOOL)writeMakefile
|
||||||
{
|
{
|
||||||
NSFileManager *fm = [NSFileManager defaultManager];
|
NSString *tmp;
|
||||||
NSData *mfd;
|
NSData *mfd;
|
||||||
NSString *mf = [projectPath stringByAppendingPathComponent:@"GNUmakefile"];
|
NSString *mfl = [projectPath stringByAppendingPathComponent:@"GNUmakefile"];
|
||||||
|
int i;
|
||||||
|
PCMakefileFactory *mf = [PCMakefileFactory sharedFactory];
|
||||||
|
NSDictionary *dict = [self projectDict];
|
||||||
|
NSArray *classes = [dict objectForKey:PCClasses];
|
||||||
|
NSString *iDir = [dict objectForKey:PCInstallDir];
|
||||||
|
|
||||||
// Save the project file
|
// Save the project file
|
||||||
[super writeMakefile];
|
[super writeMakefile];
|
||||||
|
|
||||||
if(mfd = [[PCBundleMakefileFactory sharedFactory] makefileForProject:self]){
|
if( [iDir isEqualToString:@""] )
|
||||||
if ([mfd writeToFile:mf atomically:YES]) {
|
{
|
||||||
|
iDir = [NSString stringWithString:BUNDLE_INSTALL];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((tmp = [dict objectForKey:PCPrincipalClass]) &&
|
||||||
|
[tmp isEqualToString:@""] == NO)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else if ([classes count])
|
||||||
|
{
|
||||||
|
tmp = [[classes objectAtIndex:0] stringByDeletingPathExtension];
|
||||||
|
}
|
||||||
|
else tmp = [NSString string];
|
||||||
|
|
||||||
|
[mf createMakefileForProject:[self projectName]];
|
||||||
|
|
||||||
|
[mf appendString:@"include $(GNUSTEP_MAKEFILES)/common.make\n"];
|
||||||
|
|
||||||
|
[mf appendSubprojects:[dict objectForKey:PCSubprojects]];
|
||||||
|
|
||||||
|
[mf appendBundle];
|
||||||
|
[mf appendBundleInstallDir:iDir];
|
||||||
|
[mf appendPrincipalClass:tmp];
|
||||||
|
[mf appendLibraries:[dict objectForKey:PCLibraries]];
|
||||||
|
|
||||||
|
[mf appendResources];
|
||||||
|
for (i=0;i<[[self resourceFileKeys] count];i++)
|
||||||
|
{
|
||||||
|
NSString *k = [[self resourceFileKeys] objectAtIndex:i];
|
||||||
|
[mf appendResourceItems:[dict objectForKey:k]];
|
||||||
|
}
|
||||||
|
|
||||||
|
[mf appendHeaders:[dict objectForKey:PCHeaders]];
|
||||||
|
[mf appendClasses:[dict objectForKey:PCClasses]];
|
||||||
|
[mf appendCFiles:[dict objectForKey:PCOtherSources]];
|
||||||
|
|
||||||
|
[mf appendTailForBundle];
|
||||||
|
|
||||||
|
// Write the new file to disc!
|
||||||
|
if (mfd = [mf encodedMakefile])
|
||||||
|
{
|
||||||
|
if ([mfd writeToFile:mfl atomically:YES])
|
||||||
|
{
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue