Wed Jul 13 18:00:11 EDT 2016
TOP NEWS
* QUATS now builds : imake build only
Quality Assurance Tests - effecting QUATS imake build only
remade 'make detour' lost fix, would happen on rebuild: Sun Jul 10 EDT 2016
revised instructions and fixed dangling link: Mon Jan 11 EST 2016
I have not run hardly any myself yet. Effort is to supply building of.
* imake build builds Everything incl. QUATS tests/
uses config/cf proper for any host/os X supports
(not hacked Makefile.imake-pure. win32/rhlinux)
note: use "regular" automake src/motif/configure if not building QUATS
* incidental build and demo fixes which i believe do not impact last release
Likely nothing more will be added (unless who requests bug fix for 2.0),
nothing more was intended other than a Motif 2.0 being (what it should be).
This last revision only had aim of enabling what had been been working
but disabled in 2.0 by various distributors.
---------
BELOW
NEWS
New mwmrc settings
INSTALL
INSTALL (imake build for QUATS)
AUTOMAKE re-make dist (tarball) and proect files ...
Version naming 2.5.0 2.0.5
Why use mwm?
CHANGELOG
KNOWN compile warnings
KNOWN issues
TALK
ld bypass script (limited audience)
---------
NEWS
openMotif-2.1.30
openMotif-2.2.3 (nearly same as 2.1.30)
openMotif-2.3.4 (some fixes from)
openMotif-2.2.5 (per say, but name is 2.5.0, see version naming below)
Panner support is back, and %100 optional
GNU/configure %100 complete, newly successful building incl demos
no code files added
INSTALL notes further below
Panner support is back, a non-vurtual compatible panner with added feature
(OpenGroup deleted previous Virtual Panning before public release 2.1+)
See: demos/programs/panner/panner.man
* panner(1) does edge panning (pan by mouse to edge of screen)
edge panning did not need to be in mwm and is non-virtual
* panner updates smoother without flashing it can animate
(server draw on buffer, swaps)
* mwm panner support sees/pans all trasients (popups)
and icons (although icon policy may change situationally)
* slow help open and wrong size problem fixed (when using Mwm)
it was Xt 5 sec waiting on ICCC call never returned by Mwm on any new
Dialog: now default is "yes support". is off by default any
automake Motif release i've seen.
* ./configure has more options (most wont need to edit localdef.h)
easier complete build or re-project for X11 and Xorg
./configure is reworked, works with updated and completed libtool autoreconf
various build fails fixed (ie, flex issue VERSION name clash issue)
there had been missing parts in 2.2.3 to both imake and configure builds
no build fails for wider audience of newbies. imake build unchanged
infact 2.3.4 "recent newer release" failed to build for me
./localdef.h is added for making certain defaults easy to edit. if ADD_PAN
is Not defined: defines reverts to verbatim motif-2.0.2 (approx. 2.3.4)
from 2.1.30 to 2.3.4 Motif has barely changed except in lib/Xm lib/Mrm
panner support is uninvolved with lib/
2.2.3 (thus 2.5.0) does not include the new jpeg + fontconfig + international
support from 2.3.4 libXm. a 2.7.0 will be released that does. i'm unsure
if 2.3.4 changes any backward support (these days i'd bet yes - many
alteration might cause older apps to break, maybe not). NOTE relnotes
on site do say 2.3.4 is no longer compatible with 2.1.30 (2.2.3 is compat)
---------
New mwmrc settings and .Xdefaults settings
FILE: .Xdefaults
Mwm*panScrollX : 25
Mwm*panScrollY : 25
Mwm*usePan : True
Mwm*panUseX : False ! try True
Mwm*panUseMwm : False
! default is use Mwm if pcd win, X if not
! useMwm uses mwm or nothin, useX uses X on all but does use Mwm
! useX should do all Mwm things w/o un-necessary code like resize checking
FILE: .mwmrc
! pan desktop by panScrollXY ammount
Keys DefaultKeyBindings
{
Alt<Key>Up root|window|icon f.north
Alt<Key>Down root|window|icon f.south
Alt<Key>Right root|window|icon f.east
Alt<Key>Left root|window|icon f.west
}
--------
INSTALL
Make sure you ln -s /usr/X11 -> /usr/X11Rfoo or edit.
BUILDING: using automake
$ ln -s /usr/X11R? /usr/X11
$ . EXTRA_DIST/motif-2.5.0.opt
$ sh ./configure $opt
$ make
$ make install
You may need EXTRA_DIST/foo.opt , but read first to see if they apply. Edit then source into sh environment using '.' command.
--------
BUILDING: using imake
QUATS : can only be made using imake today (quality assurance tests)
$ . EXTRA_DIST/build.imake.opt
## if building QUATS (if not edit SUBSDIRS in Imakefile)
$ tar -xzf tests.tar.gz ; rm tests.tar.gz
## one-time only
$ ln -s /usr/X11R? /usr/X11
$ cd config/
# suggested for xorg or xfree86
$ tar -xzf Motif-X11.cf.tar.gz
$ cd ..
$ cd config/imake
$ make -f Makefile.ini BOOTSTRAPCFLAGS="$BOOTSTRAPCFLAGS"
$ cd ../..
## remake or fresh , see also EXTRA_DIST/go2
$ imake -I$PWD/config/cf
$ make Everythign EXTRA_INCLUDES="$EXTRA_INCLUDES" CDEBUGFLAGS="$CDEBUGFLAGS"
$ make install EXTRA_INCLUDES="$EXTRA_INCLUDES"
About cf/
Try Motif-X11.cf.tar.gz first,
Motif's orig cf are too old for X11, Motif-X11.cf was made by mixing.
If you need more platform support you'd have to mix them manually.
these are as material: X11R6-4.8.0.cf.tar.gz xorg-1.0.3.cf.tar.gz
their (rules) cannot build Motif, dont expect them to work directly
No $ imake -DUseInstalled -I/usr/X11/lib/X11/config -Iconfig/cf
-DCDEBUGFLAGS="-O0" fixes DefaultGcc2i386Opt
Motif uses INCLUDES = in Imakefile , so do not use pass INCLUDES
a bug in linux.cf which circumstancially leaves it undefined, stops build
see config/README for fyi info about imake build
ERRATA: binaries are in tests/ , GNU/Linux 2.6 circa 2010 , i686
There are some 1,000 less files if make clean is run in tests/
compared to "original" tests/. it builds but i of course cannot say
if any runtime data are in those 1000: so i removed only *.o and tar'ed
Some binaries are orig. scripts and having (any old) csh is mandatory.
## redhat WIN32 or redhat "linux" generic ONLY
## i suggest trying the 1st method before this one
$ ln -s /usr/X11R? /usr/X11
$ . EXTRA_DIST/build.imake.opt
$ cp Makefile.imake-pure Makefile
$ make World EXTRA_INCLUDES="$EXTRA_INCLUDES"
ps. if your make is called 'nmake' set MAKE="nmake", not NMAKE="nmake"
--------
AUTOMAKE re-make dist (tarball) and proect files ...
Why it's worth mentioning is either may work and be good, either may cause
problems and you need to cp -r /usr/X11/lib/X11/config cf/
if re-developing Makefiles do this:
(to do it you need packages: m4 autoconf automake libtool)
libtoolize --copy --install
autoreconf --install
sh ./configure $opt
make distcheck
I need --enable-ld-preload because libtool (runtime during make) cannot figure
how to make libXm.la, which is documented in libtool docs, however you may not.
# export DISTCHECK_CONFIGURE_FLAGS="--enable-ld-preload"
make DISTCHECK_CONFIGURE_FLAGS="--enable-ld-preload" distcheck
localdef.h was mentioned above but note some C defines like -DLARGECURSOR
are in Makefile.am and a several aren't advertised (special use)
directions to use Imake should be found in Motif documentation and should
work with, ie, X11R6 4.8.0 (which compiles and installs < 1hr on linux 2.6+).
Imake should probably not be attempted using X.org (though the basic support
to use does exist if all related X.org files are installed).
---------
Version naming 2.5.0 2.0.5
Version naming : accoring to automake libtool manual and ld.so
libXm.so.2.0.2 , .so.2.0, .so.2
2 means the uppermost supported major number: what most apps "require"
current version
.0 means motif 1 or 0 apps are also (mostly) supported to load this
age (supported span span of versions)
.5 is an (arbitrary) revision of 2, but apps should avoid demanding it
revision (revisions number, not effecting version)
2.1.2 means, to ld.so, interface has changed, ld.so will refuse to load
apps seeking "motif 2" saying 2.0 is not supported (file renaming aside)
it's not ok to have long numbers, 2.0.5 is unique for openmotif
automake reorders this to libtool order 2.5.0 and makes 2.5.0.tar.gz,
creating the inner tarname motif-2.5.0.tar.gz by default
if you remake all: 2.5.0 is what gets made
but this means libMrm.so.2.0.5 will be installed (in linux)
added many fixes from 2.3.4 but did not include new libXm-2.3.4
instead i wish to make "2.3.5" a separate release
because i know many apps worked with 2.1.30/2.2.3 and cannot
say the same for any new revision (for me 223 compiles 234 didnt)
(libXm has minimal jpeg and FT font supp, but maybe ABI changes,
maybe incompatibility)
libXm aside, there are very few changes to motif from 2.1.30 to 2.3.4
--------------
Why use mwm?
there's probably a book on it
Fvwm:
* fvwm is faster, but depends on GTK libs (more to build)
* fvwm has nifty desktop modules (ie, text interface to fvwm commands)
* fvwm has gnome hints, ft fonts (motif-2.3.4 has as well)
Mwm:
* Motif is libXm.so.2 (ddd gui for gdb needs it, Mathematica likes it
* Motif has no lib dependancies outside of X11
* (free) gui development toolkits for smart ui layout / application
making for Motif (like java ide or xcode but not feature competitive)
* Motif has free + in-print books
* CDE desktop and Motif work together as a pair
* some older (motif) apps work nicer (or dont crash or fub) using Motif
both:
many desktops like xfce outshine both, but also do work with either.
however gtk/kde/etc are all or none (poor security, every app even an
image viewer needs 100+ libs and uses internet w/o asking, cannot
run on older machines (infact attack compatibility with), etc
ie, firefox uses gnome libs but is indifferent to what wm
is running for the typical browsing
result:
fvwm (if you can get gtk to compile!) is may be a wiser
starting choice for daily use. but Mwm is needed even if not used.
---------
CHANGELOG
* imake + QUATS restoration (ie, work in year 2010 xorg, X11R6, glibc, ...)
* far from complete log - too many tiny changes for that
Xm Mrm uil are %99.95 the same , make scripts required many light edits
to so they work as we generally expect builds to work today
* found autoconf config.h doesn't spread -Ddefines to .h
and it delivers to some .c not other in "large LT_INIT projects".
(probably and env passing bug that is well known).
fixed, all files update config.h via localdef.h, imake might use too
(which do install, of course)
* found lost -m32 compile option (lost in shuffle) (or -m64)
IMPORTANT: -m32 see EXTRA_DIST, ./configure does not detect this
and it really depends on what your vendor did, linux distro
(you'd have to use objdump(1) to know for sure otherwise)
see another note below on -m32 (for imake build ignore this)
* found Imakefile and "Makefile.imake-pure" had been altered and
from earlier motif, and it's unlikely the changes were meant to work
for a general audience at all
-----------
KNOWN compile warnings:
* Motif has a few spurious ones (very likey due to lack of type-casting)
* Exm.h:16:52: warning: missing terminating ' character
not a parse problem: is complaining of ' in license comment of Exm.wml
* imake build only:
../../../config/cf/host.def:14: warning: "USE_BYACC" redefined
is intentional if bison is detected, this avoids relying on foo.cf
to say "i have bison" (would only be coincidentally correct)
NOTE: if you see error wmdblcreate.o missing "missng UilFoo.h"
the imake/make YACC,YACCFLAGS variable are set wrong
(linking libs may also pop up a problem, which is why
automake is probably best for public releasing)
* UilLexPars.h:222:1: warning: "VERSION" redefined
is complaining of intentional #undef - warning text is incorrect
* you should NOT see this, if so, lex fails and uil with it:
(if you see this, VERSION is redefined from config.h, lex uses it too)
In file included from wmldbcreate.c:90:
UilLexPars.h:103: error: expected identifier before string constant
In file included from wmldbcreate.c:90:
UilLexPars.h:222:1: warning: "VERSION" redefined
* imake build only:
if you don't have config.h you have to make one
run ./configure $opt (or edit from config.h.in)
-----------
KNOWN issues:
* imake build only: be wary of depends re-build v. header changes.
openMotif was hacked before release to build by automake and maintainers
did not update imake files but also never finished (quats) the makefiles.
.c are in imake but .h may not be, the build will work but be cautious of
a RE-BUILD (ie, touch *.c if you suspect it)
---------
TALK
note mwm not needed to run Motif 2.0 apps well (Xm nicely compiled for
2.0 compliance is)
A good question is why X does panning only hardware based (limited
to video memory). it would seem easy it could translate all coord
it gets (making it slower a little checking every x,y?).
I began by thinking "just add part of a virtual panner they took out"
and saw it would be very intrusive (it is in every wm i looked at, virtual
hacks are frequent and scattered across all code).
so i decided to give non-virtual a try. it's a litle slow but works,
is un-obtrusive and has no real complications i think. more windows
slows it down, but when X hits many graphic windows it is the larger
factor of waiting. reguardless panner can pick a place rather than slide.
-----------------
a fixme: which may not need to be done.
libld.so.2 may be compiled into many bins (dlopen linkage)
I'm unsure if that's right or wrong. some say a new mechanism
is done so that if dlopen succeeds and libX11/libc has an error, flow
goes back to app from dlopen. but i'd say: do not allow that unless
has special linkage to a callback that knows return value is not safe.
it happens, i beleive because new LT_INIT enforces that any lib X11 needs
will be required as a depends by all apps requiring X11. this is wrong
because if X11 links against -lm (math) doesn't mean every app needs -lm.
and if math "crashes" flow goes to X11 who called it, not app using x11.
(they altered dlopen flow to help "speed up" ie an dlopen lib that crashes
?libc , they want flow to pass back instead of close a lib but i can tell
you if libc crashed it should close: it is stateful and libc shouldnt
be shared with a lib separately developed - too many issues)
If you want to try fixing its easy but ultimately very site-specific:
$ mv /usr/bin/ld /usr/bin/ld.bin # note ld may be hard linked elsewhere
$ vi /usr/bin/ld (see example far below)
$ undo the hack after compiling: since some progs require ld-linux.so
This also filters -rpath, you might not want that. Doing so allows
one to move libs: ex: mv /usr/Motif /usr/local/Motif (edit ld.so.conf)
It also allows one to test "a new /lib" without rebooting; it allows
LD_LIBRARY_PATH to work without "consequences" of rebooting / recover disk.
--------------
EXAMPLE of ld bypass:
#!/bin/sh
# ld.bin $* ; exit # easy bypass if using imake
set -e
# guarantee root has way to set rpath despite MB of m4 complexly clobbering
for x in GNUTARGET LDEMULATION COLLECT_NO_DEMANGLE
do
[ -n "$(echo "`eval '$'${x}`")" ] && {
echo "invisible ld env set by configure: $x" >> /dev/stderr
echo "`date` invisible ld env set by configure: $x" > /tmp/ld.warn
exit 1
}
done
[ c"`uname -o`" = c"GNU/Linux" ] || { ld.bin $* ; exit ; }
echo "$*" > /tmp/ld.rpath.in
[ -f "/etc/ld.rpath" ] && foo="`cat /etc/ld.rpath || true`" || \
echo "note: /etc/ld.rpath missing means none" >> /tmp/ld.warn
# not stderr, some m4 configure macro use stderr as compile fail not good test!
allargs="$*"
[ c"$foo" = c"as-is" ] && args="$allargs"
[ ! c"$foo" = c"as-is" ] && \
while [ 1 ]
do
x="$1" ; left="${x%=*}" ; right="${x#*=}"
[ c"$right" = c"$left" ] && right=""
case "$left" in
-Y)
[ -z "$right" ] && shift || true
;;
-R|--just-symbols) pth=""
[ -n "$right" ] && pth="$right"
[ -z "$right" ] && shift && pth="$1"
[ ! -d "$pth" ] && args=" $args $x "
[ -d "$pth" ] && [ -n "$foo" ] && args=" $args -rpath=${foo} "
;;
-rpath|--rpath)
[ -n "$foo" ] && args=" $args -rpath=${foo} "
[ -z "$right" ] && shift || true
;;
# ok: seems to be searchpath linking only - a build tree issue (not at runtime)
NEVER-rpath-link*)
echo "warn: attempt to hardcode .so internal depend order" >> /tmp/ld.warn
echo "warn: attempt to disable LD_foo_PATH system defaults" >> /tmp/ld.warn
echo "$allargs" >> /tmp/ld.warn
echo "`date` ^^ attempt to hardcode .so internal depend order" \
>> /tmp/ld.warn
args=" $args `cat /etc/ld.rpath-link || true` "
;;
# args="$args `cat /etc/ld.rpath-link`" # force system default behavior
# the below is a learning tool for me, inform me of what (configure) is doing
# lesson 1 # --dynamic-linker=/lib/ld-linux.so.2 # if not hardcoded is ?
--wrap|--kill-at|--dll|--add-stdcall-alias|--enable-auto-import|--subsystem|--forceinteg|--nxcompat|--wdmdriver|--got*|--bank*|--dynamicbase|--force-exe-suffix)
# allows source code to appear not what it is: quit so everyone knows
# (also, win32 opts on GNU signify configure tampering other misbehavior)
echo " --wrap or win32 ld option given" >> /dev/stderr
echo "$allargs" >> /tmp/ld.warn
echo "`date` ^^ --wrap or win32 ld option given" >> /tmp/ld.warn
exit 1
;;
--script*|-dT|--default-script*|-T|@*)
echo "linker script not parsed read it before allowing: $x" >> /dev/stderr
echo "$allargs" >> /tmp/ld.warn
echo "`date` ^^ linker script: read it then echo 'as-is' > /etc/ld.rpath" \
>> /tmp/ld.warn
exit 1
;;
-T*|--selection-start|--enable-new-dtags|--warn-unresolved-symbols|--sysroot*|--relax|--noinhibit-exec|--allow-multiple-definition|--defsym|--no-check-sections|--accept-unknown-input-arch|nodelete|nodefaultlib|muldefs|-u|--undefined|--strip-all|-s|-n|--nmagic|-N|-omagic|-init*|-fini*|-F|--filter|-e|--entry)
# the last few are -z foo
# -u because we usually dont want invisible depends unless seen in code
echo "$x" >> /tmp/ld.warn
echo "`date` ^^ assembler hacks were applied" >> /tmp/ld.warn
args=" $args $x "
;;
# hack - comment this out after compiling Motif
-ldl)
echo "warn: attempt to use -ldl" >> /tmp/ld.warn
echo "warn: attempt to use -ldl" >> /tmp/ld.warn
echo "$allargs" >> /tmp/ld.warn
echo "`date` ^^ attempt to use -ldl" \
>> /tmp/ld.warn
args=" $args `cat /etc/ld.rpath-link || true` "
;;
*)
args=" $args $x "
;;
esac
shift || break
done
echo "$args" > /tmp/ld.rpath.out
ld.bin $args
exit