8257547: Handle multiple prereqs on the same line in deps files

Reviewed-by: ihse, tbell
This commit is contained in:
Erik Joelsson 2020-12-03 21:41:37 +00:00
parent c5b32b33eb
commit 36209b70da
3 changed files with 85 additions and 5 deletions

View File

@ -240,12 +240,22 @@ ifeq ($(ALLOW_ABSOLUTE_PATHS_IN_OUTPUT)-$(FILE_MACRO_CFLAGS), false-)
# When compiling with relative paths, the deps file may come out with relative
# paths, and that path may start with './'. First remove any leading ./, then
# add WORKSPACE_ROOT to any line not starting with /, while allowing for
# leading spaces.
# leading spaces. There may also be multiple entries on the same line, so start
# with splitting such lines.
# Non GNU sed (BSD on macosx) cannot substitue in literal \n using regex.
# Instead use a bash escaped literal newline. To avoid having unmatched quotes
# ruin the ability for an editor to properly syntax highlight this file, define
# that newline sequence as a separate variable and add the closing quote behind
# a comment.
sed_newline := \'$$'\n''#'
define fix-deps-file
$(SED) \
-e 's|^\([ ]*\)\./|\1|' \
-e '/^[ ]*[^/ ]/s|^\([ ]*\)|\1$(WORKSPACE_ROOT)/|' \
$1.tmp > $1
-e 's|\([^ ]\) \{1,\}\([^\\:]\)|\1 \\$(sed_newline) \2|g' \
$1.tmp \
| $(SED) \
-e 's|^\([ ]*\)\./|\1|' \
-e '/^[ ]*[^/ ]/s|^\([ ]*\)|\1$(WORKSPACE_ROOT)/|' \
> $1
endef
else
# By default the MakeCommandRelative macro does nothing.

View File

@ -0,0 +1,66 @@
#
# Copyright (c) 2020, 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.
#
default: all
include $(SPEC)
include MakeBase.gmk
include UtilsForTests.gmk
THIS_FILE := $(TOPDIR)/test/make/FixDepsFile.gmk
DEPS := $(THIS_FILE) \
$(TOPDIR)/make/common/NativeCompilation.gmk \
#
OUTPUT_DIR := $(TESTMAKE_OUTPUTDIR)/fix-deps-file
$(call MakeDir, $(OUTPUT_DIR))
################################################################################
# The relevant case to test is when absolute paths aren't allowed.
ALLOW_ABSOLUTE_PATHS_IN_OUTPUT := false
FILE_MACRO_CFLAGS :=
include NativeCompilation.gmk
DEPS_FILE := $(OUTPUT_DIR)/deps.d
test-fix-deps-file:
$(ECHO) "foo/bar1: \\" > $(DEPS_FILE).tmp
$(ECHO) "foo/baz1" >> $(DEPS_FILE).tmp
$(ECHO) "foo/bar : bar \\" >> $(DEPS_FILE).tmp
$(ECHO) " ./bar/baz /foo/baz" >> $(DEPS_FILE).tmp
$(call fix-deps-file, $(DEPS_FILE))
$(ECHO) "$(WORKSPACE_ROOT)/foo/bar1: \\" > $(DEPS_FILE).expected
$(ECHO) "$(WORKSPACE_ROOT)/foo/baz1" >> $(DEPS_FILE).expected
$(ECHO) "$(WORKSPACE_ROOT)/foo/bar : \\" >> $(DEPS_FILE).expected
$(ECHO) " $(WORKSPACE_ROOT)/bar \\" >> $(DEPS_FILE).expected
$(ECHO) " $(WORKSPACE_ROOT)/bar/baz \\" >> $(DEPS_FILE).expected
$(ECHO) " /foo/baz" >> $(DEPS_FILE).expected
$(DIFF) $(DEPS_FILE).expected $(DEPS_FILE)
TEST_TARGETS := test-fix-deps-file
################################################################################
all: $(TEST_TARGETS)

View File

@ -36,6 +36,9 @@ java-compilation:
copy-files:
+$(MAKE) -f TestCopyFiles.gmk $(TEST_SUBTARGET)
fix-deps-file:
+$(MAKE) -f TestFixDepsFile.gmk $(TEST_SUBTARGET)
idea:
+$(MAKE) -f TestIdea.gmk $(TEST_SUBTARGET)
@ -46,7 +49,8 @@ configure:
$(BASH) $(TOPDIR)/test/make/autoconf/test-configure.sh \
"$(AUTOCONF)" "$(TOPDIR)" "$(TEST_SUPPORT_DIR)"
TARGETS += make-base java-compilation copy-files idea compile-commands configure
TARGETS += make-base java-compilation copy-files fix-deps-file idea \
compile-commands configure
all: $(TARGETS)