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