Bug 9576 - External tree with BR 2016.11 does not work anymore
Summary: External tree with BR 2016.11 does not work anymore
Status: RESOLVED FIXED
Alias: None
Product: buildroot
Classification: Unclassified
Component: Other (show other bugs)
Version: 2016.11
Hardware: All Linux
: P5 normal
Target Milestone: ---
Assignee: Yann E. MORIN
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-01-12 16:26 UTC by outtierbert
Modified: 2017-01-16 13:00 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:


Attachments
Canonicalise paths to br2-external trees (1.70 KB, patch)
2017-01-12 20:35 UTC, Yann E. MORIN
Details

Note You need to log in before you can comment on or make changes to this bug.
Description outtierbert 2017-01-12 16:26:46 UTC
Hi all,

I am using an external tree with buildroot. My external tree is in a seperate git repository and the buildroot source is fetched as a git submodule:

./
├── board
│   └── board definitions...
├── buildroot
│   ├── arch
│   ├── board
│   ├── boot
│   ├── CHANGES
│   ├── Config.in
│   ├── Config.in.legacy
│   ├── configs
│   ├── COPYING
│   ├── DEVELOPERS
│   ├── dl
│   ├── docs
│   ├── fs
│   ├── linux
│   ├── Makefile
│   ├── Makefile.legacy
│   ├── output
│   ├── package
│   ├── README
│   ├── support
│   ├── system
│   └── toolchain
├── Config.in
├── configs
│   ├── my_defconfig
│   └── several_defconfig
├── external.desc
├── external.mk
├── package
│   ├── custom package 1
│   └── custom package 2
└── README.md

This tree was working fine with buildroot 2016.08. To compile, I go into the /buildroot directory and run: make BR2_EXTERNAL=../ my_defconfig O=output/my_output and then make O=output/my_output

I followed the buildroot user manual on how to adapt an external tree for buildroot 2016.11. I created the external.desc file and changed every reference to $(BR2_EXTERNAL) to $(BR2_EXTERNAL_MY_EXTERNAL_TREE_PATH). Howver, now building does not work anymore. I get an infinite loop when making like in the snippet below. Can you help me diagnose the problem?

Updating goal targets....
Considering target file 'my_defconfig'.
 File 'my_defconfig' does not exist.
 Looking for an implicit rule for 'my_defconfig'.
 Trying pattern rule with stem 'my'.
 Trying rule prerequisite '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
 Trying implicit prerequisite '..//configs/my_defconfig'.
 Trying rule prerequisite 'prepare-kconfig'.
 Found an implicit rule for 'my_defconfig'.
  Considering target file '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
   Looking for an implicit rule for '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
   Trying pattern rule with stem 'c'.
   Found an implicit rule for '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
   Finished prerequisites of target file '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
  No need to remake target '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
  Considering target file '..//configs/my_defconfig'.
   Looking for an implicit rule for '..//configs/my_defconfig'.
   Trying pattern rule with stem 'my'.
   Trying rule prerequisite '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
   Trying implicit prerequisite '..//configs/..//configs/my_defconfig'.
   Trying rule prerequisite 'prepare-kconfig'.
   Found an implicit rule for '..//configs/my_defconfig'.
    Pruning file '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
    Considering target file '..//configs/..//configs/my_defconfig'.
     Looking for an implicit rule for '..//configs/..//configs/my_defconfig'.
     Trying pattern rule with stem 'my'.
     Trying rule prerequisite '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
     Trying implicit prerequisite '..//configs/..//configs/..//configs/my_defconfig'.
     Trying rule prerequisite 'prepare-kconfig'.
     Found an implicit rule for '..//configs/..//configs/my_defconfig'.
      Pruning file '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
      Considering target file '..//configs/..//configs/..//configs/my_defconfig'.
       Looking for an implicit rule for '..//configs/..//configs/..//configs/my_defconfig'.
       Trying pattern rule with stem 'my'.
       Trying rule prerequisite '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
       Trying implicit prerequisite '..//configs/..//configs/..//configs/..//configs/my_defconfig'.
       Trying rule prerequisite 'prepare-kconfig'.
       Found an implicit rule for '..//configs/..//configs/..//configs/my_defconfig'.
        Pruning file '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
        Considering target file '..//configs/..//configs/..//configs/..//configs/my_defconfig'.
         Looking for an implicit rule for '..//configs/..//configs/..//configs/..//configs/my_defconfig'.
         Trying pattern rule with stem 'my'.
         Trying rule prerequisite '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
         Trying implicit prerequisite '..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
         Trying rule prerequisite 'prepare-kconfig'.
         Found an implicit rule for '..//configs/..//configs/..//configs/..//configs/my_defconfig'.
          Pruning file '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
          Considering target file '..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
           Looking for an implicit rule for '..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
           Trying pattern rule with stem 'my'.
           Trying rule prerequisite '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
           Trying implicit prerequisite '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
           Trying rule prerequisite 'prepare-kconfig'.
           Found an implicit rule for '..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
            Pruning file '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
            Considering target file '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
             Looking for an implicit rule for '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
             Trying pattern rule with stem 'my'.
             Trying rule prerequisite '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
             Trying implicit prerequisite '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
             Trying rule prerequisite 'prepare-kconfig'.
             Found an implicit rule for '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
              Pruning file '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
              Considering target file '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
               Looking for an implicit rule for '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
               Trying pattern rule with stem 'my'.
               Trying rule prerequisite '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
               Trying implicit prerequisite '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
               Trying rule prerequisite 'prepare-kconfig'.
               Found an implicit rule for '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
                Pruning file '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
                Considering target file '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
                 Looking for an implicit rule for '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
                 Trying pattern rule with stem 'my'.
                 Trying rule prerequisite '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
                 Trying implicit prerequisite '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
                 Trying rule prerequisite 'prepare-kconfig'.
                 Found an implicit rule for '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
                  Pruning file '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
                  Considering target file '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
                   Looking for an implicit rule for '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
                   Trying pattern rule with stem 'my'.
                   Trying rule prerequisite '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
                   Trying implicit prerequisite '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
                   Trying rule prerequisite 'prepare-kconfig'.
                   Found an implicit rule for '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
                    Pruning file '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
                    Considering target file '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
                     Looking for an implicit rule for '..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/..//configs/my_defconfig'.
                     Trying pattern rule with stem 'my'.
                     Trying rule prerequisite '/home/user/development/external-buildroot-tree/buildroot/output/my_output_folder/build/buildroot-config/conf'.
                     Trying implicit prerequisite '..//configs/..//
Comment 1 Yann E. MORIN 2017-01-12 20:12:55 UTC
Hello,

OK, I could reproduce the issue on a minimal br2-external tree.
I'll investigate.

In the meantime, you can workaround this problem by using an absolute
path to your br2-external tree:

    $ make BR2_EXTERNAL=$(cd ..; pwd) O=output/my-output my_defconfig

Thanks for the report!

Regards,
Yann E. MORIN.
Comment 2 Yann E. MORIN 2017-01-12 20:35:50 UTC
Created attachment 6846 [details]
Canonicalise paths to br2-external trees

Hello,

Could please try the attached patch?

Regards,
Yann E. MORIN.
Comment 3 outtierbert 2017-01-13 09:35:14 UTC
Yes, the patch works perfectly! Thanks a lot!

Kind regards,
Bert
Comment 4 Peter Korsgaard 2017-01-16 13:00:40 UTC
Fixed in git, thanks:

https://git.buildroot.net/buildroot/commit/?id=05576fca13b129da8c7186ee2307981135d3391f

I will also include it in the upcoming 2016.11.2 bugfix release.