I want to use a modular approach for settting up a CVS-repository. Unfortunately, I can not get it to work as I want. I have read both the Cederqvist and the Fogel document, but the 'modules' file (which I think must be used for file sharing) is not very extensively explored in both documents.
Can somebody help me to get on the right track?
Suppose a program (prog) that uses 2 modules (mod_1 and mod_2), and one of the modules (mod_2) uses the other (mod_1). Furthermore, for each module I want to check in its own source and header file(s), the resulting library archive (*.a), and the resulting shared object file (*.so).
The .h, .a and .so files are shared to the modules and/or programs that make use of this module.
The working directories (is the correct term 'sandboxes'?) for each module/program would look like:
mod_1 |-- . -> mod_1.[ch] |--lib -> mod_1.a \_ resulting from compilation of Module 1 \--bin -> mod_1.so / mod_2 |-- . -> mod_2.[ch] |--inc -> mod_1.h |--lib -> mod_1.a mod_2.a \_ mod_2.* resulting from compilation of Module 2 \--bin -> mod_1.so mod_2.so / prog |-- . -> prog.c |--inc -> mod_1.h mod_2.h |--lib -> mod_1.a mod_2.a \--bin -> mod_1.so mod_2.so prog (executable) >- prog resulting from compilation of Program>From this it can be seen that mod_1.h, mod_1.a, mod_1.so are needed by both mod_2 and prog.
And mod_2.h, mod_2.a, mod_2.so are only needed by prog.
It is not desired that (copies of) these files are placed in the repository in every module that needs them, and therefore I have been looking for a method to share them.
For the sharing mechanism I tried to use the 'modules' file. The CVS-repository-tree would look like:
CVSROOT |--Project | |--mod_1 | | |--src -> mod_1.[ch] + mod_1-internal [ch]-files | | |--lib -> mod_1.a | | \--bin -> mod_1.so | |--mod_2 | | |--src -> mod_2.[ch] + mod_2-internal [ch]-files | | |--lib -> mod_2.a | | \--bin -> mod_2.so | |--prog | | |--src -> prog.c | | \--bin -> prog (executable) and the 'modules' file I used was:
The -d option lets you redefine the directory where to put the files/directories following the -d option, so I thought that the above mentioned modules file should work. However, when checking out mod_2 I get the following error message:mod_1_src -d mod_1 Project/mod_1/src mod_1_h -d inc Project/mod_1/src mod_1.h mod_1_a -d lib Project/mod_1/lib mod_1.a mod_1_so -d bin Project/mod_1/bin mod_1.so mod_1 -d mod_1 &mod_1_src \ &mod_1_a \ &mod_1_so mod_2_src -d mod_2 Project/mod_2/src mod_2_h -d inc Project/mod_2/src mod_2.h mod_2_a -d lib Project/mod_2/lib mod_2.a mod_2_so -d bin Project/mod_2/bin mod_2.so mod_2 -d mod_2 &mod_2_src \ &mod_1_h \ &mod_1_a \ &mod_1_so \ &mod_2_a \ &mod_2_so prog_src -d prog Project/prog/src prog_exe -d bin Project/prog/bin prog prog -d prog &prog_src \ &mod_1_h \ &mod_2_h \ &mod_1_a \ &mod_2_a \ &mod_1_so \ &mod_2_so \ &prog_exe
Is this because I make a mistake (misinterpret the meaning of the -d option), or is it a bug in CVS? Probably the former...cvs checkout: existing repository /usr/local/cvsroot/Project/mod_1/src does not match /usr/local/cvsroot/Project/mod_2/src cvs checkout: ignoring module mod_2_h
Any help is appreciated.
Aad Rijnberg