X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=mk-0th.awk;h=f97549e488450b3057888780c112f3e3994292e8;hp=399f156bb0cd5e1e7e0d3e3dafee02306f8387ac;hb=5079dc1dbbaa5128ac761358dcf81c8b606983c4;hpb=46722468f47c2b77b3987729b4bcf2321cccfd01 diff --git a/mk-0th.awk b/mk-0th.awk index 399f156b..f97549e4 100644 --- a/mk-0th.awk +++ b/mk-0th.awk @@ -1,6 +1,7 @@ -# $Id: mk-0th.awk,v 1.14 2002/08/31 21:36:54 tom Exp $ +# $Id: mk-0th.awk,v 1.23 2020/02/02 23:34:34 tom Exp $ ############################################################################## -# Copyright (c) 1998-2001 Free Software Foundation, Inc. # +# Copyright 2020 Thomas E. Dickey # +# Copyright 1998-2010,2012 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"), # @@ -27,29 +28,97 @@ # authorization. # ############################################################################## # -# Author: Thomas E. Dickey 1996,1997 +# Author: Thomas E. Dickey 1996-on # # Generate list of sources for a library, together with lint/lintlib rules # # Variables: # libname (library name, e.g., "ncurses", "panel", "forms", "menus") +# subsets (is used here to decide if wide-character code is used) +# ticlib (library name for libtic, e.g., "tic") +# termlib (library name for libtinfo, e.g., "tinfo") # +function make_lintlib(name,sources) { + print "" + print "clean ::" + printf "\trm -f llib-l%s.*\n", name + print "" + print "realclean ::" + printf "\trm -f llib-l%s\n", name + print "" + printf "llib-l%s : %s\n", name, sources + printf "\tcproto -a -l -DNCURSES_ENABLE_STDBOOL_H=0 -DLINT $(CPPFLAGS) %s >$@\n", sources + print "" + print "lintlib ::" + printf "\tsh $(srcdir)/../misc/makellib %s $(CPPFLAGS)\n", name + print "" + print "lint ::" + printf "\t$(LINT) $(LINT_OPTS) $(CPPFLAGS) %s $(LINT_LIBS)\n", sources +} + +# A blank in "subsets" indicates a split-off of the library into a separate +# file, e.g., for libtic or libtinfo. They are all logical parts of the same +# library. +function which_library() { + if ( ( which == "ticlib" ) && ( subsets ~ /ticlib / ) ) { + return ticlib; + } else if ( ( which == "termlib" || which == "ext_tinfo" ) && ( subsets ~ /[[:space:]]base/ ) ) { + return termlib; + } else { + return libname; + } +} + +function show_list(name, len, list) { + if ( len > 0 ) { + printf "\n%s_SRC =", toupper(name); + for (n = 0; n < len; ++n) + printf " \\\n\t%s", list[n]; + print ""; + make_lintlib(name, sprintf("$(%s_SRC)", toupper(name))); + } +} + BEGIN { - print "" - print "# generated by mk-0th.awk" - print "" - print ".SUFFIXES: .c .cc .h .i .ii" - print ".c.i :" - printf "\t$(CPP) $(CPPFLAGS) $< >$@\n" - print ".cc.ii :" - printf "\t$(CPP) $(CPPFLAGS) $< >$@\n" - print ".h.i :" - printf "\t$(CPP) $(CPPFLAGS) $< >$@\n" - print "" + which = libname; + using = 0; found = 0; + count_ticlib = 0; + count_termlib = 0; + count_library = 0; + } + /^@/ { + which = $0; + sub(/^@[[:blank:]]+/, "", which); + sub(/[[:blank:]]+$/, "", which); } !/^[@#]/ { - if ( $0 != "" && $1 != "link_test" ) + if (using == 0) + { + print "" + print "# generated by mk-0th.awk" + printf "# libname: %s\n", libname + printf "# subsets: %s\n", subsets + if ( libname ~ /ncurses/ ) { + printf "# ticlib: %s\n", ticlib + printf "# termlib: %s\n", termlib + } + print "" + print ".SUFFIXES: .c .cc .h .i .ii" + print ".c.i :" + printf "\t$(CPP) $(CPPFLAGS) $< >$@\n" + print ".cc.ii :" + printf "\t$(CPP) $(CPPFLAGS) $< >$@\n" + print ".h.i :" + printf "\t$(CPP) $(CPPFLAGS) $< >$@\n" + print "" + using = 1; + } + if (which ~ /port_/ ) + { + # skip win32 source + } + else if ( $0 != "" && $1 != "link_test" ) { if ( found == 0 ) { @@ -64,9 +133,18 @@ BEGIN { found = 2 } if ( libname == "c++" || libname == "c++w" ) { - printf " \\\n\t%s/%s.cc", $3, $1 + srcname = sprintf("%s/%s.cc", $3, $1); + printf " \\\n\t%s", srcname; } else if ( widechar == 1 || $3 != "$(wide)" ) { - printf " \\\n\t%s/%s.c", $3, $1 + srcname = sprintf("%s/%s.c", $3, $1); + printf " \\\n\t%s", srcname; + if ( which_library() == libname ) { + list_library[count_library++] = srcname; + } else if ( which_library() == ticlib ) { + list_ticlib[count_ticlib++] = srcname; + } else { + list_termlib[count_termlib++] = srcname; + } } } } @@ -75,22 +153,11 @@ END { if ( found == 1 ) { print "" - printf "# Producing llib-l%s is time-consuming, so there's no direct-dependency for\n", libname - print "# it in the lintlib rule. We'll only remove in the cleanest setup." - print "clean ::" - printf "\trm -f llib-l%s.*\n", libname - print "" - print "realclean ::" - printf "\trm -f llib-l%s\n", libname - print "" - printf "llib-l%s : $(C_SRC)\n", libname - printf "\tcproto -a -l -DLINT $(CPPFLAGS) $(C_SRC) >$@\n" - print "" - print "lintlib :" - printf "\tsh $(srcdir)/../misc/makellib %s $(CPPFLAGS)", libname - print "" - print "lint :" - print "\t$(LINT) $(LINT_OPTS) $(CPPFLAGS) $(C_SRC) $(LINT_LIBS)" + printf "# Producing llib-l%s is time-consuming, so there's no direct-dependency for\n", libname; + print "# it in the lintlib rule. We'll only remove in the cleanest setup."; + show_list(libname, count_library, list_library); + show_list(ticlib, count_ticlib, list_ticlib); + show_list(termlib, count_termlib, list_termlib); } else { @@ -99,3 +166,4 @@ END { print "\t@echo no action needed" } } +# vile:ts=4 sw=4