-- $Source$ -- $State$ local d = ROOTDIR.."lang/cem/cemcom/" local extract_parameters = simple { outputs = { "%U%/lint.h", "%U%/pathlength.h", "%U%/errout.h", "%U%/idfsize.h", "%U%/numsize.h", "%U%/nparams.h", "%U%/ifdepth.h", "%U%/density.h", "%U%/lapbuf.h", "%U%/strsize.h", "%U%/target_sizes.h", "%U%/botch_free.h", "%U%/dataflow.h", "%U%/debug.h", "%U%/use_tmp.h", "%U%/parbufsize.h", "%U%/textsize.h", "%U%/inputtype.h", "%U%/nopp.h", "%U%/nobitfield.h", "%U%/spec_arith.h", "%U%/static.h", "%U%/nofloat.h", "%U%/noRoption.h", "%U%/nocross.h", "%U%/regcount.h", "%U%/dbsymtab.h", }, command = { "cd %out[1]:dirname% && %in[1]% %in[2]%" }, file (d.."make.hfiles"), file (d.."BigPars") } local lpars = LLgen { simple { outputs = {"%U%/tokenfile.g"}, command = { "%in[1]% < %in[2]% > %out[1]%" }, file (d.."make.tokfile"), file (d.."tokenname.c") }, file (d.."program.g"), file (d.."declar.g"), file (d.."expression.g"), file (d.."statement.g"), file (d.."ival.g"), } local allocd_header = simple { class = "allocd_header", command = { "%in[1]% < %in[2]% > %out[1]%" }, file (d.."make.allocd") } local cfile_with_headers = cfile { class = "cfile_with_headers", dynamicheaders = { file (d), extract_parameters, allocd_header { outputs = {"%U%/code.h"}, (d.."code.str") }, allocd_header { outputs = {"%U%/declar.h"}, (d.."declar.str") }, allocd_header { outputs = {"%U%/def.h"}, (d.."def.str") }, allocd_header { outputs = {"%U%/expr.h"}, (d.."expr.str") }, allocd_header { outputs = {"%U%/field.h"}, (d.."field.str") }, allocd_header { outputs = {"%U%/estack.h"}, (d.."estack.str") }, allocd_header { outputs = {"%U%/util.h"}, (d.."util.str") }, allocd_header { outputs = {"%U%/decspecs.h"}, (d.."decspecs.str") }, allocd_header { outputs = {"%U%/idf.h"}, (d.."idf.str") }, allocd_header { outputs = {"%U%/macro.h"}, (d.."macro.str") }, allocd_header { outputs = {"%U%/stack.h"}, (d.."stack.str") }, allocd_header { outputs = {"%U%/stmt.h"}, (d.."stmt.str") }, allocd_header { outputs = {"%U%/struct.h"}, (d.."struct.str") }, allocd_header { outputs = {"%U%/switch.h"}, (d.."switch.str") }, allocd_header { outputs = {"%U%/type.h"}, (d.."type.str") }, allocd_header { outputs = {"%U%/l_brace.h"}, (d.."l_brace.str") }, allocd_header { outputs = {"%U%/l_state.h"}, (d.."l_state.str") }, allocd_header { outputs = {"%U%/l_outdef.h"}, (d.."l_outdef.str") }, lpars } } lang_cem_compiler = cprogram { cfile_with_headers (d.."LLlex.c"), cfile_with_headers (d.."LLmessage.c"), cfile_with_headers (d.."arith.c"), cfile_with_headers (d.."asm.c"), cfile_with_headers (d.."blocks.c"), cfile_with_headers (d.."ch7.c"), cfile_with_headers (d.."ch7bin.c"), cfile_with_headers (d.."ch7mon.c"), cfile_with_headers (d.."code.c"), cfile_with_headers (d.."conversion.c"), cfile_with_headers (d.."cstoper.c"), cfile_with_headers (d.."dataflow.c"), cfile_with_headers (d.."declarator.c"), cfile_with_headers (d.."decspecs.c"), cfile_with_headers (d.."domacro.c"), cfile_with_headers (d.."dumpidf.c"), cfile_with_headers (d.."error.c"), cfile_with_headers (d.."eval.c"), cfile_with_headers (d.."expr.c"), cfile_with_headers (d.."field.c"), cfile_with_headers (d.."idf.c"), cfile_with_headers (d.."init.c"), cfile_with_headers (d.."input.c"), cfile_with_headers (d.."l_comment.c"), cfile_with_headers (d.."l_ev_ord.c"), cfile_with_headers (d.."l_lint.c"), cfile_with_headers (d.."l_misc.c"), cfile_with_headers (d.."l_outdef.c"), cfile_with_headers (d.."l_states.c"), cfile_with_headers (d.."label.c"), cfile_with_headers (d.."main.c"), cfile_with_headers (d.."options.c"), cfile_with_headers (d.."replace.c"), cfile_with_headers (d.."scan.c"), cfile_with_headers (d.."skip.c"), cfile_with_headers (d.."stack.c"), cfile_with_headers (d.."struct.c"), cfile_with_headers (d.."switch.c"), cfile_with_headers (d.."tokenname.c"), cfile_with_headers (d.."type.c"), cfile_with_headers (d.."util.c"), cfile_with_headers (d.."stab.c"), foreach { rule = cfile_with_headers, ith { lpars, from=2 } }, cfile_with_headers { simple { outputs = {"%U%-symbol2str.c"}, command = { "%in[1]% < %in[2]% > %out[1]%" }, file (d.."make.tokcase"), file (d.."tokenname.c") } }, cfile_with_headers { CINCLUDES = {PARENT, d}, tabgen (d.."char.tab") }, cfile_with_headers { simple { outputs = {"%U%-next.c"}, command = { "%in% > %out%" }, file (d.."make.next"), file (d.."code.str"), file (d.."declar.str"), file (d.."decspecs.str"), file (d.."def.str"), file (d.."expr.str"), file (d.."field.str"), file (d.."estack.str"), file (d.."util.str"), file (d.."idf.str"), file (d.."macro.str"), file (d.."stack.str"), file (d.."stmt.str"), file (d.."struct.str"), file (d.."switch.str"), file (d.."type.str"), file (d.."l_brace.str"), file (d.."l_state.str"), file (d.."l_outdef.str"), } }, lib_em_mes, lib_emk, lib_em_data, lib_input, lib_assert, lib_alloc, lib_flt_arith, lib_print, lib_system, lib_string, outputs = {"%U%/em_cemcom"}, install = { pm.install( BINDIR..PLATDEP.."/em_cemcom"), pm.install(d.."cemcom.1", BINDIR.."/man/man1/cemcom.1"), } }