Download Latest Version motif-2.5.0.tar.gz (15.3 MB)
Email in envelope

Get an email when there's a new version of motif 2.5.0

Home
Name Modified Size InfoDownloads / Week
README.motif-2.5.0 2016-08-04 19.2 kB
ERRATA.motif-2.5.0 2016-08-04 4.3 kB
motif-2.5.0.tar.gz 2016-07-13 15.3 MB
Totals: 4 Items   15.3 MB 5
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

Source: README.motif-2.5.0, updated 2016-08-04