Revision: 1036 http://trac.macosforge.org/projects/darwinbuild/changeset/1036 Author: mww@apple.com Date: 2012-05-17 15:57:34 -0700 (Thu, 17 May 2012) Log Message: ----------- darwinup: Updated trigger for xpchelper cacher rebuild. Modified Paths: -------------- trunk/darwinup/Utils.cpp trunk/darwinup/Utils.h trunk/darwinup/main.cpp Property Changed: ---------------- trunk/ Property changes on: trunk ___________________________________________________________________ Modified: svn:mergeinfo - /branches/PR-10008999:984 /branches/PR-10307836:993-996 /branches/PR-10363375:959-960 /branches/PR-10397485:967 /branches/PR-10412052:973-975 /branches/PR-10412066:974-975 /branches/PR-10428083:994-997 /branches/PR-10431324:979-980 /branches/PR-10821792:1007-1010 /branches/PR-10827653:1021 /branches/PR-10830883:1015 /branches/PR-11042608:1025 /branches/PR-11056762:1031 /branches/PR-4841388:399-419 /branches/PR-6358021:442-443 /branches/PR-6392966:423-427 /branches/PR-6398060:433-434 /branches/PR-6493844:460-461 /branches/PR-6497694:466-468,471 /branches/PR-6634286:632-650 /branches/PR-6688645:479-490 /branches/PR-6722857:495-499 /branches/PR-6729491:655-664 /branches/PR-6973110:804-813 /branches/PR-7250612:635-650 /branches/PR-7341154:682-694 /branches/PR-7431723:660-664 /branches/PR-7461534:650-664 /branches/PR-7482850:670-671 /branches/PR-7489777:676-731 /branches/PR-7529688:692-694 /branches/PR-7593824:739-772 /branches/PR-7598640:703-731 /branches/PR-7748469:777-785 /branches/PR-7765119:790-791 /branches/PR-7798586:796-799 /branches/PR-7872907:830-840 /branches/PR-7935095:819-821 /branches/PR-8116613:849 /branches/PR-8279204:854-862 /branches/PR-8416637:870-880 /branches/PR-8486662:885-889 /branches/PR-8488185:894-898 /branches/PR-8604911:903-905 /branches/PR-8817822:917-933 /branches/PR-8908468:912 /branches/PR-9697169:1004-1008 /branches/PR-9709247:1002-1009 + /branches/PR-10008999:984 /branches/PR-10307836:993-996 /branches/PR-10363375:959-960 /branches/PR-10397485:967 /branches/PR-10412052:973-975 /branches/PR-10412066:974-975 /branches/PR-10428083:994-997 /branches/PR-10431324:979-980 /branches/PR-10821792:1007-1010 /branches/PR-10827653:1021 /branches/PR-10830883:1015 /branches/PR-11042608:1025 /branches/PR-11056762:1031 /branches/PR-11283366:1035 /branches/PR-4841388:399-419 /branches/PR-6358021:442-443 /branches/PR-6392966:423-427 /branches/PR-6398060:433-434 /branches/PR-6493844:460-461 /branches/PR-6497694:466-468,471 /branches/PR-6634286:632-650 /branches/PR-6688645:479-490 /branches/PR-6722857:495-499 /branches/PR-6729491:655-664 /branches/PR-6973110:804-813 /branches/PR-7250612:635-650 /branches/PR-7341154:682-694 /branches/PR-7431723:660-664 /branches/PR-7461534:650-664 /branches/PR-7482850:670-671 /branches/PR-7489777:676-731 /branches/PR-7529688:692-694 /branches/PR-7593824:739-772 /branches/PR-7598640:703-731 /branches/PR-7748469:777-785 /branches/PR-7765119:790-791 /branches/PR-7798586:796-799 /branches/PR-7872907:830-840 /branches/PR-7935095:819-821 /branches/PR-8116613:849 /branches/PR-8279204:854-862 /branches/PR-8416637:870-880 /branches/PR-8486662:885-889 /branches/PR-8488185:894-898 /branches/PR-8604911:903-905 /branches/PR-8817822:917-933 /branches/PR-8908468:912 /branches/PR-9697169:1004-1008 /branches/PR-9709247:1002-1009 Modified: trunk/darwinup/Utils.cpp =================================================================== --- trunk/darwinup/Utils.cpp 2012-05-17 22:56:27 UTC (rev 1035) +++ trunk/darwinup/Utils.cpp 2012-05-17 22:57:34 UTC (rev 1036) @@ -371,38 +371,60 @@ res = find_base_system_path(&base, path); if (res) return res; - // xpchelper expects the --root value to *not* end in a slash. - if (has_suffix(base, "/")) { - char *ptr = strrchr(base, '/'); - if (ptr) { - *ptr = '\0'; - } - } - - if (verbosity) { - fprintf(stdout, "Updating xpc services cache for %s ...", base); - fflush(stdout); - } - char* toolpath; join_path(&toolpath, base, "/usr/libexec/xpchelper"); struct stat sb; res = stat(toolpath, &sb); - if (res) { - return 1; - } + if (res || ((sb.st_mode & S_IXUSR) == 0)) { + // no xpchelper + char* cachedir; + join_path(&cachedir, base, "/System/Library/Caches/com.apple.xpcd"); - const char* args[] = { - toolpath, - "--rebuild-cache", - "--root", base, - NULL - }; - res = exec_with_args(args); + res = mkdir_p(cachedir); + if (!res || errno == EEXIST) { + char* cachepath; + join_path(&cachepath, cachedir, "xpcd_cache.dylib"); - if (verbosity) fprintf(stdout, "Done updating xpc cache\n"); + res = open(cachepath, O_APPEND | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + if (res >= 0) { + close(res); + } else { + fprintf(stderr, "Error: (%d) failed to touch cache file.\n", errno); + res = errno; + } + free(cachepath); + } else { + res = errno; + fprintf(stderr, "Error: (%d) failed to mkdir_p cache directory.\n", res); + } + if (verbosity) fprintf(stdout, "Touched xpc cache file.\n"); + free(cachedir); + } else { + // xpchelper expects the --root value to *not* end in a slash. + if (has_suffix(base, "/")) { + char *ptr = strrchr(base, '/'); + if (ptr) { + *ptr = '\0'; + } + } + if (verbosity) { + fprintf(stdout, "Updating xpc services cache for %s ...", base); + fflush(stdout); + } + + const char* args[] = { + toolpath, + "--rebuild-cache", + "--root", base, + NULL + }; + res = exec_with_args(args); + + if (verbosity) fprintf(stdout, "Done updating xpc cache\n"); + } + free(toolpath); free(base); return res; Modified: trunk/darwinup/Utils.h =================================================================== --- trunk/darwinup/Utils.h 2012-05-17 22:56:27 UTC (rev 1035) +++ trunk/darwinup/Utils.h 2012-05-17 22:57:34 UTC (rev 1036) @@ -41,6 +41,7 @@ #include <stdio.h> #include <assert.h> #include <errno.h> +#include <fcntl.h> #include <libgen.h> #include <limits.h> #include <stdlib.h> Modified: trunk/darwinup/main.cpp =================================================================== --- trunk/darwinup/main.cpp 2012-05-17 22:56:27 UTC (rev 1035) +++ trunk/darwinup/main.cpp 2012-05-17 22:57:34 UTC (rev 1036) @@ -107,8 +107,8 @@ int main(int argc, char* argv[]) { char* progname = strdup(basename(argv[0])); char* path = NULL; -#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 bool disable_automation = false; +#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 bool restart = false; #endif @@ -119,19 +119,15 @@ while ((ch = getopt(argc, argv, "fnp:vh")) != -1) { #endif switch (ch) { -#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 case 'd': disable_automation = true; break; -#endif case 'f': force = 1; break; case 'n': dryrun = 1; -#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 disable_automation = true; -#endif break; case 'p': if (optarg[0] != '/') { @@ -167,8 +163,8 @@ if (dryrun) IF_DEBUG("option: dry run\n"); if (force) IF_DEBUG("option: forcing operations\n"); -#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 if (disable_automation) IF_DEBUG("option: helpful automation disabled\n"); +#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 if (restart) IF_DEBUG("option: restart when finished\n"); #endif @@ -282,13 +278,11 @@ free(sle_path); } #endif -#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070 if (!disable_automation && depot->has_modified_xpc_services() && res == 0) { res = update_xpc_services_cache(path); if (res) fprintf(stderr, "Warning: could not update xpc services cache.\n"); res = 0; } -#endif #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 if (restart && res == 0) { res = tell_finder_to_restart();
participants (1)
-
source_changes@macosforge.org