Allow leaving /etc as untouched as possible
[openadk.git] / mk / pkg-bottom.mk
blob95453976438b140ce87d828f72a6767494f96764
1 # This file is part of the OpenADK project. OpenADK is copyrighted
2 # material, please see the LICENCE file in the top-level directory.
3 # Comments:
4 # * pre/do/post-foo are always defined here, but empty. This is so
5 # that we can call it (BSD make has .if target(foo) but GNU not)
6 # and it won't error out.
7 # * ${_foo_COOKIE} are the actual targets
8 # * default is "auto"
9 # * define "manual" if you need your own method
10 # -> define a do-foo: target in the Makefile
11 # * if you have a style -> define a pre-foo: and post-foo: if they
12 # are required, but the do-foo: magic is done here
14 REORDER_DEPENDENCIES= ${TOPDIR}/scripts/automake.dep
16 pre-configure:
17 do-configure:
18 post-configure:
19 ${_CONFIGURE_COOKIE}: ${_PATCH_COOKIE}
20 @sed -e '/^#/d' ${REORDER_DEPENDENCIES} | \
21 tsort | while read f; do \
22 cd ${WRKSRC}; \
23 case $$f in \
24 /*) \
25 find . -name "$${f#/}" -print | while read i; do \
26 touch "$$i"; \
27 done;; \
28 *) \
29 if test -e "$$f" ; then \
30 touch "$$f"; \
31 fi;; \
32 esac; \
33 done
34 mkdir -p ${WRKBUILD}
35 @${MAKE} pre-configure $(MAKE_TRACE)
37 ifneq ($(filter manual,${CONFIG_STYLE}),)
38 env ${CONFIGURE_ENV} ${MAKE} do-configure $(MAKE_TRACE)
39 else ifneq ($(filter minimal,${CONFIG_STYLE}),)
40 @$(CMD_TRACE) "configuring... "
41 @cd ${WRKBUILD}; \
42 for i in $$(find . -name config.sub);do \
43 if [ -f $$i ]; then \
44 ${CP} $$i $$i.bak; \
45 ${CP} ${SCRIPT_DIR}/config.sub $$i; \
46 fi; \
47 done; \
48 for i in $$(find . -name config.guess);do \
49 if [ -f $$i ]; then \
50 ${CP} $$i $$i.bak; \
51 ${CP} ${SCRIPT_DIR}/config.guess $$i; \
52 fi; \
53 done;
54 cd ${WRKBUILD}; rm -f config.{cache,status}; \
55 env ${CONFIGURE_ENV} \
56 ${BASH} ${WRKSRC}/${CONFIGURE_PROG} \
57 ${CONFIGURE_ARGS} $(MAKE_TRACE)
58 else ifeq ($(strip ${CONFIG_STYLE}),)
59 @$(CMD_TRACE) "configuring... "
60 @cd ${WRKBUILD}; \
61 for i in $$(find . -name config.sub);do \
62 if [ -f $$i ]; then \
63 ${CP} $$i $$i.bak; \
64 ${CP} ${SCRIPT_DIR}/config.sub $$i; \
65 fi; \
66 done; \
67 for i in $$(find . -name config.guess);do \
68 if [ -f $$i ]; then \
69 ${CP} $$i $$i.bak; \
70 ${CP} ${SCRIPT_DIR}/config.guess $$i; \
71 fi; \
72 done;
73 cd ${WRKBUILD}; rm -f config.{cache,status}; \
74 env ${CONFIGURE_ENV} \
75 ${BASH} ${WRKSRC}/${CONFIGURE_PROG} ${CONFIGURE_TRIPLE} \
76 --program-prefix= \
77 --program-suffix= \
78 --prefix=/usr \
79 --bindir=/usr/bin \
80 --datadir=/usr/share \
81 --mandir=/usr/share/man \
82 --libexecdir=/usr/libexec \
83 --localstatedir=/var \
84 --sysconfdir=/etc \
85 --enable-shared \
86 --enable-static \
87 --disable-dependency-tracking \
88 --disable-libtool-lock \
89 $(NLS) \
90 ${CONFIGURE_ARGS} $(MAKE_TRACE)
91 else
92 @echo "Invalid CONFIG_STYLE '${CONFIG_STYLE}'" >&2
93 @exit 1
94 endif
95 @${MAKE} post-configure $(MAKE_TRACE)
96 touch $@
98 # do a parallel build if requested && package doesn't force disable it
99 ifeq (${ADK_MAKE_PARALLEL},y)
100 ifeq ($(strip ${PKG_NOPARALLEL}),)
101 MAKE_FLAGS+= -j${ADK_MAKE_JOBS}
102 endif
103 endif
105 pre-build:
106 do-build:
107 post-build:
108 ${_BUILD_COOKIE}: ${_CONFIGURE_COOKIE}
109 @env ${MAKE_ENV} ${MAKE} pre-build $(MAKE_TRACE)
110 @$(CMD_TRACE) "compiling... "
112 ifneq ($(filter manual,${BUILD_STYLE}),)
113 env ${MAKE_ENV} ${MAKE} do-build $(MAKE_TRACE)
114 else ifeq ($(strip ${BUILD_STYLE}),)
115 cd ${WRKBUILD} && env ${MAKE_ENV} ${MAKE} -f ${MAKE_FILE} \
116 ${MAKE_FLAGS} ${ALL_TARGET} $(MAKE_TRACE)
117 else
118 @echo "Invalid BUILD_STYLE '${BUILD_STYLE}'" >&2
119 @exit 1
120 endif
121 @env ${MAKE_ENV} ${MAKE} post-build $(MAKE_TRACE)
122 touch $@
124 pre-install:
125 do-install:
126 post-install:
127 spkg-install: ${ALL_POSTINST}
128 ${_FAKE_COOKIE}: ${_BUILD_COOKIE}
129 -rm -f ${_ALL_CONTROLS}
130 @mkdir -p '${STAGING_PKG_DIR}' ${WRKINST} '${STAGING_DIR}/scripts'
131 @${MAKE} ${_ALL_CONTROLS} $(MAKE_TRACE)
132 @env ${MAKE_ENV} ${MAKE} pre-install $(MAKE_TRACE)
133 ifneq ($(filter manual,${INSTALL_STYLE}),)
134 env ${MAKE_ENV} ${MAKE} do-install $(MAKE_TRACE)
135 else ifeq ($(strip ${INSTALL_STYLE}),)
136 cd ${WRKBUILD} && env ${MAKE_ENV} ${MAKE} -f ${MAKE_FILE} \
137 DESTDIR='${WRKINST}' ${FAKE_FLAGS} ${INSTALL_TARGET} $(MAKE_TRACE)
138 ifeq (,$(filter libonly,${PKG_OPTS}))
139 env ${MAKE_ENV} ${MAKE} post-install $(MAKE_TRACE)
140 endif
141 else
142 @echo "Invalid INSTALL_STYLE '${INSTALL_STYLE}'" >&2
143 @exit 1
144 endif
145 @for a in ${WRKINST}/usr/bin/*-config; do \
146 [[ -e $$a ]] || continue; \
147 sed -e "s,^prefix=.*,prefix=${STAGING_TARGET_DIR}/usr," $$a > \
148 ${STAGING_DIR}/usr/bin/$$(basename $$a); \
149 chmod u+x ${STAGING_DIR}/usr/bin/$$(basename $$a); \
150 [[ "$$(basename $$a)" != "pkg-config" ]] && cp ${STAGING_DIR}/usr/bin/$$(basename $$a) ${STAGING_DIR}/scripts; \
151 echo "scripts/$$(basename $$a)" \
152 >>'${STAGING_PKG_DIR}/${PKG_NAME}.scripts'; \
153 done
154 @for a in ${WRKINST}/usr/lib/pkgconfig/*.pc; do \
155 [[ -e $$a ]] || continue; \
156 sed -e "s,^prefix=.*,prefix=${STAGING_TARGET_DIR}/usr," $$a > \
157 ${STAGING_DIR}/usr/lib/pkgconfig/$$(basename $$a); \
158 done
159 env ${MAKE_ENV} ${MAKE} spkg-install $(MAKE_TRACE)
160 ifeq (,$(filter noremove,${PKG_OPTS}))
161 @if test -s '${STAGING_PKG_DIR}/${PKG_NAME}'; then \
162 cd '${STAGING_DIR}'; \
163 while read fn; do \
164 rm -f "$$fn"; \
165 done <'${STAGING_PKG_DIR}/${PKG_NAME}'; \
167 endif
168 @rm -f '${STAGING_PKG_DIR}/${PKG_NAME}'
169 @-cd ${WRKINST}; \
170 if [ "${PKG_NAME}" != "uClibc" -a "${PKG_NAME}" != "eglibc" -a "${PKG_NAME}" != "glibc" -a "${PKG_NAME}" != "libpthread" -a "${PKG_NAME}" != "libstdcxx" -a "${PKG_NAME}" != "libgcc" -a "${PKG_NAME}" != "libthread-db" ];then \
171 find lib \( -name lib\*.so\* -o -name lib\*.a \) \
172 -exec echo 'WARNING: ${PKG_NAME} installs files in /lib -' \
173 ' fix this!' >&2 \; -quit 2>/dev/null; fi;\
174 find usr ! -type d 2>/dev/null | \
175 grep -E -v -e '^usr/lib/pkgconfig' -e '^usr/share' -e '^usr/src' -e '^usr/doc' -e '^usr/local' -e '^usr/man' -e '^usr/info' -e '^usr/lib/libc.so' -e '^usr/bin/[a-z0-9-]+-config' -e '^/usr/lib/libpthread_nonshared.a' | \
176 tee '${STAGING_PKG_DIR}/${PKG_NAME}' | \
177 $(TOOLS_DIR)/cpio -padlmu '${STAGING_DIR}'
178 @cd '${STAGING_DIR}'; grep 'usr/lib/.*\.la$$' \
179 '${STAGING_PKG_DIR}/${PKG_NAME}' | while read fn; do \
180 chmod u+w $$fn; \
181 $(SED) "s,\(^libdir='\| \|-L\|^dependency_libs='\)/usr/lib,\1$(STAGING_TARGET_DIR)/usr/lib,g" $$fn; \
182 done
183 ifeq (,$(filter noscripts,${PKG_OPTS}))
184 @cd '${STAGING_DIR}'; grep 'usr/s*bin/' \
185 '${STAGING_PKG_DIR}/${PKG_NAME}' | \
186 while read fn; do \
187 b="$$(dd if="$$fn" bs=2 count=1 2>/dev/null)"; \
188 [[ $$b = '#!' ]] || continue; \
189 cp "$$fn" scripts/; \
190 echo "scripts/$$(basename "$$fn")" \
191 >>'${STAGING_PKG_DIR}/${PKG_NAME}'; \
192 done
193 endif
194 -@test -e '${STAGING_PKG_DIR}/${PKG_NAME}.scripts' && \
195 cat '${STAGING_PKG_DIR}/${PKG_NAME}.scripts' >> '${STAGING_PKG_DIR}/${PKG_NAME}' || echo
196 touch $@
198 ${_IPKGS_COOKIE}:
199 @clean=0; \
200 for f in ${ALL_IPKGS}; do \
201 [[ -e $$f ]] && clean=1; \
202 done; \
203 [[ $$clean = 0 ]] || ${MAKE} clean
204 exec ${MAKE} package
206 package: ${ALL_IPKGS}
207 @cd ${WRKDIR}/fake-${CPU_ARCH} || exit 1; \
208 y=; sp=; for x in ${ALL_IDIRS}; do \
209 y="$$y$$sp$${x#$(WRKDIR)/fake-${CPU_ARCH}/}"; \
210 sp=' '; \
211 done; ls=; ln=; x=1; [[ -z $$y ]] || \
212 md5sum $$(find $$y -type f) | sed -e "s/*//" | \
213 while read sum name; do \
214 inode=$$(ls -i "$$name"); \
215 echo "$$sum $${inode%% *} $$name"; \
216 done | sort | while read sum inode name; do \
217 if [[ $$sum = $$ls ]]; then \
218 [[ $$li = $$inode ]] && continue; \
219 case $$x in \
220 1) echo 'WARNING: duplicate files found in' \
221 'package "${PKG_NAME}"! Fix them.' >&2; \
222 echo -n "> $$ln "; \
223 ;; \
224 2) echo -n "> $$ln "; \
225 ;; \
226 3) echo -n ' '; \
227 ;; \
228 esac; \
229 echo -n "$$name"; \
230 x=3; \
231 else \
232 case $$x in \
233 3) echo; \
234 x=2; \
235 ;; \
236 esac; \
237 fi; \
238 ls=$$sum; \
239 ln=$$name; \
240 li=$$inode; \
241 done
242 touch ${_IPKGS_COOKIE}
244 clean-targets: clean-dev-generic
246 clean-dev-generic:
247 ifeq (,$(filter noremove,${PKG_OPTS}))
248 @if test -s '${STAGING_PKG_DIR}/${PKG_NAME}'; then \
249 cd '${STAGING_DIR}'; \
250 while read fn; do \
251 rm -f "$$fn"; \
252 done <'${STAGING_PKG_DIR}/${PKG_NAME}'; \
254 endif
255 @rm -f '${STAGING_PKG_DIR}/${PKG_NAME}'