]> git.cworth.org Git - apitrace/commitdiff
Refactor the code to find scripts.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Tue, 29 Nov 2011 00:25:12 +0000 (00:25 +0000)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Tue, 29 Nov 2011 00:25:12 +0000 (00:25 +0000)
Hopefully fixes scripts on Windows too, but untested yet.

CMakeLists.txt
cli/cli_diff.cpp
cli/cli_diff_images.cpp
cli/cli_diff_state.cpp
common/trace_resource.cpp [new file with mode: 0644]
common/trace_resource.hpp [new file with mode: 0644]
common/trace_tools.hpp
common/trace_tools_trace.cpp

index 98a8e9dfdec10ee34439029cc8faf1815acb5964..93ab8d13afe01d541a8d1e2e863398444cb19a5a 100755 (executable)
@@ -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}"
 )
index d9d62576d197d2715441e8c89900b96d73b9c3ce..0bd1b31f4f2c1c968b86a04d9a9470255023e57d 100644 (file)
@@ -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];
 
index 91f07c11871666c3a816dfd59f25ac9267c8ec06..3b5507a7cc4202da012f860e563535786466574f 100644 (file)
 
 #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
index 55d80832cf6961fee3f98012d68dc9588dd8fa7a..8918d582f8195023a4e452ad94486bb009a4c82b 100644 (file)
@@ -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 (file)
index 0000000..659fc05
--- /dev/null
@@ -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 (file)
index 0000000..beea622
--- /dev/null
@@ -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_ */
index b568a0de83642080d80e63875e53981427385ab6..ddfe888cbcf206eeaeb983c2220fc1529ee96393 100644 (file)
 
 #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,
index f14617d6142d8ad1e6decbbd789f1783ebd5e711..768fd108d3541eaf1352b09c910b2c4c335bd1ea 100644 (file)
@@ -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,