| # |
| # Copyright (c) 2011, 2025, Oracle and/or its affiliates. All rights reserved. |
| # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| # |
| # This code is free software; you can redistribute it and/or modify it |
| # under the terms of the GNU General Public License version 2 only, as |
| # published by the Free Software Foundation. Oracle designates this |
| # particular file as subject to the "Classpath" exception as provided |
| # by Oracle in the LICENSE file that accompanied this code. |
| # |
| # This code is distributed in the hope that it will be useful, but WITHOUT |
| # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| # version 2 for more details (a copy is included in the LICENSE file that |
| # accompanied this code). |
| # |
| # You should have received a copy of the GNU General Public License version |
| # 2 along with this work; if not, write to the Free Software Foundation, |
| # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| # |
| # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| # or visit www.oracle.com if you need additional information or have any |
| # questions. |
| # |
| |
| include $(TOPDIR)/make/common/MakeIncludeStart.gmk |
| ifeq ($(INCLUDE), true) |
| |
| ################################################################################ |
| # This file contains helper functions for logging. |
| ################################################################################ |
| |
| # Look for a given option in the LOG variable, and if found, set a variable |
| # and remove the option from the LOG variable |
| # $1: The option to look for |
| # $2: The variable to set to "true" if the option is found |
| define ParseLogOption |
| ifneq ($$(findstring $1, $$(LOG)), ) |
| override $2 := true |
| # First try to remove ",<option>" if it exists, otherwise just remove "<option>" |
| LOG_STRIPPED := $$(subst $1,, $$(subst $$(COMMA)$$(strip $1),, $$(LOG))) |
| # We might have ended up with a leading comma. Remove it. Need override |
| # since LOG is set from the command line. |
| override LOG := $$(strip $$(patsubst $$(COMMA)%, %, $$(LOG_STRIPPED))) |
| endif |
| endef |
| |
| # Look for a given option with an assignment in the LOG variable, and if found, |
| # set a variable to that value and remove the option from the LOG variable |
| # $1: The option to look for |
| # $2: The variable to set to the value of the option, if found |
| define ParseLogValue |
| ifneq ($$(findstring $1=, $$(LOG)), ) |
| # Make words of out comma-separated list and find the one with opt=val |
| value := $$(strip $$(subst $$(strip $1)=,, $$(filter $$(strip $1)=%, $$(subst $$(COMMA), , $$(LOG))))) |
| override $2 := $$(value) |
| # First try to remove ",<option>" if it exists, otherwise just remove "<option>" |
| LOG_STRIPPED := $$(subst $$(strip $1)=$$(value),, \ |
| $$(subst $$(COMMA)$$(strip $1)=$$(value),, $$(LOG))) |
| # We might have ended up with a leading comma. Remove it. Need override |
| # since LOG is set from the command line. |
| override LOG := $$(strip $$(patsubst $$(COMMA)%, %, $$(LOG_STRIPPED))) |
| endif |
| endef |
| |
| define ParseLogLevel |
| # Setup logging according to LOG |
| |
| # If "nofile" is present, do not log to a file |
| $$(eval $$(call ParseLogOption, nofile, LOG_NOFILE)) |
| |
| # If "cmdline" is present, print all executes "important" command lines. |
| $$(eval $$(call ParseLogOption, cmdlines, LOG_CMDLINES)) |
| |
| # If "report" is present, use non-standard reporting options at build failure. |
| $$(eval $$(call ParseLogValue, report, LOG_REPORT)) |
| ifneq ($$(LOG_REPORT), ) |
| ifeq ($$(filter $$(LOG_REPORT), none all default), ) |
| $$(info Error: LOG=report has invalid value: $$(LOG_REPORT).) |
| $$(info Valid values: LOG=report=<none>|<all>|<default>) |
| $$(error Cannot continue) |
| endif |
| endif |
| |
| # If "profile-to-log" is present, write shell times in build log |
| $$(eval $$(call ParseLogOption, profile-to-log, LOG_PROFILE_TIMES_LOG)) |
| |
| # If "profile" is present, write shell times in separate log file |
| # IMPORTANT: $(ParseLogOption profile-to-log) should go first. Otherwise |
| # parsing of 'LOG=debug,profile-to-log,nofile' ends up in the following error: |
| # Error: LOG contains unknown option or log level: debug-to-log. |
| $$(eval $$(call ParseLogOption, profile, LOG_PROFILE_TIMES_FILE)) |
| |
| # If "flow" is present, log makefile execution flow |
| $$(eval $$(call ParseLogOption, flow, LOG_FLOW)) |
| |
| # Treat LOG=profile-to-log as if it were LOG=profile,profile-to-log |
| LOG_PROFILE_TIMES_FILE := $$(firstword $$(LOG_PROFILE_TIMES_FILE) $$(LOG_PROFILE_TIMES_LOG)) |
| |
| override LOG_LEVEL := $$(LOG) |
| |
| ifeq ($$(LOG_LEVEL), ) |
| # Set LOG to "warn" as default if not set |
| override LOG_LEVEL := warn |
| endif |
| |
| ifeq ($$(LOG_LEVEL), warn) |
| override MAKE_LOG_FLAGS := -s |
| else ifeq ($$(LOG_LEVEL), info) |
| override MAKE_LOG_FLAGS := -s |
| else ifeq ($$(LOG_LEVEL), debug) |
| override MAKE_LOG_FLAGS := |
| else ifeq ($$(LOG_LEVEL), trace) |
| override MAKE_LOG_FLAGS := |
| else |
| $$(info Error: LOG contains unknown option or log level: $$(LOG).) |
| $$(info LOG can be <level>[,<opt>[...]] where <opt> is nofile | cmdlines | profile | profile-to-log) |
| $$(info and <level> is warn | info | debug | trace) |
| $$(error Cannot continue) |
| endif |
| endef |
| |
| MAKE_LOG_VARS = $(foreach v, \ |
| LOG_LEVEL LOG_NOFILE LOG_CMDLINES LOG_REPORT LOG_PROFILE_TIMES_LOG \ |
| LOG_PROFILE_TIMES_FILE LOG_FLOW, \ |
| $v=$($v) \ |
| ) |
| |
| ################################################################################ |
| |
| endif # include guard |
| include $(TOPDIR)/make/common/MakeIncludeEnd.gmk |