diff --git a/mk-1st.awk b/mk-1st.awk
index e2f54ea..1b88127 100644
--- a/mk-1st.awk
+++ b/mk-1st.awk
@@ -1,6 +1,6 @@
-# $Id: mk-1st.awk,v 1.78 2007/03/24 22:10:55 tom Exp $
+# $Id: mk-1st.awk,v 1.98 2014/12/20 23:54:22 tom Exp $
 ##############################################################################
-# Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.                #
+# Copyright (c) 1998-2012,2013 Free Software Foundation, Inc.                #
 #                                                                            #
 # Permission is hereby granted, free of charge, to any person obtaining a    #
 # copy of this software and associated documentation files (the "Software"), #
@@ -34,14 +34,17 @@
 #	name		  (library name, e.g., "ncurses", "panel", "forms", "menus")
 #	traces		  ("all" or "DEBUG", to control whether tracing is compiled in)
 #	MODEL		  (e.g., "DEBUG", uppercase; toupper is not portable)
+#	CXX_MODEL	  (e.g., "DEBUG", uppercase)
 #	model		  (directory into which we compile, e.g., "obj")
 #	prefix		  (e.g., "lib", for Unix-style libraries)
 #	suffix		  (e.g., "_g.a", for debug libraries)
 #	subset		  ("none", "base", "base+ext_funcs" or "termlib", etc.)
+#	driver		  ("yes" or "no", depends on --enable-term-driver)
 #	ShlibVer	  ("rel", "abi" or "auto", to augment DoLinks variable)
 #	ShlibVerInfix ("yes" or "no", determines location of version #)
-#   TermlibRoot   ("tinfo" or other root for libterm.so)
-#   TermlibSuffix (".so" or other suffix for libterm.so)
+#	SymLink		  ("ln -s", etc)
+#	TermlibRoot	  ("tinfo" or other root for libterm.so)
+#	TermlibSuffix (".so" or other suffix for libterm.so)
 #	ReLink		  ("yes", or "no", flag to rebuild shared libs on install)
 #	DoLinks		  ("yes", "reverse" or "no", flag to add symbolic links)
 #	rmSoLocs	  ("yes" or "no", flag to add extra clean target)
@@ -49,6 +52,7 @@
 #	overwrite	  ("yes" or "no", flag to add link to libcurses.a
 #	depend		  (optional dependencies for all objects, e.g, ncurses_cfg.h)
 #	host		  (cross-compile host, if any)
+#	libtool_version (libtool "-version-info" or "-version-number")
 #
 # Notes:
 #	CLIXs nawk does not like underscores in command-line variable names.
@@ -59,7 +63,7 @@
 		return ( subset ~ /^ticlib$/ );
 	}
 function is_termlib() {
-		return ( subset ~ /^(ticlib\+)?termlib(\+ext_tinfo)?$/ );
+		return ( subset ~ /^(ticlib\+)?termlib((\+[^+ ]+)*\+[a-z_]+_tinfo)?$/ );
 	}
 # see lib_name
 function lib_name_of(a_name) {
@@ -67,7 +71,7 @@
 	}
 # see imp_name
 function imp_name_of(a_name) {
-		if (ShlibVerInfix == "cygdll") {
+		if (ShlibVerInfix == "cygdll" || ShlibVerInfix == "msysdll" || ShlibVerInfix == "mingw") {
 			result = sprintf("%s%s%s.a", prefix, a_name, suffix);
 		} else {
 			result = "";
@@ -78,6 +82,10 @@
 function abi_name_of(a_name) {
 		if (ShlibVerInfix == "cygdll") {
 			result = sprintf("%s%s$(ABI_VERSION)%s", "cyg", a_name, suffix);
+		} else if (ShlibVerInfix == "msysdll") {
+			result = sprintf("%s%s$(ABI_VERSION)%s", "msys-", a_name, suffix);
+		} else if (ShlibVerInfix == "mingw") {
+			result = sprintf("%s%s$(ABI_VERSION)%s", prefix, a_name, suffix);
 		} else if (ShlibVerInfix == "yes") {
 			result = sprintf("%s%s.$(ABI_VERSION)%s", prefix, a_name, suffix);
 		} else {
@@ -89,6 +97,10 @@
 function rel_name_of(a_name) {
 		if (ShlibVerInfix == "cygdll") {
 			result = sprintf("%s%s$(REL_VERSION)%s", "cyg", a_name, suffix);
+		} else if (ShlibVerInfix == "msysdll") {
+			result = sprintf("%s%s$(ABI_VERSION)%s", "msys-", a_name, suffix);
+		} else if (ShlibVerInfix == "mingw") {
+			result = sprintf("%s%s$(REL_VERSION)%s", prefix, a_name, suffix);
 		} else if (ShlibVerInfix == "yes") {
 			result = sprintf("%s%s.$(REL_VERSION)%s", prefix, a_name, suffix);
 		} else {
@@ -105,7 +117,7 @@
 		} else {
 			if ( ShlibVer == "rel" ) {
 				result = rel_name_of(a_name);
-			} else if ( ShlibVer == "abi" || ShlibVer == "cygdll" ) {
+			} else if ( ShlibVer == "abi" || ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw" ) {
 				result = abi_name_of(a_name);
 			} else {
 				result = lib_name_of(a_name);
@@ -115,28 +127,45 @@
 	}
 function symlink(src,dst) {
 		if ( src != dst ) {
-			printf "rm -f %s; ", dst
+			if ( SymLink !~ /.*-f.*/ ) {
+				printf "rm -f %s; ", dst
+			}
 			printf "$(LN_S) %s %s; ", src, dst
 		}
 	}
 function rmlink(directory, dst) {
-		printf "\t-rm -f %s/%s\n", directory, dst
+		if ( dst != "" ) {
+			printf "\t-rm -f %s/%s\n", directory, dst
+		}
 	}
 function removelinks(directory) {
-		rmlink(directory, end_name);
+		nlinks = 0;
+		links[nlinks++] = end_name;
 		if ( DoLinks == "reverse" ) {
 			if ( ShlibVer == "rel" ) {
-				rmlink(directory, abi_name);
-				rmlink(directory, rel_name);
+				links[nlinks++] = abi_name;
+				links[nlinks++] = rel_name;
 			} else if ( ShlibVer == "abi" ) {
-				rmlink(directory, abi_name);
+				links[nlinks++] = abi_name;
 			}
 		} else {
 			if ( ShlibVer == "rel" ) {
-				rmlink(directory, abi_name);
-				rmlink(directory, lib_name);
+				links[nlinks++] = abi_name;
+				links[nlinks++] = lib_name;
 			} else if ( ShlibVer == "abi" ) {
-				rmlink(directory, lib_name);
+				links[nlinks++] = lib_name;
+			}
+		}
+		for (j = 0; j < nlinks; ++j) {
+			found = 0;
+			for (k = 0; k < j; ++k ) {
+				if ( links[j] == links[k] ) {
+					found = 1;
+					break;
+				}
+			}
+			if ( !found ) {
+				rmlink(directory, links[j]);
 			}
 		}
 	}
@@ -144,7 +173,7 @@
 		printf "\t$(MK_SHARED_LIB) $(%s_OBJS) $(%s) $(LDFLAGS)\n", objs, shlib_list
 	}
 function sharedlinks(directory) {
-		if ( ShlibVer != "auto" && ShlibVer != "cygdll" ) {
+		if ( ShlibVer != "auto" && ShlibVer != "cygdll" && ShlibVer != "msysdll" && ShlibVer != "mingw" ) {
 			printf "\tcd %s && (", directory
 			if ( DoLinks == "reverse" ) {
 				if ( ShlibVer == "rel" ) {
@@ -177,6 +206,11 @@
 		dst_libs = sprintf("%s/%s", directory, end_name);
 		printf "%s : \\\n", dst_libs
 		printf "\t\t%s \\\n", directory
+		if (subset == "ticlib" && driver == "yes" ) {
+			base = name;
+			sub(/^tic/, "ncurses", base); # workaround for "w"
+			printf "\t\t%s/%s \\\n", directory, end_name_of(base);
+		}
 		if (subset ~ /^base/ || subset == "ticlib" ) {
 			save_suffix = suffix
 			sub(/^[^.]\./,".",suffix)
@@ -186,7 +220,7 @@
 			printf "\t\t%s/%s \\\n", directory, termlib_end_of();
 			suffix = save_suffix
 		}
-		printf "\t\t$(%s_OBJS)\n", OBJS
+		printf "\t\t$(RESULTING_SYMS) $(%s_OBJS)\n", OBJS
 		printf "\t@echo linking $@\n"
 		if ( is_ticlib() ) {
 			make_shlib(OBJS, "TICS_LIST")
@@ -219,8 +253,9 @@
 		printf "\t%s %s %s\n", program, src_name, dst_name
 	}
 BEGIN	{
-		found = 0
-		using = 0
+		TOOL_PREFIX = "";
+		found = 0;
+		using = 0;
 	}
 	/^@/ {
 		using = 0
@@ -229,17 +264,29 @@
 		} else if (index(subset,$2) > 0) {
 			if (using == 0) {
 				if (found == 0) {
+					if ( name ~ /^.*\+\+.*/ ) {
+						if ( CXX_MODEL == "NORMAL" && MODEL == "SHARED" ) {
+							print  ""
+							printf "# overriding model from %s to match CXX_MODEL\n", MODEL;
+							MODEL = "NORMAL";
+							suffix = ".a";
+							DoLinks = "no";
+						}
+					}
 					print  ""
 					printf "# generated by mk-1st.awk (subset=%s)\n", subset
 					printf "#  name:          %s\n", name 
 					printf "#  traces:        %s\n", traces 
 					printf "#  MODEL:         %s\n", MODEL 
+					printf "#  CXX_MODEL:     %s\n", CXX_MODEL 
 					printf "#  model:         %s\n", model 
 					printf "#  prefix:        %s\n", prefix 
 					printf "#  suffix:        %s\n", suffix 
 					printf "#  subset:        %s\n", subset 
+					printf "#  driver:        %s\n", driver 
 					printf "#  ShlibVer:      %s\n", ShlibVer 
 					printf "#  ShlibVerInfix: %s\n", ShlibVerInfix 
+					printf "#  SymLink:       %s\n", SymLink 
 					printf "#  TermlibRoot:   %s\n", TermlibRoot 
 					printf "#  TermlibSuffix: %s\n", TermlibSuffix 
 					printf "#  ReLink:        %s\n", ReLink 
@@ -280,12 +327,23 @@
 			if ( found == 0 )
 			{
 				printf "%s_OBJS =", OBJS
-				if ( $2 == "lib" )
-					found = 1
-				else
-					found = 2
+				if ( $2 == "lib" ) {
+					found = 1;
+				} else if ( $2 == "c++" ) {
+					TOOL_PREFIX = "CXX_";
+					found = 1;
+				} else {
+					found = 2;
+				}
+				if ( $2 == "c++" ) {
+					CC_NAME="CXX"
+					CC_FLAG="CXXFLAGS"
+				} else {
+					CC_NAME="CC"
+					CC_FLAG="CFLAGS"
+				}
 			}
-			printf " \\\n\t../%s/%s$o", model, $1
+			printf " \\\n\t../%s/%s$o", model, $1;
 		}
 	}
 END	{
@@ -311,7 +369,7 @@
 				print  "install \\"
 				print  "install.libs \\"
 
-				if ( ShlibVer == "cygdll" ) {
+				if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw") {
 
 					dst_dirs = "$(DESTDIR)$(bindir) $(DESTDIR)$(libdir)";
 					printf "install.%s :: %s $(LIBRARIES)\n", name, dst_dirs
@@ -332,14 +390,18 @@
 
 				if ( overwrite == "yes" && name == "ncurses" )
 				{
-					if ( ShlibVer == "cygdll" ) {
+					if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw") {
 						ovr_name = sprintf("libcurses%s.a", suffix)
 						printf "\t@echo linking %s to %s\n", imp_name, ovr_name
-						printf "\tcd $(DESTDIR)$(libdir) && (rm -f %s; $(LN_S) %s %s; )\n", ovr_name, imp_name, ovr_name
+						printf "\tcd $(DESTDIR)$(libdir) && ("
+						symlink(imp_name, ovr_name)
+						printf ")\n"
 					} else {
 						ovr_name = sprintf("libcurses%s", suffix)
 						printf "\t@echo linking %s to %s\n", end_name, ovr_name
-						printf "\tcd $(DESTDIR)$(libdir) && (rm -f %s; $(LN_S) %s %s; )\n", ovr_name, end_name, ovr_name
+						printf "\tcd $(DESTDIR)$(libdir) && ("
+						symlink(end_name, ovr_name)
+						printf ")\n"
 					}
 				}
 				if ( ldconfig != "" && ldconfig != ":" ) {
@@ -349,7 +411,7 @@
 				print  "uninstall \\"
 				print  "uninstall.libs \\"
 				printf "uninstall.%s ::\n", name
-				if ( ShlibVer == "cygdll" ) {
+				if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw") {
 
 					printf "\t@echo uninstalling $(DESTDIR)$(bindir)/%s\n", end_name
 					printf "\t-@rm -f $(DESTDIR)$(bindir)/%s\n", end_name
@@ -362,11 +424,7 @@
 					removelinks("$(DESTDIR)$(libdir)")
 					if ( overwrite == "yes" && name == "ncurses" )
 					{
-						if ( ShlibVer == "cygdll" ) {
-							ovr_name = sprintf("libcurses%s.a", suffix)
-						} else {
-							ovr_name = sprintf("libcurses%s", suffix)
-						}
+						ovr_name = sprintf("libcurses%s", suffix)
 						printf "\t-@rm -f $(DESTDIR)$(libdir)/%s\n", ovr_name
 					}
 				}
@@ -379,14 +437,19 @@
 			}
 			else if ( MODEL == "LIBTOOL" )
 			{
-				if ( $2 == "c++" ) {
-					compile="CXX"
-				} else {
-					compile="CC"
-				}
 				end_name = lib_name;
 				printf "../lib/%s : $(%s_OBJS)\n", lib_name, OBJS
-				printf "\tcd ../lib && $(LIBTOOL_LINK) $(%s) -o %s $(%s_OBJS:$o=.lo) -rpath $(DESTDIR)$(libdir) -version-info $(NCURSES_MAJOR):$(NCURSES_MINOR) $(SHLIB_LIST)\n", compile, lib_name, OBJS
+				if ( is_ticlib() ) {
+					which_list = "TICS_LIST";
+				} else if ( is_termlib() ) {
+					which_list = "TINFO_LIST";
+				} else {
+					which_list = "SHLIB_LIST";
+				}
+				printf "\tcd ../lib && $(LIBTOOL_LINK) $(%s) $(%s) \\\n", CC_NAME, CC_FLAG;
+				printf "\t\t-o %s $(%s_OBJS:$o=.lo) \\\n", lib_name, OBJS;
+				printf "\t\t-rpath $(DESTDIR)$(libdir) \\\n";
+				printf "\t\t%s $(NCURSES_MAJOR):$(NCURSES_MINOR) $(LT_UNDEF) $(%s) $(LDFLAGS)\n", libtool_version, which_list;
 				print  ""
 				print  "install \\"
 				print  "install.libs \\"
@@ -404,7 +467,7 @@
 			{
 				end_name = lib_name;
 				printf "../lib/%s : $(%s_OBJS)\n", lib_name, OBJS
-				printf "\t$(AR) $(AR_OPTS) $@ $?\n"
+				printf "\t$(%sAR) $(%sARFLAGS) $@ $?\n", TOOL_PREFIX, TOOL_PREFIX;
 				printf "\t$(RANLIB) $@\n"
 				if ( host == "vxworks" )
 				{
@@ -420,7 +483,9 @@
 				{
 					printf "\t@echo linking libcurses.a to libncurses.a\n"
 					printf "\t-@rm -f $(DESTDIR)$(libdir)/libcurses.a\n"
-					printf "\t(cd $(DESTDIR)$(libdir) && $(LN_S) libncurses.a libcurses.a)\n"
+					printf "\t(cd $(DESTDIR)$(libdir) && "
+					symlink("libncurses.a", "libcurses.a")
+					printf ")\n"
 				}
 				printf "\t$(RANLIB) $(DESTDIR)$(libdir)/%s\n", lib_name
 				if ( host == "vxworks" )
