X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Ftrace_resource.cpp;h=04ac32709dfa09eea11d1d1951dee9948282cf26;hb=a684451ce345c9d3667921520a4a75e387811ad6;hp=85c8bee9a0fbe4a347ea7fbe287253523119749d;hpb=fc73ca1d4a8f177ccd84aa0c9a841c9e86c81fdc;p=apitrace diff --git a/common/trace_resource.cpp b/common/trace_resource.cpp index 85c8bee..04ac327 100644 --- a/common/trace_resource.cpp +++ b/common/trace_resource.cpp @@ -35,77 +35,116 @@ namespace trace { - os::String -findFile(const char *relPath, - const char *absPath, - bool verbose) +findProgram(const char*programFilename) { - os::String complete; - - /* First look in the same directory from which this process is - * running, (to support developers running a compiled program that - * has not been installed. */ - os::String process_dir = os::getProcessName(); - process_dir.trimFilename(); - - complete = process_dir; - complete.join(relPath); + os::String programPath; - if (complete.exists()) - return complete; + os::String processDir = os::getProcessName(); + processDir.trimFilename(); - /* Second, look in the directory for installed wrappers. */ - complete = absPath; - if (complete.exists()) - return complete; + programPath = processDir; + programPath.join(programFilename); + if (programPath.exists()) { + return programPath; + } - if (verbose) { - std::cerr << "error: cannot find " << relPath << " or " << absPath << "\n"; +#ifndef _WIN32 + // Try absolute install directory + programPath = APITRACE_PROGRAMS_INSTALL_DIR; + programPath.join(programFilename); + if (programPath.exists()) { + return programPath; } +#endif return ""; } +os::String +findWrapper(const char *wrapperFilename) +{ + os::String wrapperPath; + + os::String processDir = os::getProcessName(); + processDir.trimFilename(); + + // Try relative build directory + // XXX: Just make build and install directory layout match + wrapperPath = processDir; + wrapperPath.join("wrappers"); + wrapperPath.join(wrapperFilename); + if (wrapperPath.exists()) { + return wrapperPath; + } -#define SCRIPTS_SUBDIR "lib/apitrace/scripts" + // Try relative install directory + wrapperPath = processDir; +#if defined(_WIN32) + wrapperPath.join("..\\lib\\wrappers"); +#elif defined(__APPLE__) + wrapperPath.join("../lib/wrappers"); +#else + wrapperPath.join("../lib/apitrace/wrappers"); +#endif + wrapperPath.join(wrapperFilename); + if (wrapperPath.exists()) { + return wrapperPath; + } + +#ifndef _WIN32 + // Try absolute install directory + wrapperPath = APITRACE_WRAPPERS_INSTALL_DIR; + wrapperPath.join(wrapperFilename); + if (wrapperPath.exists()) { + return wrapperPath; + } +#endif + + return ""; +} os::String -findScript(const char *name) +findScript(const char *scriptFilename) { - os::String path; - -#if defined(APITRACE_SOURCE_DIR) - // Try the absolute source path -- useful for development or quick - // experiment. Relative paths don't quite work here due to out of source - // trees. - path = APITRACE_SOURCE_DIR "/scripts"; - path.join(name); - if (path.exists()) { - return path; + os::String scriptPath; + + os::String processDir = os::getProcessName(); + processDir.trimFilename(); + + // Try relative build directory + // XXX: Just make build and install directory layout match + scriptPath = processDir; + scriptPath.join("scripts"); + scriptPath.join(scriptFilename); + if (scriptPath.exists()) { + return scriptPath; } -#endif + // Try relative install directory + scriptPath = processDir; #if defined(_WIN32) - // Windows has no standard installation path, so find it relatively to the - // process name, which is assumed to be in a bin subdirectory. - path = os::getProcessName(); - path.trimFilename(); - path.join("..\\lib\\apitrace\\scripts"); - path.join(name); - if (path.exists()) { - return path; - } + scriptPath.join("..\\lib\\scripts"); +#elif defined(__APPLE__) + scriptPath.join("../lib/scripts"); #else - // Assume a predefined installation path on Unices - path = APITRACE_INSTALL_PREFIX "/lib/apitrace/scripts"; - path.join(name); - if (path.exists()) { - return path; + scriptPath.join("../lib/apitrace/scripts"); +#endif + scriptPath.join(scriptFilename); + if (scriptPath.exists()) { + return scriptPath; + } + +#ifndef _WIN32 + // Try absolute install directory + scriptPath = APITRACE_SCRIPTS_INSTALL_DIR; + scriptPath.join(scriptFilename); + if (scriptPath.exists()) { + return scriptPath; } #endif - std::cerr << "error: cannot find " << name << " script\n"; + std::cerr << "error: cannot find " << scriptFilename << " script\n"; return ""; }