1*21817992SBaptiste Daroussin# $Id: mk-0th.awk,v 1.24 2021/03/20 11:44:48 tom Exp $ 20e3d5408SPeter Wemm############################################################################## 3*21817992SBaptiste Daroussin# Copyright 2020,2021 Thomas E. Dickey # 4e1865124SBaptiste Daroussin# Copyright 1998-2010,2012 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# 3106bfebdeSXin LI# Author: Thomas E. Dickey 1996-on 320e3d5408SPeter Wemm# 330e3d5408SPeter Wemm# Generate list of sources for a library, together with lint/lintlib rules 340e3d5408SPeter Wemm# 350e3d5408SPeter Wemm# Variables: 3639f2269fSPeter Wemm# libname (library name, e.g., "ncurses", "panel", "forms", "menus") 374a1a9510SRong-En Fan# subsets (is used here to decide if wide-character code is used) 3873f0a83dSXin LI# ticlib (library name for libtic, e.g., "tic") 3973f0a83dSXin LI# termlib (library name for libtinfo, e.g., "tinfo") 400e3d5408SPeter Wemm# 4173f0a83dSXin LIfunction make_lintlib(name,sources) { 4273f0a83dSXin LI print "" 4373f0a83dSXin LI print "clean ::" 4473f0a83dSXin LI printf "\trm -f llib-l%s.*\n", name 4573f0a83dSXin LI print "" 4673f0a83dSXin LI print "realclean ::" 4773f0a83dSXin LI printf "\trm -f llib-l%s\n", name 4873f0a83dSXin LI print "" 4973f0a83dSXin LI printf "llib-l%s : %s\n", name, sources 5073f0a83dSXin LI printf "\tcproto -a -l -DNCURSES_ENABLE_STDBOOL_H=0 -DLINT $(CPPFLAGS) %s >$@\n", sources 5173f0a83dSXin LI print "" 5273f0a83dSXin LI print "lintlib ::" 5373f0a83dSXin LI printf "\tsh $(srcdir)/../misc/makellib %s $(CPPFLAGS)\n", name 5473f0a83dSXin LI print "" 5573f0a83dSXin LI print "lint ::" 5673f0a83dSXin LI printf "\t$(LINT) $(LINT_OPTS) $(CPPFLAGS) %s $(LINT_LIBS)\n", sources 5773f0a83dSXin LI} 5873f0a83dSXin LI 5973f0a83dSXin LI# A blank in "subsets" indicates a split-off of the library into a separate 6073f0a83dSXin LI# file, e.g., for libtic or libtinfo. They are all logical parts of the same 6173f0a83dSXin LI# library. 6273f0a83dSXin LIfunction which_library() { 6373f0a83dSXin LI if ( ( which == "ticlib" ) && ( subsets ~ /ticlib / ) ) { 6473f0a83dSXin LI return ticlib; 6573f0a83dSXin LI } else if ( ( which == "termlib" || which == "ext_tinfo" ) && ( subsets ~ /[[:space:]]base/ ) ) { 6673f0a83dSXin LI return termlib; 6773f0a83dSXin LI } else { 6873f0a83dSXin LI return libname; 6973f0a83dSXin LI } 7073f0a83dSXin LI} 7173f0a83dSXin LI 7273f0a83dSXin LIfunction show_list(name, len, list) { 7373f0a83dSXin LI if ( len > 0 ) { 7473f0a83dSXin LI printf "\n%s_SRC =", toupper(name); 7573f0a83dSXin LI for (n = 0; n < len; ++n) 7673f0a83dSXin LI printf " \\\n\t%s", list[n]; 7773f0a83dSXin LI print ""; 7873f0a83dSXin LI make_lintlib(name, sprintf("$(%s_SRC)", toupper(name))); 7973f0a83dSXin LI } 8073f0a83dSXin LI} 8173f0a83dSXin LI 820e3d5408SPeter WemmBEGIN { 8306bfebdeSXin LI which = libname; 844a1a9510SRong-En Fan using = 0; 854a1a9510SRong-En Fan found = 0; 8673f0a83dSXin LI count_ticlib = 0; 8773f0a83dSXin LI count_termlib = 0; 8873f0a83dSXin LI count_library = 0; 894a1a9510SRong-En Fan } 9006bfebdeSXin LI /^@/ { 9106bfebdeSXin LI which = $0; 9273f0a83dSXin LI sub(/^@[[:blank:]]+/, "", which); 9373f0a83dSXin LI sub(/[[:blank:]]+$/, "", which); 9406bfebdeSXin LI } 954a1a9510SRong-En Fan !/^[@#]/ { 964a1a9510SRong-En Fan if (using == 0) 974a1a9510SRong-En Fan { 980e3d5408SPeter Wemm print "" 990e3d5408SPeter Wemm print "# generated by mk-0th.awk" 1004a1a9510SRong-En Fan printf "# libname: %s\n", libname 1014a1a9510SRong-En Fan printf "# subsets: %s\n", subsets 10273f0a83dSXin LI if ( libname ~ /ncurses/ ) { 10373f0a83dSXin LI printf "# ticlib: %s\n", ticlib 10473f0a83dSXin LI printf "# termlib: %s\n", termlib 10573f0a83dSXin LI } 1060e3d5408SPeter Wemm print "" 1077a69bbfbSPeter Wemm print ".SUFFIXES: .c .cc .h .i .ii" 10815589c42SPeter Wemm print ".c.i :" 10915589c42SPeter Wemm printf "\t$(CPP) $(CPPFLAGS) $< >$@\n" 1107a69bbfbSPeter Wemm print ".cc.ii :" 1117a69bbfbSPeter Wemm printf "\t$(CPP) $(CPPFLAGS) $< >$@\n" 11215589c42SPeter Wemm print ".h.i :" 11315589c42SPeter Wemm printf "\t$(CPP) $(CPPFLAGS) $< >$@\n" 11415589c42SPeter Wemm print "" 1154a1a9510SRong-En Fan using = 1; 1160e3d5408SPeter Wemm } 11706bfebdeSXin LI if (which ~ /port_/ ) 11806bfebdeSXin LI { 11906bfebdeSXin LI # skip win32 source 12006bfebdeSXin LI } 12106bfebdeSXin LI else if ( $0 != "" && $1 != "link_test" ) 1220e3d5408SPeter Wemm { 1230e3d5408SPeter Wemm if ( found == 0 ) 1240e3d5408SPeter Wemm { 12539f2269fSPeter Wemm if ( subsets ~ /widechar/ ) 12639f2269fSPeter Wemm widechar = 1; 12739f2269fSPeter Wemm else 12839f2269fSPeter Wemm widechar = 0; 1290e3d5408SPeter Wemm printf "C_SRC =" 1300e3d5408SPeter Wemm if ( $2 == "lib" ) 1310e3d5408SPeter Wemm found = 1 132*21817992SBaptiste Daroussin else if ( $2 == "c++" ) 1330e3d5408SPeter Wemm found = 2 134*21817992SBaptiste Daroussin else 135*21817992SBaptiste Daroussin found = 3 1360e3d5408SPeter Wemm } 13739f2269fSPeter Wemm if ( libname == "c++" || libname == "c++w" ) { 13873f0a83dSXin LI srcname = sprintf("%s/%s.cc", $3, $1); 13973f0a83dSXin LI printf " \\\n\t%s", srcname; 14039f2269fSPeter Wemm } else if ( widechar == 1 || $3 != "$(wide)" ) { 14173f0a83dSXin LI srcname = sprintf("%s/%s.c", $3, $1); 14273f0a83dSXin LI printf " \\\n\t%s", srcname; 14373f0a83dSXin LI if ( which_library() == libname ) { 14473f0a83dSXin LI list_library[count_library++] = srcname; 14573f0a83dSXin LI } else if ( which_library() == ticlib ) { 14673f0a83dSXin LI list_ticlib[count_ticlib++] = srcname; 14773f0a83dSXin LI } else { 14873f0a83dSXin LI list_termlib[count_termlib++] = srcname; 14973f0a83dSXin LI } 1500e3d5408SPeter Wemm } 1510e3d5408SPeter Wemm } 15239f2269fSPeter Wemm } 1530e3d5408SPeter WemmEND { 1540e3d5408SPeter Wemm print "" 1550e3d5408SPeter Wemm if ( found == 1 ) 1560e3d5408SPeter Wemm { 1570e3d5408SPeter Wemm print "" 15873f0a83dSXin LI printf "# Producing llib-l%s is time-consuming, so there's no direct-dependency for\n", libname; 15973f0a83dSXin LI print "# it in the lintlib rule. We'll only remove in the cleanest setup."; 16073f0a83dSXin LI show_list(libname, count_library, list_library); 16173f0a83dSXin LI show_list(ticlib, count_ticlib, list_ticlib); 16273f0a83dSXin LI show_list(termlib, count_termlib, list_termlib); 1630e3d5408SPeter Wemm } 164*21817992SBaptiste Daroussin else if ( found == 2 ) 165*21817992SBaptiste Daroussin { 166*21817992SBaptiste Daroussin make_lintlib(libname, "$(C_SRC)"); 167*21817992SBaptiste Daroussin } 1680e3d5408SPeter Wemm else 1690e3d5408SPeter Wemm { 1700e3d5408SPeter Wemm print "" 1710e3d5408SPeter Wemm print "lintlib :" 1720e3d5408SPeter Wemm print "\t@echo no action needed" 1730e3d5408SPeter Wemm } 1740e3d5408SPeter Wemm } 17573f0a83dSXin LI# vile:ts=4 sw=4 176