libgpg-error: Fix compiling with uclibc
[openadk.git] / mk / pkg-bottom.mk
blobb46e381de23d8c8e813611b1be2501e8afc53c1a
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 PKG_LIBNAME?= $(PKG_NAME)
16 ifeq ($(ADK_TARGET_USE_SHARED_LIBS_ONLY),y)
17 CONFIGURE_LIB:=--disable-static --enable-shared
18 endif
19 ifeq ($(ADK_TARGET_USE_STATIC_LIBS_ONLY),y)
20 CONFIGURE_LIB:=--enable-static --disable-shared
21 endif
22 ifeq ($(ADK_TARGET_USE_SHARED_AND_STATIC_LIBS)$(ADK_TARGET_USE_STATIC_AND_SHARED_LIBS),y)
23 CONFIGURE_LIB:=--enable-static --enable-shared
24 endif
26 pre-configure:
27 do-configure:
28 post-configure:
29 ${_CONFIGURE_COOKIE}: ${_PATCH_COOKIE}
30 ifneq (,$(filter bootstrap,${AUTOTOOL_STYLE}))
31 @$(CMD_TRACE) "autotooling.. "
32 @cd ${WRKSRC}; env ${AUTOTOOL_ENV} $(BASH) bootstrap* $(MAKE_TRACE)
33 endif
34 ifneq (,$(filter autogen,${AUTOTOOL_STYLE}))
35 @$(CMD_TRACE) "autotooling.. "
36 @cd ${WRKSRC}; env ${AUTOTOOL_ENV} $(BASH) autogen.sh $(MAKE_TRACE)
37 endif
38 ifneq (,$(filter autoconf,${AUTOTOOL_STYLE}))
39 @$(CMD_TRACE) "autotooling.. "
40 @cd ${WRKSRC}; env ${AUTOTOOL_ENV} autoconf $(MAKE_TRACE)
41 endif
42 ifneq (,$(filter autoreconf,${AUTOTOOL_STYLE}))
43 @$(CMD_TRACE) "autotooling.. "
44 @cd ${WRKSRC}; env ${AUTOTOOL_ENV} autoreconf -vif $(MAKE_TRACE)
45 @rm -rf ${WRKSRC}/autom4te.cache
46 @touch ${WRKDIR}/.autoreconf_done
47 endif
48 mkdir -p ${WRKBUILD}
49 @${MAKE} pre-configure $(MAKE_TRACE)
51 ifneq ($(filter manual,${CONFIG_STYLE}),)
52 env ${CONFIGURE_ENV} ${MAKE} do-configure $(MAKE_TRACE)
53 else ifneq ($(filter meson,${CONFIG_STYLE}),)
54 @$(CMD_TRACE) "configuring meson.. "
55 (cd ${WRKSRC} && $(MESON_ENV) \
56 meson --prefix /usr --libdir lib \
57 --cross-file $(STAGING_HOST_DIR)/etc/meson/cross-compilation.conf \
58 --buildtype release $(MESON_FLAGS) \
59 $(WRKSRC) $(WRKBUILD))
60 else ifneq ($(filter cmake,${CONFIG_STYLE}),)
61 @$(CMD_TRACE) "configuring cmake.. "
62 sed -e "s#@@TARGET_CC@@#$(TARGET_CC_NO_CCACHE)#" \
63 -e "s#@@TARGET_CXX@@#$(TARGET_CXX_NO_CCACHE)#" \
64 -e "s#@@TARGET_CFLAGS@@#$(TARGET_CFLAGS)#" \
65 -e "s#@@TARGET_CXXFLAGS@@#$(TARGET_CXXFLAGS)#" \
66 -e "s#@@TARGET_ARCH@@#$(ADK_TARGET_ARCH)#" \
67 -e "s#@@STAGING_TARGET_DIR@@#$(STAGING_TARGET_DIR)#g" \
68 -e "s#@@STAGING_HOST_DIR@@#$(STAGING_HOST_DIR)#g" \
69 $(SCRIPT_DIR)/toolchain.cmake.in > $(SCRIPT_DIR)/toolchain.cmake
70 (cd ${WRKBUILD} && PATH='${HOST_PATH}' \
71 cmake -Wno-dev -DCMAKE_INSTALL_PREFIX:PATH=/usr \
72 -DCMAKE_TOOLCHAIN_FILE="$(SCRIPT_DIR)/toolchain.cmake" \
73 ${CMAKE_FLAGS} ${WRKSRC}) $(MAKE_TRACE)
74 else ifneq ($(filter minimal,${CONFIG_STYLE}),)
75 @$(CMD_TRACE) "configuring.. "
76 cd ${WRKBUILD}; rm -f config.{cache,status}; \
77 env ${CONFIGURE_ENV} \
78 ${BASH} ${WRKSRC}/${CONFIGURE_PROG} \
79 ${CONFIGURE_ARGS} $(MAKE_TRACE)
80 else ifneq ($(filter basic,${CONFIG_STYLE}),)
81 @$(CMD_TRACE) "configuring.. "
82 cd ${WRKBUILD}; rm -f config.{cache,status}; \
83 env ${CONFIGURE_ENV} \
84 ${BASH} ${WRKSRC}/${CONFIGURE_PROG} ${CONFIGURE_TRIPLE} \
85 ${CONFIGURE_ARGS} $(MAKE_TRACE)
86 else ifneq ($(filter perl,${CONFIG_STYLE}),)
87 @$(CMD_TRACE) "configuring perl module.. "
88 if [ -f ${WRKBUILD}/Makefile.PL ]; then \
89 cd ${WRKBUILD}; \
90 PATH='${HOST_PATH}' \
91 PERL_MM_USE_DEFAULT=1 \
92 PERL_AUTOINSTALL=--skipdeps \
93 $(PERL_ENV) \
94 perl-host Makefile.PL ${CONFIGURE_ARGS}; \
95 else \
96 cd ${WRKBUILD}; \
97 PATH='${HOST_PATH}' \
98 $(PERL_ENV) \
99 perl-host Build.PL; \
101 else ifeq ($(strip ${CONFIG_STYLE}),)
102 @$(CMD_TRACE) "configuring.. "
103 cd ${WRKBUILD}; rm -f config.{cache,status}; \
104 env ${CONFIGURE_ENV} \
105 ${BASH} ${WRKSRC}/${CONFIGURE_PROG} ${CONFIGURE_TRIPLE} \
106 --program-prefix= \
107 --program-suffix= \
108 --prefix=/usr \
109 --bindir=/usr/bin \
110 --datadir=/usr/share \
111 --mandir=/usr/share/man \
112 --libexecdir=/usr/libexec \
113 --localstatedir=/var \
114 --sysconfdir=/etc \
115 --disable-dependency-tracking \
116 --disable-libtool-lock \
117 --disable-nls \
118 ${CONFIGURE_LIB} \
119 ${CONFIGURE_ARGS} $(MAKE_TRACE)
120 else
121 @echo "Invalid CONFIG_STYLE '${CONFIG_STYLE}'" >&2
122 @exit 1
123 endif
124 @${MAKE} post-configure $(MAKE_TRACE)
125 @touch $@
127 # do a parallel build if requested && package doesn't force disable it
128 ifeq (${ADK_MAKE_PARALLEL},y)
129 ifeq ($(strip ${PKG_NOPARALLEL}),)
130 MAKE_FLAGS+= -j${ADK_MAKE_JOBS}
131 endif
132 endif
134 pre-build:
135 do-build:
136 post-build:
137 ${_BUILD_COOKIE}: ${_CONFIGURE_COOKIE}
138 @env ${MAKE_ENV} ${MAKE} pre-build $(MAKE_TRACE)
139 @$(CMD_TRACE) "compiling.. "
140 ifneq ($(filter meson,${BUILD_STYLE}),)
141 PATH='$(HOST_PATH)' ninja -v -C $(WRKBUILD)
142 else ifneq ($(filter manual,${BUILD_STYLE}),)
143 env ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} do-build $(MAKE_TRACE)
144 else ifeq ($(strip ${BUILD_STYLE}),)
145 cd ${WRKBUILD} && env ${MAKE_ENV} ${MAKE} -f ${MAKE_FILE} \
146 ${MAKE_FLAGS} ${ALL_TARGET} $(MAKE_TRACE)
147 else
148 @echo "Invalid BUILD_STYLE '${BUILD_STYLE}'" >&2
149 @exit 1
150 endif
151 @env ${MAKE_ENV} ${MAKE} post-build $(MAKE_TRACE)
152 touch $@
154 pre-install:
155 do-install:
156 post-install:
157 spkg-install: ${ALL_POSTINST}
158 ${_FAKE_COOKIE}: ${_BUILD_COOKIE}
159 @-rm -f ${_ALL_CONTROLS}
160 @mkdir -p '${STAGING_PKG_DIR}/stamps' ${WRKINST} '${STAGING_TARGET_DIR}/scripts'
161 @${MAKE} -j${ADK_MAKE_JOBS} ${_ALL_CONTROLS} $(MAKE_TRACE)
162 @env ${MAKE_ENV} ${MAKE} pre-install $(MAKE_TRACE)
163 ifneq ($(filter meson,${INSTALL_STYLE}),)
164 DESTDIR='$(WRKINST)' PATH='$(HOST_PATH)' \
165 ninja -C $(WRKBUILD) install $(MAKE_TRACE)
166 else ifneq ($(filter manual,${INSTALL_STYLE}),)
167 env ${MAKE_ENV} ${MAKE} do-install $(MAKE_TRACE)
168 else ifeq ($(strip ${INSTALL_STYLE}),)
169 cd ${WRKBUILD} && env ${MAKE_ENV} ${MAKE} -f ${MAKE_FILE} \
170 DESTDIR='${WRKINST}' ${FAKE_FLAGS} ${INSTALL_TARGET} $(MAKE_TRACE)
171 env ${MAKE_ENV} ${MAKE} post-install $(MAKE_TRACE)
172 else
173 @echo "Invalid INSTALL_STYLE '${INSTALL_STYLE}'" >&2
174 @exit 1
175 endif
176 env ${MAKE_ENV} ${MAKE} spkg-install $(MAKE_TRACE)
177 @rm -f '${STAGING_PKG_DIR}/${PKG_NAME}.scripts'
178 @for a in ${WRKINST}/usr/bin/*-config*; do \
179 [[ -e $$a ]] || continue; \
180 sed -e "s,^prefix=.*,prefix=${STAGING_TARGET_DIR}/usr," $$a > \
181 ${STAGING_TARGET_DIR}/usr/bin/$$(basename $$a); \
182 chmod u+x ${STAGING_TARGET_DIR}/usr/bin/$$(basename $$a); \
183 [[ "$$(basename $$a)" != "pkg-config" ]] && cp ${STAGING_TARGET_DIR}/usr/bin/$$(basename $$a) ${STAGING_TARGET_DIR}/scripts; \
184 echo "scripts/$$(basename $$a)" \
185 >>'${STAGING_PKG_DIR}/${PKG_NAME}.scripts'; \
186 done
187 ifeq (,$(filter noremove,${PKG_OPTS}))
188 @if test -s '${STAGING_PKG_DIR}/${PKG_NAME}'; then \
189 cd '${STAGING_TARGET_DIR}'; \
190 while read fn; do \
191 rm -f "$$fn"; \
192 done <'${STAGING_PKG_DIR}/${PKG_NAME}'; \
194 endif
195 @rm -f '${STAGING_PKG_DIR}/${PKG_NAME}'
196 ifneq (,$(filter dev,${PKG_OPTS}))
197 @mkdir -p $(WRKDIR)/fake-${ADK_TARGET_CPU_ARCH}/pkg-$(PKG_LIBNAME)-dev/usr/include
198 @test -d ${WRKINST}/usr/include && cd ${WRKINST}/usr/include; \
199 find . -name \*.h | \
200 $(CPIO) -padlmu --quiet $(WRKDIR)/fake-${ADK_TARGET_CPU_ARCH}/pkg-$(PKG_LIBNAME)-dev/usr/include
201 @mkdir -p $(WRKDIR)/fake-${ADK_TARGET_CPU_ARCH}/pkg-$(PKG_LIBNAME)-dev/usr/lib/pkgconfig
202 @test -d ${WRKINST}/usr/lib/pkgconfig && cd ${WRKINST}/usr/lib/pkgconfig; \
203 find . -name \*.pc | \
204 $(CPIO) -padlmu --quiet $(WRKDIR)/fake-${ADK_TARGET_CPU_ARCH}/pkg-$(PKG_LIBNAME)-dev/usr/lib/pkgconfig
205 @for a in ${WRKINST}/usr/bin/*-config*; do \
206 [[ -e $$a ]] || continue; \
207 mkdir -p $(WRKDIR)/fake-${ADK_TARGET_CPU_ARCH}/pkg-$(PKG_LIBNAME)-dev/usr/bin; \
208 cp $$a $(WRKDIR)/fake-${ADK_TARGET_CPU_ARCH}/pkg-$(PKG_LIBNAME)-dev/usr/bin; \
209 chmod 755 $(WRKDIR)/fake-${ADK_TARGET_CPU_ARCH}/pkg-$(PKG_LIBNAME)-dev/usr/bin/$$(basename $$a); \
210 done
211 endif
212 ifeq (,$(filter nostaging,${PKG_OPTS}))
213 @-cd ${WRKINST}; \
214 find usr ! -type d 2>/dev/null | \
215 grep -E -v -e '^usr/share' -e '^usr/src' -e '^usr/doc' -e '^usr/local' -e '^usr/man' -e '^usr/info' \
216 -e '^usr/lib/libc.so' -e '^usr/bin/[a-z0-9-]+-config*' -e '^usr/lib/.*\.la$$' \
217 -e '^/usr/lib/libpthread_nonshared.a' | \
218 tee '${STAGING_PKG_DIR}/${PKG_NAME}' | \
219 $(CPIO) -padlmu --quiet '${STAGING_TARGET_DIR}'
220 endif
221 ifeq (,$(filter noscripts,${PKG_OPTS}))
222 @cd '${STAGING_TARGET_DIR}'; grep 'usr/s*bin/' \
223 '${STAGING_PKG_DIR}/${PKG_NAME}' | \
224 while read fn; do \
225 b="$$(dd if="$$fn" bs=2 count=1 2>/dev/null)"; \
226 [[ $$b = '#!' ]] || continue; \
227 cp "$$fn" scripts/; \
228 echo "scripts/$$(basename "$$fn")" \
229 >>'${STAGING_PKG_DIR}/${PKG_NAME}'; \
230 done
231 endif
232 -@test -e '${STAGING_PKG_DIR}/${PKG_NAME}.scripts' && \
233 cat '${STAGING_PKG_DIR}/${PKG_NAME}.scripts' >> '${STAGING_PKG_DIR}/${PKG_NAME}' || :
234 touch $@
236 ${_IPKGS_COOKIE}:
237 exec ${MAKE} package
239 package: ${ALL_IPKGS}
240 ifneq ($(DEVELOPER),)
241 @cd ${WRKDIR}/fake-${ADK_TARGET_CPU_ARCH} || exit 1; \
242 y=; sp=; for x in ${ALL_IDIRS}; do \
243 y="$$y$$sp$${x#$(WRKDIR)/fake-${ADK_TARGET_CPU_ARCH}/}"; \
244 sp=' '; \
245 done; ls=; ln=; x=1; [[ -z $$y ]] || \
246 md5sum $$(find $$y -type f) | sed -e "s/*//" | \
247 while read sum name; do \
248 inode=$$(ls -i "$$name"); \
249 echo "$$sum $${inode%% *} $$name"; \
250 done | sort | while read sum inode name; do \
251 if [[ $$sum = $$ls ]]; then \
252 [[ $$li = $$inode ]] && continue; \
253 case $$x in \
254 1) echo 'WARNING: duplicate files found in' \
255 'package "${PKG_NAME}"! Fix them.' >&2; \
256 echo -n "> $$ln "; \
257 ;; \
258 2) echo -n "> $$ln "; \
259 ;; \
260 3) echo -n ' '; \
261 ;; \
262 esac; \
263 echo -n "$$name"; \
264 x=3; \
265 else \
266 case $$x in \
267 3) echo; \
268 x=2; \
269 ;; \
270 esac; \
271 fi; \
272 ls=$$sum; \
273 ln=$$name; \
274 li=$$inode; \
275 done
276 endif
277 touch ${_IPKGS_COOKIE}
279 clean-targets: clean-dev-generic
281 clean-dev-generic:
282 ifeq (,$(filter noremove,${PKG_OPTS}))
283 @if test -s '${STAGING_PKG_DIR}/${PKG_NAME}'; then \
284 cd '${STAGING_TARGET_DIR}'; \
285 while read fn; do \
286 rm -f "$$fn"; \
287 done <'${STAGING_PKG_DIR}/${PKG_NAME}'; \
289 endif
290 @rm -f '${STAGING_PKG_DIR}/${PKG_NAME}'
292 ifneq (,$(filter autoreconf,${AUTOTOOL_STYLE}))
293 DIFF_IGNOREFILES?= configure missing depcomp install-sh INSTALL \
294 aclocal.m4 config.h.in Makefile.in */Makefile.in \
295 config.sub config.guess */config.sub */config.guess
296 else
297 DIFF_IGNOREFILES?= config.sub config.guess */config.sub */config.guess
298 endif