From 1b7c83f22439d7f930b0ac380aacd265faf9acbe Mon Sep 17 00:00:00 2001 From: Charlie Fenton Date: Fri, 5 Aug 2011 12:08:34 +0000 Subject: [PATCH] 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 --- checkin_notes | 44 +++ client/http_curl.cpp | 8 + clientgui/mac/SetVersion.cpp | 5 +- clientgui/res/MacGRPkgIcon.zip | Bin 0 -> 22075 bytes clientgui/res/MacPTPPkgIcon.zip | Bin 0 -> 214718 bytes clientgui/res/MacPkgIcon.zip | Bin 0 -> 32169 bytes clientscr/Mac_Saver_Module.h | 31 +- clientscr/Mac_Saver_ModuleView.h | 20 +- clientscr/Mac_Saver_ModuleView.m | 261 ++++++++----- clientscr/mac_saver_module.cpp | 42 ++- clientscr/screensaver.cpp | 2 +- lib/coproc.cpp | 3 + mac_build/boinc.xcodeproj/project.pbxproj | 127 ++++--- mac_build/buildc-ares.sh | 92 +---- mac_build/buildcurl.sh | 103 ++--- mac_build/setupForBOINC.sh | 12 +- mac_installer/GR-ReadMe.rtf | 17 +- mac_installer/PTP-ReadMe.rtf | 29 +- mac_installer/PostInstall.cpp | 434 ++++++++++++++-------- mac_installer/ReadMe.rtf | 14 +- mac_installer/WaitPermissions.cpp | 2 + mac_installer/make_GridRepublic.sh | 102 ++--- mac_installer/make_ProgThruProc.sh | 98 ++--- mac_installer/postinstall | 13 +- mac_installer/postupgrade | 11 +- mac_installer/release_boinc.sh | 52 +-- mac_installer/uninstall.cpp | 8 +- 27 files changed, 827 insertions(+), 703 deletions(-) create mode 100644 clientgui/res/MacGRPkgIcon.zip create mode 100644 clientgui/res/MacPTPPkgIcon.zip create mode 100644 clientgui/res/MacPkgIcon.zip diff --git a/checkin_notes b/checkin_notes index 83e4ca99f8..219217b8c5 100644 --- a/checkin_notes +++ b/checkin_notes @@ -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 diff --git a/client/http_curl.cpp b/client/http_curl.cpp index e89ee9f573..b2680b515f 100644 --- a/client/http_curl.cpp +++ b/client/http_curl.cpp @@ -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) { diff --git a/clientgui/mac/SetVersion.cpp b/clientgui/mac/SetVersion.cpp index a99c5a6e29..9f168aa520 100644 --- a/clientgui/mac/SetVersion.cpp +++ b/clientgui/mac/SetVersion.cpp @@ -227,7 +227,7 @@ int MakeInstallerInfoPlistFile(char* myPath, char* brand) { fprintf(f, "\tIFPkgFlagIsRequired\n\t0\n"); fprintf(f, "\tIFPkgFlagOverwritePermissions\n\t0\n"); fprintf(f, "\tIFPkgFlagRelocatable\n\t0\n"); - fprintf(f, "\tIFPkgFlagRestartAction\n\tRequiredLogout\n"); + fprintf(f, "\tIFPkgFlagRestartAction\n\tNoRestart\n"); fprintf(f, "\tIFPkgFlagRootVolumeOnly\n\t1\n"); fprintf(f, "\tIFPkgFlagUpdateInstalledLanguages\n\t0\n"); fprintf(f, "\tIFPkgFormatVersion\n\t0.10000000149011612\n"); @@ -243,6 +243,3 @@ int MakeInstallerInfoPlistFile(char* myPath, char* brand) { return retval; } - - -const char *BOINC_RCSID_9263a2dc22="$Id$"; diff --git a/clientgui/res/MacGRPkgIcon.zip b/clientgui/res/MacGRPkgIcon.zip new file mode 100644 index 0000000000000000000000000000000000000000..ec82b0ec57f31eb08a123dedf71ae98b452cfcd2 GIT binary patch literal 22075 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 literal 0 HcmV?d00001 diff --git a/clientgui/res/MacPTPPkgIcon.zip b/clientgui/res/MacPTPPkgIcon.zip new file mode 100644 index 0000000000000000000000000000000000000000..63f06edfe7e41bc3521a95a3cd561eb797f0303a GIT binary patch literal 214718 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 tP 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Ⓢ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 #include +#include // For NSInteger +#include +#include +#include + +#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), ¶ms, &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" ]; diff --git a/clientscr/mac_saver_module.cpp b/clientscr/mac_saver_module.cpp index 2cd1c2fe9c..0834667365 100644 --- a/clientscr/mac_saver_module.cpp +++ b/clientscr/mac_saver_module.cpp @@ -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 diff --git a/clientscr/screensaver.cpp b/clientscr/screensaver.cpp index 8956c8cdb7..6bc46f27ff 100644 --- a/clientscr/screensaver.cpp +++ b/clientscr/screensaver.cpp @@ -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; diff --git a/lib/coproc.cpp b/lib/coproc.cpp index 0e333adb6d..b6f62872a9 100644 --- a/lib/coproc.cpp +++ b/lib/coproc.cpp @@ -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. diff --git a/mac_build/boinc.xcodeproj/project.pbxproj b/mac_build/boinc.xcodeproj/project.pbxproj index 7969353a4e..166fc35509 100755 --- a/mac_build/boinc.xcodeproj/project.pbxproj +++ b/mac_build/boinc.xcodeproj/project.pbxproj @@ -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; }; diff --git a/mac_build/buildc-ares.sh b/mac_build/buildc-ares.sh index 9dd2cdb73f..18e49ea365 100644 --- a/mac_build/buildc-ares.sh +++ b/mac_build/buildc-ares.sh @@ -18,52 +18,26 @@ # along with BOINC. If not, see . # # -# 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/ diff --git a/mac_build/buildcurl.sh b/mac_build/buildcurl.sh index dc61c4d793..87e048f7dd 100644 --- a/mac_build/buildcurl.sh +++ b/mac_build/buildcurl.sh @@ -18,58 +18,26 @@ # along with BOINC. If not, see . # # -# 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 diff --git a/mac_build/setupForBOINC.sh b/mac_build/setupForBOINC.sh index f7af6f0067..e1ed3ff43e 100644 --- a/mac_build/setupForBOINC.sh +++ b/mac_build/setupForBOINC.sh @@ -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 diff --git a/mac_installer/GR-ReadMe.rtf b/mac_installer/GR-ReadMe.rtf index 5e751f0b3e..66332e35f7 100644 --- a/mac_installer/GR-ReadMe.rtf +++ b/mac_installer/GR-ReadMe.rtf @@ -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.\ } \ No newline at end of file diff --git a/mac_installer/PTP-ReadMe.rtf b/mac_installer/PTP-ReadMe.rtf index aa6bedfa8e..38e517e2ec 100644 --- a/mac_installer/PTP-ReadMe.rtf +++ b/mac_installer/PTP-ReadMe.rtf @@ -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.\ } \ No newline at end of file diff --git a/mac_installer/PostInstall.cpp b/mac_installer/PostInstall.cpp index b06760e134..022cb7ff23 100755 --- a/mac_installer/PostInstall.cpp +++ b/mac_installer/PostInstall.cpp @@ -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 @@ -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; ipw_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; ipw_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$"; diff --git a/mac_installer/ReadMe.rtf b/mac_installer/ReadMe.rtf index 61b27a46da..ff99f03adc 100644 --- a/mac_installer/ReadMe.rtf +++ b/mac_installer/ReadMe.rtf @@ -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.\ diff --git a/mac_installer/WaitPermissions.cpp b/mac_installer/WaitPermissions.cpp index 5b6b936e27..d84d722bc4 100644 --- a/mac_installer/WaitPermissions.cpp +++ b/mac_installer/WaitPermissions.cpp @@ -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); diff --git a/mac_installer/make_GridRepublic.sh b/mac_installer/make_GridRepublic.sh index b6c527e909..e60bc175f3 100644 --- a/mac_installer/make_GridRepublic.sh +++ b/mac_installer/make_GridRepublic.sh @@ -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 diff --git a/mac_installer/make_ProgThruProc.sh b/mac_installer/make_ProgThruProc.sh index 380eda35e6..6fcda7be8d 100644 --- a/mac_installer/make_ProgThruProc.sh +++ b/mac_installer/make_ProgThruProc.sh @@ -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" diff --git a/mac_installer/postinstall b/mac_installer/postinstall index e695cefb03..4df8333ede 100644 --- a/mac_installer/postinstall +++ b/mac_installer/postinstall @@ -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 diff --git a/mac_installer/postupgrade b/mac_installer/postupgrade index d1840d076e..02dd0d61c2 100755 --- a/mac_installer/postupgrade +++ b/mac_installer/postupgrade @@ -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 diff --git a/mac_installer/release_boinc.sh b/mac_installer/release_boinc.sh index 62f651e2e0..9647e95a9c 100644 --- a/mac_installer/release_boinc.sh +++ b/mac_installer/release_boinc.sh @@ -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}" diff --git a/mac_installer/uninstall.cpp b/mac_installer/uninstall.cpp index fb8f5d9b36..c109fb01e9 100644 --- a/mac_installer/uninstall.cpp +++ b/mac_installer/uninstall.cpp @@ -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\"");

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%0Du2w+IRtC7q+op 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 aO;Ae(1^@s60096206zc#0BJ@80000Nr;?rk literal 0 HcmV?d00001 diff --git a/clientgui/res/MacPkgIcon.zip b/clientgui/res/MacPkgIcon.zip new file mode 100644 index 0000000000000000000000000000000000000000..526e35e475697b5d70e4b128eb27ae05f05013ea GIT binary patch literal 32169 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