Hello there, I am writing to you folks as I am wondering if a tool suite of ours could make use of or contribute to libtool, automake and possibly autoconf. The suite in question is called SRT, for Software Release Tools; we use it in much of our software development. It is a set of shell scripts to manage our software releases and builds. The build parts of it are constructed on top of autoconf and GNU make. As a backgrounder, we have some 170 software packages in a world-wide distributed development environment. I would not be surprised if we had ~500 packages in a few years time. The code is stored in CVS in a hierarchical package structure: packages can contain other packages, and the entire release holds all other packages. Typically leaf packages build the interesting products: libraries, executables, documentation etc. Out of this software base we roll out releases, currently every two weeks. A release currently includes a tagged version of almost all packages, built for all platforms we support (currently five unix platforms). This amounts to a tree of about 3GB after `mostlyclean' (~10GB peak) and takes 4-8 hours to build per platform (the platforms are done in parallel). The releases are mirrored in a few places around the world, either by copying the binary release, or by getting the source and building locally. Recently there has been increasing mirrors to laptops and CDs, and I expect this to become more common. The main releases are on a world-wide networking file system (AFS = Andrew File System) and the majority of the developers access the releases that way. There is also a nightly release where we build the head version of everything. Obviously no developer ever wants to build the releases themselves. An average developer has her own build area that is "based" on some release. All the headers, libraries and programs that the developer hasn't checked out to her own build area are looked up there. A large majority of the packages build shared or archive libraries, but the tools support the entire range of GNU coding standard products and makefile targets. The code base is in FORTRAN 77, FORTRAN 90, C, C++, plus some intermediate languages (age => FORTRAN 77 and C++, bison and flex files, database schema descriptions => C++ etc.; java is now starting to appear). Another important bit of detail is that our developer base is, well, not very sophisticated tools-wise. They won't give a hoot about learning SRT, much less autoconf. They aren't your average GNU package maintainer -- most of them can barely find their way around unix shell, know next to nothing about make, and uttering `m4' will make them run away screaming. So, back to SRT. It currently implements functionality similar to automake and libtool on about 20 different operating system/compiler combinations, including LynxOS (a cross-compiler environment), Windows NT/MSVC++ and IBM AIX, for all the languages we support. We use several different compilers -- mostly native compilers -- not just gcc, and have to jump through whatever hoops it means (and take advantage of things like precompiled headers when they work). We also support various options to the compilers -- the user can be specify "optimise", "profile", "mt" and other such things to get specific sets. Another complicating factor is that we also support build-process-modifying compiler-like tools: Logiscope++, Insure++, Purify and code-checking tools. These alter the build process -- sometimes very radically -- e.g. to instrument the source code before compiling it, or to gather metrics instead of compiling the code. These tools are chosen at `configure' time, and for some of them it is also possible at `make' time. A normal usage pattern is similar to an average GNU package: cvs checkout, configure, make, edit, make, ..., make check, make install (installing in /usr/local makes no sense in this scenario, so SRT overrides default $prefix). SRT-provided autoconf macros take care of locating packages, constructing -I, -L and -l option lists, recording the state for make etc. SRT also provides a standard makefile body that makes use of GNU make's special features to allow rather abstract makefiles to be written. SRT makes an effort to be safe for parallel makes and parallel multi-platform builds as any good GNU package should be. For an example, a typical `configure.in' would be something like: AC_INIT(src/somefile.cxx) SRT_INIT SRT_CONFIGURE_LOCAL SRT_OUTPUT(GNUmakefile) and a typical `GNUmakefile.in' would be something like: TARGET_SHLIBS = libfoo.so libfoo.so_LINKSET = foo libfoo.so_SRC = src/somefile.cxx \ src/otherfile.cxx \ src/data.F include $(SRT_HOME)/standard.mk and a corresponding `PACKAGE' file would go: title foo -- a great library author Me [EMAIL PROTECTED] version foo-02-03-04:20000317185310 linkset foo -lib:foo use bar 01-02-03 some/where use c++ use f77 OK, don't worry about the details, but this should give you a rough idea. This package would use `bar': get the -I options needed for and by `bar' (transitively), link the shared library libfoo.so (appropriately transformed to the shared library naming convention on that plaform) with whatever libraries `bar' provides (and depends on), install the libfoo.so in $(libdir). C++ and FORTRAN 77 would be used to compile the source files as appropriate. It works the standard GNU conventions way, i.e. you can build it in the source directory or from a build directory. One can have several targets in a single makefile, e.g. build a shared and archive library out of the same sources, or build several executables from the same source with different options or library dependency chains, and SRT makes sure things don't get confused. Things like -I options, what linker to use and what rpath to assign are decided per-target. Finally, my question. Thanks for reading this far! Do you think there would be a possibility to integrate this tool suite somehow with automake and libtool? I would like to reduce our own layers to the minimum and help free software if I can. Unfortunately, there seems to be some incompatibilities, quite possibly due to my limited understanding. One crucial issue for us is the large scale of our software: number of packages, sheer number of lines of code, number of developers, the geographical distribution. I started out by not using libtool because it says it doesn't support C++ and didn't seem to understand obscure compilers -- we absolutely have to have C++, but on the other hand, we do not really need some of the features libtool provides (at least as far as I know now). In SRT we have all the support we need, but then it doesn't do everything libtool does. Likewise, automake does similar things as our layer built on GNU make, but my impression was that automake isn't quite as flexible (especially when it comes to using non-GNU compilers), and some of the must-haves for us -- $(wildcard) and $(shell) -- didn't seem to be available. A final point is that I should really be able to hide from our developers as much as possible beasts like automake and libtool -- and recently it has become rather evident that I should reduce the use of autoconf and hide most of it. This is due to our user base. Educating them to become GNU-savvy developers is not an option. Basically, what I am after is a single tool suite that would go all the way from configure (autoconf; for scripting) to makefiles (automake; for abstract makefiles) to binary tools (libtool; for understanding weirdities of systems and compilers). That doesn't mean that they have to be all in one package, but they should integrate seamlessly. But it does mean that -- as much as I myself like the tools! -- the range of implementation mechanisms (m4, perl, make, sh scripts) is unproductive. Thanks again for reading this far! Please let me know of any ideas you have. Feel free to ask me any further questions! And please keep me in Cc:s as I am currently subscribed only to the autoconf list. Thanks! //lat -- Do not meddle in the affairs of dragons, for you are crunchy and good with ketchup.