|
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_%. |