This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

vpath search failures in Clearcase when files do actually exist





Cyg ver:    1.3.10 (although I have reproduced the same problem with 1.5.7)
OS : Windows 2000
File system:   MVFS (running gnumake inside a Rational Clearcase dynamic
view)
cygcheck:   (See attached file: cygcheck.out)



When running the cygwin 1.3.10 make utility inside a Clearcase dynamic view
(MVFS file system), we are seeing random and intermittent failures on
directory stats, which result in "file not found" errors during gnumake
dependency checking, even though the files do exist, and a valid vpath
directive points to the existing file.

In our build environment, we have a very large dependency list for a large
number of dlls in a single makefile, which looks something like this:

vpath %.a . $(TOPR) $(SRCTOP_GNU)   - which would expand to:     vpath .
../.. /cygdrive/m/top

lib1.dll : component1/subdir1/archive1.a   component1/subdir2/archive1.a
(etc.)


In the above example, $(TOPR) and $(SRCTOP_GNU) both point to the same
directory, which is the parent of component1.
/cygdrive/m/top/component1/subdir1/archive1.a is a valid path.  Also, the
target dlls are all generated into component1/lib.

In total, we have about 150 dlls that each contain anywhere from 1 to a max
of about 100 object archive files.  In some Clearcase views, we get "file
not found" errors during dependency checking for files that really do
exist.  The file stat failure always occurs on the same file when building
in the same working directory in the same view.  The failures are not
consistent across different views, however, and they are also not
consistent from different working directories in the same view.  For
instance, we may run gnumake from a working directory of component1/lib and
get erroneous "file not found" errors for component1/subdir1/archive1.a.
If we then run make from component1/subdir1 (directory containing the file
that failed to be found), then the build may succeed, or it may result in
"file not found" errors for archives from a different directory.  As well,
if the dll with the failing file stat contains a small number of archives,
gnumake all may fail, but gnumake small.dll will work.  Then, even after
the dll exists, bld all will fail during the dependency check again.

After extensively scanning the MVFS logs for file access attempts, we have
determined that, in a failing case, the cygwin make fails to recognize
subdir# as a directory, even though this is a valid directory element of
clearcase.  The failing case shows the vpah search in . failing, then the
vpath search from $(TOPR) failing to search past the subdir# directory.
The MVFS logs show the make tool issuing a GENERIC_READ operation on that
directory instead of a READ_DATA/LIST_DIRECTORY operation.

I have tried a few vpath modifications, and we were able to identify one
that worked, even though it is using a path that is not supported by
cygwin.  As shown above, using vpath .  ../..  /cygdrive/m/top fails, even
though it should work.  Using vpath .  /cygdrive/m/top fails with the same
errors as above.  However, vpath .  M:/top succeeds in the dependency
check, even though M:/top should apparently be written as /cygdrive/m/top
to comply to cygwin standards.  From the MVFS logs, it appears as though
the cygwin vpath implementation ends up dropping the M: drive letter, and
the path matched by make is /top/component1/subdir1/archive1.a.
Unfortunately, since this starts with a forward slash, this then requires
further processing to pass this to a linker, because the linker will
interpret it as a linker option if it starts with a forward slash.

It appears as though there is a problem using the /cygdrive/m type paths
inside MVFS when there are extremely large dependency trees.


Jeremy Broughton

Attachment: cygcheck.out
Description: Binary data

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]