CURDIR=vserver
PACKAGE_REV=0.25
MANDIR=/usr/share/man
PROGS=chbind chcontext reducecap rebootmgr vreboot readlink vunify vbuild \
	vcheck vserver-stat showattr vdu showperm capchroot vfiles \
	ifspec filetime listdevip fakerunlevel parserpmdump setctxlimit
GCCOPTS=-funsigned-char -Wall -g -O
all: $(PROGS)

proto:
	proto -ceo -fvutil.p vutil.cc syscall.cc

chcontext: chcontext.cc syscall.o
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" chcontext.cc syscall.o -o chcontext \
		-lstdc++

chbind: chbind.cc syscall.o
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" chbind.cc syscall.o -o chbind \
		-lstdc++

reducecap: reducecap.cc syscall.o
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" reducecap.cc syscall.o -o reducecap \
		-lstdc++

rebootmgr: rebootmgr.cc
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" rebootmgr.cc -o rebootmgr \
		-lstdc++

vreboot: vreboot.cc
	gcc -static $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" vreboot.cc -o vreboot 

readlink: readlink.cc
	gcc -funsigned-char $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" readlink.cc -o readlink \
		-lstdc++

vunify: vunify.cc vutil.o
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" vunify.cc vutil.o -o vunify \
		-lstdc++

vdu: vdu.cc
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" vdu.cc -o vdu \
		-lstdc++


vbuild: vbuild.cc vutil.o
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" vbuild.cc vutil.o -o vbuild \
		-lstdc++

vcheck: vcheck.cc vutil.o
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" vcheck.cc vutil.o -o vcheck \
		-lstdc++

vfiles: vfiles.cc vutil.o
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" vfiles.cc vutil.o -o vfiles \
		-lstdc++

showattr: showattr.cc
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" showattr.cc -o showattr \
		-lstdc++

showperm: showperm.cc
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" showperm.cc -o showperm \
		-lstdc++

capchroot: capchroot.cc syscall.o
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" capchroot.cc syscall.o -o capchroot \
		-lstdc++

ifspec: ifspec.cc 
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" ifspec.cc -o ifspec \
		-lstdc++

parserpmdump: parserpmdump.cc 
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" parserpmdump.cc -o parserpmdump \
		-lstdc++

vserver-stat: vserver-stat.c syscall.o
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" vserver-stat.c syscall.o -o vserver-stat

filetime: filetime.c
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" filetime.c -o filetime

listdevip: listdevip.cc
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" listdevip.cc -o listdevip

fakerunlevel: fakerunlevel.cc
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" fakerunlevel.cc -o fakerunlevel

setctxlimit: setctxlimit.cc syscall.o
	gcc $(GCCOPTS) -DVERSION=\"$(PACKAGE_REV)\" setctxlimit.cc syscall.o -o setctxlimit -lstdc++

clean:
	rm -f $(PROGS) *.bak *~ *.o */*.bak */*~
	make -C tests clean

USR_SBIN=/usr/sbin
USR_LIB_VSERVER=/usr/lib/vserver
install:
	mkdir -p $(RPM_BUILD_ROOT)$(USR_SBIN)
	mkdir -p $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	mkdir -p $(RPM_BUILD_ROOT)/etc/init.d
	mkdir -p $(RPM_BUILD_ROOT)/etc/vservers
	mkdir -p $(RPM_BUILD_ROOT)/$(MANDIR)/man8
	install -m 755 chbind $(RPM_BUILD_ROOT)$(USR_SBIN)
	install -m 755 chcontext $(RPM_BUILD_ROOT)$(USR_SBIN)
	install -m 755 reducecap $(RPM_BUILD_ROOT)$(USR_SBIN)
	install -m 755 rebootmgr $(RPM_BUILD_ROOT)$(USR_SBIN)
	./install-fix.sh vserver $(RPM_BUILD_ROOT)$(USR_SBIN) $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh newvserver $(RPM_BUILD_ROOT)$(USR_SBIN) $(USR_SBIN) $(USR_LIB_VSERVER)
	install -m 755 vpstree $(RPM_BUILD_ROOT)$(USR_SBIN)
	install -m 755 vtop $(RPM_BUILD_ROOT)$(USR_SBIN)
	install -m 755 vkill $(RPM_BUILD_ROOT)$(USR_SBIN)
	install -m 755 vps $(RPM_BUILD_ROOT)$(USR_SBIN)
	install -m 755 vserver-stat $(RPM_BUILD_ROOT)$(USR_SBIN)
	./install-fix.sh vrpm $(RPM_BUILD_ROOT)$(USR_SBIN) $(USR_SBIN) $(USR_LIB_VSERVER)
	install -m 755 save_s_context $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	./install-fix.sh vserverkillall $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER) $(USR_SBIN) $(USR_LIB_VSERVER)
	install -s -m 755 vreboot $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 755 vcheck $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 755 vunify $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 755 vbuild $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 755 vfiles $(RPM_BUILD_ROOT)$(USR_SBIN)
	install -m 755 vserver-copy $(RPM_BUILD_ROOT)$(USR_SBIN)
	install -m 755 readlink $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 755 showattr $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	ln -sf showattr $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)/setattr
	install -m 755 showperm $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 755 capchroot $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 755 filetime $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 755 listdevip $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 755 fakerunlevel $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 755 ifspec $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 755 parserpmdump $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 755 setctxlimit $(RPM_BUILD_ROOT)$(USR_SBIN)
	./install-fix.sh distrib-info $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)  $(USR_SBIN) $(USR_LIB_VSERVER)
	install -m 755 vdu $(RPM_BUILD_ROOT)$(USR_SBIN)
	./install-fix.sh vservers.sysv $(RPM_BUILD_ROOT)/etc/init.d/vservers  $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh v_sshd.sysv $(RPM_BUILD_ROOT)/etc/init.d/v_sshd $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh v_portmap.sysv $(RPM_BUILD_ROOT)/etc/init.d/v_portmap $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh v_named.sysv $(RPM_BUILD_ROOT)/etc/init.d/v_named $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh v_xinetd.sysv $(RPM_BUILD_ROOT)/etc/init.d/v_xinetd $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh v_httpd.sysv $(RPM_BUILD_ROOT)/etc/init.d/v_httpd $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh v_smb.sysv $(RPM_BUILD_ROOT)/etc/init.d/v_smb $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh v_sendmail.sysv $(RPM_BUILD_ROOT)/etc/init.d/v_sendmail $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh rebootmgr.sysv $(RPM_BUILD_ROOT)/etc/init.d/rebootmgr $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh vsysvwrapper $(RPM_BUILD_ROOT)/usr/lib/vserver/vsysvwrapper $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh vservers.grabinfo.sh $(RPM_BUILD_ROOT)/usr/lib/vserver $(USR_SBIN) $(USR_LIB_VSERVER)
	install -m 644 man/*.8 $(RPM_BUILD_ROOT)/$(MANDIR)/man8
	install -m 644 distrib/sample.conf $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 644 distrib/sample.sh $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	./install-fix.sh distrib/install-rh7.2 $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER) $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh distrib/install-rh7.3 $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER) $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh distrib/install-rh8.0 $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER) $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh distrib/install-rh9.0 $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER) $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh distrib/install-post.sh $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER) $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh distrib/install-pre.sh $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER) $(USR_SBIN) $(USR_LIB_VSERVER)
	./install-fix.sh distrib/install-mdk8.2 $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER) $(USR_SBIN) $(USR_LIB_VSERVER)
	install -m 644 distrib/rh7.3-minimum $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 644 distrib/rh8.0-minimum $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 644 distrib/rh9.0-minimum $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	install -m 644 distrib/mdk8.2-minimum $(RPM_BUILD_ROOT)$(USR_LIB_VSERVER)
	test -f $(RPM_BUILD_ROOT)/etc/vservers.conf || \
		install -m 644 vservers.conf $(RPM_BUILD_ROOT)/etc/vservers.conf
	test -f $(RPM_BUILD_ROOT)/etc/vservers/newvserver.defaults || \
		install -m 644 newvserver.defaults $(RPM_BUILD_ROOT)/etc/vservers/



buildrpm: buildspec

RPMTOPDIR=/usr/src/redhat
RPM=rpm

buildrpm: buildspec buildsrc
	(unset LD_PRELOAD ; cd $(RPMTOPDIR)/SPECS && \
		$(RPM) -vv -ba vserver-$(PACKAGE_REV).spec)

buildmyrpm:
	$(MAKE) RPM=myrpm RPMTOPDIR=/tmp/myrpm buildrpm

buildmyspec:
	$(MAKE) RPM=myrpm RPMTOPDIR=/tmp/myrpm buildspec buildsrc

buildspec:
	sed s/PACKAGE_REV/$(PACKAGE_REV)/ <vserver.spec > $(RPMTOPDIR)/SPECS/vserver-$(PACKAGE_REV).spec

PKGDIR=$(RPMTOPDIR)/SOURCES/vserver-$(PACKAGE_REV)
buildsrc: 
	rm -fr $(PKGDIR)
	mkdir $(PKGDIR) $(PKGDIR)/doc
	cp -a . $(PKGDIR)/.
	test -f doc/changelog.txt || lynx --dump http://remtk/solucor/changes.hc?projet=vserver\&version=all\&raw=1 >$(PKGDIR)/doc/changelog.txt
	test -f doc/intro.txt || lynx --dump http://remtk/solucor/miscprj/s_context.hc?dp=0\&prjstate=1\&nodoc=0 >$(PKGDIR)/doc/intro.txt
	test -f doc/FAQ.txt || lynx --dump http://remtk/solucor/howto.hc?projet=vserver\&id=all >$(PKGDIR)/doc/FAQ.txt
	(cd $(PKGDIR) && make clean && \
		cd .. && \
		tar zcf $(PKGDIR).src.tar.gz vserver-$(PACKAGE_REV))
	rm -fr $(PKGDIR)

# Prepare the spec file and source tar and copy it in the redhat-6.2 env
buildspec6.2: buildmyspec
	mv /tmp/myrpm/SPECS/vserver-$(PACKAGE_REV).spec /rh6.2/tmp
	mv /tmp/myrpm/SOURCES/vserver-$(PACKAGE_REV).src.tar.gz /rh6.2/usr/src/redhat/SOURCES

