forked from epics_driver_modules/require
debug and error messages improved
This commit is contained in:
@@ -655,7 +655,14 @@ static off_t fileSize(const char* filename)
|
||||
#ifdef vxWorks
|
||||
(char*) /* vxWorks has buggy stat prototype */
|
||||
#endif
|
||||
filename, &filestat) != 0) return -1;
|
||||
filename, &filestat) != 0)
|
||||
{
|
||||
if (requireDebug)
|
||||
printf("require: %s does not exist\n", filename);
|
||||
return -1;
|
||||
}
|
||||
if (requireDebug)
|
||||
printf("require: %s exists and has size %ld\n", filename, filestat.st_size);
|
||||
return filestat.st_size;
|
||||
}
|
||||
#define fileExists(filename) (fileSize(filename)>=0)
|
||||
@@ -671,9 +678,8 @@ static int handleDependencies(const char* module, char* depfilename)
|
||||
/* parse dependency file if exists */
|
||||
if (!fileExists(depfilename))
|
||||
{
|
||||
if (requireDebug)
|
||||
printf("require: no dependency file %s\n", depfilename);
|
||||
return 0;
|
||||
fprintf(stderr, "No dependency file %s\n", depfilename);
|
||||
return -1;
|
||||
}
|
||||
if (requireDebug)
|
||||
printf("require: parsing dependency file %s\n", depfilename);
|
||||
@@ -831,17 +837,18 @@ static int require_priv(const char* module, const char* version, const char* arg
|
||||
char* founddir = NULL;
|
||||
char* symbolname;
|
||||
char filename[NAME_MAX];
|
||||
|
||||
int someVersionFound = 0;
|
||||
int someArchFound = 0;
|
||||
|
||||
if (requireDebug)
|
||||
printf("require: module=\"%s\" version=\"%s\" args=\"%s\"\n", module, version, args);
|
||||
|
||||
#define TRY_FILE(offs, args...) \
|
||||
(snprintf(filename + offs, sizeof(filename) - offs, args) && \
|
||||
(fileExists(filename) || (requireDebug && !printf("require: no %s\n", filename))))
|
||||
(snprintf(filename + offs, sizeof(filename) - offs, args) && fileExists(filename))
|
||||
|
||||
#define TRY_NONEMPTY_FILE(offs, args...) \
|
||||
(snprintf(filename + offs, sizeof(filename) - offs, args) && \
|
||||
(fileSize(filename)>0 || (requireDebug && !printf("require: no %s\n", filename))))
|
||||
(snprintf(filename + offs, sizeof(filename) - offs, args) && (fileSize(filename)>0))
|
||||
|
||||
driverpath = getenv("EPICS_DRIVER_PATH");
|
||||
if (driverpath == NULL) driverpath = ".";
|
||||
@@ -923,6 +930,8 @@ static int require_priv(const char* module, const char* version, const char* arg
|
||||
#endif
|
||||
if (dirent->d_name[0] == '.') continue; /* ignore hidden directories */
|
||||
|
||||
someVersionFound = 1;
|
||||
|
||||
/* Look for highest matching version. */
|
||||
if (requireDebug)
|
||||
printf("require: checking version %s against required %s\n",
|
||||
@@ -931,16 +940,10 @@ static int require_priv(const char* module, const char* version, const char* arg
|
||||
switch ((status = compareVersions(version, dirent->d_name)))
|
||||
{
|
||||
case EXACT: /* exact match found */
|
||||
case MATCH: /* all given numbers match. */
|
||||
{
|
||||
if (requireDebug)
|
||||
printf("require: %s %s matches %s exactly\n",
|
||||
module, dirent->d_name, version);
|
||||
/* We are done. */
|
||||
end = NULL;
|
||||
break;
|
||||
}
|
||||
case MATCH: /* all given numbers match. */
|
||||
{
|
||||
someArchFound = 1;
|
||||
|
||||
if (requireDebug)
|
||||
printf("require: %s %s may match %s\n",
|
||||
module, dirent->d_name, version);
|
||||
@@ -959,6 +962,16 @@ static int require_priv(const char* module, const char* version, const char* arg
|
||||
continue;
|
||||
}
|
||||
|
||||
if (status == EXACT)
|
||||
{
|
||||
if (requireDebug)
|
||||
printf("require: %s %s matches %s exactly\n",
|
||||
module, dirent->d_name, version);
|
||||
/* We are done. */
|
||||
end = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Is it higher than the one we found before? */
|
||||
if (found && requireDebug)
|
||||
printf("require: %s %s support for %s %s found, compare against previously found %s\n",
|
||||
@@ -996,7 +1009,7 @@ static int require_priv(const char* module, const char* version, const char* arg
|
||||
{
|
||||
/* filename = "<dirname>/[dirlen]<module>/" */
|
||||
if (requireDebug)
|
||||
printf("require: no %s\n", filename);
|
||||
printf("require: no %s directory\n", filename);
|
||||
|
||||
/* try local/old style module only if no new style candidate has been found */
|
||||
if (!found)
|
||||
@@ -1018,8 +1031,8 @@ static int require_priv(const char* module, const char* version, const char* arg
|
||||
if (TRY_FILE(dirlen, PREFIX "%s" INFIX "%s%n" EXT, module, versionstr, &extoffs)
|
||||
/* filename = "<dirname>/[dirlen][releasediroffs][libdiroffs]PREFIX<module>INFIX(-<version>)?[extoffs]EXT" */
|
||||
#ifdef vxWorks
|
||||
|| (filename[dirlen + extoffs] = 0 && /* try without extension */
|
||||
(fileExists(filename) || (requireDebug && !printf("require: no %s\n", filename))))
|
||||
/* try without extension */
|
||||
|| (filename[dirlen + extoffs] = 0, fileExists(filename))
|
||||
#endif
|
||||
)
|
||||
{
|
||||
@@ -1038,7 +1051,19 @@ static int require_priv(const char* module, const char* version, const char* arg
|
||||
|
||||
if (!found)
|
||||
{
|
||||
fprintf(stderr, "Module %s not found\n", module);
|
||||
if (version && someArchFound)
|
||||
fprintf(stderr, "Module %s version %s not found for %s (but for other architectures)\n", module, version, targetArch);
|
||||
else
|
||||
if (someArchFound)
|
||||
fprintf(stderr, "Module %s not found for %s (but for other architectures)\n", module, targetArch);
|
||||
else
|
||||
if (version && someVersionFound)
|
||||
fprintf(stderr, "Module %s version %s not found (but other versions are available)\n", module, version);
|
||||
else
|
||||
if (version)
|
||||
fprintf(stderr, "Module %s version %s not found\n", module, version);
|
||||
else
|
||||
fprintf(stderr, "Module %s not found\n", module);
|
||||
return ifexists ? 0 : -1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user