root/trunk/freewrt/mk/package.mk

Revision 3818, 6.0 kB (checked in by tg, 1 month ago)

prefix paxmirabilis tools, WFM

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='${TARGET_CC}' CXX='${TARGET_CXX}' \
26                         CFLAGS='$(strip ${TCFLAGS})' \
27                         CXXFLAGS='$(strip ${TCXXFLAGS})' \
28                         CPPFLAGS='$(strip ${TCPPFLAGS})' \
29                         LDFLAGS='$(strip ${TLDFLAGS})' \
30                         PKG_CONFIG_PATH='${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 MAKE_ENV+=              PATH='${TARGET_PATH}' \
45                         ${HOST_CONFIGURE_OPTS} \
46                         WRKDIR='${WRKDIR}' WRKDIST='${WRKDIST}' \
47                         WRKSRC='${WRKSRC}' WRKBUILD='${WRKBUILD}' \
48                         CC='${TARGET_CC}' CXX='${TARGET_CXX}' \
49                         AR='${TARGET_CROSS}ar' RANLIB='${TARGET_CROSS}ranlib' \
50                         NM='${TARGET_CROSS}nm' \
51                         CFLAGS='$(strip ${TCFLAGS})' \
52                         CXXFLAGS='$(strip ${TCXXFLAGS})' \
53                         CPPFLAGS='$(strip ${TCPPFLAGS})' \
54                         LDFLAGS='$(strip ${TLDFLAGS})'
55 MAKE_FLAGS+=            ${XAKE_FLAGS}
56 FAKE_FLAGS+=            ${XAKE_FLAGS}
57
58 ifeq ($(strip ${WRKDIR_BSD}),)
59 WRKDIR_BASE:=           ${BUILD_DIR}
60 else
61 WRKDIR_BASE:=           $(shell pwd)
62 endif
63
64 _EXTRACT_COOKIE=        ${WRKDIST}/.extract_done
65 _PATCH_COOKIE=          ${WRKDIST}/.prepared
66 _CONFIGURE_COOKIE=      ${WRKBUILD}/.configure_done
67 _BUILD_COOKIE=          ${WRKBUILD}/.build_done
68 _FAKE_COOKIE=           ${WRKINST}/.fake_done
69 _IPKGS_COOKIE=          ${PACKAGE_DIR}/.stamps/${PKG_NAME}${PKG_VERSION}-${PKG_RELEASE}
70
71 _IN_PACKAGE:=           1
72 include ${TOPDIR}/mk/buildhlp.mk
73 -include info.mk
74
75 # defined in buildhlp.mk ('extract' can fail, use 'patch' then)
76 extract: ${_EXTRACT_COOKIE}
77 patch: ${_PATCH_COOKIE}
78
79 # defined below (will be moved to pkg-bottom.mk!)
80 configure: ${_CONFIGURE_COOKIE}
81 build: ${_BUILD_COOKIE}
82 fake: ${_FAKE_COOKIE}
83
84 # our recursive build entry point
85 build-all-ipkgs: ${_IPKGS_COOKIE}
86
87 define PKG_template
88 IPKG_$(1)=      $(PACKAGE_DIR)/$(2)_$(3)_$(4).ipk
89 IDIR_$(1)=      $(WRKDIR)/fake-${ARCH}/ipkg-$(2)
90 FWWIF_IDIR?=    $${IDIR_$(1)}
91 ifneq (${FWRT_PACKAGE_$(1)}${DEVELOPER},)
92 ALL_IPKGS+=     $$(IPKG_$(1))
93 ALL_IDIRS+=     $${IDIR_$(1)}
94 endif
95 INFO_$(1)=      $(IPKG_STATE_DIR)/info/$(2).list
96
97 ifeq ($(FWRT_PACKAGE_$(1)),y)
98 install-targets: $$(INFO_$(1))
99 endif
100
101 IDEPEND_$(1):=  $$(strip $(5))
102
103 _ALL_CONTROLS+= $$(IDIR_$(1))/CONTROL/control
104 ICONTROL_$(1)?= ipkg/$(2).control
105 $$(IDIR_$(1))/CONTROL/control: ${_PATCH_COOKIE}
106         ${MBSH} ${SCRIPT_DIR}/make-ipkg-dir.sh $${IDIR_$(1)} $${ICONTROL_$(1)} $(3) $(4)
107         adeps='$$(strip $${IDEPEND_$(1)})'; if [[ -n $$$$adeps ]]; then \
108                 comma=; \
109                 deps=; \
110                 last=; \
111                 for dep in $$$$adeps; do \
112                         if [[ $$$$last = kernel && $$$$dep = \(* ]]; then \
113                                 deps="$$$$deps $$$$dep"; \
114                         else \
115                                 deps="$$$$deps$$$$comma$$$$dep"; \
116                         fi; \
117                         comma=", "; \
118                         last=$$$$dep; \
119                 done; \
120                 echo "Depends: $$$$deps" >>$${IDIR_$(1)}/CONTROL/control; \
121         fi
122         for file in conffiles preinst postinst prerm postrm; do \
123                 [ ! -f ./ipkg/$(2).$$$$file ] || cp ./ipkg/$(2).$$$$file $$(IDIR_$(1))/CONTROL/$$$$file; \
124         done
125 ifneq ($(strip $${ICONTROL_ADDON_$(1)}),)
126         echo $${ICONTROL_ADDON_$(1)} >> $${IDIR_$(1)}/CONTROL/control
127 endif
128
129 $$(IPKG_$(1)): $$(IDIR_$(1))/CONTROL/control $${_FAKE_COOKIE}
130         $${RSTRIP} $${IDIR_$(1)}
131         cd $${IDIR_$(1)}; for script in etc/init.d/*; do \
132                 [[ -e $$$$script ]] || continue; \
133                 chmod 0755 "$$$$script"; \
134         done
135         @mkdir -p $${PACKAGE_DIR} '$${STAGING_PARENT}/pkg' \
136             '$${STAGING_DIR}/scripts'
137         @if test -s '$${STAGING_PARENT}/pkg/$(1)'; then \
138                 cd '$${STAGING_DIR}'; \
139                 while read fn; do \
140                         rm -f "$$$$fn"; \
141                 done <'$${STAGING_PARENT}/pkg/$(1)'; \
142         fi
143         @rm -f '$${STAGING_PARENT}/pkg/$(1)'
144         @cd $${IDIR_$(1)}; \
145             x=$$$$(find tmp var 2>/dev/null); if [[ -n $$$$x ]]; then \
146                 echo 'WARNING: $${IPKG_$(1)} installs files into a' \
147                     'ramdisk location:' >&2; \
148                 echo "$$$$x" | sed 's/^/- /' >&2; \
149             fi; \
150             find lib \( -name lib\*.so\* -o -name lib\*.a \) \
151                 -exec echo 'WARNING: $${IPKG_$(1)} installs files in /lib -' \
152                 ' fix this!' >&2 \; -quit 2>/dev/null; \
153             find usr ! -type d 2>/dev/null | \
154             grep -v -e '^usr/share' -e '^usr/man' -e '^usr/info' | \
155             tee '$${STAGING_PARENT}/pkg/$(1)' | \
156             mircpio -apdlmu '$${STAGING_DIR}'
157         @cd '$${STAGING_DIR}'; grep 'usr/lib/.*\.la$$$$' \
158             '$${STAGING_PARENT}/pkg/$(1)' | while read fn; do \
159                 chmod u+w $$$$fn; \
160                 printf '%s\nwq\n' '/^libdir='\''*/s##&${STAGING_DIR}#' | \
161                     ed -s $$$$fn; \
162         done; grep 'usr/s*bin/' '$${STAGING_PARENT}/pkg/$(1)' | \
163             while read fn; do \
164                 b="$$$$(dd if="$$$$fn" bs=2 count=1 2>/dev/null)"; \
165                 [[ $$$$b = '#!' ]] || continue; \
166                 cp "$$$$fn" scripts/; \
167                 echo "scripts/$$$$(basename "$$$$fn")" \
168                     >>'$${STAGING_PARENT}/pkg/$(1)'; \
169         done
170         $${IPKG_BUILD} $${IDIR_$(1)} $${PACKAGE_DIR}
171
172 clean-targets: clean-dev-$(1)
173
174 clean-dev-$(1):
175         @if test -s '$${STAGING_PARENT}/pkg/$(1)'; then \
176                 cd '$${STAGING_DIR}'; \
177                 while read fn; do \
178                         rm -f "$$$$fn"; \
179                 done <'$${STAGING_PARENT}/pkg/$(1)'; \
180         fi
181         @rm -f '$${STAGING_PARENT}/pkg/$(1)'
182
183 $$(INFO_$(1)): $$(IPKG_$(1))
184         $(IPKG) install $$(IPKG_$(1))
185 endef
186
187 install-targets:
188 install:
189         @$(CMD_TRACE) "installing... "
190         @$(MAKE) install-targets $(MAKE_TRACE)
191
192 clean-targets:
193 clean:
194         @$(CMD_TRACE) "cleaning... "
195         @$(MAKE) clean-targets $(MAKE_TRACE)
196         rm -rf ${WRKDIR} ${ALL_IPKGS} ${PACKAGE_DIR}/.stamps/${PKG_NAME}*
197
198 distclean: clean
199         rm -f ${FULLDISTFILES}
200
201 .PHONY: all refetch extract patch configure \
202         build fake package install clean build-all-ipkgs
Note: See TracBrowser for help on using the browser.