diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bd361d4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/motif-2.3.4-src.tgz
diff --git a/.motif.metadata b/.motif.metadata
new file mode 100644
index 0000000..1296973
--- /dev/null
+++ b/.motif.metadata
@@ -0,0 +1 @@
+49ecfe2a0939232ca78ce318d938044e7f751b6d SOURCES/motif-2.3.4-src.tgz
diff --git a/SOURCES/motif-2.3.4-Fix-issues-with-Werror-format-security.patch b/SOURCES/motif-2.3.4-Fix-issues-with-Werror-format-security.patch
new file mode 100644
index 0000000..f0ff860
--- /dev/null
+++ b/SOURCES/motif-2.3.4-Fix-issues-with-Werror-format-security.patch
@@ -0,0 +1,815 @@
+From 4783fb4cec8624311bb87b2eb4a2ac94a5c7d849 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20=C5=A0abata?= <contyk@redhat.com>
+Date: Thu, 8 Jun 2017 12:12:04 +0200
+Subject: [PATCH] Fix issues with -Werror=format-security
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Petr Šabata <contyk@redhat.com>
+---
+ lib/Mrm/Mrmhier.c       |   4 +-
+ lib/Mrm/Mrmicon.c       |   4 +-
+ lib/Mrm/Mrmlread.c      |   2 +-
+ lib/Mrm/Mrmwcrw.c       |   4 +-
+ tools/wml/wmldbcreate.c |   2 +-
+ tools/wml/wmlouth.c     | 128 ++++++++++++++++++++++++------------------------
+ tools/wml/wmloutkey.c   |  10 ++--
+ tools/wml/wmloutmm.c    |  16 +++---
+ tools/wml/wmlresolve.c  |  26 +++++-----
+ 9 files changed, 98 insertions(+), 98 deletions(-)
+
+diff --git a/lib/Mrm/Mrmhier.c b/lib/Mrm/Mrmhier.c
+index 2712742..2a8703c 100644
+--- a/lib/Mrm/Mrmhier.c
++++ b/lib/Mrm/Mrmhier.c
+@@ -264,10 +264,10 @@ Urm__OpenHierarchy (MrmCount			num_files,
+ 	    case MrmSUCCESS:
+ 	      break;
+ 	    case MrmNOT_VALID:
+-	      sprintf (err_stg, _MrmMMsg_0113);
++	      sprintf (err_stg, "%s", _MrmMMsg_0113);
+ 	      break;
+ 	    default:
+-	      sprintf (err_stg, _MrmMMsg_0114);
++	      sprintf (err_stg, "%s", _MrmMMsg_0114);
+ 	      break;
+ 	    }
+ 	}
+diff --git a/lib/Mrm/Mrmicon.c b/lib/Mrm/Mrmicon.c
+index 95d4086..191e2d2 100644
+--- a/lib/Mrm/Mrmicon.c
++++ b/lib/Mrm/Mrmicon.c
+@@ -1176,7 +1176,7 @@ Urm__RealizeColorTable (Screen			*screen,
+ 		}
+ 		break;
+ 	      default:
+-		sprintf(err_msg, _MrmMMsg_0040);
++		sprintf(err_msg, "%s", _MrmMMsg_0040);
+ 		return Urm__UT_Error ("Urm__RelizeColorTable",
+ 				      err_msg, NULL, NULL, MrmFAILURE) ;
+ 	      }
+@@ -1252,7 +1252,7 @@ Urm__RealizeColorTable (Screen			*screen,
+ 	      break;
+ 	    default:
+ 	      result = MrmFAILURE;
+-	      sprintf (err_msg, _MrmMMsg_0040);
++	      sprintf (err_msg, "%s", _MrmMMsg_0040);
+ 	      Urm__UT_Error ("Urm__RelizeColorTable",
+ 			     err_msg, NULL, NULL, MrmFAILURE) ;
+ 	    }
+diff --git a/lib/Mrm/Mrmlread.c b/lib/Mrm/Mrmlread.c
+index c2fd94c..be433a3 100644
+--- a/lib/Mrm/Mrmlread.c
++++ b/lib/Mrm/Mrmlread.c
+@@ -698,7 +698,7 @@ MrmFetchColorLiteral (MrmHierarchy                hierarchy_id,
+ 	 XBlackPixelOfScreen(XDefaultScreenOfDisplay(display)));
+       break;
+     default:
+-      sprintf(err_msg, _MrmMMsg_0040);
++      sprintf(err_msg, "%s", _MrmMMsg_0040);
+       result = Urm__UT_Error ("MrmFetchColorLiteral",
+ 			      err_msg, NULL, NULL, MrmFAILURE) ;
+       _MrmAppUnlock(app);
+diff --git a/lib/Mrm/Mrmwcrw.c b/lib/Mrm/Mrmwcrw.c
+index fe3db52..3c5857f 100644
+--- a/lib/Mrm/Mrmwcrw.c
++++ b/lib/Mrm/Mrmwcrw.c
+@@ -1390,7 +1390,7 @@ Urm__CW_CreateArglist (Widget			parent,
+ 			}
+ 		      break;
+ 		    default:
+-		      sprintf (err_msg, _MrmMMsg_0040);
++		      sprintf (err_msg, "%s", _MrmMMsg_0040);
+ 		      result = Urm__UT_Error ("Urm__CW_ConvertValue",
+ 					      err_msg, NULL, NULL, MrmFAILURE) ;
+ 		    };
+@@ -2426,7 +2426,7 @@ Urm__CW_ConvertValue (Widget			parent,
+ 	    }
+ 	  break;
+ 	default:
+-	  sprintf(err_msg, _MrmMMsg_0040);
++	  sprintf(err_msg, "%s", _MrmMMsg_0040);
+ 	  return Urm__UT_Error ("Urm__CW_ConvertValue",
+ 				err_msg, NULL, NULL, MrmFAILURE) ;
+ 	};
+diff --git a/tools/wml/wmldbcreate.c b/tools/wml/wmldbcreate.c
+index 07c0a3c..6de585a 100644
+--- a/tools/wml/wmldbcreate.c
++++ b/tools/wml/wmldbcreate.c
+@@ -425,7 +425,7 @@ int	table_id;
+ 		{
+ 		fprintf (afile, "%d, ", entry_vec[j]);
+ 		}
+-	    fprintf (afile, "\n");
++	    fprintf (afile, "%s", "\n");
+ 	    }
+         }
+ }
+diff --git a/tools/wml/wmlouth.c b/tools/wml/wmlouth.c
+index d2330e3..a52843f 100644
+--- a/tools/wml/wmlouth.c
++++ b/tools/wml/wmlouth.c
+@@ -225,12 +225,12 @@ if ( outfil == (FILE *) NULL )
+     printf ("\nCouldn't open UilSymGen.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
++fprintf (outfil, "%s", canned_warn);
+ 
+ /*
+  * Write the sym_k..._object literals
+  */
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned1);
+ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
+     {
+     clsobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ndx].objptr;
+@@ -244,7 +244,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
+ /*
+  * Define the sym_k_..._reason literals
+  */
+-fprintf (outfil, canned3);
++fprintf (outfil, "%s", canned3);
+ for ( ndx=0 ; ndx<wml_obj_reason_ptr->cnt ; ndx++ )
+     {
+     resobj = (WmlResourceDefPtr) wml_obj_reason_ptr->hvec[ndx].objptr;
+@@ -258,7 +258,7 @@ for ( ndx=0 ; ndx<wml_obj_reason_ptr->cnt ; ndx++ )
+ /*
+  * Define the sym_k_..._arg literals
+  */
+-fprintf (outfil, canned4);
++fprintf (outfil, "%s", canned4);
+ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
+     {
+     resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr;
+@@ -272,7 +272,7 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
+ /*
+  * Define the sym_k_..._enumset structs and literals
+  */
+-fprintf (outfil, canned5);
++fprintf (outfil, "%s", canned5);
+ for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
+     {
+     enumsetobj = (WmlEnumSetDefPtr) wml_obj_enumset_ptr->hvec[ndx].objptr;
+@@ -286,7 +286,7 @@ for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
+ /*
+  * Define the sym_k_..._enumval literals
+  */
+-fprintf (outfil, canned6);
++fprintf (outfil, "%s", canned6);
+ for ( ndx=0 ; ndx<wml_obj_enumval_ptr->cnt ; ndx++ )
+     {
+     enumvalobj = (WmlEnumValueDefPtr) wml_obj_enumval_ptr->hvec[ndx].objptr;
+@@ -301,7 +301,7 @@ for ( ndx=0 ; ndx<wml_obj_enumval_ptr->cnt ; ndx++ )
+  * Define the sym_k_..._charsize literals
+  * Define the sym_k_..._charset literals
+  */
+-fprintf (outfil, canned7);
++fprintf (outfil, "%s", canned7);
+ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
+     {
+     charsetobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
+@@ -315,7 +315,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
+ /*
+  * Define the sym_k_..._child literals
+  */
+-fprintf (outfil, canned8);
++fprintf (outfil, "%s", canned8);
+ for ( ndx=0 ; ndx<wml_obj_child_ptr->cnt ; ndx++ )
+     {
+     childobj = (WmlChildDefPtr) wml_obj_child_ptr->hvec[ndx].objptr;
+@@ -379,12 +379,12 @@ if ( outfil == (FILE *) NULL )
+     printf ("\nCouldn't open UilSymChCL.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
++fprintf (outfil, "%s", canned_warn);
+ 
+ /*
+  * Create table entries, similar to writing sym_k...
+  */
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned1);
+ for ( ndx=0 ; ndx<wml_obj_child_ptr->cnt ; ndx++ )
+     {
+     childobj = (WmlChildDefPtr) wml_obj_child_ptr->hvec[ndx].objptr;
+@@ -392,7 +392,7 @@ for ( ndx=0 ; ndx<wml_obj_child_ptr->cnt ; ndx++ )
+     fprintf (outfil, "    sym_k_%s_object,\n",
+ 	     classobj->tkname);
+     }
+-fprintf (outfil, canned1a);
++fprintf (outfil, "%s", canned1a);
+ 
+ /*
+  * close the output file
+@@ -446,12 +446,12 @@ if ( outfil == (FILE *) NULL )
+     printf ("\nCouldn't open UilSymArTy.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
++fprintf (outfil, "%s", canned_warn);
+ 
+ /*
+  * Create table entries, similar to writing sym_k...
+  */
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned1);
+ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
+     {
+     resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr;
+@@ -459,7 +459,7 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
+     fprintf (outfil, "    sym_k_%s_value,\n",
+ 	     datobj->tkname);
+     }
+-fprintf (outfil, canned1a);
++fprintf (outfil, "%s", canned1a);
+ 
+ /*
+  * close the output file
+@@ -509,19 +509,19 @@ if ( outfil == (FILE *) NULL )
+     printf ("\nCouldn't open UilSymRArg.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
++fprintf (outfil, "%s", canned_warn);
+ 
+ /*
+  * Create table entries, similar to writing sym_k...
+  */
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned1);
+ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
+     {
+     resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr;
+     fprintf (outfil, "    %d,\n",
+ 	     resobj->related_code);
+     }
+-fprintf (outfil, canned1a);
++fprintf (outfil, "%s", canned1a);
+ 
+ /*
+  * close the output file
+@@ -621,12 +621,12 @@ if ( outfil == (FILE *) NULL )
+     printf ("\nCouldn't open UilUrmClas.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
++fprintf (outfil, "%s", canned_warn);
+ 
+ /*
+  * Write entries for widgets
+  */
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned1);
+ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
+     {
+     clsobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ndx].objptr;
+@@ -637,7 +637,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
+     else 
+ 	fprintf (outfil, "  \"%s\",\t\n", synobj->convfunc);
+     }
+-fprintf (outfil, canned2);
++fprintf (outfil, "%s", canned2);
+ 
+ /*
+  * Write entries for gadget variants of widget classes
+@@ -661,7 +661,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
+ 		     synobj->name);
+ 	}
+     }
+-fprintf (outfil, canned3);
++fprintf (outfil, "%s", canned3);
+ 
+ /*
+  * Write entries for non-dialog widgets
+@@ -685,7 +685,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
+ 		     synobj->name);
+ 	}
+     }
+-fprintf (outfil, canned4);
++fprintf (outfil, "%s", canned4);
+ 
+ /*
+  * Write entries for the resource a widget's controls map to
+@@ -701,7 +701,7 @@ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
+     else
+ 	fprintf (outfil, "  sym_k_%s_arg,\n", mapresobj->tkname);
+     }
+-fprintf (outfil, canned5);
++fprintf (outfil, "%s", canned5);
+ 
+ /*
+  * Write entries for arguments
+@@ -714,7 +714,7 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
+     fprintf (outfil, "  %s,\n",
+ 	     synres->resliteral);
+     }
+-fprintf (outfil, canned6);
++fprintf (outfil, "%s", canned6);
+ 
+ /*
+  * Write entries for reasons
+@@ -727,7 +727,7 @@ for ( ndx=0 ; ndx<wml_obj_reason_ptr->cnt ; ndx++ )
+     fprintf (outfil, "  %s,\n",
+ 	     synres->resliteral);
+     }
+-fprintf (outfil, canned7);
++fprintf (outfil, "%s", canned7);
+ 
+ /*
+  * close the output file
+@@ -781,13 +781,13 @@ if ( outfil == (FILE *) NULL )
+     printf ("\nCouldn't open UilConst.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
++fprintf (outfil, "%s", canned_warn);
+ 
+ /*
+  * Process the arguments in code order. We start with 1, and write out
+  * the mask after processing 8 codes.
+  */
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned1);
+ strcpy (maskbuf, "0");
+ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
+     {
+@@ -805,7 +805,7 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
+     }
+ if ( bitno != 8 )
+     fprintf (outfil, "%s", maskbuf);
+-fprintf (outfil, canned1a);
++fprintf (outfil, "%s", canned1a);
+ 
+ /*
+  * close the output file
+@@ -878,8 +878,8 @@ if ( outfil == (FILE *) NULL )
+     printf ("\nCouldn't open UilSymReas.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned_warn);
++fprintf (outfil, "%s", canned1);
+ 
+ /*
+  * Generate the bit vectors for each class. Outer loop on the reason code,
+@@ -919,19 +919,19 @@ for ( resndx=0 ; resndx<wml_obj_reason_ptr->cnt ; resndx++ )
+     if ( itemno != 0 )
+ 	fprintf (outfil, "%s 0};\n", maskbuf);
+     else
+-	fprintf (outfil, "};\n");
++	fprintf (outfil, "%s", "};\n");
+     }
+ 
+ /*
+  * Write the vector of vectors.
+  */
+-fprintf (outfil, canned2);
++fprintf (outfil, "%s", canned2);
+ for ( resndx=0 ; resndx<wml_obj_reason_ptr->cnt ; resndx++ )
+     {
+     resobj = (WmlResourceDefPtr) wml_obj_reason_ptr->hvec[resndx].objptr;
+     fprintf (outfil, "  reason_class_vec%d,\n", resobj->sym_code);
+     }
+-fprintf (outfil, canned3);
++fprintf (outfil, "%s", canned3);
+ 
+ /*
+  * close the output file
+@@ -1004,8 +1004,8 @@ if ( outfil == (FILE *) NULL )
+     printf ("\nCouldn't open UilSymArTa.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned_warn);
++fprintf (outfil, "%s", canned1);
+ 
+ /*
+  * Generate the bit vectors for each class. Outer loop on the argument code,
+@@ -1045,19 +1045,19 @@ for ( resndx=0 ; resndx<wml_obj_arg_ptr->cnt ; resndx++ )
+     if ( itemno != 0 )
+ 	fprintf (outfil, "%s 0};\n", maskbuf);
+     else
+-	fprintf (outfil, "};\n");
++	fprintf (outfil, "%s", "};\n");
+     }
+ 
+ /*
+  * Write the vector of vectors.
+  */
+-fprintf (outfil, canned2);
++fprintf (outfil, "%s", canned2);
+ for ( resndx=0 ; resndx<wml_obj_arg_ptr->cnt ; resndx++ )
+     {
+     resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[resndx].objptr;
+     fprintf (outfil, "  arg_class_vec%d,\n", resobj->sym_code);
+     }
+-fprintf (outfil, canned3);
++fprintf (outfil, "%s", canned3);
+ 
+ /*
+  * close the output file
+@@ -1129,8 +1129,8 @@ if ( outfil == (FILE *) NULL )
+     printf ("\nCouldn't open UilSymChTa.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned_warn);
++fprintf (outfil, "%s", canned1);
+ 
+ /*
+  * Generate the bit vectors for each class. Outer loop on the child code,
+@@ -1168,19 +1168,19 @@ for ( childndx=0 ; childndx<wml_obj_child_ptr->cnt ; childndx++ )
+     if ( itemno != 0 )
+ 	fprintf (outfil, "%s 0};\n", maskbuf);
+     else
+-	fprintf (outfil, "};\n");
++	fprintf (outfil, "%s", "};\n");
+     }
+ 
+ /*
+  * Write the vector of vectors.
+  */
+-fprintf (outfil, canned2);
++fprintf (outfil, "%s", canned2);
+ for ( childndx=0 ; childndx<wml_obj_child_ptr->cnt ; childndx++ )
+     {
+     childobj = (WmlChildDefPtr) wml_obj_child_ptr->hvec[childndx].objptr;
+     fprintf (outfil, "  child_class_vec%d,\n", childobj->sym_code);
+     }
+-fprintf (outfil, canned3);
++fprintf (outfil, "%s", canned3);
+ 
+ /*
+  * close the output file
+@@ -1251,8 +1251,8 @@ if ( outfil == (FILE *) NULL )
+     printf ("\nCouldn't open UilSymCtl.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned_warn);
++fprintf (outfil, "%s", canned1);
+ 
+ /*
+  * Generate the bit vectors for each class. Outer loop on the class code,
+@@ -1290,19 +1290,19 @@ for ( ctlndx=0 ; ctlndx<wml_obj_class_ptr->cnt ; ctlndx++ )
+     if ( itemno != 0 )
+ 	fprintf (outfil, "%s 0};\n", maskbuf);
+     else
+-	fprintf (outfil, "};\n");
++	fprintf (outfil, "%s", "};\n");
+     }
+ 
+ /*
+  * Write the vector of vectors.
+  */
+-fprintf (outfil, canned2);
++fprintf (outfil, "%s", canned2);
+ for ( ctlndx=0 ; ctlndx<wml_obj_class_ptr->cnt ; ctlndx++ )
+     {
+     clsobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ctlndx].objptr;
+     fprintf (outfil, "  object_class_vec%d,\n", clsobj->sym_code);
+     }
+-fprintf (outfil, canned3);
++fprintf (outfil, "%s", canned3);
+ 
+ /*
+  * close the output file
+@@ -1438,7 +1438,7 @@ if ( outfil == (FILE *) NULL )
+     printf ("\nCouldn't open UilSymNam.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
++fprintf (outfil, "%s", canned_warn);
+ 
+ /*
+  * Write entries for widgets
+@@ -1517,7 +1517,7 @@ for ( ndx=0 ; ndx<wml_obj_child_ptr->cnt ; ndx++ )
+     fprintf (outfil, "    \"%s\",\n",
+ 	     synch->name);
+     }
+-fprintf (outfil, canned7);
++fprintf (outfil, "%s", canned7);
+ 
+ /*
+  * close the output file
+@@ -1621,12 +1621,12 @@ if ( outfil == (FILE *) NULL )
+     printf ("\nCouldn't open UilSymEnum.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
++fprintf (outfil, "%s", canned_warn);
+ 
+ /*
+  * Generate the enumeration value vectors for each enumeration set.
+  */
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned1);
+ for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
+     {
+     enumsetobj = (WmlEnumSetDefPtr) wml_obj_enumset_ptr->hvec[ndx].objptr;
+@@ -1637,13 +1637,13 @@ for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
+ 	fprintf (outfil, "    %d,\n",
+ 		 evobj->sym_code);
+ 	}
+-    fprintf (outfil, "  };\n");
++    fprintf (outfil, "%s", "  };\n");
+     }
+ 
+ /*
+  * Generate the enumeration set tables
+  */
+-fprintf (outfil, canned3);
++fprintf (outfil, "%s", canned3);
+ for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
+     {
+     enumsetobj = (WmlEnumSetDefPtr) wml_obj_enumset_ptr->hvec[ndx].objptr;
+@@ -1655,7 +1655,7 @@ for ( ndx=0 ; ndx<wml_obj_enumset_ptr->cnt ; ndx++ )
+ /*
+  * Create enumset table entries for arguments, similar to writing sym_k...
+  */
+-fprintf (outfil, canned4);
++fprintf (outfil, "%s", canned4);
+ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
+     {
+     resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr;
+@@ -1669,13 +1669,13 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
+ /*
+  * Create the enumval values table.
+  */
+-fprintf (outfil, canned5);
++fprintf (outfil, "%s", canned5);
+ for ( ndx=0 ; ndx<wml_obj_enumval_ptr->cnt ; ndx++ )
+     {
+     evobj = (WmlEnumValueDefPtr) wml_obj_enumval_ptr->hvec[ndx].objptr;
+     fprintf (outfil, "  %s,\n", evobj->syndef->enumlit);
+     }
+-fprintf (outfil, canned5a);
++fprintf (outfil, "%s", canned5a);
+ 
+ /*
+  * close the output file
+@@ -1813,12 +1813,12 @@ if ( outfil == (FILE *) NULL )
+     printf ("\nCouldn't open UilSymCSet.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
++fprintf (outfil, "%s", canned_warn);
+ 
+ /*
+  * Generate the standards name table
+  */
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned1);
+ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
+     {
+     csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
+@@ -1836,7 +1836,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
+ /*
+  * Generate the writing direction table
+  */
+-fprintf (outfil, canned2);
++fprintf (outfil, "%s", canned2);
+ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
+     {
+     csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
+@@ -1858,7 +1858,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
+ /*
+  * Generate the parsing direction table
+  */
+-fprintf (outfil, canned3);
++fprintf (outfil, "%s", canned3);
+ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
+     {
+     csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
+@@ -1880,7 +1880,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
+ /*
+  * Generate the character size table
+  */
+-fprintf (outfil, canned4);
++fprintf (outfil, "%s", canned4);
+ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
+     {
+     csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
+@@ -1906,7 +1906,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
+ /*
+  * Generate the $LANG name recognition table
+  */
+-fprintf (outfil, canned5);
++fprintf (outfil, "%s", canned5);
+ lang_max = 0;
+ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
+     {
+@@ -1936,7 +1936,7 @@ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
+ /*
+  * Generate the $LANG code lookup table, in upper case
+  */
+-fprintf (outfil, canned6);
++fprintf (outfil, "%s", canned6);
+ for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
+     {
+     csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
+diff --git a/tools/wml/wmloutkey.c b/tools/wml/wmloutkey.c
+index af42f22..4c14728 100644
+--- a/tools/wml/wmloutkey.c
++++ b/tools/wml/wmloutkey.c
+@@ -574,16 +574,16 @@ if ( outfil == NULL )
+     printf ("\nCouldn't open UilKeyTab.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
++fprintf (outfil, "%s", canned_warn);
+ 
+ /*
+  * Print the case sensitive and insensitive tables
+  */
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned1);
+ wmlOutputUilKeyTabBody (outfil, wml_tok_sens_ptr, &maxlen, &maxkey);
+ fprintf (outfil, canned2, maxlen, maxkey);
+ wmlOutputUilKeyTabBody (outfil, wml_tok_insens_ptr, &maxlen, &maxkey);
+-fprintf (outfil, canned3);
++fprintf (outfil, "%s", canned3);
+ 
+ /*
+  * close the output file
+@@ -812,8 +812,8 @@ if ( outfil == NULL )
+     printf ("\nCouldn't open UilTokName.h");
+     return;
+     }
+-fprintf (outfil, canned_warn);
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned_warn);
++fprintf (outfil, "%s", canned1);
+ 
+ /*
+  * Print the token name entries
+diff --git a/tools/wml/wmloutmm.c b/tools/wml/wmloutmm.c
+index 84a97bb..dc8ec09 100644
+--- a/tools/wml/wmloutmm.c
++++ b/tools/wml/wmloutmm.c
+@@ -209,9 +209,9 @@ int			ctlndx;		/* to access ordered vector */
+ /*
+  * Write out header information
+  */
+-fprintf (outfil, canned1);
++fprintf (outfil, "%s", canned1);
+ fprintf (outfil, "%s\n", name);
+-fprintf (outfil, canned2);
++fprintf (outfil, "%s", canned2);
+ 
+ /*
+  * Alphabetize the controls, reason, and argument lists
+@@ -264,7 +264,7 @@ while ( ctlref != NULL )
+ rsnndx = 0;
+ ctlndx = 0;
+ if ( mm_ctl_ptr->cnt == 0 )
+-    fprintf (outfil, "No children are supported");
++    fprintf (outfil, "%s", "No children are supported");
+ while ( rsnndx<mm_rsn_ptr->cnt || ctlndx<mm_ctl_ptr->cnt )
+     {
+     if ( ctlndx < mm_ctl_ptr->cnt )
+@@ -275,7 +275,7 @@ while ( rsnndx<mm_rsn_ptr->cnt || ctlndx<mm_ctl_ptr->cnt )
+ 	ctlndx += 1;
+ 	}
+     else
+-	fprintf (outfil, "@");
++	fprintf (outfil, "%s", "@");
+     
+     if ( rsnndx < mm_rsn_ptr->cnt )
+ 	{
+@@ -285,9 +285,9 @@ while ( rsnndx<mm_rsn_ptr->cnt || ctlndx<mm_ctl_ptr->cnt )
+ 	rsnndx += 1;
+ 	}
+     else
+-	fprintf (outfil, "\n");
++	fprintf (outfil, "%s", "\n");
+     }
+-fprintf (outfil, canned3);
++fprintf (outfil, "%s", canned3);
+ 
+ /*
+  * Write out the argument table
+@@ -319,11 +319,11 @@ while ( argndx < mm_arg_ptr->cnt )
+ 			 argref->act_resource->syndef->dflt);
+ 	}
+ 	else
+-	    fprintf (outfil, "  \n");
++	    fprintf (outfil, "%s", "  \n");
+     }    
+     argndx += 1;
+     }
+-fprintf (outfil, canned4);
++fprintf (outfil, "%s", canned4);
+ 
+ }
+ 
+diff --git a/tools/wml/wmlresolve.c b/tools/wml/wmlresolve.c
+index 464ef29..3b8642c 100644
+--- a/tools/wml/wmlresolve.c
++++ b/tools/wml/wmlresolve.c
+@@ -1340,7 +1340,7 @@ for ( ndx=0 ; ndx<wml_obj_allclass_ptr->cnt ; ndx++ )
+ /*
+  * close the output file
+  */
+-fprintf (outfil, "\n\n");
++fprintf (outfil, "%s", "\n\n");
+ printf ("\nCreated report file wml.report");
+ fclose (outfil);
+ 
+@@ -1369,14 +1369,14 @@ fprintf (outfil, "\n\n\nClass %s:", synobj->name);
+ switch ( synobj->type )
+     {
+     case WmlClassTypeMetaclass:
+-        fprintf (outfil, "\n  Type: Metaclass\t");
++        fprintf (outfil, "%s", "\n  Type: Metaclass\t");
+ 	if ( synobj->superclass != NULL )
+ 	    fprintf (outfil, "Superclass: %s\t", synobj->superclass);
+ 	if ( synobj->parentclass != NULL )
+ 	    fprintf (outfil, "Parentclass: %s\t", synobj->parentclass);
+ 	break;
+     case WmlClassTypeWidget:
+-	fprintf (outfil, "\n  Type: Widget\t");
++	fprintf (outfil, "%s", "\n  Type: Widget\t");
+ 	if ( synobj->superclass != NULL )
+ 	    fprintf (outfil, "Superclass: %s\t", synobj->superclass);
+ 	if ( synobj->parentclass != NULL )
+@@ -1388,7 +1388,7 @@ switch ( synobj->type )
+ 	    fprintf (outfil, "Convenience function: %s", synobj->convfunc);
+ 	break;
+     case WmlClassTypeGadget:
+-	fprintf (outfil, "\n  Type: Gadget\t");
++	fprintf (outfil, "%s", "\n  Type: Gadget\t");
+ 	if ( synobj->superclass != NULL )
+ 	    fprintf (outfil, "Superclass: %s\t", synobj->superclass);
+ 	if ( synobj->parentclass != NULL )
+@@ -1414,19 +1414,19 @@ if ( clsobj->nondialog != NULL )
+  * is intended to match the way resources are printed in the toolkit manual,
+  * so that checking is as easy as possible.
+  */
+-fprintf (outfil, "\n  Arguments:");
++fprintf (outfil, "%s", "\n  Arguments:");
+ wmlResolvePrintClassArgs (outfil, clsobj);
+ 
+ /*
+  * Print the reasons valid in the class
+  */
+-fprintf (outfil, "\n  Reasons:");
++fprintf (outfil, "%s", "\n  Reasons:");
+ wmlResolvePrintClassReasons (outfil, clsobj);
+ 
+ /*
+  * Print the controls valid in the class
+  */
+-fprintf (outfil, "\n  Controls:");
++fprintf (outfil, "%s", "\n  Controls:");
+ for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
+     {
+     ctrlobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ndx].objptr;
+@@ -1512,10 +1512,10 @@ for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
+     switch ( resref->exclude )
+ 	{
+ 	case WmlAttributeTrue:
+-	    fprintf (outfil, "\n\tExclude = True;");
++	    fprintf (outfil, "%s", "\n\tExclude = True;");
+ 	    break;
+ 	case WmlAttributeFalse:
+-	    fprintf (outfil, "\n\tExclude = False;");
++	    fprintf (outfil, "%s", "\n\tExclude = False;");
+ 	    break;
+ 	}
+     if ( resref->dflt != NULL )
+@@ -1558,10 +1558,10 @@ if ( constr )
+ 	switch ( resref->exclude )
+ 	    {
+ 	    case WmlAttributeTrue:
+-	        fprintf (outfil, "\n\tExclude = True;");
++	        fprintf (outfil, "%s", "\n\tExclude = True;");
+ 		break;
+ 	    case WmlAttributeFalse:
+-		fprintf (outfil, "\n\tExclude = False;");
++		fprintf (outfil, "%s", "\n\tExclude = False;");
+ 		break;
+ 	    }
+ 	if ( resref->dflt != NULL )
+@@ -1632,10 +1632,10 @@ for ( ndx=0 ; ndx<wml_obj_reason_ptr->cnt ; ndx++ )
+     switch ( resref->exclude )
+ 	{
+ 	case WmlAttributeTrue:
+-	    fprintf (outfil, "\n\tExclude = True;");
++	    fprintf (outfil, "%s", "\n\tExclude = True;");
+ 	    break;
+ 	case WmlAttributeFalse:
+-	    fprintf (outfil, "\n\tExclude = False;");
++	    fprintf (outfil, "%s", "\n\tExclude = False;");
+ 	    break;
+ 	}
+     resobj->ref_ptr = NULL;
+-- 
+2.13.0
+
diff --git a/SOURCES/motif-2.3.4-bindings.patch b/SOURCES/motif-2.3.4-bindings.patch
new file mode 100644
index 0000000..baaa573
--- /dev/null
+++ b/SOURCES/motif-2.3.4-bindings.patch
@@ -0,0 +1,36 @@
+diff -up openmotif-2.3.3/configure.ac.bindings openmotif-2.3.3/configure.ac
+--- openmotif-2.3.3/configure.ac.bindings	2009-10-27 17:10:23.000000000 +0100
++++ openmotif-2.3.3/configure.ac	2010-03-19 11:12:39.000000000 +0100
+@@ -185,7 +185,7 @@ AC_SUBST(MWMRCDIR)
+ INCDIR="${includedir}/X11"
+ AC_SUBST(INCDIR)
+ 
+-XMBINDDIR_FALLBACK="${libdir}/X11/bindings"
++XMBINDDIR_FALLBACK="${datadir}/X11/bindings"
+ AC_SUBST(XMBINDDIR_FALLBACK)
+ 
+ RM="rm -f"
+diff -up openmotif-2.3.3/doc/man/man3/VirtualBindings.3.bindings openmotif-2.3.3/doc/man/man3/VirtualBindings.3
+--- openmotif-2.3.3/doc/man/man3/VirtualBindings.3.bindings	2005-07-20 13:47:21.000000000 +0200
++++ openmotif-2.3.3/doc/man/man3/VirtualBindings.3	2010-03-19 11:11:42.000000000 +0100
+@@ -90,7 +90,7 @@ bindings contained in that file\&.
+ If it has found no bindings, Motif next looks for the file
+ \fBxmbind\&.alias\fP in the directory specified by the environment
+ variable \fBXMBINDDIR\fP, if \fBXMBINDDIR\fP is set, or in the directory
+-\fB/usr/lib/Xm/bindings\fP if \fBXMBINDDIR\fP is not set\&.
++\fB/usr/share/X11/bindings\fP if \fBXMBINDDIR\fP is not set\&.
+ If this file exists Motif searches it for a pathname associated with the
+ vendor string or with the vendor string and vendor release\&.
+ If it finds such a pathname and if that file exists, Motif loads the
+diff -up openmotif-2.3.3/lib/Xm/XmosP.h.bindings openmotif-2.3.3/lib/Xm/XmosP.h
+--- openmotif-2.3.3/lib/Xm/XmosP.h.bindings	2002-06-17 22:36:30.000000000 +0200
++++ openmotif-2.3.3/lib/Xm/XmosP.h	2010-03-19 11:11:42.000000000 +0100
+@@ -188,7 +188,7 @@ extern "C" {
+ 
+ #define XMBINDDIR "XMBINDDIR"
+ #ifndef XMBINDDIR_FALLBACK
+-#define XMBINDDIR_FALLBACK "/usr/lib/Xm/bindings"
++#define XMBINDDIR_FALLBACK "/usr/share/X11/bindings"
+ #endif
+ #define XMBINDFILE "xmbind.alias"
+ #define MOTIFBIND ".motifbind"
diff --git a/SOURCES/motif-2.3.4-motifzone_1564-88bdce1.patch b/SOURCES/motif-2.3.4-motifzone_1564-88bdce1.patch
new file mode 100644
index 0000000..c2f533a
--- /dev/null
+++ b/SOURCES/motif-2.3.4-motifzone_1564-88bdce1.patch
@@ -0,0 +1,449 @@
+commit 88bdce139baf89839b6e13d698576fc56211e845
+Author: Oleksiy Chernyavskyy <ochern@ics.com>
+Date:   Wed Mar 16 00:46:49 2016 +0200
+
+    Reimplemented bugfix 1565
+    
+    Signed-off-by: Oleksiy Chernyavskyy <ochern@ics.com>
+
+diff --git a/lib/Xm/ComboBox.c b/lib/Xm/ComboBox.c
+index 1472e45..cf507da 100644
+--- a/lib/Xm/ComboBox.c
++++ b/lib/Xm/ComboBox.c
+@@ -3164,6 +3164,9 @@ CreatePulldown(Widget    parent,
+   Arg      args[4];
+   ArgList  merged_args;
+   Cardinal n;
++#ifdef FIX_1565
++  XmGrabShellWidget grabsh;
++#endif
+ 
+   n = 0;
+   XtSetArg(args[n], XmNlayoutDirection, LayoutM(parent)), n++;
+@@ -3175,6 +3178,11 @@ CreatePulldown(Widget    parent,
+ 			     merged_args, n + *num_args);
+   XtFree((char*)merged_args);
+ 
++#ifdef FIX_1565
++  grabsh = (XmGrabShellWidget) shell;
++  grabsh->grab_shell.set_input_focus = False;
++#endif
++
+   return shell;
+ }
+ 
+diff --git a/lib/Xm/DropDown.c b/lib/Xm/DropDown.c
+index 37fec03..5cd15ca 100644
+--- a/lib/Xm/DropDown.c
++++ b/lib/Xm/DropDown.c
+@@ -2027,6 +2027,9 @@ CreatePopup(Widget w, ArgList args, Cardinal num_args)
+     Arg *new_list, largs[10];
+     Cardinal num_largs;
+     Widget sb;
++#ifdef FIX_1565
++    XmGrabShellWidget grabsh;
++#endif
+ 
+     num_largs = 0;
+     XtSetArg(largs[num_largs], XmNoverrideRedirect, True); num_largs++;
+@@ -2040,6 +2043,10 @@ CreatePopup(Widget w, ArgList args, Cardinal num_args)
+ 						xmGrabShellWidgetClass, w,
+ 						new_list,
+ 						num_largs + num_args);
++#ifdef FIX_1565
++    grabsh = (XmGrabShellWidget) XmDropDown_popup_shell(cbw);
++    grabsh->grab_shell.set_input_focus = False;
++#endif
+     XtFree((char *) new_list);
+ 
+ #ifdef FIX_1446
+diff --git a/lib/Xm/GrabShell.c b/lib/Xm/GrabShell.c
+index 88f3154..af13e0b 100644
+--- a/lib/Xm/GrabShell.c
++++ b/lib/Xm/GrabShell.c
+@@ -283,6 +283,10 @@ Initialize(Widget req,		/* unused */
+ 
+   /* CR 9920:  Popdown may be requested before MapNotify. */
+   grabsh->grab_shell.mapped = False;
++
++#ifdef FIX_1565
++  grabsh->grab_shell.set_input_focus = True;
++#endif
+ }
+ 
+ /*
+@@ -395,8 +399,16 @@ MapNotifyHandler(Widget shell, XtPointer client_data,
+   XGetInputFocus(XtDisplay(shell), &grabshell->grab_shell.old_focus,
+ 		 &grabshell->grab_shell.old_revert_to);
+   old_handler = XSetErrorHandler(IgnoreXErrors);
+-  XSetInputFocus(XtDisplay(shell), XtWindow(shell), RevertToParent, time);
+-  XSync(XtDisplay(shell), False);
++#ifdef FIX_1565
++  if (! grabshell->grab_shell.set_input_focus) {
++    XmForceGrabKeyboard(shell, time);
++  } else {
++#endif
++    XSetInputFocus(XtDisplay(shell), XtWindow(shell), RevertToParent, time);
++    XSync(XtDisplay(shell), False);
++#ifdef FIX_1565
++  }
++#endif
+   XSetErrorHandler(old_handler);
+ }
+ 
+diff --git a/lib/Xm/GrabShellP.h b/lib/Xm/GrabShellP.h
+index 92fe508..025f001 100644
+--- a/lib/Xm/GrabShellP.h
++++ b/lib/Xm/GrabShellP.h
+@@ -30,6 +30,7 @@
+ #include <Xm/GrabShell.h>
+ #include <Xm/XmP.h>
+ #include <X11/ShellP.h>
++#include "XmI.h"
+ 
+ #ifdef __cplusplus
+ extern "C" {
+@@ -55,6 +56,9 @@ typedef struct
+   Boolean	mapped;
+   Window	old_focus;
+   int		old_revert_to;
++#ifdef FIX_1565
++  Boolean	set_input_focus;
++#endif
+ } XmGrabShellPart;
+ 
+ 
+diff --git a/lib/Xm/MenuShell.c b/lib/Xm/MenuShell.c
+index 2ed3dd8..9887087 100644
+--- a/lib/Xm/MenuShell.c
++++ b/lib/Xm/MenuShell.c
+@@ -1514,9 +1514,7 @@ ChangeManaged(
+ 
+ 	       /** the real grab ***/
+          _XmMenuGrabKeyboardAndPointer((Widget)rowcol, _time);
+-#ifndef FIX_1565
+ 	 _XmMenuFocus(XtParent(rowcol), XmMENU_BEGIN, _time);
+-#endif
+ 
+ 	 /* To support menu replay, keep the pointer in sync mode */
+ 	 XAllowEvents(XtDisplay(rowcol), SyncPointer, CurrentTime);
+diff --git a/lib/Xm/MenuUtil.c b/lib/Xm/MenuUtil.c
+index 1d88390..2fb6a27 100644
+--- a/lib/Xm/MenuUtil.c
++++ b/lib/Xm/MenuUtil.c
+@@ -1053,11 +1053,7 @@ _XmMenuGrabKeyboardAndPointer(
+ 
+    register int status =
+            (_XmGrabKeyboard(widget,
+-#ifdef FIX_1565
+-                            False,
+-#else
+                             True,
+-#endif
+                             GrabModeSync,
+                             GrabModeAsync,
+                             time) != GrabSuccess);
+diff --git a/lib/Xm/RCMenu.c b/lib/Xm/RCMenu.c
+index 2c698d4..8b156da 100644
+--- a/lib/Xm/RCMenu.c
++++ b/lib/Xm/RCMenu.c
+@@ -85,6 +85,9 @@ static char *rcsid = "$TOG: RCMenu.c /main/25 1999/05/24 18:06:57 samborn $";
+ #include "TraversalI.h"
+ #include "UniqueEvnI.h"
+ #include "VendorSI.h"
++#ifdef FIX_1565
++#include <Xm/GrabShell.h>
++#endif
+ 
+ #define FIX_1535
+ 
+@@ -943,6 +946,13 @@ _XmMenuFocus(
+    XmMenuState mst = _XmGetMenuState((Widget)w);
+    Window tmpWindow;
+    int tmpRevert;
++#ifdef FIX_1565
++   Widget shell;
++
++   shell = w;
++   while (! XtIsSubclass(shell, shellWidgetClass))
++     shell = XtParent(shell);
++#endif
+  
+    if (_time == CurrentTime) 
+      _time = XtLastTimestampProcessed(XtDisplay(w));
+@@ -983,6 +993,11 @@ _XmMenuFocus(
+ 			  shell.popped_up))
+ **/
+ 		     {
++#ifdef FIX_1565
++               if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
++                 XmForceGrabKeyboard(w, _time);
++               else
++#endif
+ 		       SetInputFocus(XtDisplay(w), mst->RC_menuFocus.oldFocus,
+ 				     mst->RC_menuFocus.oldRevert,
+ 				     mst->RC_menuFocus.oldTime);
+@@ -996,6 +1011,11 @@ _XmMenuFocus(
+  	      */
+  	     else
+  	       {
++#ifdef FIX_1565
++               if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
++                 XmForceGrabKeyboard(w, _time);
++               else
++#endif
+  		  SetInputFocus(XtDisplay(w), mst->RC_menuFocus.oldFocus,
+ 				mst->RC_menuFocus.oldRevert,
+ 				mst->RC_menuFocus.oldTime);
+@@ -1014,6 +1034,11 @@ _XmMenuFocus(
+ 	     RC_menuFocus.oldFocus);
+ 	  mst->RC_menuFocus.oldTime = _time - 1;
+ 
++#ifdef FIX_1565
++      if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
++        XmForceGrabKeyboard(w, _time);
++      else
++#endif
+ 	  SetInputFocus(XtDisplay(w), XtWindow(w), mst->RC_menuFocus.oldRevert,
+ 			mst->RC_menuFocus.oldTime);
+ 
+@@ -1027,6 +1052,11 @@ _XmMenuFocus(
+ 	  XGetInputFocus(XtDisplay(w), &tmpWindow, &tmpRevert);
+ 	  if (tmpWindow != XtWindow(w))
+ 	  {
++#ifdef FIX_1565
++        if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
++          XmForceGrabKeyboard(w, _time);
++        else
++#endif
+ 	    SetInputFocus(XtDisplay(w), XtWindow(w), tmpRevert, _time);
+ 
+ 	    mst->RC_menuFocus.oldRevert = tmpRevert;
+@@ -1048,6 +1078,11 @@ _XmMenuFocus(
+ 
+ 	  break;
+ 	case XmMENU_MIDDLE:
++#ifdef FIX_1565
++      if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
++        XmForceGrabKeyboard(w, _time);
++      else
++#endif
+ 	  SetInputFocus(XtDisplay(w), XtWindow(w),
+ 			mst->RC_menuFocus.oldRevert,
+ 			mst->RC_menuFocus.oldTime);
+@@ -1062,6 +1097,11 @@ _XmMenuFocus(
+ 	  if ((tmpWindow != XtWindow(w)) &&
+ 	      (_time > mst->RC_menuFocus.oldTime))
+ 	  {
++#ifdef FIX_1565
++        if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
++          XmForceGrabKeyboard(w, _time);
++        else
++#endif
+ 	    SetInputFocus(XtDisplay(w), XtWindow(w), tmpRevert, _time);
+ 
+ 	    mst->RC_menuFocus.oldRevert = tmpRevert;
+diff --git a/lib/Xm/Xm.c b/lib/Xm/Xm.c
+index 3dfd794..45d48b6 100644
+--- a/lib/Xm/Xm.c
++++ b/lib/Xm/Xm.c
+@@ -40,6 +40,10 @@
+ #ifdef FIX_345
+ #include <X11/keysym.h>
+ #endif
++#ifdef FIX_1565
++#include <Xm/GrabShell.h>
++#include <Xm/MenuShell.h>
++#endif
+ 
+ 
+ /**************************************************************************
+@@ -530,3 +534,173 @@ _XmAssignInsensitiveColor(Widget w)
+ 	return p;
+ }
+ #endif
++
++#ifdef FIX_1565
++
++typedef struct _GrabData GrabData;
++struct _GrabData {
++  Widget w;
++  GrabData *next;
++};
++
++static void _XmSendFocusEvent(Widget child, int type);
++static void _XmStartDispatcher(Display *display);
++static Boolean _XmEventDispatcher(XEvent *event);
++static void UnmapHandler(Widget w, XtPointer client_data, XEvent *event, Boolean *cont);
++static Boolean _UngrabKeyboard(Widget w);
++
++static GrabData *grabw_top = NULL;
++static int xm_dispatcher_on = 0;
++static XtEventDispatchProc saved_dispatcher_proc = NULL;
++static XtEventDispatchProc xt_dispatcher_proc = NULL;
++
++/*
++   XmForceGrabKeyboard function is defined to be a substitutor of XSetInputFocus calls
++   for popup and pulldown menus that should grab keyboard focus yet main window at the
++   same time should visually stay in focus for window manager. This resolves focus flip
++   issue when popup or pulldown menu is raised. ~ochern
++ */
++void XmForceGrabKeyboard(Widget w, Time time)
++{
++  GrabData *grabw;
++
++  if (!w)
++    return;
++
++  while (! XtIsSubclass(w, shellWidgetClass))
++    w = XtParent(w);
++
++  if (! (XtIsSubclass(w, xmGrabShellWidgetClass) || XtIsSubclass(w, xmMenuShellWidgetClass)))
++    return;
++
++  _XmStartDispatcher(XtDisplay(w));
++
++  _UngrabKeyboard(w);
++
++  grabw = (GrabData *) XtMalloc(sizeof(GrabData));
++  grabw->w = w;
++  _XmProcessLock();
++  grabw->next = grabw_top;
++  grabw_top = grabw;
++  _XmProcessUnlock();
++
++  XtInsertEventHandler(w, StructureNotifyMask, False, UnmapHandler, NULL, XtListHead);
++
++  _XmSendFocusEvent(w, FocusIn);
++
++  /* Following the XSetInputFocus behaviour we force sending FocusOut (see XGrabKeyboard(3))
++     event to a previous keyboard holder */
++  XtGrabKeyboard(w, True, GrabModeAsync, GrabModeAsync, time);
++}
++
++static void _XmStartDispatcher(Display *display)
++{
++  if (!display)
++    return;
++
++  _XmProcessLock();
++
++  if (xm_dispatcher_on) {
++    _XmProcessUnlock();
++    return;
++  }
++
++  saved_dispatcher_proc = XtSetEventDispatcher(display, KeyPress, _XmEventDispatcher);
++  if (! xt_dispatcher_proc)
++    xt_dispatcher_proc = saved_dispatcher_proc;
++  XtSetEventDispatcher(display, KeyRelease, _XmEventDispatcher);
++  xm_dispatcher_on = 1;
++
++  _XmProcessUnlock();
++}
++
++static Boolean _XmEventDispatcher(XEvent *event)
++{
++  _XmProcessLock();
++  if (grabw_top) {
++    if (event->type == KeyPress || event->type == KeyRelease)
++      event->xany.window = XtWindow(grabw_top->w);
++  }
++  _XmProcessUnlock();
++
++  if (saved_dispatcher_proc) {
++    return (*saved_dispatcher_proc)(event);
++  } else if (xt_dispatcher_proc) {
++    return (*xt_dispatcher_proc)(event);
++  } else {
++    if (grabw_top)
++      XtSetEventDispatcher(XtDisplay(grabw_top->w), event->type, NULL);
++    return XtDispatchEvent(event);
++  }
++}
++
++static void UnmapHandler(Widget w, XtPointer client_data, XEvent *event, Boolean *cont)
++{
++  if (event->type == UnmapNotify)
++    _UngrabKeyboard(w);
++  if (! grabw_top) {
++    XtSetEventDispatcher(XtDisplay(w), KeyPress, saved_dispatcher_proc);
++    XtSetEventDispatcher(XtDisplay(w), KeyRelease, saved_dispatcher_proc);
++    xm_dispatcher_on = 0;
++  }
++
++  /* we do not call XtUngrabKeyboard since X server automatically performs an
++     UngrabKeyboard request if the event window for an active keyboard grab becomes
++     not viewable. ~ochern */
++}
++
++static Boolean _UngrabKeyboard(Widget w)
++{
++  GrabData *grabw, *grabw_prev;
++
++  _XmProcessLock();
++  if (! grabw_top) {
++    _XmProcessUnlock();
++    return False;
++  }
++
++  grabw = grabw_top;
++  grabw_prev = NULL;
++  while(grabw && grabw->w != w) {
++    grabw_prev = grabw;
++    grabw = grabw->next;
++  }
++  if (grabw) {
++    if (grabw_prev)
++      grabw_prev->next = grabw->next;
++    else
++      grabw_top = grabw->next;
++    XtFree((char*) grabw);
++
++    _XmProcessUnlock();
++    return True;
++  }
++
++  _XmProcessUnlock();
++  return False;
++}
++
++static void _XmSendFocusEvent(Widget child, int type)
++{
++  child = XtIsWidget(child) ? child : _XtWindowedAncestor(child);
++  if (XtIsSensitive(child) && !child->core.being_destroyed
++      && XtIsRealized(child) && (XtBuildEventMask(child) & FocusChangeMask))
++  {
++    XFocusChangeEvent event;
++    Display* dpy = XtDisplay (child);
++
++    event.type = type;
++    event.serial = LastKnownRequestProcessed(dpy);
++    event.send_event = True;
++    event.display = dpy;
++    event.window = XtWindow(child);
++    event.mode = NotifyNormal;
++    event.detail = NotifyAncestor;
++    if (XFilterEvent((XEvent*)&event, XtWindow(child)))
++      return;
++    XtDispatchEventToWidget(child, (XEvent*)&event);
++  }
++}
++
++#endif
++
+diff --git a/lib/Xm/XmI.h b/lib/Xm/XmI.h
+index b4420d3..c2b819e 100644
+--- a/lib/Xm/XmI.h
++++ b/lib/Xm/XmI.h
+@@ -242,7 +242,9 @@ extern Boolean _XmIsISO10646(Display *dpy,
+ extern XChar2b* _XmUtf8ToUcs2(char *draw_text,
+                               size_t seg_len,
+ 			      size_t *ret_str_len);
+-
++#ifdef FIX_1565
++extern void XmForceGrabKeyboard(Widget w, Time time);
++#endif
+ 
+ /********    End Private Function Declarations    ********/
+ 
diff --git a/SOURCES/motif-2.3.4-mwmrc_dir.patch b/SOURCES/motif-2.3.4-mwmrc_dir.patch
new file mode 100644
index 0000000..e6a42dc
--- /dev/null
+++ b/SOURCES/motif-2.3.4-mwmrc_dir.patch
@@ -0,0 +1,93 @@
+diff -up openmotif-2.3.3/clients/mwm/WmResParse.c.mwmrc_dir openmotif-2.3.3/clients/mwm/WmResParse.c
+--- openmotif-2.3.3/clients/mwm/WmResParse.c.mwmrc_dir	2009-06-22 23:51:51.000000000 +0200
++++ openmotif-2.3.3/clients/mwm/WmResParse.c	2010-03-23 13:37:03.000000000 +0100
+@@ -2403,7 +2403,7 @@ FILE *FopenConfigFile (void)
+ #endif /* PANELIST */
+ 
+ #ifndef MWMRCDIR
+-#define MWMRCDIR "/usr/lib/X11"
++#define MWMRCDIR "/etc/X11/mwm"
+ #endif
+     if (LANG != NULL)
+     {
+diff -up openmotif-2.3.3/configure.ac.mwmrc_dir openmotif-2.3.3/configure.ac
+--- openmotif-2.3.3/configure.ac.mwmrc_dir	2009-10-27 17:10:23.000000000 +0100
++++ openmotif-2.3.3/configure.ac	2010-03-23 13:38:33.000000000 +0100
+@@ -179,7 +179,7 @@ AC_SUBST(CDE_CONFIGURATION_TOP)
+ LIBDIR="${libdir}/X11"
+ AC_SUBST(LIBDIR)
+ 
+-MWMRCDIR="${libdir}/X11"
++MWMRCDIR="/etc/X11/mwm"
+ AC_SUBST(MWMRCDIR)
+ 
+ INCDIR="${includedir}/X11"
+diff -up openmotif-2.3.3/doc/man/man1/mwm.1.mwmrc_dir openmotif-2.3.3/doc/man/man1/mwm.1
+--- openmotif-2.3.3/doc/man/man1/mwm.1.mwmrc_dir	2002-01-05 16:21:11.000000000 +0100
++++ openmotif-2.3.3/doc/man/man1/mwm.1	2010-03-23 13:37:03.000000000 +0100
+@@ -678,8 +678,8 @@ is set, \fBmwm\fP looks for \fI$HOME/$LA
+ \fB$HOME\fP/\fBconfigFile\fP\&. If the \fIconfigFile\fP pathname does not begin with "~/" or "/", \fBmwm\fP considers it to be relative to the current working directory\&. If
+ the \fIconfigFile\fP resource is not specified
+ or if that file does not exist, \fBmwm\fP uses several default
+-paths to find a configuration file\&. The order of the search is shown below: \fB/usr/X11R6/lib/X11/$LANG/system\&.mwmrc\fP\(dg
+-\fB/usr/X11R6/lib/X11/system\&.mwmrc\fP\(dg Paths marked with \&'\(dg\&' are
++paths to find a configuration file\&. The order of the search is shown below: \fB/etc/X11/mwm/$LANG/system\&.mwmrc\fP\(dg
++\fB/etc/X11/mwm/system\&.mwmrc\fP\(dg Paths marked with \&'\(dg\&' are
+ implementation dependent\&.
+ .IP "\fIdeiconifyKeyFocus\fP\ (class\  \fIDeiconifyKeyFocus\fP)" 10
+ This resource applies only when the keyboard input focus policy is explicit\&.
+@@ -1344,9 +1344,9 @@ the shell to use when executing commands
+ function\&.
+ .SS "Files"
+ .PP
+-\fB/usr/X11R6/lib/X11/$LANG/system\&.mwmrc\fP
++\fB/etc/X11/mwm/$LANG/system\&.mwmrc\fP
+ .PP
+-\fB/usr/X11R6/lib/X11/system\&.mwmrc\fP
++\fB/etc/X11/mwm/system\&.mwmrc\fP
+ .PP
+ \fB/usr/X11R6/lib/X11/app-defaults/Mwm\fP
+ .PP
+diff -up openmotif-2.3.3/doc/man/man4/mwmrc.4.mwmrc_dir openmotif-2.3.3/doc/man/man4/mwmrc.4
+--- openmotif-2.3.3/doc/man/man4/mwmrc.4.mwmrc_dir	2002-01-05 16:21:12.000000000 +0100
++++ openmotif-2.3.3/doc/man/man4/mwmrc.4	2010-03-23 13:37:03.000000000 +0100
+@@ -57,7 +57,7 @@ file that controls much of the behavior 
+ It contains descriptions of resources that cannot easily be
+ written using standard X Window System, Version 11 resource syntax\&. The resource
+ description file contains entries that are referred to by X resources in
+-defaults files (for example, \fB/usr/X11R6/lib/X11/app-defaults/Mwm\fP)
++defaults files (for example, \fB/usr/share/X11/app-defaults/Mwm\fP)
+ or in the \fBRESOURCE_MANAGER\fP property on the
+ root window\&. For example, the resource description file enables you to specify
+ different types of window menus; however, an X resource is used to specify
+@@ -72,8 +72,8 @@ on a per-user basis:
+ .nf
+ \f(CW$HOME/$LANG/\&.mwmrc
+ $HOME/\&.mwmrc
+-/usr/X11R6/lib/X11/$LANG/system\&.mwmrc
+-/usr/X11R6/lib/X11/system\&.mwmrc\fR
++/etc/X11/mwm/$LANG/system\&.mwmrc
++/etc/X11/mwm/system\&.mwmrc\fR
+ .fi
+ .PP
+ .PP
+@@ -84,7 +84,7 @@ resource\&. The following shows how a di
+ be specified from the command line:
+ .PP
+ .nf
+-\f(CW/usr/X11R6/bin/X11/mwm -xrm "mwm*configFile: mymwmrc"\fR
++\f(CW/usr/bin/mwm -xrm "mwm*configFile: mymwmrc"\fR
+ .fi
+ .PP
+ .SS "Resource Types"
+@@ -626,8 +626,8 @@ is not what you expect\&.
+ .nf
+ \fB$HOME/$LANG/\&.mwmrc
+ $HOME/\&.mwmrc
+-/usr/X11R6/lib/X11/$LANG/system\&.mwmrc
+-/usr/X11R6/lib/X11/system\&.mwmrc\fP
++/etc/X11/mwm/$LANG/system\&.mwmrc
++/etc/X11/mwm/system\&.mwmrc\fP
+ .fi
+ .SH "RELATED INFORMATION"
+ .PP
diff --git a/SOURCES/motif-2.3.4-no_demos.patch b/SOURCES/motif-2.3.4-no_demos.patch
new file mode 100644
index 0000000..bf1b926
--- /dev/null
+++ b/SOURCES/motif-2.3.4-no_demos.patch
@@ -0,0 +1,13 @@
+diff -up openmotif-2.3.3/Makefile.am.no_demos openmotif-2.3.3/Makefile.am
+--- openmotif-2.3.3/Makefile.am.no_demos	2008-09-19 16:38:05.000000000 +0200
++++ openmotif-2.3.3/Makefile.am	2010-03-23 13:53:13.000000000 +0100
+@@ -29,7 +29,7 @@ SUBDIRS	= bindings bitmaps \
+              include \
+              tools \
+              clients \
+-             doc \
+-             demos
++             doc
++
+ AUTOMAKE_OPTIONS = 1.4
+ ACLOCAL_AMFLAGS = -I .
diff --git a/SOURCES/motif-2.3.5-motifzone_1654.patch b/SOURCES/motif-2.3.5-motifzone_1654.patch
new file mode 100644
index 0000000..2d5a21e
--- /dev/null
+++ b/SOURCES/motif-2.3.5-motifzone_1654.patch
@@ -0,0 +1,39 @@
+commit 33e0b7fd58ec8ce9fd23d3a66a91e9b4b7c2b928
+Author: Oleksiy Chernyavskyy <ochern@ics.com>
+Date:   Fri Jun 10 23:15:00 2016 +0300
+
+    bug 1654 fix
+
+diff --git a/lib/Xm/LabelG.c b/lib/Xm/LabelG.c
+index b674041..726b095 100644
+--- a/lib/Xm/LabelG.c
++++ b/lib/Xm/LabelG.c
+@@ -35,6 +35,7 @@ static char rcsid[] = "$TOG: LabelG.c /main/24 1999/01/26 15:31:18 mgreess $"
+ #include <config.h>
+ #endif
+ #define FIX_1517
++#define FIX_1654
+ 
+ #include <string.h>
+ #include <stdio.h>
+@@ -2352,12 +2353,20 @@ LRectangle *background_box)
+     if (LabG_StringRect(lw).width < availW - marginal_width)
+     	width = LabG_StringRect(lw).width;
+     else
++#ifdef FIX_1654
++    	width = availW - marginal_width;
++#else
+     	width = availW - marginal_width - x;
++#endif
+ 
+     if (LabG_StringRect(lw).height < availH - marginal_height)
+     	height = LabG_StringRect(lw).height;
+     else
++#ifdef FIX_1654
++    	height = availH - marginal_height;
++#else
+     	height = availH - marginal_height - y;
++#endif
+     
+     XFillRectangle(XtDisplay(lw), XtWindow(lw), LabG_BackgroundGC(lw),
+ 		x, y, width, height);
diff --git a/SOURCES/motifzone_1612.patch b/SOURCES/motifzone_1612.patch
new file mode 100644
index 0000000..bdea0ef
--- /dev/null
+++ b/SOURCES/motifzone_1612.patch
@@ -0,0 +1,104 @@
+From 6aff3a819cb69235594124d7b252d1ee8c04f2b0 Mon Sep 17 00:00:00 2001
+From: Mykola Vshyvkov <mvshyvk@softserveinc.com>
+Date: Wed, 21 Aug 2013 11:49:00 +0300
+Subject: [PATCH] Fixed bug #1612 (Label size computed wrong within a Form).
+
+---
+ lib/Xm/Form.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 56 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Xm/Form.c b/lib/Xm/Form.c
+index 74140af8..b95a7b1a 100644
+--- a/lib/Xm/Form.c
++++ b/lib/Xm/Form.c
+@@ -50,6 +50,7 @@ static char rcsid[] = "$TOG: Form.c /main/19 1998/03/25 12:24:56 csn $"
+ #include "GMUtilsI.h"
+ 
+ #define FIX_1299
++#define FIX_1612
+ 
+ #define MESSAGE1	_XmMMsgForm_0000
+ #define MESSAGE5	_XmMMsgForm_0002
+@@ -285,6 +286,12 @@ static int GetFormOffset(
+                         XmFormWidget fw,
+                         int which,
+                         XmFormAttachment a) ;
++#ifdef FIX_1612                        
++static Boolean IsWidgetAttachedOneHorizontalSide(
++                        Widget w);
++static Boolean IsWidgetAttachedOneVerticalSide(
++                        Widget w);
++#endif
+ 
+ /********    End Static Function Declarations    ********/
+ 
+@@ -1083,13 +1090,21 @@ GeometryManager(
+ 	    } else {
+ 		/* the size the Form wants for the kid request is bigger than 
+ 		   its current or proposed size, return No to the kid */
+-		
+ 		/* backup the original Form size first */
+ 		fw->core.width = orig_form_width  ;
+ 		fw->core.height = orig_form_height;
+-		
+ 		/* we haden't changed anything else, just return No */
+ 		reply = XtGeometryNo;
++		
++#ifdef FIX_1612
++                if (((IsWidgetAttachedOneHorizontalSide(w)) && 
++                     (desired->request_mode & CWWidth)) ||
++                    ((IsWidgetAttachedOneVerticalSide(w)) && 
++                     (desired->request_mode & CWHeight)))
++		  { PlaceChildren (fw, w, desired);
++		    reply = XtGeometryYes; 
++		  }
++#endif
+ 	    }
+ 	} else {
+ 	    /* ok, we got a Yes form the Form's parent, let's relayout
+@@ -3477,3 +3492,42 @@ XmCreateFormDialog(
+    return XmeCreateClassDialog (xmFormWidgetClass,
+ 				parent, name, arglist, argcount) ;
+ }
++
++
++
++#ifdef FIX_1612
++/************************************************************************
++ *
++ *  IsWidgetAttachedOneHorizontalSide
++ *	Checking the attachments of widget in horizontal direction.
++ *  Returns True if only one (left or right) side of widget is attached
++ *
++ ************************************************************************/
++static Boolean IsWidgetAttachedOneHorizontalSide(Widget w)
++  { if (w != NULL)
++      { XmFormConstraint c = GetFormConstraint(w);
++        if (((c->att[LEFT].type == XmATTACH_NONE) && 
++             (c->att[RIGHT].type != XmATTACH_NONE)) ||
++            ((c->att[LEFT].type != XmATTACH_NONE) && 
++             (c->att[RIGHT].type == XmATTACH_NONE)))
++          return True;
++          
++      }
++    return False;
++  }    
++
++  
++static Boolean IsWidgetAttachedOneVerticalSide(Widget w)
++  { if (w != NULL)
++      { XmFormConstraint c = GetFormConstraint(w);
++        if (((c->att[TOP].type == XmATTACH_NONE) && 
++             (c->att[BOTTOM].type != XmATTACH_NONE)) ||
++            ((c->att[TOP].type != XmATTACH_NONE) && 
++             (c->att[BOTTOM].type == XmATTACH_NONE)))
++          return True;
++          
++      }
++    return False;
++  }    
++  
++#endif
+-- 
+2.14.3
+
diff --git a/SOURCES/motifzone_1660.patch b/SOURCES/motifzone_1660.patch
new file mode 100644
index 0000000..c6d9b7c
--- /dev/null
+++ b/SOURCES/motifzone_1660.patch
@@ -0,0 +1,27 @@
+From e5c51cda449ea3544fddcdb84c6809757477035b Mon Sep 17 00:00:00 2001
+From: Oleksiy Chernyavskyy <ochern@ics.com>
+Date: Tue, 22 Aug 2017 03:27:36 +0300
+Subject: [PATCH] Fixed bug 1660
+
+---
+ lib/Xm/TextF.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Xm/TextF.c b/lib/Xm/TextF.c
+index 3323d2bd..f66076da 100644
+--- a/lib/Xm/TextF.c
++++ b/lib/Xm/TextF.c
+@@ -1768,8 +1768,8 @@ PaintCursor(XmTextFieldWidget tf)
+         }
+            if (cursor_width > 0 && cursor_height > 0)
+   	  	XCopyArea(XtDisplay(tf), tf->text.ibeam_off, XtWindow(tf), 
+-		      tf->text.save_gc, 0, 0, cursor_width, 
+-		      cursor_height, x, y);
++          tf->text.save_gc, src_x, 0, cursor_width, 
++          cursor_height, x, y);
+   	}
+   }
+ }
+-- 
+2.13.5
+
diff --git a/SOURCES/openMotif-2.2.3-uil_lib.patch b/SOURCES/openMotif-2.2.3-uil_lib.patch
new file mode 100644
index 0000000..fc3a0ce
--- /dev/null
+++ b/SOURCES/openMotif-2.2.3-uil_lib.patch
@@ -0,0 +1,20 @@
+--- openmotif/clients/uil/Makefile.am.uil_lib	2003-12-16 13:41:53.000000000 +0100
++++ openmotif/clients/uil/Makefile.am	2003-12-16 13:41:55.000000000 +0100
+@@ -13,7 +13,7 @@
+ 
+ libUil_la_LIBADD = UilParser.lo ../../lib/Mrm/libMrm.la ../../lib/Xm/libXm.la 
+ 
+-uil_LDADD = ../../lib/Mrm/libMrm.la ../../lib/Xm/libXm.la 
++uil_LDADD = libUil.la ../../lib/Mrm/libMrm.la ../../lib/Xm/libXm.la
+ 
+ INCLUDES = -DINCDIR=\"@INCDIR@\" \
+            -DLIBDIR=\"@LIBDIR@\" \
+@@ -42,7 +42,7 @@
+ 		UilLstMac.c	UilSemVal.c	UilSemCSet.c	UilDB.c
+ 
+ SRCS =		$(COMMON_SRC)
+-SRCS2 =		$(COMMON_SRC)	UilMain.c
++SRCS2 =		UilMain.c
+ 
+ HEADERS_1 = 	Uil.h		UilSymGl.h	UilSymDef.h \
+ 		UilDef.h	XmAppl.uil
diff --git a/SOURCES/openMotif-2.3.0-no_X11R6.patch b/SOURCES/openMotif-2.3.0-no_X11R6.patch
new file mode 100644
index 0000000..24d1c56
--- /dev/null
+++ b/SOURCES/openMotif-2.3.0-no_X11R6.patch
@@ -0,0 +1,47 @@
+--- openmotif-2.3.0/doc/man/man1/mwm.1.no_X11R6	2005-12-09 15:08:21.000000000 +0100
++++ openmotif-2.3.0/doc/man/man1/mwm.1	2005-12-09 15:09:06.000000000 +0100
+@@ -366,7 +366,7 @@
+ database\&. This database is built from the following sources\&. They are listed
+ in order of precedence, low to high:
+ .PP
+-\fB/usr/X11R6/lib/X11/app-defaults/Mwm\fP
++\fB/usr/share/X11/app-defaults/Mwm\fP
+ .PP
+ \fB$HOME/Mwm\fP
+ .PP
+@@ -376,7 +376,7 @@
+ .PP
+ \fBmwm\fP command line options
+ .PP
+-The file names \fB/usr/X11R6/lib/X11/app-defaults/Mwm\fP and \fB$HOME/Mwm\fP represent customary locations for these files\&. The actual
++The file names \fB/usr/share/X11/app-defaults/Mwm\fP and \fB$HOME/Mwm\fP represent customary locations for these files\&. The actual
+ location of the system-wide class resource file may depend on the \fBXFILESEARCHPATH\fP environment variable and the
+ current language environment\&. The actual location of the user-specific class
+ resource file may depend on the \fBXUSERFILESEARCHPATH\fP and \fBXAPPLRESDIR\fP
+@@ -595,7 +595,7 @@
+ NameClassValue TypeDefault
+ autoKeyFocusAutoKeyFocusT/FT
+ autoRaiseDelayAutoRaiseDelaymillisec500
+-bitmap-Bitmap-directory/usr/X11R6/include-
++bitmap-Bitmap-directory/usr/include-
+ DirectoryDirectory/X11/bitmaps
+ clientAutoPlaceClientAutoPlaceT/FT
+ colormapFocus-ColormapFocus-stringkeyboard
+@@ -650,7 +650,7 @@
+ This resource identifies a directory to be searched for bitmaps referenced
+ by \fBmwm\fP resources\&. This directory is searched if a bitmap
+ is specified without an absolute pathname\&. The default value for this resource
+-is \fB/usr/X11R6/include/X11/bitmaps\fP\&. The directory \fB/usr/X11R6/include/X11/bitmaps\fP
++is \fB/usr/include/X11/bitmaps\fP\&. The directory \fB/usr/include/X11/bitmaps\fP
+ represents the customary locations for this directory\&. The actual
+ location of this directory may vary on some systems\&. If the bitmap is not
+ found in the specified directory, \fBXBMLANGPATH\fP is searched\&.
+@@ -1348,7 +1348,7 @@
+ .PP
+ \fB/etc/X11/mwm/system\&.mwmrc\fP
+ .PP
+-\fB/usr/X11R6/lib/X11/app-defaults/Mwm\fP
++\fB/usr/share/X11/app-defaults/Mwm\fP
+ .PP
+ \fB$HOME/Mwm\fP
+ .PP
diff --git a/SOURCES/openMotif-2.3.0-rgbtxt.patch b/SOURCES/openMotif-2.3.0-rgbtxt.patch
new file mode 100644
index 0000000..6c5ff15
--- /dev/null
+++ b/SOURCES/openMotif-2.3.0-rgbtxt.patch
@@ -0,0 +1,22 @@
+--- openmotif-2.3.0/lib/Xm/ColorS.c.rgbtxt	2004-07-07 14:24:07.000000000 +0200
++++ openmotif-2.3.0/lib/Xm/ColorS.c	2005-12-02 13:26:11.000000000 +0100
+@@ -131,7 +131,7 @@
+   {
+     XmNrgbFile, XmCString, XmRString,
+     sizeof(String), XtOffsetOf(XmColorSelectorRec, cs.rgb_file),
+-    XmRString, (XtPointer) "/usr/lib/X11/rgb.txt"
++    XmRString, (XtPointer) "/usr/share/X11/rgb.txt"
+   },
+ #endif
+   {
+--- openmotif-2.3.0/doc/man/man3/XmColorSelector.3.rgbtxt	2002-01-17 21:32:48.000000000 +0100
++++ openmotif-2.3.0/doc/man/man3/XmColorSelector.3	2005-12-02 13:25:26.000000000 +0100
+@@ -34,7 +34,7 @@
+ noCellError%NoCellError%XmString%"No Color Cell
+ %%% Available"
+ redSliderLabel%SliderLabel%XmString%"Red"
+-rgbFile%String%String%/usr/lib/X11/rgb.txt
++rgbFile%String%String%/usr/share/X11/rgb.txt
+ sliderTogLabel%TogLabel%XmString%"Color Sliders"
+ .TE
+ .PP
diff --git a/SOURCES/openmotif-2.3.1-rhbz_997241.patch b/SOURCES/openmotif-2.3.1-rhbz_997241.patch
new file mode 100644
index 0000000..6a2183f
--- /dev/null
+++ b/SOURCES/openmotif-2.3.1-rhbz_997241.patch
@@ -0,0 +1,11 @@
+--- openmotif-2.3.1-old/clients/mwm/WmWinConf.c	2002-01-11 02:25:38.000000000 +0530
++++ openmotif-2.3.1-old/clients/mwm/WmWinConf.c	2013-08-23 12:47:45.000000000 +0530
+@@ -1512,7 +1512,7 @@ DrawSegments (Display *dpy, Window win, 
+  *************************************<->***********************************/
+ void MoveOutline (int x, int y, unsigned int width, unsigned int height)
+ {
+-    if (wmGD.freezeOnConfig)
++    if (wmGD.freezeOnConfig || !wmGD.pActiveSD->moveOpaque)
+     {
+ 	DrawOutline (x, y, width, height);
+     }
diff --git a/SOURCES/revert-of-motifzone_1565.patch b/SOURCES/revert-of-motifzone_1565.patch
new file mode 100644
index 0000000..1e6cc29
--- /dev/null
+++ b/SOURCES/revert-of-motifzone_1565.patch
@@ -0,0 +1,427 @@
+From 18de86345d5e455b815fe0395d2992b9a2f1195f Mon Sep 17 00:00:00 2001
+From: Oleksiy Chernyavskyy <ochern@ics.com>
+Date: Tue, 28 Mar 2017 01:11:59 +0300
+Subject: [PATCH] removed bugfix 1565. See details on
+ http://bugs.motifzone.net/show_bug.cgi?id=1565
+
+---
+ lib/Xm/ComboBox.c   |   8 ---
+ lib/Xm/DropDown.c   |   7 ---
+ lib/Xm/GrabShell.c  |  15 +----
+ lib/Xm/GrabShellP.h |   3 -
+ lib/Xm/RCMenu.c     |  40 ------------
+ lib/Xm/Xm.c         | 173 ----------------------------------------------------
+ lib/Xm/XmI.h        |   4 --
+ 7 files changed, 2 insertions(+), 248 deletions(-)
+
+diff --git a/lib/Xm/ComboBox.c b/lib/Xm/ComboBox.c
+index cf507da4..1472e458 100644
+--- a/lib/Xm/ComboBox.c
++++ b/lib/Xm/ComboBox.c
+@@ -3164,9 +3164,6 @@ CreatePulldown(Widget    parent,
+   Arg      args[4];
+   ArgList  merged_args;
+   Cardinal n;
+-#ifdef FIX_1565
+-  XmGrabShellWidget grabsh;
+-#endif
+ 
+   n = 0;
+   XtSetArg(args[n], XmNlayoutDirection, LayoutM(parent)), n++;
+@@ -3178,11 +3175,6 @@ CreatePulldown(Widget    parent,
+ 			     merged_args, n + *num_args);
+   XtFree((char*)merged_args);
+ 
+-#ifdef FIX_1565
+-  grabsh = (XmGrabShellWidget) shell;
+-  grabsh->grab_shell.set_input_focus = False;
+-#endif
+-
+   return shell;
+ }
+ 
+diff --git a/lib/Xm/DropDown.c b/lib/Xm/DropDown.c
+index 5cd15cae..37fec03f 100644
+--- a/lib/Xm/DropDown.c
++++ b/lib/Xm/DropDown.c
+@@ -2027,9 +2027,6 @@ CreatePopup(Widget w, ArgList args, Cardinal num_args)
+     Arg *new_list, largs[10];
+     Cardinal num_largs;
+     Widget sb;
+-#ifdef FIX_1565
+-    XmGrabShellWidget grabsh;
+-#endif
+ 
+     num_largs = 0;
+     XtSetArg(largs[num_largs], XmNoverrideRedirect, True); num_largs++;
+@@ -2043,10 +2040,6 @@ CreatePopup(Widget w, ArgList args, Cardinal num_args)
+ 						xmGrabShellWidgetClass, w,
+ 						new_list,
+ 						num_largs + num_args);
+-#ifdef FIX_1565
+-    grabsh = (XmGrabShellWidget) XmDropDown_popup_shell(cbw);
+-    grabsh->grab_shell.set_input_focus = False;
+-#endif
+     XtFree((char *) new_list);
+ 
+ #ifdef FIX_1446
+diff --git a/lib/Xm/GrabShell.c b/lib/Xm/GrabShell.c
+index af13e0b7..a73f7cb9 100644
+--- a/lib/Xm/GrabShell.c
++++ b/lib/Xm/GrabShell.c
+@@ -284,9 +284,6 @@ Initialize(Widget req,		/* unused */
+   /* CR 9920:  Popdown may be requested before MapNotify. */
+   grabsh->grab_shell.mapped = False;
+ 
+-#ifdef FIX_1565
+-  grabsh->grab_shell.set_input_focus = True;
+-#endif
+ }
+ 
+ /*
+@@ -399,16 +396,8 @@ MapNotifyHandler(Widget shell, XtPointer client_data,
+   XGetInputFocus(XtDisplay(shell), &grabshell->grab_shell.old_focus,
+ 		 &grabshell->grab_shell.old_revert_to);
+   old_handler = XSetErrorHandler(IgnoreXErrors);
+-#ifdef FIX_1565
+-  if (! grabshell->grab_shell.set_input_focus) {
+-    XmForceGrabKeyboard(shell, time);
+-  } else {
+-#endif
+-    XSetInputFocus(XtDisplay(shell), XtWindow(shell), RevertToParent, time);
+-    XSync(XtDisplay(shell), False);
+-#ifdef FIX_1565
+-  }
+-#endif
++  XSetInputFocus(XtDisplay(shell), XtWindow(shell), RevertToParent, time);
++  XSync(XtDisplay(shell), False);
+   XSetErrorHandler(old_handler);
+ }
+ 
+diff --git a/lib/Xm/GrabShellP.h b/lib/Xm/GrabShellP.h
+index 025f0015..e2585540 100644
+--- a/lib/Xm/GrabShellP.h
++++ b/lib/Xm/GrabShellP.h
+@@ -56,9 +56,6 @@ typedef struct
+   Boolean	mapped;
+   Window	old_focus;
+   int		old_revert_to;
+-#ifdef FIX_1565
+-  Boolean	set_input_focus;
+-#endif
+ } XmGrabShellPart;
+ 
+ 
+diff --git a/lib/Xm/RCMenu.c b/lib/Xm/RCMenu.c
+index 8b156da5..2c698d4f 100644
+--- a/lib/Xm/RCMenu.c
++++ b/lib/Xm/RCMenu.c
+@@ -85,9 +85,6 @@ static char *rcsid = "$TOG: RCMenu.c /main/25 1999/05/24 18:06:57 samborn $";
+ #include "TraversalI.h"
+ #include "UniqueEvnI.h"
+ #include "VendorSI.h"
+-#ifdef FIX_1565
+-#include <Xm/GrabShell.h>
+-#endif
+ 
+ #define FIX_1535
+ 
+@@ -946,13 +943,6 @@ _XmMenuFocus(
+    XmMenuState mst = _XmGetMenuState((Widget)w);
+    Window tmpWindow;
+    int tmpRevert;
+-#ifdef FIX_1565
+-   Widget shell;
+-
+-   shell = w;
+-   while (! XtIsSubclass(shell, shellWidgetClass))
+-     shell = XtParent(shell);
+-#endif
+  
+    if (_time == CurrentTime) 
+      _time = XtLastTimestampProcessed(XtDisplay(w));
+@@ -993,11 +983,6 @@ _XmMenuFocus(
+ 			  shell.popped_up))
+ **/
+ 		     {
+-#ifdef FIX_1565
+-               if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
+-                 XmForceGrabKeyboard(w, _time);
+-               else
+-#endif
+ 		       SetInputFocus(XtDisplay(w), mst->RC_menuFocus.oldFocus,
+ 				     mst->RC_menuFocus.oldRevert,
+ 				     mst->RC_menuFocus.oldTime);
+@@ -1011,11 +996,6 @@ _XmMenuFocus(
+  	      */
+  	     else
+  	       {
+-#ifdef FIX_1565
+-               if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
+-                 XmForceGrabKeyboard(w, _time);
+-               else
+-#endif
+  		  SetInputFocus(XtDisplay(w), mst->RC_menuFocus.oldFocus,
+ 				mst->RC_menuFocus.oldRevert,
+ 				mst->RC_menuFocus.oldTime);
+@@ -1034,11 +1014,6 @@ _XmMenuFocus(
+ 	     RC_menuFocus.oldFocus);
+ 	  mst->RC_menuFocus.oldTime = _time - 1;
+ 
+-#ifdef FIX_1565
+-      if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
+-        XmForceGrabKeyboard(w, _time);
+-      else
+-#endif
+ 	  SetInputFocus(XtDisplay(w), XtWindow(w), mst->RC_menuFocus.oldRevert,
+ 			mst->RC_menuFocus.oldTime);
+ 
+@@ -1052,11 +1027,6 @@ _XmMenuFocus(
+ 	  XGetInputFocus(XtDisplay(w), &tmpWindow, &tmpRevert);
+ 	  if (tmpWindow != XtWindow(w))
+ 	  {
+-#ifdef FIX_1565
+-        if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
+-          XmForceGrabKeyboard(w, _time);
+-        else
+-#endif
+ 	    SetInputFocus(XtDisplay(w), XtWindow(w), tmpRevert, _time);
+ 
+ 	    mst->RC_menuFocus.oldRevert = tmpRevert;
+@@ -1078,11 +1048,6 @@ _XmMenuFocus(
+ 
+ 	  break;
+ 	case XmMENU_MIDDLE:
+-#ifdef FIX_1565
+-      if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
+-        XmForceGrabKeyboard(w, _time);
+-      else
+-#endif
+ 	  SetInputFocus(XtDisplay(w), XtWindow(w),
+ 			mst->RC_menuFocus.oldRevert,
+ 			mst->RC_menuFocus.oldTime);
+@@ -1097,11 +1062,6 @@ _XmMenuFocus(
+ 	  if ((tmpWindow != XtWindow(w)) &&
+ 	      (_time > mst->RC_menuFocus.oldTime))
+ 	  {
+-#ifdef FIX_1565
+-        if (XtIsSubclass(shell, xmGrabShellWidgetClass) || XtIsSubclass(shell, xmMenuShellWidgetClass))
+-          XmForceGrabKeyboard(w, _time);
+-        else
+-#endif
+ 	    SetInputFocus(XtDisplay(w), XtWindow(w), tmpRevert, _time);
+ 
+ 	    mst->RC_menuFocus.oldRevert = tmpRevert;
+diff --git a/lib/Xm/Xm.c b/lib/Xm/Xm.c
+index 45d48b61..657f9041 100644
+--- a/lib/Xm/Xm.c
++++ b/lib/Xm/Xm.c
+@@ -40,10 +40,6 @@
+ #ifdef FIX_345
+ #include <X11/keysym.h>
+ #endif
+-#ifdef FIX_1565
+-#include <Xm/GrabShell.h>
+-#include <Xm/MenuShell.h>
+-#endif
+ 
+ 
+ /**************************************************************************
+@@ -535,172 +531,3 @@ _XmAssignInsensitiveColor(Widget w)
+ }
+ #endif
+ 
+-#ifdef FIX_1565
+-
+-typedef struct _GrabData GrabData;
+-struct _GrabData {
+-  Widget w;
+-  GrabData *next;
+-};
+-
+-static void _XmSendFocusEvent(Widget child, int type);
+-static void _XmStartDispatcher(Display *display);
+-static Boolean _XmEventDispatcher(XEvent *event);
+-static void UnmapHandler(Widget w, XtPointer client_data, XEvent *event, Boolean *cont);
+-static Boolean _UngrabKeyboard(Widget w);
+-
+-static GrabData *grabw_top = NULL;
+-static int xm_dispatcher_on = 0;
+-static XtEventDispatchProc saved_dispatcher_proc = NULL;
+-static XtEventDispatchProc xt_dispatcher_proc = NULL;
+-
+-/*
+-   XmForceGrabKeyboard function is defined to be a substitutor of XSetInputFocus calls
+-   for popup and pulldown menus that should grab keyboard focus yet main window at the
+-   same time should visually stay in focus for window manager. This resolves focus flip
+-   issue when popup or pulldown menu is raised. ~ochern
+- */
+-void XmForceGrabKeyboard(Widget w, Time time)
+-{
+-  GrabData *grabw;
+-
+-  if (!w)
+-    return;
+-
+-  while (! XtIsSubclass(w, shellWidgetClass))
+-    w = XtParent(w);
+-
+-  if (! (XtIsSubclass(w, xmGrabShellWidgetClass) || XtIsSubclass(w, xmMenuShellWidgetClass)))
+-    return;
+-
+-  _XmStartDispatcher(XtDisplay(w));
+-
+-  _UngrabKeyboard(w);
+-
+-  grabw = (GrabData *) XtMalloc(sizeof(GrabData));
+-  grabw->w = w;
+-  _XmProcessLock();
+-  grabw->next = grabw_top;
+-  grabw_top = grabw;
+-  _XmProcessUnlock();
+-
+-  XtInsertEventHandler(w, StructureNotifyMask, False, UnmapHandler, NULL, XtListHead);
+-
+-  _XmSendFocusEvent(w, FocusIn);
+-
+-  /* Following the XSetInputFocus behaviour we force sending FocusOut (see XGrabKeyboard(3))
+-     event to a previous keyboard holder */
+-  XtGrabKeyboard(w, True, GrabModeAsync, GrabModeAsync, time);
+-}
+-
+-static void _XmStartDispatcher(Display *display)
+-{
+-  if (!display)
+-    return;
+-
+-  _XmProcessLock();
+-
+-  if (xm_dispatcher_on) {
+-    _XmProcessUnlock();
+-    return;
+-  }
+-
+-  saved_dispatcher_proc = XtSetEventDispatcher(display, KeyPress, _XmEventDispatcher);
+-  if (! xt_dispatcher_proc)
+-    xt_dispatcher_proc = saved_dispatcher_proc;
+-  XtSetEventDispatcher(display, KeyRelease, _XmEventDispatcher);
+-  xm_dispatcher_on = 1;
+-
+-  _XmProcessUnlock();
+-}
+-
+-static Boolean _XmEventDispatcher(XEvent *event)
+-{
+-  _XmProcessLock();
+-  if (grabw_top) {
+-    if (event->type == KeyPress || event->type == KeyRelease)
+-      event->xany.window = XtWindow(grabw_top->w);
+-  }
+-  _XmProcessUnlock();
+-
+-  if (saved_dispatcher_proc) {
+-    return (*saved_dispatcher_proc)(event);
+-  } else if (xt_dispatcher_proc) {
+-    return (*xt_dispatcher_proc)(event);
+-  } else {
+-    if (grabw_top)
+-      XtSetEventDispatcher(XtDisplay(grabw_top->w), event->type, NULL);
+-    return XtDispatchEvent(event);
+-  }
+-}
+-
+-static void UnmapHandler(Widget w, XtPointer client_data, XEvent *event, Boolean *cont)
+-{
+-  if (event->type == UnmapNotify)
+-    _UngrabKeyboard(w);
+-  if (! grabw_top) {
+-    XtSetEventDispatcher(XtDisplay(w), KeyPress, saved_dispatcher_proc);
+-    XtSetEventDispatcher(XtDisplay(w), KeyRelease, saved_dispatcher_proc);
+-    xm_dispatcher_on = 0;
+-  }
+-
+-  /* we do not call XtUngrabKeyboard since X server automatically performs an
+-     UngrabKeyboard request if the event window for an active keyboard grab becomes
+-     not viewable. ~ochern */
+-}
+-
+-static Boolean _UngrabKeyboard(Widget w)
+-{
+-  GrabData *grabw, *grabw_prev;
+-
+-  _XmProcessLock();
+-  if (! grabw_top) {
+-    _XmProcessUnlock();
+-    return False;
+-  }
+-
+-  grabw = grabw_top;
+-  grabw_prev = NULL;
+-  while(grabw && grabw->w != w) {
+-    grabw_prev = grabw;
+-    grabw = grabw->next;
+-  }
+-  if (grabw) {
+-    if (grabw_prev)
+-      grabw_prev->next = grabw->next;
+-    else
+-      grabw_top = grabw->next;
+-    XtFree((char*) grabw);
+-
+-    _XmProcessUnlock();
+-    return True;
+-  }
+-
+-  _XmProcessUnlock();
+-  return False;
+-}
+-
+-static void _XmSendFocusEvent(Widget child, int type)
+-{
+-  child = XtIsWidget(child) ? child : _XtWindowedAncestor(child);
+-  if (XtIsSensitive(child) && !child->core.being_destroyed
+-      && XtIsRealized(child) && (XtBuildEventMask(child) & FocusChangeMask))
+-  {
+-    XFocusChangeEvent event;
+-    Display* dpy = XtDisplay (child);
+-
+-    event.type = type;
+-    event.serial = LastKnownRequestProcessed(dpy);
+-    event.send_event = True;
+-    event.display = dpy;
+-    event.window = XtWindow(child);
+-    event.mode = NotifyNormal;
+-    event.detail = NotifyAncestor;
+-    if (XFilterEvent((XEvent*)&event, XtWindow(child)))
+-      return;
+-    XtDispatchEventToWidget(child, (XEvent*)&event);
+-  }
+-}
+-
+-#endif
+-
+diff --git a/lib/Xm/XmI.h b/lib/Xm/XmI.h
+index ef6165c5..769e5f0a 100644
+--- a/lib/Xm/XmI.h
++++ b/lib/Xm/XmI.h
+@@ -237,9 +237,6 @@ extern Boolean _XmIsISO10646(Display *dpy,
+ extern XChar2b* _XmUtf8ToUcs2(char *draw_text,
+                               size_t seg_len,
+ 			      size_t *ret_str_len);
+-#ifdef FIX_1565
+-extern void XmForceGrabKeyboard(Widget w, Time time);
+-#endif
+ 
+ /********    End Private Function Declarations    ********/
+ 
+@@ -294,7 +291,6 @@ extern Pixel _XmAssignInsensitiveColor(Widget w);
+ #define FIX_1501
+ #define FIX_1521
+ #define FIX_1505
+-#define FIX_1565
+ 
+ #endif /* _XmI_h */
+ /* DON'T ADD ANYTHING AFTER THIS #endif */
+-- 
+2.13.5
+
diff --git a/SOURCES/xmbind b/SOURCES/xmbind
new file mode 100644
index 0000000..832ce12
--- /dev/null
+++ b/SOURCES/xmbind
@@ -0,0 +1,6 @@
+#! /bin/sh
+
+if [ -x /usr/bin/xmbind ] ; then
+    /usr/bin/xmbind
+fi
+
diff --git a/SPECS/motif.spec b/SPECS/motif.spec
new file mode 100644
index 0000000..be53d86
--- /dev/null
+++ b/SPECS/motif.spec
@@ -0,0 +1,540 @@
+Summary: Run-time libraries and programs
+Name: motif
+Version: 2.3.4
+Release: 17%{?dist}
+License: LGPLv2+
+Group: System Environment/Libraries
+Source: http://downloads.sf.net/motif/motif-%{version}-src.tgz
+Source1: xmbind
+URL: http://www.motifzone.net/
+Obsoletes: openmotif < 2.3.4
+Provides: openmotif = %{version}-%{release}
+Requires: xorg-x11-xbitmaps
+Requires: xorg-x11-xinit
+
+BuildRequires: automake, libtool, autoconf, flex
+# flex static libs have been part of flex for RHEL <= 6 and Fedora <= 12
+%if 0%{?fedora} > 12 || 0%{?rhel} > 6
+BuildRequires: flex-static
+%endif
+BuildRequires: byacc, pkgconfig
+BuildRequires: libjpeg-devel libpng-devel
+BuildRequires: libXft-devel libXmu-devel libXp-devel libXt-devel libXext-devel
+BuildRequires: xorg-x11-xbitmaps
+BuildRequires: perl-interpreter
+
+Patch22: motif-2.3.4-no_demos.patch
+Patch23: openMotif-2.2.3-uil_lib.patch
+Patch43: openMotif-2.3.0-rgbtxt.patch
+Patch45: motif-2.3.4-mwmrc_dir.patch
+Patch46: motif-2.3.4-bindings.patch
+Patch47: openMotif-2.3.0-no_X11R6.patch
+# FTBFS #1448819
+Patch48: motif-2.3.4-Fix-issues-with-Werror-format-security.patch
+
+Patch49: openmotif-2.3.1-rhbz_997241.patch
+Patch50: motif-2.3.5-motifzone_1654.patch
+Patch51: motif-2.3.4-motifzone_1564-88bdce1.patch
+Patch52: revert-of-motifzone_1565.patch
+Patch53: motifzone_1660.patch
+Patch54: motifzone_1612.patch
+
+
+Conflicts: lesstif <= 0.92.32-6
+
+%description
+This is the Motif %{version} run-time environment. It includes the
+Motif shared libraries, needed to run applications which are dynamically
+linked against Motif and the Motif Window Manager mwm.
+
+%package devel
+Summary: Development libraries and header files
+Group: Development/Libraries
+Conflicts: lesstif-devel <= 0.92.32-6
+Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: libjpeg-devel%{?_isa} libpng-devel%{?_isa}
+Requires: libXft-devel%{?_isa} libXmu-devel%{?_isa} libXp-devel%{?_isa}
+Requires: libXt-devel%{?_isa} libXext-devel%{?_isa}
+Obsoletes: openmotif-devel < 2.3.4
+Provides: openmotif-devel = %{version}-%{release}
+
+%description devel
+This is the Motif %{version} development environment. It includes the
+header files and also static libraries necessary to build Motif applications.
+
+%package static
+Summary: Static libraries
+Group: Development/Libraries
+Conflicts: lesstif-devel <= 0.92.32-6
+Requires: %{name}-devel%{?_isa} = %{version}-%{release}
+
+%description static
+This package contains the static Motif libraries.
+
+%prep
+%setup -q
+%patch22 -p1 -b .no_demos
+%patch23 -p1 -b .uil_lib
+%patch43 -p1 -b .rgbtxt
+%patch45 -p1 -b .mwmrc_dir
+%patch46 -p1 -b .bindings
+%patch47 -p1 -b .no_X11R6
+%patch48 -p1 -b .format-security
+
+%patch49 -p1 -b .rhbz_997241
+%patch50 -p1 -b .motifzone_1654
+%patch51 -p1 -b .motifzone_1564-88bdce1
+%patch52 -p1 -b .revert-of-motifzone_1565
+%patch53 -p1 -b .motifzone_1660
+%patch54 -p1 -b .motifzone_1612
+
+%build
+CFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64" \
+./autogen.sh --libdir=%{_libdir} --enable-static --enable-xft --enable-jpeg \
+   --enable-png
+
+%configure --libdir=%{_libdir} --enable-static --enable-xft --enable-jpeg \
+   --enable-png
+
+make clean %{?_smp_mflags}
+make -C include
+make %{?_smp_mflags}
+
+%install
+make DESTDIR=%{buildroot} install
+
+install -d %{buildroot}/etc/X11/xinit/xinitrc.d
+install -m 755 %{SOURCE1} %{buildroot}/etc/X11/xinit/xinitrc.d/xmbind.sh
+
+rm -f %{buildroot}%{_libdir}/*.la
+
+%post -p /sbin/ldconfig
+%postun -p /sbin/ldconfig
+
+%clean
+rm -rf %{buildroot}
+
+%files
+%doc COPYING README RELEASE RELNOTES
+/etc/X11/xinit/xinitrc.d/xmbind.sh
+%dir /etc/X11/mwm
+%config(noreplace) /etc/X11/mwm/system.mwmrc
+%{_bindir}/mwm
+%{_bindir}/xmbind
+%{_includedir}/X11/bitmaps/*
+%{_libdir}/libMrm.so.*
+%{_libdir}/libUil.so.*
+%{_libdir}/libXm.so.*
+%{_datadir}/X11/bindings
+%{_mandir}/man1/mwm*
+%{_mandir}/man1/xmbind*
+%{_mandir}/man4/mwmrc*
+
+%files devel
+%{_bindir}/uil
+%{_includedir}/Mrm
+%{_includedir}/Xm
+%{_includedir}/uil
+%{_libdir}/lib*.so
+%{_mandir}/man1/uil.1*
+%{_mandir}/man3/*
+%{_mandir}/man5/*
+
+%files static
+%{_libdir}/lib*.a
+
+%changelog
+* Fri Apr 08 2022 Mika Penttila <mpenttil@redhat.com> - 2.3.4-17
+- Added forgotten patches and corrected release number
+
+* Tue Sep 11 2018 Carlos Soriano <csoriano@redhat.com> - 2.3.4-16
+- Fix hardened flags, make sure to always pass LDFLAGS on the spec
+- Resolves: RHBZ#1624143
+
+* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.3.4-15
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.3.4-14
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Thu Jun 08 2017 Petr Šabata <contyk@redhat.com> - 2.3.4-13
+- Fix issues with -Werror=format-security (#1448819)
+
+* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.3.4-12
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 2.3.4-11
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.3.4-10
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.3.4-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.3.4-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.3.4-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
+
+* Tue May 28 2013 Michael Schwendt <mschwendt@fedoraproject.org> - 2.3.4-6
+- fix missing BuildRequires flex-static (RHBZ#889175)
+
+* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.3.4-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
+* Mon Jan 21 2013 Adam Tkac <atkac redhat com> - 2.3.4-4
+- rebuild due to "jpeg8-ABI" feature drop
+
+* Fri Oct 26 2012 Thomas Woerner <twoerner@redhat.com> 2.3.4-3
+- do not use _isa for build requires
+
+* Fri Oct 26 2012 Thomas Woerner <twoerner@redhat.com> 2.3.4-2
+- fixed requirements according to review (RHBZ#870049)
+- flex-static has been renamed to flex-devel with Fedora-18 and RHEL-7
+
+* Thu Oct 25 2012 Thomas Woerner <twoerner@redhat.com> 2.3.4-1
+- new version 2.3.4 with LGPL license
+- fixed some rpmlint warnings
+- new sub package for static libraries
+- added /etc/X11/mwm directory
+- removed defattrs
+
+* Fri May 25 2012 Thomas Woerner <twoerner@redhat.com> 2.3.3-5
+- dropped file requires for /usr/share/X11/XKeysymDB, not needed and not 
+  available anymore
+- added flex-static build requirement, because of flex package split
+
+* Mon Aug 15 2011 Thomas Woerner <twoerner@redhat.com> 2.3.3-4
+- fixed Label draws Xft text over border of its parent (rhbz#584300#c3)
+  (MotifZone bug #1521 refixed)
+
+* Wed Aug 10 2011 Thomas Woerner <twoerner@redhat.com> 2.3.3-3
+- fixed regression introduced with upstream FIX #1521 (rhbz#729346)
+
+* Mon Aug  1 2011 Thomas Woerner <twoerner@redhat.com> 2.3.3-2
+- fixed LabelGadget draws background over border of its parent (rhbz#584300)
+  (MotifZone bug #1517)
+- fixed LabelGadget draws Xft text over border of its parent (rhbz#584300#c3)
+  (MotifZone bug #1521)
+
+* Tue Mar 23 2010 Thomas Woerner <twoerner@redhat.com> 2.3.3-1
+- new version 2.3.3 (bugfix release)
+  see RELNOTES file for the list of the bug fixes
+
+* Fri Feb 26 2010 Thomas Woerner <twoerner@redhat.com> 2.3.2-1.1
+- fixes according to review:
+- fixed buildroot
+- removed dot from summary
+- removed dist tag from changelog
+- added source download link
+
+* Wed Jan 13 2010 Thomas Woerner <twoerner@redhat.com> 2.3.2-1
+- new version 2.3.2 with upstream bug fixes: #1212, #1277, #1473, #1476
+- spec file cleanup
+- make build work with libtool
+- all man pages are utf-8, no need to convert them anymore
+- enabled EditRes support with upstream fix
+- fixed parallel build
+- fixed patches for fuzz 0
+  Related: rhbz#543948
+
+* Tue Dec 08 2009 Dennis Gregorovic <dgregor@redhat.com> - 2.3.1-3.1
+- Rebuilt for RHEL 6
+
+* Wed Sep 23 2009 Dennis Gregorovic <dgregor@redhat.com> - 2.3.1-3
+- update the bindings patch
+
+* Wed Nov 12 2008 Thomas Woerner <twoerner@redhat.com> 2.3.1-2
+- more fixes for unreliable pasting into XmTextField (MotifZone bug #1321)
+  Resolves: rhbz#405941
+- the fix for MotifZone bug #1400 is not working for remote displays
+
+* Thu Oct  2 2008 Thomas Woerner <twoerner@redhat.com> 2.3.1-1
+- using final 2.3.1 dist archive
+
+* Wed Sep 17 2008 Thomas Woerner <twoerner@redhat.com> 2.3.1-0
+- rebase to 2.3.1 (CVS dist release)
+  Resolves: rhbz#455736
+- fixes OpenMotif XmList problem
+  Resolves: rhbz#405801
+- fixes List.c/ReplaceItem() segfaults when item selected
+  Resolves: rhbz#431460
+- fixes [motifzone 1400 ] openmotif/ BadFont on multiple display application
+  Resolves: rhbz#438910
+- fixes applications dump core in non-UTF8 environment
+  Resolves: rhbz#453722
+- fixes lots of additional bugs: see release notes
+
+* Tue Apr  1 2008 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.5
+- fixed SEGV error moving mouse over window related to XmToolTipGetLabel
+  (MotifZone bug fix #1388)
+  Resolves: rhbz#277381
+
+* Thu Nov  8 2007 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.4
+- fixed title bar problem using XmNdialogTitle (MotifZone bug fix #1380)
+  Resolves: rhbz#353251
+
+* Fri Dec  1 2006 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.3
+- fixed path to xmbind in /etc/X11/xinit/xinitrc.d/xmbind.sh
+  Resolves: rhbz#218032
+
+* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 2.3.0-0.2.1
+- rebuild
+
+* Tue Jun  6 2006 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.2
+- new CVS version 2006-06-06
+- new buildprereq for pkgconfig
+
+* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 2.3.0-0.1.9.2
+- bump again for double-long bug on ppc(64)
+
+* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 2.3.0-0.1.9.1
+- rebuilt for new gcc4.1 snapshot and glibc changes
+
+* Thu Feb  2 2006 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.1.9
+- new CVS version 2006-02-02
+- fixed CVE-2005-3964: libUil buffer overflows (#174814)
+- fixed XmList out of bound accesses (#167701)
+- fixed pasting into TextField (#179549)
+
+* Tue Jan  3 2006 Jesse Keating <jkeating@redhat.coM> 2.3.0-0.1.2
+- Rebuilt on new gcc
+
+* Fri Dec  9 2005 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.1.1
+- moved mwmrc to /etc/X11/mwm
+- moved bindings to /usr/share/X11
+- fixed paths in man pages containing /usr/X11R6
+
+* Thu Dec  8 2005 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.1.1
+- enabled Xft, jpeg and png support
+- patch for missing xft-config
+- dropped duplicate include path in devel package
+
+* Fri Dec  2 2005 Thomas Woerner <twoerner@redhat.com> 2.3.0-0.1
+- new 2.3.0 (beta1)
+- patch for new rgb.txt location (#174210)
+  Thanks to Ville Skyttä for the patch
+
+* Fri Nov 18 2005 Thomas Woerner <twoerner@redhat.com> 2.2.3-15
+- moved man pages to /usr/share/man (#173604)
+
+* Wed Nov 16 2005 Jeremy Katz <katzj@redhat.com> - 2.2.3-14
+- X11R6 stuff is gone
+
+* Wed Nov 16 2005 Jeremy Katz <katzj@redhat.com> - 2.2.3-13
+- also buildrequire xbitmaps
+
+* Wed Nov 16 2005 Thomas Woerner <twoerner@redhat.com> 2.2.3-12
+- rebuild for modular X
+
+* Fri Sep  2 2005 Thomas Woerner <twoerner@redhat.com> 2.2.3-11
+- fixed mrm initialization error in MrmOpenHierarchyPerDisplay (#167094)
+  Thanks to Arjan van de Ven for the patch.
+
+* Mon Apr  4 2005 Thomas Woerner <twoerner@redhat.com> 2.2.3-10
+- fixed possible libXpm overflows (#151642)
+
+* Mon Feb 28 2005 Thomas Woerner <twoerner@redhat.com> 2.2.3-9
+- Upstream Fix: Multiscreen mode
+- Upstream Fix: Crash when restarting by a session manager (motifzone#1193)
+- Upstream Fix: Crash when duplicating a window menu containing f.circle_up
+  (motifzone#1202)
+- fixed divide by zero error in ComputeVizCount() (#144420)
+- Xpmcreate: define LONG64 on 64 bit architectures (#143689)
+
+* Mon Nov 29 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-8.1
+- allow to write XPM files with absolute path names again (#140815)
+
+* Wed Nov 24 2004 Miloslav Trmac <mitr@redhat.com> 2.2.3-8
+- Convert man pages to UTF-8
+
+* Mon Nov 22 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-7
+- latest Xpm patches: CAN-2004-0914 (#134631)
+- new patch for tmpnam in imake (only used for build)
+
+* Thu Sep 30 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-6
+- fixed CAN-2004-0687 (integer overflows) and CAN-2004-0688 (stack overflows)
+  in embedded Xpm library
+
+* Wed Sep 29 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-5.2
+- replaced libtoolize and autofoo* calls with a patch (autofoo)
+
+* Wed Sep 29 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-5.1
+- use new autofoo
+
+* Wed Sep  1 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-5
+- libXp now moved to xorg-x11-deprecated-libs, therefore no compatibility 
+  with XFree86 packages anymore.
+
+* Mon Aug 30 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-4.3
+- devel package: added requires for XFree86-devel (#131202)
+
+* Thu Jun 17 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-4.2
+- rebuilt for fc3
+
+* Wed Jun 16 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-4.1
+- renamed xmbind script to xmbind.sh (#126116)
+
+* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Tue Jun  8 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-3
+- fixed popup menus fail on Tarantella/VNC (#123027)
+- fixed character not supported problem (#124960)
+- fixed data out of bounds bug (#124961)
+
+* Wed Apr 14 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-2
+- 2.2.3 final version
+
+* Tue Mar 23 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-1.9.2
+- final CVS version
+
+* Wed Mar 17 2004 Thomas Woerner <twoerner@redhat.com> 2.2.3-1.9.1
+- new openmotif 2.2.3 beta version
+
+* Mon Mar  8 2004 Thomas Woerner <twoerner@redhat.com> 2.2.2-17
+- fixed popdown problem in ToolTip (#75730)
+
+* Tue Mar 02 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Thu Feb 19 2004 Thomas Woerner <twoerner@redhat.com> 2.2.2-16.3
+- rebuilt
+
+* Thu Dec 18 2003 Thomas Woerner <twoerner@redhat.com>
+- added missing BuildRequires for XFree86-devel
+
+* Thu Nov 27 2003 Thomas Woerner <twoerner@redhat.com> 2.2.2-16.2
+- removed rpath
+
+* Mon Aug 27 2003 Thomas Woerner <twoerner@redhat.com> 2.2.2-16
+- fixed ToggleBG (#101159)
+
+* Thu Jul 31 2003  <timp@redhat.com> 2.2.2-15.2
+- rebuild for RHEL
+
+* Wed Jul 30 2003 Thomas Woerner <twoerner@redhat.com> 2.2.2-15
+- fixed ToggleB (#101159)
+
+* Wed Jan 22 2003 Tim Powers <timp@redhat.com>
+- rebuilt
+
+* Tue Jan 21 2003 Thomas Woerner <twoerner@redhat.com> 2.2.2-13
+- fix for Xmu/EditRes conflict (bug #80777)
+- fix for wml and utf-8 (bug #80271)
+- fix for Ext18List (bug #74502)
+
+* Thu Nov 14 2002 Than Ngo <than@redhat.com> 2.2.2-12.2
+- add buildprereq byacc and flex (bug #77860)
+
+* Fri Nov  8 2002 Than Ngo <than@redhat.com> 2.2.2-12.1
+- fix some build problem
+
+* Mon Aug 27 2002 Than Ngo <than@redhat.com> 2.2.2-12
+- Fixed a segmentation fault in mkcatdefs (bug #71955)
+
+* Wed Jul 24 2002 Than Ngo <than@redhat.com> 2.2.2-11
+- Added missing symlinks (bug #69117)
+
+* Tue Jul 23 2002 Tim Powers <timp@redhat.com> 2.2.2-10
+- build using gcc-3.2-0.1
+
+* Tue Jun 25 2002 Than Ngo <than@redhat.com> 2.2.2-9
+- fix to build openmotif (bug #64176)
+
+* Thu Jun 13 2002 Than Ngo <than@redhat.com> 2.2.2-8
+- rebuild in new enviroment
+
+* Sun May 26 2002 Tim Powers <timp@redhat.com>
+- automated rebuild
+
+* Thu May 23 2002 Harald Hoyer <harald@redhat.de> 2.2.2-6
+- patched ltmain.sh to link properly
+
+* Wed May 22 2002 Harald Hoyer <harald@redhat.de> 2.2.2-6
+- specified libraries by full name in files section 
+  (libMrm was missing on alpha)
+
+* Tue Mar 26 2002 Than Ngo <than@redhat.com> 2.2.2-5
+- update new 2.2.2 from ICS
+
+* Sun Mar 24 2002 Than Ngo <than@redhat.com> 2.2.2-4
+- add missing uil
+
+* Fri Mar 22 2002 Tim Powers <timp@redhat.com>
+- rebuilt to try and shake some broken deps in the devel package
+
+* Thu Mar 21 2002 Than Ngo <than@redhat.com> 2.2.2-2
+- rebuild
+
+* Thu Mar 21 2002 Than Ngo <than@redhat.com> 2.2.2-1
+- update to 2.2.2 release
+
+* Mon Feb 22 2002 Than Ngo <than@redhat.com> 2.2.1-3
+- conflict with older lesstif
+
+* Mon Feb 22 2002 Than Ngo <than@redhat.com> 2.2.1-2
+- fix bug #60816
+
+* Fri Feb 22 2002 Than Ngo <than@redhat.com> 2.2.1-1
+- update to 2.2.1 release
+- remove somme patches, which are included in 2.2.1
+
+* Fri Feb 22 2002 Tim Powers <timp@redhat.com>
+- rebuilt in new environment
+
+* Fri Jan 25 2002 Tim Powers <timp@redhat.com>
+- don't obsolete lesstif anymore, play nicely together
+- rebuild against new toolchain
+
+* Wed Jan 21 2002 Than Ngo <than@redhat.com> 2.1.30-11
+- add some patches from Darrell Commander (supporting largefile)
+- fix to build on s390
+
+* Thu Jan 17 2002 Than Ngo <than@redhat.com> 2.1.30-10
+- rebuild in 8.0
+
+* Wed Sep  6 2001 Than Ngo <than@redhat.com>
+- rebuild for ExtraBinge 7.2
+
+* Thu May 03 2001 Than Ngo <than@redhat.com>
+- add 3 official motif patches 
+- add rm -rf $RPM_BUILD_ROOT in install section
+- remove some old patches which are now in official patches
+
+* Fri Dec 29 2000 Than Ngo <than@redhat.com>
+- don't build static debug libraries
+
+* Mon Dec 18 2000 Than Ngo <than@redhat.com>
+- bzip2 source
+
+* Mon Jul 24 2000 Than Ngo <than@redhat.de>
+- rebuilt against gcc-2.96-44
+
+* Wed Jul 12 2000 Than Ngo <than@redhat.de>
+- rebuilt
+
+* Sun Jun 11 2000 Than Ngo <than@redhat.de>
+- fix imake to built with gcc-2.96 (thanks Jakup)
+- put bitmaps in /usr/X11R6/include/X11/bitmaps
+- put bindings in /usr/X11R6/lib/Xm/bindings
+- add define -D_GNU_SOURCE to build Motif
+- gzip man pages
+- cleanup specfile
+
+* Mon May 29 2000 Bernhard Rosenkraenzer <bero@redhat.com>
+- Update to patchlevel 2
+- remove bindings patch, it's included in pl2
+
+* Tue May 16 2000 Matt Wilson <msw@redhat.com>
+- use -fPIC on sparc
+- fixed Ngo's "fixes"
+
+* Mon May 15 2000 Ngo Than <than@redhat.de>
+- added description.
+- fixed spec, added uil stuff.
+
+* Mon May 15 2000 Matt Wilson <msw@redhat.com>
+- initialization of spec file.