| # |
| # Copyright (c) 2011, 2019, 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. |
| # |
| |
| ifeq (,$(_MAKEBASE_GMK)) |
| $(error You must include MakeBase.gmk prior to including CopyFiles.gmk) |
| endif |
| |
| ################################################################################ |
| # |
| # Code for handling the SetupCopyFiles macro. |
| # |
| ################################################################################ |
| |
| define AddFileToCopy |
| # Helper macro for SetupCopyFiles |
| # 1 : Source file |
| # 2 : Dest file |
| # 3 : Variable to add targets to |
| # 4 : Macro to call for copy operation |
| # 5 : Action text to log |
| $2: $1 |
| $$(call LogInfo, $(strip $5) $$(patsubst $(OUTPUTDIR)/%,%,$$(call DecodeSpace, $$@))) |
| $$($$(strip $4)) |
| |
| $3 += $2 |
| $3_SOURCES += $1 |
| endef |
| |
| # Returns the value of the first argument |
| identity = \ |
| $(strip $1) |
| |
| # Setup make rules for copying files, with an option to do more complex |
| # processing instead of copying. |
| # |
| # Parameter 1 is the name of the rule. This name is used as variable prefix, |
| # and the targets generated are listed in a variable by that name. |
| # |
| # The list of all source files is returned in $1_SOURCES. |
| # |
| # Remaining parameters are named arguments. These include: |
| # SRC : Source root dir (defaults to dir of first file) |
| # DEST : Dest root dir |
| # FILES : List of files to copy with absolute paths, or path relative to SRC. |
| # Must be in SRC. |
| # FLATTEN : Set to flatten the directory structure in the DEST dir. |
| # MACRO : Optionally override the default macro used for making the copy. |
| # Default is 'install-file' |
| # NAME_MACRO : Optionally supply a macro that rewrites the target file name |
| # based on the source file name |
| # LOG_ACTION : Optionally specify a different action text for log messages |
| SetupCopyFiles = $(NamedParamsMacroTemplate) |
| define SetupCopyFilesBody |
| |
| ifeq ($$($1_MACRO), ) |
| $1_MACRO := install-file |
| endif |
| |
| # Default SRC to the dir of the first file. |
| ifeq ($$($1_SRC), ) |
| $1_SRC := $$(dir $$(firstword $$($1_FILES))) |
| endif |
| |
| ifeq ($$($1_NAME_MACRO), ) |
| $1_NAME_MACRO := identity |
| endif |
| |
| ifeq ($$($1_LOG_ACTION), ) |
| $1_LOG_ACTION := Copying |
| endif |
| |
| # Remove any trailing slash from SRC and DEST |
| $1_SRC := $$(patsubst %/,%,$$($1_SRC)) |
| $1_DEST := $$(patsubst %/,%,$$($1_DEST)) |
| |
| # Need to wrap arguments in DoubleDollar because of the eval nested inside an |
| # eval macro body. |
| $$(foreach f, $$(patsubst $$($1_SRC)/%,%,$$($1_FILES)), \ |
| $$(eval $$(call AddFileToCopy, \ |
| $$(call DoubleDollar, $$($1_SRC)/$$f), \ |
| $$(call DoubleDollar, \ |
| $$($1_DEST)/$$(call $$(strip $$($1_NAME_MACRO)),$$(if $$($1_FLATTEN),$$(notdir $$f),$$f)) \ |
| ), \ |
| $1, \ |
| $$($1_MACRO), \ |
| $$($1_LOG_ACTION) \ |
| )) \ |
| ) |
| |
| endef |