xref: /freebsd/contrib/ncurses/mk-1st.awk (revision 21817992b3314c908ab50f0bb88d2ee750b9c4ac)
1*21817992SBaptiste Daroussin# $Id: mk-1st.awk,v 1.125 2023/04/22 15:49:59 tom Exp $
20e3d5408SPeter Wemm##############################################################################
3*21817992SBaptiste Daroussin# Copyright 2018-2021,2023 Thomas E. Dickey                                  #
4e1865124SBaptiste Daroussin# Copyright 1998-2016,2017 Free Software Foundation, Inc.                    #
50e3d5408SPeter Wemm#                                                                            #
60e3d5408SPeter Wemm# Permission is hereby granted, free of charge, to any person obtaining a    #
70e3d5408SPeter Wemm# copy of this software and associated documentation files (the "Software"), #
80e3d5408SPeter Wemm# to deal in the Software without restriction, including without limitation  #
90e3d5408SPeter Wemm# the rights to use, copy, modify, merge, publish, distribute, distribute    #
100e3d5408SPeter Wemm# with modifications, sublicense, and/or sell copies of the Software, and to #
110e3d5408SPeter Wemm# permit persons to whom the Software is furnished to do so, subject to the  #
120e3d5408SPeter Wemm# following conditions:                                                      #
130e3d5408SPeter Wemm#                                                                            #
140e3d5408SPeter Wemm# The above copyright notice and this permission notice shall be included in #
150e3d5408SPeter Wemm# all copies or substantial portions of the Software.                        #
160e3d5408SPeter Wemm#                                                                            #
170e3d5408SPeter Wemm# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
180e3d5408SPeter Wemm# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   #
190e3d5408SPeter Wemm# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    #
200e3d5408SPeter Wemm# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      #
210e3d5408SPeter Wemm# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    #
220e3d5408SPeter Wemm# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        #
230e3d5408SPeter Wemm# DEALINGS IN THE SOFTWARE.                                                  #
240e3d5408SPeter Wemm#                                                                            #
250e3d5408SPeter Wemm# Except as contained in this notice, the name(s) of the above copyright     #
260e3d5408SPeter Wemm# holders shall not be used in advertising or otherwise to promote the sale, #
270e3d5408SPeter Wemm# use or other dealings in this Software without prior written               #
280e3d5408SPeter Wemm# authorization.                                                             #
290e3d5408SPeter Wemm##############################################################################
300e3d5408SPeter Wemm#
314a1a9510SRong-En Fan# Author: Thomas E. Dickey
320e3d5408SPeter Wemm#
330e3d5408SPeter Wemm# Generate list of objects for a given model library
340e3d5408SPeter Wemm# Variables:
350e3d5408SPeter Wemm#	name		  (library name, e.g., "ncurses", "panel", "forms", "menus")
364a1a9510SRong-En Fan#	traces		  ("all" or "DEBUG", to control whether tracing is compiled in)
374a1a9510SRong-En Fan#	MODEL		  (e.g., "DEBUG", uppercase; toupper is not portable)
3873f0a83dSXin LI#	CXX_MODEL	  (e.g., "DEBUG", uppercase)
39*21817992SBaptiste Daroussin#	LIB_SUFFIX	  (e.g., "", "w", "t", "tw")
40*21817992SBaptiste Daroussin#	USE_LIB_SUFFIX (e.g., "", "w", "t", "tw")
410e3d5408SPeter Wemm#	model		  (directory into which we compile, e.g., "obj")
420e3d5408SPeter Wemm#	prefix		  (e.g., "lib", for Unix-style libraries)
430e3d5408SPeter Wemm#	suffix		  (e.g., "_g.a", for debug libraries)
445ca44d1cSRong-En Fan#	subset		  ("none", "base", "base+ext_funcs" or "termlib", etc.)
4573f0a83dSXin LI#	driver		  ("yes" or "no", depends on --enable-term-driver)
4618259542SPeter Wemm#	ShlibVer	  ("rel", "abi" or "auto", to augment DoLinks variable)
4739f2269fSPeter Wemm#	ShlibVerInfix ("yes" or "no", determines location of version #)
4806bfebdeSXin LI#	SymLink		  ("ln -s", etc)
495ca44d1cSRong-En Fan#	TermlibRoot	  ("tinfo" or other root for libterm.so)
505ca44d1cSRong-En Fan#	TermlibSuffix (".so" or other suffix for libterm.so)
515ca44d1cSRong-En Fan#	ReLink		  ("yes", or "no", flag to rebuild shared libs on install)
52aae38d10SBaptiste Daroussin#	ReRanlib	  ("yes", or "no", flag to rerun ranlib for installing static)
530e3d5408SPeter Wemm#	DoLinks		  ("yes", "reverse" or "no", flag to add symbolic links)
540e3d5408SPeter Wemm#	rmSoLocs	  ("yes" or "no", flag to add extra clean target)
554a1a9510SRong-En Fan#	ldconfig	  (path for this tool, if used)
56*21817992SBaptiste Daroussin#	make_phony    ("yes" if the make-program accepts ".PHONY" directive.
570e3d5408SPeter Wemm#	overwrite	  ("yes" or "no", flag to add link to libcurses.a
584a1a9510SRong-En Fan#	depend		  (optional dependencies for all objects, e.g, ncurses_cfg.h)
594a1a9510SRong-En Fan#	host		  (cross-compile host, if any)
6006bfebdeSXin LI#	libtool_version (libtool "-version-info" or "-version-number")
610e3d5408SPeter Wemm#
620e3d5408SPeter Wemm# Notes:
630e3d5408SPeter Wemm#	CLIXs nawk does not like underscores in command-line variable names.
644a1a9510SRong-En Fan#	Mixed-case variable names are ok.
65*21817992SBaptiste Daroussin#	HP-UX requires shared libraries to have executable permissions.
660e3d5408SPeter Wemm#
675ca44d1cSRong-En Fanfunction is_ticlib() {
685ca44d1cSRong-En Fan		return ( subset ~ /^ticlib$/ );
695ca44d1cSRong-En Fan	}
705ca44d1cSRong-En Fanfunction is_termlib() {
7106bfebdeSXin LI		return ( subset ~ /^(ticlib\+)?termlib((\+[^+ ]+)*\+[a-z_]+_tinfo)?$/ );
725ca44d1cSRong-En Fan	}
735ca44d1cSRong-En Fan# see lib_name
745ca44d1cSRong-En Fanfunction lib_name_of(a_name) {
755ca44d1cSRong-En Fan		return sprintf("%s%s%s", prefix, a_name, suffix)
765ca44d1cSRong-En Fan	}
775ca44d1cSRong-En Fan# see imp_name
785ca44d1cSRong-En Fanfunction imp_name_of(a_name) {
7973f0a83dSXin LI		if (ShlibVerInfix == "cygdll" || ShlibVerInfix == "msysdll" || ShlibVerInfix == "mingw") {
805ca44d1cSRong-En Fan			result = sprintf("%s%s%s.a", prefix, a_name, suffix);
817a656419SBaptiste Daroussin		} else if (ShlibVerInfix == "msvcdll") {
827a656419SBaptiste Daroussin			result = sprintf("%s%s%s.lib", prefix, a_name, suffix);
835ca44d1cSRong-En Fan		} else{
845ca44d1cSRong-En Fan			result = "";
855ca44d1cSRong-En Fan		}
865ca44d1cSRong-En Fan		return result;
875ca44d1cSRong-En Fan	}
885ca44d1cSRong-En Fan# see abi_name
895ca44d1cSRong-En Fanfunction abi_name_of(a_name) {
905ca44d1cSRong-En Fan		if (ShlibVerInfix == "cygdll") {
915ca44d1cSRong-En Fan			result = sprintf("%s%s$(ABI_VERSION)%s", "cyg", a_name, suffix);
9273f0a83dSXin LI		} else if (ShlibVerInfix == "msysdll") {
9373f0a83dSXin LI			result = sprintf("%s%s$(ABI_VERSION)%s", "msys-", a_name, suffix);
947a656419SBaptiste Daroussin		} else if (ShlibVerInfix == "mingw" || ShlibVerInfix == "msvcdll") {
9573f0a83dSXin LI			result = sprintf("%s%s$(ABI_VERSION)%s", prefix, a_name, suffix);
965ca44d1cSRong-En Fan		} else if (ShlibVerInfix == "yes") {
975ca44d1cSRong-En Fan			result = sprintf("%s%s.$(ABI_VERSION)%s", prefix, a_name, suffix);
985ca44d1cSRong-En Fan		} else {
995ca44d1cSRong-En Fan			result = sprintf("%s.$(ABI_VERSION)", lib_name_of(a_name));
1005ca44d1cSRong-En Fan		}
1015ca44d1cSRong-En Fan		return result;
1025ca44d1cSRong-En Fan	}
1035ca44d1cSRong-En Fan# see rel_name
1045ca44d1cSRong-En Fanfunction rel_name_of(a_name) {
1055ca44d1cSRong-En Fan		if (ShlibVerInfix == "cygdll") {
1065ca44d1cSRong-En Fan			result = sprintf("%s%s$(REL_VERSION)%s", "cyg", a_name, suffix);
10773f0a83dSXin LI		} else if (ShlibVerInfix == "msysdll") {
10873f0a83dSXin LI			result = sprintf("%s%s$(ABI_VERSION)%s", "msys-", a_name, suffix);
1097a656419SBaptiste Daroussin		} else if (ShlibVerInfix == "mingw" || ShlibVerInfix == "msvcdll") {
11073f0a83dSXin LI			result = sprintf("%s%s$(REL_VERSION)%s", prefix, a_name, suffix);
1115ca44d1cSRong-En Fan		} else if (ShlibVerInfix == "yes") {
1125ca44d1cSRong-En Fan			result = sprintf("%s%s.$(REL_VERSION)%s", prefix, a_name, suffix);
1135ca44d1cSRong-En Fan		} else {
1145ca44d1cSRong-En Fan			result = sprintf("%s.$(REL_VERSION)", lib_name_of(a_name));
1155ca44d1cSRong-En Fan		}
1165ca44d1cSRong-En Fan		return result;
1175ca44d1cSRong-En Fan	}
1185ca44d1cSRong-En Fan# see end_name
1195ca44d1cSRong-En Fanfunction end_name_of(a_name) {
1205ca44d1cSRong-En Fan		if ( MODEL != "SHARED" ) {
1215ca44d1cSRong-En Fan			result = lib_name_of(a_name);
1225ca44d1cSRong-En Fan		} else if ( DoLinks == "reverse") {
1235ca44d1cSRong-En Fan			result = lib_name_of(a_name);
1245ca44d1cSRong-En Fan		} else {
1255ca44d1cSRong-En Fan			if ( ShlibVer == "rel" ) {
1265ca44d1cSRong-En Fan				result = rel_name_of(a_name);
1277a656419SBaptiste Daroussin			} else if ( ShlibVer == "abi" || ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw" || ShlibVer == "msvcdll" ) {
1285ca44d1cSRong-En Fan				result = abi_name_of(a_name);
1295ca44d1cSRong-En Fan			} else {
1305ca44d1cSRong-En Fan				result = lib_name_of(a_name);
1315ca44d1cSRong-En Fan			}
1325ca44d1cSRong-En Fan		}
1335ca44d1cSRong-En Fan		return result
1345ca44d1cSRong-En Fan	}
1350e3d5408SPeter Wemmfunction symlink(src,dst) {
1360e3d5408SPeter Wemm		if ( src != dst ) {
13706bfebdeSXin LI			if ( SymLink !~ /.*-f.*/ ) {
1380e3d5408SPeter Wemm				printf "rm -f %s; ", dst
13906bfebdeSXin LI			}
1400e3d5408SPeter Wemm			printf "$(LN_S) %s %s; ", src, dst
1410e3d5408SPeter Wemm		}
1420e3d5408SPeter Wemm	}
14318259542SPeter Wemmfunction rmlink(directory, dst) {
14473f0a83dSXin LI		if ( dst != "" ) {
14518259542SPeter Wemm			printf "\t-rm -f %s/%s\n", directory, dst
1460e3d5408SPeter Wemm		}
14773f0a83dSXin LI	}
14818259542SPeter Wemmfunction removelinks(directory) {
14973f0a83dSXin LI		nlinks = 0;
15073f0a83dSXin LI		links[nlinks++] = end_name;
15118259542SPeter Wemm		if ( DoLinks == "reverse" ) {
15218259542SPeter Wemm			if ( ShlibVer == "rel" ) {
15373f0a83dSXin LI				links[nlinks++] = abi_name;
15473f0a83dSXin LI				links[nlinks++] = rel_name;
15518259542SPeter Wemm			} else if ( ShlibVer == "abi" ) {
15673f0a83dSXin LI				links[nlinks++] = abi_name;
15718259542SPeter Wemm			}
1580e3d5408SPeter Wemm		} else {
15918259542SPeter Wemm			if ( ShlibVer == "rel" ) {
16073f0a83dSXin LI				links[nlinks++] = abi_name;
16173f0a83dSXin LI				links[nlinks++] = lib_name;
16218259542SPeter Wemm			} else if ( ShlibVer == "abi" ) {
16373f0a83dSXin LI				links[nlinks++] = lib_name;
16473f0a83dSXin LI			}
16573f0a83dSXin LI		}
16673f0a83dSXin LI		for (j = 0; j < nlinks; ++j) {
16773f0a83dSXin LI			found = 0;
16873f0a83dSXin LI			for (k = 0; k < j; ++k ) {
16973f0a83dSXin LI				if ( links[j] == links[k] ) {
17073f0a83dSXin LI					found = 1;
17173f0a83dSXin LI					break;
17273f0a83dSXin LI				}
17373f0a83dSXin LI			}
17473f0a83dSXin LI			if ( !found ) {
17573f0a83dSXin LI				rmlink(directory, links[j]);
1760e3d5408SPeter Wemm			}
17718259542SPeter Wemm		}
17818259542SPeter Wemm	}
1794a1a9510SRong-En Fanfunction make_shlib(objs, shlib_list) {
180aae38d10SBaptiste Daroussin		printf "\t$(MK_SHARED_LIB) $(%s_OBJS) $(%s)\n", objs, shlib_list
1814a1a9510SRong-En Fan	}
18218259542SPeter Wemmfunction sharedlinks(directory) {
1837a656419SBaptiste Daroussin		if ( ShlibVer != "auto" && ShlibVer != "cygdll" && ShlibVer != "msysdll" && ShlibVer != "mingw" && ShlibVer != "msvcdll" ) {
1840e3d5408SPeter Wemm			printf "\tcd %s && (", directory
18518259542SPeter Wemm			if ( DoLinks == "reverse" ) {
18618259542SPeter Wemm				if ( ShlibVer == "rel" ) {
18718259542SPeter Wemm					symlink(lib_name, abi_name);
18818259542SPeter Wemm					symlink(abi_name, rel_name);
18918259542SPeter Wemm				} else if ( ShlibVer == "abi" ) {
19018259542SPeter Wemm					symlink(lib_name, abi_name);
1910e3d5408SPeter Wemm				}
1920e3d5408SPeter Wemm			} else {
19318259542SPeter Wemm				if ( ShlibVer == "rel" ) {
19418259542SPeter Wemm					symlink(rel_name, abi_name);
19518259542SPeter Wemm					symlink(abi_name, lib_name);
19618259542SPeter Wemm				} else if ( ShlibVer == "abi" ) {
19718259542SPeter Wemm					symlink(abi_name, lib_name);
1980e3d5408SPeter Wemm				}
1990e3d5408SPeter Wemm			}
20018259542SPeter Wemm			printf ")\n"
2010e3d5408SPeter Wemm		}
2020e3d5408SPeter Wemm	}
2035ca44d1cSRong-En Fan# termlib may be named explicitly via "--with-termlib=XXX", which overrides
2045ca44d1cSRong-En Fan# any suffix.  Temporarily override "suffix" to account for this.
2055ca44d1cSRong-En Fanfunction termlib_end_of() {
2065ca44d1cSRong-En Fan	termlib_save_suffix = suffix;
2075ca44d1cSRong-En Fan	suffix = TermlibSuffix;
2085ca44d1cSRong-En Fan	termlib_temp_result = end_name_of(TermlibRoot);
2095ca44d1cSRong-En Fan	suffix = termlib_save_suffix;
2105ca44d1cSRong-En Fan	return termlib_temp_result;
2114a1a9510SRong-En Fan}
2125ca44d1cSRong-En Fanfunction shlib_build(directory) {
2135ca44d1cSRong-En Fan		dst_libs = sprintf("%s/%s", directory, end_name);
2145ca44d1cSRong-En Fan		printf "%s : \\\n", dst_libs
21573f0a83dSXin LI		if (subset == "ticlib" && driver == "yes" ) {
21673f0a83dSXin LI			base = name;
21773f0a83dSXin LI			sub(/^tic/, "ncurses", base); # workaround for "w"
21873f0a83dSXin LI			printf "\t\t%s/%s \\\n", directory, end_name_of(base);
21973f0a83dSXin LI		}
2205ca44d1cSRong-En Fan		if (subset ~ /^base/ || subset == "ticlib" ) {
2215ca44d1cSRong-En Fan			save_suffix = suffix
2225ca44d1cSRong-En Fan			sub(/^[^.]\./,".",suffix)
2235ca44d1cSRong-En Fan			if (directory != "../lib") {
2245ca44d1cSRong-En Fan				printf "\t\t%s/%s \\\n", "../lib", termlib_end_of();
2255ca44d1cSRong-En Fan			}
2265ca44d1cSRong-En Fan			printf "\t\t%s/%s \\\n", directory, termlib_end_of();
2275ca44d1cSRong-En Fan			suffix = save_suffix
2285ca44d1cSRong-En Fan		}
229aae38d10SBaptiste Daroussin		printf "\t\t$(RESULTING_SYMS) $(%s_OBJS)\n", OBJS
2304a1a9510SRong-En Fan		printf "\t@echo linking $@\n"
231aae38d10SBaptiste Daroussin		printf "\t@mkdir -p %s\n", directory
232aae38d10SBaptiste Daroussin		if ( ReLink != "yes" ) {
233aae38d10SBaptiste Daroussin			printf "\t@sleep 1\n"
234aae38d10SBaptiste Daroussin		}
2355ca44d1cSRong-En Fan		if ( is_ticlib() ) {
2365ca44d1cSRong-En Fan			make_shlib(OBJS, "TICS_LIST")
2375ca44d1cSRong-En Fan		} else if ( is_termlib() ) {
2384a1a9510SRong-En Fan			make_shlib(OBJS, "TINFO_LIST")
2394a1a9510SRong-En Fan		} else {
2404a1a9510SRong-En Fan			make_shlib(OBJS, "SHLIB_LIST")
2414a1a9510SRong-En Fan		}
2424a1a9510SRong-En Fan		sharedlinks(directory)
2434a1a9510SRong-En Fan	}
2445ca44d1cSRong-En Fanfunction shlib_install(directory) {
2455ca44d1cSRong-En Fan		src_lib1 = sprintf("../lib/%s", end_name);
2465ca44d1cSRong-En Fan		dst_lib1 = sprintf("%s/%s", directory, end_name);
2475ca44d1cSRong-En Fan		printf "%s : \\\n", dst_lib1
2485ca44d1cSRong-En Fan		printf "\t\t%s \\\n", directory
2495ca44d1cSRong-En Fan		printf "\t\t%s\n", src_lib1
2505ca44d1cSRong-En Fan		printf "\t@echo installing $@\n"
2515ca44d1cSRong-En Fan		printf "\t$(INSTALL_LIB) %s %s\n", src_lib1, dst_lib1;
2525ca44d1cSRong-En Fan		sharedlinks(directory)
2535ca44d1cSRong-En Fan	}
2544a1a9510SRong-En Fanfunction install_dll(directory,filename) {
2554a1a9510SRong-En Fan		src_name = sprintf("../lib/%s", filename);
2564a1a9510SRong-En Fan		dst_name = sprintf("$(DESTDIR)%s/%s", directory, filename);
2574a1a9510SRong-En Fan		printf "\t@echo installing %s as %s\n", src_name, dst_name
2584a1a9510SRong-En Fan		if ( directory == "$(bindir)" ) {
2594a1a9510SRong-En Fan			program = "$(INSTALL) -m 755";
2604a1a9510SRong-En Fan		} else {
2614a1a9510SRong-En Fan			program = "$(INSTALL_LIB)";
2624a1a9510SRong-En Fan		}
2634a1a9510SRong-En Fan		printf "\t%s %s %s\n", program, src_name, dst_name
2644a1a9510SRong-En Fan	}
2657a656419SBaptiste Daroussinfunction in_subset(value) {
2667a656419SBaptiste Daroussin		value = " " value " ";
2677a656419SBaptiste Daroussin		check = subset;
2687a656419SBaptiste Daroussin		gsub("[+]", " ", check);
2697a656419SBaptiste Daroussin		check = " " check " ";
2707a656419SBaptiste Daroussin		return index(check,value);
2717a656419SBaptiste Daroussin	}
272*21817992SBaptiste Daroussinfunction trim_suffix(value) {
273*21817992SBaptiste Daroussin	if (USE_LIB_SUFFIX != "" && length(value) > length(USE_LIB_SUFFIX)) {
274*21817992SBaptiste Daroussin		check = substr(value, 1 + length(value) - length(USE_LIB_SUFFIX));
275*21817992SBaptiste Daroussin		if (check == USE_LIB_SUFFIX) {
276*21817992SBaptiste Daroussin			value = substr(value, 1, length(value) - length(USE_LIB_SUFFIX));
277*21817992SBaptiste Daroussin		}
278*21817992SBaptiste Daroussin	}
279*21817992SBaptiste Daroussin	return value;
280*21817992SBaptiste Daroussin}
2810e3d5408SPeter WemmBEGIN	{
28273f0a83dSXin LI		TOOL_PREFIX = "";
28373f0a83dSXin LI		found = 0;
28473f0a83dSXin LI		using = 0;
2850e3d5408SPeter Wemm	}
2860e3d5408SPeter Wemm	/^@/ {
2870e3d5408SPeter Wemm		using = 0
2880e3d5408SPeter Wemm		if (subset == "none") {
2890e3d5408SPeter Wemm			using = 1
290*21817992SBaptiste Daroussin			print  ""
291*21817992SBaptiste Daroussin			print "# generated by mk-1st.awk"
2927a656419SBaptiste Daroussin		} else if (in_subset($2) > 0) {
2930e3d5408SPeter Wemm			if (using == 0) {
2940e3d5408SPeter Wemm				if (found == 0) {
29573f0a83dSXin LI					if ( name ~ /^.*\+\+.*/ ) {
29673f0a83dSXin LI						if ( CXX_MODEL == "NORMAL" && MODEL == "SHARED" ) {
29773f0a83dSXin LI							print  ""
29873f0a83dSXin LI							printf "# overriding model from %s to match CXX_MODEL\n", MODEL;
29973f0a83dSXin LI							MODEL = "NORMAL";
30073f0a83dSXin LI							suffix = ".a";
30173f0a83dSXin LI							DoLinks = "no";
30273f0a83dSXin LI						}
30373f0a83dSXin LI					}
3040e3d5408SPeter Wemm					print  ""
3054a1a9510SRong-En Fan					printf "# generated by mk-1st.awk (subset=%s)\n", subset
3064a1a9510SRong-En Fan					printf "#  name:            %s\n", name
3074a1a9510SRong-En Fan					printf "#  traces:          %s\n", traces
3084a1a9510SRong-En Fan					printf "#  MODEL:           %s\n", MODEL
30973f0a83dSXin LI					printf "#  CXX_MODEL:       %s\n", CXX_MODEL
310*21817992SBaptiste Daroussin					printf "#  LIB_SUFFIX:      %s\n", LIB_SUFFIX
311*21817992SBaptiste Daroussin					printf "#  USE_LIB_SUFFIX:  %s\n", USE_LIB_SUFFIX
3124a1a9510SRong-En Fan					printf "#  model:           %s\n", model
3134a1a9510SRong-En Fan					printf "#  prefix:          %s\n", prefix
3144a1a9510SRong-En Fan					printf "#  suffix:          %s\n", suffix
3154a1a9510SRong-En Fan					printf "#  subset:          %s\n", subset
31673f0a83dSXin LI					printf "#  driver:          %s\n", driver
3174a1a9510SRong-En Fan					printf "#  ShlibVer:        %s\n", ShlibVer
3184a1a9510SRong-En Fan					printf "#  ShlibVerInfix:   %s\n", ShlibVerInfix
31906bfebdeSXin LI					printf "#  SymLink:         %s\n", SymLink
3205ca44d1cSRong-En Fan					printf "#  TermlibRoot:     %s\n", TermlibRoot
3215ca44d1cSRong-En Fan					printf "#  TermlibSuffix:   %s\n", TermlibSuffix
3225ca44d1cSRong-En Fan					printf "#  ReLink:          %s\n", ReLink
323aae38d10SBaptiste Daroussin					printf "#  ReRanlib:        %s\n", ReRanlib
3244a1a9510SRong-En Fan					printf "#  DoLinks:         %s\n", DoLinks
3254a1a9510SRong-En Fan					printf "#  rmSoLocs:        %s\n", rmSoLocs
3264a1a9510SRong-En Fan					printf "#  ldconfig:        %s\n", ldconfig
327*21817992SBaptiste Daroussin					printf "#  make_phony:      %s\n", make_phony
3284a1a9510SRong-En Fan					printf "#  overwrite:       %s\n", overwrite
3294a1a9510SRong-En Fan					printf "#  depend:          %s\n", depend
3304a1a9510SRong-En Fan					printf "#  host:            %s\n", host
331*21817992SBaptiste Daroussin					printf "#  libtool_version: %s\n", libtool_version
3320e3d5408SPeter Wemm					print  ""
3330e3d5408SPeter Wemm				}
3340e3d5408SPeter Wemm				using = 1
3350e3d5408SPeter Wemm			}
3365ca44d1cSRong-En Fan			if ( is_ticlib() ) {
3375ca44d1cSRong-En Fan				OBJS  = MODEL "_P"
3385ca44d1cSRong-En Fan			} else if ( is_termlib() ) {
3390e3d5408SPeter Wemm				OBJS  = MODEL "_T"
3400e3d5408SPeter Wemm			} else {
3410e3d5408SPeter Wemm				OBJS  = MODEL
3420e3d5408SPeter Wemm			}
3430e3d5408SPeter Wemm		}
3440e3d5408SPeter Wemm	}
34515589c42SPeter Wemm	/^[@#]/ {
34615589c42SPeter Wemm		next
34715589c42SPeter Wemm	}
34815589c42SPeter Wemm	$1 ~ /trace/ {
34915589c42SPeter Wemm		if (traces != "all" && traces != MODEL && $1 != "lib_trace")
35015589c42SPeter Wemm			next
35115589c42SPeter Wemm	}
35215589c42SPeter Wemm	{
3530e3d5408SPeter Wemm		if (using \
35439f2269fSPeter Wemm		 && ( $1 != "link_test" ) \
3550e3d5408SPeter Wemm		 && ( $2 == "lib" \
3560e3d5408SPeter Wemm		   || $2 == "progs" \
357*21817992SBaptiste Daroussin		   || $2 == "c++" ))
3580e3d5408SPeter Wemm		{
3590e3d5408SPeter Wemm			if ( found == 0 )
3600e3d5408SPeter Wemm			{
3610e3d5408SPeter Wemm				printf "%s_OBJS =", OBJS
36273f0a83dSXin LI				if ( $2 == "lib" ) {
36373f0a83dSXin LI					found = 1;
36473f0a83dSXin LI				} else if ( $2 == "c++" ) {
36573f0a83dSXin LI					TOOL_PREFIX = "CXX_";
36673f0a83dSXin LI					found = 1;
36773f0a83dSXin LI				} else {
36873f0a83dSXin LI					found = 2;
3690e3d5408SPeter Wemm				}
37073f0a83dSXin LI				if ( $2 == "c++" ) {
37173f0a83dSXin LI					CC_NAME="CXX"
37273f0a83dSXin LI					CC_FLAG="CXXFLAGS"
37373f0a83dSXin LI				} else {
37473f0a83dSXin LI					CC_NAME="CC"
37573f0a83dSXin LI					CC_FLAG="CFLAGS"
37673f0a83dSXin LI				}
37773f0a83dSXin LI			}
37873f0a83dSXin LI			printf " \\\n\t../%s/%s$o", model, $1;
3790e3d5408SPeter Wemm		}
3800e3d5408SPeter Wemm	}
3810e3d5408SPeter WemmEND	{
3820e3d5408SPeter Wemm		print  ""
3830e3d5408SPeter Wemm		if ( found != 0 )
3840e3d5408SPeter Wemm		{
3850e3d5408SPeter Wemm			printf "\n$(%s_OBJS) : %s\n", OBJS, depend
3860e3d5408SPeter Wemm		}
3870e3d5408SPeter Wemm		if ( found == 1 )
3880e3d5408SPeter Wemm		{
3890e3d5408SPeter Wemm			print  ""
3905ca44d1cSRong-En Fan			lib_name = lib_name_of(name);
3910e3d5408SPeter Wemm			if ( MODEL == "SHARED" )
3920e3d5408SPeter Wemm			{
3935ca44d1cSRong-En Fan				abi_name = abi_name_of(name);
3945ca44d1cSRong-En Fan				rel_name = rel_name_of(name);
3955ca44d1cSRong-En Fan				imp_name = imp_name_of(name);
3965ca44d1cSRong-En Fan				end_name = end_name_of(name);
39739f2269fSPeter Wemm
3985ca44d1cSRong-En Fan				shlib_build("../lib")
39939f2269fSPeter Wemm
4000e3d5408SPeter Wemm				print  ""
4010e3d5408SPeter Wemm				print  "install \\"
4020e3d5408SPeter Wemm				print  "install.libs \\"
40339f2269fSPeter Wemm
4047a656419SBaptiste Daroussin				if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw" || ShlibVer == "msvcdll") {
40539f2269fSPeter Wemm
4064a1a9510SRong-En Fan					dst_dirs = "$(DESTDIR)$(bindir) $(DESTDIR)$(libdir)";
4074a1a9510SRong-En Fan					printf "install.%s :: %s $(LIBRARIES)\n", name, dst_dirs
4084a1a9510SRong-En Fan					install_dll("$(bindir)",end_name);
4094a1a9510SRong-En Fan					install_dll("$(libdir)",imp_name);
41039f2269fSPeter Wemm
41139f2269fSPeter Wemm				} else {
41239f2269fSPeter Wemm
4134a1a9510SRong-En Fan					lib_dir = "$(DESTDIR)$(libdir)";
4144a1a9510SRong-En Fan					printf "install.%s :: %s/%s\n", name, lib_dir, end_name
4154a1a9510SRong-En Fan					print ""
4165ca44d1cSRong-En Fan					if ( ReLink == "yes" ) {
4175ca44d1cSRong-En Fan						shlib_build(lib_dir)
4185ca44d1cSRong-En Fan					} else {
4195ca44d1cSRong-En Fan						shlib_install(lib_dir)
4205ca44d1cSRong-En Fan					}
42139f2269fSPeter Wemm				}
42239f2269fSPeter Wemm
4230e3d5408SPeter Wemm				if ( overwrite == "yes" && name == "ncurses" )
4240e3d5408SPeter Wemm				{
4257a656419SBaptiste Daroussin					if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw" || SlibVer == "msvcdll") {
4267a656419SBaptiste Daroussin						if (ShlibVer == "msvcdll") {
4277a656419SBaptiste Daroussin							curses_prefix = ""
4287a656419SBaptiste Daroussin						} else {
4297a656419SBaptiste Daroussin							curses_prefix = "lib"
4307a656419SBaptiste Daroussin						}
4317a656419SBaptiste Daroussin						ovr_name = sprintf("%scurses%s.a", curses_prefix, suffix)
4324a1a9510SRong-En Fan						printf "\t@echo linking %s to %s\n", imp_name, ovr_name
43306bfebdeSXin LI						printf "\tcd $(DESTDIR)$(libdir) && ("
43406bfebdeSXin LI						symlink(imp_name, ovr_name)
43506bfebdeSXin LI						printf ")\n"
4364a1a9510SRong-En Fan					} else {
4370e3d5408SPeter Wemm						ovr_name = sprintf("libcurses%s", suffix)
43818259542SPeter Wemm						printf "\t@echo linking %s to %s\n", end_name, ovr_name
43906bfebdeSXin LI						printf "\tcd $(DESTDIR)$(libdir) && ("
44006bfebdeSXin LI						symlink(end_name, ovr_name)
44106bfebdeSXin LI						printf ")\n"
4420e3d5408SPeter Wemm					}
4434a1a9510SRong-En Fan				}
4444a1a9510SRong-En Fan				if ( ldconfig != "" && ldconfig != ":" ) {
44518259542SPeter Wemm					printf "\t- test -z \"$(DESTDIR)\" && %s\n", ldconfig
4460e3d5408SPeter Wemm				}
4470e3d5408SPeter Wemm				print  ""
4480e3d5408SPeter Wemm				print  "uninstall \\"
4490e3d5408SPeter Wemm				print  "uninstall.libs \\"
4500e3d5408SPeter Wemm				printf "uninstall.%s ::\n", name
4517a656419SBaptiste Daroussin				if ( ShlibVer == "cygdll" || ShlibVer == "msysdll" || ShlibVer == "mingw" || ShlibVer == "msvcdll") {
45239f2269fSPeter Wemm
45339f2269fSPeter Wemm					printf "\t@echo uninstalling $(DESTDIR)$(bindir)/%s\n", end_name
45439f2269fSPeter Wemm					printf "\t-@rm -f $(DESTDIR)$(bindir)/%s\n", end_name
45539f2269fSPeter Wemm
45639f2269fSPeter Wemm					printf "\t@echo uninstalling $(DESTDIR)$(libdir)/%s\n", imp_name
45739f2269fSPeter Wemm					printf "\t-@rm -f $(DESTDIR)$(libdir)/%s\n", imp_name
45839f2269fSPeter Wemm
45939f2269fSPeter Wemm				} else {
46018259542SPeter Wemm					printf "\t@echo uninstalling $(DESTDIR)$(libdir)/%s\n", end_name
46118259542SPeter Wemm					removelinks("$(DESTDIR)$(libdir)")
4620e3d5408SPeter Wemm					if ( overwrite == "yes" && name == "ncurses" )
4630e3d5408SPeter Wemm					{
4640e3d5408SPeter Wemm						ovr_name = sprintf("libcurses%s", suffix)
46518259542SPeter Wemm						printf "\t-@rm -f $(DESTDIR)$(libdir)/%s\n", ovr_name
4660e3d5408SPeter Wemm					}
46739f2269fSPeter Wemm				}
4680e3d5408SPeter Wemm				if ( rmSoLocs == "yes" ) {
4690e3d5408SPeter Wemm					print  ""
4700e3d5408SPeter Wemm					print  "mostlyclean \\"
4710e3d5408SPeter Wemm					print  "clean ::"
4720e3d5408SPeter Wemm					printf "\t-@rm -f so_locations\n"
4730e3d5408SPeter Wemm				}
4740e3d5408SPeter Wemm			}
4757a69bbfbSPeter Wemm			else if ( MODEL == "LIBTOOL" )
4767a69bbfbSPeter Wemm			{
4777a69bbfbSPeter Wemm				end_name = lib_name;
478*21817992SBaptiste Daroussin				use_name = trim_suffix(TermlibRoot) USE_LIB_SUFFIX
479*21817992SBaptiste Daroussin				printf "../lib/%s : \\\n", lib_name
480*21817992SBaptiste Daroussin				if ( (name != use_name ) && ( index(name, "++") == 0 ) && ( index(name, "tic") == 1 || index(name, "ncurses") == 1 ) ) {
481*21817992SBaptiste Daroussin					printf "\t\t../lib/lib%s.la \\\n", use_name;
482*21817992SBaptiste Daroussin					if ( index(name, "tic") == 1 && index(TermlibRoot, "ncurses") != 1 ) {
483*21817992SBaptiste Daroussin						printf "\t\t../lib/lib%s%s.la \\\n", "ncurses", USE_LIB_SUFFIX;
484*21817992SBaptiste Daroussin					}
485*21817992SBaptiste Daroussin				}
486*21817992SBaptiste Daroussin				printf "\t\t$(%s_OBJS)\n", OBJS
48706bfebdeSXin LI				if ( is_ticlib() ) {
48873f0a83dSXin LI					which_list = "TICS_LIST";
48906bfebdeSXin LI				} else if ( is_termlib() ) {
49073f0a83dSXin LI					which_list = "TINFO_LIST";
49106bfebdeSXin LI				} else {
49273f0a83dSXin LI					which_list = "SHLIB_LIST";
49306bfebdeSXin LI				}
49473f0a83dSXin LI				printf "\tcd ../lib && $(LIBTOOL_LINK) $(%s) $(%s) \\\n", CC_NAME, CC_FLAG;
49573f0a83dSXin LI				printf "\t\t-o %s $(%s_OBJS:$o=.lo) \\\n", lib_name, OBJS;
496aae38d10SBaptiste Daroussin				printf "\t\t-rpath $(libdir) \\\n";
49773f0a83dSXin LI				printf "\t\t%s $(NCURSES_MAJOR):$(NCURSES_MINOR) $(LT_UNDEF) $(%s) $(LDFLAGS)\n", libtool_version, which_list;
498*21817992SBaptiste Daroussin				if ( make_phony == "yes" ) {
499*21817992SBaptiste Daroussin					print  ""
500*21817992SBaptiste Daroussin					printf ".PHONY :\tinstall.%s\n", trim_suffix(name);
501*21817992SBaptiste Daroussin				}
5027a69bbfbSPeter Wemm				print  ""
5037a69bbfbSPeter Wemm				print  "install \\"
5047a69bbfbSPeter Wemm				print  "install.libs \\"
505*21817992SBaptiste Daroussin				printf "install.%s :: \\\n", trim_suffix(name);
506*21817992SBaptiste Daroussin				printf "\t\t$(DESTDIR)$(libdir) \\\n";
507*21817992SBaptiste Daroussin				use_name = TermlibRoot USE_LIB_SUFFIX
508*21817992SBaptiste Daroussin				if ( (name != use_name ) && ( index(name, "++") == 0 ) && ( index(name, "tic") == 1 || index(name, "ncurses") == 1 ) ) {
509*21817992SBaptiste Daroussin					if ( trim_suffix(TermlibRoot) != trim_suffix(name) ) {
510*21817992SBaptiste Daroussin						printf "\t\tinstall.%s \\\n", trim_suffix(TermlibRoot);
511*21817992SBaptiste Daroussin					}
512*21817992SBaptiste Daroussin					if ( index(name, "tic") == 1 && index(TermlibRoot, "ncurses") != 1 && trim_suffix(name) != "ncurses" ) {
513*21817992SBaptiste Daroussin						printf "\t\tinstall.%s \\\n", "ncurses";
514*21817992SBaptiste Daroussin					}
515*21817992SBaptiste Daroussin				}
516*21817992SBaptiste Daroussin				printf "\t\t../lib/%s\n", lib_name
5177a69bbfbSPeter Wemm				printf "\t@echo installing ../lib/%s as $(DESTDIR)$(libdir)/%s\n", lib_name, lib_name
5184a1a9510SRong-En Fan				printf "\tcd ../lib; $(LIBTOOL_INSTALL) $(INSTALL) %s $(DESTDIR)$(libdir)\n", lib_name
5197a69bbfbSPeter Wemm				print  ""
5207a69bbfbSPeter Wemm				print  "uninstall \\"
5217a69bbfbSPeter Wemm				print  "uninstall.libs \\"
522*21817992SBaptiste Daroussin				printf "uninstall.%s ::\n", trim_suffix(name)
5237a69bbfbSPeter Wemm				printf "\t@echo uninstalling $(DESTDIR)$(libdir)/%s\n", lib_name
5244a1a9510SRong-En Fan				printf "\t-@$(LIBTOOL_UNINSTALL) rm -f $(DESTDIR)$(libdir)/%s\n", lib_name
5257a69bbfbSPeter Wemm			}
5260e3d5408SPeter Wemm			else
5270e3d5408SPeter Wemm			{
5280e3d5408SPeter Wemm				end_name = lib_name;
5290e3d5408SPeter Wemm				printf "../lib/%s : $(%s_OBJS)\n", lib_name, OBJS
530aae38d10SBaptiste Daroussin				# workaround: binutils' ranlib tries to be clever with
531aae38d10SBaptiste Daroussin				# timestamps, by pretending its update took no time, confusing
532aae38d10SBaptiste Daroussin				# the make utility.
533aae38d10SBaptiste Daroussin				if ( ReLink != "yes" ) {
534aae38d10SBaptiste Daroussin					printf "\t@sleep 1\n"
535aae38d10SBaptiste Daroussin				}
53673f0a83dSXin LI				printf "\t$(%sAR) $(%sARFLAGS) $@ $?\n", TOOL_PREFIX, TOOL_PREFIX;
5370e3d5408SPeter Wemm				printf "\t$(RANLIB) $@\n"
5384a1a9510SRong-En Fan				if ( host == "vxworks" )
5390e3d5408SPeter Wemm				{
5404a1a9510SRong-En Fan					printf "\t$(LD) $(LD_OPTS) $? -o $(@:.a=$o)\n"
5410e3d5408SPeter Wemm				}
5420e3d5408SPeter Wemm				print  ""
5430e3d5408SPeter Wemm				print  "install \\"
5440e3d5408SPeter Wemm				print  "install.libs \\"
54518259542SPeter Wemm				printf "install.%s :: $(DESTDIR)$(libdir) ../lib/%s\n", name, lib_name
54618259542SPeter Wemm				printf "\t@echo installing ../lib/%s as $(DESTDIR)$(libdir)/%s\n", lib_name, lib_name
54718259542SPeter Wemm				printf "\t$(INSTALL_DATA) ../lib/%s $(DESTDIR)$(libdir)/%s\n", lib_name, lib_name
5480e3d5408SPeter Wemm				if ( overwrite == "yes" && lib_name == "libncurses.a" )
5490e3d5408SPeter Wemm				{
5500e3d5408SPeter Wemm					printf "\t@echo linking libcurses.a to libncurses.a\n"
55118259542SPeter Wemm					printf "\t-@rm -f $(DESTDIR)$(libdir)/libcurses.a\n"
55206bfebdeSXin LI					printf "\t(cd $(DESTDIR)$(libdir) && "
55306bfebdeSXin LI					symlink("libncurses.a", "libcurses.a")
55406bfebdeSXin LI					printf ")\n"
5550e3d5408SPeter Wemm				}
556aae38d10SBaptiste Daroussin				if ( ReRanlib == "yes" )
557aae38d10SBaptiste Daroussin				{
55818259542SPeter Wemm					printf "\t$(RANLIB) $(DESTDIR)$(libdir)/%s\n", lib_name
559aae38d10SBaptiste Daroussin				}
5604a1a9510SRong-En Fan				if ( host == "vxworks" )
5610e3d5408SPeter Wemm				{
5624a1a9510SRong-En Fan					printf "\t@echo installing ../lib/lib%s$o as $(DESTDIR)$(libdir)/lib%s$o\n", name, name
5634a1a9510SRong-En Fan					printf "\t$(INSTALL_DATA) ../lib/lib%s$o $(DESTDIR)$(libdir)/lib%s$o\n", name, name
5640e3d5408SPeter Wemm				}
5650e3d5408SPeter Wemm				print  ""
5660e3d5408SPeter Wemm				print  "uninstall \\"
5670e3d5408SPeter Wemm				print  "uninstall.libs \\"
5680e3d5408SPeter Wemm				printf "uninstall.%s ::\n", name
56918259542SPeter Wemm				printf "\t@echo uninstalling $(DESTDIR)$(libdir)/%s\n", lib_name
57018259542SPeter Wemm				printf "\t-@rm -f $(DESTDIR)$(libdir)/%s\n", lib_name
5710e3d5408SPeter Wemm				if ( overwrite == "yes" && lib_name == "libncurses.a" )
5720e3d5408SPeter Wemm				{
5730e3d5408SPeter Wemm					printf "\t@echo linking libcurses.a to libncurses.a\n"
57418259542SPeter Wemm					printf "\t-@rm -f $(DESTDIR)$(libdir)/libcurses.a\n"
5750e3d5408SPeter Wemm				}
5764a1a9510SRong-En Fan				if ( host == "vxworks" )
5770e3d5408SPeter Wemm				{
5784a1a9510SRong-En Fan					printf "\t@echo uninstalling $(DESTDIR)$(libdir)/lib%s$o\n", name
5794a1a9510SRong-En Fan					printf "\t-@rm -f $(DESTDIR)$(libdir)/lib%s$o\n", name
5800e3d5408SPeter Wemm				}
5810e3d5408SPeter Wemm			}
5820e3d5408SPeter Wemm			print ""
5830e3d5408SPeter Wemm			print "clean ::"
58418259542SPeter Wemm			removelinks("../lib");
5850e3d5408SPeter Wemm			print ""
5860e3d5408SPeter Wemm			print "mostlyclean::"
5870e3d5408SPeter Wemm			printf "\t-rm -f $(%s_OBJS)\n", OBJS
5887a69bbfbSPeter Wemm			if ( MODEL == "LIBTOOL" ) {
5894a1a9510SRong-En Fan				printf "\t-$(LIBTOOL_CLEAN) rm -f $(%s_OBJS:$o=.lo)\n", OBJS
5907a69bbfbSPeter Wemm			}
5910e3d5408SPeter Wemm		}
5920e3d5408SPeter Wemm		else if ( found == 2 )
5930e3d5408SPeter Wemm		{
5940e3d5408SPeter Wemm			print ""
5950e3d5408SPeter Wemm			print "mostlyclean::"
5960e3d5408SPeter Wemm			printf "\t-rm -f $(%s_OBJS)\n", OBJS
5977a69bbfbSPeter Wemm			if ( MODEL == "LIBTOOL" ) {
5984a1a9510SRong-En Fan				printf "\t-$(LIBTOOL_CLEAN) rm -f $(%s_OBJS:$o=.lo)\n", OBJS
5997a69bbfbSPeter Wemm			}
6000e3d5408SPeter Wemm			print ""
6010e3d5408SPeter Wemm			print "clean ::"
6020e3d5408SPeter Wemm			printf "\t-rm -f $(%s_OBJS)\n", OBJS
6037a69bbfbSPeter Wemm			if ( MODEL == "LIBTOOL" ) {
6044a1a9510SRong-En Fan				printf "\t-$(LIBTOOL_CLEAN) rm -f $(%s_OBJS:$o=.lo)\n", OBJS
6057a69bbfbSPeter Wemm			}
6060e3d5408SPeter Wemm		}
6070e3d5408SPeter Wemm	}
6085ca44d1cSRong-En Fan# vile:ts=4 sw=4
609