FreeBSD is my favorite server operating system. IMO it is the right choice for a conservative environment, where robustness is more important than the bleeding edge. I’ve never really used it on the desktop, but I know some people do. Software is distributed to FreeBSD users mainly through the ports collection, a system of scripts that will fetch the source code and build it automatically.
A FreeBSD port can be quite complex to set up – witness the size of the FreeBSD Porter’s Handbook. But once it’s working, making incremental changes is not that difficult and a good learning experience to understand the system better.
So I poked Vasil Dimov, the maintainer of the Hugin port on FreeBSD. I did not ask him to do the job. I attempted to modify the port myself as a learning experience. I forwarded him my modifications and asked him for feedback. The major difficulty was that I currently don’t have a running FreeBSD desktop available for testing. Nevertheless, it worked out pretty well.
Anatomy of a Port
A FreeBSD port is basically a Makefile that runs the show; a distinfo file that lists the source code packages and their checksums; a pkg-descr file that describes the port; a pkg-plist file that lists the files that the port will install on the system; and a files folder that contains modification to the source code and other detail changes to make the package conform with FreeBSD standards.
Besides some administrivia such as the version and revision of the port, the most important part of the Makefile are the dependencies. Specifically, for Hugin-0.8.0 we added a build dependency on GLEW and an optional dependency on LaPACK. This second one apparently did not work because of some undefined symbols.
What I did not notice in the Makefile, and that Vasil fixed, are the improved man pages. And some post-configure tasks. The complete changes are here.
distinfo was the easiest to fix – just download the tarball from Sourceforge, check its size, run the md5 and sha256 tools to get the checksums. I got it 100% right.
pkg-descr has not changed.
We’ve added quite some files between 0.7.0 and 0.8.0 and there is no automatic way to generated this file. Vasil shared his trick with me: he does a make PREFIX=/tmp/foobar install and then checks the files under /tmp/foobar (assuming it was non-existent before)
There are currently five patches in the files folder that will be applied (and a few more outdated ones in the “Attic”). I see Vasil has updated two of them following my poking. I have not spent enough time to understand them all, but it seems to me that some of them could be adopted upstream. I’ll investigate.
I don’t have access to a FreeBSD desktop to verify if it works. I would appreciate feedback from FreeBSD users. Does Hugin-0.8.0 work for you?