all: proc_fork proc_exec simple_shell parent_pipe child_pipe parent_dup

proc_fork: proc_fork.c
	cc -Wall -o proc_fork proc_fork.c

proc_exec: proc_exec.c
	cc -Wall -o proc_exec proc_exec.c

simple_shell: simple_shell.c
	cc -Wall -o simple_shell simple_shell.c

parent_pipe: parent_pipe.c
	cc -Wall -o parent_pipe parent_pipe.c

child_pipe: child_pipe.c
	cc -Wall -o child_pipe child_pipe.c

# parent_dup is more complex.  We use library routines from "err.c"
parent_dup: parent_dup.o err.o
	cc -Wall -o parent_dup parent_dup.o err.o

parent_dup.o: parent_dup.c err.h
	cc -Wall -c parent_dup.c

err.o: err.c err.h
	cc -Wall -c err.c

clean:
	rm -f *.o proc_fork proc_exec simple_shell *_pipe parent_dup
