[Xastir] problems with xastir

Tom Russo russo at bogodyn.org
Thu Dec 20 21:34:42 EST 2012


On Thu, Dec 20, 2012 at 09:21:38PM -0500, we recorded a bogon-computron collision of the <lee.bengston at gmail.com> flavor, containing:
> On Thu, Dec 20, 2012 at 3:19 PM, Tom Russo <russo at bogodyn.org> wrote:
> >>
> >> How odd.   I can't see how Xastir's configure would find that.
> >>
> >> Look at your config.log --- when it reports that it found a BDB, does it
> >> say it is using -ldb5.1 or something like it (search down for where it
> >> is probing for berkeley db, and it should say first:
> >>
> >> checking for a library containing db_create
> 
> >From config.log
> 
> configure:12049: checking for a library containing db_create
> configure:12065: gcc -o conftest -g -O2 -pipe -W -Wall -Wpointer-arith
> -Wstrict-prototypes -Wno-unused-parameter -pthread
> -I/usr/local/include -I/usr/include/geotiff  -L/usr/local/lib
> conftest.c -lrt -lXm -lXt -lXp -lXext -lm   -lSM -lICE -lX11  -lcurl
> -lproj -lshp -lpcre -ltiff -lgeotiff -lax25 -ldb-4.9 >&5
> conftest.c:170:1: warning: function declaration isn't a prototype
> [-Wstrict-prototypes]
> /usr/bin/ld: cannot find -ldb-4.9
> collect2: error: ld returned 1 exit status
> configure:12065: $? = 1
> configure: failed program was:
> | /* confdefs.h */
> 
> >>
> >> and much later something like:
> >>
> >> result: -ldbXXX
> 
> The log just shows
> configure:12079: result: -ldb

Well, there it is.  Apparently the db-5.1 package has installed the library
as libdb.so with no version number adorning it.  

> >> The only question in my mind is whether maybe you ALSO have a 4.x version
> >> installed and it's finding that.  "Help->About" doesn't actually report the
> >> db version it found, only whether it found a usable one (in which case it
> >> reports "map_caching" as a "library used" which is misleading).
> 
> I searched with synaptic, and I could not find any 4.x versions
> available from the repositories - only 5.1 and 5.3.
> 
> >
> > It gets worse than xastir's configure not just probing for 5.x versions.  The
> > map_cache.c code actually will NOT do anything right with version 5.x.
> > It contains an ifdef set-up like this:
> >
> ------ snip ----
> >
> > Thus, if DB_VERSION_MAJOR is less than 4, fail, if equal to 4, then do
> > some set-up based on minor version number (because 4.0 and 4.1 had slightly
> > different APIs), and if version is greater than 4, do absolutely nothing.
> >
> > This pattern is followed *EVERYWHERE* that the "open" function of the db
> > library is called.  So if you're actually linking db5.1 in, then map caching
> > is NOT working, because it is never opening the database.  I can't see what
> > the code would actually do --- it looks like when it gets a pointer to
> > the database structure it tries to call "get" and "put" on things, and may
> > silently pass through and do nothing (not even output) if those fail.  One
> > has to turn on debug level 512 to see some output in case that get and put are
> > called and fail.
> >
> > If you have map caching working, then it's because you also have a 4.x
> > db installed.  If you're linked against 5.1 (and I can't see how you could be)
> > then map caching isn't working.
> 
> Currently it's hard to see how I do.  Configure didn't seem to find a
> 4.x version unless I missed something in the log.  I did have 4.8
> installed prior to upgrading from 12.04 to 12.10.
> 
> Here's the beginning of the output of sudo ldd /usr/bin/xastir
> 
> 	linux-gate.so.1 =>  (0xb7786000)
> 	libXm.so.2 => /usr/lib/libXm.so.2 (0xb762e000)
> 	libXt.so.6 => /usr/lib/i386-linux-gnu/libXt.so.6 (0xb75d2000)
> 	libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xb749b000)
> 	libGraphicsMagick.so.3 => /usr/lib/libGraphicsMagick.so.3 (0xb7178000)
> 	libtiff.so.5 => /usr/lib/i386-linux-gnu/libtiff.so.5 (0xb7105000)
> 	libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb70d9000)
> 	libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb70be000)
> 	libdb-5.1.so => /usr/lib/i386-linux-gnu/libdb-5.1.so (0xb6f36000)
> 	libcurl.so.4 => /usr/lib/i386-linux-gnu/libcurl.so.4 (0xb6ed3000)
> 	libshp.so.1 => /usr/lib/i386-linux-gnu/libshp.so.1 (0xb6ec8000)
> 	libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb6e88000)
> 	libgeotiff.so.2 => /usr/lib/libgeotiff.so.2 (0xb6e60000)
> 	libax25.so.0 => /usr/lib/libax25.so.0 (0xb6e54000)
> 
> A reference to libdb5.1 is there, hmm.

Your configure results show how this must have happened.  There must be a 
symlink of some kind linking libdb.so to libdb-5.1.so (check /usr/lib, bet
you'll find a symlink there), and configure is picking it up (since it *DOES*
check -ldb when it searches for libraries with db_create in them).

Then the question remains "does caching actually *WORK*?"  Have you tried it?
Betcha it DOESN'T, thanks to that broken set of ifdefs that only call 
dbp->open if the major version number of BDB (from its header files) is 4.

If the db_open function of version 5.x has the same API as the 4.1+ version,
then one need only change 

#elif    (DB_VERSION_MAJOR==4 && DB_VERSION_MINOR>=1 )


to

#elif    ((DB_VERSION_MAJOR==4 && DB_VERSION_MINOR>=1) || DB_VERSION_MAJOR>4)

and it should work.  

But as it stands, if DB_VERSION_MAJOR=5, the database that contains the map
cache is not getting opened.
-- 
Tom Russo    KM5VY   SAR502   DM64ux          http://www.swcp.com/~russo/
Tijeras, NM  QRPL#1592 K2#398  SOC#236        http://kevan.org/brain.cgi?DDTNM
 echo "prpv_a'rfg_cnf_har_cvcr" | sed -e 's/_/ /g' | tr [a-m][n-z] [n-z][a-m]

 





More information about the Xastir mailing list