ProjectCenter now validates project dictionaries and updates them if requested.

I also added new keys tp the PC.project files in order to be able to generate
valid *.spec.in files needed when building RPMs.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/projectcenter/trunk@11925 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Philippe C.D. Robert 2002-01-01 17:27:41 +00:00
parent a6b824ea22
commit debdc3d8aa
21 changed files with 242 additions and 77 deletions

View file

@ -24,6 +24,11 @@
PRINCIPAL_CLASS = "main.m";
PROJECT_CREATOR = "";
PROJECT_DESCRIPTION = "No description avaliable!";
PROJECT_GROUP = "No description avaliable!";
PROJECT_SUMMARY = "No summary avaliable!";
PROJECT_RELEASE = "No release specified!";
PROJECT_COPYRIGHT = "No license specified!";
PROJECT_SOURCE = "%{gs_name}-%{gs_version}.tar.gz";
PROJECT_MAINTAINER = "";
PROJECT_NAME = "";
PROJECT_TYPE = "Application";

View file

@ -57,9 +57,9 @@
// Project
//----------------------------------------------------------------------------
- (BOOL)writeMakefile;
- (Class)builderClass;
- (BOOL)isValidDictionary:(NSDictionary *)aDict;
- (BOOL)writeMakefile;
- (NSArray *)sourceFileKeys;
- (NSArray *)resourceFileKeys;

View file

@ -25,6 +25,7 @@
*/
#import "PCAppProject.h"
#import "PCAppProj.h"
#import "PCAppMakefileFactory.h"
#import <ProjectCenter/ProjectCenter.h>
@ -158,6 +159,11 @@
// Project
//----------------------------------------------------------------------------
- (Class)builderClass
{
return [PCAppProj class];
}
- (BOOL)writeMakefile
{
NSFileManager *fm = [NSFileManager defaultManager];
@ -176,12 +182,6 @@
return NO;
}
- (BOOL)isValidDictionary:(NSDictionary *)aDict
{
#warning No project check implemented, yet!
return YES;
}
- (NSArray *)sourceFileKeys
{
return [NSArray arrayWithObjects:PCClasses,PCOtherSources,nil];

View file

@ -24,6 +24,11 @@
PRINCIPAL_CLASS = "";
PROJECT_CREATOR = "";
PROJECT_DESCRIPTION = "No description avaliable!";
PROJECT_GROUP = "No description avaliable!";
PROJECT_SUMMARY = "No summary avaliable!";
PROJECT_RELEASE = "No release specified!";
PROJECT_COPYRIGHT = "No license specified!";
PROJECT_SOURCE = "%{gs_name}-%{gs_version}.tar.gz";
PROJECT_MAINTAINER = "";
PROJECT_NAME = "";
PROJECT_TYPE = "Bundle";

View file

@ -52,9 +52,9 @@
// Project
//----------------------------------------------------------------------------
- (BOOL)writeMakefile;
- (Class)builderClass;
- (BOOL)isValidDictionary:(NSDictionary *)aDict;
- (BOOL)writeMakefile;
- (NSArray *)sourceFileKeys;
- (NSArray *)resourceFileKeys;

View file

@ -25,6 +25,7 @@
*/
#import "PCBundleProject.h"
#import "PCBundleProj.h"
#import "PCBundleMakefileFactory.h"
#import <ProjectCenter/ProjectCenter.h>
@ -109,6 +110,11 @@
// Project
//----------------------------------------------------------------------------
- (Class)builderClass
{
return [PCBundleProj class];
}
- (BOOL)writeMakefile
{
NSFileManager *fm = [NSFileManager defaultManager];
@ -127,12 +133,6 @@
return NO;
}
- (BOOL)isValidDictionary:(NSDictionary *)aDict
{
#warning No project check implemented, yet!
return YES;
}
- (NSArray *)sourceFileKeys
{
return [NSArray arrayWithObjects:PCClasses,PCOtherSources,nil];

View file

@ -24,6 +24,11 @@
PRINCIPAL_CLASS = "main.m";
PROJECT_CREATOR = "";
PROJECT_DESCRIPTION = "No description avaliable!";
PROJECT_GROUP = "No description avaliable!";
PROJECT_SUMMARY = "No summary avaliable!";
PROJECT_RELEASE = "No release specified!";
PROJECT_COPYRIGHT = "No license specified!";
PROJECT_SOURCE = "%{gs_name}-%{gs_version}.tar.gz";
PROJECT_MAINTAINER = "";
PROJECT_NAME = "";
PROJECT_TYPE = "GormApplication";

View file

@ -55,9 +55,9 @@
// Project
//----------------------------------------------------------------------------
- (BOOL)writeMakefile;
- (Class)builderClass;
- (BOOL)isValidDictionary:(NSDictionary *)aDict;
- (BOOL)writeMakefile;
- (NSArray *)sourceFileKeys;
- (NSArray *)resourceFileKeys;

View file

@ -23,6 +23,7 @@
*/
#import "PCGormProject.h"
#import "PCGormProj.h"
#import "PCGormMakefileFactory.h"
#import <ProjectCenter/ProjectCenter.h>
@ -156,6 +157,11 @@
// Project
//----------------------------------------------------------------------------
- (Class)builderClass
{
return [PCGormProj class];
}
- (BOOL)writeMakefile
{
NSFileManager *fm = [NSFileManager defaultManager];
@ -174,12 +180,6 @@
return NO;
}
- (BOOL)isValidDictionary:(NSDictionary *)aDict
{
#warning No project check implemented, yet!
return YES;
}
- (NSArray *)sourceFileKeys
{
return [NSArray arrayWithObjects:PCClasses,PCOtherSources,nil];

View file

@ -32,6 +32,10 @@
#define IMAGE(X) [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForImageResource:(X)]] autorelease]
#endif
//=============================================================================
// ==== DEFINES
//=============================================================================
#define BUILD_ARGS_KEY @"BuildArgsKey"
#define BUILD_HOST_KEY @"BuildHostKey"
@ -40,6 +44,11 @@
#define TARGET_MAKE_PROFILE @"MakeProfile"
#define TARGET_MAKE_INSTALL @"MakeInstall"
#define TARGET_MAKE_CLEAN @"MakeClean"
#define TARGET_MAKE_RPM @"MakeRPM"
//=============================================================================
// ==== Not used yet
//=============================================================================
#define TOUCHED_NOTHING (0)
#define TOUCHED_EVERYTHING (1 << 0)
@ -63,27 +72,34 @@ typedef int PCProjInfoBits;
// ==== Project keys
//=============================================================================
static NSString * const PCClasses = @"CLASS_FILES";
static NSString * const PCHeaders = @"HEADER_FILES";
static NSString * const PCOtherSources = @"OTHER_SOURCES";
static NSString * const PCOtherResources = @"OTHER_RESOURCES";
static NSString * const PCSupportingFiles = @"SUPPORTING_FILES";
static NSString * const PCDocuFiles = @"DOCU_FILES";
static NSString * const PCSubprojects = @"SUBPROJECTS";
static NSString * const PCGModels = @"INTERFACES";
static NSString * const PCImages = @"IMAGES";
static NSString * const PCLibraries = @"LIBRARIES";
static NSString * const PCCompilerOptions = @"COMPILEROPTIONS";
static NSString * const PCProjectName = @"PROJECT_NAME";
static NSString * const PCProjType = @"PROJECT_TYPE";
static NSString * const PCPrincipalClass = @"PRINCIPAL_CLASS";
static NSString * const PCAppIcon = @"APPLICATIONICON";
static NSString * const PCAppClass = @"APPCLASS";
static NSString * const PCToolIcon = @"TOOLICON";
static NSString * const PCClasses = @"CLASS_FILES";
static NSString * const PCHeaders = @"HEADER_FILES";
static NSString * const PCOtherSources = @"OTHER_SOURCES";
static NSString * const PCOtherResources = @"OTHER_RESOURCES";
static NSString * const PCSupportingFiles = @"SUPPORTING_FILES";
static NSString * const PCDocuFiles = @"DOCU_FILES";
static NSString * const PCSubprojects = @"SUBPROJECTS";
static NSString * const PCGModels = @"INTERFACES";
static NSString * const PCImages = @"IMAGES";
static NSString * const PCLibraries = @"LIBRARIES";
static NSString * const PCCompilerOptions = @"COMPILEROPTIONS";
static NSString * const PCProjectName = @"PROJECT_NAME";
static NSString * const PCProjType = @"PROJECT_TYPE";
static NSString * const PCPrincipalClass = @"PRINCIPAL_CLASS";
static NSString * const PCAppIcon = @"APPLICATIONICON";
static NSString * const PCAppClass = @"APPCLASS";
static NSString * const PCToolIcon = @"TOOLICON";
static NSString * const PCProjectBuilderClass = @"PROJECT_BUILDER";
static NSString * const PCMainGModelFile = @"MAININTERFACE";
static NSString * const PCPackageName = @"PACKAGE_NAME";
static NSString * const PCLibraryVar = @"LIBRARY_VAR";
static NSString * const PCMainGModelFile = @"MAININTERFACE";
static NSString * const PCPackageName = @"PACKAGE_NAME";
static NSString * const PCLibraryVar = @"LIBRARY_VAR";
static NSString * const PCVersion = @"PROJECT_VERSION";
static NSString * const PCSummary = @"PROJECT_SUMMARY";
static NSString * const PCDescription = @"PROJECT_DESCRIPTION";
static NSString * const PCRelease = @"PROJECT_RELEASE";
static NSString * const PCCopyright = @"PROJECT_COPYRIGHT";
static NSString * const PCGroup = @"PROJECT_GROUP";
static NSString * const PCSource = @"PROJECT_SOURCE";
@class PCProjectBuilder;
@class PCProjectDebugger;
@ -162,10 +178,10 @@ static NSString * const PCLibraryVar = @"LIBRARY_VAR";
// ==== To be overriden!
//=============================================================================
- (BOOL)writeMakefile;
// Writes the PC.project file to disc. Subclasses need to call this before doing sth else!
- (Class)builderClass;
- (BOOL)isValidDictionary:(NSDictionary *)aDict;
- (BOOL)writeMakefile;
// Subclasses need to call this before their customised implementation!
- (NSArray *)sourceFileKeys;
- (NSArray *)resourceFileKeys;
@ -210,6 +226,8 @@ static NSString * const PCLibraryVar = @"LIBRARY_VAR";
- (BOOL)saveAllFilesIfNeeded;
// Saves all the files that need to be saved.
- (BOOL)writeSpecFile;
//=============================================================================
// ==== Subprojects
//=============================================================================
@ -229,6 +247,13 @@ static NSString * const PCLibraryVar = @"LIBRARY_VAR";
- (void)updateValuesFromProjectDict;
- (BOOL)isValidDictionary:(NSDictionary *)aDict;
- (void)updateProjectDict;
- (void)validateProjectDict;
// Validates the project dictionary and inserts missing keys if needed. It
// calls isValidDictionary to validate.
@end
@interface PCProject (ProjectBuilding)

View file

@ -557,6 +557,11 @@
// ==== To be overriden
//===========================================================================================
- (Class)builderClass
{
return Nil;
}
- (BOOL)writeMakefile
{
NSString *mf = [projectPath stringByAppendingPathComponent:@"GNUmakefile"];
@ -578,11 +583,6 @@
return [self save];
}
- (BOOL)isValidDictionary:(NSDictionary *)aDict
{
return NO;
}
- (NSArray *)sourceFileKeys
{
return nil;
@ -763,10 +763,6 @@
{
NSAssert(aDict,@"No valid project dictionary!");
if (![self isValidDictionary:aDict]) {
return NO;
}
[projectDict autorelease];
projectDict = [[NSMutableDictionary alloc] initWithDictionary:aDict];
@ -862,6 +858,39 @@
return ret;
}
- (BOOL)writeSpecFile
{
NSString *name = [projectDict objectForKey:PCProjectName];
NSString *specInPath = [projectPath stringByAppendingPathComponent:name];
NSMutableString *specIn = [NSMutableString string];
if( [[projectDict objectForKey:PCRelease] intValue] < 1 )
{
NSRunAlertPanel(@"Spec Input File Creation!",
@"The Release entry seems to be wrong, please fix it!",
@"OK",nil,nil);
return NO;
}
specInPath = [specInPath stringByAppendingPathExtension:@"spec.in"];
[specIn appendString:@"# Automatically generated by ProjectCenter.app\n"];
[specIn appendString:@"#\nsummary: "];
[specIn appendString:[projectDict objectForKey:PCSummary]];
[specIn appendString:@"\nRelease: "];
[specIn appendString:[projectDict objectForKey:PCRelease]];
[specIn appendString:@"\nCopyright: "];
[specIn appendString:[projectDict objectForKey:PCCopyright]];
[specIn appendString:@"\nGroup: "];
[specIn appendString:[projectDict objectForKey:PCGroup]];
[specIn appendString:@"\nSource: "];
[specIn appendString:[projectDict objectForKey:PCSource]];
[specIn appendString:@"\n\n%description\n\n"];
[specIn appendString:[projectDict objectForKey:PCDescription]];
return [specIn writeToFile:specInPath atomically:YES];
}
//=============================================================================
// ==== Subprojects
//=============================================================================
@ -907,6 +936,78 @@
[projectTypeField setStringValue:[projectDict objectForKey:PCProjType]];
}
- (BOOL)isValidDictionary:(NSDictionary *)aDict
{
NSString *_file;
NSString *key;
Class projClass = [self builderClass];
NSDictionary *origin;
NSArray *keys;
NSEnumerator *enumerator;
_file = [[NSBundle bundleForClass:projClass] pathForResource:@"PC"
ofType:@"proj"];
origin = [NSMutableDictionary dictionaryWithContentsOfFile:_file];
keys = [origin allKeys];
enumerator = [keys objectEnumerator];
while( key = [enumerator nextObject] )
{
if( [aDict objectForKey:key] == nil )
{
return NO;
}
}
return YES;
}
- (void)updateProjectDict
{
NSString *_file;
NSString *key;
Class projClass = [self builderClass];
NSDictionary *origin;
NSArray *keys;
NSEnumerator *enumerator;
_file = [[NSBundle bundleForClass:projClass] pathForResource:@"PC"
ofType:@"proj"];
origin = [NSMutableDictionary dictionaryWithContentsOfFile:_file];
keys = [origin allKeys];
enumerator = [keys objectEnumerator];
while( key = [enumerator nextObject] )
{
if( [projectDict objectForKey:key] == nil )
{
[projectDict setObject:[origin objectForKey:key] forKey:key];
NSRunAlertPanel(@"New Project Key!",
@"The key '%@' has been added.",
@"OK",nil,nil,key);
}
}
}
- (void)validateProjectDict
{
if( [self isValidDictionary:projectDict] == NO )
{
int ret = NSRunAlertPanel(@"Attention!", @"The project is not up to date, should it be updated automatically?", @"OK",@"No",nil);
if( ret == NSAlertDefaultReturn )
{
[self updateProjectDict];
[self save];
NSRunAlertPanel(@"Project updated!", @"The project file has been updated successfully!\nPlease make sure that all new project keys contain valid entries!", @"OK",nil,nil);
}
}
}
@end
@implementation PCProject (ProjectBuilding)

View file

@ -310,6 +310,7 @@
NSString *status;
NSString *target;
SEL postProcess = NULL;
NSDictionary *env = [[NSProcessInfo processInfo] environment];
logPipe = [NSPipe pipe];
readHandle = [[logPipe fileHandleForReading] retain];
@ -357,7 +358,18 @@
[args addObject:@"specfile"];
postProcess = @selector(copyPackageTo:);
NSRunAlertPanel(@"Creating RPM SPEC",@"After creating the RPM SPEC file you have to invoke \"rpm -ba %@.spec\" in the project directory.\nThis only works if you made a \"make install\" before!",@"OK",nil,nil,[currentProject projectName]);
if( [env objectForKey:@"RPM_TOPDIR"] == nil )
{
NSRunAlertPanel(@"Attention!",
@"First set the environment variable 'RPM_TOPDIR'!",
@"OK",nil,nil);
//return;
}
if ( [currentProject writeSpecFile] == NO )
{
return;
}
break;
}

View file

@ -321,7 +321,9 @@ NSString *ActiveProjectDidChangeNotification = @"ActiveProjectDidChange";
[loadedProjects setObject:project forKey:aPath];
[self setActiveProject:project];
[project setDelegate:self];
[project validateProjectDict];
return YES;
}
return NO;

View file

@ -18,6 +18,11 @@
OTHER_SOURCES = ();
PROJECT_CREATOR = "";
PROJECT_DESCRIPTION = "No description avaliable!";
PROJECT_GROUP = "No description avaliable!";
PROJECT_SUMMARY = "No summary avaliable!";
PROJECT_RELEASE = "No release specified!";
PROJECT_COPYRIGHT = "No license specified!";
PROJECT_SOURCE = "%{gs_name}-%{gs_version}.tar.gz";
PROJECT_MAINTAINER = "";
PROJECT_NAME = "";
PROJECT_TYPE = "Library";

View file

@ -50,9 +50,9 @@
// Project
//----------------------------------------------------------------------------
- (BOOL)writeMakefile;
- (Class)builderClass;
- (BOOL)isValidDictionary:(NSDictionary *)aDict;
- (BOOL)writeMakefile;
- (NSArray *)sourceFileKeys;
- (NSArray *)resourceFileKeys;

View file

@ -25,6 +25,7 @@
*/
#import "PCLibProject.h"
#import "PCLibProj.h"
#import "PCLibMakefileFactory.h"
#import <ProjectCenter/ProjectCenter.h>
@ -84,6 +85,11 @@
// Project
//----------------------------------------------------------------------------
- (Class)builderClass
{
return [PCLibProj class];
}
- (BOOL)writeMakefile
{
NSFileManager *fm = [NSFileManager defaultManager];
@ -102,12 +108,6 @@
return NO;
}
- (BOOL)isValidDictionary:(NSDictionary *)aDict
{
#warning No project check implemented, yet!
return YES;
}
- (NSArray *)sourceFileKeys
{
return [NSArray arrayWithObjects:PCClasses,PCOtherSources,nil];

View file

@ -20,6 +20,11 @@
PRINCIPAL_CLASS = "main.m";
PROJECT_CREATOR = "";
PROJECT_DESCRIPTION = "No description avaliable!";
PROJECT_GROUP = "No description avaliable!";
PROJECT_SUMMARY = "No summary avaliable!";
PROJECT_RELEASE = "No release specified!";
PROJECT_COPYRIGHT = "No license specified!";
PROJECT_SOURCE = "%{gs_name}-%{gs_version}.tar.gz";
PROJECT_MAINTAINER = "";
PROJECT_NAME = "";
PROJECT_TYPE = "Tool";

View file

@ -51,9 +51,9 @@
// Project
//----------------------------------------------------------------------------
- (BOOL)writeMakefile;
- (Class)builderClass;
- (BOOL)isValidDictionary:(NSDictionary *)aDict;
- (BOOL)writeMakefile;
- (NSArray *)sourceFileKeys;
- (NSArray *)resourceFileKeys;

View file

@ -25,6 +25,7 @@
*/
#import "PCToolProject.h"
#import "PCToolProj.h"
#import "PCToolMakefileFactory.h"
#import <ProjectCenter/ProjectCenter.h>
@ -85,6 +86,11 @@
// Project
//----------------------------------------------------------------------------
- (Class)builderClass
{
return [PCToolProj class];
}
- (BOOL)writeMakefile
{
NSFileManager *fm = [NSFileManager defaultManager];
@ -103,12 +109,6 @@
return NO;
}
- (BOOL)isValidDictionary:(NSDictionary *)aDict
{
#warning No project check implemented, yet!
return YES;
}
- (NSArray *)sourceFileKeys
{
return [NSArray arrayWithObjects:PCClasses,PCOtherSources,nil];

View file

@ -23,8 +23,8 @@
ApplicationName = "ProjectCenter";
ApplicationDescription = "GNUstep IDE";
ApplicationIcon = "ProjectCenter.tiff";
ApplicationRelease = "ProjectCenter 0.2.6";
FullVersionID = "0.2.6";
ApplicationRelease = "ProjectCenter 0.2.7";
FullVersionID = "0.2.7";
Authors = ("Philippe C.D. Robert <phr@3dkit.org>");
URL = "http://www.projectcenter.ch";
Copyright = "Copyright (C) 2001 Free Software Foundation";

View file

@ -7,6 +7,6 @@ GCC_VERSION=2.8.0
# The version number of this release.
MAJOR_VERSION=0
MINOR_VERSION=2
SUBMINOR_VERSION=6
SUBMINOR_VERSION=7
PC_VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION}
VERSION=${PC_VERSION}