| 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 |
|
| 126 |
$$(IPKG_$(1)): $$(IDIR_$(1))/CONTROL/control $${_FAKE_COOKIE} |
| 127 |
$${RSTRIP} $${IDIR_$(1)} |
| 128 |
cd $${IDIR_$(1)}; for script in etc/init.d/*; do \ |
| 129 |
[[ -e $$$$script ]] || continue; \ |
| 130 |
chmod 0755 "$$$$script"; \ |
| 131 |
done |
| 132 |
@mkdir -p $${PACKAGE_DIR} '$${STAGING_PARENT}/pkg' \ |
| 133 |
'$${STAGING_DIR}/scripts' |
| 134 |
@if test -s '$${STAGING_PARENT}/pkg/$(1)'; then \ |
| 135 |
cd '$${STAGING_DIR}'; \ |
| 136 |
while read fn; do \ |
| 137 |
rm -f "$$$$fn"; \ |
| 138 |
done <'$${STAGING_PARENT}/pkg/$(1)'; \ |
| 139 |
fi |
| 140 |
@rm -f '$${STAGING_PARENT}/pkg/$(1)' |
| 141 |
@cd $${IDIR_$(1)}; \ |
| 142 |
x=$$$$(find tmp var 2>/dev/null); if [[ -n $$$$x ]]; then \ |
| 143 |
echo 'WARNING: $${IPKG_$(1)} installs files into a' \ |
| 144 |
'ramdisk location:' >&2; \ |
| 145 |
echo "$$$$x" | sed 's/^/- /' >&2; \ |
| 146 |
fi; \ |
| 147 |
find lib \( -name lib\*.so\* -o -name lib\*.a \) \ |
| 148 |
-exec echo 'WARNING: $${IPKG_$(1)} installs files in /lib -' \ |
| 149 |
' fix this!' >&2 \; -quit 2>/dev/null; \ |
| 150 |
find usr ! -type d 2>/dev/null | \ |
| 151 |
grep -v -e '^usr/share' -e '^usr/man' -e '^usr/info' | \ |
| 152 |
tee '$${STAGING_PARENT}/pkg/$(1)' | \ |
| 153 |
cpio -apdlmu '$${STAGING_DIR}' |
| 154 |
@cd '$${STAGING_DIR}'; grep 'usr/lib/.*\.la$$$$' \ |
| 155 |
'$${STAGING_PARENT}/pkg/$(1)' | while read fn; do \ |
| 156 |
chmod u+w $$$$fn; \ |
| 157 |
printf '%s\nwq\n' '/^libdir='\''*/s##&${STAGING_DIR}#' | \ |
| 158 |
ed -s $$$$fn; \ |
| 159 |
done; grep 'usr/s*bin/' '$${STAGING_PARENT}/pkg/$(1)' | \ |
| 160 |
while read fn; do \ |
| 161 |
b="$$$$(dd if="$$$$fn" bs=2 count=1 2>/dev/null)"; \ |
| 162 |
[[ $$$$b = '#!' ]] || continue; \ |
| 163 |
cp "$$$$fn" scripts/; \ |
| 164 |
echo "scripts/$$$$(basename "$$$$fn")" \ |
| 165 |
>>'$${STAGING_PARENT}/pkg/$(1)'; \ |
| 166 |
done |
| 167 |
$${IPKG_BUILD} $${IDIR_$(1)} $${PACKAGE_DIR} |
| 168 |
|
| 169 |
clean-targets: clean-dev-$(1) |
| 170 |
|
| 171 |
clean-dev-$(1): |
| 172 |
@if test -s '$${STAGING_PARENT}/pkg/$(1)'; then \ |
| 173 |
cd '$${STAGING_DIR}'; \ |
| 174 |
while read fn; do \ |
| 175 |
rm -f "$$$$fn"; \ |
| 176 |
done <'$${STAGING_PARENT}/pkg/$(1)'; \ |
| 177 |
fi |
| 178 |
@rm -f '$${STAGING_PARENT}/pkg/$(1)' |
| 179 |
|
| 180 |
$$(INFO_$(1)): $$(IPKG_$(1)) |
| 181 |
$(IPKG) install $$(IPKG_$(1)) |
| 182 |
endef |
| 183 |
|
| 184 |
install-targets: |
| 185 |
install: |
| 186 |
@$(CMD_TRACE) "installing... " |
| 187 |
@$(MAKE) install-targets $(MAKE_TRACE) |
| 188 |
|
| 189 |
clean-targets: |
| 190 |
clean: |
| 191 |
@$(CMD_TRACE) "cleaning... " |
| 192 |
@$(MAKE) clean-targets $(MAKE_TRACE) |
| 193 |
rm -rf ${WRKDIR} ${ALL_IPKGS} ${PACKAGE_DIR}/.stamps/${PKG_NAME}* |
| 194 |
|
| 195 |
distclean: clean |
| 196 |
rm -f ${FULLDISTFILES} |
| 197 |
|
| 198 |
.PHONY: all refetch extract patch configure \ |
| 199 |
build fake package install clean build-all-ipkgs |