root/trunk/freewrt/mk/package.mk

Revision 3987, 6.2 kB (checked in by tg, 2 months ago)

honour order of mircpio arguments

Line 
1 # $FreeWRT$
2 #-
3 # This file is part of the FreeWRT project. FreeWRT is copyrighted
4 # material, please see the LICENCE file in the top-level directory
5 # or at http://www.freewrt.org/licence for details.
6
7 # BSD-style
8 #all: build
9 # same as recursive-descend
10 all: build-all-ipkgs
11
12 TCFLAGS:=               ${TARGET_CFLAGS}
13 TCXXFLAGS:=             ${TARGET_CFLAGS}
14 TCPPFLAGS:=             ${TARGET_CPPFLAGS} -DNDEBUG
15 TLDFLAGS:=              ${TARGET_LDFLAGS} -Wl,-rpath -Wl,/usr/lib \
16                         -Wl,-rpath-link -Wl,${STAGING_DIR}/usr/lib \
17                         -L${STAGING_DIR}/lib -L${STAGING_DIR}/usr/lib
18 ifeq ($(FWRT_IPV6),y)
19 CONFIGURE_ARGS+=        --enable-ipv6
20 else
21 CONFIGURE_ARGS+=        --disable-ipv6
22 endif
23 CONFIGURE_ENV+=         ${TARGET_CONFIGURE_OPTS} \
24                         ${HOST_CONFIGURE_OPTS} \
25                         CC=$(call shellescape,${TARGET_CC}) CXX=$(call shellescape,${TARGET_CXX}) \
26                         CFLAGS=$(call shellescape,$(strip ${TCFLAGS})) \
27                         CXXFLAGS=$(call shellescape,$(strip ${TCXXFLAGS})) \
28                         CPPFLAGS=$(call shellescape,$(strip ${TCPPFLAGS})) \
29                         LDFLAGS=$(call shellescape,$(strip ${TLDFLAGS})) \
30                         PKG_CONFIG_PATH=$(call shellescape,${STAGING_DIR}/usr/lib/pkgconfig) \
31                         ac_cv_func_realloc_0_nonnull=yes \
32                         ac_cv_func_malloc_0_nonnull=yes
33 MAKE_FILE?=             Makefile
34 # this is environment for 'make all' and 'make install'
35 MAKE_ENV?=
36 # this is arguments for 'make all' and 'make install'
37 XAKE_FLAGS?=
38 # this is arguments for 'make all' ONLY
39 MAKE_FLAGS?=
40 # this is arguments for 'make install' ONLY
41 FAKE_FLAGS?=
42 ALL_TARGET?=            all
43 INSTALL_TARGET?=        install
44 # GNU make sucks
45 _LOWERCASE_AR:=ar
46 _LOWERCASE_NM:=nm
47 _LOWERCASE_RANLIB:=ranlib
48 MAKE_ENV+=              PATH=$(call shellescape,${TARGET_PATH}) \
49                         ${HOST_CONFIGURE_OPTS} \
50                         $(foreach i,WRKDIR WRKDIST WRKSRC WRKBUILD,$(call shellexport,$i)) \
51                         $(foreach i,CC CXX,$i=$(call shellescape,${TARGET_$i})) \
52                         $(foreach i,CFLAGS CXXFLAGS CPPFLAGS LDFLAGS,$i=$(call shellescape,${T$i})) \
53                         $(foreach i,AR NM RANLIB,$i=$(call shellescape,${TARGET_CROSS}${_LOWERCASE_$i}))
54 MAKE_FLAGS+=            ${XAKE_FLAGS}
55 FAKE_FLAGS+=            ${XAKE_FLAGS}
56
57 ifeq ($(strip ${WRKDIR_BSD}),)
58 WRKDIR_BASE:=           ${BUILD_DIR}
59 else
60 WRKDIR_BASE:=           $(shell pwd)
61 endif
62
63 _EXTRACT_COOKIE=        ${WRKDIST}/.extract_done
64 _PATCH_COOKIE=          ${WRKDIST}/.prepared
65 _CONFIGURE_COOKIE=      ${WRKBUILD}/.configure_done
66 _BUILD_COOKIE=          ${WRKBUILD}/.build_done
67 _FAKE_COOKIE=           ${WRKINST}/.fake_done
68 _IPKGS_COOKIE=          ${PACKAGE_DIR}/.stamps/${PKG_NAME}${PKG_VERSION}-${PKG_RELEASE}
69
70 _IN_PACKAGE:=           1
71 include ${TOPDIR}/mk/buildhlp.mk
72 -include info.mk
73
74 # defined in buildhlp.mk ('extract' can fail, use 'patch' then)
75 extract: ${_EXTRACT_COOKIE}
76 patch: ${_PATCH_COOKIE}
77
78 # defined below (will be moved to pkg-bottom.mk!)
79 configure: ${_CONFIGURE_COOKIE}
80 build: ${_BUILD_COOKIE}
81 fake: ${_FAKE_COOKIE}
82
83 # our recursive build entry point
84 build-all-ipkgs: ${_IPKGS_COOKIE}
85
86 define PKG_template
87 IPKG_$(1)=      $(PACKAGE_DIR)/$(2)_$(3)_$(4).ipk
88 IDIR_$(1)=      $(WRKDIR)/fake-${ARCH}/ipkg-$(2)
89 FWWIF_IDIR?=    $${IDIR_$(1)}
90 ifneq (${FWRT_PACKAGE_$(1)}${DEVELOPER},)
91 ALL_IPKGS+=     $$(IPKG_$(1))
92 ALL_IDIRS+=     $${IDIR_$(1)}
93 endif
94 INFO_$(1)=      $(IPKG_STATE_DIR)/info/$(2).list
95
96 ifeq ($(FWRT_PACKAGE_$(1)),y)
97 install-targets: $$(INFO_$(1))
98 endif
99
100 IDEPEND_$(1):=  $$(strip $(5))
101
102 _ALL_CONTROLS+= $$(IDIR_$(1))/CONTROL/control
103 ICONTROL_$(1)?= ipkg/$(2).control
104 $$(IDIR_$(1))/CONTROL/control: ${_PATCH_COOKIE}
105         ${MBSH} ${SCRIPT_DIR}/make-ipkg-dir.sh $${IDIR_$(1)} $${ICONTROL_$(1)} $(3) $(4)
106         adeps=$$(call shellescape,$$(strip $${IDEPEND_$(1)})); if [[ -n $$$$adeps ]]; then \
107                 comma=; \
108                 deps=; \
109                 last=; \
110                 for dep in $$$$adeps; do \
111                         if [[ $$$$last = kernel && $$$$dep = \(* ]]; then \
112                                 deps="$$$$deps $$$$dep"; \
113                         else \
114                                 deps="$$$$deps$$$$comma$$$$dep"; \
115                         fi; \
116                         comma=", "; \
117                         last=$$$$dep; \
118                 done; \
119                 echo "Depends: $$$$deps" >>$${IDIR_$(1)}/CONTROL/control; \
120         fi
121         for file in conffiles preinst postinst prerm postrm; do \
122                 [ ! -f ./ipkg/$(2).$$$$file ] || cp ./ipkg/$(2).$$$$file $$(IDIR_$(1))/CONTROL/$$$$file; \
123         done
124 ifneq ($(strip $${ICONTROL_ADDON_$(1)}),)
125         echo $${ICONTROL_ADDON_$(1)} >> $${IDIR_$(1)}/CONTROL/control
126 endif
127
128 $$(IPKG_$(1)): $$(IDIR_$(1))/CONTROL/control $${_FAKE_COOKIE}
129         $${RSTRIP} $${IDIR_$(1)}
130         cd $${IDIR_$(1)}; for script in etc/init.d/*; do \
131                 [[ -e $$$$script ]] || continue; \
132                 chmod 0755 "$$$$script"; \
133         done
134         @mkdir -p $${PACKAGE_DIR} '$${STAGING_PARENT}/pkg' \
135             '$${STAGING_DIR}/scripts'
136         @if test -s '$${STAGING_PARENT}/pkg/$(1)'; then \
137                 cd '$${STAGING_DIR}'; \
138                 while read fn; do \
139                         rm -f "$$$$fn"; \
140                 done <'$${STAGING_PARENT}/pkg/$(1)'; \
141         fi
142         @rm -f '$${STAGING_PARENT}/pkg/$(1)'
143         @cd $${IDIR_$(1)}; \
144             x=$$$$(find tmp var 2>/dev/null); if [[ -n $$$$x ]]; then \
145                 echo 'WARNING: $${IPKG_$(1)} installs files into a' \
146                     'ramdisk location:' >&2; \
147                 echo "$$$$x" | sed 's/^/- /' >&2; \
148             fi; \
149             find lib \( -name lib\*.so\* -o -name lib\*.a \) \
150                 -exec echo 'WARNING: $${IPKG_$(1)} installs files in /lib -' \
151                 ' fix this!' >&2 \; -quit 2>/dev/null; \
152             find usr ! -type d 2>/dev/null | \
153             grep -v -e '^usr/share' -e '^usr/man' -e '^usr/info' | \
154             tee '$${STAGING_PARENT}/pkg/$(1)' | \
155             mircpio -padlmu '$${STAGING_DIR}'
156         @cd '$${STAGING_DIR}'; grep 'usr/lib/.*\.la$$$$' \
157             '$${STAGING_PARENT}/pkg/$(1)' | while read fn; do \
158                 chmod u+w $$$$fn; \
159                 printf '%s\nwq\n' '/^libdir='\''*/s##&'$(call shellescape,${STAGING_DIR})'#' | \
160                     ed -s $$$$fn; \
161         done; grep 'usr/s*bin/' '$${STAGING_PARENT}/pkg/$(1)' | \
162             while read fn; do \
163                 b="$$$$(dd if="$$$$fn" bs=2 count=1 2>/dev/null)"; \
164                 [[ $$$$b = '#!' ]] || continue; \
165                 cp "$$$$fn" scripts/; \
166                 echo "scripts/$$$$(basename "$$$$fn")" \
167                     >>'$${STAGING_PARENT}/pkg/$(1)'; \
168         done
169         $${IPKG_BUILD} $${IDIR_$(1)} $${PACKAGE_DIR}
170
171 clean-targets: clean-dev-$(1)
172
173 clean-dev-$(1):
174         @if test -s '$${STAGING_PARENT}/pkg/$(1)'; then \
175                 cd '$${STAGING_DIR}'; \
176                 while read fn; do \
177                         rm -f "$$$$fn"; \
178                 done <'$${STAGING_PARENT}/pkg/$(1)'; \
179         fi
180         @rm -f '$${STAGING_PARENT}/pkg/$(1)'
181
182 $$(INFO_$(1)): $$(IPKG_$(1))
183         $(IPKG) install $$(IPKG_$(1))
184 endef
185
186 install-targets:
187 install:
188         @$(CMD_TRACE) "installing... "
189         @$(MAKE) install-targets $(MAKE_TRACE)
190
191 clean-targets:
192 clean:
193         @$(CMD_TRACE) "cleaning... "
194         @$(MAKE) clean-targets $(MAKE_TRACE)
195         rm -rf ${WRKDIR} ${ALL_IPKGS} ${PACKAGE_DIR}/.stamps/${PKG_NAME}*
196
197 distclean: clean
198         rm -f ${FULLDISTFILES}
199
200 .PHONY: all refetch extract patch configure \
201         build fake package install clean build-all-ipkgs
Note: See TracBrowser for help on using the browser.