From d6cf2a702d865e70f82004edc7fc0797cc6ba9fd Mon Sep 17 00:00:00 2001 From: Riccardo Mottola Date: Mon, 13 Jan 2014 10:47:44 +0000 Subject: [PATCH] Convenience method to find executables, by Richard Frith-Macdonald git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/projectcenter/trunk@37587 72102866-910b-0410-8b05-ffd578937521 --- Framework/PCFileManager.m | 36 +++++++++++++++++++++++++++ Headers/ProjectCenter/PCFileManager.h | 5 +++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/Framework/PCFileManager.m b/Framework/PCFileManager.m index e9324f5..96879a7 100644 --- a/Framework/PCFileManager.m +++ b/Framework/PCFileManager.m @@ -330,6 +330,42 @@ static PCFileManager *_mgr = nil; return YES; } +// =========================================================================== +// ==== Find Executable +// Tries to find the first matching executable tool fromt he given, nil-terminated +// list. Returns the full path for it. +// =========================================================================== +- (NSString*) findExecutableToolFrom: (NSArray*)candidates +{ + NSFileManager *manager; + NSEnumerator *relPath; + NSEnumerator *pathEnumerator; + NSString *directory; + + manager = [NSFileManager defaultManager]; + pathEnumerator = [NSSearchPathForDirectoriesInDomains(NSDeveloperDirectory, NSAllDomainsMask, YES) objectEnumerator]; + + while (nil != (directory = [pathEnumerator nextObject])) + { + NSEnumerator *candidateEnumerator = [candidates objectEnumerator]; + NSString *candidate; + + while (nil != (candidate = [candidateEnumerator nextObject])) + { + NSString *path = [directory stringByAppendingPathComponent: candidate]; + + NSLog(@"final candidate path is: %@", path); + + if ([manager isExecutableFileAtPath: path]) + { + return path; + } + } + } + return nil; +} + + @end @implementation PCFileManager (UInterface) diff --git a/Headers/ProjectCenter/PCFileManager.h b/Headers/ProjectCenter/PCFileManager.h index 1f59a73..c9f9c90 100644 --- a/Headers/ProjectCenter/PCFileManager.h +++ b/Headers/ProjectCenter/PCFileManager.h @@ -1,7 +1,7 @@ /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html - Copyright (C) 2000-2004 Free Software Foundation + Copyright (C) 2000-2014 Free Software Foundation Authors: Philippe C.D. Robert Serg Stoyan @@ -112,6 +112,9 @@ enum { - (BOOL)moveFile:(NSString *)file intoDirectory:(NSString *)directory; +// find an executable from list and return full path +- (NSString*) findExecutableToolFrom: (NSArray*)candidates; + @end @interface PCFileManager (UInterface)