#############################################################################
#    (c)2008-2011 Broadcom Corporation
#
# This program is the proprietary software of Broadcom Corporation and/or its licensors,
# and may only be used, duplicated, modified or distributed pursuant to the terms and
# conditions of a separate, written license agreement executed between you and Broadcom
# (an "Authorized License").  Except as set forth in an Authorized License, Broadcom grants
# no license (express or implied), right to use, or waiver of any kind with respect to the
# Software, and Broadcom expressly reserves all rights in and to the Software and all
# intellectual property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU
# HAVE NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY
# NOTIFY BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
#
# Except as expressly set forth in the Authorized License,
#
# 1.     This program, including its structure, sequence and organization, constitutes the valuable trade
# secrets of Broadcom, and you shall use all reasonable efforts to protect the confidentiality thereof,
# and to use this information only in connection with your use of Broadcom integrated circuit products.
#
# 2.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
# AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
# WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
# THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND ALL IMPLIED WARRANTIES
# OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE,
# LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION
# OR CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF
# USE OR PERFORMANCE OF THE SOFTWARE.
#
# 3.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR ITS
# LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL, INDIRECT, OR
# EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY WAY RELATING TO YOUR
# USE OF OR INABILITY TO USE THE SOFTWARE EVEN IF BROADCOM HAS BEEN ADVISED OF
# THE POSSIBILITY OF SUCH DAMAGES; OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT
# ACTUALLY PAID FOR THE SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE
# LIMITATIONS SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF
# ANY LIMITED REMEDY.
#
# $brcm_Workfile: module_vars.pl $
# $brcm_Revision: 8 $
# $brcm_Date: 2/3/11 6:37p $
#
# Module Description:
#
# Revision History:
#
# $brcm_Log: /nexus/build/module_vars.pl $
# 
# 8   2/3/11 6:37p vsilyaev
# SW7420-1441: Use local (non proxied) implementation for function that
#  flush CPU cache
# 
# 7   12/15/10 12:00p erickson
# SW35230-2585: build a recursive list of module DEPENDENCIES
# 
# 6   7/27/10 5:30p jgarrett
# SW7340-194: Removing warnings from kernel-mode 3rd party code
# 
# 5   11/17/09 2:02p erickson
# SW7405-3408: use $(filter) instead of $(findstring)
#
# 4   3/30/09 3:50p vsilyaev
# PR 53611: Create the object directory only when needed
#
# 3   10/9/08 11:48a erickson
# PR47329: rename var to NEXUS_EXCLUDED_MODULES
#
# 2   1/24/08 4:31p vsilyaev
# PR 38682: Added proxy environment
#
#############################################################################
my $i;
my $module;

open(OUTFILE, ">@ARGV[0]") or die "Unable to open output file @ARGV[0]";

print OUTFILE "#####################################################\n";
print OUTFILE "# This file is automatically generated.  Do not edit.\n";
print OUTFILE "#####################################################\n";

# The generated output from this file is as follows (for each XXX)
# NEXUS_XXX_OBJECTS = $(addprefix $(NEXUS_OBJ_DIR)/XXX/,$(patsubst %.c,%.$(NEXUS_OBJ_SUFFIX),$(notdir $(NEXUS_XXX_SOURCES))))
#
# NEXUS_XXX_CFLAGS =  $(addprefix -I,$(NEXUS_XXX_PRIVATE_INCLUDES)) \
#                     $(addprefix -I,$(NEXUS_XXX_PUBLIC_INCLUDES)) \
#                     $(foreach depend,$(NEXUS_XXX_DEPENDENCIES), $(addprefix -I,$(NEXUS_$(depend)_PUBLIC_INCLUDES)))
#

print OUTFILE "# Check for circular module dependencies\n";
print OUTFILE "define DEPENDENCY_template\n";
print OUTFILE "\$(foreach dep,\$(NEXUS_\$(1)_DEPENDENCIES),\$(if \$(filter \$(1),\$(NEXUS_\$(dep)_DEPENDENCIES)),\$(error circular dependency for modules \$(1) and \$(dep))))\n";
print OUTFILE "endef\n";
print OUTFILE "\$(foreach module,\$(NEXUS_MODULES),\$(call DEPENDENCY_template,\$(module)))\n";
print OUTFILE "\n";
print OUTFILE "# Build recursive list of dependencies\n";
print OUTFILE "define RECURSE_DEPENDENCIES_template\n";
print OUTFILE "\$(NEXUS_\$(1)_DEPENDENCIES) \$(foreach mod,\$(NEXUS_\$(1)_DEPENDENCIES),\$(call RECURSE_DEPENDENCIES_template,\$(mod)))\n";
print OUTFILE "endef\n";
print OUTFILE "\n";

for ($i=1;$i<=$#ARGV;$i++) {
    $module = @ARGV[$i];
    print OUTFILE "NEXUS_$module\_OBJECTS = \$(addprefix \$(NEXUS_OBJ_DIR)/$module/,\$(patsubst %.c,%.\$(NEXUS_OBJ_SUFFIX),\$(notdir \$(NEXUS_$module\_SOURCES) \$(NEXUS_$module\_LOCAL_SOURCES))))\n";
    print OUTFILE "NEXUS_$module\_ALL_DEPENDENCIES = \$(call RECURSE_DEPENDENCIES_template,$module)\n";
    print OUTFILE "NEXUS_$module\_CFLAGS = \\\n";
    print OUTFILE "     \$(addprefix -I,\$(NEXUS_@ARGV[$i]_PRIVATE_INCLUDES)) \\\n";
    print OUTFILE "     \$(addprefix -I,\$(NEXUS_$module\_PUBLIC_INCLUDES)) \\\n";
    print OUTFILE "     \$(NEXUS_$module\_EXTRA_CFLAGS) \\\n";
    # sort required to remove duplicates
    print OUTFILE "     \$(sort \$(foreach depend,\$(NEXUS_$module\_ALL_DEPENDENCIES),\$(addprefix -I,\$(NEXUS_\$(depend)_PUBLIC_INCLUDES))))\n";
    print OUTFILE "\n";
}
close OUTFILE;

