diff --git a/checkin_notes b/checkin_notes index 1e36f65735..eb2eba4cde 100644 --- a/checkin_notes +++ b/checkin_notes @@ -291,3 +291,15 @@ David 11 Jan 2010 api/ boinc_api.cpp + +Charlie 8 Jan 2010 + - client sandbox: set LD_LIBRARY_PATH and DYLD_LIBRARY_PATH in switcher. + For unknown reasons, the these 2 environment variables are not + passed in to switcher, though all other environment variables do get + propagated. + + client/ + switcher.cpp + mac_build/ + boinc.xcodeproj/ + project.pbxproj diff --git a/client/switcher.cpp b/client/switcher.cpp index f502d059f4..8920c887bf 100644 --- a/client/switcher.cpp +++ b/client/switcher.cpp @@ -33,12 +33,22 @@ #include // getpwuid #include +#include "app_ipc.h" + using std::strcpy; +extern char ** environ; // CAF + int main(int argc, char** argv) { - passwd *pw; - group *grp; - char user_name[256], group_name[256]; + passwd *pw; + group *grp; + char user_name[256], group_name[256]; + APP_INIT_DATA aid; + FILE *f; + int retval = -1; + char libpath[8192]; + char newlibs[256]; + char *projectDirName; strcpy(user_name, "boinc_project"); strcpy(group_name, "boinc_project"); @@ -74,6 +84,49 @@ int main(int argc, char** argv) { pw = getpwnam(user_name); if (pw) setuid(pw->pw_uid); + // For unknown reasons, the LD_LIBRARY_PATH and DYLD_LIBRARY_PATH + // environment variables are not passed in to switcher, though all + // other environment variables do get propagated. So we recreate + // LD_LIBRARY_PATH and DYLD_LIBRARY_PATH here. + f = fopen(INIT_DATA_FILE, "r"); + if (f) { + retval = parse_init_data_file(f, aid); + fclose(f); + } + + if (!retval) { + // Get project name without leading path + projectDirName = strrchr(aid.project_dir, '/'); + if (projectDirName) { + ++projectDirName; + } else { + projectDirName = aid.project_dir; + } + sprintf(newlibs, "../../%s:.:../..", projectDirName); +#ifdef __APPLE__ + strcat(newlibs, ":/usr/local/cuda/lib/"); +#endif + char* p = getenv("LD_LIBRARY_PATH"); + if (p) { + sprintf(libpath, "%s:%s", newlibs, p); + } else { + strcpy(libpath, newlibs); + } + setenv("LD_LIBRARY_PATH", libpath, 1); + + // On the Mac, do the same for DYLD_LIBRARY_PATH + // +#ifdef __APPLE__ + p = getenv("DYLD_LIBRARY_PATH"); + if (p) { + sprintf(libpath, "%s:%s", newlibs, p); + } else { + strcpy(libpath, newlibs); + } + setenv("DYLD_LIBRARY_PATH", libpath, 1); +#endif + } + execv(argv[1], argv+2); // If we got here execv failed diff --git a/mac_build/boinc.xcodeproj/project.pbxproj b/mac_build/boinc.xcodeproj/project.pbxproj index 85be0dd162..3dfbcd448e 100755 --- a/mac_build/boinc.xcodeproj/project.pbxproj +++ b/mac_build/boinc.xcodeproj/project.pbxproj @@ -64,6 +64,8 @@ DD33C6F808B5BB4500768630 /* acct_setup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD33C6F708B5BB4500768630 /* acct_setup.cpp */; }; DD33C70408B5BEDE00768630 /* http_curl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD33C70208B5BEDE00768630 /* http_curl.cpp */; }; DD35353607E1E13F00C4718D /* boinc_api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5755AD302FE063A012012A7 /* boinc_api.cpp */; }; + DD3741D610FC948C001257EB /* filesys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5EAD475031AEFF8018E201A /* filesys.cpp */; }; + DD3741D910FC94BA001257EB /* url.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDC06AB210A3E93F00C8D9A5 /* url.cpp */; }; DD3E14DB0A774397007E0084 /* boinc in Resources */ = {isa = PBXBuildFile; fileRef = DDD74D8707CF482E0065AC9D /* boinc */; }; DD3E14DC0A774397007E0084 /* BOINCMgr.icns in Resources */ = {isa = PBXBuildFile; fileRef = DDF3028907CCCE2C00701169 /* BOINCMgr.icns */; }; DD3E14DD0A774397007E0084 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = F51BDF4903086C46012012A7 /* InfoPlist.strings */; }; @@ -375,6 +377,16 @@ DDE3A8810E90D21A00A363A7 /* sandbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD80C83D0CBAEB4F00F1121D /* sandbox.cpp */; }; DDE3A8850E90D23400A363A7 /* scheduler_op.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDE3A8840E90D23400A363A7 /* scheduler_op.cpp */; }; DDE41C260C1FCA8F00CA1F86 /* graphics2_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDE41C250C1FCA8F00CA1F86 /* graphics2_util.cpp */; }; + DDE5868E10FC8D2200DFA887 /* app_ipc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA8B6B1B046C364400A80164 /* app_ipc.cpp */; }; + DDE586A310FC8DD700DFA887 /* miofile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD344BD507C5B1150043025C /* miofile.cpp */; }; + DDE586A410FC8DD900DFA887 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F54B901602AC0A2201FB7237 /* parse.cpp */; }; + DDE586A710FC8E1200DFA887 /* hostinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD344BB607C5AEEE0043025C /* hostinfo.cpp */; }; + DDE586A810FC8E2B00DFA887 /* prefs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD344BE407C5B1670043025C /* prefs.cpp */; }; + DDE586AB10FC8E5100DFA887 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5EAD479031AF001018E201A /* util.cpp */; }; + DDE586AC10FC8E6900DFA887 /* str_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7BF7D70B8E7A9800A009F7 /* str_util.cpp */; }; + DDE586AF10FC8E7B00DFA887 /* proxy_info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD344BEF07C5B1770043025C /* proxy_info.cpp */; }; + DDE586B010FC8E9100DFA887 /* coproc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7475500D86273300860636 /* coproc.cpp */; }; + DDE586B310FC8E9B00DFA887 /* mfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD344BD207C5B1150043025C /* mfile.cpp */; }; DDF5F85A10DD05DB006A50CD /* notice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDE1372D10DC5E8D00161D6B /* notice.cpp */; }; DDF5F85B10DD05E4006A50CD /* notice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDE1372D10DC5E8D00161D6B /* notice.cpp */; }; DDF9A32F0B2E3D4D00091FCB /* auto_update.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDF9A32D0B2E3D4D00091FCB /* auto_update.cpp */; }; @@ -2760,6 +2772,18 @@ buildActionMask = 2147483647; files = ( DDD095490A3EDF2D00C95BA4 /* switcher.cpp in Sources */, + DDE5868E10FC8D2200DFA887 /* app_ipc.cpp in Sources */, + DDE586A310FC8DD700DFA887 /* miofile.cpp in Sources */, + DDE586A410FC8DD900DFA887 /* parse.cpp in Sources */, + DDE586A710FC8E1200DFA887 /* hostinfo.cpp in Sources */, + DDE586A810FC8E2B00DFA887 /* prefs.cpp in Sources */, + DDE586AB10FC8E5100DFA887 /* util.cpp in Sources */, + DDE586AC10FC8E6900DFA887 /* str_util.cpp in Sources */, + DDE586AF10FC8E7B00DFA887 /* proxy_info.cpp in Sources */, + DDE586B010FC8E9100DFA887 /* coproc.cpp in Sources */, + DDE586B310FC8E9B00DFA887 /* mfile.cpp in Sources */, + DD3741D610FC948C001257EB /* filesys.cpp in Sources */, + DD3741D910FC94BA001257EB /* url.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };