Mailing list archives : pcb-rnd

ID:869
From:ge...@igor2.repo.hu
Date:Sun, 10 Sep 2017 08:31:34 +0200 (CEST)
Subject:[pcb-rnd] lesstif HID: should work everywhere, no more BadWindow
Hi all,
 
As of r11396, the lesstif HID should work on every system, with both 
lesstif and motif.
 
If you can, please install the lesstif or motif devel package and 
reconfigure pcb-rnd so you can test the lesstif HID if needed. It's a good 
way to cross-check GUI bugs to decide whether it's gtk-specific or not.
 
Boring details:
 
The long standing bug was a rather tricky one to figure. I never 
experienced it on my main systems but only one box while other 
users/developers consistently reported it. I thought it was a motif 
version problem, maybe something changed recently and others use a too new 
or too old version compared to my system.
 
Then I started to work on the attribute dialog upgrade and for some of the 
lesstif code I decided to set up a smallish test bench in work/ to try out 
ideas without having to compile and run pcb-rnd. And the minimal "hello 
world" test program immediately produced the same runtime error. I went on 
and copied the official test programs from motif and lesstif, and boom, 
the same error!
 
That's when I started to investigate the build parameters. It turned out 
the order of linking must be -lXm _before_ -lXt. If the order is wrong, 
there is no link time error, but the misleading runtime error.
 
And the difference between my systems and everyone else's? Opengl. I don't 
have it, so my link list had lesstif libs before gtk libs and within the 
lesstif lib link set the order is -lXm -lXt. With opengl, -lXt got on the 
list with opengl libs, way before lesstif, that's how we ended up with 
"-lXt <a_lot_of_other_stuff> -lXm -lXt", from which the second -lXt got 
removed as redundant.
 
Solutuin: this is a very special case. I've been coding C on various UNIX 
systems since about 1999, and never seen a link order causing such runtime 
error. Nevertheless, we may later on have other link order problems which 
would cause linking error, so I decided to go for a generic/proper 
solution. I've added a new feature in scconfig so that two items in a list 
can be reordered to meet a specific requirement. It does that by minimal 
change to the list, e.g. moving the out-of-order item only, right before
(or after) the target word. Thw two lines that got added to 
src/Makefile.in:
 
# Lesstif requires that -lXm is before -lXt or else there is a runtime BadWindow
order /local/pcb/LDFLAGS {-lXm} {before} {-lXt}
 
This moves -lXm to right before -lXt if both are present on LDFLAGS and 
are in the wrong order.
 
Regards,
 
Igor2
 

Reply subtree:
869 [pcb-rnd] lesstif HID: should work everywhere, no more BadWindow from ge...@igor2.repo.hu