3 #ifndef vtksys_SharedForward_h 4 # define vtksys_SharedForward_h 62 # if defined(__clang__) && defined(__has_warning) 63 # if __has_warning("-Wcast-qual") 64 # pragma clang diagnostic push 65 # pragma clang diagnostic ignored "-Wcast-qual" 69 # if defined(__BORLANDC__) && !defined(__cplusplus) 77 # if !defined(vtksys_SHARED_FORWARD_DIR_BUILD) 78 # error "Must define vtksys_SHARED_FORWARD_DIR_BUILD" 80 # if !defined(KWSYS_SHARED_FORWARD_DIR_BUILD) 81 # define KWSYS_SHARED_FORWARD_DIR_BUILD \ 82 vtksys_SHARED_FORWARD_DIR_BUILD 86 # if !defined(vtksys_SHARED_FORWARD_PATH_BUILD) 87 # error "Must define vtksys_SHARED_FORWARD_PATH_BUILD" 89 # if !defined(KWSYS_SHARED_FORWARD_PATH_BUILD) 90 # define KWSYS_SHARED_FORWARD_PATH_BUILD \ 91 vtksys_SHARED_FORWARD_PATH_BUILD 95 # if !defined(vtksys_SHARED_FORWARD_PATH_INSTALL) 96 # error "Must define vtksys_SHARED_FORWARD_PATH_INSTALL" 98 # if !defined(KWSYS_SHARED_FORWARD_PATH_INSTALL) 99 # define KWSYS_SHARED_FORWARD_PATH_INSTALL \ 100 vtksys_SHARED_FORWARD_PATH_INSTALL 104 # if !defined(vtksys_SHARED_FORWARD_EXE_BUILD) 105 # error "Must define vtksys_SHARED_FORWARD_EXE_BUILD" 107 # if !defined(KWSYS_SHARED_FORWARD_EXE_BUILD) 108 # define KWSYS_SHARED_FORWARD_EXE_BUILD \ 109 vtksys_SHARED_FORWARD_EXE_BUILD 113 # if !defined(vtksys_SHARED_FORWARD_EXE_INSTALL) 114 # error "Must define vtksys_SHARED_FORWARD_EXE_INSTALL" 116 # if !defined(KWSYS_SHARED_FORWARD_EXE_INSTALL) 117 # define KWSYS_SHARED_FORWARD_EXE_INSTALL \ 118 vtksys_SHARED_FORWARD_EXE_INSTALL 123 # if defined(vtksys_SHARED_FORWARD_CONFIG_NAME) 124 # define KWSYS_SHARED_FORWARD_CONFIG_NAME \ 125 vtksys_SHARED_FORWARD_CONFIG_NAME 127 # undef KWSYS_SHARED_FORWARD_CONFIG_NAME 131 # if defined(vtksys_SHARED_FORWARD_OPTION_COMMAND) 132 # if !defined(KWSYS_SHARED_FORWARD_OPTION_COMMAND) 133 # define KWSYS_SHARED_FORWARD_OPTION_COMMAND \ 134 vtksys_SHARED_FORWARD_OPTION_COMMAND 137 # undef KWSYS_SHARED_FORWARD_OPTION_COMMAND 141 # if defined(vtksys_SHARED_FORWARD_OPTION_PRINT) 142 # if !defined(KWSYS_SHARED_FORWARD_OPTION_PRINT) 143 # define KWSYS_SHARED_FORWARD_OPTION_PRINT \ 144 vtksys_SHARED_FORWARD_OPTION_PRINT 147 # undef KWSYS_SHARED_FORWARD_OPTION_PRINT 151 # if defined(vtksys_SHARED_FORWARD_OPTION_LDD) 152 # if !defined(KWSYS_SHARED_FORWARD_OPTION_LDD) 153 # define KWSYS_SHARED_FORWARD_OPTION_LDD \ 154 vtksys_SHARED_FORWARD_OPTION_LDD 157 # undef KWSYS_SHARED_FORWARD_OPTION_LDD 169 # if defined(_WIN32) && !defined(__CYGWIN__) 170 # include <windows.h> 173 # include <process.h> 174 # define KWSYS_SHARED_FORWARD_ESCAPE_ARGV 176 # include <sys/stat.h> 183 # if defined(_WIN32) && !defined(__CYGWIN__) 184 # define KWSYS_SHARED_FORWARD_PATH_SEP ';' 185 # define KWSYS_SHARED_FORWARD_PATH_SLASH '\\' 187 # define KWSYS_SHARED_FORWARD_PATH_SEP ':' 188 # define KWSYS_SHARED_FORWARD_PATH_SLASH '/' 198 # if defined(PATH_MAX) 199 # define KWSYS_SHARED_FORWARD_MAXPATH PATH_MAX 200 # elif defined(MAXPATHLEN) 201 # define KWSYS_SHARED_FORWARD_MAXPATH MAXPATHLEN 203 # define KWSYS_SHARED_FORWARD_MAXPATH 16384 211 # if defined(__linux) 212 # define KWSYS_SHARED_FORWARD_LDD "ldd" 213 # define KWSYS_SHARED_FORWARD_LDD_N 1 214 # define KWSYS_SHARED_FORWARD_LDPATH "LD_LIBRARY_PATH" 217 # elif defined(__FreeBSD__) 218 # define KWSYS_SHARED_FORWARD_LDD "ldd" 219 # define KWSYS_SHARED_FORWARD_LDD_N 1 220 # define KWSYS_SHARED_FORWARD_LDPATH "LD_LIBRARY_PATH" 223 # elif defined(__OpenBSD__) 224 # define KWSYS_SHARED_FORWARD_LDD "ldd" 225 # define KWSYS_SHARED_FORWARD_LDD_N 1 226 # define KWSYS_SHARED_FORWARD_LDPATH "LD_LIBRARY_PATH" 229 # elif defined(__APPLE__) 230 # define KWSYS_SHARED_FORWARD_LDD "otool", "-L" 231 # define KWSYS_SHARED_FORWARD_LDD_N 2 232 # define KWSYS_SHARED_FORWARD_LDPATH "DYLD_LIBRARY_PATH" 236 # define KWSYS_SHARED_FORWARD_LDD "dump", "-H" 237 # define KWSYS_SHARED_FORWARD_LDD_N 2 238 # define KWSYS_SHARED_FORWARD_LDPATH "LIBPATH" 241 # elif defined(__sun) 242 # define KWSYS_SHARED_FORWARD_LDD "ldd" 243 # define KWSYS_SHARED_FORWARD_LDD_N 1 244 # include <sys/isa_defs.h> 246 # define KWSYS_SHARED_FORWARD_LDPATH "LD_LIBRARY_PATH" 247 # elif defined(_LP64) 248 # define KWSYS_SHARED_FORWARD_LDPATH "LD_LIBRARY_PATH_64" 252 # elif defined(__hpux) 253 # define KWSYS_SHARED_FORWARD_LDD "chatr" 254 # define KWSYS_SHARED_FORWARD_LDD_N 1 255 # if defined(__LP64__) 256 # define KWSYS_SHARED_FORWARD_LDPATH "LD_LIBRARY_PATH" 258 # define KWSYS_SHARED_FORWARD_LDPATH "SHLIB_PATH" 262 # elif defined(__sgi) && defined(_MIPS_SIM) 263 # define KWSYS_SHARED_FORWARD_LDD "ldd" 264 # define KWSYS_SHARED_FORWARD_LDD_N 1 265 # if _MIPS_SIM == _ABIO32 266 # define KWSYS_SHARED_FORWARD_LDPATH "LD_LIBRARY_PATH" 267 # elif _MIPS_SIM == _ABIN32 268 # define KWSYS_SHARED_FORWARD_LDPATH "LD_LIBRARYN32_PATH" 269 # elif _MIPS_SIM == _ABI64 270 # define KWSYS_SHARED_FORWARD_LDPATH "LD_LIBRARY64_PATH" 274 # elif defined(__CYGWIN__) 275 # define KWSYS_SHARED_FORWARD_LDD \ 278 # define KWSYS_SHARED_FORWARD_LDD_N 1 279 # define KWSYS_SHARED_FORWARD_LDPATH "PATH" 282 # elif defined(_WIN32) 283 # define KWSYS_SHARED_FORWARD_LDPATH "PATH" 287 # define KWSYS_SHARED_FORWARD_LDD "ldd" 288 # define KWSYS_SHARED_FORWARD_LDD_N 1 289 # define KWSYS_SHARED_FORWARD_LDPATH "LD_LIBRARY_PATH" 292 # ifdef KWSYS_SHARED_FORWARD_ESCAPE_ARGV 293 typedef struct kwsys_sf_arg_info_s
300 static kwsys_sf_arg_info kwsys_sf_get_arg_info(
const char* in)
303 kwsys_sf_arg_info
info;
309 int windows_backslashes = 0;
314 info.size = (
int)strlen(in) + 1;
318 for (c = in; *c; ++c) {
320 if (strchr(
" \t?'#&<>|^", *c)) {
327 ++windows_backslashes;
328 }
else if (*c ==
'"') {
331 info.size += windows_backslashes + 1;
332 windows_backslashes = 0;
337 windows_backslashes = 0;
347 info.size += windows_backslashes;
353 static char* kwsys_sf_get_arg(kwsys_sf_arg_info
info,
char* out)
359 int windows_backslashes = 0;
368 for (c =
info.arg; *c; ++c) {
372 ++windows_backslashes;
373 }
else if (*c ==
'"') {
376 while (windows_backslashes > 0) {
377 --windows_backslashes;
386 windows_backslashes = 0;
395 while (windows_backslashes > 0) {
396 --windows_backslashes;
414 # if defined(_WIN32) && !defined(__CYGWIN__) 421 return realpath(in_path, out_path) != 0;
429 HANDLE h1 = CreateFileA(file1, GENERIC_READ, FILE_SHARE_READ, NULL,
430 OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
431 HANDLE h2 = CreateFileA(file2, GENERIC_READ, FILE_SHARE_READ, NULL,
432 OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
433 if (h1 != INVALID_HANDLE_VALUE && h2 != INVALID_HANDLE_VALUE) {
434 BY_HANDLE_FILE_INFORMATION fi1;
435 BY_HANDLE_FILE_INFORMATION fi2;
436 GetFileInformationByHandle(h1, &fi1);
437 GetFileInformationByHandle(h2, &fi2);
438 result = (fi1.dwVolumeSerialNumber == fi2.dwVolumeSerialNumber &&
439 fi1.nFileIndexHigh == fi2.nFileIndexHigh &&
440 fi1.nFileIndexLow == fi2.nFileIndexLow);
446 struct stat fs1, fs2;
447 return (stat(file1, &fs1) == 0 && stat(file2, &fs2) == 0 &&
448 memcmp(&fs2.st_dev, &fs1.st_dev,
sizeof(fs1.st_dev)) == 0 &&
449 memcmp(&fs2.st_ino, &fs1.st_ino,
sizeof(fs1.st_ino)) == 0 &&
450 fs2.st_size == fs1.st_size);
457 # if defined(_WIN32) && !defined(__CYGWIN__) 459 DWORD original = GetLastError();
461 FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
462 0, original, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
466 _snprintf(message, KWSYS_SHARED_FORWARD_MAXPATH,
467 "Error 0x%X (FormatMessage failed with error 0x%X)", original,
472 strcpy(message, strerror(errno));
478 char const*
const* argv)
480 # ifdef KWSYS_SHARED_FORWARD_ESCAPE_ARGV 484 char const*
const* argvc;
485 for (argvc = argv; *argvc; ++argvc, ++argc) {
491 char** nargv = (
char**)malloc((argc + 1) *
sizeof(
char*));
493 for (i = 0; i < argc; ++i) {
494 kwsys_sf_arg_info
info = kwsys_sf_get_arg_info(argv[i]);
495 nargv[i] = (
char*)malloc(info.size);
496 kwsys_sf_get_arg(info, nargv[i]);
501 argv = (
char const*
const*)nargv;
506 # if defined(_MSC_VER) 508 # elif defined(__MINGW32__) && !defined(__MINGW64__) 511 execvp(cmd, (
char*
const*)argv);
519 int last_slash_index = -1;
520 const char* end = begin + strlen(begin);
521 for (; begin <= end && last_slash_index < 0; --end) {
522 if (*end ==
'/' || *end ==
'\\') {
523 last_slash_index = (
int)(end - begin);
528 if (last_slash_index < 0) {
531 }
else if (last_slash_index == 0) {
536 else if (last_slash_index == 2 && begin[1] ==
':') {
538 strncpy(result, begin, (
size_t)last_slash_index);
540 result[last_slash_index + 1] = 0;
545 strncpy(result, begin, (
size_t)last_slash_index);
546 result[last_slash_index] = 0;
553 # if defined(_MSC_VER) 554 # define KWSYS_SHARED_FORWARD_ACCESS _access 556 # define KWSYS_SHARED_FORWARD_ACCESS access 559 # define KWSYS_SHARED_FORWARD_ACCESS_OK X_OK 561 # define KWSYS_SHARED_FORWARD_ACCESS_OK 04 575 const char* p = argv0;
576 for (; *p && !has_slash; ++p) {
577 if (*p ==
'/' || *p ==
'\\') {
588 const char* path = getenv(
"PATH");
589 const char* begin = path;
590 const char* end = begin + (begin ? strlen(begin) : 0);
591 const char* first = begin;
592 while (first != end) {
608 size_t length = (size_t)(last - first);
609 if (*(last - 1) ==
'/' || *(last - 1) ==
'\\') {
614 strncpy(result, first, length);
616 strcpy(result + (length) + 1, argv0);
638 const char* in_path,
char* result,
642 if (in_path[0] ==
'/') {
644 strcpy(result, in_path);
647 else if (in_path[0] && in_path[1] ==
':') {
649 strcpy(result, in_path);
655 strcpy(temp_path, self_path);
657 strcat(temp_path, in_path);
662 fprintf(stderr,
"Error converting %s \"%s\" to real path: %s\n", desc,
674 char* ldpath,
char* exe)
679 static const char* search_path_install[] = {
684 const char** search_path;
685 const char* exe_path;
688 # if defined(KWSYS_SHARED_FORWARD_CONFIG_NAME) 694 const char* self_path_logical = self_path;
701 fprintf(stderr,
"Error converting self path \"%s\" to real path: %s\n",
710 search_path = search_path_build;
717 # if defined(KWSYS_SHARED_FORWARD_CONFIG_NAME) 723 search_path = search_path_install;
730 # if defined(KWSYS_SHARED_FORWARD_CONFIG_NAME) 732 strcpy(self_path_logical, self_path);
739 for (dir = search_path; *dir; ++dir) {
741 if (dir != search_path) {
747 ldpath + strlen(ldpath),
748 "runtime path entry")) {
756 "executable file")) {
766 char const*
const* arg = argv;
768 fprintf(stderr,
"Error running");
769 for (; *arg; ++arg) {
770 fprintf(stderr,
" \"%s\"", *arg);
772 fprintf(stderr,
": %s\n", msg);
782 char const** argv = (
char const**)argv_in;
800 # if defined(KWSYS_SHARED_FORWARD_OPTION_COMMAND) 803 strcmp(argv[1], KWSYS_SHARED_FORWARD_OPTION_COMMAND) == 0) {
806 strcpy(exe, argv[2]);
812 "Option " KWSYS_SHARED_FORWARD_OPTION_COMMAND
813 " must be followed by a command line.\n");
819 # if defined(KWSYS_SHARED_FORWARD_OPTION_PRINT) 822 strcmp(argv[1], KWSYS_SHARED_FORWARD_OPTION_PRINT) == 0) {
824 fprintf(stdout,
"%s\n", exe);
829 # if defined(KWSYS_SHARED_FORWARD_OPTION_LDD) 831 if (argc > 1 && strcmp(argv[1], KWSYS_SHARED_FORWARD_OPTION_LDD) == 0) {
832 # if defined(KWSYS_SHARED_FORWARD_LDD) 843 fprintf(stderr,
"No ldd-like tool is known to this executable.\n");
860 fprintf(stderr,
"Error locating executable \"%s\".\n", argv[0]);
871 # if defined(__clang__) && defined(__has_warning) 872 # if __has_warning("-Wcast-qual") 873 # pragma clang diagnostic pop 878 # error "vtksys/SharedForward.h should be included only once." static int kwsys_shared_forward_realpath(const char *in_path, char *out_path)
#define KWSYS_SHARED_FORWARD_PATH_SEP
static int kwsys_shared_forward_fullpath(const char *self_path, const char *in_path, char *result, const char *desc)
static void kwsys_shared_forward_print_failure(char const *const *argv)
static void kwsys_shared_forward_execvp(const char *cmd, char const *const *argv)
#define KWSYS_SHARED_FORWARD_PATH_BUILD
#define KWSYS_SHARED_FORWARD_ACCESS_OK
static const char kwsys_shared_forward_path_sep[2]
#define KWSYS_SHARED_FORWARD_LDD_N
#define KWSYS_SHARED_FORWARD_EXE_INSTALL
#define KWSYS_SHARED_FORWARD_EXE_BUILD
static void kwsys_shared_forward_strerror(char *message)
#define KWSYS_SHARED_FORWARD_DIR_BUILD
static int vtksys_shared_forward_to_real(int argc, char **argv_in)
static int kwsys_shared_forward_samepath(const char *file1, const char *file2)
static void kwsys_shared_forward_dirname(const char *begin, char *result)
#define KWSYS_SHARED_FORWARD_LDD
#define KWSYS_SHARED_FORWARD_ACCESS
static int kwsys_shared_forward_is_executable(const char *f)
static char kwsys_shared_forward_ldpath[65535]
#define KWSYS_SHARED_FORWARD_PATH_SLASH
#define KWSYS_SHARED_FORWARD_PATH_INSTALL
static const char kwsys_shared_forward_path_slash[2]
#define KWSYS_SHARED_FORWARD_LDPATH
#define KWSYS_SHARED_FORWARD_MAXPATH
static int kwsys_shared_forward_get_settings(const char *self_path, char *ldpath, char *exe)
static int kwsys_shared_forward_self_path(const char *argv0, char *result)