quilt.mk源码
2016-03-15 14:57
423 查看
# | |
2 | # Copyright (C) 2007-2009 OpenWrt.org |
---|---|
3 | # |
4 | # This is free software, licensed under the GNU General Public License v2. |
5 | # See /LICENSE for more information. |
6 | |
7 | ifneq ($(if $(DUMP),1,$(__quilt_inc)),1) |
8 | __quilt_inc:=1 |
9 | |
10 | ifeq ($(TARGET_BUILD),1) |
11 | PKG_BUILD_DIR:=$(LINUX_DIR) |
12 | endif |
13 | PATCH_DIR?=./patches |
14 | FILES_DIR?=./files |
15 | HOST_PATCH_DIR?=$(PATCH_DIR) |
16 | HOST_FILES_DIR?=$(FILES_DIR) |
17 | |
18 | ifeq ($(MAKECMDGOALS),refresh) |
19 | override QUILT=1 |
20 | endif |
21 | |
22 | QUILT_CMD:=quilt --quiltrc=- |
23 | |
24 | define filter_series |
25 | sed -e s,\\\#.*,, $(1) | grep -E \[a-zA-Z0-9\] |
26 | endef |
27 | |
28 | define PatchDir/Quilt |
29 | @mkdir -p "$(1)/patches$(if $(3),/$(patsubst %/,%,$(3)))" |
30 | @if [ -s "$(2)/series" ]; then \ |
31 | mkdir -p "$(1)/patches/$(3)"; \ |
32 | cp "$(2)/series" "$(1)/patches/$(3)"; \ |
33 | fi |
34 | @for patch in $$$$( (cd "$(2)" && if [ -f series ]; then $(call filter_series,series); else ls | sort; fi; ) 2>/dev/null ); do ( \ |
35 | cp "$(2)/$$$$patch" "$(1)/patches/$(3)"; \ |
36 | echo "$(3)$$$$patch" >> "$(1)/patches/series"; \ |
37 | ); done |
38 | $(if $(3),@echo $(3) >> "$(1)/patches/.subdirs") |
39 | endef |
40 | |
41 | define PatchDir/Default |
42 | @if [ -d "$(2)" ] && [ "$$$$(ls $(2) | wc -l)" -gt 0 ]; then \ |
43 | export PATCH="$(PATCH)"; \ |
44 | if [ -s "$(2)/series" ]; then \ |
45 | $(call filter_series,$(2)/series) | xargs -n1 \ |
46 | $(KPATCH) "$(1)" "$(2)"; \ |
47 | else \ |
48 | $(KPATCH) "$(1)" "$(2)"; \ |
49 | fi; \ |
50 | fi |
51 | endef |
52 | |
53 | define PatchDir |
54 | $(call PatchDir/$(if $(strip $(QUILT)),Quilt,Default),$(strip $(1)),$(strip $(2)),$(strip $(3))) |
55 | endef |
56 | |
57 | define HostPatchDir |
58 | $(call PatchDir/$(if $(strip $(HOST_QUILT)),Quilt,Default),$(strip $(1)),$(strip $(2)),$(strip $(3))) |
59 | endef |
60 | |
61 | ifneq ($(PKG_BUILD_DIR),) |
62 | QUILT?=$(if $(wildcard $(PKG_BUILD_DIR)/.quilt_used),y) |
63 | ifneq ($(QUILT),) |
64 | STAMP_CHECKED:=$(PKG_BUILD_DIR)/.quilt_checked |
65 | override CONFIG_AUTOREBUILD= |
66 | quilt-check: $(STAMP_CHECKED) |
67 | endif |
68 | endif |
69 | |
70 | ifneq ($(HOST_BUILD_DIR),) |
71 | HOST_QUILT?=$(if $(findstring command,$(origin QUILT)),$(QUILT),$(if $(wildcard $(HOST_BUILD_DIR)/.quilt_used),y)) |
72 | ifneq ($(HOST_QUILT),) |
73 | HOST_STAMP_CHECKED:=$(HOST_BUILD_DIR)/.quilt_checked |
74 | override CONFIG_AUTOREBUILD= |
75 | host-quilt-check: $(HOST_STAMP_CHECKED) |
76 | endif |
77 | endif |
78 | |
79 | define Host/Patch/Default |
80 | $(if $(HOST_QUILT),rm -rf $(HOST_BUILD_DIR)/patches; mkdir -p $(HOST_BUILD_DIR)/patches) |
81 | $(call HostPatchDir,$(HOST_BUILD_DIR),$(HOST_PATCH_DIR),) |
82 | $(if $(HOST_QUILT),touch $(HOST_BUILD_DIR)/.quilt_used) |
83 | endef |
84 | |
85 | define Build/Patch/Default |
86 | $(if $(QUILT),rm -rf $(PKG_BUILD_DIR)/patches; mkdir -p $(PKG_BUILD_DIR)/patches) |
87 | $(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR),) |
88 | $(if $(QUILT),touch $(PKG_BUILD_DIR)/.quilt_used) |
89 | endef |
90 | |
91 | kernel_files=$(foreach fdir,$(GENERIC_FILES_DIR) $(FILES_DIR),$(fdir)/.) |
92 | define Kernel/Patch/Default |
93 | rm -rf $(PKG_BUILD_DIR)/patches; mkdir -p $(PKG_BUILD_DIR)/patches |
94 | $(if $(kernel_files),$(CP) $(kernel_files) $(LINUX_DIR)/) |
95 | find $(LINUX_DIR)/ -name \*.rej -or -name \*.orig | $(XARGS) rm -f |
96 | $(call PatchDir,$(PKG_BUILD_DIR),$(GENERIC_PATCH_DIR),generic/) |
97 | $(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR),platform/) |
98 | endef |
99 | |
100 | define Quilt/RefreshDir |
101 | mkdir -p $(2) |
102 | -rm -f $(2)/* 2>/dev/null >/dev/null |
103 | @( \ |
104 | for patch in $$$$($(if $(3),grep "^$(3)",cat) $(1)/patches/series | awk '{print $$$$1}'); do \ |
105 | $(CP) -v "$(1)/patches/$$$$patch" $(2); \ |
106 | done; \ |
107 | ) |
108 | endef |
109 | |
110 | define Quilt/Refresh/Host |
111 | $(call Quilt/RefreshDir,$(HOST_BUILD_DIR),$(PATCH_DIR)) |
112 | endef |
113 | |
114 | define Quilt/Refresh/Package |
115 | $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR)) |
116 | endef |
117 | |
118 | define Quilt/Refresh/Kernel |
119 | @[ -z "$$(grep -v '^generic/' $(PKG_BUILD_DIR)/patches/series | grep -v '^platform/')" ] || { \ |
120 | echo "All kernel patches must start with either generic/ or platform/"; \ |
121 | false; \ |
122 | } |
123 | $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(GENERIC_PATCH_DIR),generic/) |
124 | $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR),platform/) |
125 | endef |
126 | |
127 | define Quilt/Template |
128 | $($(2)STAMP_CONFIGURED): $($(2)STAMP_CHECKED) FORCE |
129 | $($(2)STAMP_CHECKED): $($(2)STAMP_PREPARED) |
130 | if [ -s "$(1)/patches/series" ]; then \ |
131 | (cd "$(1)"; \ |
132 | if $(QUILT_CMD) next >/dev/null 2>&1; then \ |
133 | $(QUILT_CMD) push -a; \ |
134 | else \ |
135 | $(QUILT_CMD) top >/dev/null 2>&1; \ |
136 | fi \ |
137 | ); \ |
138 | fi |
139 | touch "$$@" |
140 | |
141 | $(3)quilt-check: $($(2)STAMP_PREPARED) FORCE |
142 | @[ -f "$(1)/.quilt_used" ] || { \ |
143 | echo "The source directory was not unpacked using quilt. Please rebuild with QUILT=1"; \ |
144 | false; \ |
145 | } |
146 | @[ -f "$(1)/patches/series" ] || { \ |
147 | echo "The source directory contains no quilt patches."; \ |
148 | false; \ |
149 | } |
150 | @[ -n "$$$$(ls $(1)/patches/series)" -o "$$$$(cat $(1)/patches/series | md5sum)" = "$$(sort $(1)/patches/series | md5sum)" ] || { \ |
151 | echo "The patches are not sorted in the right order. Please fix."; \ |
152 | false; \ |
153 | } |
154 | |
155 | $(3)refresh: $(3)quilt-check |
156 | @cd "$(1)"; $(QUILT_CMD) pop -a -f >/dev/null 2>/dev/null |
157 | @cd "$(1)"; while $(QUILT_CMD) next 2>/dev/null >/dev/null && $(QUILT_CMD) push; do \ |
158 | QUILT_DIFF_OPTS="-p" $(QUILT_CMD) refresh -p ab --no-index --no-timestamps; \ |
159 | done; ! $(QUILT_CMD) next 2>/dev/null >/dev/null |
160 | $(Quilt/Refresh/$(4)) |
161 | |
162 | $(3)update: $(3)quilt-check |
163 | $(Quilt/Refresh/$(4)) |
164 | endef |
165 | |
166 | Build/Quilt=$(call Quilt/Template,$(PKG_BUILD_DIR),,,$(if $(TARGET_BUILD),Kernel,Package)) |
167 | Host/Quilt=$(call Quilt/Template,$(HOST_BUILD_DIR),HOST_,host-,Host) |
168 | |
169 | endif |
相关文章推荐
- 创建请求集
- UIKeyboard 键盘
- Java.util.concurrent包学习(一) BlockingQueue接口
- 错误将UIViewController当做UITableViewController来用
- OCiOS开发:UIKit 力学(UIDynamics)(一)
- ElasticSearch2.1 基于空间位置geo_query距离计算
- iOS边练边学--UITableView性能优化之三种方式循环利用
- 向ArcSDE导入数据出现(ORA-00001: Unique contraint (SDE.GDB_OC_PKC) violated错误
- UIPasteboard 粘贴板
- 关于UIUICollectionView
- easyui-tabs第一个标签被遮挡
- UIPageViewController
- UITableView的Grouped模式下,tableHeaderView与第一个section之间的空隙变大问题
- Easyui datagrid 分页参数自定义名称+额外参数
- UILabel各种属性设置
- 让 UIAlertController 兼容 iOS7
- UIView如何管理它的子视图
- LLDB 调试 UI 的技巧
- [DP 找规律] BZOJ2489 Random Sequence
- iOS NSOperation/Queue