43 lines
		
	
	
	
		
			1,022 B
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			1,022 B
		
	
	
	
		
			Text
		
	
	
	
	
	
%instance deftypesuffix(hh-src, '%.hh') ;
 | 
						|
%instance deftypesuffix(cc-src, '%.cc') ;
 | 
						|
 | 
						|
ALLOCD = make.allocd;
 | 
						|
NEXT = make.next;
 | 
						|
 | 
						|
%tool allochd (
 | 
						|
    hhsrc:	%in [type = hh-src, persistent];
 | 
						|
    hsrc:	%out [type = C-incl]	=> match($hhsrc);
 | 
						|
    prog:	%in [type = command]	=> $ALLOCD;
 | 
						|
)
 | 
						|
{
 | 
						|
    exec($prog, stdin => $hhsrc, stdout => $hsrc);
 | 
						|
    echo({$hsrc ,'created'});
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
%tool alloccd (
 | 
						|
    ccsrc:	%in [type = cc-src, persistent];
 | 
						|
    csrc:	%out [type = C-src]	=> match($ccsrc);
 | 
						|
    prog:	%in [type = command]	=> $ALLOCD;
 | 
						|
)
 | 
						|
{
 | 
						|
    exec($prog, stdin => $ccsrc, stdout => $csrc);
 | 
						|
    echo({$csrc ,'created'});
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
# Possibly there's only one type of { cc-src, hh-src } available,
 | 
						|
# so introduce a new attribute.
 | 
						|
 | 
						|
%derive f[cc-or-hh-src] %when get($f, type) == cc-src
 | 
						|
			%or   get($f, type) == hh-src;
 | 
						|
 | 
						|
%tool mknext (
 | 
						|
    cchhsrc:	%in %list [cc-or-hh-src];
 | 
						|
    next:	%out [type = C-src]	=> next.c;
 | 
						|
    prog:	%in [type = command]	=> $NEXT;
 | 
						|
)
 | 
						|
{
 | 
						|
    exec($prog, args => $cchhsrc, stdout => $next);
 | 
						|
    echo({$next ,'created'});
 | 
						|
};
 |