From: José Fonseca Date: Tue, 29 Nov 2011 00:25:12 +0000 (+0000) Subject: Refactor the code to find scripts. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=a19a87e02f91dd0cf4d6217a5ea7125f8509ed85;p=apitrace Refactor the code to find scripts. Hopefully fixes scripts on Windows too, but untested yet. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 98a8e9d..93ab8d1 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -231,7 +231,6 @@ set(WRAPPER_INSTALL_DIR ${LIB_ARCH_INSTALL_DIR}/wrappers) add_definitions( -DAPITRACE_BINARY_DIR="${CMAKE_BINARY_DIR}" -DAPITRACE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}" - -DAPITRACE_SCRIPTS_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}/${SCRIPTS_INSTALL_DIR}" -DAPITRACE_WRAPPER_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}/${WRAPPER_INSTALL_DIR}" ) @@ -274,6 +273,7 @@ add_library (common STATIC common/trace_writer_local.cpp common/trace_writer_model.cpp common/trace_loader.cpp + common/trace_resource.cpp common/trace_tools_trace.cpp common/image.cpp common/image_bmp.cpp @@ -283,6 +283,7 @@ add_library (common STATIC ) set_target_properties (common PROPERTIES + COMPILE_DEFINITIONS APITRACE_SOURCE_DIR="${CMAKE_SOURCE_DIR}" # Ensure it can be statically linked in shared libraries COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS}" ) diff --git a/cli/cli_diff.cpp b/cli/cli_diff.cpp index d9d6257..0bd1b31 100644 --- a/cli/cli_diff.cpp +++ b/cli/cli_diff.cpp @@ -31,7 +31,7 @@ #include "cli.hpp" #include "os_string.hpp" #include "os_process.hpp" -#include "trace_tools.hpp" +#include "trace_resource.hpp" static const char *synopsis = "Identify differences between two traces."; @@ -81,11 +81,7 @@ command(int argc, char *argv[]) file1 = argv[i]; file2 = argv[i+1]; -#define CLI_DIFF_TRACEDIFF_COMMAND "tracediff.sh" - - os::String command = trace::findFile("scripts/" CLI_DIFF_TRACEDIFF_COMMAND, - APITRACE_SCRIPTS_INSTALL_DIR "/" CLI_DIFF_TRACEDIFF_COMMAND, - true); + os::String command = trace::findScript("tracediff.sh"); char* args[4]; diff --git a/cli/cli_diff_images.cpp b/cli/cli_diff_images.cpp index 91f07c1..3b5507a 100644 --- a/cli/cli_diff_images.cpp +++ b/cli/cli_diff_images.cpp @@ -30,19 +30,14 @@ #include "cli.hpp" #include "os_string.hpp" -#include "trace_tools.hpp" +#include "trace_resource.hpp" static const char *synopsis = "Identify differences between two image dumps."; static os::String find_command(void) { -#define CLI_DIFF_IMAGES_COMMAND "snapdiff.py" - - return trace::findFile("scripts/" CLI_DIFF_IMAGES_COMMAND, - APITRACE_SCRIPTS_INSTALL_DIR "/" CLI_DIFF_IMAGES_COMMAND, - true); - + return trace::findScript("snapdiff.py"); } static void diff --git a/cli/cli_diff_state.cpp b/cli/cli_diff_state.cpp index 55d8083..8918d58 100644 --- a/cli/cli_diff_state.cpp +++ b/cli/cli_diff_state.cpp @@ -31,7 +31,7 @@ #include "cli.hpp" #include "os_string.hpp" #include "os_process.hpp" -#include "trace_tools.hpp" +#include "trace_resource.hpp" static const char *synopsis = "Identify differences between two state dumps."; @@ -81,11 +81,7 @@ command(int argc, char *argv[]) file1 = argv[i]; file2 = argv[i+1]; -#define CLI_DIFF_STATE_COMMAND "jsondiff.py" - - os::String command = trace::findFile("scripts/" CLI_DIFF_STATE_COMMAND, - APITRACE_SCRIPTS_INSTALL_DIR "/" CLI_DIFF_STATE_COMMAND, - true); + os::String command = trace::findScript("jsondiff.py"); char *args[5]; 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 + +#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 + +#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 -#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,