CC		= gcc
CPP		= g++
CPPFLAGS	= -O2 -g
SUBDIRS		= ../baseclasses
BASEOBJS	= ../baseclasses/CString.o \
	../baseclasses/CTime.o \
	../baseclasses/CException.o \
	../baseclasses/CMd5.o \
	../baseclasses/CArray.o \
	../baseclasses/CConfig.o \
	../baseclasses/CFile.o \
	../baseclasses/CFifoBuffer.o \
	../baseclasses/CMultipartForm.o \
	../baseclasses/CQueryString.o
OBJS		= printpage.o \
	CUploadedFiles.o \
	ExpireFiles.o \
	CheckLoadAverage.o \
	GetInterval.o \
	RemakeIndex.o \
	UploadFileCheck.o \
	ProcessThreadArticle.o \
	ReadFileLine.o
TARGETS		= uploadform.cgi upload.cgi remakeindex.cgi deleteform.cgi delete.cgi adminmenu.cgi bbs.cgi read.cgi expirecheck.cgi
INSTALLTARGET	= $(HOME)/public_html/uploader
HTPASSWD	= /usr/local/apache2/bin/htpasswd

all:	objectmake $(OBJS) $(TARGETS)

install:
	mkdir -p $(INSTALLTARGET)/cgi-bin/admin
	mkdir -p $(INSTALLTARGET)/board/dat
	chmod 755 $(INSTALLTARGET)/cgi-bin
	chmod 755 $(INSTALLTARGET)/cgi-bin/admin
	chmod 777 $(INSTALLTARGET)/board
	chmod 777 $(INSTALLTARGET)/board/dat
	chmod 777 $(INSTALLTARGET)
	cp $(TARGETS) $(INSTALLTARGET)/cgi-bin
	mv $(INSTALLTARGET)/cgi-bin/admin*.cgi $(INSTALLTARGET)/cgi-bin/admin
	chmod 711 $(INSTALLTARGET)/cgi-bin/*.cgi
	mkdir -p $(INSTALLTARGET)/source
	chmod 777 $(INSTALLTARGET)/source

	@if [ ! -f "$(INSTALLTARGET)/cgi-bin/config.cgi" ]; then \
		cp config.cgi $(INSTALLTARGET)/cgi-bin; \
	else \
		echo "*************************************************************************"; \
		echo "$(INSTALLTARGET)/cgi-bin/config.cgi was already created. skipping"; \
		echo "*************************************************************************"; \
	fi

	chmod 744 $(INSTALLTARGET)/cgi-bin/config.cgi

	@if [ ! -f "$(INSTALLTARGET)/.htadminaccess" ]; then \
		if [ ! -f "$(HTPASSWD)" ]; then \
			echo "*************************************************************************"; \
			echo "htpasswd not found; administrative menu can be accessed by anybody!"; \
			echo "*************************************************************************"; \
		else \
			echo "*************************************************************************"; \
			echo "creating new .htadminaccess/.htadminpasswd/.htadminprivilege"; \
			echo -e "AuthUserFile $(INSTALLTARGET)/.htadminpasswd\nAuthName \"Uploader authorization\"\nAuthType Basic\n\nrequire valid-user" > $(INSTALLTARGET)/.htadminaccess; \
			\
			export ADMINPASSWD=`dd if=/dev/random bs=256 count=1 2> /dev/null | md5sum | head -c 5`; \
			$(HTPASSWD) -nb admin $$ADMINPASSWD > $(INSTALLTARGET)/.htadminpasswd; \
			echo "admin::Administrator=1" > $(INSTALLTARGET)/.htadminprivilege; \
			echo "admin::ConfigMaster=1" >> $(INSTALLTARGET)/.htadminprivilege; \
			echo "admin::DeleteFile=1" >> $(INSTALLTARGET)/.htadminprivilege; \
			echo "admin::BrowseFileDetail=1" >> $(INSTALLTARGET)/.htadminprivilege; \
			echo "Your uploader's administrative account is"; \
			echo -e "user=admin password=$$ADMINPASSWD"; \
			echo "Don't forget this."; \
			export ADMINPASSWD=; \
			echo "*************************************************************************"; \
			\
			chmod 777 $(INSTALLTARGET)/.htadminaccess; \
			chmod 777 $(INSTALLTARGET)/.htadminpasswd; \
			chmod 777 $(INSTALLTARGET)/.htadminprivilege; \
		fi \
	else \
		echo "*************************************************************************"; \
		echo "$(INSTALLTARGET)/.htadminaccess was already created. skipping"; \
		echo "*************************************************************************"; \
	fi

	rm -f $(INSTALLTARGET)/cgi-bin/admin/.htaccess
	ln -s ../../.htadminaccess $(INSTALLTARGET)/cgi-bin/admin/.htaccess
	rm -f $(INSTALLTARGET)/cgi-bin/admin/source
	ln -s ../../source $(INSTALLTARGET)/cgi-bin/admin/source
	rm -f $(INSTALLTARGET)/test
	ln -s cgi-bin $(INSTALLTARGET)/test

	cd $(INSTALLTARGET)/cgi-bin; ./remakeindex.cgi > /dev/null

objectmake:
	$(MAKE) -C $(SUBDIRS) all

uploadform.cgi:	uploadformcgi.cpp $(BASEOBJS) $(OBJS)
	$(CPP) $(CPPFLAGS) -c -o uploadformcgi.o uploadformcgi.cpp
	$(CPP) $(CPPFLAGS) -lcrypt -o uploadform.cgi uploadformcgi.o $(BASEOBJS) $(OBJS)

upload.cgi: uploadcgi.cpp $(BASEOBJS) $(OBJS)
	$(CPP) $(CPPFLAGS) -c -o uploadcgi.o uploadcgi.cpp
	$(CPP) $(CPPFLAGS) -lcrypt -o upload.cgi uploadcgi.o $(BASEOBJS) $(OBJS)

remakeindex.cgi: remakeindexcgi.cpp $(BASEOBJS) $(OBJS)
	$(CPP) $(CPPFLAGS) -c -o remakeindexcgi.o remakeindexcgi.cpp
	$(CPP) $(CPPFLAGS) -lcrypt -o remakeindex.cgi remakeindexcgi.o $(BASEOBJS) $(OBJS)

deleteform.cgi: deleteformcgi.cpp $(BASEOBJS) $(OBJS)
	$(CPP) $(CPPFLAGS) -c -o deleteformcgi.o deleteformcgi.cpp
	$(CPP) $(CPPFLAGS) -lcrypt -o deleteform.cgi deleteformcgi.o $(BASEOBJS) $(OBJS)

delete.cgi: deletecgi.cpp $(BASEOBJS) $(OBJS)
	$(CPP) $(CPPFLAGS) -c -o deletecgi.o deletecgi.cpp
	$(CPP) $(CPPFLAGS) -lcrypt -o delete.cgi deletecgi.o $(BASEOBJS) $(OBJS)

adminmenu.cgi: adminmenucgi.cpp \
	adminmenucgi_userlist.cpp \
	adminmenucgi_usermodify.cpp \
	adminmenucgi_filelist.cpp \
	adminmenucgi_filedetail.cpp \
	adminmenucgi_filestop.cpp \
	adminmenucgi_filestart.cpp \
	$(BASEOBJS) $(OBJS)
	$(CPP) $(CPPFLAGS) -c -o adminmenucgi.o adminmenucgi.cpp
	$(CPP) $(CPPFLAGS) -c -o adminmenucgi_userlist.o adminmenucgi_userlist.cpp
	$(CPP) $(CPPFLAGS) -c -o adminmenucgi_usermodify.o adminmenucgi_usermodify.cpp
	$(CPP) $(CPPFLAGS) -c -o adminmenucgi_filelist.o adminmenucgi_filelist.cpp
	$(CPP) $(CPPFLAGS) -c -o adminmenucgi_filedetail.o adminmenucgi_filedetail.cpp
	$(CPP) $(CPPFLAGS) -c -o adminmenucgi_filestop.o adminmenucgi_filestop.cpp
	$(CPP) $(CPPFLAGS) -c -o adminmenucgi_filestart.o adminmenucgi_filestart.cpp
	$(CPP) $(CPPFLAGS) -c -o adminmenucgi_filedelete.o adminmenucgi_filedelete.cpp
	$(CPP) $(CPPFLAGS) -c -o adminmenucgi_filethreadbrowse.o adminmenucgi_filethreadbrowse.cpp
	$(CPP) $(CPPFLAGS) -c -o adminmenucgi_filethreadstopresume.o adminmenucgi_filethreadstopresume.cpp
	$(CPP) $(CPPFLAGS) -c -o adminmenucgi_filethreadresdelete.o adminmenucgi_filethreadresdelete.cpp
	$(CPP) $(CPPFLAGS) -lcrypt -o adminmenu.cgi adminmenucgi.o \
		adminmenucgi_userlist.o \
		adminmenucgi_usermodify.o \
		adminmenucgi_filelist.o \
		adminmenucgi_filedetail.o \
		adminmenucgi_filestop.o \
		adminmenucgi_filestart.o \
		adminmenucgi_filedelete.o \
		adminmenucgi_filethreadbrowse.o \
		adminmenucgi_filethreadstopresume.o \
		adminmenucgi_filethreadresdelete.o \
		$(BASEOBJS) $(OBJS)

bbs.cgi: bbscgi.cpp $(BASEOBJS) $(OBJS)
	$(CPP) $(CPPFLAGS) -c -o bbscgi.o bbscgi.cpp
	$(CPP) $(CPPFLAGS) -lcrypt -o bbs.cgi bbscgi.o $(BASEOBJS) $(OBJS)

read.cgi: readcgi.cpp $(BASEOBJS) $(OBJS)
	$(CPP) $(CPPFLAGS) -c -o readcgi.o readcgi.cpp
	$(CPP) $(CPPFLAGS) -lcrypt -o read.cgi readcgi.o $(BASEOBJS) $(OBJS)

expirecheck.cgi: expirecheckcgi.cpp $(BASEOBJS) $(OBJS)
	$(CPP) $(CPPFLAGS) -c -o expirecheckcgi.o expirecheckcgi.cpp
	$(CPP) $(CPPFLAGS) -lcrypt -o expirecheck.cgi expirecheckcgi.o $(BASEOBJS) $(OBJS)

.cpp.o:	$<
	$(CPP) $(CPPFLAGS) -x c++ -c -o $@ $<

clean:
	$(MAKE) -C $(SUBDIRS) $@
	rm -f *.o
	rm -f *~
	rm -f $(TARGETS)
