BUG#: 8730
[tpot/pegasus.git.bak/pegasus.git] / Makefile
index 7eabed57f86317b87f2e045fcb5b6f6da78a0dd7..4aa324e34226d2b3ad0b1e93b6519350a66e0757 100644 (file)
--- a/Makefile
+++ b/Makefile
+#//%LICENSE////////////////////////////////////////////////////////////////
+#//
+#// Licensed to The Open Group (TOG) under one or more contributor license
+#// agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
+#// this work for additional information regarding copyright ownership.
+#// Each contributor licenses this file to you under the OpenPegasus Open
+#// Source License; you may not use this file except in compliance with the
+#// License.
+#//
+#// Permission is hereby granted, free of charge, to any person obtaining a
+#// copy of this software and associated documentation files (the "Software"),
+#// to deal in the Software without restriction, including without limitation
+#// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+#// and/or sell copies of the Software, and to permit persons to whom the
+#// Software is furnished to do so, subject to the following conditions:
+#//
+#// The above copyright notice and this permission notice shall be included
+#// in all copies or substantial portions of the Software.
+#//
+#// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+#// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+#// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+#// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+#// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+#// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+#// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#//
+#//////////////////////////////////////////////////////////////////////////
 # Pegasus top level make file
-# options are
-# Make rebuild
-# Make world
-# Make tests - Executes the complete test suite
-# Make repository - Rebuilds the Pegasus repository
-#
+# see the usage rule for options
+
 ROOT = .
 
 include $(ROOT)/env_var.status
 include $(ROOT)/mak/config.mak
 
+## Include mu in the clean structure
+## This required because mu is not part of the hiearchial build
+##structure.  It is built with the buildmu target.  Adding this
+## variable allows it to be cleaned with the normal clean target.
+RECURSE_EXTRA_CLEAN_DIRS += src/utils/mu
+
 # This is a recurse make file
-# Defines subdirectorys to go to recursively
+# Defines subdirectories to go to recursively
+
+DIRS = src
 
-# DIRS = src cgi
-DIRS = src test rpm Schemas
+TEST_DIRS = test
 
 # Define the inclusion of the recurse.mak file to execute the next
 # level of makefiles defined by the DIRS variable
 
+defaultrule: all setupdevserver
+
 include $(ROOT)/mak/recurse.mak
 
-# rebuild target cleans, setup dependencies, compiles all and builds 
-# repository
+.PHONY: FORCE
 
 FORCE:
 
-rebuild: clean depend all repository
-       @ $(MAKE) -s tests
+usage: FORCE
+       $(USAGE)
+       $(USAGE)"Makefile targets:"
+       $(USAGE)
+       $(USAGE)"Recursive rules - These are the primatives that traverse the tree"
+       $(USAGE)"invoking the specified command in each subdirectory directory."
+       $(USAGE)"NOTE: all is special, it specifies no target and therefore invokes"
+       $(USAGE)"the default rule for that directory."
+       $(USAGE)"all                 - recursive DEFAULT rule"
+       $(USAGE)"clean               - recursive clean"
+       $(USAGE)"depend              - buildmu recursive depend"
+       $(USAGE)"messages            - rootbundle recursive messages"
+       $(USAGE)"tests               - recursive tests"
+       $(USAGE)"poststarttests      - recursive poststarttests"
+       $(USAGE)
+       $(USAGE)"Combinational rules - Combine other rules to achieve results"
+       $(USAGE)"DEFAULT RULE        - all, setupdevserver"
+       $(USAGE)"new                 - clean repositoryclean"
+       $(USAGE)"build               - depend all, setupdevserver"
+       $(USAGE)"world               - build unittests servertests"
+       $(USAGE)
+       $(USAGE)"Functional rules - Other rules to achieve specified results"
+       $(USAGE)"clobber             -removes objects built during compile"
+       $(USAGE)"                     specifically the following directories are removed:"
+       $(USAGE)"                      $(PEGASUS_HOME)/bin"
+       $(USAGE)"                      $(PEGASUS_HOME)/lib"
+       $(USAGE)"                      $(PEGASUS_HOME)/obj"
+       $(USAGE)"buildmu             - builds the mu utility"
+       $(USAGE)"setupdevserver      - setup the development server env"
+       $(USAGE)"cleandevserver      - cleans the development server env"
+       $(USAGE)"repository          - builds the base repository. Does not remove other"
+       $(USAGE)"                      namespaces than the base namespaces."
+       $(USAGE)"testrepository      - builds items for the test suites into the repository"
+       $(USAGE)"repositoryclean     - removes the complete repository"
+       $(USAGE)"listplatforms       - List all valid platforms"
+       $(USAGE)
+       $(USAGE)"Test rules (accessable here but implemented in TestMakefile)"
+       $(USAGE)"alltests            - unittests and servertests"
+       $(USAGE)"unittests           - runs the unit functional test"
+       $(USAGE)"servertests         - runs basic server tests"
+       $(USAGE)"perftests           - runs basic server performance tests"
+       $(USAGE)"standardtests       - runs server extended tests"
+       $(USAGE)"testusage           - TestMakefile usage"
+       $(USAGE)"testusage2          - TestMakefile usage2"
+       $(USAGE)"stresstests         - Runs the default stresstests"
+       $(USAGE)
+       $(USAGE)"--------------------"
+       $(USAGE)"Quick start:"
+       $(USAGE)"  After checkout of new tree:"
+       $(USAGE)"  use \"make listplatforms\" to view a list of platforms"
+       $(USAGE)"  set PEGASUS_PLATFORM=<your platofrm>"
+       $(USAGE)"  set PEGASUS_ROOT=<location of your pegasus source>"
+       $(USAGE)"  set PEGASUS_HOME=<build output location"
+       $(USAGE)"  make world"
+       $(USAGE)
+       $(USAGE)"  This will build everthing with a default configuration"
+       $(USAGE)"  and run the automated tests."
+       $(USAGE)
+       $(USAGE)"--------------------"
+       $(USAGE)"Examples:"
+       $(USAGE)"  After \"cvs checkout\" of new tree:    make world"
+       $(USAGE)
+       $(USAGE)"  After changes to include files:      make"
+       $(USAGE)
+       $(USAGE)"  After changes to the files included: make build"
+       $(USAGE)
+       $(USAGE)"  After \"cvs update\" or to start over: make new world"
+       $(USAGE)
+
+listplatforms: FORCE
+       $(USAGE)
+       $(USAGE)"The $(words $(VALID_PLATFORMS)) valid platforms are:"
+       $(USAGE)" $(foreach w, $(VALID_PLATFORMS), " $w ")"
+       $(USAGE)
+       $(USAGE)
+
+#########################################################################
+# This section defines any prerequisites that are required by the
+# recursive rules.
+#
+# NOTE: You can add prerequisties for the recursive rules but you cannot
+#       add any commands to run as part of the rule. You can define them
+#       and make will quietly ignore them and they will not be run either
+#       before or after the recursive rule.
+#
+#
+messages: rootbundle
+
+depend: buildmu
+
+#########################################################################
+# This section defines combinational rules
+#
+#-----------------------
+# build target: builds all source
+#
+build: depend all setupdevserver
+
+#------------------------
+# rebuild target is being deprecated instead use "make new build"
+#
+rebuild_msg: FORCE
+       @$(ECHO) "==============================================================================="
+       @$(ECHO) "Makefile: The rebuild target is being deprecated."
+       @$(ECHO) "          Use \"make usage\" for a description of the usage model."
+       @$(ECHO) "          Consider using \"make new world\" ."
+       @$(ECHO) "          Invoking the old rebuild rule now."
+       @$(ECHO) "==============================================================================="
+
+rebuild: rebuild_msg shortsleep new build s_unittests repository
+
+#-----------------------
+# new target: cleans everthing
+#
+# This can be combined on the command line with other rules like:
+#
+# make new build
+# make new world
+
+new: clean repositoryclean
+
+#-----------------------
+# world targets: builds everything and dependent on which target may do testing
+#
+#       Typically used after a fresh checkout from CVS
+
+world: build s_unittests servertests
+
+
+############################
+#
+# rules defined in TestMakefile that are repeated here for convenience
+#
+shortsleep: FORCE
+       @$(MAKE)  -f TestMakefile shortsleep
+
+servertests: FORCE
+       @ $(MAKE) -f TestMakefile servertests
+
+perftests: FORCE
+       @ $(MAKE) -f TestMakefile perftests
+
+s_unittests: FORCE
+       @ $(MAKE) -f TestMakefile -s unittests
+
+unittests: FORCE
+       @ $(MAKE) -f TestMakefile unittests
+
+standardtests: FORCE
+       @ $(MAKE) -f TestMakefile standardtests
 
-world: depend all repository
-       @ $(MAKE) -tests
+alltests: FORCE
+       @ $(MAKE) -f TestMakefile alltests
 
-# The repository Target removes and rebuilds the CIM repository
+testusage: FORCE
+       @ $(MAKE) -f TestMakefile usage
+
+testusage2: FORCE
+       @ $(MAKE) -f TestMakefile usage2
+
+stresstests:
+       @$(ECHO) "Running OpenPegasus StressTests"
+       @$(MAKE)  -f TestMakefile stresstests
+       @$(ECHO) "+++++ OpenPegasus StressTests complete"
+
+##########################################################################
+#
+# This section defines functional rules
+#
+#---------------------
+# buildmu target: build mu the make utility that among other things
+# includes a depend implementation. This is a separate target because
+# it must be build before anything else and before the depend target is used
+# on some platforms. Note that mu is not used on all platforms.
+#
+buildmu: FORCE
+       $(MAKE) --directory=$(PEGASUS_ROOT)/src/utils/mu -f Makefile
+
+#----------------------
+# setupdevserver and cleandevserver are used to setup and clear the
+# server configuration files needed to run the server in a development
+# environment.
+#
+setupdevserver: FORCE
+       $(MAKE) --directory=$(PEGASUS_ROOT)/src/Server -f Makefile install_run
+       @$(ECHO) "PEGASUS Development Server Runtime Environment configured "
+
+cleandevserver: FORCE
+       $(MAKE) --directory=$(PEGASUS_ROOT)/src/Server -f Makefile install_run_clean
+
+clobber: FORCE
+       - $(RMDIRHIER) $(PEGASUS_HOME)/bin
+       - $(RMDIRHIER) $(PEGASUS_HOME)/lib
+       - $(RMDIRHIER) $(PEGASUS_HOME)/obj
+
+
+#---------------------
+# The repository target removes the entire repository and rebuilds the Pegasus
+# namespaces.  The repositoryServer target does not remove the repository
+# before building the Pegasus namespaces.  (The repositoryServer target in
+# TestMakefile *does* remove the repository first.)
 
 # Note: Arguments must be quoted to preserve upper case characters in VMS.
-repository: FORCE
+repository: repositoryclean
        @ $(MAKE) "-SC" Schemas/Pegasus repository
 
 repositoryclean: FORCE
@@ -44,6 +270,10 @@ repositoryclean: FORCE
 repositoryServer: FORCE
        @ $(MAKE) "-SC" Schemas/Pegasus repositoryServer
 
+#---------------------
+# The testrepository and testrepositoryServer targets build the Pegasus test
+# namespaces.  A pre-existing repository is not removed.
+
 testrepository: FORCE
        @ $(MAKE) "-SC" src/Providers/sample/Load repository
        @ $(MAKE) "-SC" test/wetest repository
@@ -51,6 +281,14 @@ testrepository: FORCE
        @ $(MAKE) "-SC" src/Pegasus/CQL/CQLCLI repository
        @ $(MAKE) "-SC" src/Pegasus/Query/QueryExpression/tests repository
        @ $(MAKE) "-SC" src/Providers/TestProviders/Load repository
+ifeq ($(PEGASUS_ENABLE_CQL),true)
+       @ $(MAKE) "-SC" src/Pegasus/ControlProviders/QueryCapabilitiesProvider/tests repository
+endif
+ifeq ($(PEGASUS_ENABLE_JMPI_PROVIDER_MANAGER), true)
+       @ $(MAKE) "-SC" src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/tests repository
+endif
+       @ $(MAKE) --directory=$(PEGASUS_ROOT)/src/Clients/cimsub/tests/testscript \
+            -f Makefile repository
 
 testrepositoryServer: FORCE
        @ $(MAKE) "-SC" src/Providers/sample/Load repositoryServer
@@ -59,29 +297,14 @@ testrepositoryServer: FORCE
        @ $(MAKE) "-SC" src/Pegasus/CQL/CQLCLI repositoryServer
        @ $(MAKE) "-SC" src/Pegasus/Query/QueryExpression/tests repositoryServer
        @ $(MAKE) "-SC" src/Providers/TestProviders/Load repositoryServer
+ifeq ($(PEGASUS_ENABLE_CQL),true)
+       @ $(MAKE) "-SC" src/Pegasus/ControlProviders/QueryCapabilitiesProvider/tests repositoryServer
+endif
+ifeq ($(PEGASUS_ENABLE_JMPI_PROVIDER_MANAGER), true)
+       @ $(MAKE) "-SC" src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/tests repositoryServer
+endif
+       @ $(MAKE) --directory=$(PEGASUS_ROOT)/src/Clients/cimsub/tests/testscript \
+            -f Makefile repositoryServer
 
-removetestrepository: FORCE
-       @ $(MAKE) "-SC" src/Providers/sample/Load removerepository
-       @ $(MAKE) "-SC" test/wetest removerepository
-       @ $(MAKE) "-SC" src/Clients/benchmarkTest/Load removerepository
-       @ $(MAKE) "-SC" src/Providers/TestProviders/Load removerepository
-
-config:
-       @ $(ROOT)/SetConfig_EnvVar
-
-all: messages 
-
-messages: rootbundle
-
-rootbundle: 
+rootbundle:
        $(MAKE) --directory=$(PEGASUS_ROOT)/src/utils/cnv2rootbundle -f Makefile
-
-# the collections of tests that we run with the server active.
-# For now, these are centralized and do not include startup
-# and shutdown of the server.
-
-activetests: FORCE
-       $(MAKE) --directory=$(PEGASUS_ROOT)/test -f Makefile clean
-       $(PEGASUS_ROOT)/bin/TestClient
-       $(PEGASUS_ROOT)/bin/Client
-       $(MAKE) --directory=$(PEGASUS_ROOT)/test -f Makefile tests