// Make a MetaPackage to install both BOINC and VirtualBox int MakeMetaPackageInfoPlistFile(char* myPath, char* brand) { int retval = 0; FILE *f; if (IsFileCurrent(myPath)) return 0; f = fopen(myPath, "w"); if (f) { fprintf(f, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); fprintf(f, "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"); fprintf(f, "<plist version=\"1.0\">\n<dict>\n"); fprintf(f, "\t<key>CFBundleGetInfoString</key>\n"); fprintf(f, "\t<string>%s %s + VirtualBox</string>\n", brand, BOINC_VERSION_STRING); fprintf(f, "\t<key>CFBundleIdentifier</key>\n\t<string>edu.berkeley.boinc+vbox</string>\n"); fprintf(f, "\t<key>CFBundleShortVersionString</key>\n"); fprintf(f, "\t<string>%s</string>\n", BOINC_VERSION_STRING); fprintf(f, "\t<key>IFMajorVersion</key>\n\t<integer>%d</integer>\n", BOINC_MAJOR_VERSION); fprintf(f, "\t<key>IFMinorVersion</key>\n\t<integer>%d</integer>\n", BOINC_MINOR_VERSION); fprintf(f, "\t<key>IFPkgFlagAllowBackRev</key>\n\t<integer>1</integer>\n"); fprintf(f, "\t<key>IFPkgFlagAuthorizationAction</key>\n\t<string>AdminAuthorization</string>\n"); fprintf(f, "\t<key>IFPkgFlagRestartAction</key>\n\t<string>NoRestart</string>\n"); fprintf(f, "\t<key>IFPkgFlagRootVolumeOnly</key>\n\t<integer>1</integer>\n"); fprintf(f, "\t<key>IFPkgFlagComponentDirectory</key>\n\t<string>../</string>\n"); fprintf(f, "\t<key>IFPkgFlagPackageList</key>\n"); fprintf(f, "\t<array>\n"); fprintf(f, "\t\t<dict>\n"); fprintf(f, "\t\t\t<key>IFPkgFlagPackageLocation</key>\n\t\t\t<string>BOINC.pkg</string>\n"); fprintf(f, "\t\t\t<key>IFPkgFlagPackageSelection</key>\n\t\t\t<string>required</string>\n"); fprintf(f, "\t\t</dict>\n"); fprintf(f, "\t\t<dict>\n"); fprintf(f, "\t\t\t<key>IFPkgFlagPackageLocation</key>\n\t\t\t<string>VirtualBox.pkg</string>\n"); fprintf(f, "\t\t\t<key>IFPkgFlagPackageSelection</key>\n\t\t\t<string>selected</string>\n"); fprintf(f, "\t\t</dict>\n"); fprintf(f, "\t</array>\n"); fprintf(f, "\t<key>IFPkgFormatVersion</key>\n\t<real>0.10000000149011612</real>\n"); fprintf(f, "</dict>\n</plist>\n"); fflush(f); retval = fclose(f); } else { printf("Error creating file %s\n", myPath); retval = -1; } return retval; }
int MakeBOINCPackageInfoPlistFile(char* myPath, char* brand) { int retval = 0; FILE *f; if (IsFileCurrent(myPath)) return 0; f = fopen(myPath, "w"); if (f) { fprintf(f, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); fprintf(f, "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"); fprintf(f, "<plist version=\"1.0\">\n<dict>\n"); fprintf(f, "\t<key>CFBundleGetInfoString</key>\n"); fprintf(f, "\t<string>%s %s</string>\n", brand, BOINC_VERSION_STRING); fprintf(f, "\t<key>CFBundleIdentifier</key>\n\t<string>edu.berkeley.boinc</string>\n"); fprintf(f, "\t<key>CFBundleShortVersionString</key>\n"); fprintf(f, "\t<string>%s</string>\n", BOINC_VERSION_STRING); fprintf(f, "\t<key>IFPkgFlagAllowBackRev</key>\n\t<integer>1</integer>\n"); fprintf(f, "\t<key>IFPkgFlagAuthorizationAction</key>\n\t<string>AdminAuthorization</string>\n"); fprintf(f, "\t<key>IFPkgFlagDefaultLocation</key>\n\t<string>/</string>\n"); fprintf(f, "\t<key>IFPkgFlagFollowLinks</key>\n\t<integer>0</integer>\n"); fprintf(f, "\t<key>IFPkgFlagInstallFat</key>\n\t<integer>0</integer>\n"); fprintf(f, "\t<key>IFPkgFlagInstalledSize</key>\n\t<integer>6680</integer>\n"); fprintf(f, "\t<key>IFPkgFlagIsRequired</key>\n\t<integer>0</integer>\n"); fprintf(f, "\t<key>IFPkgFlagOverwritePermissions</key>\n\t<integer>0</integer>\n"); fprintf(f, "\t<key>IFPkgFlagRelocatable</key>\n\t<integer>0</integer>\n"); fprintf(f, "\t<key>IFPkgFlagRestartAction</key>\n\t<string>NoRestart</string>\n"); fprintf(f, "\t<key>IFPkgFlagRootVolumeOnly</key>\n\t<integer>1</integer>\n"); fprintf(f, "\t<key>IFPkgFlagUpdateInstalledLanguages</key>\n\t<integer>0</integer>\n"); fprintf(f, "\t<key>IFPkgFormatVersion</key>\n\t<real>0.10000000149011612</real>\n"); fprintf(f, "</dict>\n</plist>\n"); fflush(f); retval = fclose(f); } else { printf("Error creating file %s\n", myPath); retval = -1; } return retval; }
int FixInfoPlist_Strings(char* myPath, char* name) { int retval = 0; FILE *f; if (IsFileCurrent(myPath)) return 0; f = fopen(myPath, "w"); if (f) { fprintf(f, "/* Localized versions of Info.plist keys */\n\n"); fprintf(f, "CFBundleName = \"%s\";\n", name); fprintf(f, "CFBundleShortVersionString = \"%s version %s\";\n", name, BOINC_VERSION_STRING); fprintf(f, "CFBundleGetInfoString = \"%s version %s, Copyright 2013 University of California.\";\n", name, BOINC_VERSION_STRING); fflush(f); retval = fclose(f); } else { puts("Error updating version number in file InfoPlist.strings\n"); retval = -1; } return retval; }
int FixInfoPlistFile(char* name) { int retval = 0; FILE *fin = NULL, *fout = NULL; char *c, a, buf[1024]; char srcPath[MAXPATHLEN], dstPath[MAXPATHLEN]; strcpy(dstPath, "./"); strcat(dstPath, name); strcpy(srcPath, "../clientgui/mac/templates/"); strcat(srcPath, name); if (IsFileCurrent(dstPath)) return 0; // Save the old file in case there is an error updating it if (file_exists(dstPath)) { rename(dstPath, "./temp"); } fin = fopen(srcPath, "r"); if (fin == NULL) goto bail; fout = fopen(dstPath, "w"); if (fout == NULL) { goto bail; } // Copy everything up to version number for (;;) { c = fgets(buf, sizeof(buf), fin); if (c == NULL) goto bail; // EOF c = strstr(buf, "CFBundleVersion</key>"); if (c) break; // Found "CFBundleVersion</key>" fputs(buf, fout); } c = strstr(buf, "<string>"); if (c == NULL) { fputs(buf, fout); c = fgets(buf, sizeof(buf), fin); if (c == NULL) goto bail; // EOF c = strstr(buf, "<string>"); if (c == NULL) goto bail; // "CFBundleVersion</key>" not followed by "<string>" } a = *(c+8); *(c+8) = '\0'; // Put terminator after "<string>" fputs(buf, fout); // Copy up to end of "<string>" fputs(BOINC_VERSION_STRING, fout); // Write the current version number *(c+8) = a; // Undo terminator we inserted c = strstr(buf, "</string>"); // Skip over old version number in input fputs(c, fout); // Copy rest of input line // Copy rest of file for (;;) { c = fgets(buf, sizeof(buf), fin); if (c == NULL) break; // EOF fputs(buf, fout); } fclose(fin); fflush(fout); fclose(fout); unlink("temp"); return retval; bail: if (fin) fclose(fin); if (fout) fclose(fout); if (file_exists("./temp")) { rename("./temp", dstPath); // sprintf(buf, "mv -f temp %s", myPath); // retval = system(buf); } else { sprintf(buf, "cp -f %s %s", srcPath, dstPath); retval = system(buf); } printf("Error updating version number in file %s\n", dstPath); return -1; }
int FixInfoPlistFile(char* myPath) { int retval = 0; FILE *fin = NULL, *fout = NULL; char *c, a, buf[1024]; if (IsFileCurrent(myPath)) return 0; rename(myPath, "./temp"); // sprintf(buf, "mv -f %s temp", myPath); // retval = system(buf); fin = fopen("temp", "r"); if (fin == NULL) goto bail; fout = fopen(myPath, "w"); if (fout == NULL) { goto bail; } // Copy everything up to version number for (;;) { c = fgets(buf, sizeof(buf), fin); if (c == NULL) goto bail; // EOF c = strstr(buf, "CFBundleVersion</key>"); if (c) break; // Found "CFBundleVersion</key>" fputs(buf, fout); } c = strstr(buf, "<string>"); if (c == NULL) { fputs(buf, fout); c = fgets(buf, sizeof(buf), fin); if (c == NULL) goto bail; // EOF c = strstr(buf, "<string>"); if (c == NULL) goto bail; // "CFBundleVersion</key>" not followed by "<string>" } a = *(c+8); *(c+8) = '\0'; // Put terminator after "<string>" fputs(buf, fout); // Copy up to end of "<string>" fputs(BOINC_VERSION_STRING, fout); // Write the current version number *(c+8) = a; // Undo terminator we inserted c = strstr(buf, "</string>"); // Skip over old version number in input fputs(c, fout); // Copy rest of input line // Copy rest of file for (;;) { c = fgets(buf, sizeof(buf), fin); if (c == NULL) break; // EOF fputs(buf, fout); } fclose(fin); fflush(fout); fclose(fout); unlink("temp"); return retval; bail: if (fin) fclose(fin); if (fout) fclose(fout); rename("./temp", myPath); // sprintf(buf, "mv -f temp %s", myPath); // retval = system(buf); printf("Error updating version number in file %s\n", myPath); return -1; }