summaryrefslogtreecommitdiff
path: root/mk/package.mk
diff options
context:
space:
mode:
Diffstat (limited to 'mk/package.mk')
-rw-r--r--mk/package.mk209
1 files changed, 139 insertions, 70 deletions
diff --git a/mk/package.mk b/mk/package.mk
index 07f53aa34..2a3e1f414 100644
--- a/mk/package.mk
+++ b/mk/package.mk
@@ -10,20 +10,21 @@ CONFIGURE_ARGS+= --enable-debug
endif
endif
-CONFIGURE_ENV+= GCC_HONOUR_COPTS=s \
- PATH='${TARGET_PATH}' \
- CONFIG_SHELL='$(strip ${SHELL})' \
- CFLAGS='$(strip ${TARGET_CFLAGS})' \
- CXXFLAGS='$(strip ${TARGET_CXXFLAGS})' \
- CPPFLAGS='$(strip ${TARGET_CPPFLAGS})' \
- LDFLAGS='$(strip ${TARGET_LDFLAGS})' \
- ${HOST_CONFIGURE_OPTS} \
- PKG_CONFIG_LIBDIR='${STAGING_TARGET_DIR}/usr/lib/pkgconfig' \
- ac_cv_func_realloc_0_nonnull=yes \
- ac_cv_func_malloc_0_nonnull=yes
-ifeq ($(ADK_NATIVE),)
-CONFIGURE_ENV+= ${TARGET_CONFIGURE_OPTS} cross_compiling=yes
-endif
+AUTOTOOL_ENV+= PATH='${HOST_PATH}' \
+ PKG_CONFIG_LIBDIR='${STAGING_TARGET_DIR}/usr/lib/pkgconfig:${STAGING_TARGET_DIR}/usr/share/pkgconfig' \
+ PKG_CONFIG_SYSROOT_DIR='${STAGING_TARGET_DIR}' \
+ ${COMMON_ENV}
+
+MESON_ENV+= PATH='${HOST_PATH}' \
+ PKG_CONFIG_LIBDIR='${STAGING_TARGET_DIR}/usr/lib/pkgconfig:${STAGING_TARGET_DIR}/usr/share/pkgconfig' \
+ PKG_CONFIG_SYSROOT_DIR='${STAGING_TARGET_DIR}'
+
+CONFIGURE_ENV+= PATH='${TARGET_PATH}' \
+ ${COMMON_ENV} \
+ ${TARGET_ENV} \
+ PKG_CONFIG_LIBDIR='${STAGING_TARGET_DIR}/usr/lib/pkgconfig:${STAGING_TARGET_DIR}/usr/share/pkgconfig' \
+ PKG_CONFIG_SYSROOT_DIR='${STAGING_TARGET_DIR}' \
+ cross_compiling=yes
CONFIGURE_PROG?= configure
MAKE_FILE?= Makefile
@@ -38,23 +39,15 @@ FAKE_FLAGS?=
ALL_TARGET?= all
INSTALL_TARGET?= install
-MAKE_ENV+= $(GCC_CHECK) \
- PATH='${TARGET_PATH}' \
+MAKE_ENV+= PATH='${TARGET_PATH}' \
+ ${COMMON_ENV} \
+ ${TARGET_ENV} \
+ PKG_CONFIG_LIBDIR='${STAGING_TARGET_DIR}/usr/lib/pkgconfig:${STAGING_TARGET_DIR}/usr/share/pkgconfig' \
+ PKG_CONFIG_SYSROOT_DIR='${STAGING_TARGET_DIR}' \
WRKDIR='${WRKDIR}' WRKDIST='${WRKDIST}' \
- WRKSRC='${WRKSRC}' WRKBUILD='${WRKBUILD}' \
- CFLAGS='$(strip ${TARGET_CFLAGS})' \
- CXXFLAGS='$(strip ${TARGET_CXXFLAGS})' \
- CPPFLAGS='$(strip ${TARGET_CPPFLAGS})' \
- LDFLAGS='$(strip ${TARGET_LDFLAGS})' \
- ${HOST_CONFIGURE_OPTS} \
- PKG_CONFIG_LIBDIR='${STAGING_TARGET_DIR}/usr/lib/pkgconfig'
-ifeq ($(ADK_NATIVE),)
-MAKE_ENV+= ${TARGET_CONFIGURE_OPTS}
-else
-MAKE_ENV+= M4=m4
-endif
+ WRKSRC='${WRKSRC}' WRKBUILD='${WRKBUILD}'
-MAKE_FLAGS+= ${XAKE_FLAGS} V=1
+MAKE_FLAGS+= ${XAKE_FLAGS}
FAKE_FLAGS+= ${XAKE_FLAGS}
ifeq ($(strip ${WRKDIR_BSD}),)
@@ -68,10 +61,10 @@ _PATCH_COOKIE= ${WRKDIST}/.prepared
_CONFIGURE_COOKIE= ${WRKBUILD}/.configure_done
_BUILD_COOKIE= ${WRKBUILD}/.build_done
_FAKE_COOKIE= ${WRKINST}/.fake_done
-_IPKGS_COOKIE= ${PACKAGE_DIR}/.stamps/${PKG_NAME}${PKG_VERSION}-${PKG_RELEASE}
+_IPKGS_COOKIE= ${STAGING_PKG_DIR}/stamps/${PKG_NAME}${PKG_VERSION}-${PKG_RELEASE}
_IN_PACKAGE:= 1
-include ${TOPDIR}/mk/buildhlp.mk
+include ${ADK_TOPDIR}/mk/buildhlp.mk
# defined in buildhlp.mk ('extract' can fail, use 'patch' then)
extract: ${_EXTRACT_COOKIE}
@@ -81,11 +74,6 @@ patch: ${_PATCH_COOKIE}
configure: ${_CONFIGURE_COOKIE}
build: ${_BUILD_COOKIE}
fake: ${_FAKE_COOKIE}
-rebuild:
- @if [ -f ${TOPDIR}/.rebuild.${PKG_NAME} ];then \
- $(MAKE) clean; \
- rm -f ${TOPDIR}/.rebuild.${PKG_NAME}; \
- fi
# our recursive build entry point
build-all-pkgs: ${_IPKGS_COOKIE}
@@ -98,11 +86,15 @@ build-all-pkgs: ${_IPKGS_COOKIE}
# 4.) dependencies to other packages, $(PKG_DEPENDS)
# 5.) description for the package, $(PKG_DESCR)
# 6.) section of the package, $(PKG_SECTION)
-# 7.) special package options
-# noscripts -> do not install scripts to $(STAGING_TARGET_DIR)/target/scripts
+# 7.) special package options $(PKG_OPTS)
+# noscripts -> do not install scripts to $(STAGING_TARGET_DIR)/scripts
# (needed for example for autoconf/automake)
-# noremove -> do not remove files from $(STAGING_TARGET_DIR)/target while
-# cleaning (needed for toolchain packages like glibc/eglibc)
+# noremove -> do not remove files from $(STAGING_TARGET_DIR) while
+# cleaning (needed for toolchain packages like glibc)
+# nostaging -> do not install files to $(STAGING_TARGET_DIR)
+# nostrip -> do not strip files
+# dev -> create a development subpackage with headers and pkg-config files
+# devonly -> create a development package only
# should be package format independent and modular in the future
define PKG_template
ALL_PKGOPTS+= $(1)
@@ -110,29 +102,67 @@ PKGNAME_$(1)= $(2)
PKGDEPS_$(1)= $(4)
PKGDESC_$(1)= $(5)
PKGSECT_$(1)= $(6)
-IPKG_$(1)= $(PACKAGE_DIR)/$(2)_$(3)_${CPU_ARCH}.${PKG_SUFFIX}
-IDIR_$(1)= $(WRKDIR)/fake-${CPU_ARCH}/pkg-$(2)
+IPKG_$(1)= $(PACKAGE_DIR)/$(2)_$(3)_${ADK_TARGET_CPU_ARCH}.${PKG_SUFFIX}
+IPKG_$(1)_DEV= $(PACKAGE_DIR)/$(2)-dev_$(3)_${ADK_TARGET_CPU_ARCH}.${PKG_SUFFIX}
+IPKG_$(1)_DBG= $(PACKAGE_DIR)/$(2)-dbg_$(3)_${ADK_TARGET_CPU_ARCH}.${PKG_SUFFIX}
+IDIR_$(1)= $(WRKDIR)/fake-${ADK_TARGET_CPU_ARCH}/pkg-$(2)
+IDIR_$(1)_DEV= $(WRKDIR)/fake-${ADK_TARGET_CPU_ARCH}/pkg-$(2)-dev
+IDIR_$(1)_DBG= $(WRKDIR)/fake-${ADK_TARGET_CPU_ARCH}/pkg-$(2)-dbg
ifneq (${ADK_PACKAGE_$(1)}${DEVELOPER},)
+ifneq (,$(filter dev,$(7)))
+ifneq ($(ADK_TARGET_USE_STATIC_LIBS_ONLY),y)
+ifneq ($(ADK_TARGET_BINFMT_FLAT),y)
+ALL_IPKGS+= $$(IPKG_$(1))
+ALL_IDIRS+= $${IDIR_$(1)}
+ALL_POSTINST+= $(2)-install
+$(2)-install:
+endif
+endif
+else
ALL_IPKGS+= $$(IPKG_$(1))
ALL_IDIRS+= $${IDIR_$(1)}
ALL_POSTINST+= $(2)-install
$(2)-install:
endif
+endif
INFO_$(1)= $(PKG_STATE_DIR)/info/$(2).list
+INFO_$(1)_DEV= $(PKG_STATE_DIR)/info/$(2)-dev.list
+INFO_$(1)_DBG= $(PKG_STATE_DIR)/info/$(2)-dbg.list
ifeq ($(ADK_PACKAGE_$(1)),y)
+
+ifeq (,$(filter devonly,$(7)))
+ifeq ($(ADK_PACKAGE_$(1)_DBG),y)
+install-targets: $$(INFO_$(1)) $$(INFO_$(1)_DBG)
+ifeq ($(ADK_PACKAGE_$(1)_DEV),y)
+install-targets: $$(INFO_$(1)) $$(INFO_$(1)_DBG) $$(INFO_$(1)_DEV)
+else
+install-targets: $$(INFO_$(1)) $$(INFO_$(1)_DBG)
+endif
+else
+ifeq ($(ADK_PACKAGE_$(1)_DEV),y)
+install-targets: $$(INFO_$(1)) $$(INFO_$(1)_DEV)
+else
install-targets: $$(INFO_$(1))
endif
+endif
+else
+install-targets: $$(INFO_$(1))
+endif
+
+endif
IDEPEND_$(1):= $$(strip $(4))
_ALL_CONTROLS+= $$(IDIR_$(1))/CONTROL/control
ICONTROL_$(1)?= $(WRKDIR)/.$(2).control
+ICONTROL_$(1)_DEV?= $(WRKDIR)/.$(2)-dev.control
+ICONTROL_$(1)_DBG?= $(WRKDIR)/.$(2)-dbg.control
$$(IDIR_$(1))/CONTROL/control: ${_PATCH_COOKIE}
@echo "Package: $$(shell echo $(2) | tr '_' '-')" > $(WRKDIR)/.$(2).control
@echo "Section: $(6)" >> $(WRKDIR)/.$(2).control
@echo "Description: $(5)" >> $(WRKDIR)/.$(2).control
- ${BASH} ${SCRIPT_DIR}/make-ipkg-dir.sh $${IDIR_$(1)} $${ICONTROL_$(1)} $(3) ${CPU_ARCH}
+ @${BASH} ${SCRIPT_DIR}/make-ipkg-dir.sh $${IDIR_$(1)} $${ICONTROL_$(1)} $(3) ${ADK_TARGET_CPU_ARCH}
@adeps='$$(strip $${IDEPEND_$(1)})'; if [[ -n $$$$adeps ]]; then \
comma=; \
deps=; \
@@ -151,14 +181,33 @@ $$(IDIR_$(1))/CONTROL/control: ${_PATCH_COOKIE}
@for file in conffiles preinst postinst prerm postrm; do \
[ ! -f ./files/$(2).$$$$file ] || cp ./files/$(2).$$$$file $$(IDIR_$(1))/CONTROL/$$$$file; \
done
+ifeq ($(ADK_BUILD_WITH_DEBUG),y)
+ @echo "Package: $$(shell echo $(2) | tr '_' '-')-dbg" > $(WRKDIR)/.$(2)-dbg.control
+ @echo "Section: debug" >> $(WRKDIR)/.$(2)-dbg.control
+ @echo "Description: debugging symbols for $(2)" >> $(WRKDIR)/.$(2)-dbg.control
+ @${BASH} ${SCRIPT_DIR}/make-ipkg-dir.sh $${IDIR_$(1)_DBG} $${ICONTROL_$(1)_DBG} $(3) ${ADK_TARGET_CPU_ARCH}
+ @echo "Depends: $$(shell echo $(2) | tr '_' '-')" >> $${IDIR_$(1)_DBG}/CONTROL/control
+endif
+ifneq (,$(filter dev,$(7)))
+ @echo "Package: $$(shell echo $(2) | tr '_' '-')-dev" > $(WRKDIR)/.$(2)-dev.control
+ @echo "Section: devel" >> $(WRKDIR)/.$(2)-dev.control
+ @echo "Description: development files for $(2)" >> $(WRKDIR)/.$(2)-dev.control
+ @${BASH} ${SCRIPT_DIR}/make-ipkg-dir.sh $${IDIR_$(1)_DEV} $${ICONTROL_$(1)_DEV} $(3) ${ADK_TARGET_CPU_ARCH}
+ @echo "Depends: $$(shell echo $(2) | tr '_' '-')" >> $${IDIR_$(1)_DEV}/CONTROL/control
+endif
$$(IPKG_$(1)): $$(IDIR_$(1))/CONTROL/control $${_FAKE_COOKIE}
+ifeq (,$(filter nostrip,$(7)))
ifeq ($(ADK_DEBUG),)
- $${RSTRIP} $${IDIR_$(1)} $(MAKE_TRACE)
+ @$${RSTRIP} $${IDIR_$(1)} $(MAKE_TRACE)
endif
ifeq ($(ADK_DEBUG_STRIP),y)
- $${RSTRIP} $${IDIR_$(1)} $(MAKE_TRACE)
+ @$${RSTRIP} $${IDIR_$(1)} $(MAKE_TRACE)
+endif
endif
+ifeq (${ADK_LEAVE_ETC_ALONE}$(filter force_etc,$(7)),y)
+ -rm -rf $${IDIR_$(1)}/etc
+else
ifeq (${ADK_INSTALL_PACKAGE_INIT_SCRIPTS},y)
@for file in $$$$(ls ./files/*.init 2>/dev/null); do \
fname=$$$$(echo $$$$file| sed -e "s#.*/##" -e "s#.init##"); \
@@ -172,36 +221,37 @@ ifeq (${ADK_INSTALL_PACKAGE_INIT_SCRIPTS},y)
chmod 0755 "$$$$script"; \
done
endif
- @mkdir -p $${PACKAGE_DIR} '$${STAGING_PKG_DIR}' \
- '$${STAGING_DIR}/scripts'
+ifneq (${ADK_INSTALL_PACKAGE_NETWORK_SCRIPTS},y)
+ -@rm -rf $${IDIR_$(1)}/etc/network
+endif
+endif
+ @mkdir -p $${PACKAGE_DIR} '$${STAGING_PKG_DIR}/stamps' \
+ '$${STAGING_TARGET_DIR}/scripts'
+ @for file in $$$$(ls ./files/*.perm 2>/dev/null); do \
+ cat $$$$file >> $${STAGING_TARGET_DIR}/scripts/permissions.sh; \
+ done
ifeq (,$(filter noremove,$(7)))
@if test -s '$${STAGING_PKG_DIR}/$(1)'; then \
- cd '$${STAGING_DIR}'; \
+ cd '$${STAGING_TARGET_DIR}'; \
while read fn; do \
rm -f "$$$$fn"; \
done <'$${STAGING_PKG_DIR}/$(1)'; \
fi
endif
@rm -f '$${STAGING_PKG_DIR}/$(1)'
- -@cd $${IDIR_$(1)}; \
- x=$$$$(find tmp var -mindepth 1 2>/dev/null); if [[ -n $$$$x ]]; then \
+ifeq (,$(filter nostaging,$(7)))
+ @-cd $${IDIR_$(1)}; \
+ x=$$$$(find tmp run -mindepth 1 2>/dev/null); if [[ -n $$$$x ]]; then \
echo 'WARNING: $${IPKG_$(1)} installs files into a' \
'ramdisk location:' >&2; \
echo "$$$$x" | sed 's/^/- /' >&2; \
fi; \
- if [ "${PKG_NAME}" != "uClibc" -a "${PKG_NAME}" != "glibc" -a "${PKG_NAME}" != "eglibc" -a "${PKG_NAME}" != "libpthread" -a "${PKG_NAME}" != "libstdcxx" -a "${PKG_NAME}" != "libgcc" -a "${PKG_NAME}" != "libthread-db" ];then \
- find lib \( -name lib\*.so\* -o -name lib\*.a \) \
- -exec echo 'WARNING: $${IPKG_$(1)} installs files in /lib -' \
- ' fix this!' >&2 \; -quit 2>/dev/null; fi; \
find usr ! -type d 2>/dev/null | \
- grep -E -v -e '^usr/lib/pkgconfig' -e '^usr/share' -e '^usr/doc' -e '^usr/src' -e '^usr/man' -e '^usr/info' -e '^usr/lib/libc.so' -e '^usr/bin/[a-z0-9-]+-config' | \
+ grep -E -v -e '^usr/lib/pkgconfig' -e '^usr/share' -e '^usr/doc' -e '^usr/src' -e '^usr/man' \
+ -e '^usr/info' -e '^usr/lib/libc.so' -e '^usr/bin/[a-z0-9-]+-config' -e '^usr/lib/.*\.la$$$$' | \
tee '$${STAGING_PKG_DIR}/$(1)' | \
- $(TOOLS_DIR)/cpio -padlmu '$${STAGING_DIR}'
- @cd '$${STAGING_DIR}'; grep 'usr/lib/.*\.la$$$$' \
- '$${STAGING_PKG_DIR}/$(1)' | while read fn; do \
- chmod u+w $$$$fn; \
- $(SED) "s,\(^libdir='\| \|-L\|^dependency_libs='\)/usr/lib,\1$(STAGING_TARGET_DIR)/usr/lib,g" $$$$fn; \
- done
+ $(CPIO) -padlmu --quiet '$${STAGING_TARGET_DIR}'
+endif
ifeq (,$(filter noscripts,$(7)))
@cd '$${STAGING_TARGET_DIR}'; grep 'usr/s*bin/' \
'$${STAGING_PKG_DIR}/$(1)' | \
@@ -213,10 +263,15 @@ ifeq (,$(filter noscripts,$(7)))
>>'$${STAGING_PKG_DIR}/$(1)'; \
done
endif
-ifeq (,$(filter libmix,$(7)))
-ifeq (,$(filter libonly,$(7)))
- $${PKG_BUILD} $${IDIR_$(1)} $${PACKAGE_DIR} $(MAKE_TRACE)
+
+ifeq (,$(filter devonly,$(7)))
+ PATH='$(HOST_PATH)' $${PKG_BUILD} $${IDIR_$(1)} $${PACKAGE_DIR} $(MAKE_TRACE)
+ifneq ($(ADK_BUILD_WITH_DEBUG),)
+ PATH='$(HOST_PATH)' $${PKG_BUILD} $${IDIR_$(1)_DBG} $${PACKAGE_DIR} $(MAKE_TRACE)
+endif
endif
+ifneq (,$(filter dev,$(7)))
+ PATH='$(HOST_PATH)' $${PKG_BUILD} $${IDIR_$(1)_DEV} $${PACKAGE_DIR} $(MAKE_TRACE)
endif
clean-targets: clean-dev-$(1)
@@ -224,31 +279,45 @@ clean-targets: clean-dev-$(1)
clean-dev-$(1):
ifeq (,$(filter noremove,$(7)))
@if test -s '$${STAGING_PKG_DIR}/$(1)'; then \
- cd '$${STAGING_DIR}'; \
+ cd '$${STAGING_TARGET_DIR}'; \
while read fn; do \
rm -f "$$$$fn"; \
done <'$${STAGING_PKG_DIR}/$(1)'; \
fi
endif
- rm -f '$${STAGING_PKG_DIR}/$(1)'
+ @rm -f '$${STAGING_PKG_DIR}/$(1)'
$$(INFO_$(1)): $$(IPKG_$(1))
$(PKG_INSTALL) $$(IPKG_$(1))
+
+$$(INFO_$(1)_DBG): $$(IPKG_$(1)_DBG)
+ $(PKG_INSTALL) $$(IPKG_$(1)_DBG)
+
+ifneq ($(1),UCLIBC_NG)
+ifneq ($(1),GLIBC)
+ifneq ($(1),MUSL)
+$$(INFO_$(1)_DEV): $$(IPKG_$(1)_DEV)
+ $(PKG_INSTALL) $$(IPKG_$(1)_DEV)
+endif
+endif
+endif
+
endef
install-targets:
install:
- @$(CMD_TRACE) "installing... "
+ @$(CMD_TRACE) "installing.. "
@$(MAKE) install-targets $(MAKE_TRACE)
clean-targets:
clean:
- @$(CMD_TRACE) "cleaning... "
+ @printf " ---> cleaning package build directories and files.. "
@$(MAKE) clean-targets $(MAKE_TRACE)
- rm -rf ${WRKDIR} ${ALL_IPKGS} ${PACKAGE_DIR}/.stamps/${PKG_NAME}*
+ rm -rf ${WRKDIR} ${ALL_IPKGS} ${_IPKGS_COOKIE}
+ @printf " done\n"
distclean: clean
rm -f ${FULLDISTFILES}
.PHONY: all refetch extract patch configure \
- build rebuild fake package install clean build-all-pkgs
+ build fake package install clean build-all-pkgs