#
# (C) Copyright IBM Corp. 1997-1999  All rights reserved.
#
# US Government Users Restricted Rights Use, duplication or
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
#
# The program is provided "as is" without any warranty express or
# implied, including the warranty of non-infringement and the implied
# warranties of merchantibility and fitness for a particular purpose.
# IBM will not be liable for any damages suffered by you as a result
# of using the Program. In no event will IBM be liable for any
# special, indirect or consequential damages or lost profits even if
# IBM has been advised of the possibility of their occurrence. IBM
# will not be liable for any third party claims against you.
#
# @version:
#

all:	includes $(CPP_OBJECTS) publish

includes:	pubheaders

pubheaders:
	-mkdir -p $(XML_INC_DIR)/$(MODULE)/$(SUBMODULE)
	$(CP) $(CPP_PUBHEADERS) $(XML_INC_DIR)/$(MODULE)/$(SUBMODULE)

publish:
	-mkdir -p ${ALL_OBJECTS_DIR}
	$(CP) $(CPP_OBJECTS) $(ALL_OBJECTS_DIR)

# this may generate unnecessary dependencies, but it makes life easier
depend: includes
	$(MAKE_DEPEND) $(XML_INCL) *.cpp > $(DEPFILE)

clean:
	@echo "Making clean in $(MODULE)/$(SUBMODULE) ..."
	$(RM) $(CPP_OBJECTS)

distclean:	clean
	$(RM) Makefile $(DEPFILE)
	@echo "Removing all $(MODULE)/$(SUBMODULE) header files ..."
	@for file in $(CPP_PUBHEADERS); do \
	rm -f $(XML_INC_DIR)/$(MODULE)/$(SUBMODULE)/$$file; \
	done
	@echo "Removing all $(MODULE)/$(SUBMODULE) object files ..."
	@for file in $(CPP_OBJECTS); do \
	rm -f $(ALL_OBJECTS_DIR)/$$file; \
	done

install:
	-mkdir -p $(PREFIX)/$(MODULE)/$(SUBMODULE)
	$(CP) $(CPP_PUBHEADERS) $(PREFIX)/$(MODULE)/$(SUBMODULE)
