/
githubmirror
/
panama-vector
Обзор
Документация
Войти
/
githubmirror
/
panama-vector
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
make/common/LogUtils.gmk
132 строки
5 KB
Magnus Ihse Bursie
8352618: Remove old deprecated functionality in the build system
25 мар 2025, 13:58
25 мар 2025, 13:58
bab9372
Код
Авторство
О чём код?
# # 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