forked from bonsai/harakit
		
	GNUmakefile, fop(1): added sysexits support
This commit is contained in:
		
							parent
							
								
									5d9f6f3245
								
							
						
					
					
						commit
						3355cb3dc3
					
				
							
								
								
									
										16
									
								
								GNUmakefile
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								GNUmakefile
									
									
									
									
									
								
							| @ -20,8 +20,9 @@ CC=cc | ||||
| CFLAGS=-O3 -Lbuild/lib -idirafter include | ||||
| 
 | ||||
| RUSTC=rustc +nightly | ||||
| RUSTCFLAGS=-Zlocation-detail=none -Copt-level=z -Ccodegen-units=1 -Cpanic=abort  | ||||
| 	-Clto=y -Cstrip=symbols -Ctarget-cpu=native | ||||
| RUSTCFLAGS=-Zlocation-detail=none -Copt-level=z -Ccodegen-units=1 \
 | ||||
| 	-Cpanic=abort -Clto=y -Cstrip=symbols -Ctarget-cpu=native \
 | ||||
| 	--extern sysexits=build/o/libsysexits.rlib | ||||
| 
 | ||||
| ifeq ($(CC), gcc) | ||||
| 	CFLAGS=-O3 -s -Wl,-z,noseparate-code,-z,nosectionheader -flto -Lbuild/lib \
 | ||||
| @ -39,7 +40,7 @@ endif | ||||
| build: build_dir false intcmp scrut str strcmp true | ||||
| 
 | ||||
| build_dir: | ||||
| 	mkdir -p build/o build/lib build/bin | ||||
| 	mkdir -p build/bin build/lib build/o | ||||
| 
 | ||||
| clean: | ||||
| 	rm -rf build/ | ||||
| @ -56,10 +57,16 @@ test: build | ||||
| 	tests/cc-compat.sh | ||||
| 	tests/posix-compat.sh | ||||
| 
 | ||||
| sysexits: build_dir | ||||
| 	bindgen --default-macro-constant-type signed \
 | ||||
| 		"$$(printf '#include <sysexits.h>\n' | cpp -M -idirafter include - \
 | ||||
| 		| sed 's/ /\n/g' | grep sysexits.h)" \
 | ||||
| 		| $(RUSTC) $(RUSTCFLAGS) --crate-type lib -o build/o/libsysexits.rlib - | ||||
| 
 | ||||
| false: src/false.rs build_dir | ||||
| 	$(RUSTC) $(RUSTCFLAGS) -o build/bin/false src/false.rs | ||||
| 
 | ||||
| fop: src/fop.rs build_dir | ||||
| fop: src/fop.rs build_dir sysexits | ||||
| 	$(RUSTC) $(RUSTCFLAGS) -o build/bin/fop src/fop.rs | ||||
| 
 | ||||
| intcmp: src/intcmp.c build_dir | ||||
| @ -76,4 +83,3 @@ strcmp: src/strcmp.c build_dir | ||||
| 
 | ||||
| true: src/true.rs build_dir | ||||
| 	$(RUSTC) $(RUSTCFLAGS) -o build/bin/true src/true.rs | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										23
									
								
								src/fop.rs
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								src/fop.rs
									
									
									
									
									
								
							| @ -18,13 +18,18 @@ | ||||
| 
 | ||||
| use std::{ | ||||
| 	env::args, | ||||
| 	io::{ Read, stdin, Write }, | ||||
| 	io::{ stdin, Write }, | ||||
| 	process::{ Command, exit, Stdio }, | ||||
| }; | ||||
| 
 | ||||
| extern crate sysexits; | ||||
| use sysexits::EX_USAGE; | ||||
| 
 | ||||
| fn main() { | ||||
| 	let argv = args().collect::<Vec<String>>(); | ||||
| 
 | ||||
| 	let usage = format!("Usage: {} index command [args...]", argv[0]); | ||||
| 
 | ||||
| 	let index = match argv.get(1) { | ||||
| 		Some(i) => { | ||||
| 			i.parse::<usize>().unwrap_or_else(|_| { | ||||
| @ -33,18 +38,18 @@ fn main() { | ||||
| 			}) | ||||
| 		}, | ||||
| 		None => { | ||||
| 			eprintln!("Usage: {} index command args...", argv[0]); | ||||
| 			exit(1); | ||||
| 			eprintln!("{}", usage); | ||||
| 			exit(EX_USAGE); | ||||
| 		}, | ||||
| 	}; | ||||
| 
 | ||||
| 	let mut buf = String::new(); | ||||
| 	stdin().read_to_string(&mut buf).unwrap(); | ||||
| 	stdin().read_line(&mut buf).unwrap(); | ||||
| 	let mut fields = buf.split('␞').collect::<Vec<&str>>(); | ||||
| 
 | ||||
| 	argv.get(2).unwrap_or_else(|| { | ||||
| 		eprintln!("Usage: {} index command args...", argv[0]); | ||||
| 		exit(1); | ||||
| 		eprintln!("{}", usage); | ||||
| 		exit(EX_USAGE); | ||||
| 	}); | ||||
| 
 | ||||
| 	let opts = argv.iter().clone().skip(3).collect::<Vec<&String>>(); | ||||
| @ -57,7 +62,11 @@ fn main() { | ||||
| 		.unwrap(); | ||||
| 
 | ||||
| 	let field = fields.get(index).unwrap_or_else(|| { | ||||
| 		eprintln!("{}: {}: No such index in input.", argv[0], index.to_string()); | ||||
| 		eprintln!( | ||||
| 			"{}: {}: No such index in input.", | ||||
| 			argv[0], | ||||
| 			index.to_string() | ||||
| 		); | ||||
| 		exit(1); | ||||
| 	}); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user