diff --git a/mk-2nd.awk b/mk-2nd.awk
new file mode 100644
index 0000000..1f63763
--- /dev/null
+++ b/mk-2nd.awk
@@ -0,0 +1,146 @@
+# $Id: mk-2nd.awk,v 1.19 2005/01/22 16:30:04 tom Exp $
+##############################################################################
+# Copyright (c) 1998-2004,2005 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"), #
+# to deal in the Software without restriction, including without limitation  #
+# the rights to use, copy, modify, merge, publish, distribute, distribute    #
+# with modifications, sublicense, and/or sell copies of the Software, and to #
+# permit persons to whom the Software is furnished to do so, subject to the  #
+# following conditions:                                                      #
+#                                                                            #
+# The above copyright notice and this permission notice shall be included in #
+# all copies or substantial portions of the Software.                        #
+#                                                                            #
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   #
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    #
+# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      #
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    #
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        #
+# DEALINGS IN THE SOFTWARE.                                                  #
+#                                                                            #
+# Except as contained in this notice, the name(s) of the above copyright     #
+# holders shall not be used in advertising or otherwise to promote the sale, #
+# use or other dealings in this Software without prior written               #
+# authorization.                                                             #
+##############################################################################
+#
+# Author: Thomas E. Dickey
+#
+# Generate compile-rules for the modules that we are using in libraries or
+# programs.  We are listing them explicitly because we have turned off the
+# suffix rules (to force compilation with the appropriate flags).  We could use
+# make-recursion but that would result in makefiles that are useless for
+# development.
+#
+# Variables:
+#	model directory into which objects are compiled.
+#	MODEL (uppercase version of "model"; toupper is not portable)
+#	echo (yes iff we will show the $(CC) lines)
+#	subset ("none", "base", "base+ext_funcs" or "termlib")
+#	crenames ("yes" or "no", flag to control whether -c & -o options are used)
+#	cxxrenames ("yes" or "no", flag to control whether -c & -o options are used)
+#	traces ("all" or "DEBUG", to control whether tracing is compiled in)
+#	srcdir is expanded when "configure --srcdir" was used
+#
+# Fields in src/modules:
+#	$1 = module name
+#	$2 = progs|lib|c++
+#	$3 = source-directory
+#
+# Fields in src/modules past $3 are dependencies
+#
+BEGIN	{
+		found = 0
+		using = 0
+	}
+	/^@/ {
+		using = 0
+		if (subset == "none") {
+			using = 1
+		} else if (index(subset,$2) > 0) {
+			if (using == 0) {
+				if (found == 0) {
+					print  ""
+					print  "# generated by mk-2nd.awk"
+					printf "#   model:      %s\n", model
+					printf "#   MODEL:      %s\n", MODEL
+					printf "#   echo:       %s\n", echo 
+					printf "#   subset:     %s\n", subset
+					printf "#   crenames:   %s\n", crenames
+					printf "#   cxxrenames: %s\n", cxxrenames
+					printf "#   traces:     %s\n", traces
+					printf "#   srcdir:     %s\n", srcdir
+				}
+				using = 1
+			}
+		}
+	}
+	/^[@#]/ {
+		next
+	}
+	$1 ~ /trace/ {
+		if (traces != "all" && traces != MODEL && $1 != "lib_trace")
+			next
+	}
+	{
+		if ($0 != "" \
+		 && using != 0) {
+			found = 1
+			if ( $1 != "" ) {
+				print  ""
+				if ( $2 == "c++" ) {
+					compile="CXX"
+					suffix=".cc"
+					use_c_o=cxxrenames
+				} else {
+					compile="CC"
+					suffix=".c"
+					use_c_o=crenames
+				}
+				printf "../%s/%s$o :\t%s/%s%s", model, $1, $3, $1, suffix
+				for (n = 4; n <= NF; n++) printf " \\\n\t\t\t%s", $n
+				print  ""
+				if ( echo == "yes" )
+					atsign=""
+				else {
+					atsign="@"
+					printf "\t@echo 'compiling %s (%s)'\n", $1, model
+				}
+				printf "\t%s", atsign;
+				if ( use_c_o != "yes" ) {
+					printf "cd ../%s; ", model;
+				}
+				# The choice here is between
+				#	base+ext_funcs and
+				#	termlib+ext_tinfo
+				# but they may appear in the same value.
+				if ( subset ~ /base/ ) {
+					mycflags=""
+				} else if ( subset ~ /termlib/ ) {
+					mycflags=" -DUSE_TERMLIB"
+				}
+				printf "$(LIBTOOL_COMPILE) $(%s) $(CFLAGS_%s)%s -c ", compile, MODEL, mycflags
+				if ( $3 == "." || srcdir == "." ) {
+					dir = $3 "/"
+					sub("^\\$\\(srcdir\\)/","",dir);
+					sub("^\\./","",dir);
+					printf "../%s/%s%s%s", name, dir, $1, suffix
+				} else {
+					printf "%s/%s%s", $3, $1, suffix
+				}
+				if ( use_c_o == "yes" ) {
+					printf " -o ../%s/%s$o", model, $1
+				}
+			} else {
+				printf "%s", $1
+				for (n = 2; n <= NF; n++) printf " %s", $n
+			}
+			print  ""
+		}
+	}
+END	{
+		print  ""
+	}
