|
From: Jennifer A. <jm...@co...> - 2008-08-01 13:59:39
|
On Aug 1, 2008, at 8:55 AM, Patrice Dumas wrote:
> On Fri, Aug 01, 2008 at 08:09:12AM -0400, Jennifer Adams wrote:
>> Dear Experts,
>>
>> I've been pecking away at the configure scripts and thinking about
>> the
>> logic in them. There's a lot of cruft in there -- support of
>> "historical" stuff that is no longer relevant, and outdated platform
>> dependencies.
>
> Do you see that in configure.in/acinclude.m4 from, for example,
> grads-2.0.a2, or in the macros used with --enable-dyn-supplibs in
> opengrads?
The cruft I'm talking about is anything related to the CRAY, support
for the "wi" command, directory names called "supplibs-sol55", stuff
like that.
> I don't see that in configure.in/acinclude.m4. It is
> present in opengrads, but it is not an issue, in my opinion. On the
> contrary, it allows to build grads against old libdods, for example,
> which is possible and should not be dropped in my opinion.
I don't want GrADS 2.0 to keep trying to support libraries that
depend on old versions of other libraries and compilers. My remedy
for GrADS's bad case of versionitis is to forget the past and make it
work with current versions of the dependent libraries. For example, I
need to make sure I've got HDF4 built with the --disable-netcdf
option, and that option is working properly in HDF4.2r3 (this version
has finally eliminated all dependence on netcdf.h -- oh, If I had a
dollar for every pain that netcdf.h has caused me ... I'd get a free
lunch!) The whole DODS mess is the worst offender. libgadods, libdap+
+, libnc-dods, RIP. Can't wait till libnc-dap.a is swept up into
libnetcdf.a.
> Also those
> macros in fact come from other sources and should be kept synchronized
> with these sources (mostly opendap).
The dyn-supplibs macros are the ones I want to bring into the GrADS
mainstream, to be used by default.
>
>> It seems to me that the default behavior should be to look
>> for a directory called "supplibs" (in ./ and ../) and if not found
>> then
>> go hunting in the system for the required libraries, creating a
>> dynamically linked executable. To create a more portable build, the
>
> Does this means that --enable-dyn-supplibs is the default unless a
> ./supplib or ../supplib directory exists, and if a ./supplib or ../
> supplib
> directory exists one has to add --enable-dyn-supplibs to link against
> system libraries? It it is what you meant, this seems reasonnable
> to me.
I want ./supplibs to be the first place to look for libraries, then
if they don't exist there, go hunting for them in the system. If a
user knows where a library is, but it's not in ./supplibs, then the --
with configure flag is used to guide the hunting.
>
>> configure flag "--disable-shared" will stick with what's in the
>> "supplibs" directory and use the "-L/ga_supplb_path/libname.a"
>> syntax
>> instead of -L/path -lname" .
>
> That is not clear to me. What would the difference be between a build
> with "--disable-shared" and a build with a ./supplib or ../supplib
> directory present would be?
You're right, there would be no difference if "supplibs" always
trumps the system location. I guess the --enable-dyn-supplibs flag
could disable the check for ./supplibs or ../subblibs and then system
location would trump "supplibs".
>
>> The "--with-PACKAGE" configure options will
>> be used to guide the hunting for a specific library, something like
>> --with-hdf=/opt/local (and then it will look for
>> /opt/local/lib/libmfhdf.a and /opt/local/include/mfhdf.h)
>
> Agreed. It could even be used to use some supplibs but not all.
> --without-* could still be used to disable a feature.
Yes, the --without flag could save configuration time if you don't
care about enabling a certain feature. The HDF group has a nice model
for configuration with dependent libraries. I am going to borrow some
stuff from them and separate out each library that is required. I'll
look for libz.a, if not found, I can skip looking for a lot of other
libraries (png, gd, hdf, grib2). If I do find it, add it to my list
of libs and includes and continue, enabling features as I go through
the list of libraries.
> I don't understand clearly, however, if you want to use the same
> macros
> to detect the system libraries and the supplib libraries. If it is the
> case it won't be that easy to achieve, because linking staticaly
> against a supplib means supplying the path of the static
> library or enclose the static link in -Wl,-static -lname -Wl,-dy (for
> gcc, at least). This wouldn't easily be done with the system library
> detection macros.
Hmm. Let's consider the readline case. Current code is :
if test "$ga_dyn_supplibs" = "yes" ; then
GA_LIB_READLINE([use_readline=yes readline_libs=""])
else
GA_CHECK_READLINE([use_readline=yes])
fi
What if I changed that to something like:
if test "$ga_dyn_supplibs" = "yes" ; then
GA_DYN_READLINE([use_readline=yes readline_libs=""])
else
GA_SUPPLIBS_READLINE([use_readline=yes],[use_readline=no])
if teset "$use_readline" = "no" ; then
GA_DYN_READLINE([use_readline=yes readline_libs=""])
fi
fi
Where GA_SUPPLIBS_READLINE only looks in ./supplibs and always uses
the static link -L/supplibs/libname.a
Would that produce the desired result?
Jennifer
|