Hi Paul,
So, I think I know what is causing the problems with r.terraflow and r.viewshed, and I solved it with r.terraflow. r.terraflow needed the change in line you outlined earlier (changing IOSTREAMDEP = $(ARCH_LIBDIR)/$(LIB_PREFIX)$(IOSTREAM_LIBNAME)$(LIB_SUFFIX) to IOSTREAMDEP = (ARCH_LIBDIR)/$(LIB_PREFIX)$(IOSTREAM_LIBNAME)$(STLIB_SUFFIX) in Grass.make.in) in both Grass.make.in and Grass.make. So, r.terraflow is all set (at least for me).
r.viewshed is a completely different issue. It seems like it isn’t able to see iostream at all - if I remove the include line for iostream, I get the exact same errors. I think this is probably because of the unusual makefile r.viewshed has. We weren’t able to get a makefile like r.terraflow to work with r.viewshed, so we more or less rewrote everything. I’ll try to mess around with it, and make it use more standard grass makefiles rather than rewriting them, but I’m not very familiar with how GRASS makes things, so I may not have much luck. If you or anyone else could take a look at the makefile, and try to make it more standard, I would appreciate it.
I’ll keep you posted on any updates,
-Will
On Mon, Aug 4, 2008 at 8:26 PM, Glynn Clements <glynn@gclements.plus.com> wrote:
Paul Kelly wrote:
So I got the trunk version of GRASS, and compiled it, but iostream and
r.terraflow gave me errors. As the instructions say, I tackled the iostream
error first, and I can’t figure out what’s wrong with it. Here is what I
get if I call make in grass_trunk/lib/iostreamcc -dynamiclib -compatibility_version 7.0 -current_version 7.0 -install_name
^^
GRASS is trying to use the C compiler to create the shared library - this
worked on Linux so I didn’t notice it but obviously that must have been
just luck and it seems not to work on OS X. This clearly is something I
need to look at and try to fix - none of the other libraries contain C++
code so this hasn’t come up before.Another issue with making IOStream a dynamic library is that
Shlib.make only adds $(SHLIB_CFLAGS) to CFLAGS, not to CXXFLAGS.On Linux, this causes the code to be compiled without -fPIC, resulting
in:warning: creating a DT_TEXTREL in object.
Normally, this is just an efficiency issue (the library won’t actually
be shared; each process will have a separate copy), but it won’t work
on systems running SELinux (to perform relocation, the code segment
has to be modified, and SELinux won’t let it regain execute permission
after it has been modified).Also, the effect will vary between platforms. The Darwin case in
SC_CONFIG_FLAGS has:SHLIB_CFLAGS=“-fno-common”
ISTR that this may be a necessity for building dynamic libraries on
that platform.I’ll commit a fix for this as soon as I have tested it.
–
Glynn Clements <glynn@gclements.plus.com>
–
-Will