################################################################################
# Embtoolkit
# Copyright(C) 2009-2011 Abdoulaye Walsimou GAYE.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
################################################################################
#
# \file macros.mk
# \brief macros.mk of Embtoolkit
# \author Abdoulaye Walsimou GAYE
# \date May 2009
################################################################################
# Embtoolkit colors
__embtk_color_red = "\E[1;31m"
__embtk_color_green = "\E[1;32m"
__embtk_color_yellow = "\E[1;33m"
__embtk_color_blue = "\E[1;34m"
__embtk_no_color = "\E[0m"
# echo colored text
#usage $(call embtk_echo_red,$(TEXT))
define embtk_echo_red
@echo -e $(__embtk_color_red)$(1)$(__embtk_no_color)
endef
#usage $(call embtk_echo_green,$(TEXT))
define embtk_echo_green
@echo -e $(__embtk_color_green)$(1)$(__embtk_no_color)
endef
#usage $(call echo_yellow,$(TEXT))
define echo_yellow
@echo -e $(__embtk_color_yellow)$(1)$(__embtk_no_color)
endef
#usage $(call embtk_echo_blue,$(TEXT))
define embtk_echo_blue
@echo -e $(__embtk_color_blue)$(1)$(__embtk_no_color)
endef
#
# __embtk_mk_strcmp:
# A macro for two strings comparison. It returns y if the strings are identical
# and nothing if not.
# Note: This macro strips passed parameters
# Usage:
# $(call __embtk_mk_strcmp,str1,str2)
#
__embtk_mk_strcmp=$(shell [ $(strip $(1)) = $(strip $(2)) ] && echo y)
#
# wget wrapper
# usage: $(call embtk_wget,$(OUTPUT_FILE),$(SITE),$(FOREIGN_FILE))
#
__wget_outfile = $(patsubst %/,%,$(DOWNLOAD_DIR))/$(strip $(1))
__wget_remotesite = $(patsubst %/,%,$(strip $(2)))
__wget_foreignfiles = $(strip $(3))
__wget_opts = --tries=5 --timeout=10 --waitretry=5
define embtk_wget
wget $(__wget_opts) -O $(__wget_outfile) \
$(__wget_remotesite)/$(__wget_foreignfiles) || \
wget $(__wget_opts) --no-passive-ftp -O $(__wget_outfile) \
$(__wget_remotesite)/$(__wget_foreignfiles)
endef
#Decompress message
#usage $(call EMBTK_DECOMPRESS_MSG,$(NAME_PACKAGE))
define EMBTK_DECOMPRESS_MSG
$(call embtk_echo_blue,"################################################################################")
$(call embtk_echo_blue,"# EmbToolkit # Decompressing $(1)")
$(call embtk_echo_blue,"################################################################################")
endef
#Configure message
#usage $(call EMBTK_CONFIGURE_MSG,$(NAME_PACKAGE))
define EMBTK_CONFIGURE_MSG
$(call embtk_echo_blue,"################################################################################")
$(call embtk_echo_blue,"# EmbToolkit # Configuring $(1)")
$(call embtk_echo_blue,"################################################################################")
endef
#Build message
#usage $(call EMBTK_BUILD_MSG,$(NAME_PACKAGE))
define EMBTK_BUILD_MSG
$(call embtk_echo_blue,"################################################################################")
$(call embtk_echo_blue,"# EmbToolkit # Building $(1)")
$(call embtk_echo_blue,"################################################################################")
endef
#Install message
#usage $(call EMBTK_INSTALL_MSG,$(NAME_PACKAGE))
define EMBTK_INSTALL_MSG
$(call embtk_echo_blue,"################################################################################")
$(call embtk_echo_blue,"# EmbToolkit # Installing $(1)")
$(call embtk_echo_blue,"################################################################################")
endef
#Install message
#usage $(call embtk_error_msg,$(MESSAGE))
define embtk_error_msg
$(call embtk_echo_red,"################################################################################")
$(call embtk_echo_red,"# EmbToolkit # ERROR: $(1)")
$(call embtk_echo_red,"################################################################################")
endef
#Generic message
#usage $(call embtk_generic_message,$(GENERIC_MESSAGE))
define embtk_generic_message
$(call embtk_echo_blue,"################################################################################")
$(call embtk_echo_blue,"# EmbToolkit # $(1)")
$(call embtk_echo_blue,"################################################################################")
endef
define embtk_generic_msg
$(call embtk_generic_message,$(1))
endef
#Successful build of EmbToolkit message
successful_build:
$(call embtk_echo_blue," --------------------- ")
$(call embtk_echo_blue,"| Toolchain build log |")
$(call embtk_echo_blue," --------------------- ")
$(call embtk_echo_blue,"You successfully build your toolchain for $(GNU_TARGET)")
$(call embtk_echo_blue,"Tools built (GCC compiler, Binutils, etc.) are located in:")
$(call embtk_echo_blue," $(TOOLS)/bin")
@echo
$(call embtk_echo_blue," ---------------------------- ")
$(call embtk_echo_blue,"| Root file system build log |")
$(call embtk_echo_blue," ---------------------------- ")
ifeq ($(CONFIG_EMBTK_HAVE_ROOTFS),y)
$(call embtk_echo_blue,"You also successfully build root filesystem(s) located in the")
$(call embtk_echo_blue,"'generated' sub-directory of EmbToolkit.")
else
$(call embtk_echo_green,"Build of root filesystem not selected.")
endif
@echo
$(call embtk_echo_blue," ---------------------------- ")
$(call embtk_echo_blue,"| Embedded systems Toolkit |")
$(call embtk_echo_blue," ---------------------------- ")
$(call embtk_echo_blue,"Hope that EmbToolkit will be useful for your project !!!")
$(call embtk_echo_blue,"Please report any bugs/suggestion at:")
$(call embtk_echo_blue," http://www.embtoolkit.org/issues/projects/show/embtoolkit")
$(call embtk_echo_blue,"You can also visit the wiki at:")
$(call embtk_echo_blue," http://www.embtoolkit.org")
@echo
$(call embtk_echo_blue,"################################################################################")
#Macro to adapt libtool files (*.la) for cross compiling
__ltlibdirold=libdir='\/usr\/$(LIBDIR)'
__ltlibdirnew=libdir='$(SYSROOT)\/usr\/$(LIBDIR)'
define __embtk_fix_libtool_files
@LIBTOOLS_LA_FILES=`find $(SYSROOT)/usr/$(LIBDIR) -name *.la`; \
for i in $$LIBTOOLS_LA_FILES; do \
sed -i "s;$(__ltlibdirold);$(__ltlibdirnew);" $$i; \
done
endef
libtool_files_adapt:
$(Q)$(call __embtk_fix_libtool_files)
#Macro to adapt pkg-config files for cross compiling
define __embtk_fix_pkgconfig_files
@PKGCONFIG_FILES=`find $(SYSROOT)/usr/$(LIBDIR)/pkgconfig -name *.pc`; \
for i in $$PKGCONFIG_FILES; do \
sed -e 's;prefix=.*;prefix=$(SYSROOT)/usr;' \
-e 's;includedir=$${prefix}/include;includedir=$(SYSROOT)/usr/include;' \
-e 's;libdir=.*;libdir=$(SYSROOT)/usr/$(LIBDIR);' < $$i > $$i.new; \
mv $$i.new $$i; \
done
endef
pkgconfig_files_adapt:
$(Q)$(call __embtk_fix_pkgconfig_files)
#A macro to remove rpath in packages that use libtool -rpath
define __embtk_kill_lt_rpath
@cd $(strip $(1)); \
LOCAL_LT_FILES=`find -type f -name libtool`; \
for i in $$LOCAL_LT_FILES; \
do \
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' $$i; \
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' $$i; \
done
endef
#
# Get passed package variables prefix
#
PKGV=$(strip $(shell echo $(1) | tr a-z A-Z))
#
# A macro to get packages version from .config file.
# usage: $(call embtk_get_pkgversion,PACKAGE)
#
embtk_get_pkgversion = $(subst ",,$(strip $(CONFIG_EMBTK_$(PKGV)_VERSION_STRING)))
#
# A macro to test if a package is already decompressed.
# It returns y if decompressed and nothing if not.
#
__embtk_pkg_decompressed-y = $(shell test -e $($(PKGV)_SRC_DIR)/.decompressed && echo y)
#
# A macro to test if a package is already patched.
# It returns y if patched and nothing if not.
#
__embtk_pkg_patched-y = $(shell test -e $($(PKGV)_SRC_DIR)/.patched && echo y)
#
# A macro to test if a package is already configured using autotools configure
# script. It returns y if configured and nothing if not.
#
__embtk_pkg_configured-y = $(shell test -e $($(PKGV)_BUILD_DIR)/.configured && echo y)
#
# A macro to test if a package is already installed.
# It returns y if installed and nothing if not.
#
__embtk_pkg_installed-y = $(shell test -e $($(PKGV)_BUILD_DIR)/.installed && echo y)
#
# A macro which runs configure script (conpatible with autotools configure)
# for a package and sets environment variables correctly.
# Usage:
# $(call embtk_configure_pkg,PACKAGE)
#
define __embtk_configure_autoreconfpkg
@if [ "x$(CONFIG_EMBTK_$(PKGV)_NEED_AUTORECONF)" == "xy" ]; then \
test -e $($(PKGV)_SRC_DIR)/configure.ac || \
test -e $($(PKGV)_SRC_DIR)/configure.in || exit 1; \
cd $($(PKGV)_SRC_DIR); \
$(AUTORECONF) --install -f; \
fi
endef
define __embtk_print_configure_opts
$(call embtk_echo_blue,"Configure options:")
@for i in `echo $(1) | tr " " "\n"`; \
do echo -e $(__embtk_color_blue)$$i$(__embtk_no_color); done
endef
define embtk_configure_pkg
$(call embtk_generic_msg,"Configure $($(PKGV)_PACKAGE)...")
$(call __embtk_configure_autoreconfpkg,$(1))
@test -e $($(PKGV)_SRC_DIR)/configure || exit 1
$(call __embtk_print_configure_opts,"$($(PKGV)_CONFIGURE_OPTS)")
$(Q)cd $($(PKGV)_BUILD_DIR); \
CC=$(TARGETCC_CACHED) \
CXX=$(TARGETCXX_CACHED) \
AR=$(TARGETAR) \
RANLIB=$(TARGETRANLIB) \
AS=$(CROSS_COMPILE)as \
LD=$(TARGETLD) \
NM=$(TARGETNM) \
STRIP=$(TARGETSTRIP) \
OBJDUMP=$(TARGETOBJDUMP) \
OBJCOPY=$(TARGETOBJCOPY) \
CFLAGS="$(TARGET_CFLAGS)" \
CXXFLAGS="$(TARGET_CFLAGS)" \
LDFLAGS="-L$(SYSROOT)/$(LIBDIR) -L$(SYSROOT)/usr/$(LIBDIR)" \
CPPFLAGS="-I$(SYSROOT)/usr/include" \
PKG_CONFIG="$(PKGCONFIG_BIN)" \
PKG_CONFIG_PATH="$(EMBTK_PKG_CONFIG_PATH)" \
PKG_CONFIG_LIBDIR="$(EMBTK_PKG_CONFIG_LIBDIR)" \
ac_cv_func_malloc_0_nonnull=yes \
ac_cv_func_realloc_0_nonnull=yes \
$($(PKGV)_CONFIGURE_ENV) \
$(CONFIG_SHELL) $($(PKGV)_SRC_DIR)/configure \
--build=$(HOST_BUILD) --host=$(STRICT_GNU_TARGET) \
--target=$(STRICT_GNU_TARGET) --libdir=/usr/$(LIBDIR) \
--prefix=/usr --sysconfdir=/etc --disable-rpath \
$($(PKGV)_CONFIGURE_OPTS)
@touch $($(PKGV)_BUILD_DIR)/.configured
$(call __embtk_kill_lt_rpath,$($(PKGV)_BUILD_DIR))
endef
#
# A macro which runs configure script (conpatible with autotools configure)
# for a package for host development machine and sets environment variables
# correctly.
# Usage:
# $(call embtk_configure_hostpkg,PACKAGE)
#
define embtk_configure_hostpkg
$(call embtk_generic_msg,"Configure $($(PKGV)_PACKAGE) for host...")
$(call __embtk_configure_autoreconfpkg,$(1))
@test -e $($(PKGV)_SRC_DIR)/configure || exit 1
$(call __embtk_print_configure_opts,"$($(PKGV)_CONFIGURE_OPTS)")
@cd $($(PKGV)_BUILD_DIR); \
CPPFLAGS="-I$(HOSTTOOLS)/usr/include" \
LDFLAGS="-L$(HOSTTOOLS)/usr/lib -Wl,-rpath,$(HOSTTOOLS)/usr/lib" \
PKG_CONFIG="$(PKGCONFIG_BIN)" \
PKG_CONFIG_PATH="$(EMBTK_HOST_PKG_CONFIG_PATH)" \
$(if $(call __embtk_mk_strcmp,$(PKGV),CCACHE),,CC=$(HOSTCC_CACHED)) \
$(if $(call __embtk_mk_strcmp,$(PKGV),CCACHE),,CXX=$(HOSTCXX_CACHED)) \
$($(PKGV)_CONFIGURE_ENV) \
$(CONFIG_SHELL) $($(PKGV)_SRC_DIR)/configure \
--build=$(HOST_BUILD) --host=$(HOST_ARCH) \
--prefix=$(if $($(PKGV)_PREFIX),$($(PKGV)_PREFIX),$(HOSTTOOLS)/usr) \
$($(PKGV)_CONFIGURE_OPTS)
@touch $($(PKGV)_BUILD_DIR)/.configured
endef
#
# Various helpers macros for different steps while installing packages.
#
__embtk_multi_make = $(foreach builddir,$($(PKGV)_MAKE_DIRS), \
$($(PKGV)_MAKE_ENV) \
$(MAKE) -C $($(PKGV)_BUILD_DIR)/$(builddir) \
$($(PKGV)_MAKE_OPTS) $(J);)
__embtk_single_make = $($(PKGV)_MAKE_ENV) $(MAKE) -C $($(PKGV)_BUILD_DIR) \
$($(PKGV)_MAKE_OPTS) $(J)
__embtk_multi_make_install = $(foreach builddir,$($(PKGV)_MAKE_DIRS), \
$($(PKGV)_MAKE_ENV) $(MAKE) -C $($(PKGV)_BUILD_DIR)/$(builddir) \
DESTDIR=$(SYSROOT)$(if $($(PKGV)_SYSROOT_SUFFIX),/$($(PKGV)_SYSROOT_SUFFIX)) \
$($(PKGV)_MAKE_OPTS) install;)
__embtk_single_make_install = $($(PKGV)_MAKE_ENV) \
$(MAKE) -C $($(PKGV)_BUILD_DIR) \
DESTDIR=$(SYSROOT)$(if $($(PKGV)_SYSROOT_SUFFIX),/$($(PKGV)_SYSROOT_SUFFIX)) \
$($(PKGV)_MAKE_OPTS) install
__embtk_multi_make_hostinstall = $(foreach builddir,$($(PKGV)_MAKE_DIRS), \
$($(PKGV)_MAKE_ENV) \
$(MAKE) -C $($(PKGV)_BUILD_DIR)/$(builddir) \
$(if $($(PKGV)_DESTDIR),DESTDIR=$($(PKGV)_DESTDIR)) \
$($(PKGV)_MAKE_OPTS) install;)
__embtk_single_make_hostinstall = $($(PKGV)_MAKE_ENV) \
$(MAKE) -C $($(PKGV)_BUILD_DIR) \
$(if $($(PKGV)_DESTDIR),DESTDIR=$($(PKGV)_DESTDIR)) \
$($(PKGV)_MAKE_OPTS) install
__embtk_autotolspkg-y=$(2)
define __embtk_install_pkg_make
$(call embtk_generic_msg,"Compiling and installing $($(PKGV)_NAME)-$($(PKGV)_VERSION) in your root filesystem...")
$(Q)$(if $(strip $($(PKGV)_DEPS)),$(MAKE) $($(PKGV)_DEPS))
$(Q)$(call embtk_download_pkg,$(1))
$(Q)$(call embtk_decompress_pkg,$(1))
$(Q)$(if $(__embtk_autotolspkg-y),$(call embtk_configure_pkg,$(1)))
$(Q)$(if $($(PKGV)_MAKE_DIRS), \
$(__embtk_multi_make), \
$(__embtk_single_make))
$(Q)$(if $($(PKGV)_MAKE_DIRS), \
$(__embtk_multi_make_install), \
$(__embtk_single_make_install))
$(Q)$(if $(__embtk_autotolspkg-y),$(call __embtk_fix_libtool_files))
$(Q)$(if $(__embtk_autotolspkg-y),$(call __embtk_fix_pkgconfig_files))
@touch $($(PKGV)_BUILD_DIR)/.installed
endef
define __embtk_install_hostpkg_make
$(call embtk_generic_msg,"Compiling and installing $($(PKGV)_NAME)-$($(PKGV)_VERSION) for host...")
$(Q)$(if $(strip $($(PKGV)_DEPS)),$(MAKE) $($(PKGV)_DEPS))
$(Q)$(call embtk_download_pkg,$(1))
$(Q)$(call embtk_decompress_hostpkg,$(1))
$(Q)$(if $(__embtk_autotolspkg-y),$(call embtk_configure_hostpkg,$(1)))
$(Q)$(if $($(PKGV)_MAKE_DIRS), \
$(__embtk_multi_make), \
$(__embtk_single_make))
$(Q)$(if $($(PKGV)_MAKE_DIRS), \
$(__embtk_multi_make_hostinstall), \
$(__embtk_single_make_hostinstall))
@touch $($(PKGV)_BUILD_DIR)/.installed
endef
#
# A macro to install automatically a package, using autotools scripts, intended
# to run on the target
# Usage:
# $(call embtk_install_pkg,package)
#
define embtk_install_pkg
$(Q)$(if $(__embtk_pkg_installed-y), \
true,$(call __embtk_install_pkg_make,$(1),autotools))
endef
#
# A macro to install automatically a package, using simple Makefile and an
# install target, intented to run on the target.
# Usage:
# $(call embtk_makeinstall_pkg,package)
#
define embtk_makeinstall_pkg
$(Q)$(if $(__embtk_pkg_installed-y), \
true,$(call __embtk_install_pkg_make,$(1)))
endef
#
# A macro to install automatically a package, using autotools scripts, intended
# to run on the host development machine.
# Usage:
# $(call embtk_install_hostpkg,package)
#
define embtk_install_hostpkg
$(Q)$(if $(__embtk_pkg_installed-y),true, \
$(call __embtk_install_hostpkg_make,$(1),autotools))
endef
#
# A macro to install automatically a package, using simple Makefile and an
# install target, intended to run on the host development machine.
# Usage:
# $(call embtk_makeinstall_hostpkg,package)
#
define embtk_makeinstall_hostpkg
$(Q)$(if $(__embtk_pkg_installed-y),true, \
$(call __embtk_install_hostpkg_make,$(1)))
endef
#
# A macro which downloads a package.
# Usage:
# $(call embtk_download_pkg,PACKAGE)
#
define __embtk_download_pkg_patches
@if [ "x$(CONFIG_EMBTK_$(PKGV)_NEED_PATCH)" == "xy" ]; then \
test -e $(DOWNLOAD_DIR)/$($(PKGV)_NAME)-$($(PKGV)_VERSION).patch || \
$(call embtk_wget, \
$($(PKGV)_NAME)-$($(PKGV)_VERSION).patch, \
$($(PKGV)_PATCH_SITE), \
$($(PKGV)_NAME)-$($(PKGV)_VERSION)-*.patch); \
fi
endef
define __embtk_download_pkg_from_mirror
if [ "x$($(PKGV)_SITE_MIRROR$(2))" == "x" ]; then \
false; \
else \
$(call embtk_wget, \
$($(PKGV)_PACKAGE), \
$($(PKGV)_SITE_MIRROR$(2)), \
$($(PKGV)_PACKAGE)); \
fi
endef
define embtk_download_pkg
$(call embtk_generic_msg,"Download $($(PKGV)_PACKAGE) if necessary...")
@test -e $(DOWNLOAD_DIR)/$($(PKGV)_PACKAGE) || \
$(call embtk_wget, \
$($(PKGV)_PACKAGE), \
$($(PKGV)_SITE), \
$($(PKGV)_PACKAGE))|| \
$(call __embtk_download_pkg_from_mirror,$(1),1) || \
$(call __embtk_download_pkg_from_mirror,$(1),2) || \
$(call __embtk_download_pkg_from_mirror,$(1),3) || exit 1
$(call __embtk_download_pkg_patches,$(1))
endef
#
# A macro to decompress packages tarball intended to run on target.
# Usage:
# $(call embtk_decompress_pkg,PACKAGE)
#
define embtk_decompress_pkg
$(call embtk_generic_msg,"Decrompressing $($(PKGV)_PACKAGE) ...")
@if [ "x$(CONFIG_EMBTK_$(PKGV)_PKG_IS_TARGZ)" == "xy" ] && \
[ ! -e $($(PKGV)_SRC_DIR)/.decompressed ]; then \
tar -C $(PACKAGES_BUILD) -xzf \
$(DOWNLOAD_DIR)/$($(PKGV)_PACKAGE) && \
mkdir -p $($(PKGV)_BUILD_DIR) && \
touch $($(PKGV)_SRC_DIR)/.decompressed; \
elif [ "x$(CONFIG_EMBTK_$(PKGV)_PKG_IS_TARBZ2)" == "xy" ] && \
[ ! -e $($(PKGV)_SRC_DIR)/.decompressed ]; then \
tar -C $(PACKAGES_BUILD) -xjf \
$(DOWNLOAD_DIR)/$($(PKGV)_PACKAGE) && \
mkdir -p $($(PKGV)_BUILD_DIR) && \
touch $($(PKGV)_SRC_DIR)/.decompressed; \
elif [ "x$(CONFIG_EMBTK_$(PKGV)_PKG_IS_TARBZ2)" == "x" ] && \
[ "x$(CONFIG_EMBTK_$(PKGV)_PKG_IS_TARGZ)" == "x" ] && \
[ ! -e $($(PKGV)_SRC_DIR)/.decompressed ]; then \
echo -e "\E[1;31m!Unknown package compression type!\E[0m"; \
exit 1; \
fi
@if [ "x$(CONFIG_EMBTK_$(PKGV)_NEED_PATCH)" == "xy" ] && \
[ ! -e $($(PKGV)_SRC_DIR)/.patched ]; then \
cd $($(PKGV)_SRC_DIR); \
patch -p1 < \
$(DOWNLOAD_DIR)/$($(PKGV)_NAME)-$($(PKGV)_VERSION).patch && \
touch $($(PKGV)_SRC_DIR)/.patched; \
fi
@mkdir -p $($(PKGV)_BUILD_DIR)
endef
#
# A macro to decompress packages tarball intended to run on host development
# machine.
# Usage:
# $(call embtk_decompress_hostpkg,PACKAGE)
#
define embtk_decompress_hostpkg
$(call embtk_generic_msg,"Decrompressing $($(PKGV)_PACKAGE) ...")
@if [ "x$(CONFIG_EMBTK_$(PKGV)_PKG_IS_TARGZ)" == "xy" ] && \
[ ! -e $($(PKGV)_SRC_DIR)/.decompressed ]; then \
tar -C $(TOOLS_BUILD) -xzf \
$(DOWNLOAD_DIR)/$($(PKGV)_PACKAGE) && \
mkdir -p $($(PKGV)_BUILD_DIR) && \
touch $($(PKGV)_SRC_DIR)/.decompressed; \
elif [ "x$(CONFIG_EMBTK_$(PKGV)_PKG_IS_TARBZ2)" == "xy" ] && \
[ ! -e $($(PKGV)_SRC_DIR)/.decompressed ]; then \
tar -C $(TOOLS_BUILD) -xjf \
$(DOWNLOAD_DIR)/$($(PKGV)_PACKAGE) && \
mkdir -p $($(PKGV)_BUILD_DIR) && \
touch $($(PKGV)_SRC_DIR)/.decompressed; \
elif [ "x$(CONFIG_EMBTK_$(PKGV)_PKG_IS_TARBZ2)" == "x" ] && \
[ "x$(CONFIG_EMBTK_$(PKGV)_PKG_IS_TARGZ)" == "x" ] && \
[ ! -e $($(PKGV)_SRC_DIR)/.decompressed ]; then \
echo -e "\E[1;31m!Unknown package compression type!\E[0m"; \
exit 1; \
fi
@if [ "x$(CONFIG_EMBTK_$(PKGV)_NEED_PATCH)" == "xy" ] && \
[ ! -e $($(PKGV)_SRC_DIR)/.patched ]; then \
cd $($(PKGV)_SRC_DIR); \
patch -p1 < \
$(DOWNLOAD_DIR)/$($(PKGV)_NAME)-$($(PKGV)_VERSION).patch && \
touch $($(PKGV)_SRC_DIR)/.patched; \
fi
@mkdir -p $($(PKGV)_BUILD_DIR)
endef
#
# A macro to clean installed packages from sysroot.
# Usage:
# $(call embtk_cleanup_pkg,PACKAGE)
#
define embtk_cleanup_pkg
$(call embtk_generic_message,"Cleanup $($(PKGV)_NAME)...")
@-if [ "x$($(PKGV)_ETC)" != "x" ] && [ -e $(SYSROOT)/etc ]; \
then \
cd $(SYSROOT)/etc; rm -rf $($(PKGV)_ETC); \
fi
@-if [ "x$($(PKGV)_BINS)" != "x" ] && [ -e $(SYSROOT)/usr/bin ]; \
then \
cd $(SYSROOT)/usr/bin; rm -rf $($(PKGV)_BINS); \
fi
@-if [ "x$($(PKGV)_SBINS)" != "x" ] && [ -e $(SYSROOT)/usr/sbin ]; \
then \
cd $(SYSROOT)/usr/sbin; rm -rf $($(PKGV)_SBINS); \
fi
@-if [ "x$($(PKGV)_INCLUDES)" != "x" ] && [ -e $(SYSROOT)/usr/include ];\
then \
cd $(SYSROOT)/usr/include; rm -rf $($(PKGV)_INCLUDES); \
fi
@-if [ "x$($(PKGV)_LIBS)" != "x" ] && [ -e $(SYSROOT)/usr/$(LIBDIR) ]; \
then \
cd $(SYSROOT)/usr/$(LIBDIR); rm -rf $($(PKGV)_LIBS); \
fi
@-if [ "x$($(PKGV)_LIBEXECS)" != "x" ] && \
[ -e $(SYSROOT)/usr/$(LIBDIR)/libexec ]; \
then \
cd $(SYSROOT)/usr/$(LIBDIR)/libexec; \
rm -rf $($(PKGV)_LIBEXECS); \
fi
@-if [ "x$($(PKGV)_PKGCONFIGS)" != "x" ] && \
[ -e $(SYSROOT)/usr/$(LIBDIR)/pkgconfig ]; \
then \
cd $(SYSROOT)/usr/$(LIBDIR)/pkgconfig; \
rm -rf $($(PKGV)_PKGCONFIGS); \
fi
@-rm -rf $($(PKGV)_BUILD_DIR)*
endef