Skip to content

Commit

Permalink
8257547: Handle multiple prereqs on the same line in deps files
Browse files Browse the repository at this point in the history
Backport-of: 36209b70daf4df54435b6acd7092b77d2b5053df
  • Loading branch information
Yuri Nesterenko committed Apr 26, 2021
1 parent 1295143 commit a92bbe8
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 5 deletions.
18 changes: 14 additions & 4 deletions make/common/NativeCompilation.gmk
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
66 changes: 66 additions & 0 deletions test/make/TestFixDepsFile.gmk
Original file line number Diff line number Diff line change
@@ -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)
6 changes: 5 additions & 1 deletion test/make/TestMake.gmk
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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)

Expand Down

0 comments on commit a92bbe8

Please sign in to comment.