diff mbox

[OpenWrt-Devel] build: don't call prereq for any package/symlinks rules

Message ID 1430178409-19140-1-git-send-email-mathieu@qca.qualcomm.com
State Changes Requested
Headers show

Commit Message

Mathieu Olivari April 27, 2015, 11:46 p.m. UTC
Most of the time, we want to make sure OpenWrt has been configured and
setup before start running make. However, in case of package/symlinks,
forcing prereq as a dependency creates multiple issues:
*when executed on a clean workspace, it will prompt for user input
 and open a menuconfig window before executing the feeds command
*the only way around that is to provide a .config. However, the "prereq"
 target would then run a "make defconfig", which will remove all the
 packages in the .config but from external feeds, as feeds have not been
 installed yet.

The only way to currently work around this, is to generate a fake config
by running "make defconfig", then "make package/symlinks", copy the real
config (which at this point disregards the previously generated config),
and run make defconfig again. Something like this:

make defconfig
make package/symlinks
cp real.config .config
make defconfig

This change is removing the need for the first defconfig, making the
process more logical for OpenWrt users using the package/symlinks target.

Signed-off-by: Mathieu Olivari <mathieu@qca.qualcomm.com>
---
 include/toplevel.mk | 2 ++
 1 file changed, 2 insertions(+)

Comments

Toerless Eckert April 27, 2015, 11:59 p.m. UTC | #1
Mathieu:

I can't quite follow your explanations. I ahve been building what
looks to me perfectly well working 14.07 images by just doing:

git clone git://git.openwrt.org/openwrt.git
cd openwrt
# Clean workspace now

cp real.config .config
make defconfig
make

Your mail seems to indicate that that supposedly does not work. Can you please
tell me what exactly is breaking when i do that ?

Thanks
    Toerless

On Mon, Apr 27, 2015 at 04:46:49PM -0700, Mathieu Olivari wrote:
> Most of the time, we want to make sure OpenWrt has been configured and
> setup before start running make. However, in case of package/symlinks,
> forcing prereq as a dependency creates multiple issues:
> *when executed on a clean workspace, it will prompt for user input
>  and open a menuconfig window before executing the feeds command
> *the only way around that is to provide a .config. However, the "prereq"
>  target would then run a "make defconfig", which will remove all the
>  packages in the .config but from external feeds, as feeds have not been
>  installed yet.
> 
> The only way to currently work around this, is to generate a fake config
> by running "make defconfig", then "make package/symlinks", copy the real
> config (which at this point disregards the previously generated config),
> and run make defconfig again. Something like this:
> 
> make defconfig
> make package/symlinks
> cp real.config .config
> make defconfig
> 
> This change is removing the need for the first defconfig, making the
> process more logical for OpenWrt users using the package/symlinks target.
> 
> Signed-off-by: Mathieu Olivari <mathieu@qca.qualcomm.com>
> ---
>  include/toplevel.mk | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/include/toplevel.mk b/include/toplevel.mk
> index d8651d9..b3b344d 100644
> --- a/include/toplevel.mk
> +++ b/include/toplevel.mk
> @@ -178,6 +178,7 @@ ifeq ($(SDK),1)
>  else
>  
>  %::
> +ifeq ($(filter package/symlinks%,$(MAKECMDGOALS)),)
>  	@+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq
>  	@( \
>  		cp .config tmp/.config; \
> @@ -186,6 +187,7 @@ else
>  			printf "$(_R)WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig!$(_N)\n" >&2; \
>  		fi \
>  	)
> +endif
>  	@+$(ULIMIT_FIX) $(SUBMAKE) -r $@ $(if $(WARN_PARALLEL_ERROR), || { \
>  		printf "$(_R)Build failed - please re-run with -j1 to see the real error message$(_N)\n" >&2; \
>  		false; \
> -- 
> 1.9.1
Mathieu Olivari April 28, 2015, 12:15 a.m. UTC | #2
I'm actually talking about the command below:
$ make package/symlinks

Right after the git clone, it does open the menuconfig. Which ends-up in
generating a .config, which has to be deleted anyway as any package from
feed would get removed.

Thanks,
Mathieu

-----Original Message-----
From: openwrt-devel [mailto:openwrt-devel-bounces@lists.openwrt.org] On
Behalf Of Toerless Eckert
Sent: Monday, April 27, 2015 4:59 PM
To: Mathieu Olivari
Cc: openwrt-devel@lists.openwrt.org
Subject: Re: [OpenWrt-Devel] [PATCH] build: don't call prereq for any
package/symlinks rules


Mathieu:

I can't quite follow your explanations. I ahve been building what looks to
me perfectly well working 14.07 images by just doing:

git clone git://git.openwrt.org/openwrt.git cd openwrt # Clean workspace now

cp real.config .config
make defconfig
make

Your mail seems to indicate that that supposedly does not work. Can you
please tell me what exactly is breaking when i do that ?

Thanks
    Toerless

On Mon, Apr 27, 2015 at 04:46:49PM -0700, Mathieu Olivari wrote:
> Most of the time, we want to make sure OpenWrt has been configured and 
> setup before start running make. However, in case of package/symlinks, 
> forcing prereq as a dependency creates multiple issues:
> *when executed on a clean workspace, it will prompt for user input  
> and open a menuconfig window before executing the feeds command *the 
> only way around that is to provide a .config. However, the "prereq"
>  target would then run a "make defconfig", which will remove all the  
> packages in the .config but from external feeds, as feeds have not 
> been  installed yet.
> 
> The only way to currently work around this, is to generate a fake 
> config by running "make defconfig", then "make package/symlinks", copy 
> the real config (which at this point disregards the previously 
> generated config), and run make defconfig again. Something like this:
> 
> make defconfig
> make package/symlinks
> cp real.config .config
> make defconfig
> 
> This change is removing the need for the first defconfig, making the 
> process more logical for OpenWrt users using the package/symlinks target.
> 
> Signed-off-by: Mathieu Olivari <mathieu@qca.qualcomm.com>
> ---
>  include/toplevel.mk | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/include/toplevel.mk b/include/toplevel.mk index 
> d8651d9..b3b344d 100644
> --- a/include/toplevel.mk
> +++ b/include/toplevel.mk
> @@ -178,6 +178,7 @@ ifeq ($(SDK),1)
>  else
>  
>  %::
> +ifeq ($(filter package/symlinks%,$(MAKECMDGOALS)),)
>  	@+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq
>  	@( \
>  		cp .config tmp/.config; \
> @@ -186,6 +187,7 @@ else
>  			printf "$(_R)WARNING: your configuration is out of
sync. Please run make menuconfig, oldconfig or defconfig!$(_N)\n" >&2; \
>  		fi \
>  	)
> +endif
>  	@+$(ULIMIT_FIX) $(SUBMAKE) -r $@ $(if $(WARN_PARALLEL_ERROR), || { \
>  		printf "$(_R)Build failed - please re-run with -j1 to see
the real error message$(_N)\n" >&2; \
>  		false; \
> --
> 1.9.1
Toerless Eckert April 28, 2015, 1:46 a.m. UTC | #3
So if "make package/symlinks" is optional, when is it needed ?

Sorry for the beginner q.

On Mon, Apr 27, 2015 at 05:15:36PM -0700, Mathieu Olivari wrote:
> I'm actually talking about the command below:
> $ make package/symlinks
> 
> Right after the git clone, it does open the menuconfig. Which ends-up in
> generating a .config, which has to be deleted anyway as any package from
> feed would get removed.
> 
> Thanks,
> Mathieu
> 
> -----Original Message-----
> From: openwrt-devel [mailto:openwrt-devel-bounces@lists.openwrt.org] On
> Behalf Of Toerless Eckert
> Sent: Monday, April 27, 2015 4:59 PM
> To: Mathieu Olivari
> Cc: openwrt-devel@lists.openwrt.org
> Subject: Re: [OpenWrt-Devel] [PATCH] build: don't call prereq for any
> package/symlinks rules
> 
> 
> Mathieu:
> 
> I can't quite follow your explanations. I ahve been building what looks to
> me perfectly well working 14.07 images by just doing:
> 
> git clone git://git.openwrt.org/openwrt.git cd openwrt # Clean workspace now
> 
> cp real.config .config
> make defconfig
> make
> 
> Your mail seems to indicate that that supposedly does not work. Can you
> please tell me what exactly is breaking when i do that ?
> 
> Thanks
>     Toerless
> 
> On Mon, Apr 27, 2015 at 04:46:49PM -0700, Mathieu Olivari wrote:
> > Most of the time, we want to make sure OpenWrt has been configured and 
> > setup before start running make. However, in case of package/symlinks, 
> > forcing prereq as a dependency creates multiple issues:
> > *when executed on a clean workspace, it will prompt for user input  
> > and open a menuconfig window before executing the feeds command *the 
> > only way around that is to provide a .config. However, the "prereq"
> >  target would then run a "make defconfig", which will remove all the  
> > packages in the .config but from external feeds, as feeds have not 
> > been  installed yet.
> > 
> > The only way to currently work around this, is to generate a fake 
> > config by running "make defconfig", then "make package/symlinks", copy 
> > the real config (which at this point disregards the previously 
> > generated config), and run make defconfig again. Something like this:
> > 
> > make defconfig
> > make package/symlinks
> > cp real.config .config
> > make defconfig
> > 
> > This change is removing the need for the first defconfig, making the 
> > process more logical for OpenWrt users using the package/symlinks target.
> > 
> > Signed-off-by: Mathieu Olivari <mathieu@qca.qualcomm.com>
> > ---
> >  include/toplevel.mk | 2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > diff --git a/include/toplevel.mk b/include/toplevel.mk index 
> > d8651d9..b3b344d 100644
> > --- a/include/toplevel.mk
> > +++ b/include/toplevel.mk
> > @@ -178,6 +178,7 @@ ifeq ($(SDK),1)
> >  else
> >  
> >  %::
> > +ifeq ($(filter package/symlinks%,$(MAKECMDGOALS)),)
> >  	@+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq
> >  	@( \
> >  		cp .config tmp/.config; \
> > @@ -186,6 +187,7 @@ else
> >  			printf "$(_R)WARNING: your configuration is out of
> sync. Please run make menuconfig, oldconfig or defconfig!$(_N)\n" >&2; \
> >  		fi \
> >  	)
> > +endif
> >  	@+$(ULIMIT_FIX) $(SUBMAKE) -r $@ $(if $(WARN_PARALLEL_ERROR), || { \
> >  		printf "$(_R)Build failed - please re-run with -j1 to see
> the real error message$(_N)\n" >&2; \
> >  		false; \
> > --
> > 1.9.1
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
Mathieu Olivari April 28, 2015, 6:32 p.m. UTC | #4
make package/symlinks can be used as an alternative to the ./scripts/feeds
command to update & install all feeds available in feeds.conf

Here is the code from the top Makefile:
# update all feeds, re-create index files, install symlinks
package/symlinks:
	$(SCRIPT_DIR)/feeds update -a
	$(SCRIPT_DIR)/feeds install -a

# re-create index files, install symlinks
package/symlinks-install:
	$(SCRIPT_DIR)/feeds update -i
	$(SCRIPT_DIR)/feeds install -a

# remove all symlinks, don't touch ./feeds
package/symlinks-clean:
	$(SCRIPT_DIR)/feeds uninstall -a

Thanks,
Mathieu

-----Original Message-----
From: 'Toerless Eckert' [mailto:tte@cs.fau.de] 
Sent: Monday, April 27, 2015 6:46 PM
To: Mathieu Olivari
Cc: 'Mathieu Olivari'; openwrt-devel@lists.openwrt.org
Subject: Re: [OpenWrt-Devel] [PATCH] build: don't call prereq for any
package/symlinks rules

So if "make package/symlinks" is optional, when is it needed ?

Sorry for the beginner q.

On Mon, Apr 27, 2015 at 05:15:36PM -0700, Mathieu Olivari wrote:
> I'm actually talking about the command below:
> $ make package/symlinks
> 
> Right after the git clone, it does open the menuconfig. Which ends-up 
> in generating a .config, which has to be deleted anyway as any package 
> from feed would get removed.
> 
> Thanks,
> Mathieu
> 
> -----Original Message-----
> From: openwrt-devel [mailto:openwrt-devel-bounces@lists.openwrt.org] 
> On Behalf Of Toerless Eckert
> Sent: Monday, April 27, 2015 4:59 PM
> To: Mathieu Olivari
> Cc: openwrt-devel@lists.openwrt.org
> Subject: Re: [OpenWrt-Devel] [PATCH] build: don't call prereq for any 
> package/symlinks rules
> 
> 
> Mathieu:
> 
> I can't quite follow your explanations. I ahve been building what 
> looks to me perfectly well working 14.07 images by just doing:
> 
> git clone git://git.openwrt.org/openwrt.git cd openwrt # Clean 
> workspace now
> 
> cp real.config .config
> make defconfig
> make
> 
> Your mail seems to indicate that that supposedly does not work. Can 
> you please tell me what exactly is breaking when i do that ?
> 
> Thanks
>     Toerless
> 
> On Mon, Apr 27, 2015 at 04:46:49PM -0700, Mathieu Olivari wrote:
> > Most of the time, we want to make sure OpenWrt has been configured 
> > and setup before start running make. However, in case of 
> > package/symlinks, forcing prereq as a dependency creates multiple
issues:
> > *when executed on a clean workspace, it will prompt for user input 
> > and open a menuconfig window before executing the feeds command *the 
> > only way around that is to provide a .config. However, the "prereq"
> >  target would then run a "make defconfig", which will remove all the 
> > packages in the .config but from external feeds, as feeds have not 
> > been  installed yet.
> > 
> > The only way to currently work around this, is to generate a fake 
> > config by running "make defconfig", then "make package/symlinks", 
> > copy the real config (which at this point disregards the previously 
> > generated config), and run make defconfig again. Something like this:
> > 
> > make defconfig
> > make package/symlinks
> > cp real.config .config
> > make defconfig
> > 
> > This change is removing the need for the first defconfig, making the 
> > process more logical for OpenWrt users using the package/symlinks
target.
> > 
> > Signed-off-by: Mathieu Olivari <mathieu@qca.qualcomm.com>
> > ---
> >  include/toplevel.mk | 2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > diff --git a/include/toplevel.mk b/include/toplevel.mk index 
> > d8651d9..b3b344d 100644
> > --- a/include/toplevel.mk
> > +++ b/include/toplevel.mk
> > @@ -178,6 +178,7 @@ ifeq ($(SDK),1)
> >  else
> >  
> >  %::
> > +ifeq ($(filter package/symlinks%,$(MAKECMDGOALS)),)
> >  	@+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq
> >  	@( \
> >  		cp .config tmp/.config; \
> > @@ -186,6 +187,7 @@ else
> >  			printf "$(_R)WARNING: your configuration is out of
> sync. Please run make menuconfig, oldconfig or defconfig!$(_N)\n" >&2; 
> \
> >  		fi \
> >  	)
> > +endif
> >  	@+$(ULIMIT_FIX) $(SUBMAKE) -r $@ $(if $(WARN_PARALLEL_ERROR), || {
\
> >  		printf "$(_R)Build failed - please re-run with -j1 to see
> the real error message$(_N)\n" >&2; \
> >  		false; \
> > --
> > 1.9.1
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

--
---
Toerless.Eckert@informatik.uni-erlangen.de
/C=de/A=d400/P=uni-erlangen/OU=informatik/S=Eckert/G=Toerless/
Felix Fietkau May 8, 2015, 10:19 a.m. UTC | #5
On 2015-04-28 01:46, Mathieu Olivari wrote:
> Most of the time, we want to make sure OpenWrt has been configured and
> setup before start running make. However, in case of package/symlinks,
> forcing prereq as a dependency creates multiple issues:
> *when executed on a clean workspace, it will prompt for user input
>  and open a menuconfig window before executing the feeds command
> *the only way around that is to provide a .config. However, the "prereq"
>  target would then run a "make defconfig", which will remove all the
>  packages in the .config but from external feeds, as feeds have not been
>  installed yet.
> 
> The only way to currently work around this, is to generate a fake config
> by running "make defconfig", then "make package/symlinks", copy the real
> config (which at this point disregards the previously generated config),
> and run make defconfig again. Something like this:
> 
> make defconfig
> make package/symlinks
> cp real.config .config
> make defconfig
> 
> This change is removing the need for the first defconfig, making the
> process more logical for OpenWrt users using the package/symlinks target.
> 
> Signed-off-by: Mathieu Olivari <mathieu@qca.qualcomm.com>
> ---
>  include/toplevel.mk | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/include/toplevel.mk b/include/toplevel.mk
> index d8651d9..b3b344d 100644
> --- a/include/toplevel.mk
> +++ b/include/toplevel.mk
> @@ -178,6 +178,7 @@ ifeq ($(SDK),1)
>  else
>  
>  %::
> +ifeq ($(filter package/symlinks%,$(MAKECMDGOALS)),)
I think this is the wrong approach for solving this - this means that if
somebody specifies multiple targets in addition to package/symlinks, the
other targets will be excluded from this as well.
It would make more sense to move the package/symlinks targets to
include/toplevel.mk, where they can bypass the %:: target entirely.

- Felix
diff mbox

Patch

diff --git a/include/toplevel.mk b/include/toplevel.mk
index d8651d9..b3b344d 100644
--- a/include/toplevel.mk
+++ b/include/toplevel.mk
@@ -178,6 +178,7 @@  ifeq ($(SDK),1)
 else
 
 %::
+ifeq ($(filter package/symlinks%,$(MAKECMDGOALS)),)
 	@+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq
 	@( \
 		cp .config tmp/.config; \
@@ -186,6 +187,7 @@  else
 			printf "$(_R)WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig!$(_N)\n" >&2; \
 		fi \
 	)
+endif
 	@+$(ULIMIT_FIX) $(SUBMAKE) -r $@ $(if $(WARN_PARALLEL_ERROR), || { \
 		printf "$(_R)Build failed - please re-run with -j1 to see the real error message$(_N)\n" >&2; \
 		false; \