diff options
author | José Fonseca <jose.r.fonseca@gmail.com> | 2011-11-29 00:25:12 +0000 |
---|---|---|
committer | José Fonseca <jose.r.fonseca@gmail.com> | 2011-11-29 00:25:12 +0000 |
commit | a19a87e02f91dd0cf4d6217a5ea7125f8509ed85 (patch) | |
tree | 2e7fca2f993f88831d013a86589b1ceb39590bc5 /common | |
parent | 97a199dc1340c4afa0c16cd608289c41655deb66 (diff) |
Refactor the code to find scripts.
Hopefully fixes scripts on Windows too, but untested yet.
Diffstat (limited to 'common')
-rw-r--r-- | common/trace_resource.cpp | 114 | ||||
-rw-r--r-- | common/trace_resource.hpp | 50 | ||||
-rw-r--r-- | common/trace_tools.hpp | 6 | ||||
-rw-r--r-- | common/trace_tools_trace.cpp | 34 |
4 files changed, 165 insertions, 39 deletions
diff --git a/common/trace_resource.cpp b/common/trace_resource.cpp new file mode 100644 index 0000000..659fc05 --- /dev/null +++ b/common/trace_resource.cpp @@ -0,0 +1,114 @@ +/********************************************************************* + * + * Copyright 2011 Intel Corporation + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + *********************************************************************/ + + +#include <iostream> + +#include "os_string.hpp" +#include "trace_tools.hpp" + + + +namespace trace { + + +os::String +findFile(const char *relPath, + const char *absPath, + bool verbose) +{ + 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); + + if (complete.exists()) + return complete; + + /* Second, look in the directory for installed wrappers. */ + complete = absPath; + if (complete.exists()) + return complete; + + if (verbose) { + std::cerr << "error: cannot find " << relPath << " or " << absPath << "\n"; + } + + return ""; +} + + +#define SCRIPTS_SUBDIR "lib/apitrace/scripts" + +os::String +findScript(const char *name) +{ + 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; + } +#endif + +#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; + } +#else + // Assume a predefined installation path on Unices + path = APITRACE_INSTALL_PREFIX "/lib/apitrace/scripts"; + path.join(name); + if (path.exists()) { + return path; + } +#endif + + std::cerr << "error: cannot find " << name << "script\n"; + + return ""; +} + + +} /* namespace trace */ diff --git a/common/trace_resource.hpp b/common/trace_resource.hpp new file mode 100644 index 0000000..beea622 --- /dev/null +++ b/common/trace_resource.hpp @@ -0,0 +1,50 @@ +/************************************************************************** + * + * Copyright 2011 VMware, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + **************************************************************************/ + +#ifndef _TRACE_RESOURCE_HPP_ +#define _TRACE_RESOURCE_HPP_ + + +#include <stdlib.h> + +#include "os_string.hpp" +#include "trace_api.hpp" + + +namespace trace { + + +os::String +findFile(const char *relPath, // path relative to the current program + const char *absPath, // absolute path + bool verbose); + +os::String +findScript(const char *name); + + +} /* namespace trace */ + +#endif /* _TRACE_RESOURCE_HPP_ */ diff --git a/common/trace_tools.hpp b/common/trace_tools.hpp index b568a0d..ddfe888 100644 --- a/common/trace_tools.hpp +++ b/common/trace_tools.hpp @@ -29,18 +29,12 @@ #include <stdlib.h> -#include "os_string.hpp" #include "trace_api.hpp" namespace trace { -os::String -findFile(const char *relPath, // path relative to the current program - const char *absPath, // absolute path - bool verbose); - int traceProgram(API api, char * const *argv, diff --git a/common/trace_tools_trace.cpp b/common/trace_tools_trace.cpp index f14617d..768fd10 100644 --- a/common/trace_tools_trace.cpp +++ b/common/trace_tools_trace.cpp @@ -32,6 +32,7 @@ #include "os_string.hpp" #include "os_process.hpp" +#include "trace_resource.hpp" #include "trace_tools.hpp" @@ -52,39 +53,6 @@ namespace trace { #endif -os::String -findFile(const char *relPath, - const char *absPath, - bool verbose) -{ - 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); - - if (complete.exists()) - return complete; - - /* Second, look in the directory for installed wrappers. */ - complete = absPath; - if (complete.exists()) - return complete; - - if (verbose) { - std::cerr << "error: cannot find " << relPath << " or " << absPath << "\n"; - } - - return ""; -} - - int traceProgram(API api, char * const *argv, |