mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-12-29 13:28:58 +02:00
5b6977f54e
allows selection between multiple packages providing the same feature, which affects dependencies of other packages. will be used e.g. for choosing between DirectFB and X.org for libraries like GTK2 git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18056 3c298f89-4303-0410-b956-a3cf2f4a3e73
233 lines
7.1 KiB
Makefile
233 lines
7.1 KiB
Makefile
#
|
|
# Copyright (C) 2006-2008 OpenWrt.org
|
|
#
|
|
# This is free software, licensed under the GNU General Public License v2.
|
|
# See /LICENSE for more information.
|
|
#
|
|
|
|
all: $(if $(DUMP),dumpinfo,compile)
|
|
|
|
PKG_BUILD_DIR ?= $(BUILD_DIR)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION))
|
|
PKG_INSTALL_DIR ?= $(PKG_BUILD_DIR)/ipkg-install
|
|
PKG_MD5SUM ?= unknown
|
|
|
|
include $(INCLUDE_DIR)/prereq.mk
|
|
include $(INCLUDE_DIR)/host.mk
|
|
include $(INCLUDE_DIR)/unpack.mk
|
|
include $(INCLUDE_DIR)/depends.mk
|
|
|
|
STAMP_PREPARED=$(PKG_BUILD_DIR)/.prepared$(if $(QUILT)$(DUMP),,_$(shell $(call find_md5,${CURDIR} $(PKG_FILE_DEPENDS),)))
|
|
STAMP_CONFIGURED:=$(PKG_BUILD_DIR)/.configured$(if $(QUILT)$(DUMP),,_$(call confvar,$(PKG_CONFIG_DEPENDS)))
|
|
STAMP_BUILT:=$(PKG_BUILD_DIR)/.built
|
|
STAMP_INSTALLED:=$(STAGING_DIR)/stamp/.$(PKG_NAME)_installed
|
|
|
|
include $(INCLUDE_DIR)/download.mk
|
|
include $(INCLUDE_DIR)/quilt.mk
|
|
include $(INCLUDE_DIR)/package-defaults.mk
|
|
include $(INCLUDE_DIR)/package-dumpinfo.mk
|
|
include $(INCLUDE_DIR)/package-ipkg.mk
|
|
include $(INCLUDE_DIR)/package-debug.mk
|
|
include $(INCLUDE_DIR)/package-bin.mk
|
|
include $(INCLUDE_DIR)/autotools.mk
|
|
|
|
override MAKEFLAGS=
|
|
CONFIG_SITE:=$(INCLUDE_DIR)/site/$(REAL_GNU_TARGET_NAME)
|
|
ifneq ($(CONFIG_LINUX_2_4),)
|
|
CONFIG_SITE:=$(subst linux-,linux2.4-,$(CONFIG_SITE))
|
|
endif
|
|
CUR_MAKEFILE:=$(filter-out Makefile,$(firstword $(MAKEFILE_LIST)))
|
|
SUBMAKE:=$(NO_TRACE_MAKE) $(if $(CUR_MAKEFILE),-f $(CUR_MAKEFILE))
|
|
|
|
ifeq ($(DUMP)$(filter prereq clean refresh update,$(MAKECMDGOALS)),)
|
|
ifneq ($(if $(QUILT),,$(CONFIG_AUTOREBUILD)),)
|
|
define Build/Autoclean
|
|
$(PKG_BUILD_DIR)/.dep_files: $(STAMP_PREPARED)
|
|
$(call rdep,${CURDIR} $(PKG_FILE_DEPENDS),$(STAMP_PREPARED),$(PKG_BUILD_DIR)/.dep_files,-x "*/.dep_*")
|
|
$(if $(filter prepare,$(MAKECMDGOALS)),,$(call rdep,$(PKG_BUILD_DIR),$(STAMP_BUILT),,-x "*/.dep_*" -x "*/ipkg*"))
|
|
endef
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(CONFIG_$(PKG_NAME)_USE_CUSTOM_SOURCE_DIR),y)
|
|
# disable load stage
|
|
PKG_SOURCE_URL:=
|
|
# add hook to install a link to customer source path of dedicated package
|
|
Hooks/Prepare/Pre += prepare_custom_source_directory
|
|
# define empty default action
|
|
define Build/Prepare/Default
|
|
@:
|
|
endef
|
|
endif
|
|
|
|
define Download/default
|
|
FILE:=$(PKG_SOURCE)
|
|
URL:=$(PKG_SOURCE_URL)
|
|
SUBDIR:=$(PKG_SOURCE_SUBDIR)
|
|
PROTO:=$(PKG_SOURCE_PROTO)
|
|
$(if $(PKG_SOURCE_MIRROR),MIRROR:=$(filter 1,$(PKG_MIRROR)))
|
|
VERSION:=$(PKG_SOURCE_VERSION)
|
|
MD5SUM:=$(PKG_MD5SUM)
|
|
endef
|
|
|
|
define sep
|
|
|
|
endef
|
|
|
|
define Build/Exports/Default
|
|
$(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR)/usr/share/aclocal $$(STAGING_DIR)/usr/share/aclocal-* $$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*),-I $$(p))
|
|
$(1) : export STAGING_PREFIX=$$(STAGING_DIR)/usr
|
|
$(1) : export PATH=$$(TARGET_PATH_PKG)
|
|
$(1) : export CONFIG_SITE:=$$(CONFIG_SITE)
|
|
$(1) : export PKG_CONFIG_PATH=$$(STAGING_DIR)/usr/lib/pkgconfig
|
|
$(1) : export PKG_CONFIG_LIBDIR=$$(STAGING_DIR)/usr/lib/pkgconfig
|
|
endef
|
|
Build/Exports=$(Build/Exports/Default)
|
|
|
|
define Build/DefaultTargets
|
|
$(if $(QUILT),$(Build/Quilt))
|
|
$(if $(strip $(PKG_SOURCE_URL)),$(call Download,default))
|
|
$(call Build/Autoclean)
|
|
|
|
$(STAMP_PREPARED) : export PATH=$$(TARGET_PATH_PKG)
|
|
$(STAMP_PREPARED):
|
|
@-rm -rf $(PKG_BUILD_DIR)
|
|
@mkdir -p $(PKG_BUILD_DIR)
|
|
$(foreach hook,$(Hooks/Prepare/Pre),$(call $(hook))$(sep))
|
|
$(Build/Prepare)
|
|
$(foreach hook,$(Hooks/Prepare/Post),$(call $(hook))$(sep))
|
|
touch $$@
|
|
|
|
$(call Build/Exports,$(STAMP_CONFIGURED))
|
|
$(STAMP_CONFIGURED): $(STAMP_PREPARED)
|
|
$(foreach hook,$(Hooks/Configure/Pre),$(call $(hook))$(sep))
|
|
$(Build/Configure)
|
|
$(foreach hook,$(Hooks/Configure/Post),$(call $(hook))$(sep))
|
|
touch $$@
|
|
|
|
$(call Build/Exports,$(STAMP_BUILT))
|
|
$(STAMP_BUILT): $(STAMP_CONFIGURED)
|
|
$(foreach hook,$(Hooks/Compile/Pre),$(call $(hook))$(sep))
|
|
$(Build/Compile)
|
|
$(foreach hook,$(Hooks/Compile/Post),$(call $(hook))$(sep))
|
|
$(Build/Install)
|
|
$(foreach hook,$(Hooks/Install/Post),$(call $(hook))$(sep))
|
|
touch $$@
|
|
|
|
$(STAMP_INSTALLED) : export PATH=$$(TARGET_PATH_PKG)
|
|
$(STAMP_INSTALLED): $(STAMP_BUILT)
|
|
$(SUBMAKE) -j1 clean-staging
|
|
rm -rf $(TMP_DIR)/stage-$(PKG_NAME)
|
|
mkdir -p $(TMP_DIR)/stage-$(PKG_NAME)/host $(STAGING_DIR)/packages $(STAGING_DIR_HOST)/packages
|
|
$(foreach hook,$(Hooks/InstallDev/Pre),\
|
|
$(call $(hook),$(TMP_DIR)/stage-$(PKG_NAME),$(TMP_DIR)/stage-$(PKG_NAME)/host)$(sep)\
|
|
)
|
|
$(call Build/InstallDev,$(TMP_DIR)/stage-$(PKG_NAME),$(TMP_DIR)/stage-$(PKG_NAME)/host)
|
|
$(foreach hook,$(Hooks/InstallDev/Post),\
|
|
$(call $(hook),$(TMP_DIR)/stage-$(PKG_NAME),$(TMP_DIR)/stage-$(PKG_NAME)/host)$(sep)\
|
|
)
|
|
if [ -d $(TMP_DIR)/stage-$(PKG_NAME) ]; then \
|
|
(cd $(TMP_DIR)/stage-$(PKG_NAME); find ./ > $(STAGING_DIR)/packages/$(PKG_NAME).list); \
|
|
$(CP) $(TMP_DIR)/stage-$(PKG_NAME)/* $(STAGING_DIR)/; \
|
|
fi
|
|
rm -rf $(TMP_DIR)/stage-$(PKG_NAME)
|
|
touch $$@
|
|
|
|
ifdef Build/InstallDev
|
|
compile: $(STAMP_INSTALLED)
|
|
endif
|
|
|
|
define Build/DefaultTargets
|
|
endef
|
|
|
|
prepare: $(STAMP_PREPARED)
|
|
configure: $(STAMP_CONFIGURED)
|
|
dist: $(STAMP_CONFIGURED)
|
|
distcheck: $(STAMP_CONFIGURED)
|
|
endef
|
|
|
|
define Build/IncludeOverlay
|
|
$(eval -include $(wildcard $(TOPDIR)/overlay/*/$(PKG_NAME).mk))
|
|
define Build/IncludeOverlay
|
|
endef
|
|
endef
|
|
|
|
define BuildPackage
|
|
$(Build/IncludeOverlay)
|
|
$(eval $(Package/Default))
|
|
$(eval $(Package/$(1)))
|
|
|
|
ifdef DESCRIPTION
|
|
$$(error DESCRIPTION:= is obsolete, use Package/PKG_NAME/description)
|
|
endif
|
|
|
|
ifndef Package/$(1)/description
|
|
define Package/$(1)/description
|
|
$(TITLE)
|
|
endef
|
|
endif
|
|
|
|
$(foreach FIELD, TITLE CATEGORY PRIORITY SECTION VERSION,
|
|
ifeq ($($(FIELD)),)
|
|
$$(error Package/$(1) is missing the $(FIELD) field)
|
|
endif
|
|
)
|
|
|
|
$(call shexport,Package/$(1)/description)
|
|
$(call shexport,Package/$(1)/config)
|
|
|
|
$(if $(DUMP), \
|
|
$(Dumpinfo/Package), \
|
|
$(foreach target, \
|
|
$(if $(Package/$(1)/targets),$(Package/$(1)/targets), \
|
|
$(if $(PKG_TARGETS),$(PKG_TARGETS), ipkg $(if $(CONFIG_DEBUG_DIR),debug)) \
|
|
), $(BuildTarget/$(target)) \
|
|
) \
|
|
)
|
|
$(if $(PKG_HOST_ONLY)$(DUMP),,$(call Build/DefaultTargets,$(1)))
|
|
endef
|
|
|
|
define pkg_install_files
|
|
$(foreach install_file,$(1),$(INSTALL_DIR) $(3)/`dirname $(install_file)`; $(INSTALL_DATA) $(2)/$(install_file) $(3)/`dirname $(install_file)`;)
|
|
endef
|
|
|
|
define pkg_install_bin
|
|
$(foreach install_apps,$(1),$(INSTALL_DIR) $(3)/`dirname $(install_apps)`; $(INSTALL_BIN) $(2)/$(install_apps) $(3)/`dirname $(install_apps)`;)
|
|
endef
|
|
|
|
Build/Prepare=$(call Build/Prepare/Default,)
|
|
Build/Configure=$(call Build/Configure/Default,)
|
|
Build/Compile=$(call Build/Compile/Default,)
|
|
Build/Install=$(if $(PKG_INSTALL),$(call Build/Install/Default,))
|
|
Build/Dist=$(call Build/Dist/Default,)
|
|
Build/DistCheck=$(call Build/DistCheck/Default,)
|
|
|
|
$(PACKAGE_DIR):
|
|
mkdir -p $@
|
|
|
|
dumpinfo:
|
|
download:
|
|
prepare:
|
|
configure:
|
|
compile:
|
|
install:
|
|
clean-staging: FORCE
|
|
rm -f $(STAMP_INSTALLED)
|
|
@-(\
|
|
cd "$(STAGING_DIR)"; \
|
|
if [ -f packages/$(PKG_NAME).list ]; then \
|
|
cat packages/$(PKG_NAME).list | xargs -r rm -f 2>/dev/null; \
|
|
fi; \
|
|
)
|
|
|
|
clean: clean-staging FORCE
|
|
$(call Build/UninstallDev,$(STAGING_DIR),$(STAGING_DIR_HOST))
|
|
$(Build/Clean)
|
|
rm -f $(STAGING_DIR)/packages/$(PKG_NAME).list $(STAGING_DIR_HOST)/packages/$(PKG_NAME).list
|
|
rm -rf $(PKG_BUILD_DIR)
|
|
|
|
dist:
|
|
$(Build/Dist)
|
|
|
|
distcheck:
|
|
$(Build/DistCheck)
|