I'm corresponding with a few list members on issues around creating binaries that are as "prerequisite free" as possible, and would like some feedback on how library dependencies work. Specifically, how to do this on a Mac OS X system, which tends to have a more restricted set of (Unix-ish) stuff installed by default than, say, a Linux system. My lack of expertise plus lack of experience (my own systems normally have the full sources and required libraries) make it hard to figure this, so I'm appealing to the list. I know that bits and pieces of the information I'm talking about are scattered throughout past mailing list traffic, but I appeal to your patience... hopefully getting this straight will lead to better information as I write up some documentation on the web pages.
Kirk Wythers and I have both made attempts at building binaries. Both of us have used the fink packaging system (essentially, a port of Debian's package tools plus a database of software ported to the Mac) to get many of GRASS' dependencies. In the end, we get a package that seems to work well if the person using it also has fink. As Michael Barton points out in the included message below, it would be nice if users did not all have to have fink installed to use the binary distribution.
We are also trying to stick to the "official" grass binary packaging system so that the end result is the same as the "official" packages provided for other platforms on the GRASS site. I have learned a lot from the generous people that have alternative binaries available now, but we'd also like to make available a system that includes installation path flexibility and no "brute-force" installation of prerequisite libraries.
In order to try to figure out the means and feasibility to make that happen, I find myself questioning my understanding of libraries and linking. I'll set out what I THINK I understand, and hope that some corrections and/or verifications would ease our task.
I think that the problem in the example depicted below was because the GNU internationalization libraries are referred to in GRASS, and on our compilation systems, it found them in the fink directories.
I will ignore for now one issue that I'm pretty sure about: this particular library is probably only needed if you were compiling in the alternate language support, which I'm pretty sure right now is only done for Russian, and that if necessary, I think we could "hide" this library from configure and GRASS would compile without internationalization support. That's all from a vague memory of past list traffic, not from research.
I think that if the compilation of this binary package had used static libraries instead of dynamic, then this problem would not have come up because the required functions would have been compiled into the GRASS binary modules. This would get rid of some of the specific issue, but would potentially make the binary distribution much bigger.
Based on these (mis?)understandings, I suppose that as long as licenses allow it, any other libraries that are missing (e.g. in this case, libintl.*.dylib) could be copied in to the binary distribution's grass library directory, the same way we now provide libgdal. As long as the number of libraries involved are reasonable, this could be the way to go.
I also know that some functions that are in standard dynamic libraries on most systems are included in "frameworks" in Mac OS X, which means that if the right flags are given at compile time, the system-provided versions can be used, and to maximize portability we would want to catch all of these to avoid packaging non-necessary extra bits. I thought that libintl might have been in the IOKit framework, but an initial search seems to suggest that this is wrong. Any corrections from Mac-savvy people most welcome.
Maybe I should stop here before I get too far ahead. How am I doing so far?
Thanks,
Scott Mitchell
P.S. Thanks again to all that have helped getting GRASS to "play nice" with Mac OS X systems in the past - in the mailing list archives that I've saved on this, Glynn Clements and Markus Neteler in particular have helped out many times...
Begin forwarded message:
On Feb 12, 2004, at 12:38 PM, Michael Barton wrote:
Scott and Kirk,
I have a student trying to install GRASS 5.3 using the binaries you and Kirk put up, packaged TclTk binaries, and NOT using fink. (I like fink a lot, but not everyone should have to install it just to use GRASS).
It turns out that these binaries have a fink dependency that needs to be removed. Here is the result of trying start GRASS 5.3 without >> fink.
[Steven-Schmichs-Computer:~] stevensc% /usr/local/bin/grass53
dyld: /usr/local/grass53/etc/lock can't open library: /sw/lib/libintl.1.dylib (
No such file or directory, errno = 2)
/usr/local/grass53/etc/Init.sh: line 145: 599 Trace/BPT trap "$ETC/lo
ck" "$lockfile" $$
Unable to properly access /Users/stevensc/.gislock5
Please notify system personel.The student just put fink on the computer and GRASS seems to be fine.
Michael
______________________________
Michael Barton, Professor & Curator
Department of Anthropology
Arizona State University
Tempe, AZ 85287-2402
USA
------
Scott W. Mitchell Scott_Mitchell@carleton.ca
Department of Geography and Environmental Studies
Carleton University, B349 Loeb Building (Office A209)
1125 Colonel By Drive, Ottawa, ON Canada K1S 5B6
+1-613-520-2600 ext 2695 Fax: 1-613-520-4301