default: loadpolicy editpolicy savepolicy sortpolicy findtemp setlevel ccs-auditd ccs-queryd checkpolicy makesyaoranconf ld-watch
	@echo "You have compiled some of programs in this package."
	@echo "In most cases, it is enough. But you may need more programs."
	@echo "If you need to compile all programs in this package, type 'make all'."

#
# If you want to suppress "warning: pointer targets in passing argument ... differ in signedness" warning messages,
# you can add "-Wno-pointer-sign" options to CFLAGS.
#
#CFLAGS=-Wall -Wno-pointer-sign -O3
#
CFLAGS=-Wall -O3

all: candy ccs-auditd ccs-queryd chaplet checkpolicy checktoken dumplink dumpsymlink editpolicy falsh findtemp gettoken groovy honey initrd-loop.img ld-watch loadpolicy makelink makesyaoranconf makesymlink remount_rootfs savepolicy setlevel sortpolicy

#
# Header files dependency.
#
/usr/include/curses.h:
	@echo "/usr/include/curses.h is missing."
	@echo "Run 'yum install ncurses-devel' or 'apt-get install libncurses5-dev'"

/usr/include/readline/readline.h:
	@echo "/usr/include/readline/readline.h is missing."
	@echo "Run 'yum install readline-devel' or 'apt-get install libreadline5-dev'"

#
# Tools for SAKURA and TOMOYO.
#

loadpolicy: loadpolicy.c policy.h
	gcc $(CFLAGS) -o loadpolicy loadpolicy.c
	chmod 700 loadpolicy

editpolicy: editpolicy.c /usr/include/curses.h
	gcc $(CFLAGS) -o editpolicy editpolicy.c -lncurses
	chmod 700 editpolicy

savepolicy: savepolicy.c policy.h
	gcc $(CFLAGS) -o savepolicy savepolicy.c
	chmod 700 savepolicy

sortpolicy: sortpolicy.c policy.h
	gcc $(CFLAGS) -o sortpolicy sortpolicy.c
	chmod 700 sortpolicy

findtemp: findtemp.c
	gcc $(CFLAGS) -o findtemp findtemp.c
	chmod 700 findtemp

setlevel: setlevel.c
	gcc $(CFLAGS) -o setlevel setlevel.c
	chmod 700 setlevel

ccs-auditd: ccs-auditd.c
	gcc $(CFLAGS) -o ccs-auditd ccs-auditd.c
	chmod 700 ccs-auditd

ccs-queryd: ccs-queryd.c
	gcc $(CFLAGS) -o ccs-queryd ccs-queryd.c
	chmod 700 ccs-queryd

checkpolicy: checkpolicy.c
	gcc $(CFLAGS) -o checkpolicy checkpolicy.c
	chmod 700 checkpolicy

ld-watch: ld-watch.c
	gcc $(CFLAGS) -o ld-watch ld-watch.c
	chmod 700 ld-watch

#
# Tools for SYAORAN.
#

makesyaoranconf: makesyaoranconf.c
	gcc $(CFLAGS) -o makesyaoranconf makesyaoranconf.c
	chmod 700 makesyaoranconf

#
# Tools for root fs mounted using loopback.
#

remount_rootfs: remount_rootfs.c
	gcc $(CFLAGS) -o remount_rootfs remount_rootfs.c
	chmod 700 remount_rootfs

initrd-loop.img: linuxrc.c
	gcc $(CFLAGS) --static -s -o linuxrc linuxrc.c
	chmod 700 linuxrc
	mkdir -p tmp
	touch tmp/initrd-loop.tmp
	mke2fs -q -F -m 0 -b 1024 tmp/initrd-loop.tmp 512
	mount -o loop tmp/initrd-loop.tmp tmp
	mkdir tmp/dev
	mknod tmp/dev/console c 5 1
	mknod tmp/dev/null    c 1 3
	mknod tmp/dev/ram     b 1 1
	mknod tmp/dev/systty  c 4 0
	mknod tmp/dev/tty1    c 4 1
	mknod tmp/dev/tty2    c 4 2
	mknod tmp/dev/tty3    c 4 3
	mknod tmp/dev/tty4    c 4 4
	mv linuxrc tmp/
	sync
	umount -d tmp
	gzip -9 < tmp/initrd-loop.tmp > initrd-loop.img
	unlink tmp/initrd-loop.tmp
	rmdir tmp

#
# Tools for creating custom root fs.
#

makelink: makelink.cpp
	gcc $(CFLAGS) -o makelink makelink.cpp -lstdc++
	chmod 700 makelink

dumplink: dumplink.cpp
	gcc $(CFLAGS) -o dumplink dumplink.cpp -lstdc++
	chmod 700 dumplink

makesymlink: makesymlink.cpp
	gcc $(CFLAGS) -o makesymlink makesymlink.cpp -lstdc++
	chmod 700 makesymlink

dumpsymlink: dumpsymlink.cpp
	gcc $(CFLAGS) -o dumpsymlink dumpsymlink.cpp -lstdc++
	chmod 700 dumpsymlink

#
# Tools for CERBERUS.
#
# http://sourceforge.jp/projects/tomoyo/document/winf2005-en.pdf
#
# This package contains only programs prepared for
# Workshop on Informatics 2005 held in Japan.
#
# See http://tomoyo.sourceforge.jp/ for all available programs.
#

groovy: groovy.c
	gcc $(CFLAGS) -o groovy groovy.c
	chmod 755 groovy
 
honey: honey.c
	gcc $(CFLAGS) -o honey honey.c
	chmod 755 honey

candy: candy.c
	gcc $(CFLAGS) -o candy candy.c
	chmod 755 candy

chaplet: chaplet.c
	gcc $(CFLAGS) -o chaplet chaplet.c
	chmod 755 chaplet

gettoken: gettoken.c
	gcc $(CFLAGS) -o gettoken gettoken.c
	chmod 755 gettoken

checktoken: checktoken.c
	gcc $(CFLAGS) -o checktoken checktoken.c
	chmod 755 checktoken

falsh: falsh.c /usr/include/curses.h /usr/include/readline/readline.h
	gcc $(CFLAGS) -o falsh falsh.c -lncurses -lreadline
	chmod 755 falsh

#
# Delete all tools in this package.
#

clean:
	rm -f candy ccs-auditd ccs-queryd chaplet checkpolicy checktoken dumplink dumpsymlink editpolicy falsh findtemp gettoken groovy honey initrd-loop.img ld-watch loadpolicy makelink makesyaoranconf makesymlink remount_rootfs savepolicy setlevel sortpolicy
