Our use case is building a distribution package that represents a typical *nix tool. That would include elements such as:
where each elements must be installed in a specific place in the file system. The final package might look like this for Linux:
etc/foo.rc etc/food.conf sbin/food usr/bin/foo # symlink to ../share/foo/bin/foo usr/bin/fooctl # symlink to ../share/foo/bin/fooctl usr/bin/foocheck usr/lib/foo/runtime.so usr/lib/foo/runtime.so usr/share/doc/foo/copyright usr/share/doc/foo/README.txt usr/share/doc/foo/foo.html usr/share/man/man1/foo.1.gz usr/share/man/man1/fooctl.1.gz usr/share/man/man8/food.8.gz usr/share/foo/bin/foo usr/share/foo/bin/fooctl usr/share/foo/bar.rules usr/share/foo/baz.rules usr/share/foo/locale/foo/en/msgs.cat usr/share/foo/locale/foo/it/msgs.cat usr/share/foo/locale/fooctl/en/msgs.cat usr/share/foo/locale/fooctl/it/msgs.cat usr/share/foo/locale/food/en/msgs.cat usr/share/foo/locale/food/it/msgs.cat var/tmp/foo var/tmp/foo/queue
For macOS, it would be mostly the same, but files under usr/share/foo
would move to Library/Foo
.
To emulate reality better, the source tree is organized in a way that is convenient for the developers. This example illustrates techniques create the desired final structure.