[Buildroot] Need some help fetching local Linux code

Arnout Vandecappelle arnout at mind.be
Thu Dec 13 10:54:59 UTC 2012


On 13/12/12 03:27, Charles Manning wrote:
> Hi
>
> I have been dabbling with the handling for Linux so that it can be
> fetched from svn or a local directory.
>
> Although testing of SITE_METHOD = local works fine with a simple test
> case, I am struggling to get it working from the linux/linux.mk
>
> What I have done is modify linux/Config.in as follows:

[snip]
> +choice
> +       prompt "Custom fetch method"
> +       depends on BR2_LINUX_KERNEL_CUSTOM_SOURCE
> +

  Not relevant for your problem, but I would:

- change the 'depends on' into an 'if' around all the relevant
configs;

- add a BR2_LINUX_KERNEL_CUSTOM_SOURCE_AUTO, which is the default,
and which unsets _SITE_METHOD so that it is derived automatically
from the URL.

> +config BR2_LINUX_KERNEL_CUSTOM_SOURCE_WGET
> +       bool "wget"
> +config BR2_LINUX_KERNEL_CUSTOM_SOURCE_SCP
> +       bool "scp"
> +config BR2_LINUX_KERNEL_CUSTOM_SOURCE_SVN
> +       bool "svn"
> +config BR2_LINUX_KERNEL_CUSTOM_SOURCE_GIT
> +       bool "git"
> +config BR2_LINUX_KERNEL_CUSTOM_SOURCE_HG
> +       bool "Mercurial"
> +config BR2_LINUX_KERNEL_CUSTOM_SOURCE_BZR
> +       bool "Bazaar"
> +config BR2_LINUX_KERNEL_CUSTOM_SOURCE_FILE
> +       bool "Local tarball"
> +config BR2_LINUX_KERNEL_CUSTOM_SOURCE_LOCAL
> +       bool "Local directory"
> +
> +endchoice
[snip]
>   config BR2_LINUX_KERNEL_VERSION
>          string
>          default "3.7" if BR2_LINUX_KERNEL_3_7
>          default BR2_DEFAULT_KERNEL_HEADERS if BR2_LINUX_KERNEL_SAME_AS_HEADERS
>          default BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE if BR2_LINUX_KERNEL_CUSTOM_VERSION
>          default "custom" if BR2_LINUX_KERNEL_CUSTOM_TARBALL
> -       default $BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION if BR2_LINUX_KERNEL_CUSTOM_GIT
> +       default "custom-source" if BR2_LINUX_KERNEL_CUSTOM_SOURCE
> +       default $BR2_LINUX_KERNEL_CUSTOM_VERSION if BR2_LINUX_KERNEL_CUSTOM_VERSION

  No need to change from custom to custom-source...

>
>   #
>   # Patch selection
> diff --git a/linux/linux.mk b/linux/linux.mk
> index c4bdf90..73623bd 100644
> --- a/linux/linux.mk
> +++ b/linux/linux.mk
> @@ -12,9 +12,9 @@ ifeq ($(LINUX_VERSION),custom)
>   LINUX_TARBALL = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION))
>   LINUX_SITE = $(dir $(LINUX_TARBALL))
>   LINUX_SOURCE = $(notdir $(LINUX_TARBALL))
> -else ifeq ($(BR2_LINUX_KERNEL_CUSTOM_GIT),y)
> -LINUX_SITE = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL))
> -LINUX_SITE_METHOD = git
> +else ifeq ($(BR2_LINUX_KERNEL_CUSTOM_SOURCE),y)
> +LINUX_SITE = $(call qstrip,$(BR2_LINUX_KERNEL_CUSTOM_SOURCE_LOCATION))
> +LINUX_SITE_METHOD = $(BR2_LINUX_KERNEL_CUSTOM_SOURCE_METHOD)

  This should be qstrip'ped.  I suspect that is your problem. The problem is that
there is an 'ifeq ($(LINUX_SITE_METHOD),local)' in the generic-package expansion,
and that expands to 'ifeq ("local",local)' which is false.

[snip]
> I also added the following debuggering:
> @@ -30,7 +30,7 @@ ifeq ($(DL_MODE),DOWNLOAD)
>   # Only show the download message if it isn't already downloaded
>          $(Q)(test -e $(DL_DIR)/$($(PKG)_SOURCE)&&  \
>                  (test -z $($(PKG)_PATCH) || test -e $(DL_DIR)$($(PKG)_PATCH))) || \
> -               $(call MESSAGE,"Downloading")
> +               $(call MESSAGE,"Downloading $($(PKG)_SITE) $($(PKG)_SITE_METHOD)")
>   endif

  The way it's written now, you don't see the quotes.  Better put single quotes
around the message instead of double quotes.

>          $(if $($(PKG)_SOURCE),$(call DOWNLOAD,$($(PKG)_SITE)/$($(PKG)_SOURCE)))
>          $(if $($(PKG)_PATCH),$(call DOWNLOAD,$($(PKG)_SITE)/$($(PKG)_PATCH)))
>
> Unfortunately, the code is not fetched properly and instead buildroot
> tries to fetch a tarball.
>
> make V=1 gives:
>
> harles at charles-laptop:/opt/buildroot/buildroot$ make V=1
> (test -e /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz&&  \
> 		(test -z  || test -e /opt/buildroot/buildroot/dl)) || \
> 		echo ">>>  linux custom-source "Downloading
> /home/charles/projects/ex/linux-omap-3.2/ "local"""
>>>> linux custom-source Downloading /home/charles/projects/ex/linux-omap-3.2/ local
> if test -n "" ; then case "" in scp) 	test -e
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz || scp
> '/linux-custom-source.tar.gz'
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz&&  exit ;; *)
> 	test -e /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz ||
> (wget --passive-ftp -nd -t 3  -O
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz.tmp
> '/linux-custom-source.tar.gz'&&  mv
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz.tmp
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz) || (rm -f
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz.tmp ; exit 1)
> &&  exit ;; esac ; fi ; if test "" = "y" ; then exit 1 ; fi ; if test
> -n "/home/charles/projects/ex/linux-omap-3.2//linux-custom-source.tar.gz"
> ; then if test -z ""local"" ; then

  Here you can see the double double quotes. (Note: the double double is
intentional here :-)


  Regards,
  Arnout

> scheme="/home/charles/projects/ex/linux-omap-3.2//linux-custom-source.tar.gz"
> ; else scheme=""local"" ; fi ; case "$scheme" in git) 	test -e
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz || (pushd
> /opt/buildroot/buildroot/dl>  /dev/null&&  ((test "`git ls-remote
> /home/charles/projects/ex/linux-omap-3.2/ custom-source`"&&  echo
> "Doing shallow clone"&&  git clone --depth 1 -b custom-source --bare
> /home/charles/projects/ex/linux-omap-3.2/ linux-custom-source) ||
> (echo "Doing full clone"&&  git clone --bare
> /home/charles/projects/ex/linux-omap-3.2/ linux-custom-source))&&
> pushd linux-custom-source>  /dev/null&&  git archive --format=tar
> --prefix=linux-custom-source/ custom-source | gzip -c>
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz&&  popd>
> /dev/null&&  rm -rf /opt/buildroot/buildroot/dl/linux-custom-source&&
> popd>  /dev/null)&&  exit ;; svn) 	test -e
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz || (pushd
> /opt/buildroot/buildroot/dl>  /dev/null&&  svn export -r custom-source
> /home/charles/projects/ex/linux-omap-3.2/
> /opt/buildroot/buildroot/dl/linux-custom-source&&  tar czf
> linux-custom-source.tar.gz linux-custom-source/&&  rm -rf
> /opt/buildroot/buildroot/dl/linux-custom-source&&  popd>  /dev/null)
> &&  exit ;; bzr) 	test -e
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz || bzr export
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz
> /home/charles/projects/ex/linux-omap-3.2/ -r custom-source&&  exit ;;
> file) 	echo "Download local files" test -e
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz || cp
> /home/charles/projects/ex/linux-omap-3.2//linux-custom-source.tar.gz
> /opt/buildroot/buildroot/dl&&  exit ;; scp) 	test -e
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz || scp
> '/home/charles/projects/ex/linux-omap-3.2//linux-custom-source.tar.gz'
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz&&  exit ;; hg)
> 	test -e /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz ||
> (pushd /opt/buildroot/buildroot/dl>  /dev/null&&  hg  clone --noupdate
> --rev custom-source /home/charles/projects/ex/linux-omap-3.2/
> linux-custom-source&&  hg  archive --repository linux-custom-source
> --type tgz --prefix linux-custom-source/ --rev custom-source
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz&&  rm -rf
> /opt/buildroot/buildroot/dl/linux-custom-source&&  popd>  /dev/null)
> &&  exit ;; *) 	test -e
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz || (wget
> --passive-ftp -nd -t 3  -O
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz.tmp
> '/home/charles/projects/ex/linux-omap-3.2//linux-custom-source.tar.gz'
> &&  mv /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz.tmp
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz) || (rm -f
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz.tmp ; exit 1)
> &&  exit ;; esac ; fi ; if test -n "http://sources.buildroot.net/" ;
> then 	test -e /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz
> || (wget --passive-ftp -nd -t 3  -O
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz.tmp
> 'http://sources.buildroot.net//linux-custom-source.tar.gz'&&  mv
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz.tmp
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz) || (rm -f
> /opt/buildroot/buildroot/dl/linux-custom-source.tar.gz.tmp ; exit 1)
> &&  exit ; fi ; exit 1
> /home/charles/projects/ex/linux-omap-3.2//linux-custom-source.tar.gz:
> Scheme missing.
> mkdir -p /opt/buildroot/buildroot/output/build/linux-custom-source
> touch /opt/buildroot/buildroot/output/build/linux-custom-source/.stamp_downloaded
>
>
> The flow is different when I ran a simplified test case. That just
> used rsync... and worked.
>
> Any help appreciated.
>
> Thanks
>
> Charles
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
>

-- 
Arnout Vandecappelle                               arnout at mind be
Senior Embedded Software Architect                 +32-16-286540
Essensium/Mind                                     http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium                BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F


More information about the buildroot mailing list