I have a set of applications that all rely on a cross-platform library (in-house development), and everything is stored in subversion. Now, this library is part of every app and as such a copy of it has to be in each app's working directory.
In order to be able to go back to any version of an app and have the correct version of the lib, one option would be to keep a copy of the lib in the project, however this is a nightmare to maintain.
More elegant seems to be to use subversion's externals definitions feature. However it seems to be necessary to use explicit revision numbers to make 100% sure that the correct revision is assigned (for example, if the trunk or a tag or a branch were specified without revision number, it seems you can't be 100% sure whether you will get EXACTLY the same revision as e.g. a year ago, as people can always commit on top of the trunk/branch/tag).
Now, this library is in constant development, as it is basically the heart of our multi-platform application. So maintaining the revisions in the svn:external prop will need constant updating. It is also common that devs will make changes to their local copy (bugfixes, new features) and then commit it. I am afraid now that if I set it up using revisions it will be harder to track down where exactly this commit is going (e.g. devs may lose track that the dep is on a branch; also when committing, it will be committed to the top of the trunk/branch, possibly skipping other commits by other devs).
Basically, it seems even with external definitions the devs working with that will still need to maintain a certain amount of constraint and control handling this (see e.g. this example on SO). Ideally they should be clever enough to do so, but (judging by myself) forgetting these small details is quite common and may cause a lot of headache later on.
So, what I am looking for is a really fool-proof solution (if there is one) to this problem of keeping this lib in sync with several projects in a way that I can go back in time and always get the correct versions together without having to constantly be on the watch.