
I have essentially already implemented the find algorithm under the assumption that files that would be copied to for example /usr/bin will be but in /my/tmp/dir/usr/bin during the build.
I don't think I understand your assumption. What do you mean "during the build"? I think the only way to make sure that your paths are correct is to do a "fake" install into a temp directory and then do a recursive copy.
For instance, I think we have dist/build/foo/foo.exe (or something) would get installed in /usr/bin/foo.exe, and dist/doc/foo.html would be installed in /usr/share/doc/foo/foo.html. So the install paths aren't correct at build time, only at install time.
Sorry for being a bit unclear. My algorithm takes a directory prefix such as /tmp and recursively creates a list of absolute paths with the prefix removed. Example: Actuall files and dirs: /tmp/usr/bin/foo.exe /tmp/usr/share/doc/doc.txt The log file I create would look like this when run with /tmp as prefix: /usr/bin/foo.exe _SHA-1_or_something_ /usr/share/doc/doc.txt _SHA-1_or_something_ I have a function: -- | @writeInstallLog file dir@ creates a file @file@ that contains a list of -- all directories and files in @dir@ with the prefix @dir@ removed and / -- prepended. writeInstallLog :: FilePath -> FilePath -> IO ()
The files are removed in a way that will also remove empty directories. I was thinking of putting a timestamp on the files as well.
And maybe a sha1 sum?
Perhaps it would be a good idea to come up with things that could go wrong during an uninstall. Here are some: * File missing (deleted by user). * File modified. * File shared with some other Cabal package. * Configuration file (may not be removed). - Johan