Mac: Updates for compatibility with current CUDA software and OS X through OS 10.7 Lion, etc.

svn path=/branches/boinc_core_release_6_8/; revision=23936
This commit is contained in:
Charlie Fenton 2011-08-05 12:08:34 +00:00
parent 0bb4faac61
commit 1b7c83f224
27 changed files with 827 additions and 703 deletions

View File

@ -6788,3 +6788,47 @@ Rom 8 July 2011
/
configure.ac
version.h
Charlie 5 Aug 2011
- Mac: Updates for compatibility with current CUDA software and OS X through
OS 10.7 Lion, etc.
- Mac: Update to libcurl 7.21.7 and c-ares 1.7.4.
- Mac: Build x86_64 screensaver directly.
- Mac Installer: remove obsolete kludge for generating x86_64 screensaver.
- Mac Installer: Update to current installer.
- Mac: If obsolete libcudart.dylib not found, try libcuda.dylib.
client/
http_curl.cpp
clientgui/
mac/
SetVersion.cpp
res/
MacPkgIcon.zip (added)
MacPTPPkgIcon.zip (added)
MacGRPkgIcon.zip (added)
clientscr/
mac_saver_module.cpp
Mac_Saver_Module.h
Mac_Saver_ModuleView.m, .h
screensaver.cpp
lib/
coproc.cpp
mac_build/
boinc.xcodeproj/
project.pbxproj
buildc-ares.sh
buildcurl.sh
setupForBOINC.sh
HowToBuildBOINC_XCode.rtf
mac_installer/
GR-ReadMe.rtf
make_GridRepublic.sh
make_ProgThruProc.sh
PostInstall.cpp
postinstall
postupgrade
PTP-ReadMe.rtf
ReadMe.rtf
release_boinc.sh
WaitPermissions.cpp

View File

@ -577,6 +577,14 @@ int HTTP_OP::libcurl_exec(
curlErr = curl_easy_setopt(curlEasy, CURLOPT_HTTPGET, 1L);
}
#ifdef __APPLE__
// cURL 7.19.7 with c-ares 1.7.0 did not fall back to IPv4 when IPv6
// DNS lookup failed on Macs with certain default settings if connected
// to the Internet by an AT&T U-Verse 2-Wire Gateway. This work-around
// may not be needed any more for cURL 7.21.7, but keep it to be safe.
curl_easy_setopt(curlEasy, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
#endif
// turn on debug info if tracing enabled
//
if (log_flags.http_debug) {

View File

@ -227,7 +227,7 @@ int MakeInstallerInfoPlistFile(char* myPath, char* brand) {
fprintf(f, "\t<key>IFPkgFlagIsRequired</key>\n\t<integer>0</integer>\n");
fprintf(f, "\t<key>IFPkgFlagOverwritePermissions</key>\n\t<integer>0</integer>\n");
fprintf(f, "\t<key>IFPkgFlagRelocatable</key>\n\t<integer>0</integer>\n");
fprintf(f, "\t<key>IFPkgFlagRestartAction</key>\n\t<string>RequiredLogout</string>\n");
fprintf(f, "\t<key>IFPkgFlagRestartAction</key>\n\t<string>NoRestart</string>\n");
fprintf(f, "\t<key>IFPkgFlagRootVolumeOnly</key>\n\t<integer>1</integer>\n");
fprintf(f, "\t<key>IFPkgFlagUpdateInstalledLanguages</key>\n\t<integer>0</integer>\n");
fprintf(f, "\t<key>IFPkgFormatVersion</key>\n\t<real>0.10000000149011612</real>\n");
@ -243,6 +243,3 @@ int MakeInstallerInfoPlistFile(char* myPath, char* brand) {
return retval;
}
const char *BOINC_RCSID_9263a2dc22="$Id$";

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -32,20 +32,22 @@
extern "C" {
#endif
int initBOINCSaver(void);
int getSSMessage(char **theMessage, int* coveredFreq);
void windowIsCovered();
void drawPreview(CGContextRef myContext);
void closeBOINCSaver(void);
void print_to_log_file(const char *format, ...);
void strip_cr(char *buf);
void PrintBacktrace(void);
void initBOINCSaver(void);
int startBOINCSaver(void);
int getSSMessage(char **theMessage, int* coveredFreq);
void windowIsCovered();
void drawPreview(CGContextRef myContext);
void closeBOINCSaver(void);
void setDefaultDisplayPeriods(void);
double getDTime();
void print_to_log_file(const char *format, ...);
void strip_cr(char *buf);
void PrintBacktrace(void);
#ifdef __cplusplus
} // extern "C"
#endif
//-----------------------------------------------------------------------------
// Name: class CScreensaver
// Desc: Screensaver class
@ -72,7 +74,7 @@ protected:
void setSSMessageText(const char *msg);
void updateSSMessageText(char *msg);
void strip_cr(char *buf);
char m_gfx_Switcher_Path[MAXPATHLEN];
char m_gfx_Switcher_Path[PATH_MAX];
bool m_bErrorMode; // Whether to draw moving logo and possibly display an error
unsigned int m_hrError; // Error code to display
@ -82,10 +84,6 @@ protected:
time_t m_dwBlankTime;
int m_iGraphicsStartingMsgCounter;
bool m_bDefault_ss_exists;
double m_fGFXDefaultPeriod;
double m_fGFxSciencePeriod;
double m_fGFXChangePeriod;
bool m_bShow_default_ss_first;
bool m_bScience_gfx_running;
bool m_bDefault_gfx_running;
bool m_bConnected;
@ -145,6 +143,11 @@ public:
void drawPreview(CGContextRef myContext);
void ShutdownSaver();
double m_fGFXDefaultPeriod;
double m_fGFxSciencePeriod;
double m_fGFXChangePeriod;
bool m_bShow_default_ss_first;
protected:
};

View File

@ -27,9 +27,15 @@
IBOutlet id mConfigureSheet; // our configuration sheet
IBOutlet NSButton *mGoToBlankCheckbox;
IBOutlet NSTextField *mBlankingTimeTextField;
IBOutlet NSTextField *mDefaultPeriodTextField;
IBOutlet NSTextField *mSciencePeriodTextField;
IBOutlet NSTextField *mChangePeriodTextField;
int mVersion; // the version of our prefs
NSString *mBlankingTimeString;
NSString *mDefaultPeriodString;
NSString *mSciencePeriodString;
NSString *mChangePeriodString;
}
- (IBAction)closeSheetSave:(id) sender;
@ -37,9 +43,11 @@
@end
int initBOINCSaver(void);
int getSSMessage(char **theMessage, int* coveredFreq);
void windowIsCovered();
void drawPreview(CGContextRef myContext);
void closeBOINCSaver(void);
extern void print_to_log_file(const char *format, ...);
void initBOINCSaver(void);
int startBOINCSaver(void);
int getSSMessage(char **theMessage, int* coveredFreq);
void windowIsCovered();
void drawPreview(CGContextRef myContext);
void closeBOINCSaver(void);
double getDTime();
extern void print_to_log_file(const char *format, ...);

View File

@ -23,10 +23,30 @@
#import "Mac_Saver_ModuleView.h"
#include <Carbon/Carbon.h>
#include <AppKit/AppKit.h>
#include <QTKit/QTKitDefines.h> // For NSInteger
#include <IOKit/hidsystem/IOHIDLib.h>
#include <IOKit/hidsystem/IOHIDParameter.h>
#include <IOKit/hidsystem/event_status_driver.h>
#ifndef NSInteger
#if __LP64__ || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
#endif
#ifndef CGFLOAT_DEFINED
typedef float CGFloat;
#endif
void print_to_log_file(const char *format, ...);
void strip_cr(char *buf);
static SInt32 gSystemVersion = 0;
static double gSS_StartTime = 0.0;
mach_port_t gEventHandle = 0;
int gGoToBlank; // True if we are to blank the screen
int gBlankingTime; // Delay in minutes before blanking the screen
NSString *gPathToBundleResources = NULL;
@ -38,19 +58,10 @@ int gTopWindowListIndex = -1;
NSRect gMovingRect;
float gImageXIndent;
float gTextBoxHeight;
CGFloat gActualTextBoxHeight;
NSPoint gCurrentPosition;
NSPoint gCurrentDelta;
ATSUStyle theStyle = NULL;
ATSUFontID theFontID;
Fixed atsuSize;
char myFontName[] = "Helvetica";
//char myFontName[] = "Lucida Blackletter";
ATSUAttributeTag theTags[] = { kATSUFontTag, kATSUSizeTag };
ByteCount theSizes[] = { sizeof (ATSUFontID), sizeof(Fixed) };
ATSUAttributeValuePtr theValues[] = { &theFontID, &atsuSize };
CGContextRef myContext;
bool isErased;
@ -78,9 +89,19 @@ int signof(float x) {
// against any problems that may cause.
- (void)startAnimation {
NSBundle * myBundle;
OSStatus err;
int newFrequency;
#ifdef X86_64
gEventHandle = NXOpenEventStatus();
#endif
OSStatus err = Gestalt(gestaltSystemVersion, &gSystemVersion);
if (err != noErr) {
gSystemVersion = 0;
}
initBOINCSaver();
if (gBOINC_Logo == NULL) {
if (self) {
myBundle = [ NSBundle bundleForClass:[self class]];
@ -143,14 +164,9 @@ int signof(float x) {
gCurrentDelta.x = 1.0;
gCurrentDelta.y = 1.0;
gActualTextBoxHeight = MINTEXTBOXHEIGHT;
[ self setAnimationTimeInterval:1/8.0 ];
ATSUFindFontFromName(myFontName, strlen(myFontName), kFontFamilyName, kFontMacintoshPlatform,
kFontNoScriptCode, kFontNoLanguageCode, &theFontID);
err = ATSUCreateStyle(&theStyle);
atsuSize = Long2Fix (20);
err = ATSUSetAttributes(theStyle, 2, theTags, theSizes, theValues);
}
}
@ -161,9 +177,11 @@ int signof(float x) {
return;
}
newFrequency = initBOINCSaver();
newFrequency = startBOINCSaver();
if (newFrequency)
[ self setAnimationTimeInterval:1.0/newFrequency ];
gSS_StartTime = getDTime();
}
// If there are multiple displays, this may get called
@ -183,10 +201,6 @@ int signof(float x) {
}
gBOINC_Logo = NULL;
if (theStyle) {
ATSUDisposeStyle(theStyle);
}
theStyle = NULL;
}
// If there are multiple displays, this may get called
@ -205,16 +219,20 @@ int signof(float x) {
int newFrequency = 0;
int coveredFreq = 0;
NSRect theFrame = [ self frame ];
int myWindowNumber;
int windowList[20];
int i, n;
NSInteger myWindowNumber;
NSInteger windowList[20];
NSInteger i, n;
NSRect currentDrawingRect, eraseRect;
NSPoint imagePosition;
Rect r;
char *msg;
CFStringRef cf_msg;
AbsoluteTime timeToUnblock, frameStartTime = UpTime();
OSStatus err;
#ifdef X86_64
kern_return_t kernResult = kIOReturnError;
UInt64 params;
IOByteCount rcnt = sizeof(UInt64);
double idleTime = 0;
#endif
if ([ self isPreview ]) {
#if 1 // Currently drawRect just draws our logo in the preview window
@ -235,15 +253,31 @@ int signof(float x) {
return;
}
#ifdef X86_64
// For unkown reasons, OS 10.7 Lion screensaver delays several seconds after
// user activity before calling stopAnimation, so we check user activity here
if ((gSystemVersion >= 1070) && ((getDTime() - gSS_StartTime) > 2.0)) {
kernResult = IOHIDGetParameter( gEventHandle, CFSTR(EVSIOIDLE), sizeof(UInt64), &params, &rcnt );
if ( kernResult == kIOReturnSuccess ) {
idleTime = ((double)params) / 1000.0 / 1000.0 / 1000.0;
if (idleTime < 1.5) {
[ self stopAnimation ];
}
}
}
#endif
myContext = [[NSGraphicsContext currentContext] graphicsPort];
// [myContext retain];
NSWindow *myWindow = [ self window ];
NSRect windowFrame = [ myWindow frame ];
if ( (windowFrame.origin.x != 0) || (windowFrame.origin.y != 0) ) {
// Hide window on second display to aid in debugging
#ifdef _DEBUG
[ myWindow setLevel:kCGMinimumWindowLevel ];
NSInteger alpha = 0;
[ myWindow setAlphaValue:alpha ]; // For OS 10.6
#endif
return; // We draw only to main screen
}
@ -321,7 +355,7 @@ int signof(float x) {
gCurrentDelta.x = -(float)SSRandomIntBetween(MINDELTA, MAXDELTA) / 16.;
gCurrentDelta.y = (float)(SSRandomIntBetween(MINDELTA, MAXDELTA) * signof(gCurrentDelta.y)) / 16.;
}
if (currentDrawingRect.origin.y <= SAFETYBORDER) {
if (currentDrawingRect.origin.y + gTextBoxHeight - gActualTextBoxHeight <= SAFETYBORDER) {
gCurrentDelta.y = (float)SSRandomIntBetween(MINDELTA, MAXDELTA) / 16.;
gCurrentDelta.x = (float)(SSRandomIntBetween(MINDELTA, MAXDELTA) * signof(gCurrentDelta.x)) / 16.;
}
@ -336,46 +370,46 @@ int signof(float x) {
gCurrentDelta.y = 0;
#endif
if (!isErased) {
[[NSColor blackColor] set];
// Erasing only 2 small rectangles reduces screensaver's CPU usage by about 25%
imagePosition.x = (float) ((int)gCurrentPosition.x + gImageXIndent);
imagePosition.y = (float) (int)gCurrentPosition.y;
eraseRect.origin.y = imagePosition.y;
eraseRect.size.height = currentDrawingRect.size.height - gTextBoxHeight;
if (gCurrentDelta.x > 0) {
eraseRect.origin.x = imagePosition.x - 1;
eraseRect.size.width = gCurrentDelta.x + 1;
} else {
eraseRect.origin.x = currentDrawingRect.origin.x + currentDrawingRect.size.width - gImageXIndent + gCurrentDelta.x - 1;
eraseRect.size.width = -gCurrentDelta.x + 1;
}
eraseRect = NSInsetRect(eraseRect, -1, -1);
NSRectFill(eraseRect);
eraseRect.origin.x = imagePosition.x;
eraseRect.size.width = currentDrawingRect.size.width - gImageXIndent - gImageXIndent;
if (gCurrentDelta.y > 0) {
if (!isErased) {
[[NSColor blackColor] set];
// Erasing only 2 small rectangles reduces screensaver's CPU usage by about 25%
imagePosition.x = (float) ((int)gCurrentPosition.x + gImageXIndent);
imagePosition.y = (float) (int)gCurrentPosition.y;
eraseRect.origin.y = imagePosition.y;
eraseRect.size.height = gCurrentDelta.y + 1;
} else {
eraseRect.origin.y = imagePosition.y + currentDrawingRect.size.height - gTextBoxHeight - 1;
eraseRect.size.height = -gCurrentDelta.y + 1;
}
eraseRect = NSInsetRect(eraseRect, -1, -1);
NSRectFill(eraseRect);
eraseRect = currentDrawingRect;
eraseRect.size.height = gTextBoxHeight;
eraseRect = NSInsetRect(eraseRect, -1, -1);
NSRectFill(eraseRect);
eraseRect.size.height = currentDrawingRect.size.height - gTextBoxHeight;
if (gCurrentDelta.x > 0) {
eraseRect.origin.x = imagePosition.x - 1;
eraseRect.size.width = gCurrentDelta.x + 1;
} else {
eraseRect.origin.x = currentDrawingRect.origin.x + currentDrawingRect.size.width - gImageXIndent + gCurrentDelta.x - 1;
eraseRect.size.width = -gCurrentDelta.x + 1;
}
eraseRect = NSInsetRect(eraseRect, -1, -1);
NSRectFill(eraseRect);
eraseRect.origin.x = imagePosition.x;
eraseRect.size.width = currentDrawingRect.size.width - gImageXIndent - gImageXIndent;
isErased = true;
}
if (gCurrentDelta.y > 0) {
eraseRect.origin.y = imagePosition.y;
eraseRect.size.height = gCurrentDelta.y + 1;
} else {
eraseRect.origin.y = imagePosition.y + currentDrawingRect.size.height - gTextBoxHeight - 1;
eraseRect.size.height = -gCurrentDelta.y + 1;
}
eraseRect = NSInsetRect(eraseRect, -1, -1);
NSRectFill(eraseRect);
eraseRect = currentDrawingRect;
eraseRect.size.height = gTextBoxHeight;
eraseRect = NSInsetRect(eraseRect, -1, -1);
NSRectFill(eraseRect);
isErased = true;
}
// Get the new drawing area
gCurrentPosition.x += gCurrentDelta.x;
@ -383,28 +417,68 @@ int signof(float x) {
imagePosition.x = (float) ((int)gCurrentPosition.x + gImageXIndent);
imagePosition.y = (float) (int)gCurrentPosition.y;
// Calculate QuickDraw Rect for current text box
r.left = (float) ((int)gCurrentPosition.x);
r.right = r.left + gMovingRect.size.width;
r.top = viewBounds.size.height - imagePosition.y;
r.bottom = r.top + (int)MAXTEXTBOXHEIGHT;
r.top += TEXTBOXTOPBORDER; // Add a few pixels space below image
TXNTextBoxOptionsData theOptions = {kTXNUseCGContextRefMask | kTXNSetFlushnessMask,
kATSUCenterAlignment, kATSUNoJustification, 0, myContext };
cf_msg = CFStringCreateWithCString(NULL, msg, kCFStringEncodingMacRoman);
[[NSColor whiteColor] set];
[ gBOINC_Logo compositeToPoint:imagePosition operation:NSCompositeCopy ];
err = TXNDrawCFStringTextBox ( cf_msg, &r, theStyle, &theOptions);
gTextBoxHeight = r.bottom - r.top + TEXTBOXTOPBORDER;
if ( (msg != NULL) && (msg[0] != '\0') ) {
cf_msg = CFStringCreateWithCString(NULL, msg, kCFStringEncodingMacRoman);
CGRect bounds = CGRectMake((float) ((int)gCurrentPosition.x),
viewBounds.size.height - imagePosition.y + TEXTBOXTOPBORDER,
gMovingRect.size.width,
MAXTEXTBOXHEIGHT
);
CGContextSaveGState (myContext);
CGContextTranslateCTM (myContext, 0, viewBounds.origin.y + viewBounds.size.height);
CGContextScaleCTM (myContext, 1.0f, -1.0f);
#ifdef __x86_64__
CTFontRef myFont = CTFontCreateWithName(CFSTR("Helvetica"), 20, NULL);
HIThemeTextInfo textInfo = {kHIThemeTextInfoVersionOne, kThemeStateActive, kThemeSpecifiedFont,
kHIThemeTextHorizontalFlushLeft, kHIThemeTextVerticalFlushTop,
kHIThemeTextBoxOptionNone, kHIThemeTextTruncationNone, 0, false,
0, myFont
};
#else
GrafPtr port;
GetPort(&port);
SetPortTextFont(port, kFontIDHelvetica);
SetPortTextSize(port, 20);
HIThemeTextInfo textInfo = {0, kThemeStateActive, kThemeCurrentPortFont, //kThemeMenuItemCmdKeyFont, //kThemePushButtonFont,
kHIThemeTextHorizontalFlushLeft, kHIThemeTextVerticalFlushTop,
kHIThemeTextBoxOptionNone, kHIThemeTextTruncationNone, 0, false
};
#endif
HIThemeGetTextDimensions(cf_msg, (float)gMovingRect.size.width, &textInfo, NULL, &gActualTextBoxHeight, NULL);
gActualTextBoxHeight += TEXTBOXTOPBORDER;
// Use only APIs available in Mac OS 10.3.9
// HIThemeSetTextFill(kThemeTextColorWhite, NULL, myContext, kHIThemeOrientationNormal);
// SetThemeTextColor(kThemeTextColorWhite, 32, true);
CGFloat myWhiteComponents[] = {1.0, 1.0, 1.0, 1.0};
CGColorSpaceRef myColorSpace = CGColorSpaceCreateDeviceRGB ();
CGColorRef myTextColor = CGColorCreate(myColorSpace, myWhiteComponents);
CGContextSetFillColorWithColor(myContext, myTextColor);
HIThemeDrawTextBox(cf_msg, &bounds, &textInfo, myContext, kHIThemeOrientationNormal);
CGColorRelease(myTextColor);
CGColorSpaceRelease(myColorSpace);
CGContextRestoreGState (myContext);
CFRelease(cf_msg);
}
gTextBoxHeight = MAXTEXTBOXHEIGHT + TEXTBOXTOPBORDER;
gMovingRect.size.height = [gBOINC_Logo size].height + gTextBoxHeight;
CFRelease(cf_msg);
isErased = false;
} else { // Empty or NULL message
@ -418,12 +492,13 @@ int signof(float x) {
}
}
if (newFrequency)
if (newFrequency) {
[ self setAnimationTimeInterval:(1.0/newFrequency) ];
// setAnimationTimeInterval does not seem to be working, so we
// throttle the screensaver directly here.
timeToUnblock = AddDurationToAbsolute(durationSecond/newFrequency, frameStartTime);
MPDelayUntil(&timeToUnblock);
// setAnimationTimeInterval does not seem to be working, so we
// throttle the screensaver directly here.
timeToUnblock = AddDurationToAbsolute(durationSecond/newFrequency, frameStartTime);
MPDelayUntil(&timeToUnblock);
}
}
- (BOOL)hasConfigureSheet {
@ -435,10 +510,10 @@ int signof(float x) {
{
// if we haven't loaded our configure sheet, load the nib named MyScreenSaver.nib
if (!mConfigureSheet)
[ NSBundle loadNibNamed:@"BOINCSaver" owner:self ];
[ NSBundle loadNibNamed:@"BOINCSaver" owner:self ];
// set the UI state
[ mGoToBlankCheckbox setState:gGoToBlank ];
mBlankingTimeString = [[ NSString alloc ] initWithFormat:@"%d", gBlankingTime ];
mBlankingTimeString = [[ NSString alloc ] initWithFormat:@"%d", gBlankingTime ];
[ mBlankingTimeTextField setStringValue:mBlankingTimeString ];
return mConfigureSheet;
@ -453,7 +528,7 @@ int signof(float x) {
// save the UI state
gGoToBlank = [ mGoToBlankCheckbox state ];
mBlankingTimeString = [ mBlankingTimeTextField stringValue ];
gBlankingTime = [ mBlankingTimeString intValue ];
gBlankingTime = [ mBlankingTimeString intValue ];
// write the defaults
[ defaults setInteger:gGoToBlank forKey:@"GoToBlank" ];

View File

@ -43,7 +43,7 @@
// Flags for testing & debugging
#define CREATE_LOG 0
#define USE_SPECIAL_LOG_FILE 0
#define USE_SPECIAL_LOG_FILE 1
#define TEXTLOGOFREQUENCY 60 /* Number of times per second to update moving logo with text */
#define NOTEXTLOGOFREQUENCY 4 /* Times per second to call animateOneFrame if no moving logo with text */
@ -72,7 +72,6 @@ extern CFStringRef gPathToBundleResources;
static SaverState saverState = SaverState_Idle;
// int gQuitCounter = 0;
static long gSystemVersion = 0;
const char * CantLaunchCCMsg = "Unable to launch BOINC application.";
@ -91,7 +90,7 @@ const char * DefaultGFXAppCrashedMsg = "Default screensaver module had an unrec
// If there are multiple displays, this may get called
// multiple times (once for each display), so we need to guard
// against any problems that may cause.
int initBOINCSaver() {
void initBOINCSaver() {
#ifdef _DEBUG
char buf1[256], buf2[256];
strcpy(buf1, getenv("HOME"));
@ -107,11 +106,18 @@ int initBOINCSaver() {
if (gspScreensaver == NULL) {
gspScreensaver = new CScreensaver();
}
}
int startBOINCSaver() {
if (gspScreensaver) {
return gspScreensaver->Create();
}
return TEXTLOGOFREQUENCY;
}
int getSSMessage(char **theMessage, int* coveredFreq) {
if (gspScreensaver) {
return gspScreensaver->getSSMessage(theMessage, coveredFreq);
@ -148,9 +154,13 @@ void closeBOINCSaver() {
}
}
double getDTime() {
return dtime();
}
CScreensaver::CScreensaver() {
OSStatus err;
m_dwBlankScreen = 0;
m_dwBlankTime = 0;
m_bErrorMode = false;
@ -171,11 +181,6 @@ CScreensaver::CScreensaver() {
m_bResetCoreState = TRUE;
rpc = 0;
m_bConnected = false;
err = Gestalt(gestaltSystemVersion, &gSystemVersion);
if (err != noErr) {
gSystemVersion = 0;
}
}
@ -245,7 +250,7 @@ OSStatus CScreensaver::initBOINCApp() {
OSStatus err;
static int retryCount = 0;
long brandId = 0;
saverState = SaverState_CantLaunchCoreClient;
brandId = GetBrandID();
@ -273,8 +278,13 @@ OSStatus CScreensaver::initBOINCApp() {
if (++retryCount > 3) // Limit to 3 relaunches to prevent thrashing
return -1;
#ifdef _DEBUG
err = -1;
#else
err = GetpathToBOINCManagerApp(boincPath, sizeof(boincPath));
if (err) { // If we couldn't find BOINCManager.app, try default path
#endif
if (err)
{ // If we couldn't find BOINCManager.app, try default path
strcpy(boincPath, "/Applications/");
if (brandId)
strcat(boincPath, m_BrandText);
@ -544,7 +554,7 @@ void CScreensaver::HandleRPCError() {
bool CScreensaver::CreateDataManagementThread() {
int retval;
if (m_hDataManagementThread == NULL) {
retval = pthread_create(&m_hDataManagementThread, NULL, DataManagementProcStub, 0);
if (retval) {
@ -567,7 +577,7 @@ bool CScreensaver::DestroyDataManagementThread() {
}
if (rpc) {
rpc->close(); // In case DataManagementProc is hung waiting for RPC
rpc->close(); // In case DataManagementProc is hung waiting for RPC
}
m_hDataManagementThread = NULL; // Don't delay more if this routine is called again.
if (m_hGraphicsApplication) {
@ -750,8 +760,8 @@ void print_to_log_file(const char *format, ...) {
f = fopen(buf, "a");
if (!f) return;
freopen(buf, "a", stdout);
freopen(buf, "a", stderr);
// freopen(buf, "a", stdout);
// freopen(buf, "a", stderr);
#else
#define f stderr
#endif

View File

@ -261,7 +261,7 @@ int CScreensaver::terminate_v6_screensaver(int& graphics_application)
// match that of the target process, though in practice that seems
// not to be true on the Mac.
char current_dir[MAXPATHLEN];
char current_dir[PATH_MAX];
char gfx_pid[16];
pid_t thePID;
int i;

View File

@ -220,6 +220,9 @@ void COPROC_CUDA::get(
#ifdef __APPLE__
cudalib = dlopen("/usr/local/cuda/lib/libcudart.dylib", RTLD_NOW);
if (!cudalib) {
cudalib = dlopen("/usr/local/cuda/lib/libcuda.dylib", RTLD_NOW);
}
#else
// libcudart.so is included with the BOINC install for linux,
// so look for it in the current dir.

View File

@ -1998,6 +1998,7 @@
isa = PBXProject;
buildConfigurationList = DD9E2381091CBDAE0048316E /* Build configuration list for PBXProject "boinc" */;
compatibilityVersion = "Xcode 3.0";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
@ -2262,7 +2263,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "if [ \"$BUILD_STYLE\" = \"i386_Deployment\" ] || [ \"$BUILD_STYLE\" = \"ppc_Deployment\" ] || [ \"$BUILD_STYLE\" = \"Deployment\" ]; then\n mkdir \"${BUILT_PRODUCTS_DIR}/SymbolTables\"\n if [ \"${BUILT_PRODUCTS_DIR}/BOINCManager.app/Contents/MacOS/BOINCManager\" -nt \"$TARGET_BUILD_DIR/SymbolTables/BOINCManager_i386\" ]; then\n lipo \"${BUILT_PRODUCTS_DIR}/BOINCManager.app/Contents/MacOS/BOINCManager\" -thin i386 -output \"$TARGET_BUILD_DIR/SymbolTables/BOINCManager_i386\"\n lipo \"${BUILT_PRODUCTS_DIR}/BOINCManager.app/Contents/MacOS/BOINCManager\" -thin ppc -output \"$TARGET_BUILD_DIR/SymbolTables/BOINCManager_ppc\"\n /usr/bin/strip \"${BUILT_PRODUCTS_DIR}/BOINCManager.app/Contents/MacOS/BOINCManager\"\n\ttouch \"$TARGET_BUILD_DIR/SymbolTables/BOINCManager_i386\"\n\ttouch \"$TARGET_BUILD_DIR/SymbolTables/BOINCManager_ppc\"\n fi\nfi\n";
shellScript = "if [ \"$BUILD_STYLE\" = \"i386_Deployment\" ] || [ \"$BUILD_STYLE\" = \"ppc_Deployment\" ] || [ \"$BUILD_STYLE\" = \"Deployment\" ]; then\n mkdir -p \"${BUILT_PRODUCTS_DIR}/SymbolTables\"\n if [ \"${BUILT_PRODUCTS_DIR}/BOINCManager.app/Contents/MacOS/BOINCManager\" -nt \"$TARGET_BUILD_DIR/SymbolTables/BOINCManager_i386\" ]; then\n lipo \"${BUILT_PRODUCTS_DIR}/BOINCManager.app/Contents/MacOS/BOINCManager\" -thin i386 -output \"$TARGET_BUILD_DIR/SymbolTables/BOINCManager_i386\"\n lipo \"${BUILT_PRODUCTS_DIR}/BOINCManager.app/Contents/MacOS/BOINCManager\" -thin ppc -output \"$TARGET_BUILD_DIR/SymbolTables/BOINCManager_ppc\"\n /usr/bin/strip \"${BUILT_PRODUCTS_DIR}/BOINCManager.app/Contents/MacOS/BOINCManager\"\n\ttouch \"$TARGET_BUILD_DIR/SymbolTables/BOINCManager_i386\"\n\ttouch \"$TARGET_BUILD_DIR/SymbolTables/BOINCManager_ppc\"\n fi\nfi\n";
};
DD7355180D9110AE0006A9D1 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
@ -2277,7 +2278,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "if [ \"$BUILD_STYLE\" = \"i386_Deployment\" ] || [ \"$BUILD_STYLE\" = \"ppc_Deployment\" ] || [ \"$BUILD_STYLE\" = \"Deployment-no64\" ] || [ \"$BUILD_STYLE\" = \"Deployment\" ]; then\n mkdir \"${BUILT_PRODUCTS_DIR}/SymbolTables\"\n if [ \"${BUILT_PRODUCTS_DIR}/$PRODUCT_NAME\" -nt \"$TARGET_BUILD_DIR/SymbolTables/${PRODUCT_NAME}_i386\" ]; then\n lipo \"${BUILT_PRODUCTS_DIR}/$PRODUCT_NAME\" -thin i386 -output \"$TARGET_BUILD_DIR/SymbolTables/${PRODUCT_NAME}_i386\"\n lipo \"${BUILT_PRODUCTS_DIR}/$PRODUCT_NAME\" -thin x86_64 -output \"$TARGET_BUILD_DIR/SymbolTables/${PRODUCT_NAME}_x86_64\"\n lipo \"${BUILT_PRODUCTS_DIR}/$PRODUCT_NAME\" -thin ppc -output \"$TARGET_BUILD_DIR/SymbolTables/${PRODUCT_NAME}_ppc\"\n /usr/bin/strip \"${BUILT_PRODUCTS_DIR}/$PRODUCT_NAME\"\n touch \"$TARGET_BUILD_DIR/SymbolTables/${PRODUCT_NAME}_i386\"\n touch \"$TARGET_BUILD_DIR/SymbolTables/${PRODUCT_NAME}_x86_64\"\n touch \"$TARGET_BUILD_DIR/SymbolTables/${PRODUCT_NAME}_ppc\"\n fi\nfi";
shellScript = "if [ \"$BUILD_STYLE\" = \"i386_Deployment\" ] || [ \"$BUILD_STYLE\" = \"ppc_Deployment\" ] || [ \"$BUILD_STYLE\" = \"Deployment-no64\" ] || [ \"$BUILD_STYLE\" = \"Deployment\" ]; then\n mkdir -p \"${BUILT_PRODUCTS_DIR}/SymbolTables\"\n if [ \"${BUILT_PRODUCTS_DIR}/$PRODUCT_NAME\" -nt \"$TARGET_BUILD_DIR/SymbolTables/${PRODUCT_NAME}_i386\" ]; then\n lipo \"${BUILT_PRODUCTS_DIR}/$PRODUCT_NAME\" -thin i386 -output \"$TARGET_BUILD_DIR/SymbolTables/${PRODUCT_NAME}_i386\"\n lipo \"${BUILT_PRODUCTS_DIR}/$PRODUCT_NAME\" -thin x86_64 -output \"$TARGET_BUILD_DIR/SymbolTables/${PRODUCT_NAME}_x86_64\"\n lipo \"${BUILT_PRODUCTS_DIR}/$PRODUCT_NAME\" -thin ppc -output \"$TARGET_BUILD_DIR/SymbolTables/${PRODUCT_NAME}_ppc\"\n /usr/bin/strip \"${BUILT_PRODUCTS_DIR}/$PRODUCT_NAME\"\n touch \"$TARGET_BUILD_DIR/SymbolTables/${PRODUCT_NAME}_i386\"\n touch \"$TARGET_BUILD_DIR/SymbolTables/${PRODUCT_NAME}_x86_64\"\n touch \"$TARGET_BUILD_DIR/SymbolTables/${PRODUCT_NAME}_ppc\"\n fi\nfi";
};
DD73551E0D9111150006A9D1 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
@ -3252,7 +3253,6 @@
DD62C37D0A801FB400B3D68A /* Dev_noSandbox */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
OTHER_LDFLAGS = "";
PRODUCT_NAME = boinc;
};
@ -3261,7 +3261,6 @@
DD62C37E0A801FB400B3D68A /* Deploy_noSandbox */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
OTHER_LDFLAGS = "";
PRODUCT_NAME = boinc;
};
@ -3270,7 +3269,6 @@
DD62C3810A801FB400B3D68A /* Dev_noSandbox */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
PRODUCT_NAME = boinc_api;
};
name = Dev_noSandbox;
@ -3278,7 +3276,6 @@
DD62C3820A801FB400B3D68A /* Deploy_noSandbox */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
PRODUCT_NAME = boinc_api;
};
name = Deploy_noSandbox;
@ -3335,10 +3332,10 @@
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEPLOYMENT_POSTPROCESSING = YES;
HEADER_SEARCH_PATHS = "../../curl-7.19.4/include";
HEADER_SEARCH_PATHS = "../../curl-7.21.7/include";
OTHER_LDFLAGS = (
"../../curl-7.19.4/lib/.libs/libcurl.a",
"../../c-ares-1.6.0/.libs/libcares.a",
"../../curl-7.21.7/lib/.libs/libcurl.a",
"../../c-ares-1.7.4/.libs/libcares.a",
"-lcrypto",
"-lssl",
"-lldap",
@ -3360,10 +3357,10 @@
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEPLOYMENT_POSTPROCESSING = YES;
HEADER_SEARCH_PATHS = "../../curl-7.19.4/include";
HEADER_SEARCH_PATHS = "../../curl-7.21.7/include";
OTHER_LDFLAGS = (
"../../curl-7.19.4/lib/.libs/libcurl.a",
"../../c-ares-1.6.0/.libs/libcares.a",
"../../curl-7.21.7/lib/.libs/libcurl.a",
"../../c-ares-1.7.4/.libs/libcares.a",
"-lcrypto",
"-lssl",
"-lldap",
@ -3451,7 +3448,6 @@
isa = XCBuildConfiguration;
buildSettings = {
DEBUG_INFORMATION_FORMAT = stabs;
GCC_VERSION_ppc = 3.3;
OTHER_LDFLAGS = "-lboinc";
PRODUCT_NAME = boinccmd;
};
@ -3461,7 +3457,6 @@
isa = XCBuildConfiguration;
buildSettings = {
DEBUG_INFORMATION_FORMAT = stabs;
GCC_VERSION_ppc = 3.3;
OTHER_LDFLAGS = "-lboinc";
PRODUCT_NAME = boinccmd;
};
@ -3712,6 +3707,7 @@
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GCC_VERSION = 4.0;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
LIBRARY_STYLE = STATIC;
MACOSX_DEPLOYMENT_TARGET = 10.4;
@ -3726,9 +3722,9 @@
);
PREBINDING = NO;
SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
"SDKROOT[arch=ppc]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
"SDKROOT[arch=ppc]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
"SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
SDKROOT_x86_64 = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
STRIP_INSTALLED_PRODUCT = NO;
WARNING_CFLAGS = (
@ -3753,6 +3749,7 @@
GCC_FAST_MATH = NO;
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GCC_VERSION = 4.0;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
LIBRARY_STYLE = STATIC;
MACOSX_DEPLOYMENT_TARGET = 10.4;
@ -3767,9 +3764,9 @@
);
PREBINDING = NO;
SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
"SDKROOT[arch=ppc]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
"SDKROOT[arch=ppc]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
"SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
SDKROOT_x86_64 = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
STRIP_INSTALLED_PRODUCT = YES;
WARNING_CFLAGS = (
@ -4130,6 +4127,7 @@
GCC_FAST_MATH = NO;
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GCC_VERSION = 4.0;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
LIBRARY_STYLE = STATIC;
MACOSX_DEPLOYMENT_TARGET = 10.4;
@ -4145,9 +4143,9 @@
);
PREBINDING = NO;
SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
"SDKROOT[arch=ppc]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
"SDKROOT[arch=ppc]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
"SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
SDKROOT_x86_64 = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
STRIP_INSTALLED_PRODUCT = YES;
WARNING_CFLAGS = (
@ -4185,10 +4183,10 @@
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEPLOYMENT_POSTPROCESSING = YES;
HEADER_SEARCH_PATHS = "../../curl-7.19.4/include";
HEADER_SEARCH_PATHS = "../../curl-7.21.7/include";
OTHER_LDFLAGS = (
"../../curl-7.19.4/lib/.libs/libcurl.a",
"../../c-ares-1.6.0/.libs/libcares.a",
"../../curl-7.21.7/lib/.libs/libcurl.a",
"../../c-ares-1.7.4/.libs/libcares.a",
"-lcrypto",
"-lssl",
"-lldap",
@ -4204,7 +4202,6 @@
isa = XCBuildConfiguration;
buildSettings = {
DEBUG_INFORMATION_FORMAT = stabs;
GCC_VERSION_ppc = 3.3;
OTHER_LDFLAGS = "-lboinc";
PRODUCT_NAME = boinccmd;
};
@ -4213,7 +4210,6 @@
DD96706B0CED9A800009D32B /* Deployment-no64 */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
OTHER_LDFLAGS = "";
PRODUCT_NAME = boinc;
};
@ -4222,7 +4218,6 @@
DD96706D0CED9A800009D32B /* Deployment-no64 */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
HEADER_SEARCH_PATHS = "../../jpeg-6b";
PRODUCT_NAME = boinc_graphics2;
};
@ -4231,7 +4226,6 @@
DD96706E0CED9A800009D32B /* Deployment-no64 */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
PRODUCT_NAME = boinc_api;
};
name = "Deployment-no64";
@ -4422,7 +4416,6 @@
ppc,
x86_64,
);
GCC_VERSION_ppc = 3.3;
OTHER_CFLAGS = (
"-DMAC_OS_X_VERSION_MAX_ALLOWED=1040",
"-D_THREAD_SAFE",
@ -4461,7 +4454,6 @@
ppc,
x86_64,
);
GCC_VERSION_ppc = 3.3;
"OTHER_CFLAGS[arch=ppc]" = (
"-DMAC_OS_X_VERSION_MAX_ALLOWED=1030",
"-D_THREAD_SAFE",
@ -4494,7 +4486,22 @@
DD9843DD09920F220090855B /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
i386,
ppc,
x86_64,
);
GCC_ENABLE_OBJC_GC = supported;
INFOPLIST_FILE = "ScreenSaver-Info.plist";
"MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.6;
"OTHER_CFLAGS[arch=x86_64]" = (
"-DMAC_OS_X_VERSION_MAX_ALLOWED=1060",
"-D_THREAD_SAFE",
"-DNDEBUG",
"-DSANDBOX",
"-include",
../clientgui/mac/config.h,
);
OTHER_LDFLAGS = (
"-framework",
Foundation,
@ -4502,6 +4509,8 @@
AppKit,
);
PRODUCT_NAME = BOINCSaver;
"SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk";
SDKROOT_x86_64 = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk";
WRAPPER_EXTENSION = saver;
};
name = Deployment;
@ -4517,7 +4526,7 @@
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEPLOYMENT_POSTPROCESSING = YES;
HEADER_SEARCH_PATHS = "../../curl-7.19.4/include";
HEADER_SEARCH_PATHS = "../../curl-7.21.7/include";
"OTHER_CFLAGS[arch=x86_64]" = (
"-DMAC_OS_X_VERSION_MAX_ALLOWED=1050",
"-D_THREAD_SAFE",
@ -4527,8 +4536,8 @@
../clientgui/mac/config.h,
);
OTHER_LDFLAGS = (
"../../curl-7.19.4/lib/.libs/libcurl.a",
"../../c-ares-1.6.0/.libs/libcares.a",
"../../curl-7.21.7/lib/.libs/libcurl.a",
"../../c-ares-1.7.4/.libs/libcares.a",
"-lcrypto",
"-lssl",
"-lldap",
@ -4581,7 +4590,6 @@
isa = XCBuildConfiguration;
buildSettings = {
DEBUG_INFORMATION_FORMAT = stabs;
GCC_VERSION_ppc = 3.3;
"OTHER_CFLAGS[arch=ppc]" = (
"-DMAC_OS_X_VERSION_MAX_ALLOWED=1030",
"-D_THREAD_SAFE",
@ -4638,6 +4646,7 @@
GCC_FAST_MATH = NO;
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GCC_VERSION = 4.0;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
LIBRARY_STYLE = STATIC;
MACOSX_DEPLOYMENT_TARGET = 10.4;
@ -4655,9 +4664,9 @@
);
PREBINDING = NO;
SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
"SDKROOT[arch=ppc]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
"SDKROOT[arch=ppc]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
"SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
SDKROOT_x86_64 = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
STRIP_INSTALLED_PRODUCT = YES;
WARNING_CFLAGS = (
@ -4671,7 +4680,6 @@
DD9E2352091CBDAE0048316E /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
OTHER_LDFLAGS = "";
PRODUCT_NAME = boinc;
};
@ -4680,7 +4688,6 @@
DD9E2353091CBDAE0048316E /* ppc_Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
OTHER_LDFLAGS = "";
PRODUCT_NAME = boinc;
};
@ -4689,7 +4696,6 @@
DD9E235A091CBDAE0048316E /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
PRODUCT_NAME = boinc_api;
};
name = Development;
@ -4697,7 +4703,6 @@
DD9E235B091CBDAE0048316E /* ppc_Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
PRODUCT_NAME = boinc_api;
};
name = ppc_Deployment;
@ -4755,10 +4760,10 @@
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEPLOYMENT_POSTPROCESSING = YES;
HEADER_SEARCH_PATHS = "../../curl-7.19.4/include";
HEADER_SEARCH_PATHS = "../../curl-7.21.7/include";
OTHER_LDFLAGS = (
"../../curl-7.19.4/lib/.libs/libcurl.a",
"../../c-ares-1.6.0/.libs/libcares.a",
"../../curl-7.21.7/lib/.libs/libcurl.a",
"../../c-ares-1.7.4/.libs/libcares.a",
"-lcrypto",
"-lssl",
"-lldap",
@ -4777,10 +4782,10 @@
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEPLOYMENT_POSTPROCESSING = YES;
HEADER_SEARCH_PATHS = "../../curl-7.19.4/include";
HEADER_SEARCH_PATHS = "../../curl-7.21.7/include";
OTHER_LDFLAGS = (
"../../curl-7.19.4/lib/.libs/libcurl.a",
"../../c-ares-1.6.0/.libs/libcares.a",
"../../curl-7.21.7/lib/.libs/libcurl.a",
"../../c-ares-1.7.4/.libs/libcares.a",
"-lcrypto",
"-lssl",
"-lldap",
@ -4870,7 +4875,6 @@
isa = XCBuildConfiguration;
buildSettings = {
DEBUG_INFORMATION_FORMAT = stabs;
GCC_VERSION_ppc = 3.3;
OTHER_LDFLAGS = "-lboinc";
PRODUCT_NAME = boinccmd;
};
@ -4880,7 +4884,6 @@
isa = XCBuildConfiguration;
buildSettings = {
DEBUG_INFORMATION_FORMAT = stabs;
GCC_VERSION_ppc = 3.3;
OTHER_LDFLAGS = "-lboinc";
PRODUCT_NAME = boinccmd;
};
@ -4952,6 +4955,7 @@
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GCC_VERSION = 4.0;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
LIBRARY_STYLE = STATIC;
MACOSX_DEPLOYMENT_TARGET = 10.4;
@ -4967,9 +4971,9 @@
);
PREBINDING = NO;
SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
"SDKROOT[arch=ppc]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
"SDKROOT[arch=ppc]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
"SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
SDKROOT_x86_64 = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
STRIP_INSTALLED_PRODUCT = NO;
WARNING_CFLAGS = (
@ -4990,6 +4994,7 @@
DEPLOYMENT_POSTPROCESSING = YES;
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GCC_VERSION = 4.0;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
LIBRARY_STYLE = STATIC;
MACOSX_DEPLOYMENT_TARGET = 10.4;
@ -5005,9 +5010,9 @@
);
PREBINDING = NO;
SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
"SDKROOT[arch=ppc]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
"SDKROOT[arch=ppc]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
"SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
SDKROOT_x86_64 = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
STRIP_INSTALLED_PRODUCT = YES;
WARNING_CFLAGS = (
@ -5021,7 +5026,6 @@
DDA2D1570952A93E00D0B538 /* i386_Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
OTHER_LDFLAGS = "";
PRODUCT_NAME = boinc;
};
@ -5030,7 +5034,6 @@
DDA2D1590952A93E00D0B538 /* i386_Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
PRODUCT_NAME = boinc_api;
};
name = i386_Deployment;
@ -5065,10 +5068,10 @@
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEPLOYMENT_POSTPROCESSING = YES;
HEADER_SEARCH_PATHS = "../../curl-7.19.4/include";
HEADER_SEARCH_PATHS = "../../curl-7.21.7/include";
OTHER_LDFLAGS = (
"../../curl-7.19.4/lib/.libs/libcurl.a",
"../../c-ares-1.6.0/.libs/libcares.a",
"../../curl-7.21.7/lib/.libs/libcurl.a",
"../../c-ares-1.7.4/.libs/libcares.a",
"-lcrypto",
"-lssl",
"-lldap",
@ -5121,7 +5124,6 @@
isa = XCBuildConfiguration;
buildSettings = {
DEBUG_INFORMATION_FORMAT = stabs;
GCC_VERSION_ppc = 3.3;
OTHER_LDFLAGS = "-lboinc";
PRODUCT_NAME = boinccmd;
};
@ -5166,6 +5168,7 @@
GCC_FAST_MATH = NO;
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GCC_VERSION = 4.0;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
LIBRARY_STYLE = STATIC;
MACOSX_DEPLOYMENT_TARGET = 10.4;
@ -5181,9 +5184,9 @@
);
PREBINDING = NO;
SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
"SDKROOT[arch=ppc]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
"SDKROOT[arch=ppc]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
"SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk";
SDKROOT_ppc = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
SDKROOT_x86_64 = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
STRIP_INSTALLED_PRODUCT = YES;
WARNING_CFLAGS = (
@ -5197,7 +5200,6 @@
DDB873FD0C850BC800E0DE1F /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
HEADER_SEARCH_PATHS = "../../jpeg-6b";
PRODUCT_NAME = boinc_graphics2;
};
@ -5206,7 +5208,6 @@
DDB873FE0C850BC800E0DE1F /* Dev_noSandbox */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
HEADER_SEARCH_PATHS = "../../jpeg-6b";
PRODUCT_NAME = boinc_graphics2;
};
@ -5215,7 +5216,6 @@
DDB873FF0C850BC800E0DE1F /* ppc_Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
HEADER_SEARCH_PATHS = "../../jpeg-6b";
PRODUCT_NAME = boinc_graphics2;
};
@ -5224,7 +5224,6 @@
DDB874000C850BC800E0DE1F /* i386_Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
HEADER_SEARCH_PATHS = "../../jpeg-6b";
PRODUCT_NAME = boinc_graphics2;
};
@ -5238,7 +5237,6 @@
ppc,
x86_64,
);
GCC_VERSION_ppc = 3.3;
HEADER_SEARCH_PATHS = "../../jpeg-6b";
"OTHER_CFLAGS[arch=ppc]" = (
"-DMAC_OS_X_VERSION_MAX_ALLOWED=1030",
@ -5264,7 +5262,6 @@
DDB874020C850BC800E0DE1F /* Deploy_noSandbox */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_VERSION_ppc = 3.3;
HEADER_SEARCH_PATHS = "../../jpeg-6b";
PRODUCT_NAME = boinc_graphics2;
};

View File

@ -18,52 +18,26 @@
# along with BOINC. If not, see <http://www.gnu.org/licenses/>.
#
#
# Script to build Macintosh Universal Binary library of c-ares-1.6.0 for
# Script to build Macintosh Universal Binary library of c-ares-1.7.4 for
# use in building BOINC.
#
# by Charlie Fenton 7/21/06
# Updated 12/17/08
# Updated 12/3/09 for OS 10.6 Snow Leopard and XCode 3.2.1
# Updated 8/4/11 for c-ares 1.7.4
#
## In Terminal, CD to the c-ares-1.6.0 directory.
## cd [path]/c-ares-1.6.0/
## In Terminal, CD to the c-ares-1.7.4 directory.
## cd [path]/c-ares-1.7.4/
## then run this script:
## source [path]/buildc-ares.sh [ -clean ] [ -gcc33 ]
## source [path]/buildc-ares.sh [ -clean ]
##
## the -clean argument will force a full rebuild.
##
## the -gcc33 argument will cause the PowerPC build to use gcc-3.3
## otherwise both architectures will be built using gcc_4.0
##
## Use -gcc33 if you need to link with a project application using BOINC
## libraries built with gcc-3.3 for backward compatibility to OS 10.3.0
##
## Build with gcc-4.0 to link with the BOINC client
#
AlreadyBuilt=0
if [ "$1" != "-clean" ]; then
if [ -f .libs/libcares_ppc.a ] && [ -f .libs/libcares_i386.a ] && [ -f .libs/libcares.a ]; then
AlreadyBuilt=1
fi
fi
if [ -d /Developer/SDKs/MacOSX10.5.sdk/ ]; then
# Build for x86_64 architecture if OS 10.5 SDK is present
if [ ! -f .libs/libcares_x86_64.a ]; then
AlreadyBuilt=0
fi
fi
if [ $AlreadyBuilt -ne 0 ]; then
echo "c-ares-1.6.0 already built"
echo "c-ares-1.7.4 already built"
return 0
fi
if [ ! -d /Developer/SDKs/MacOSX10.3.9.sdk/ ]; then
echo "ERROR: System 10.3.9 SDK is missing. For details, see build instructions at"
echo "boinc/mac_build/HowToBuildBOINC_XCode.rtf or http://boinc.berkeley.edu/trac/wiki/MacBuild"
return 1
fi
if [ ! -d /Developer/SDKs/MacOSX10.4u.sdk/ ]; then
@ -72,43 +46,20 @@ if [ ! -d /Developer/SDKs/MacOSX10.4u.sdk/ ]; then
return 1
fi
if [ "$1" = "-gcc33" ] || [ "$2" = "-gcc33" ]; then
usegcc33=1
else
usegcc33=0
fi
export PATH=/usr/local/bin:$PATH
export SDKROOT="/Developer/SDKs/MacOSX10.3.9.sdk"
export MACOSX_DEPLOYMENT_TARGET=10.3
rm -f .libs/libcares.a
rm -f .libs/libcares_ppc.a
rm -f .libs/libcares_i386.a
rm -f .libs/libcares_x86_64.a
if [ $usegcc33 -ne 0 ]; then
export CC=/usr/bin/gcc-3.3;export CXX=/usr/bin/g++-3.3
export LDFLAGS="-arch ppc -D_NONSTD_SOURCE -isystem /Developer/SDKs/MacOSX10.3.9.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.3.9.sdk"
export CPPFLAGS="-arch ppc -D_NONSTD_SOURCE -isystem /Developer/SDKs/MacOSX10.3.9.sdk"
export CFLAGS="-arch ppc -D_NONSTD_SOURCE -isystem /Developer/SDKs/MacOSX10.3.9.sdk"
# curl configure and make expect a path to _installed_ c-ares-1.6.0
# so set a temporary install path that does not contain spaces.
./configure --enable-shared=NO prefix=/tmp/installed-c-ares --host=ppc
if [ $? -ne 0 ]; then return 1; fi
else
export CC=/usr/bin/gcc-4.0;export CXX=/usr/bin/g++-4.0
export LDFLAGS="-isysroot /Developer/SDKs/MacOSX10.3.9.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.3.9.sdk -arch ppc"
export CPPFLAGS="-isysroot /Developer/SDKs/MacOSX10.3.9.sdk -arch ppc"
export CFLAGS="-isysroot /Developer/SDKs/MacOSX10.3.9.sdk -arch ppc"
export LDFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch ppc"
export CPPFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc"
export CFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc"
export SDKROOT="/Developer/SDKs/MacOSX10.4u.sdk"
export MACOSX_DEPLOYMENT_TARGET=10.4
./configure --enable-shared=NO prefix=/tmp/installed-c-ares --host=ppc
fi
if [ $? -ne 0 ]; then return 1; fi
@ -116,12 +67,14 @@ make clean
make
if [ $? -ne 0 ]; then return 1; fi
# c-ares configure creates a different ares_build.h file for each architecture
cp -f ares_build.h ares_build_ppc.h
mv -f .libs/libcares.a libcares_ppc.a
make clean
if [ $? -ne 0 ]; then return 1; fi
##export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/bin:$PATH
export CC=/usr/bin/gcc-4.0;export CXX=/usr/bin/g++-4.0
export LDFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch i386"
export CPPFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386"
@ -141,17 +94,8 @@ export CPPFLAGS=""
export CFLAGS=""
export SDKROOT=""
if [ ! -d /Developer/SDKs/MacOSX10.5.sdk/ ]; then
mv -f .libs/libcares.a .libs/libcares_i386.a
mv -f libcares_ppc.a .libs/
lipo -create .libs/libcares_i386.a .libs/libcares_ppc.a -output .libs/libcares.a
if [ $? -ne 0 ]; then return 1; fi
return 0
fi
# Build for x86_64 architecture if OS 10.5 SDK is present
# c-ares configure creates a different ares_build.h file for each architecture
cp -f ares_build.h ares_build_i386.h
mv -f .libs/libcares.a libcares_i386.a
make clean
@ -177,6 +121,8 @@ export CPPFLAGS=""
export CFLAGS=""
export SDKROOT=""
# c-ares configure creates a different ares_build.h file for each architecture
cp -f ares_build.h ares_build_x86_64.h
mv -f .libs/libcares.a .libs/libcares_x86_64.a
mv -f libcares_ppc.a .libs/
mv -f libcares_i386.a .libs/

View File

@ -18,58 +18,26 @@
# along with BOINC. If not, see <http://www.gnu.org/licenses/>.
#
#
# Script to build Macintosh Universal Binary library of curl-7.19.4 for
# Script to build Macintosh Universal Binary library of curl-7.21.7 for
# use in building BOINC.
#
# by Charlie Fenton 7/21/06
# Updated 3/3/09
# Updated 12/3/09 for OS 10.6 Snow Leopard and XCode 3.2.1
# Updated 8/4/11 for curl 7.21.7
#
## In Terminal, CD to the curl-7.19.4 directory.
## cd [path]/curl-7.19.4/
## In Terminal, CD to the curl-7.21.7 directory.
## cd [path]/curl-7.21.7/
## then run this script:
## source [path]/buildcurl.sh [ -clean ] [ -gcc33 ]
## source [path]/buildcurl.sh [ -clean ]
##
## the -clean argument will force a full rebuild.
##
## the -gcc33 argument will cause the PowerPC build to use gcc-3.3
## otherwise both architectures will be built using gcc_4.0
##
## Use -gcc33 if you need to link with a project application using BOINC
## libraries built with gcc-3.3 for backward compatibility to OS 10.3.0
##
## Build with gcc-4.0 to link with the BOINC client
#
AlreadyBuilt=0
if [ "$1" != "-clean" ]; then
if [ -f lib/.libs/libcurl_ppc.a ] && [ -f lib/.libs/libcurl_i386.a ] && [ -f lib/.libs/libcurl.a ]; then
AlreadyBuilt=1
fi
fi
if [ -d /Developer/SDKs/MacOSX10.5.sdk/ ]; then
# Build for x86_64 architecture if OS 10.5 SDK is present
if [ ! -f lib/.libs/libcurl_x86_64.a ]; then
AlreadyBuilt=0
fi
fi
if [ $AlreadyBuilt -ne 0 ]; then
echo "curl-7.19.4 already built"
echo "curl-7.21.7 already built"
return 0
fi
if [ "$1" = "-gcc33" ] || [ "$2" = "-gcc33" ]; then
usegcc33=1
else
usegcc33=0
fi
if [ ! -d /Developer/SDKs/MacOSX10.3.9.sdk/ ]; then
echo "ERROR: System 10.3.9 SDK is missing. For details, see build instructions at"
echo "boinc/mac_build/HowToBuildBOINC_XCode.rtf or http://boinc.berkeley.edu/trac/wiki/MacBuild"
return 1
fi
if [ ! -d /Developer/SDKs/MacOSX10.4u.sdk/ ]; then
@ -81,14 +49,12 @@ fi
export PATH=/usr/local/bin:$PATH
CURL_DIR=`pwd`
# curl configure and make expect a path to _installed_ c-ares-1.6.0
# curl configure and make expect a path to _installed_ c-ares-1.7.4
# so temporarily install c-ares at a path that does not contain spaces.
cd ../c-ares-1.6.0
cd ../c-ares-1.7.4
make install
cd "${CURL_DIR}"
export SDKROOT="/Developer/SDKs/MacOSX10.3.9.sdk"
export MACOSX_DEPLOYMENT_TARGET=10.3
rm -f lib/.libs/libcurl.a
rm -f lib/.libs/libcurl_ppc.a
@ -101,24 +67,17 @@ rm -f include/curl/curlbuild_ppc.h
rm -f include/curl/curlbuild_i386.h
rm -f include/curl/curlbuild_x86_64.h
if [ $usegcc33 -ne 0 ]; then
export CC=/usr/bin/gcc-3.3;export CXX=/usr/bin/g++-3.3
export LDFLAGS="-arch ppc -D_NONSTD_SOURCE -isystem /Developer/SDKs/MacOSX10.3.9.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.3.9.sdk"
export CPPFLAGS="-arch ppc -D_NONSTD_SOURCE -isystem /Developer/SDKs/MacOSX10.3.9.sdk"
export CFLAGS="-arch ppc -D_NONSTD_SOURCE -isystem /Developer/SDKs/MacOSX10.3.9.sdk"
else
export CC=/usr/bin/gcc-4.0;export CXX=/usr/bin/g++-4.0
export LDFLAGS=" -isysroot /Developer/SDKs/MacOSX10.3.9.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.3.9.sdk -arch ppc"
export CPPFLAGS="-isysroot /Developer/SDKs/MacOSX10.3.9.sdk -arch ppc"
export CFLAGS="-isysroot /Developer/SDKs/MacOSX10.3.9.sdk -arch ppc"
export LDFLAGS=" -isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch ppc"
export CPPFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -DMAC_OS_X_VERSION_MAX_ALLOWED=1030 -DMAC_OS_X_VERSION_MIN_REQUIRED=1030"
export CFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -DMAC_OS_X_VERSION_MAX_ALLOWED=1030 -DMAC_OS_X_VERSION_MIN_REQUIRED=1030"
export SDKROOT="/Developer/SDKs/MacOSX10.4u.sdk"
export MACOSX_DEPLOYMENT_TARGET=10.3
fi
# c-ares configure creates a different ares_build.h file for each architecture
cp -f ../c-ares-1.7.4/ares_build_ppc.h /tmp/installed-c-ares/include/ares_build.h
./configure --enable-shared=NO --enable-ares=/tmp/installed-c-ares --host=ppc
if [ $? -ne 0 ]; then return 1; fi
make clean
@ -131,37 +90,22 @@ mv -f lib/.libs/libcurl.a lib/libcurl_ppc.a
make clean
if [ $? -ne 0 ]; then return 1; fi
##export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/bin:$PATH
export CC=/usr/bin/gcc-4.0;export CXX=/usr/bin/g++-4.0
export LDFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch i386"
export CPPFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386"
export CFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386"
export CPPFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -DMAC_OS_X_VERSION_MAX_ALLOWED=1030 -DMAC_OS_X_VERSION_MIN_REQUIRED=1030"
export CFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -DMAC_OS_X_VERSION_MAX_ALLOWED=1030 -DMAC_OS_X_VERSION_MIN_REQUIRED=1030"
export SDKROOT="/Developer/SDKs/MacOSX10.4u.sdk"
export MACOSX_DEPLOYMENT_TARGET=10.4
# c-ares configure creates a different ares_build.h file for each architecture
cp -f ../c-ares-1.7.4/ares_build_i386.h /tmp/installed-c-ares/include/ares_build.h
./configure --enable-shared=NO --enable-ares=/tmp/installed-c-ares --host=i386
if [ $? -ne 0 ]; then return 1; fi
make
if [ $? -ne 0 ]; then return 1; fi
export CC="";export CXX=""
export LDFLAGS=""
export CPPFLAGS=""
export CFLAGS=""
export SDKROOT=""
if [ ! -d /Developer/SDKs/MacOSX10.5.sdk/ ]; then
mv -f lib/.libs/libcurl.a lib/.libs/libcurl_i386.a
mv -f lib/libcurl_ppc.a lib/.libs/
lipo -create lib/.libs/libcurl_i386.a lib/.libs/libcurl_ppc.a -output lib/.libs/libcurl.a
if [ $? -ne 0 ]; then return 1; fi
return 0
fi
# Build for x86_64 architecture if OS 10.5 SDK is present
mv -f include/curl/curlbuild.h include/curl/curlbuild_i386.h
mv -f lib/.libs/libcurl.a lib/libcurl_i386.a
@ -176,6 +120,9 @@ export CFLAGS="-isysroot /Developer/SDKs/MacOSX10.5.sdk -arch x86_64"
export SDKROOT="/Developer/SDKs/MacOSX10.5.sdk"
export MACOSX_DEPLOYMENT_TARGET=10.5
# c-ares configure creates a different ares_build.h file for each architecture
cp -f ../c-ares-1.7.4/ares_build_x86_64.h /tmp/installed-c-ares/include/ares_build.h
./configure --enable-shared=NO --enable-ares=/tmp/installed-c-ares --host=x86_64
if [ $? -ne 0 ]; then return 1; fi

View File

@ -19,10 +19,10 @@
#
#
# Master script to build Universal Binary libraries needed by BOINC:
# curl-7.19.4 with c-ares-1.6.0, jpeg-6b and wxMac-2.8.10
# curl-7.21.7 with c-ares-1.7.4, jpeg-6b and wxMac-2.8.10
#
# by Charlie Fenton 7/21/06
# Updated 4/17/08 for curl-7.19.4, c-ares-1.6.0 and wxMac-2.8.10 and Unicode
# Updated 8/4/11 for curl-7.21.7, c-ares-1.7.4 and wxMac-2.8.10 and Unicode
#
# Download these three packages and place them in a common parent
# directory with the BOINC source tree.
@ -48,24 +48,24 @@ SCRIPT_DIR=`pwd`
echo ""
echo "----------------------------------"
echo "------- BUILD C-ARES-1.6.0 -------"
echo "------- BUILD C-ARES-1.7.4 -------"
echo "----------------------------------"
echo ""
cd ../../c-ares-1.6.0/
cd ../../c-ares-1.7.4/
if [ $? -ne 0 ]; then return 1; fi
source "${SCRIPT_DIR}/buildc-ares.sh" ${doclean}
if [ $? -ne 0 ]; then return 1; fi
echo ""
echo "----------------------------------"
echo "------- BUILD CURL-7.19.4 --------"
echo "------- BUILD CURL-7.21.7 --------"
echo "----------------------------------"
echo ""
cd "${SCRIPT_DIR}"
cd ../../curl-7.19.4/
cd ../../curl-7.21.7/
if [ $? -ne 0 ]; then return 1; fi
source "${SCRIPT_DIR}/buildcurl.sh" ${doclean}
if [ $? -ne 0 ]; then return 1; fi

View File

@ -1,6 +1,6 @@
{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
{\colortbl;\red255\green255\blue255;\red2\green87\blue173;}
\margl1440\margr1440\vieww9000\viewh9000\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc
@ -12,18 +12,25 @@
\cf0 http://gridrepublic.org\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural
\cf0 \
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural
\b Installing GridRepublic Desktop may take several minutes; please be patient.
\b \cf0 Installing GridRepublic Desktop may take several minutes; please be patient.
\b0 \
\
\b Dual GPU Macbook Pros:
\b0 Some newer Macbook Pros have dual graphics processors, one that is more powerful and another that is more energy-efficient, and they switch between them automatically. This can cause your screensaver to flash on and off frequently, and can prevent GridRepublic Desktop from detecting the more powerful GPU which is needed to process some applications. You can force selection either {\field{\*\fldinst{HYPERLINK "http://support.apple.com/kb/HT4110"}}{\fldrslt \cf2 permanently}} or temporarily using a {\field{\*\fldinst{HYPERLINK "http://codykrieger.com/gfxCardStatus/"}}{\fldrslt \cf2 third-party utility}}. But be aware that forcing the use of the NVIDIA GPU may cause faster battery drain; this of course is not an issue when running on AC power.\
\
If you are upgrading from a version earlier than 6.8.0, you may see a message "Failed to convert file GridRepublic Desktop Preferences to Unicode." This is due to our addition of full Unicode support to the GridRepublic Desktop. If you get this message, you may need to readjust your column widths and other GridRepublic Desktop view options, but no other problems will result. When you quit GridRepublic Desktop, these settings will be saved in the new Unicode format.\
\
Due to new restrictions imposed by OS 10.6 Snow Leopard, there has been a change in GridRepublic Desktop's security implementation. Non-administrative users can no longer run GridRepublic Desktop unless they are added to group boinc_master. As of GridRepublic Desktop 6.10.5, the GridRepublic Desktop installer asks whether or not you wish to allow this.\
Due to new restrictions imposed by OS 10.6 Snow Leopard, there has been a change in GridRepublic Desktop's security implementation. Non-administrative users can no longer run GridRepublic Desktop unless they are added to group boinc_master. As of GridRepublic Desktop 6.8.29, the GridRepublic Desktop installer asks whether or not you wish to allow this.\
\
For more options, please see the BOINC Macintosh administrator tools at:\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural
{\field{\*\fldinst{HYPERLINK "http://boinc.berkeley.edu/wiki/Tools_for_Mac_OS_X"}}{\fldrslt \cf0 http://boinc.berkeley.edu/wiki/Tools_for_Mac_OS_X}}\
\
GridRepublic Desktop on the Mac now supports processing with your graphics card, or GPU. Please see {\field{\*\fldinst{HYPERLINK "http://boinc.berkeley.edu/gpu.php"}}{\fldrslt http://boinc.berkeley.edu/gpu.php}} for more information. If you have a CUDA-capable NVIDIA GPU, you will need to download and install the CUDA driver and libraries for your system from {\field{\*\fldinst{HYPERLINK "http://www.nvidia.com/object/mac-driver-archive.html"}}{\fldrslt http://www.nvidia.com/object/mac-driver-archive.html}}.\
\
Starting with version 5.5.4, this software features new, stricter security measures. See the
\b Security
\b0 section below for important information.\
@ -150,7 +157,7 @@ You can move (
\pard\pardeftab720\ql\qnatural
\cf0 To completely remove (
\b uninstall
\b0 ) BOINC from your Macintosh, run the
\b0 ) GridRepublic Desktop from your Macintosh, run the
\b Uninstall GridRepublic
\b0 application which is included with the installer.\
}

View File

@ -1,6 +1,6 @@
{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
{\colortbl;\red255\green255\blue255;\red2\green87\blue173;}
\margl1440\margr1440\vieww9000\viewh9000\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc
@ -12,18 +12,25 @@
\cf0 http://gridrepublic.org\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural
\cf0 \
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural
\b Installing ProgressThruProcessors Desktop may take several minutes; please be patient.
\b \cf0 Installing ProgressThruProcessors Desktop may take several minutes; please be patient.
\b0 \
\
\b Dual GPU Macbook Pros:
\b0 Some newer Macbook Pros have dual graphics processors, one that is more powerful and another that is more energy-efficient, and they switch between them automatically. This can cause your screensaver to flash on and off frequently, and can prevent ProgressThruProcessors Desktop from detecting the more powerful GPU which is needed to process some applications. You can force selection either {\field{\*\fldinst{HYPERLINK "http://support.apple.com/kb/HT4110"}}{\fldrslt \cf2 permanently}} or temporarily using a {\field{\*\fldinst{HYPERLINK "http://codykrieger.com/gfxCardStatus/"}}{\fldrslt \cf2 third-party utility}}. But be aware that forcing the use of the NVIDIA GPU may cause faster battery drain; this of course is not an issue when running on AC power.\
\
If you are upgrading from a version earlier than 6.8.0, you may see a message "Failed to convert file ProgressThruProcessors Desktop Preferences to Unicode." This is due to our addition of full Unicode support to the ProgressThruProcessors Desktop. If you get this message, you may need to readjust your column widths and other ProgressThruProcessors Desktop view options, but no other problems will result. When you quit ProgressThruProcessors Desktop, these settings will be saved in the new Unicode format.\
\
Due to new restrictions imposed by OS 10.6 Snow Leopard, there has been a change in ProgressThruProcessors Desktop's security implementation. Non-administrative users can no longer run ProgressThruProcessors Desktop unless they are added to group boinc_master. As of BOINC 6.10.5, the ProgressThruProcessors Desktop installer asks whether or not you wish to allow this.\
Due to new restrictions imposed by OS 10.6 Snow Leopard, there has been a change in ProgressThruProcessors Desktop's security implementation. Non-administrative users can no longer run ProgressThruProcessors Desktop unless they are added to group boinc_master. As of ProgressThruProcessors Desktop 6.8.29, the ProgressThruProcessors Desktop installer asks whether or not you wish to allow this.\
\
For more options, please see the BOINC Macintosh administrator tools at:\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural
{\field{\*\fldinst{HYPERLINK "http://boinc.berkeley.edu/wiki/Tools_for_Mac_OS_X"}}{\fldrslt \cf0 http://boinc.berkeley.edu/wiki/Tools_for_Mac_OS_X}}\
\
ProgressThruProcessors Desktop on the Mac now supports processing with your graphics card, or GPU. Please see {\field{\*\fldinst{HYPERLINK "http://boinc.berkeley.edu/gpu.php"}}{\fldrslt http://boinc.berkeley.edu/gpu.php}} for more information. If you have a CUDA-capable NVIDIA GPU, you will need to download and install the CUDA driver and libraries for your system from {\field{\*\fldinst{HYPERLINK "http://www.nvidia.com/object/mac-driver-archive.html"}}{\fldrslt http://www.nvidia.com/object/mac-driver-archive.html}}.\
\
Starting with version 5.5.4, this software features new, stricter security measures. See the
\b Security
\b0 section below for important information.\
@ -37,7 +44,7 @@ This is a
\b \cf0 Upgrade warning: You may lose unreported results
\b0 if you are running on an
\b Intel Mac
\b0 and upgrading from a version of GridRepublic or BOINC earlier than 5.3.21 on an Intel Mac, or if you are transferring Progress Thru Processors or BOINC Data from a PowerPC Mac to an Intel Mac, or from an Intel Mac to a PowerPC Mac. To prevent this, open GridRepublic Desktop's window, select the
\b0 and upgrading from a version of ProgressThruProcessors Desktop or BOINC earlier than 5.3.21 on an Intel Mac, or if you are transferring Progress Thru Processors or BOINC Data from a PowerPC Mac to an Intel Mac, or from an Intel Mac to a PowerPC Mac. To prevent this, open ProgressThruProcessors Desktop's window, select the
\i Projects
\i0 tab, select each project and press the
\i Update
@ -58,9 +65,9 @@ Note: on some versions of the Mac OS, you may not be able to exit the Progress T
\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
\b0 \cf0 Version 5.5.4 of GridRepublic Desktop or BOINC for the Macintosh features new, stricter security measures. This additional security helps protect your computer data from potential theft or accidental or malicious damage by limiting Progress Thru Processors projects' access to your system and data. \
\b0 \cf0 Version 5.5.4 of ProgressThruProcessors Desktop or BOINC for the Macintosh features new, stricter security measures. This additional security helps protect your computer data from potential theft or accidental or malicious damage by limiting Progress Thru Processors projects' access to your system and data. \
\
If you experience problems with this software, you can re-install a version of GridRepublic Desktop or BOINC prior to 5.5.4; this will automatically revert ownership and permissions to the earlier implementation.\
If you experience problems with this software, you can re-install a version of ProgressThruProcessors Desktop or BOINC prior to 5.5.4; this will automatically revert ownership and permissions to the earlier implementation.\
\
Once we have tested this security implementation on the Mac, we plan to extend it to other computer platforms, including Linux and Windows.\
\
@ -122,10 +129,8 @@ The installer now sets Progress Thru Processors Desktop as a Login item for
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
\b \cf0 Troubleshooting tip:
\b0 If you are upgrading from a version of GridRepublic Desktop or BOINC prior to 5.5.4 and the installer refuses to let you install, trash the file
\b /Library/Receipts/
\b0 Progress Thru Processors
\b .pkg
\b0 If you are upgrading from a version of ProgressThruProcessors Desktop or BOINC prior to 5.5.4 and the installer refuses to let you install, trash the file
\b /Library/Receipts/Progress Thru Processors.pkg
\b0 or
\b /Library/Receipts/BOINC.pkg
\b0 and try again.\
@ -152,7 +157,7 @@ You can move (
\pard\pardeftab720\ql\qnatural
\cf0 To completely remove (
\b uninstall
\b0 ) BOINC from your Macintosh, run the
\b0 ) ProgressThruProcessors Desktop from your Macintosh, run the
\b Uninstall Progress Thru Processors
\b0 application which is included with the installer.\
}

View File

@ -17,6 +17,42 @@
/* PostInstall.cpp */
// Notes on command-line installation to a remote Mac:
//
// When the installer is run from the Finder, this Postinstall.app will
// display up to two dialogs, asking the user whether or not to:
// [1] allow non-administrative users to run the BOINC Manager
// (asked only if this Mac has any non-administrative users)
// [2] set BOINC as the screensaver for all users who can run BOINC
// (asked only if BOINC screensaver is not already set for them)
//
// The installer can also be run from the command line. This is useful
// for installation on remote Macs. However, there is no way to respond
// to dialogs during a command-line install.
//
// The command-line installer sets the following environment variable:
// COMMAND_LINE_INSTALL=1
// The postinstall script, postupgrade script, and this Postinstall.app
// detect this environment variable and do the following:
// * Redirect the Postinstall.app log output to a file
// /tmp/BOINCInstallLog.txt
// * Suppress the 2 dialogs
// * test for the existence of a file /tmp/nonadminusersok.txt; if the
// file exists, allow non-administrative users to run BOINC Manager
// * test for the existence of a file /tmp/setboincsaver.txt; if the
// file exists, set BOINC as the screensaver for all BOINC users.
//
// Example: To install on a remote Mac from the command line, allowing
// non-admin users to run the BOINC Manager and setting BOINC as the
// screensaver:
// * First SCP the "BOINC Installer.pkg" to the remote Mac's /tmp
// directory, then SSh into the remote mac and enter the following
// $ touch /tmp/nonadminusersok.txt
// $ touch /tmp/setboincsaver.txt
// $ sudo installer -pkg "/tmp/BOINC Installer.pkg" -tgt /
// $ sudo reboot
//
#define CREATE_LOG 1 /* for debugging */
#include <Carbon/Carbon.h>
@ -40,6 +76,7 @@
#include "SetupSecurity.h"
#define admin_group_name "admin"
#define boinc_master_user_name "boinc_master"
#define boinc_master_group_name "boinc_master"
#define boinc_project_user_name "boinc_project"
@ -55,6 +92,8 @@ void SetSkinInUserPrefs(char *userName, char *skinName);
Boolean CheckDeleteFile(char *name);
void SetEUIDBackToUser (void);
static char * PersistentFGets(char *buf, size_t buflen, FILE *f);
Boolean IsUserMemberOfGroup(const char *userName, const char *groupName);
int CountGroupMembershipEntries(const char *userName, const char *groupName);
OSErr UpdateAllVisibleUsers(long brandID);
long GetBrandID(void);
int TestRPCBind(void);
@ -72,6 +111,7 @@ extern int check_security(char *bundlePath, char *dataPath, int use_sandbox, int
#define NUMBRANDS 3
/* globals */
static Boolean gCommandLineInstall = false;
static Boolean gQuitFlag = false;
static Boolean currentUserCanRunBOINC = false;
static char loginName[256];
@ -112,7 +152,6 @@ int main(int argc, char *argv[])
OSStatus err, err_fsref;
FILE *f;
char s[256];
char *q;
#ifdef SANDBOX
uid_t saved_euid, saved_uid, b_m_uid;
passwd *pw;
@ -128,26 +167,35 @@ int main(int argc, char *argv[])
brandName[0] = "BOINC";
saverName[0] = "BOINCSaver";
saverNameEscaped[0] = "BOINCSaver";
receiptNameEscaped[0] = "/Library/Receipts/BOINC.pkg";
receiptNameEscaped[0] = "/Library/Receipts/BOINC\\ Installer.pkg";
appName[1] = "/Applications/GridRepublic Desktop.app";
appNameEscaped[1] = "/Applications/GridRepublic\\ Desktop.app";
brandName[1] = "GridRepublic";
saverName[1] = "GridRepublic";
saverNameEscaped[1] = "GridRepublic";
receiptNameEscaped[1] = "/Library/Receipts/GridRepublic.pkg";
receiptNameEscaped[1] = "/Library/Receipts/GridRepublic\\ Installer.pkg";
appName[2] = "/Applications/Progress Thru Processors Desktop.app";
appNameEscaped[2] = "/Applications/Progress\\ Thru\\ Processors\\ Desktop.app";
brandName[2] = "Progress Thru Processors";
saverName[2] = "Progress Thru Processors";
saverNameEscaped[2] = "Progress\\ Thru\\ Processors";
receiptNameEscaped[2] = "/Library/Receipts/Progress\\ Thru\\ Processors.pkg";
receiptNameEscaped[2] = "/Library/Receipts/Progress\\ Thru\\ Processors\\ Installer.pkg";
::GetCurrentProcess (&ourProcess);
puts("Starting PostInstall app\n");
fflush(stdout);
// getlogin() gives unreliable results under OS 10.6.2, so use environment
strncpy(loginName, getenv("USER"), sizeof(loginName)-1);
printf("login name = %s\n", loginName);
if (getenv("COMMAND_LINE_INSTALL") != NULL) {
gCommandLineInstall = true;
puts("command-line install\n");
fflush(stdout);
}
err = Gestalt(gestaltSystemVersion, &OSVersion);
if (err != noErr)
@ -178,11 +226,11 @@ int main(int argc, char *argv[])
brandID = 0;
}
if (OSVersion < 0x1039) {
if (OSVersion < 0x1040) {
::SetFrontProcess(&ourProcess);
// Remove everything we've installed
// "\pSorry, this version of GridRepublic requires system 10.3.9 or higher."
s[0] = sprintf(s+1, "Sorry, this version of %s requires system 10.3.9 or higher.", brandName[brandID]);
// "\pSorry, this version of GridRepublic requires system 10.4.0 or higher."
s[0] = sprintf(s+1, "Sorry, this version of %s requires system 10.4.0 or higher.", brandName[brandID]);
StandardAlert (kAlertStopAlert, (StringPtr)s, NULL, NULL, &itemHit);
// "rm -rf /Applications/GridRepublic\\ Desktop.app"
@ -258,7 +306,7 @@ int main(int argc, char *argv[])
// Find an appropriate admin user to set as owner of installed files
// First, try the user currently logged in
grp = getgrnam("admin");
grp = getgrnam(admin_group_name);
i = 0;
while ((p = grp->gr_mem[i]) != NULL) { // Step through all users in group admin
if (strcmp(p, loginName) == 0) {
@ -328,6 +376,7 @@ int main(int argc, char *argv[])
#ifdef SANDBOX
err = CheckLogoutRequirement(&finalInstallAction);
printf("CheckLogoutRequirement returned %d\n", finalInstallAction);
if (finalInstallAction == launchWhenDone) {
// Wait for BOINC's RPC socket address to become available to user boinc_master, in
@ -335,7 +384,7 @@ int main(int argc, char *argv[])
saved_uid = getuid();
saved_euid = geteuid();
pw = getpwnam("boinc_master");
pw = getpwnam(boinc_master_user_name);
b_m_uid = pw->pw_uid;
seteuid(b_m_uid);
@ -348,38 +397,12 @@ int main(int argc, char *argv[])
}
seteuid(saved_euid);
return 0;
FSRef theFSRef;
ProcessSerialNumber ourPSN;
ProcessInfoRec pInfo;
FSRef ourFSRef, theFSRef;
char thePath[MAXPATHLEN];
// Get the full path to this PostInstall application's bundle
err = GetCurrentProcess (&ourPSN);
if (err)
return -1000; // Should never happen
memset(&pInfo, 0, sizeof(pInfo));
pInfo.processInfoLength = sizeof( ProcessInfoRec );
err = GetProcessInformation(&ourPSN, &pInfo);
if (err)
return -1001; // Should never happen
err = GetProcessBundleLocation(&ourPSN, &ourFSRef);
if (err)
return -1002; // Should never happen
err = FSRefMakePath (&ourFSRef, (UInt8*)thePath, sizeof(thePath));
if (err)
return -1003; // Should never happen
q = strrchr(thePath, '/');
if (q == NULL)
return -1004; // Should never happen
*++q = '\0';
strlcat(thePath, "WaitPermissions.app", sizeof(thePath));
err = FSPathMakeRef((StringPtr)thePath, &theFSRef, NULL);
err = FSPathMakeRef((StringPtr)"/Library/Application Support/BOINC Data/WaitPermissions.app",
&theFSRef, NULL);
// When we first create the boinc_master group and add the current user to the
// new group, there is a delay before the new group membership is recognized.
@ -402,11 +425,15 @@ int main(int argc, char *argv[])
sleep(1);
}
CreateStandardAlert(kAlertNoteAlert, CFSTR("Finishing install. Please wait ..."), CFSTR("This may take a few more minutes."), NULL, &theWin);
HideDialogItem(theWin, kStdOkItemIndex);
RemoveDialogItems(theWin, kStdOkItemIndex, 1, false);
RunStandardAlert(theWin, &myFilterProc, &itemHit);
if (gCommandLineInstall) {
printf("Finishing install. Please wait ...\n");
printf("This may take a few more minutes.\n");
} else {
CreateStandardAlert(kAlertNoteAlert, CFSTR("Finishing install. Please wait ..."), CFSTR("This may take a few more minutes."), NULL, &theWin);
HideDialogItem(theWin, kStdOkItemIndex);
RemoveDialogItems(theWin, kStdOkItemIndex, 1, false);
RunStandardAlert(theWin, &myFilterProc, &itemHit);
}
}
#endif // SANDBOX
@ -454,7 +481,6 @@ int DeleteReceipt()
Initialize();
err = CheckLogoutRequirement(&finalInstallAction);
err = FindProcess ('APPL', 'xins', &installerPSN);
if (err == noErr)
err = GetProcessPID(&installerPSN , &installerPID);
@ -509,9 +535,6 @@ OSStatus CheckLogoutRequirement(int *finalAction)
CFStringRef errorString = NULL;
OSStatus err = noErr;
#ifdef SANDBOX
char *p;
group *grp = NULL;
int i;
Boolean isMember = false;
#endif // SANDBOX
@ -522,18 +545,13 @@ OSStatus CheckLogoutRequirement(int *finalAction)
}
#ifdef SANDBOX
grp = getgrnam("boinc_master");
if (loginName && grp) {
i = 0;
while ((p = grp->gr_mem[i]) != NULL) { // Step through all users in group boinc_master
if (strcmp(p, loginName) == 0) {
isMember = true; // Logged in user is a member of group boinc_master
break;
}
++i;
if (loginName[0]) {
if (IsUserMemberOfGroup(loginName, boinc_master_group_name)) {
isMember = true; // Logged in user is a member of group boinc_master
}
}
printf("In CheckLogoutRequirement: isMember=%d, currentUserCanRunBOINC=%d\n", (int)isMember, (int)currentUserCanRunBOINC);
if (!isMember && !currentUserCanRunBOINC) {
*finalAction = nothingrequired;
return noErr;
@ -591,10 +609,7 @@ OSStatus CheckLogoutRequirement(int *finalAction)
// our previously created boinc_master or boinc_project user or group. This could
// also happen when the user installs new software. So we must check for such
// duplicate UserIDs and groupIDs; if found, we delete our user or group so that
// the PostInstall application will cerate a new one that does not conflict.
// NOTE: getgrnam and getgrgid use one static memory area to return their results,
// so each call to getgrnam or getgrgid overwrites the data from any previous calls.
// the PostInstall application will create a new one that does not conflict.
void CheckUserAndGroupConflicts()
{
#ifdef SANDBOX
@ -607,11 +622,6 @@ void CheckUserAndGroupConflicts()
char cmd[256], buf[256];
int entryCount;
// "dscl . -search /Groups PrimaryGroupID xx" returned a different format before OS 10.4
if (OSVersion < 0x1040) {
return;
}
entryCount = 0;
grp = getgrnam(boinc_master_group_name);
if (grp) {
@ -653,7 +663,7 @@ void CheckUserAndGroupConflicts()
}
if (entryCount > 1) {
system ("dscl . -delete /groups/boinc_project");
system ("dscl . -delete /groups/boinc_project");
// User boinc_project must have group boinc_project as its primary group.
// Since this group no longer exists, delete the user as well.
system ("dscl . -delete /users/boinc_project");
@ -674,7 +684,7 @@ void CheckUserAndGroupConflicts()
}
pclose(f);
}
}
}
if (entryCount > 1) {
system ("dscl . -delete /users/boinc_master");
@ -898,6 +908,59 @@ static Boolean ShowMessage(Boolean allowCancel, const char *format, ...) {
}
Boolean IsUserMemberOfGroup(const char *userName, const char *groupName) {
group *grp;
short i = 0;
char *p;
grp = getgrnam(groupName);
if (!grp) {
printf("getgrnam(%s) failed\n", groupName);
return false; // Group not found
}
while ((p = grp->gr_mem[i]) != NULL) { // Step through all users in group admin
if (strcmp(p, userName) == 0) {
return true;
}
++i;
}
return false;
}
// OS 10.7 dscl merge command has a bug that it adds the user to the group even if
// it was already a member, resulting in duplicate (multiple) entries. Earlier BOINC
// versions did not check for this, so we remove duplicate entries if present.
int CountGroupMembershipEntries(const char *userName, const char *groupName) {
int count = 0;
char cmd[512], buf[2048];
FILE *f;
char *p;
// getgrnam(groupName)->gr_mem[] only returns one entry, so we must use dscl
sprintf(cmd, "dscl . -read /Groups/%s GroupMembership", groupName);
f = popen(cmd, "r");
if (f == NULL)
return 0;
while (PersistentFGets(buf, sizeof(buf), f))
{
p = buf;
while (p) {
p = strstr(p, userName);
if (p) {
++ count;
p += strlen(userName);
}
}
}
return count;
}
// Find all visible users.
// If user is a member of group admin, add user to groups boinc_master and boinc_project.
// Optionally add non-admin users to group boinc_master but not to group boinc_project.
@ -913,91 +976,75 @@ OSErr UpdateAllVisibleUsers(long brandID)
Boolean deleteLoginItem;
char skinName[256];
char s[256];
group grpAdmin, *grpAdminPtr;
char adminBuf[32768];
group grpBOINC_master, *grpBOINC_masterPtr;
char bmBuf[32768];
Boolean saverAlreadySetForAll = true;
Boolean setSaverForAllUsers = false;
Boolean allNonAdminUsersAreSet = true;
Boolean allowNonAdminUsersToRunBOINC = false;
Boolean found = false;
FILE *f;
OSStatus err;
Boolean isGroupMember;
int err;
Boolean isAdminGroupMember, isBMGroupMember, isBPGroupMember;
struct stat sbuf;
#ifdef SANDBOX
char *p;
short i;
err = getgrnam_r("admin", &grpAdmin, adminBuf, sizeof(adminBuf), &grpAdminPtr);
if (err) { // Should never happen unless buffer too small
puts("getgrnam(\"admin\") failed\n");
return -1;
}
err = getgrnam_r("boinc_master", &grpBOINC_master, bmBuf, sizeof(bmBuf), &grpBOINC_masterPtr);
if (err) { // Should never happen unless buffer too small
puts("getgrnam(\"boinc_master\") failed\n");
return -1;
}
#endif // SANDBOX
char cmd[256];
int i;
int BMGroupMembershipCount, BPGroupMembershipCount;
#endif
FindSkinName(skinName, sizeof(skinName));
// Step through all users
puts("Beginning first pass through all users\n");
dirp = opendir("/Users");
if (dirp == NULL) { // Should never happen
puts("opendir(\"/Users\") failed\n");
puts("[1] opendir(\"/Users\") failed\n");
return -1;
}
// Step through all users
while (true) {
dp = readdir(dirp);
if (dp == NULL)
break; // End of list
printf("[1] Checking user %s\n", dp->d_name);
if (dp->d_name[0] == '.')
continue; // Ignore names beginning with '.'
// getpwnam works with either the full / login name (pw->pw_gecos)
// or the short / Posix name (pw->pw_name)
pw = getpwnam(dp->d_name);
if (pw == NULL) // "Deleted Users", "Shared", etc.
if (pw == NULL) { // "Deleted Users", "Shared", etc.
printf("[1] %s not in getpwnam data base\n", dp->d_name);
continue;
}
#ifdef SANDBOX
isGroupMember = false;
i = 0;
while ((p = grpAdmin.gr_mem[i]) != NULL) { // Step through all users in group admin
if (strcmp(p, dp->d_name) == 0) {
// User is a member of group admin, so add user to groups boinc_master and boinc_project
err = AddAdminUserToGroups(p);
if (err != noErr)
return err;
isGroupMember = true;
break;
}
++i;
}
printf("[1] User %s: Posix name=%s, Full name=%s\n", dp->d_name, pw->pw_name, pw->pw_gecos);
if (!isGroupMember) {
i = 0;
while ((p = grpBOINC_master.gr_mem[i]) != NULL) { // Step through all users in group boinc_master
if (strcmp(p, dp->d_name) == 0) {
// User is a member of group boinc_master
isGroupMember = true;
break;
}
++i;
#ifdef SANDBOX
isAdminGroupMember = false;
isBMGroupMember = false;
isAdminGroupMember = IsUserMemberOfGroup(pw->pw_name, admin_group_name);
if (isAdminGroupMember) {
// User is a member of group admin, so add user to groups boinc_master and boinc_project
printf("[1] User %s is a member of group admin\n", pw->pw_name);
} else {
isBMGroupMember = IsUserMemberOfGroup(pw->pw_name, boinc_master_group_name);
if (isBMGroupMember) {
// User is a member of group boinc_master
printf("[1] Non-admin user %s is a member of group boinc_master\n", pw->pw_name);
} else {
allNonAdminUsersAreSet = false;
}
}
if (!isGroupMember) {
allNonAdminUsersAreSet = false;
}
#else // SANDBOX
isGroupMember = true;
#endif // SANDBOX
if (isGroupMember) {
if (strcmp(loginName, dp->d_name) == 0) {
if (isAdminGroupMember || isBMGroupMember) {
if ((strcmp(loginName, dp->d_name) == 0) || (strcmp(loginName, pw->pw_name) == 0)) {
currentUserCanRunBOINC = true;
}
@ -1008,7 +1055,7 @@ OSErr UpdateAllVisibleUsers(long brandID)
f = popen("defaults -currentHost read com.apple.screensaver moduleName", "r");
} else {
sprintf(s, "sudo -u %s defaults -currentHost read com.apple.screensaver moduleDict -dict",
dp->d_name);
pw->pw_name);
f = popen(s, "r");
}
@ -1033,30 +1080,59 @@ OSErr UpdateAllVisibleUsers(long brandID)
closedir(dirp);
ResynchSystem();
if (! allNonAdminUsersAreSet) {
if (ShowMessage(true,
"Users who are permitted to administer this computer will automatically be allowed to "
"run and control %s.\n\n"
"Do you also want non-administrative users to be able to run and control %s on this Mac?",
brandName[brandID], brandName[brandID])
) {
allowNonAdminUsersToRunBOINC = true;
currentUserCanRunBOINC = true;
saverAlreadySetForAll = false;
if (allNonAdminUsersAreSet) {
puts("[2] All non-admin users are already members of group boinc_master\n");
} else {
if (gCommandLineInstall) {
err = stat("/tmp/nonadminusersok.txt", &sbuf);
if (err == noErr) {
puts("nonadminusersok.txt file detected\n");
fflush(stdout);
unlink("/tmp/nonadminusersok.txt");
allowNonAdminUsersToRunBOINC = true;
currentUserCanRunBOINC = true;
saverAlreadySetForAll = false;
}
} else {
if (ShowMessage(true,
"Users who are permitted to administer this computer will automatically be allowed to "
"run and control %s.\n\n"
"Do you also want non-administrative users to be able to run and control %s on this Mac?",
brandName[brandID], brandName[brandID])
) {
allowNonAdminUsersToRunBOINC = true;
currentUserCanRunBOINC = true;
saverAlreadySetForAll = false;
printf("[2] User answered Yes to allowing non-admin users to run %s\n", brandName[brandID]);
} else {
printf("[2] User answered No to allowing non-admin users to run %s\n", brandName[brandID]);
}
}
}
if (! saverAlreadySetForAll) {
setSaverForAllUsers = ShowMessage(true,
if (gCommandLineInstall) {
err = stat("/tmp/setboincsaver.txt", &sbuf);
if (err == noErr) {
puts("setboincsaver.txt file detected\n");
fflush(stdout);
unlink("/tmp/setboincsaver.txt");
setSaverForAllUsers = true;
}
} else {
setSaverForAllUsers = ShowMessage(true,
"Do you want to set %s as the screensaver for all %s users on this Mac?",
brandName[brandID], brandName[brandID]);
brandName[brandID], brandName[brandID]);
}
}
// Step through all users a second time, setting non-admin users and / or our screensaver
puts("Beginning second pass through all users\n");
dirp = opendir("/Users");
if (dirp == NULL) { // Should never happen
puts("opendir(\"/Users\") failed\n");
puts("[2] opendir(\"/Users\") failed\n");
return -1;
}
@ -1064,50 +1140,89 @@ OSErr UpdateAllVisibleUsers(long brandID)
dp = readdir(dirp);
if (dp == NULL)
break; // End of list
printf("[2] Checking user %s\n", dp->d_name);
if (dp->d_name[0] == '.')
continue; // Ignore names beginning with '.'
pw = getpwnam(dp->d_name);
if (pw == NULL) // "Deleted Users", "Shared", etc.
if (pw == NULL) { // "Deleted Users", "Shared", etc.
printf("[2] %s not in getpwnam data base\n", dp->d_name);
continue;
}
printf("[2] User %s: Posix name=%s, Full name=%s\n", dp->d_name, pw->pw_name, pw->pw_gecos);
#ifdef SANDBOX
isGroupMember = false;
isAdminGroupMember = false;
isBMGroupMember = false;
isBPGroupMember = false;
i = 0;
while ((p = grpAdmin.gr_mem[i]) != NULL) { // Step through all users in group admin
if (strcmp(p, dp->d_name) == 0) {
// User is a member of group admin
isGroupMember = true;
break;
}
++i;
isAdminGroupMember = IsUserMemberOfGroup(pw->pw_name, admin_group_name);
if (isAdminGroupMember) {
// User is a member of group admin, so add user to groups boinc_master and boinc_project
printf("[2] User %s is a member of group admin\n", pw->pw_name);
}
// If allNonAdminUsersAreSet, some older versions added non-admin users only to
// group boinc_master; make sure they are also members of group boinc_project
if (! isGroupMember) {
if (allowNonAdminUsersToRunBOINC || allNonAdminUsersAreSet) {
// Add to group boinc_master but not group boinc_project
err = AddAdminUserToGroups(dp->d_name);
isGroupMember = true;
// If allNonAdminUsersAreSet, some older BOINC versions added non-admin users only to group
// boinc_master; ensure all permitted BOINC users are also members of group boinc_project
if (isAdminGroupMember || allowNonAdminUsersToRunBOINC || allNonAdminUsersAreSet) {
// OS 10.7 dscl merge command has a bug that it adds the user to the group even if
// it was already a member, resulting in duplicate (multiple) entries. Earlier BOINC
// versions did not check for this, so we remove duplicate entries if present.
BMGroupMembershipCount = CountGroupMembershipEntries(pw->pw_name, boinc_master_group_name);
printf("[2] User %s found in group %s member list %d times\n",
pw->pw_name, boinc_master_group_name, BMGroupMembershipCount);
if (BMGroupMembershipCount == 0) {
sprintf(cmd, "dscl . -merge /groups/%s users %s", boinc_master_group_name, pw->pw_name);
err = system(cmd);
printf("[2] %s returned %d\n", cmd, err);
isBMGroupMember = true;
} else {
isBMGroupMember = true;
for (i=1; i<BMGroupMembershipCount; ++i) {
sprintf(cmd, "dscl . -delete /groups/%s GroupMembership %s", boinc_master_group_name, pw->pw_name);
err = system(cmd);
printf("[2] %s returned %d\n", cmd, err);
}
}
BPGroupMembershipCount = CountGroupMembershipEntries(pw->pw_name, boinc_project_group_name);
printf("[2] User %s found in group %s member list %d times\n",
pw->pw_name, boinc_project_group_name, BPGroupMembershipCount);
if (BPGroupMembershipCount == 0) {
sprintf(cmd, "dscl . -merge /groups/%s users %s", boinc_project_group_name, pw->pw_name);
err = system(cmd);
printf("[2] %s returned %d\n", cmd, err);
isBPGroupMember = true;
} else {
isBPGroupMember = true;
for (i=1; i<BPGroupMembershipCount; ++i) {
sprintf(cmd, "dscl . -delete /groups/%s GroupMembership %s", boinc_project_group_name, pw->pw_name);
err = system(cmd);
printf("[2] %s returned %d\n", cmd, err);
}
}
}
#else // SANDBOX
isGroupMember = true;
isBMGroupMember = true;
#endif // SANDBOX
saved_uid = geteuid();
seteuid(pw->pw_uid); // Temporarily set effective uid to this user
deleteLoginItem = CheckDeleteFile(dp->d_name);
if (!isGroupMember) {
if (CheckDeleteFile(pw->pw_name)) {
deleteLoginItem = true;
}
if (!isBMGroupMember) {
deleteLoginItem = true;
}
SetLoginItem(brandID, deleteLoginItem); // Set login item for this user
if (isGroupMember) {
if (isBMGroupMember) {
SetSkinInUserPrefs(dp->d_name, skinName);
if (setSaverForAllUsers) {
@ -1118,7 +1233,7 @@ OSErr UpdateAllVisibleUsers(long brandID)
saverNameEscaped[brandID]);
} else {
sprintf(s, "sudo -u %s defaults -currentHost write com.apple.screensaver moduleDict -dict moduleName %s path /Library/Screen\\ Savers/%s.saver",
dp->d_name, saverNameEscaped[brandID], saverNameEscaped[brandID]);
pw->pw_name, saverNameEscaped[brandID], saverNameEscaped[brandID]);
}
system (s);
}
@ -1432,4 +1547,3 @@ void print_to_log_file(const char *format, ...) {
#endif
}
const char *BOINC_RCSID_c7abe0490e="$Id$";

View File

@ -1,6 +1,6 @@
{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
{\colortbl;\red255\green255\blue255;\red2\green87\blue173;}
\margl1440\margr1440\vieww9000\viewh9000\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc
@ -16,14 +16,22 @@
\b \cf0 Installing BOINC may take several minutes; please be patient.
\b0 \
\
If you are upgrading from a version earlier than 6.8.0, you may see a message "Failed to convert file BOINC Manager Preferences to Unicode." This is due to our addition of full Unicode support to the BOINC Manager. If you get this message, you may need to readjust your column widths and other BOINC Manager view options, but no other problems will result. When you quit BOINC Manager, these settings will be saved in the new Unicode format.\
\b Dual GPU Macbook Pros:
\b0 Some newer Macbook Pros have dual graphics processors, one that is more powerful and another that is more energy-efficient, and they switch between them automatically. This can cause your screensaver to flash on and off frequently, and can prevent BOINC from detecting the more powerful GPU which is needed to process some applications. You can force selection either {\field{\*\fldinst{HYPERLINK "http://support.apple.com/kb/HT4110"}}{\fldrslt \cf2 permanently}} or temporarily using a {\field{\*\fldinst{HYPERLINK "http://codykrieger.com/gfxCardStatus/"}}{\fldrslt \cf2 third-party utility}}. But be aware that forcing the use of the NVIDIA GPU may cause faster battery drain; this of course is not an issue when running on AC power.\
\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
\cf0 If you are upgrading from a version earlier than 6.8.0, you may see a message "Failed to convert file BOINC Manager Preferences to Unicode." This is due to our addition of full Unicode support to the BOINC Manager. If you get this message, you may need to readjust your column widths and other BOINC Manager view options, but no other problems will result. When you quit BOINC Manager, these settings will be saved in the new Unicode format.\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural
\cf0 \
Due to new restrictions imposed by OS 10.6 Snow Leopard, there has been a change in BOINC's security implementation. Non-administrative users can no longer run BOINC Manager unless they are added to group boinc_master. As of BOINC 6.10.5, the BOINC installer asks whether or not you wish to allow this.\
\
For more options, please see the BOINC Macintosh administrator tools at:\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural
{\field{\*\fldinst{HYPERLINK "http://boinc.berkeley.edu/wiki/Tools_for_Mac_OS_X"}}{\fldrslt \cf0 http://boinc.berkeley.edu/wiki/Tools_for_Mac_OS_X}}\
\
BOINC on the Mac now supports processing with your graphics card, or GPU. Please see {\field{\*\fldinst{HYPERLINK "http://boinc.berkeley.edu/gpu.php"}}{\fldrslt http://boinc.berkeley.edu/gpu.php}} for more information. If you have a CUDA-capable NVIDIA GPU, you will need to download and install the CUDA driver and libraries for your system from {\field{\*\fldinst{HYPERLINK "http://www.nvidia.com/object/mac-driver-archive.html"}}{\fldrslt http://www.nvidia.com/object/mac-driver-archive.html}}.\
\
Starting with version 5.5.4, BOINC features new, stricter security measures. See the
\b Security
\b0 section below for important information.\

View File

@ -47,6 +47,8 @@ int main(int argc, char *argv[])
int retval = 0;
DIR *dirp;
printf("WaitPermissions launched\n");
for (i=0; i<180; i++) { // Limit delay to 3 minutes
retval = stat("/Library/Application Support/BOINC Data/projects", &sbuf);

View File

@ -19,7 +19,7 @@
##
# Script to convert Macintosh BOINC installer to GridRepublic Desktop installer
# updated 2/2/10 by Charlie Fenton
# updated 2/17/11 by Charlie Fenton for BOINC 6.12.7 and later
##
## Usage:
@ -28,14 +28,13 @@
## the Uninstall BOINC application to be converted
## GR_ReadMe.rtf
## gridrepublic.icns
## GR_install.icns
## MacGRPkgIcon.zip
## GR_uninstall.icns
## COPYING
## COPYING.LESSER (for version 6.3.x and later only)
## COPYING.LESSER
## COPYRIGHT
## skins directory containing GridRepublic skin (optional)
## acct_mgr_url.xml (to have BOINC automatically connect to Account Manager)
## PostInstall.app (needed only for version 6.2.x or earlier)
## gridrepublic.tiff (for screensaver coordinator)
## gridrepublic_ss_logo.png (for screensaver coordinator)
## GR_saver directory containing GridRepublic default screensaver and associated files, including:
@ -66,7 +65,7 @@ README_FILE="GR-ReadMe.rtf"
## BRANDING_FILE="GR-Branding"
BRANDING_INFO="BrandId=1"
ICNS_FILE="gridrepublic.icns"
INSTALLER_ICNS_FILE="GR_install.icns"
INSTALLER_ICNS_FILE="MacGRPkgIcon.zip"
UNINSTALLER_ICNS_FILE="GR_uninstall.icns"
SAVER_DIR="GR_saver"
SAVER_SYSPREF_ICON="gridrepublic.tiff"
@ -74,7 +73,7 @@ SAVER_LOGO="gridrepublic_ss_logo.png"
BRAND_NAME="GridRepublic"
MANAGER_NAME="GridRepublic Desktop"
LC_BRAND_NAME="gridrepublic"
SOURCE_PKG_PATH="BOINC Installer.app/Contents/Resources/BOINC.pkg/Contents"
SOURCE_PKG_PATH="BOINC Installer.pkg/Contents"
if [ $# -lt 3 ]; then
echo "Usage:"
@ -132,24 +131,18 @@ else
fi
# Create the installer's preinstall and preupgrade scripts from the standard preinstall script
# Older versions of BOINC installer did not use preinstall and preupgrade scripts, so check first
if [ -f "${SOURCE_PKG_PATH}/Resources/preinstall" ]; then
cp -fp "${SOURCE_PKG_PATH}/Resources/preinstall" "${SCRIPTS_PATH}/"
cp -fp "${SOURCE_PKG_PATH}/Resources/preinstall" "${SCRIPTS_PATH}/"
sed -i "" s/BOINCManager/"${MANAGER_NAME}"/g "${SCRIPTS_PATH}/preinstall"
sed -i "" s/BOINCSaver/"${BRAND_NAME}"/g "${SCRIPTS_PATH}/preinstall"
sed -i "" s/BOINCManager/"${MANAGER_NAME}"/g "${SCRIPTS_PATH}/preinstall"
sed -i "" s/BOINCSaver/"${BRAND_NAME}"/g "${SCRIPTS_PATH}/preinstall"
cp -fp "${SCRIPTS_PATH}/preinstall" "${SCRIPTS_PATH}/preupgrade"
fi
cp -fp "${SCRIPTS_PATH}/preinstall" "${SCRIPTS_PATH}/preupgrade"
cp -fp "${SOURCE_PKG_PATH}/Resources/postinstall" "${SCRIPTS_PATH}/"
cp -fp "${SOURCE_PKG_PATH}/Resources/postupgrade" "${SCRIPTS_PATH}/"
if [ "$1" = "6" ] && [ "$2" = "2" ]; then
cp -fpR "PostInstall.app" "${IR_PATH}/"
else
cp -fpR "${SOURCE_PKG_PATH}/Resources/PostInstall.app" "${IR_PATH}/"
cp -fpR "${SOURCE_PKG_PATH}/Resources/WaitPermissions.app" "${IR_PATH}/"
fi
cp -fpR "${SOURCE_PKG_PATH}/Resources/PostInstall.app" "${IR_PATH}/"
cp -fp "${SOURCE_PKG_PATH}/Resources/all_projects_list.xml" "${IR_PATH}/"
##### We've decided not to customize BOINC Data directory name for branding
@ -184,6 +177,7 @@ sudo mv -f "${PR_PATH}/Applications/${MANAGER_NAME}.app/Contents/MacOS/BOINCMana
# Update the Manager's info.plist, InfoPlist.strings files
sudo sed -i "" s/BOINCManager/"${MANAGER_NAME}"/g "${PR_PATH}/Applications/${MANAGER_NAME}.app/Contents/Info.plist"
sudo sed -i "" s/BOINCMgr.icns/"${ICNS_FILE}"/g "${PR_PATH}/Applications/${MANAGER_NAME}.app/Contents/Info.plist"
# InfoPlist.strings file uses UTF-16 encoding
sudo chmod a+w "${PR_PATH}/Applications/${MANAGER_NAME}.app/Contents/Resources/English.lproj/InfoPlist.strings"
sudo iconv -f UTF-16 -t UTF-8 "${PR_PATH}/Applications/${MANAGER_NAME}.app/Contents/Resources/English.lproj/InfoPlist.strings" > "${PR_PATH}/tempUTF81"
sudo sed -i "" s/BOINC/"${MANAGER_NAME}"/g "${PR_PATH}/tempUTF81"
@ -207,6 +201,7 @@ sudo mv -f "${PR_PATH}/Library/Screen Savers/${BRAND_NAME}.saver/Contents/MacOS/
# Update screensaver coordinator's info.plist, InfoPlist.strings files
sudo sed -i "" s/BOINCSaver/"${BRAND_NAME}"/g "${PR_PATH}/Library/Screen Savers/${BRAND_NAME}.saver/Contents/Info.plist"
# InfoPlist.strings file uses UTF-16 encoding
sudo chmod a+w "${PR_PATH}/Library/Screen Savers/${BRAND_NAME}.saver/Contents/Resources/English.lproj/InfoPlist.strings"
sudo iconv -f UTF-16 -t UTF-8 "${PR_PATH}/Library/Screen Savers/${BRAND_NAME}.saver/Contents/Resources/English.lproj/InfoPlist.strings" > "${PR_PATH}/tempUTF82"
sudo sed -i "" s/BOINC/"${BRAND_NAME}"/g "${PR_PATH}/tempUTF82"
@ -234,6 +229,7 @@ sudo mv -f "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Un
# Update Uninstall application's info.plist, InfoPlist.strings files
sudo sed -i "" s/BOINC/"${BRAND_NAME}"/g "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Uninstall ${BRAND_NAME}.app/Contents/Info.plist"
sudo sed -i "" s/MacUninstaller.icns/"${UNINSTALLER_ICNS_FILE}"/g "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Uninstall ${BRAND_NAME}.app/Contents/Info.plist"
# InfoPlist.strings file uses UTF-16 encoding
sudo chmod a+w "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Uninstall ${BRAND_NAME}.app/Contents/Resources/English.lproj/InfoPlist.strings"
sudo iconv -f UTF-16 -t UTF-8 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Uninstall ${BRAND_NAME}.app/Contents/Resources/English.lproj/InfoPlist.strings" > "${PR_PATH}/tempUTF83"
sudo sed -i "" s/BOINC/"${BRAND_NAME}"/g "${PR_PATH}/tempUTF83"
@ -247,7 +243,7 @@ sudo rm -f "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Un
sudo rm -f "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Uninstall ${BRAND_NAME}.app/Contents/Resources/Uninstall BOINC.rsrc"
sudo chown -R root:admin "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Uninstall ${BRAND_NAME}.app"
sudo chmod -R 555 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Uninstall ${BRAND_NAME}.app"
sudo chmod -R 755 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Uninstall ${BRAND_NAME}.app"
## Fix up ownership and permissions
sudo chown -R root:admin "${PR_PATH}"/*
@ -272,12 +268,10 @@ sudo cp -fp "COPYRIGHT" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_univer
sudo chown -R 501:admin "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYRIGHT.txt"
sudo chmod -R 644 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYRIGHT.txt"
# COPYING.LESSER is part of GNU License v3, included only with BOINC 6.3.x and later
if [ -f "COPYING.LESSER" ]; then
sudo cp -fp "COPYING.LESSER" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYING.LESSER.txt"
sudo chown -R 501:admin "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYING.LESSER.txt"
sudo chmod -R 644 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYING.LESSER.txt"
fi
# COPYING.LESSER is part of GNU License v3
sudo cp -fp "COPYING.LESSER" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYING.LESSER.txt"
sudo chown -R 501:admin "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYING.LESSER.txt"
sudo chmod -R 644 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYING.LESSER.txt"
# Make temporary copies of Pkg-Info.plist and Description.plist for PackageMaker and update for this branding
sudo cp -fp "${SOURCE_PKG_PATH}/Info.plist" "${NEW_DIR_PATH}/Pkg-Info.plist"
@ -299,40 +293,25 @@ plutil -convert xml1 "`pwd`/${NEW_DIR_PATH}/Pkg-Info.plist"
defaults write "`pwd`/${NEW_DIR_PATH}/Description" "IFPkgDescriptionTitle" "$MANAGER_NAME"
plutil -convert xml1 "`pwd`/${NEW_DIR_PATH}/Description.plist"
# Copy the installer wrapper application "${BRAND_NAME} Installer.app"
sudo cp -fpR "BOINC Installer.app" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app"
sudo rm -dfR "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/BOINC.pkg"
# Update the installer wrapper application's info.plist, InfoPlist.strings files
sudo sed -i "" s/BOINC/"${BRAND_NAME}"/g "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Info.plist"
sudo sed -i "" s/MacInstaller.icns/"${INSTALLER_ICNS_FILE}"/g "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Info.plist"
sudo chmod a+w "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/English.lproj/InfoPlist.strings"
sudo iconv -f UTF-16 -t UTF-8 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/English.lproj/InfoPlist.strings" > "${PR_PATH}/tempUTF84"
sudo sed -i "" s/BOINC/"${MANAGER_NAME}"/g "${PR_PATH}/tempUTF84"
sudo iconv -f UTF-8 -t UTF-16 "${PR_PATH}/tempUTF84" > "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/English.lproj/InfoPlist.strings"
sudo rm -f "${PR_PATH}/tempUTF84"
# Replace the installer wrapper application's MacInstaller.icns file
sudo cp -fp "${INSTALLER_ICNS_FILE}" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/${INSTALLER_ICNS_FILE}"
sudo rm -f "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/MacInstaller.icns"
# Rename the installer wrapper application's executable inside the bundle
sudo mv -f "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/MacOS/BOINC Installer" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/MacOS/${BRAND_NAME} Installer"
# Build the installer package inside the wrapper application's bundle
# Build the installer package
if [ "$PACKAGEMAKER_VERSION" = "3" ]; then
# Packagemaker Version 3
## /Developer/usr/bin/packagemaker -r ../BOINC_Installer/Pkg_Root -e ../BOINC_Installer/Installer\ Resources/ -s ../BOINC_Installer/Installer\ Scripts/ -f mac_build/Pkg-Info.plist -t "BOINC Manager" -n "$1.$2.$3" -b -o ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.app/Contents/Resources/BOINC.pkg
/Developer/usr/bin/packagemaker -r "${PR_PATH}" -e "${IR_PATH}" -s "${SCRIPTS_PATH}" -f "${NEW_DIR_PATH}/Pkg-Info.plist" -t "${MANAGER_NAME}" -n "$1.$2.$3" -b -o "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/${BRAND_NAME}.pkg"
## /Developer/usr/bin/packagemaker -r ../BOINC_Installer/Pkg_Root -e ../BOINC_Installer/Installer\ Resources/ -s ../BOINC_Installer/Installer\ Scripts/ -f mac_build/Pkg-Info.plist -t "BOINC Manager" -n "$1.$2.$3" -b -o ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.pkg
/Developer/usr/bin/packagemaker -r "${PR_PATH}" -e "${IR_PATH}" -s "${SCRIPTS_PATH}" -f "${NEW_DIR_PATH}/Pkg-Info.plist" -t "${MANAGER_NAME}" -n "$1.$2.$3" -b -o "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.pkg"
# Remove TokenDefinitions.plist and IFPkgPathMappings in Info.plist, which would cause installer to find a previous copy of ${MANAGER_NAME} and install there
sudo rm -f "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/${BRAND_NAME}.pkg/Contents/Resources/TokenDefinitions.plist"
defaults delete "`pwd`/${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/${BRAND_NAME}.pkg/Contents/Info" IFPkgPathMappings
sudo rm -f "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.pkg/Contents/Resources/TokenDefinitions.plist"
defaults delete "`pwd`/${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.pkg/Contents/Info" IFPkgPathMappings
else
# Packagemaker Version 2
## /Developer/Tools/packagemaker -build -p ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.app/Contents/Resources/BOINC.pkg -f ../BOINC_Installer/Pkg_Root -r ../BOINC_Installer/Installer\ Resources/ -i mac_build/Pkg-Info.plist -d mac_Installer/Description.plist -ds
/Developer/Tools/packagemaker -build -p "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/${BRAND_NAME}.pkg" -f "${PR_PATH}" -r "${IR_PATH}" -i "${NEW_DIR_PATH}/Pkg-Info.plist" -d "${NEW_DIR_PATH}/Description.plist" -ds
## /Developer/Tools/packagemaker -build -p ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.pkg -f ../BOINC_Installer/Pkg_Root -r ../BOINC_Installer/Installer\ Resources/ -i mac_build/Pkg-Info.plist -d mac_Installer/Description.plist -ds
/Developer/Tools/packagemaker -build -p "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.pkg" -f "${PR_PATH}" -r "${IR_PATH}" -i "${NEW_DIR_PATH}/Pkg-Info.plist" -d "${NEW_DIR_PATH}/Description.plist" -ds
fi
# Add our custom icon to installer package
ditto -xk "${INSTALLER_ICNS_FILE}" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.pkg"
SetFile -a CE "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.pkg"
SetFile -a V "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.pkg/"Icon*
## for debugging
## if [ $? -ne 0 ]; then
## echo ""
@ -344,12 +323,6 @@ fi
## echo ""
## fi
# Allow the installer wrapper application to modify the package's Info.plist file
sudo chmod u+w,g+w,o+w "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/${BRAND_NAME}.pkg/Contents/Info.plist"
# Update the installer wrapper application's creation date
sudo touch "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app"
# Remove temporary copies of Pkg-Info.plist and Description.plist
sudo rm ${NEW_DIR_PATH}/Pkg-Info.plist
sudo rm ${NEW_DIR_PATH}/Description.plist
@ -361,15 +334,16 @@ sudo rm -dfR "${SCRIPTS_PATH}"
# Compress the products
cd ${NEW_DIR_PATH}
zip -rqy ${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal.zip ${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal
## Use ditto instead of zip utility to preserve resource forks and Finder attributes (custom icon, hide extension)
ditto -ck --sequesterRsrc --keepParent "${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal" "${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal.zip"
##### We've decided not to create branded command-line executables; they are identical to standard ones
#### zip -rqy ${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin.zip ${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin
#### ditto -ck --sequesterRsrc --keepParent "${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin" "${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin.zip"
##### We've decided not to create branded symbol table file; it is identical to standard one
#### zip -rqy ${LC_BRAND_NAME}_$1.$2.$3_macOSX_SymbolTables.zip ${LC_BRAND_NAME}_$1.$2.$3_macOSX_SymbolTables
#### ditto -ck --sequesterRsrc --keepParent "${LC_BRAND_NAME}_$1.$2.$3_macOSX_SymbolTables" "${LC_BRAND_NAME}_$1.$2.$3_macOSX_SymbolTables.zip"
# Force Finder to recognize changed icons by deleting the uncompressed products and expanding the zip file
sudo rm -dfR ${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal
open ${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal.zip
sudo rm -dfR "${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal"
open "${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal.zip"
popd
exit 0

View File

@ -19,7 +19,7 @@
##
# Script to convert Macintosh BOINC installer to Progress Thru Processors Desktop installer
# updated 2/10/10 by Charlie Fenton
# updated 2/17/11 by Charlie Fenton for BOINC 6.12.7 and later
##
## Usage:
@ -28,14 +28,13 @@
## the Uninstall BOINC application to be converted
## PTP_ReadMe.rtf
## ProgThruProc.icns
## PTP_install.icns
## MacPTPPkgIcon.zip
## PTP_uninstall.icns
## COPYING
## COPYING.LESSER (for version 6.3.x and later only)
## COPYING.LESSER
## COPYRIGHT
## skins directory containing Progress Thru Processors skin (optional)
## acct_mgr_url.xml (to have BOINC automatically connect to Account Manager)
## PostInstall.app (needed only for version 6.2.x or earlier)
## ProgThruProc.tiff (for screensaver coordinator)
## ProgThruProc_ss_logo (for screensaver coordinator)
## PTP_saver directory containing Progress Thru Processors default screensaver and associated files, including:
@ -66,7 +65,7 @@ README_FILE="PTP-ReadMe.rtf"
## BRANDING_FILE="PTP-Branding"
BRANDING_INFO="BrandId=2"
ICNS_FILE="ProgThruProc.icns"
INSTALLER_ICNS_FILE="PTP_install.icns"
INSTALLER_ICNS_FILE="MacPTPPkgIcon.zip"
UNINSTALLER_ICNS_FILE="PTP_uninstall.icns"
SAVER_DIR="PTP_saver"
SAVER_SYSPREF_ICON="ProgThruProc.tiff"
@ -74,7 +73,7 @@ SAVER_LOGO="ProgThruProc_ss_logo.png"
BRAND_NAME="Progress Thru Processors"
MANAGER_NAME="Progress Thru Processors Desktop"
LC_BRAND_NAME="Progress Thru Processors"
SOURCE_PKG_PATH="BOINC Installer.app/Contents/Resources/BOINC.pkg/Contents"
SOURCE_PKG_PATH="BOINC Installer.pkg/Contents"
if [ $# -lt 3 ]; then
echo "Usage:"
@ -132,30 +131,26 @@ else
fi
# Create the installer's preinstall and preupgrade scripts from the standard preinstall script
# Older versions of BOINC installer did not use preinstall and preupgrade scripts, so check first
if [ -f "${SOURCE_PKG_PATH}/Resources/preinstall" ]; then
cp -fp "${SOURCE_PKG_PATH}/Resources/preinstall" "${SCRIPTS_PATH}/"
cp -fp "${SOURCE_PKG_PATH}/Resources/preinstall" "${SCRIPTS_PATH}/"
sed -i "" s/BOINCManager/"${MANAGER_NAME}"/g "${SCRIPTS_PATH}/preinstall"
sed -i "" s/BOINCSaver/"${BRAND_NAME}"/g "${SCRIPTS_PATH}/preinstall"
sed -i "" s/BOINCManager/"${MANAGER_NAME}"/g "${SCRIPTS_PATH}/preinstall"
sed -i "" s/BOINCSaver/"${BRAND_NAME}"/g "${SCRIPTS_PATH}/preinstall"
cp -fp "${SCRIPTS_PATH}/preinstall" "${SCRIPTS_PATH}/preupgrade"
fi
cp -fp "${SCRIPTS_PATH}/preinstall" "${SCRIPTS_PATH}/preupgrade"
cp -fp "${SOURCE_PKG_PATH}/Resources/postinstall" "${SCRIPTS_PATH}/"
cp -fp "${SOURCE_PKG_PATH}/Resources/postupgrade" "${SCRIPTS_PATH}/"
if [ "$1" = "6" ] && [ "$2" = "2" ]; then
cp -fpR "PostInstall.app" "${IR_PATH}/"
else
cp -fpR "${SOURCE_PKG_PATH}/Resources/PostInstall.app" "${IR_PATH}/"
cp -fpR "${SOURCE_PKG_PATH}/Resources/WaitPermissions.app" "${IR_PATH}/"
fi
cp -fpR "${SOURCE_PKG_PATH}/Resources/PostInstall.app" "${IR_PATH}/"
cp -fp "${SOURCE_PKG_PATH}/Resources/all_projects_list.xml" "${IR_PATH}/"
##### We've decided not to customize BOINC Data directory name for branding
#### mkdir -p "${PR_PATH}/Library/Application Support/${BRAND_NAME} Data"
#### mkdir -p "${PR_PATH}/Library/Application Support/${BRAND_NAME} Data/locale"
mkdir -p "${PR_PATH}/Library/Application Support/BOINC Data"
## If skins folder is present. copy it into BOINC Data folder
if [ -d "skins" ]; then
sudo cp -fR "skins" "${PR_PATH}/Library/Application Support/BOINC Data/"
@ -251,7 +246,7 @@ sudo rm -f "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Un
sudo rm -f "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Uninstall ${BRAND_NAME}.app/Contents/Resources/Uninstall BOINC.rsrc"
sudo chown -R root:admin "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Uninstall ${BRAND_NAME}.app"
sudo chmod -R 555 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Uninstall ${BRAND_NAME}.app"
sudo chmod -R 755 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/Uninstall ${BRAND_NAME}.app"
## Fix up ownership and permissions
sudo chown -R root:admin "${PR_PATH}"/*
@ -276,12 +271,10 @@ sudo cp -fp "COPYRIGHT" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_univer
sudo chown -R 501:admin "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYRIGHT.txt"
sudo chmod -R 644 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYRIGHT.txt"
# COPYING.LESSER is part of GNU License v3, included only with BOINC 6.3.x and later
if [ -f "COPYING.LESSER" ]; then
sudo cp -fp "COPYING.LESSER" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYING.LESSER.txt"
sudo chown -R 501:admin "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYING.LESSER.txt"
sudo chmod -R 644 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYING.LESSER.txt"
fi
# COPYING.LESSER is part of GNU License v3
sudo cp -fp "COPYING.LESSER" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYING.LESSER.txt"
sudo chown -R 501:admin "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYING.LESSER.txt"
sudo chmod -R 644 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/extras/COPYING.LESSER.txt"
# Make temporary copies of Pkg-Info.plist and Description.plist for PackageMaker and update for this branding
sudo cp -fp "${SOURCE_PKG_PATH}/Info.plist" "${NEW_DIR_PATH}/Pkg-Info.plist"
@ -303,41 +296,25 @@ plutil -convert xml1 "`pwd`/${NEW_DIR_PATH}/Pkg-Info.plist"
defaults write "`pwd`/${NEW_DIR_PATH}/Description" "IFPkgDescriptionTitle" "$MANAGER_NAME"
plutil -convert xml1 "`pwd`/${NEW_DIR_PATH}/Description.plist"
# Copy the installer wrapper application "${BRAND_NAME} Installer.app"
sudo cp -fpR "BOINC Installer.app" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app"
sudo rm -dfR "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/BOINC.pkg"
# Update the installer wrapper application's info.plist, InfoPlist.strings files
sudo sed -i "" s/BOINC/"${BRAND_NAME}"/g "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Info.plist"
sudo sed -i "" s/MacInstaller.icns/"${INSTALLER_ICNS_FILE}"/g "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Info.plist"
# InfoPlist.strings file uses UTF-16 encoding
sudo chmod a+w "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/English.lproj/InfoPlist.strings"
sudo iconv -f UTF-16 -t UTF-8 "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/English.lproj/InfoPlist.strings" > "${PR_PATH}/tempUTF84"
sudo sed -i "" s/BOINC/"${MANAGER_NAME}"/g "${PR_PATH}/tempUTF84"
sudo iconv -f UTF-8 -t UTF-16 "${PR_PATH}/tempUTF84" > "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/English.lproj/InfoPlist.strings"
sudo rm -f "${PR_PATH}/tempUTF84"
# Replace the installer wrapper application's MacInstaller.icns file
sudo cp -fp "${INSTALLER_ICNS_FILE}" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/${INSTALLER_ICNS_FILE}"
sudo rm -f "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/MacInstaller.icns"
# Rename the installer wrapper application's executable inside the bundle
sudo mv -f "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/MacOS/BOINC Installer" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/MacOS/${BRAND_NAME} Installer"
# Build the installer package inside the wrapper application's bundle
# Build the installer package
if [ "$PACKAGEMAKER_VERSION" = "3" ]; then
# Packagemaker Version 3
## /Developer/usr/bin/packagemaker -r ../BOINC_Installer/Pkg_Root -e ../BOINC_Installer/Installer\ Resources/ -s ../BOINC_Installer/Installer\ Scripts/ -f mac_build/Pkg-Info.plist -t "BOINC Manager" -n "$1.$2.$3" -b -o ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.app/Contents/Resources/BOINC.pkg
/Developer/usr/bin/packagemaker -r "${PR_PATH}" -e "${IR_PATH}" -s "${SCRIPTS_PATH}" -f "${NEW_DIR_PATH}/Pkg-Info.plist" -t "${MANAGER_NAME}" -n "$1.$2.$3" -b -o "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/${BRAND_NAME}.pkg"
## /Developer/usr/bin/packagemaker -r ../BOINC_Installer/Pkg_Root -e ../BOINC_Installer/Installer\ Resources/ -s ../BOINC_Installer/Installer\ Scripts/ -f mac_build/Pkg-Info.plist -t "BOINC Manager" -n "$1.$2.$3" -b -o ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.pkg
/Developer/usr/bin/packagemaker -r "${PR_PATH}" -e "${IR_PATH}" -s "${SCRIPTS_PATH}" -f "${NEW_DIR_PATH}/Pkg-Info.plist" -t "${MANAGER_NAME}" -n "$1.$2.$3" -b -o "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.pkg"
# Remove TokenDefinitions.plist and IFPkgPathMappings in Info.plist, which would cause installer to find a previous copy of ${MANAGER_NAME} and install there
sudo rm -f "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/${BRAND_NAME}.pkg/Contents/Resources/TokenDefinitions.plist"
defaults delete "`pwd`/${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/${BRAND_NAME}.pkg/Contents/Info" IFPkgPathMappings
sudo rm -f "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.pkg/Contents/Resources/TokenDefinitions.plist"
defaults delete "`pwd`/${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.pkg/Contents/Info" IFPkgPathMappings
else
# Packagemaker Version 2
## /Developer/Tools/packagemaker -build -p ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.app/Contents/Resources/BOINC.pkg -f ../BOINC_Installer/Pkg_Root -r ../BOINC_Installer/Installer\ Resources/ -i mac_build/Pkg-Info.plist -d mac_Installer/Description.plist -ds
/Developer/Tools/packagemaker -build -p "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/${BRAND_NAME}.pkg" -f "${PR_PATH}" -r "${IR_PATH}" -i "${NEW_DIR_PATH}/Pkg-Info.plist" -d "${NEW_DIR_PATH}/Description.plist" -ds
## /Developer/Tools/packagemaker -build -p ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.pkg -f ../BOINC_Installer/Pkg_Root -r ../BOINC_Installer/Installer\ Resources/ -i mac_build/Pkg-Info.plist -d mac_Installer/Description.plist -ds
/Developer/Tools/packagemaker -build -p "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.pkg" -f "${PR_PATH}" -r "${IR_PATH}" -i "${NEW_DIR_PATH}/Pkg-Info.plist" -d "${NEW_DIR_PATH}/Description.plist" -ds
fi
# Add our custom icon to installer package
ditto -xk "${INSTALLER_ICNS_FILE}" "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.pkg"
SetFile -a CE "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.pkg"
SetFile -a V "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.pkg/"Icon*
## for debugging
## if [ $? -ne 0 ]; then
## echo ""
@ -349,12 +326,6 @@ fi
## echo ""
## fi
# Allow the installer wrapper application to modify the package's Info.plist file
sudo chmod u+w,g+w,o+w "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app/Contents/Resources/${BRAND_NAME}.pkg/Contents/Info.plist"
# Update the installer wrapper application's creation date
sudo touch "${NEW_DIR_PATH}/${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal/${BRAND_NAME} Installer.app"
# Remove temporary copies of Pkg-Info.plist and Description.plist
sudo rm ${NEW_DIR_PATH}/Pkg-Info.plist
sudo rm ${NEW_DIR_PATH}/Description.plist
@ -366,11 +337,12 @@ sudo rm -dfR "${SCRIPTS_PATH}"
# Compress the products
cd ${NEW_DIR_PATH}
zip -rqy "${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal.zip" "${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal"
## Use ditto instead of zip utility to preserve resource forks and Finder attributes (custom icon, hide extension)
ditto -ck --sequesterRsrc --keepParent "${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal" "${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal.zip"
##### We've decided not to create branded command-line executables; they are identical to standard ones
#### zip -rqy "${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin.zip" "${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin"
#### ditto -ck --sequesterRsrc --keepParent "${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin" "${LC_BRAND_NAME}_$1.$2.$3_universal-apple-darwin.zip"
##### We've decided not to create branded symbol table file; it is identical to standard one
#### zip -rqy "${LC_BRAND_NAME}_$1.$2.$3_macOSX_SymbolTables.zip" "${LC_BRAND_NAME}_$1.$2.$3_macOSX_SymbolTables"
#### ditto -ck --sequesterRsrc --keepParent "${LC_BRAND_NAME}_$1.$2.$3_macOSX_SymbolTables" "${LC_BRAND_NAME}_$1.$2.$3_macOSX_SymbolTables.zip"
# Force Finder to recognize changed icons by deleting the uncompressed products and expanding the zip file
sudo rm -dfR "${LC_BRAND_NAME}_$1.$2.$3_macOSX_universal"

View File

@ -1,7 +1,7 @@
#!/bin/sh
##
# post-Install Script for Macintosh BOINC Manager for OS X revised 2/10/10
# post-Install Script for Macintosh BOINC Manager for OS X revised 12/6/10
##
echo "initial directory = $PWD"
@ -17,9 +17,16 @@ if [ -f "Contents/Resources/acct_mgr_url.xml" ]; then
cp -fp Contents/Resources/acct_mgr_url.xml "/Library/Application Support/BOINC Data/acct_mgr_url.xml"
fi
# Run the Postinstall Application
Run the Postinstall Application
if [ "${COMMAND_LINE_INSTALL}" = "1" ]; then
rm -f /tmp/BOINCInstallLog.txt
Contents/Resources/PostInstall.app/Contents/MacOS/PostInstall -part1 >> /tmp/BOINCInstallLog.txt
sleep 2
Contents/Resources/PostInstall.app/Contents/MacOS/PostInstall -part2 & >> /tmp/BOINCInstallLog.txt
else
Contents/Resources/PostInstall.app/Contents/MacOS/PostInstall -part1
sleep 2
Contents/Resources/PostInstall.app/Contents/MacOS/PostInstall -part2 &
fi
exit 0

View File

@ -1,7 +1,7 @@
#!/bin/sh
##
# post-Upgrade Script for Macintosh BOINC Manager for OS X revised 2/10/10
# post-Upgrade Script for Macintosh BOINC Manager for OS X revised 12/6/10
##
echo "initial directory = $PWD"
@ -18,8 +18,15 @@ if [ -f "Contents/Resources/acct_mgr_url.xml" ]; then
fi
# Run the Postinstall Application
if [ "${COMMAND_LINE_INSTALL}" = "1" ]; then
rm -f /tmp/BOINCInstallLog.txt
Contents/Resources/PostInstall.app/Contents/MacOS/PostInstall -part1 >> /tmp/BOINCInstallLog.txt
sleep 2
Contents/Resources/PostInstall.app/Contents/MacOS/PostInstall -part2 & >> /tmp/BOINCInstallLog.txt
else
Contents/Resources/PostInstall.app/Contents/MacOS/PostInstall -part1
sleep 2
Contents/Resources/PostInstall.app/Contents/MacOS/PostInstall -part2 &
fi
exit 0

View File

@ -20,6 +20,7 @@
##
# Release Script for Macintosh BOINC Manager 10/31/07 by Charlie Fenton
## updated 11/18/09 by Charlie Fenton for OS 10.6 Snow Leopard
## updated 8/4/11 by Charlie Fenton
##
## NOTE: This script uses PackageMaker, which is installed as part of the
## XCode developer tools. So you must have installed XCode Developer
@ -90,7 +91,6 @@ cp -fp mac_installer/postinstall ../BOINC_Installer/Installer\ Scripts/
cp -fp mac_installer/postupgrade ../BOINC_Installer/Installer\ Scripts/
cp -fpR $BUILDPATH/PostInstall.app ../BOINC_Installer/Installer\ Resources/
cp -fpR $BUILDPATH/WaitPermissions.app ../BOINC_Installer/Installer\ Resources/
mkdir -p ../BOINC_Installer/Pkg_Root
mkdir -p ../BOINC_Installer/Pkg_Root/Applications
@ -102,6 +102,8 @@ mkdir -p ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/lo
mkdir -p ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/switcher
mkdir -p ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/skins
cp -fpR $BUILDPATH/WaitPermissions.app ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/
cp -fpR $BUILDPATH/switcher ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/switcher/
cp -fpR $BUILDPATH/setprojectgrp ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/switcher/
## cp -fpR $BUILDPATH/AppStats ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/switcher/
@ -126,18 +128,6 @@ cp -fpR $BUILDPATH/BOINCManager.app ../BOINC_Installer/Pkg_Root/Applications/
cp -fpR $BUILDPATH/BOINCSaver.saver ../BOINC_Installer/Pkg_Root/Library/Screen\ Savers/
## If x86_64 version of screen saver for OS 10.6 exists, merge it into our screen saver
if [ -x ../_boinc_SnowLeopard/mac_build/build/Deployment/BOINCSaver.saver/Contents/MacOS/BOINCSaver ]; then
if [ "$4" != "-dev" ]; then
rm -f ../BOINC_Installer/Pkg_Root/Library/Screen\ Savers/BOINCSaver.saver/Contents/MacOS/BOINCSaver
rm -fR ../BOINC_Installer/temp/
mkdir -p ../BOINC_Installer/temp/
lipo ../_boinc_SnowLeopard/mac_build/build/Deployment/BOINCSaver.saver/Contents/MacOS/BOINCSaver -thin x86_64 -output ../BOINC_Installer/temp/saver64
lipo ../BOINC_Installer/temp/saver64 $BUILDPATH/BOINCSaver.saver/Contents/MacOS/BOINCSaver -create -output ../BOINC_Installer/Pkg_Root/Library/Screen\ Savers/BOINCSaver.saver/Contents/MacOS/BOINCSaver
rm -fR ../BOINC_Installer/temp/
fi
fi
## Copy the localization files into the installer tree
## Old way copies CVS and *.po files which are not needed
## cp -fpR locale/ ../BOINC_Installer/Pkg_Root/Library/Application\ Support/BOINC\ Data/locale
@ -185,10 +175,7 @@ sudo chmod -R 644 ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_
cp -fpR $BUILDPATH/Uninstall\ BOINC.app ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/extras
sudo chown -R root:admin ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/extras/Uninstall\ BOINC.app
sudo chmod -R 555 ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/extras/Uninstall\ BOINC.app
# Copy the installer wrapper application "BOINC Installer.app"
cp -fpR $BUILDPATH/BOINC\ Installer.app ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/
sudo chmod -R 755 ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/extras/Uninstall\ BOINC.app
DarwinVersion=`uname -r`;
DarwinMajorVersion=`echo $DarwinVersion | sed 's/\([0-9]*\)[.].*/\1/' `;
@ -203,26 +190,22 @@ DarwinMajorVersion=`echo $DarwinVersion | sed 's/\([0-9]*\)[.].*/\1/' `;
# Darwin version 6.x corresponds to OS 10.2.x
# Build the installer package inside the wrapper application's bundle
if [ "$DarwinMajorVersion" = "8" ]; then
# OS 10.4 packagemaker
/Developer/Tools/packagemaker -build -p ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.app/Contents/Resources/BOINC.pkg -f ../BOINC_Installer/Pkg_Root -r ../BOINC_Installer/Installer\ Resources/ -i mac_build/Pkg-Info.plist -d mac_Installer/Description.plist -ds
else
# OS 10.5 / OS 10.6 packagemaker
/Developer/usr/bin/packagemaker -r ../BOINC_Installer/Pkg_Root -e ../BOINC_Installer/Installer\ Resources/ -s ../BOINC_Installer/Installer\ Scripts/ -f mac_build/Pkg-Info.plist -t "BOINC Manager" -n "$1.$2.$3" -b -o ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.app/Contents/Resources/BOINC.pkg
/Developer/usr/bin/packagemaker -r ../BOINC_Installer/Pkg_Root -e ../BOINC_Installer/Installer\ Resources/ -s ../BOINC_Installer/Installer\ Scripts/ -f mac_build/Pkg-Info.plist -t "BOINC Manager" -n "$1.$2.$3" -b -o ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.pkg
# Remove TokenDefinitions.plist and IFPkgPathMappings in Info.plist, which would cause installer to find a previous copy of BOINCManager and install there
sudo rm -f ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.app/Contents/Resources/BOINC.pkg/Contents/Resources/TokenDefinitions.plist
defaults delete "$BOINCPath/../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC Installer.app/Contents/Resources/BOINC.pkg/Contents/Info" IFPkgPathMappings
fi
# Allow the installer wrapper application to modify the package's Info.plist file
sudo chmod a+rw ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.app/Contents/Resources/BOINC.pkg/Contents/Info.plist
sudo rm -f ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.pkg/Contents/Resources/TokenDefinitions.plist
defaults delete "$BOINCPath/../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC Installer.pkg/Contents/Info" IFPkgPathMappings
# Add our custom icon
ditto -xk clientgui/res/MacPkgIcon.zip ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC\ Installer.pkg/
SetFile -a CE "$BOINCPath/../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC Installer.pkg"
SetFile -a V "$BOINCPath/../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_universal/BOINC Installer.pkg/"Icon*
# Build the stand-alone client distribution
cp -fpR mac_build/Mac_SA_Insecure.sh ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_universal-apple-darwin/
cp -fpR mac_build/Mac_SA_Secure.sh ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_universal-apple-darwin/
cp -fpR COPYING ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_universal-apple-darwin/
cp -fpR COPYING.LESSER ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_universal-apple-darwin/
cp -fpR COPYRIGHT ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_universal-apple-darwin/
cp -fpR COPYING ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_universal-apple-darwin/COPYING.txt
cp -fpR COPYING.LESSER ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_universal-apple-darwin/COPYING.LESSER.txt
cp -fpR COPYRIGHT ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_universal-apple-darwin/COPYRIGHT.txt
cp -fp mac_Installer/License.rtf ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_universal-apple-darwin/
sudo chown -R 501:admin ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_universal-apple-darwin/*
sudo chmod -R 644 ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_universal-apple-darwin/*
@ -243,9 +226,10 @@ sudo chmod -R u+rw-s,g+r-ws,o+r-w ../BOINC_Installer/New_Release_$1_$2_$3/boinc_
cp -fpR $BUILDPATH/SymbolTables/ ../BOINC_Installer/New_Release_$1_$2_$3/boinc_$1.$2.$3_macOSX_SymbolTables/
cd ../BOINC_Installer/New_Release_$1_$2_$3
zip -rqy boinc_$1.$2.$3_macOSX_universal.zip boinc_$1.$2.$3_macOSX_universal
zip -rqy boinc_$1.$2.$3_universal-apple-darwin.zip boinc_$1.$2.$3_universal-apple-darwin
zip -rqy boinc_$1.$2.$3_macOSX_SymbolTables.zip boinc_$1.$2.$3_macOSX_SymbolTables
## Use ditto instead of zip utility to preserve resource forks and Finder attributes (custom icon, hide extension)
ditto -ck --sequesterRsrc --keepParent boinc_$1.$2.$3_macOSX_universal boinc_$1.$2.$3_macOSX_universal.zip
ditto -ck --sequesterRsrc --keepParent boinc_$1.$2.$3_universal-apple-darwin boinc_$1.$2.$3_universal-apple-darwin.zip
ditto -ck --sequesterRsrc --keepParent boinc_$1.$2.$3_macOSX_SymbolTables boinc_$1.$2.$3_macOSX_SymbolTables.zip
#popd
cd "${BOINCPath}"

View File

@ -208,11 +208,17 @@ static OSStatus DoUninstall(void) {
system ("rm -rf \"/Applications/Progress\\ Thru\\ Processors\\ Desktop.app\"");
system ("rm -rf \"/Library/Screen Savers/Progress\\ Thru\\ Processors.saver\"");
// Delete any receipt from an older installer (which had
// a wrapper application around the installer package.)
system ("rm -rf /Library/Receipts/GridRepublic.pkg");
system ("rm -rf /Library/Receipts/Progress\\ Thru\\ Processors.pkg");
system ("rm -rf /Library/Receipts/BOINC.pkg");
// Delete any receipt from a newer installer (a bare package.)
system ("rm -rf /Library/Receipts/GridRepublic\\ Installer.pkg");
system ("rm -rf /Library/Receipts/Progress\\ Thru\\ Processors\\ Installer.pkg");
system ("rm -rf /Library/Receipts/BOINC\\ Installer.pkg");
// Phase 5: Set BOINC Data owner and group to logged in user
// We don't customize BOINC Data directory name for branding
// system ("rm -rf \"/Library/Application Support/BOINC Data\"");