1 # This file is part of the OpenADK project. OpenADK is copyrighted
2 # material, please see the LICENCE file in the top-level directory.
7 ifeq (${ADK_COMPILE_
${PKG_CXX}_WITH_UCLIBCXX
},y
)
8 PKG_BUILDDEP
+= uclibc
++
11 PKG_DEPENDS
+= libstdcxx
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 \
30 ifeq ($(ADK_NATIVE
),y
)
41 CONFIGURE_ARGS
+= --enable-debug
43 CONFIGURE_ARGS
+= --disable-debug
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
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
69 # this is environment for 'make all' and 'make install'
71 # this is arguments for 'make all' and 'make install'
73 # this is arguments for 'make all' ONLY
75 # this is arguments for 'make install' ONLY
78 INSTALL_TARGET?
= install
79 ifeq ($(ADK_NATIVE
),y
)
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})'
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})'
102 MAKE_FLAGS
+= ${XAKE_FLAGS}
103 FAKE_FLAGS
+= ${XAKE_FLAGS}
105 ifeq ($(strip ${WRKDIR_BSD}),)
106 WRKDIR_BASE
:= ${BUILD_DIR}
108 WRKDIR_BASE
:= $(shell pwd
)
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}
119 include ${TOPDIR}/mk
/buildhlp.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
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)}
159 INFO_
$(1)= $(PKG_STATE_DIR
)/info/$(2).list
161 ifeq ($(ADK_PACKAGE_
$(1)),y
)
162 install-targets
: $$(INFO_
$(1))
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 \
178 for dep in
$$$$adeps; do \
179 if
[[ $$$$last = kernel
&& $$$$dep = \
(* ]]; then \
180 deps
="$$$$deps $$$$dep"; \
182 deps
="$$$$deps$$$$comma$$$$dep"; \
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; \
193 $$(IPKG_
$(1)): $$(IDIR_
$(1))/CONTROL
/control
$${_FAKE_COOKIE}
195 $${RSTRIP} $${IDIR_
$(1)} $(MAKE_TRACE
)
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; \
204 @cd
$${IDIR_
$(1)}; for script in etc
/init.d
/*; do \
205 [[ -e
$$$$script ]] || continue
; \
206 chmod
0755 "$$$$script"; \
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}'; \
215 done
<'$${STAGING_PARENT}/pkg/$(1)'; \
218 @
rm -f
'$${STAGING_PARENT}/pkg/$(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; \
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 \
236 $(SED
) "s,\(^libdir='\| \|-L\|^dependency_libs='\)/usr/lib,\1$(STAGING_DIR)/usr/lib,g" $$fn; \
238 ifeq (,$(filter noscripts
,$(7)))
239 @cd
'$${STAGING_DIR}'; grep
'usr/s*bin/' \
240 '$${STAGING_PARENT}/pkg/$(1)' | \
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)'; \
249 ifeq (,$(filter libmix
,$(7)))
250 ifeq (,$(filter libonly
,$(7)))
251 $${PKG_BUILD} $${IDIR_
$(1)} $${PACKAGE_DIR} $(MAKE_TRACE
)
255 clean-targets
: clean-dev-
$(1)
258 ifeq (,$(filter noremove
,$(7)))
259 @if
test -s
'$${STAGING_PARENT}/pkg/$(1)'; then \
260 cd
'$${STAGING_DIR}'; \
263 done
<'$${STAGING_PARENT}/pkg/$(1)'; \
266 @
rm -f
'$${STAGING_PARENT}/pkg/$(1)'
268 $$(INFO_
$(1)): $$(IPKG_
$(1))
269 $(PKG_INSTALL
) $$(IPKG_
$(1))
274 @
$(CMD_TRACE
) "installing... "
275 @
$(MAKE
) install-targets
$(MAKE_TRACE
)
279 @
$(CMD_TRACE
) "cleaning... "
280 @
$(MAKE
) clean-targets
$(MAKE_TRACE
)
281 rm -rf
${WRKDIR} ${ALL_IPKGS} ${PACKAGE_DIR}/.stamps
/${PKG_NAME}\x01*
284 rm -f
${FULLDISTFILES}
286 .PHONY
: all refetch extract patch configure \
287 build fake package
install clean build-all-pkgs