added LED support for Alix
[openadk.git] / mk / package.mk
blobf5a48dba8cb04fc141bce2ac7df054b5c1bd9a29
1 # This file is part of the OpenADK project. OpenADK is copyrighted
2 # material, please see the LICENCE file in the top-level directory.
4 all: build-all-pkgs
6 ifneq (${PKG_CXX},)
7 ifeq (${ADK_COMPILE_${PKG_CXX}_WITH_UCLIBCXX},y)
8 PKG_BUILDDEP+= uclibc++
9 PKG_DEPENDS+= uclibc++
10 else
11 PKG_DEPENDS+= libstdcxx
12 endif
13 endif
15 TCFLAGS:= ${TARGET_CFLAGS}
16 TCXXFLAGS:= ${TARGET_CFLAGS}
17 TCPPFLAGS:= ${TARGET_CPPFLAGS}
18 TLDFLAGS:= ${TARGET_LDFLAGS} -Wl,-rpath -Wl,/usr/lib \
19 -Wl,-rpath-link -Wl,${STAGING_DIR}/usr/lib \
20 -L${STAGING_DIR}/lib -L${STAGING_DIR}/usr/lib
21 ifeq ($(ADK_STATIC),y)
22 TCFLAGS:= ${TARGET_CFLAGS} -static
23 TCXXFLAGS:= ${TARGET_CFLAGS} -static
24 TCPPFLAGS:= ${TARGET_CPPFLAGS} -static
25 TLDFLAGS:= ${TARGET_LDFLAGS} -Wl,-rpath -Wl,/usr/lib \
26 -Wl,-rpath-link -Wl,${STAGING_DIR}/usr/lib \
27 -L${STAGING_DIR}/lib -L${STAGING_DIR}/usr/lib \
28 -static
29 endif
30 ifeq ($(ADK_NATIVE),y)
31 TCFLAGS:=
32 TCXXFLAGS:=
33 TCPPFLAGS:=
34 TLDFLAGS:=
35 endif
37 ifeq ($(ADK_DEBUG),)
38 TCPPFLAGS+= -DNDEBUG
39 endif
40 ifneq ($(ADK_DEBUG),)
41 CONFIGURE_ARGS+= --enable-debug
42 else
43 CONFIGURE_ARGS+= --disable-debug
44 endif
46 ifeq ($(ADK_NATIVE),y)
47 CONFIGURE_ENV+= CONFIG_SHELL='$(strip ${SHELL})' \
48 CFLAGS='$(strip ${TCFLAGS})' \
49 CXXFLAGS='$(strip ${TCXXFLAGS})' \
50 CPPFLAGS='$(strip ${TCPPFLAGS})' \
51 LDFLAGS='$(strip ${TLDFLAGS})' \
52 PKG_CONFIG_PATH='${STAGING_DIR}/usr/lib/pkgconfig' \
53 PKG_CONFIG_LIBDIR=/dev/null
54 else
55 CONFIGURE_ENV+= ${TARGET_CONFIGURE_OPTS} \
56 ${HOST_CONFIGURE_OPTS} \
57 CC='${TARGET_CC}' CXX='${TARGET_CXX}' \
58 CFLAGS='$(strip ${TCFLAGS})' \
59 CXXFLAGS='$(strip ${TCXXFLAGS})' \
60 CPPFLAGS='$(strip ${TCPPFLAGS})' \
61 LDFLAGS='$(strip ${TLDFLAGS})' \
62 PKG_CONFIG_PATH='${STAGING_DIR}/usr/lib/pkgconfig' \
63 PKG_CONFIG_LIBDIR=/dev/null \
64 CONFIG_SHELL='$(strip ${SHELL})' \
65 ac_cv_func_realloc_0_nonnull=yes \
66 ac_cv_func_malloc_0_nonnull=yes
67 endif
68 MAKE_FILE?= Makefile
69 # this is environment for 'make all' and 'make install'
70 MAKE_ENV?=
71 # this is arguments for 'make all' and 'make install'
72 XAKE_FLAGS?=
73 # this is arguments for 'make all' ONLY
74 MAKE_FLAGS?=
75 # this is arguments for 'make install' ONLY
76 FAKE_FLAGS?=
77 ALL_TARGET?= all
78 INSTALL_TARGET?= install
79 ifeq ($(ADK_NATIVE),y)
80 MAKE_ENV+= \
81 WRKDIR='${WRKDIR}' WRKDIST='${WRKDIST}' \
82 WRKSRC='${WRKSRC}' WRKBUILD='${WRKBUILD}' \
83 CFLAGS='$(strip ${TCFLAGS})' \
84 CXXFLAGS='$(strip ${TCXXFLAGS})' \
85 CPPFLAGS='$(strip ${TCPPFLAGS})' \
86 LDFLAGS='$(strip ${TLDFLAGS})'
87 else
88 MAKE_ENV+= PATH='${TARGET_PATH}' \
89 ${HOST_CONFIGURE_OPTS} \
90 WRKDIR='${WRKDIR}' WRKDIST='${WRKDIST}' \
91 WRKSRC='${WRKSRC}' WRKBUILD='${WRKBUILD}' \
92 PKG_CONFIG_PATH='${STAGING_DIR}/usr/lib/pkgconfig' \
93 PKG_CONFIG_LIBDIR=/dev/null \
94 CC='${TARGET_CC}' CXX='${TARGET_CXX}' \
95 AR='${TARGET_CROSS}ar' RANLIB='${TARGET_CROSS}ranlib' \
96 NM='${TARGET_CROSS}nm' \
97 CFLAGS='$(strip ${TCFLAGS})' \
98 CXXFLAGS='$(strip ${TCXXFLAGS})' \
99 CPPFLAGS='$(strip ${TCPPFLAGS})' \
100 LDFLAGS='$(strip ${TLDFLAGS})'
101 endif
102 MAKE_FLAGS+= ${XAKE_FLAGS}
103 FAKE_FLAGS+= ${XAKE_FLAGS}
105 ifeq ($(strip ${WRKDIR_BSD}),)
106 WRKDIR_BASE:= ${BUILD_DIR}
107 else
108 WRKDIR_BASE:= $(shell pwd)
109 endif
111 _EXTRACT_COOKIE= ${WRKDIST}/.extract_done
112 _PATCH_COOKIE= ${WRKDIST}/.prepared
113 _CONFIGURE_COOKIE= ${WRKBUILD}/.configure_done
114 _BUILD_COOKIE= ${WRKBUILD}/.build_done
115 _FAKE_COOKIE= ${WRKINST}/.fake_done
116 _IPKGS_COOKIE= ${PACKAGE_DIR}/.stamps/${PKG_NAME}\x01${PKG_VERSION}-${PKG_RELEASE}
118 _IN_PACKAGE:= 1
119 include ${TOPDIR}/mk/buildhlp.mk
120 -include info.mk
122 # defined in buildhlp.mk ('extract' can fail, use 'patch' then)
123 extract: ${_EXTRACT_COOKIE}
124 patch: ${_PATCH_COOKIE}
126 # defined below (will be moved to pkg-bottom.mk!)
127 configure: ${_CONFIGURE_COOKIE}
128 build: ${_BUILD_COOKIE}
129 fake: ${_FAKE_COOKIE}
131 # our recursive build entry point
132 build-all-pkgs: ${_IPKGS_COOKIE}
134 # there are some parameters to the PKG_template function
135 # 1.) Config.in identifier ADK_PACKAGE_$(1)
136 # 2.) name of the package, for single package mostly $(PKG_NAME)
137 # 3.) package version (upstream version) and package release (adk version),
138 # always $(PKG_VERSION)-$(PKG_RELEASE)
139 # 4.) dependencies to other packages, $(PKG_DEPENDS)
140 # 5.) description for the package, $(PKG_DESCR)
141 # 6.) section of the package, $(PKG_SECTION)
142 # 7.) special package options
143 # noscripts -> do not install scripts to $(STAGING_DIR)/target/scripts
144 # (needed for example for autoconf/automake)
145 # noremove -> do not remove files from $(STAGING_DIR)/target while
146 # cleaning (needed for toolchain packages like glibc/eglibc)
147 # should be package format independent and modular in the future
148 define PKG_template
149 ALL_PKGOPTS+= $(1)
150 PKGNAME_$(1)= $(2)
151 PKGDEPS_$(1)= $(4)
152 PKGDESC_$(1)= $(5)
153 IPKG_$(1)= $(PACKAGE_DIR)/$(2)_$(3)_${CPU_ARCH}.${PKG_SUFFIX}
154 IDIR_$(1)= $(WRKDIR)/fake-${CPU_ARCH}/pkg-$(2)
155 ifneq (${ADK_PACKAGE_$(1)}${DEVELOPER},)
156 ALL_IPKGS+= $$(IPKG_$(1))
157 ALL_IDIRS+= $${IDIR_$(1)}
158 endif
159 INFO_$(1)= $(PKG_STATE_DIR)/info/$(2).list
161 ifeq ($(ADK_PACKAGE_$(1)),y)
162 install-targets: $$(INFO_$(1))
163 endif
165 IDEPEND_$(1):= $$(strip $(4))
167 _ALL_CONTROLS+= $$(IDIR_$(1))/CONTROL/control
168 ICONTROL_$(1)?= $(WRKDIR)/.$(2).control
169 $$(IDIR_$(1))/CONTROL/control: ${_PATCH_COOKIE}
170 @echo "Package: $(2)" > $(WRKDIR)/.$(2).control
171 @echo "Section: $(6)" >> $(WRKDIR)/.$(2).control
172 @echo "Description: $(5)" >> $(WRKDIR)/.$(2).control
173 ${BASH} ${SCRIPT_DIR}/make-ipkg-dir.sh $${IDIR_$(1)} $${ICONTROL_$(1)} $(3) ${CPU_ARCH}
174 @adeps='$$(strip $${IDEPEND_$(1)})'; if [[ -n $$$$adeps ]]; then \
175 comma=; \
176 deps=; \
177 last=; \
178 for dep in $$$$adeps; do \
179 if [[ $$$$last = kernel && $$$$dep = \(* ]]; then \
180 deps="$$$$deps $$$$dep"; \
181 else \
182 deps="$$$$deps$$$$comma$$$$dep"; \
183 fi; \
184 comma=", "; \
185 last=$$$$dep; \
186 done; \
187 echo "Depends: $$$$deps" >>$${IDIR_$(1)}/CONTROL/control; \
189 @for file in conffiles preinst postinst prerm postrm; do \
190 [ ! -f ./files/$(2).$$$$file ] || cp ./files/$(2).$$$$file $$(IDIR_$(1))/CONTROL/$$$$file; \
191 done
193 $$(IPKG_$(1)): $$(IDIR_$(1))/CONTROL/control $${_FAKE_COOKIE}
194 ifeq ($(ADK_DEBUG),)
195 $${RSTRIP} $${IDIR_$(1)} $(MAKE_TRACE)
196 endif
197 @for file in $$$$(ls ./files/*.init 2>/dev/null); do \
198 fname=$$$$(echo $$$$file| sed -e "s#.*/##" -e "s#.init##"); \
199 check=$$$$(grep PKG $$$$file|cut -d ' ' -f 2); \
200 if [ "$$$$check" == $(2) ];then \
201 mkdir -p $$(IDIR_$(1))/etc/init.d && cp $$$$file $$(IDIR_$(1))/etc/init.d/$$$$fname; \
202 fi; \
203 done
204 @cd $${IDIR_$(1)}; for script in etc/init.d/*; do \
205 [[ -e $$$$script ]] || continue; \
206 chmod 0755 "$$$$script"; \
207 done
208 @mkdir -p $${PACKAGE_DIR} '$${STAGING_PARENT}/pkg' \
209 '$${STAGING_DIR}/scripts'
210 ifeq (,$(filter noremove,$(7)))
211 @if test -s '$${STAGING_PARENT}/pkg/$(1)'; then \
212 cd '$${STAGING_DIR}'; \
213 while read fn; do \
214 rm -f "$$$$fn"; \
215 done <'$${STAGING_PARENT}/pkg/$(1)'; \
217 endif
218 @rm -f '$${STAGING_PARENT}/pkg/$(1)'
219 @cd $${IDIR_$(1)}; \
220 x=$$$$(find tmp var -mindepth 1 2>/dev/null); if [[ -n $$$$x ]]; then \
221 echo 'WARNING: $${IPKG_$(1)} installs files into a' \
222 'ramdisk location:' >&2; \
223 echo "$$$$x" | sed 's/^/- /' >&2; \
224 fi; \
225 if [ "${PKG_NAME}" != "uClibc" -a "${PKG_NAME}" != "glibc" -a "${PKG_NAME}" != "eglibc" -a "${PKG_NAME}" != "libpthread" -a "${PKG_NAME}" != "libstdcxx" -a "${PKG_NAME}" != "libthread-db" ];then \
226 find lib \( -name lib\*.so\* -o -name lib\*.a \) \
227 -exec echo 'WARNING: $${IPKG_$(1)} installs files in /lib -' \
228 ' fix this!' >&2 \; -quit 2>/dev/null; fi; \
229 find usr ! -type d 2>/dev/null | \
230 grep -v -e '^usr/share' -e '^usr/man' -e '^usr/info' | \
231 tee '$${STAGING_PARENT}/pkg/$(1)' | \
232 cpio -apdlmu '$${STAGING_DIR}'
233 @cd '$${STAGING_DIR}'; grep 'usr/lib/.*\.la$$$$' \
234 '$${STAGING_PARENT}/pkg/$(1)' | while read fn; do \
235 chmod u+w $$$$fn; \
236 $(SED) "s,\(^libdir='\| \|-L\|^dependency_libs='\)/usr/lib,\1$(STAGING_DIR)/usr/lib,g" $$fn; \
237 done
238 ifeq (,$(filter noscripts,$(7)))
239 @cd '$${STAGING_DIR}'; grep 'usr/s*bin/' \
240 '$${STAGING_PARENT}/pkg/$(1)' | \
241 while read fn; do \
242 b="$$$$(dd if="$$$$fn" bs=2 count=1 2>/dev/null)"; \
243 [[ $$$$b = '#!' ]] || continue; \
244 cp "$$$$fn" scripts/; \
245 echo "scripts/$$$$(basename "$$$$fn")" \
246 >>'$${STAGING_PARENT}/pkg/$(1)'; \
247 done
248 endif
249 ifeq (,$(filter libmix,$(7)))
250 ifeq (,$(filter libonly,$(7)))
251 $${PKG_BUILD} $${IDIR_$(1)} $${PACKAGE_DIR} $(MAKE_TRACE)
252 endif
253 endif
255 clean-targets: clean-dev-$(1)
257 clean-dev-$(1):
258 ifeq (,$(filter noremove,$(7)))
259 @if test -s '$${STAGING_PARENT}/pkg/$(1)'; then \
260 cd '$${STAGING_DIR}'; \
261 while read fn; do \
262 rm -f "$$$$fn"; \
263 done <'$${STAGING_PARENT}/pkg/$(1)'; \
265 endif
266 @rm -f '$${STAGING_PARENT}/pkg/$(1)'
268 $$(INFO_$(1)): $$(IPKG_$(1))
269 $(PKG_INSTALL) $$(IPKG_$(1))
270 endef
272 install-targets:
273 install:
274 @$(CMD_TRACE) "installing... "
275 @$(MAKE) install-targets $(MAKE_TRACE)
277 clean-targets:
278 clean:
279 @$(CMD_TRACE) "cleaning... "
280 @$(MAKE) clean-targets $(MAKE_TRACE)
281 rm -rf ${WRKDIR} ${ALL_IPKGS} ${PACKAGE_DIR}/.stamps/${PKG_NAME}\x01*
283 distclean: clean
284 rm -f ${FULLDISTFILES}
286 .PHONY: all refetch extract patch configure \
287 build fake package install clean build-all-pkgs