# file: src/Makefile
#
#  2001 OpenCA Group

TOP	= .
include $(TOP)/Makefile.global-vars

SNAP	= SNAP-$(TODAY)
VER	= $(VERSION)
C_DIR	= `$(ECHO) "$(PWD)" | $(SED) "s|/.*/||g"`
G_DIR   = `$(ECHO) "$(PWD)"`

SUBDIRS	= \
	docs		\
	src

#---- variable settings above, rules below ----

.PHONY:	default info help ca ext test install-ca install-common install-ext install-ldap install-node install-pub install-ra install-doc clean clean.local distclean

default::	$(SUBDIRS) language

info help::
		@$(ECHO) ""
		@$(ECHO) "phony make targets are:"
		@$(ECHO) "  ca              make everything CA server related"
		@$(ECHO) "  ext             make everything RA and public server related"
		@$(ECHO) "  doc             make everything documentation related"
		@$(ECHO) "  install-ca      install CA components"
		@$(ECHO) "  install-common  install all common components (for package builds)"
		@$(ECHO) "  install-ext     install RA and public server components"
		@$(ECHO) "  install-ldap    install LDAP components"
		@$(ECHO) "  install-node    install aministration components"
		@$(ECHO) "  install-pub     install public server components"
#		@$(ECHO) "  install-scep    install SCEP components (requires install-ext)"
		@$(ECHO) "  install-ra      install RA server components"
		@$(ECHO) "  install-doc     install documentation"
		@$(ECHO) "  clean           remove everything created by make"
		@$(ECHO) "  distclean       like clean, plus remove everything created by ./configure"
		@$(ECHO) ""

ca ext::	default

doc::
		$(MAKE) docs SUBTARGET=

language::
		$(MAKE) src SUBTARGET=language

install-doc::
		$(MAKE) docs SUBTARGET=install

install-ca::	install-common-parts install-node

install-ext::	install-node install-ra install-ldap install-pub

install-node::	install-common-parts

install-pub::	install-common-parts

install-ra::	install-common-parts

install-ldap::	install-common-parts

# test install-ca install-ext clean distclean install-scep::
test install-ca install-common install-ldap install-node install-pub install-ra clean distclean::
		$(MAKE) $(SUBDIRS) SUBTARGET=$@

# we don't install the common components if we build packages
install-common-parts::
		@if [ $(package_build) != "yes" ]; then \
			echo installing common components because it is not a package build; \
			$(MAKE) install-common; \
		else \
			echo not installing common components because it is a package build; \
		fi

$(SUBDIRS)::
		cd $@ && $(MAKE) $(SUBTARGET)

dist:
	@$(ECHO)
	@$(RM) OpenCA-*$(VER).tar.gz
	@$(ECHO) "Creating Distribution TAR archive $(C_DIR) ... $(G_DIR)"
	@$(CHOWN) -R $(dist_user).$(dist_group) *;
	@( cd ..; $(MV) $(C_DIR) OpenCA-$(VER) ; \
		$(TAR) cpf OpenCA-$(VER).tar --exclude "CVS" OpenCA-$(VER);\
		$(GZIP) OpenCA-$(VER).tar;\
		$(MV) OpenCA-$(VER) $(C_DIR) );
	@$(MV) ../OpenCA-$(VER).tar.gz .;
	@$(ECHO) "Done.";
	@$(ECHO)

snap:
	@$(ECHO)
	@$(ECHO) -n "Creating Distribution TAR archive $(G_DIR)... "
	@$(CHOWN) -R $(dist_user).$(dist_group) *;
	@( cd ..; $(CP) -rf $(C_DIR) /tmp/OpenCA-$(SNAP) ; cd /tmp ; \
		$(TAR) cpf OpenCA-$(SNAP).tar --exclude "CVS" OpenCA-$(SNAP);\
		$(GZIP) OpenCA-$(SNAP).tar;\
		$(RM) -rf OpenCA-$(SNAP); );
	@$(MV) /tmp/OpenCA-$(SNAP).tar.gz .;
	@$(ECHO) "Done.";
	@$(ECHO)

rpms:
	@$(ECHO)
	@$(ECHO) "Creating Distribution RPMS ... "
	@contrib/rpm/build-rpm.sh all $(DISTRIBUTION)

source: 
	@$(ECHO)
	@$(RM) OpenCA-*$(VER).tar.gz
	@$(ECHO) "Creating Distribution source archive $(C_DIR) ... "
	@$(CHOWN) -R $(dist_user).$(dist_group) *;
	@( cd ..; $(MV) $(C_DIR) OpenCA-$(PACKAGE)-$(VER) ; \
		$(TAR) cpf OpenCA-$(PACKAGE)-$(VER).tar --exclude "CVS" OpenCA-$(PACKAGE)-$(VER);\
		$(GZIP) OpenCA-$(PACKAGE)-$(VER).tar;\
		$(MV) OpenCA-$(PACKAGE)-$(VER) $(C_DIR) );
	@$(MV) ../OpenCA-$(PACKAGE)-$(VER).tar.gz .;
	@$(ECHO) "Done."
	@$(ECHO)

Makefile.global-vars:	Makefile.global-vars.in config.status
		$(SHELL) config.status

config.status:	configure
		$(SHELL) config.status --recheck

configure:	configure.in
		autoconf

clean distclean::	clean.local

clean.local::
		$(RM) -rf .ca* .ra* .install* .ssl* tmp/

distclean::
		$(RM) config.status config.cache config.log
		$(RM) Makefile.global-vars
