#----------------------------------------------------------------------------
#       Makefile,v 4.120 2001/10/03 00:56:41 bala Exp
#
#       Top-level Makefile for the ACE toolkit libraries, tests, and
#       applications
#----------------------------------------------------------------------------

#### Please see ACE-INSTALL.html for build information.

#----------------------------------------------------------------------------
#       Local macros
#----------------------------------------------------------------------------

INFO    = README \
          THANKS \
          VERSION

DIRS    = ace \
          netsvcs \
          tests \
          apps \
          examples

CLONE   = Makefile \
          ace \
          apps \
          bin \
          etc \
          examples \
          include \
          netsvcs

#----------------------------------------------------------------------------
#       Include macros and targets
#----------------------------------------------------------------------------

include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU
include $(ACE_ROOT)/include/makeinclude/macros.GNU
include $(ACE_ROOT)/include/makeinclude/rules.common.GNU
include $(ACE_ROOT)/include/makeinclude/rules.nested.GNU
include $(ACE_ROOT)/include/makeinclude/rules.nolocal.GNU

# Optional TAO targets.
-include $(ACE_ROOT)/TAO/tao_targets.GNU

# For the following to work you need to compile the
# $(ACE_ROOT)/bin/clone.cpp file and install it in your ~/bin
# directory (or some place similar).

.PHONY: clone
clone:
	@for dir in $(CLONE); \
        do \
                (clone -s $(ACE_ROOT)/$$dir $$dir) \
        done

CORE_DIRS= \
	ace \
	apps/gperf/src \
	TAO/tao \
	TAO/TAO_IDL \
	TAO/orbsvcs/orbsvcs \
	TAO/orbsvcs/Naming_Service

.PHONY: Core
Core:
	@for dir in $(CORE_DIRS); \
	do \
		$(MAKE) -C $$dir; \
	done

#### NOTE:  The following comments describe how to create kits.
####        It's intended for use by ACE+TAO developers and
####        maintainers only.  ACE+TAO users need not be concerned
####        with creating kits, just unpacking and using them.

#### The "release" and "releaseall" targets can be used to create
#### the ACE and ACE+TAO kits.  By default, each creates a new beta
#### release.  To create a new minor or major release, add REL=minor
#### or REL=major, respectively, to the make invocation.
####
#### NOTE: the REL modifier applies to _both_ ACE and TAO in
#### releaseall!
####
#### To create a new ACE minor release and a TAO beta release:
####   % make release REL=minor
####   % cd TAO
####   % make release
####
#### There are some other release/releaseall options [default value is in
#### brackets]:
####   ACE_TAG [ACE version in your workspace]: prepend tag with -ta
####   TAO_TAG [TAO version in your workspace]: prepend tag with -tt
####
####   NOTE: the ACE and TAO versions will be updated automatically
####   by release/releaseall.  ACE_TAG and TAO_TAG can be overridden
####   to kit a particular version.
####
####   APPLY_NEW_TAG [enabled]: set to null to disable
####   CHECK [disabled]: set to -n to see what make_release will do, but not
####     do it
####   GENERATE_MAN_PAGES [enabled]: set to null to disable regeneration of
####     the ACE_wrappers/man/ hierarchy
####   INSTALL_KIT [enabled]: set to null to not install in public
####     ftp/http directory on host ace
####   REL [beta]: set to minor or major, optionally, when applying a new tag
####   ZIP_FILES [enabled]: set to -z to disable creation of .zip files
####
#### Example creation of ACE-only kit, version ACE-5_0_1 from current
#### workspace:
#### make release ACE_TAG='-ta ACE-5_0_1' APPLY_NEW_TAG= \
####   GENERATE_MAN_PAGES= INSTALL_KIT= ZIP_FILES=-z

CONTROLLED_FILES = \
        ACE-INSTALL.html \
        ACE-install.sh \
        ASNMP \
        AUTHORS \
        COPYING \
        ChangeLog* \
        FAQ \
        Makefile \
        Makefile.am \
        PACE \
        PROBLEM-REPORT-FORM \
        README \
        THANKS \
        TODO \
        VERSION \
        acconfig.h \
        ace \
        ace-config.1.in \
        ace-config.in \
        aceConf.sh.in \
        apps \
        bin \
        configure.in \
        docs \
        etc \
        examples \
        include \
        m4 \
        netsvcs \
        os-patches \
        performance-tests \
        tests \
        websvcs

RELEASE_FILES = \
        $(addprefix ACE_wrappers/,$(CONTROLLED_FILES)) \
        ACE_wrappers/ACE-INSTALL \
        ACE_wrappers/man

ALL_RELEASE_FILES = \
        $(RELEASE_FILES) \
        ACE_wrappers/TAO

RELEASE_LIB_FILES = \
        ACE_wrappers/VERSION \
        ACE_wrappers/PACE \
        ACE_wrappers/ace \
        ACE_wrappers/bin \
        ACE_wrappers/etc \
        ACE_wrappers/include \
        ACE_wrappers/m4 \
        ACE_wrappers/netsvcs \
        ACE_wrappers/tests \
        ACE_wrappers/websvcs

# Files that should get tagged at release time but shouldn't be in any
# of the release file lists since they may already be in a directory
# found in those lists.
RELEASE_TAG_FILES = \
        html \
        man/Makefile.am \
        man/man3/Makefile.am

.PHONY: release releasetao releaseall tag

ACE_TAG_VALUE = $(shell head -1 VERSION | perl -ne \
                's/.* ([\d\.]+),.*\n/$$1/; tr/./_/; print "ACE-$$_";')
ACE_TAG       = -ta $(ACE_TAG_VALUE)
TAO_TAG_VALUE = $(shell head -1 TAO/VERSION | perl -ne \
                's/.* ([\d\.]+),.*\n/$$1/; tr/./_/; print "TAO-$$_";')
TAO_TAG       = -tt $(TAO_TAG_VALUE)
APPLY_NEW_TAG      = tag
CHECK              =
GENERATE_MAN_PAGES = -g
INSTALL_KIT        = -i
REL                = beta
ZIP_FILES          =

#### The release target creates the ACE (only) kit.
release: $(APPLY_NEW_TAG)
	@$(ACE_ROOT)/bin/make_release -k ace $(ACE_TAG) \
         $(INSTALL_KIT) $(GENERATE_MAN_PAGES) $(ZIP_FILES) $(CHECK)

tag:
	@$(ACE_ROOT)/bin/make_release $(CHECK) -k ace -v $(REL) -u

#### The following target is for use by the TAO Makefile.  It should not
#### be called directly from the command line.  The releasetao target
#### creates the combined ACE-TAO kit.
releasetao:
	@$(ACE_ROOT)/bin/make_release -k ace+tao $(ACE_TAG) $(TAO_TAG) \
         $(INSTALL_KIT) $(GENERATE_MAN_PAGES) $(ZIP_FILES) $(CHECK)

#### The releaseall target:
####   1) Creates the ACE kit.
####   2) Updates the TAO release (VERSION, ChangeLog, and tag) by
####      recursively invoking make release in the TAO directory.
####      The make then recursively invokes make releasetao in this
####      directory to create the combined ACE-TAO kit.
releaseall: $(APPLY_NEW_TAG)
	@cd TAO  &&  $(MAKE) -s release REL=$(REL)

.PHONY: show_controlled_files show_release_files show_release_lib_files
.PHONY: show_release_tag_files

show_controlled_files:
	@echo $(CONTROLLED_FILES)

show_release_files:
	@echo $(RELEASE_FILES)

show_release_lib_files:
	@echo $(RELEASE_LIB_FILES)

show_release_tag_files:
	@echo $(RELEASE_TAG_FILES)

ACE-INSTALL: ACE-INSTALL.html
	@lynx -dump $< > $@
