SOURCES := $(wildcard *.cpp)
PROGRAMS := $(patsubst %.cpp,%,$(SOURCES))

all:

.PHONY: all clean setup setup-root pledge1 pledge2 $(PROGRAMS)

$(PROGRAMS): %: %.cpp
	@g++ -o $@ $<
	@echo "-- $@ --"
	@./$@

clean:
	rm -f $(PROGRAMS) overflow overflow_input

setup:
	@g++ -o setuid setuid.cpp
	@g++ -o setuid_safer setuid_safer.cpp
	@g++ -o rw rw.cpp

setup-root:
	chown root:root ./setuid
	chmod u+s ./setuid
	@chown root:root ./setuid_safer 2>/dev/null
	@chmod u+s ./setuid_safer 2>/dev/null

pledge1:
	./pledge -V -p 'stdio rpath' ./rw

pledge2:
	./pledge -V -p 'stdio rpath wpath' ./rw

runoverflow:
	@g++ -fno-stack-protector -o overflow overflow.cpp
	@g++ -o overflow_input overflow_input.cpp
	./overflow_input | ./overflow
