]> git.cworth.org Git - apitrace/blob - common/trace_resource.cpp
Move trace::findWrapper to trace_resource.cpp
[apitrace] / common / trace_resource.cpp
1 /*********************************************************************
2  *
3  * Copyright 2011 Intel Corporation
4  * All Rights Reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person
7  * obtaining a copy of this software and associated documentation
8  * files (the "Software"), to deal in the Software without
9  * restriction, including without limitation the rights to use, copy,
10  * modify, merge, publish, distribute, sublicense, and/or sell copies
11  * of the Software, and to permit persons to whom the Software is
12  * furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be
15  * included in all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
21  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
22  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24  * SOFTWARE.
25  *
26  *********************************************************************/
27
28
29 #include <iostream>
30
31 #include "os_string.hpp"
32 #include "trace_tools.hpp"
33
34
35
36 namespace trace {
37
38 os::String
39 findWrapper(const char *wrapperFilename)
40 {
41     os::String wrapperPath;
42
43     os::String processDir = os::getProcessName();
44     processDir.trimFilename();
45
46     // Try relative build directory
47     // XXX: Just make build and install directory layout match
48     wrapperPath = processDir;
49     wrapperPath.join("wrappers");
50     wrapperPath.join(wrapperFilename);
51     if (wrapperPath.exists()) {
52         return wrapperPath;
53     }
54
55     // Try relative install directory
56     wrapperPath = processDir;
57 #if defined(_WIN32)
58     wrapperPath.join("..\\lib\\wrappers");
59 #elif defined(__APPLE__)
60     wrapperPath.join("../lib/wrappers");
61 #else
62     wrapperPath.join("../lib/apitrace/wrappers");
63 #endif
64     wrapperPath.join(wrapperFilename);
65     if (wrapperPath.exists()) {
66         return wrapperPath;
67     }
68
69 #ifndef _WIN32
70     // Try absolute install directory
71     wrapperPath = APITRACE_WRAPPERS_INSTALL_DIR;
72     wrapperPath.join(wrapperFilename);
73     if (wrapperPath.exists()) {
74         return wrapperPath;
75     }
76 #endif
77
78     return "";
79 }
80
81 os::String
82 findScript(const char *scriptFilename)
83 {
84     os::String scriptPath;
85
86     os::String processDir = os::getProcessName();
87     processDir.trimFilename();
88
89     // Try relative build directory
90     // XXX: Just make build and install directory layout match
91     scriptPath = processDir;
92     scriptPath.join("scripts");
93     scriptPath.join(scriptFilename);
94     if (scriptPath.exists()) {
95         return scriptPath;
96     }
97
98     // Try relative install directory
99     scriptPath = processDir;
100 #if defined(_WIN32)
101     scriptPath.join("..\\lib\\scripts");
102 #elif defined(__APPLE__)
103     scriptPath.join("../lib/scripts");
104 #else
105     scriptPath.join("../lib/apitrace/scripts");
106 #endif
107     scriptPath.join(scriptFilename);
108     if (scriptPath.exists()) {
109         return scriptPath;
110     }
111
112 #ifndef _WIN32
113     // Try absolute install directory
114     scriptPath = APITRACE_SCRIPTS_INSTALL_DIR;
115     scriptPath.join(scriptFilename);
116     if (scriptPath.exists()) {
117         return scriptPath;
118     }
119 #endif
120
121     std::cerr << "error: cannot find " << scriptFilename << " script\n";
122
123     return "";
124 }
125
126
127 } /* namespace trace */