make-rules/prep-patch.mk
changeset 4196 d697072a92f5
child 4251 2bf7e2c1ca74
equal deleted inserted replaced
4195:d88c5d15a4af 4196:d697072a92f5
       
     1 #
       
     2 # CDDL HEADER START
       
     3 #
       
     4 # The contents of this file are subject to the terms of the
       
     5 # Common Development and Distribution License (the "License").
       
     6 # You may not use this file except in compliance with the License.
       
     7 #
       
     8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
       
     9 # or http://www.opensolaris.org/os/licensing.
       
    10 # See the License for the specific language governing permissions
       
    11 # and limitations under the License.
       
    12 #
       
    13 # When distributing Covered Code, include this CDDL HEADER in each
       
    14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
       
    15 # If applicable, add the following below this CDDL HEADER, with the
       
    16 # fields enclosed by brackets "[]" replaced with your own identifying
       
    17 # information: Portions Copyright [yyyy] [name of copyright owner]
       
    18 #
       
    19 # CDDL HEADER END
       
    20 #
       
    21 # Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
       
    22 #
       
    23 
       
    24 GPATCH =	/usr/gnu/bin/patch
       
    25 PATCH_LEVEL ?=	1
       
    26 GPATCH_BACKUP =	--backup --version-control=numbered
       
    27 GPATCH_FLAGS =	--strip=$(PATCH_LEVEL) $(GPATCH_BACKUP)
       
    28 
       
    29 #
       
    30 # Rules for patching source that is downloaded and unpacked or pulled from
       
    31 # a source repository.  Patches should be named
       
    32 # patches/{patch-file-name}.patch{version} where {patch-file-name} is a
       
    33 # meaningful name for the patch contents and {version} corresponds to the
       
    34 # COMPONENT_NAME{version} of the source to be patched.  Typically, version
       
    35 # would be something like "_1", "_2", ...  After all {version} patches have
       
    36 # been applied, a final set of patches without a {version} suffix may be
       
    37 # applied.
       
    38 #
       
    39 # PATCH_DIR can be overridden to move patches to a different location
       
    40 # PATCH_PATTERN can be overridden to adjust the patch naming scheme that the
       
    41 #     build recognizes.
       
    42 # EXTRA_PATCHES{version} can be defined in the component Makefile to include
       
    43 #     additional patches.
       
    44 #
       
    45 
       
    46 PATCH_PATTERN ?=	*.patch*
       
    47 
       
    48 PATCH_DIR ?=		patches
       
    49 # patches specific to parfait builds.
       
    50 PARFAIT_PATCH_DIR =	parfait
       
    51 
       
    52 PATCHES =	$(shell find $(PATCH_DIR) $(PARFAIT_PATCH_DIR) -type f \
       
    53 			 -name '$(PATCH_PATTERN)' 2>/dev/null | \
       
    54 				LC_COLLATE=C sort)
       
    55 PATHCES +=	$(EXTRA_PATCHES)
       
    56 
       
    57 TMP_SUFFIXES = $(patsubst .patch_%,%, $(filter-out .patch,$(suffix $(PATCHES))))
       
    58 
       
    59 define patch-rule
       
    60 
       
    61 ifeq ($(1),_0)
       
    62 PATCH_PATTERN$(1) ?=	%.patch
       
    63 PATCHES$(1) = $(filter %.patch,$(PATCHES))
       
    64 else
       
    65 PATCH_PATTERN$(1) ?=	%.patch$(1)
       
    66 PATCHES$(1) = $(filter %.patch$(1),$(PATCHES))
       
    67 endif
       
    68 
       
    69 ifneq ($$(PATCHES$(1)),)
       
    70 PATCH_STAMPS$(1) += $$(PATCHES$(1):$(PATCH_DIR)/%=$$(SOURCE_DIR$(1))/.patched-%)
       
    71 
       
    72 # We should unpack the source that we patch before we patch it.
       
    73 $$(PATCH_STAMPS$(1)::	$$(UNPACK_STAMP$(1)) unpack
       
    74 
       
    75 $$(SOURCE_DIR$(1))/.patched-%:	$(PATCH_DIR)/%
       
    76 	$(GPATCH) -d $$(@D) $$(GPATCH_FLAGS) < $$<
       
    77 	$(TOUCH) $$(@)
       
    78 
       
    79 patch::	$$(PATCH_STAMPS$(1))
       
    80 
       
    81 REQUIRED_PACKAGES += text/gnu-patch
       
    82 
       
    83 endif
       
    84 endef
       
    85 
       
    86 #
       
    87 # Define the rules required to download any source archives and augment any
       
    88 # cleanup macros.
       
    89 #
       
    90 $(foreach suffix, $(TMP_SUFFIXES), $(eval $(call patch-rule,_$(suffix))))
       
    91 $(eval $(call patch-rule,))	# this must be last so we don't drop *.patch_%.