diff mbox

[1/2] apply-patches.sh: don't print anything when "-s" option is used

Message ID 1404906414-15197-1-git-send-email-fabio.porcedda@gmail.com
State Superseded
Headers show

Commit Message

Fabio Porcedda July 9, 2014, 11:46 a.m. UTC
The make "-s" option is used to enable the "Silent operation" so if
that option is used don't print anything as far as there isn't any
error.
Add the "-s" option to "apply-patches.sh" to enable silent operation.
Because "apply-patches.sh" is called in many places add a
"APPLY_PATCHES" variable to permit adding the "-s" easily.

Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
---
 boot/at91bootstrap/at91bootstrap.mk   |  2 +-
 boot/at91bootstrap3/at91bootstrap3.mk |  2 +-
 boot/barebox/barebox.mk               |  2 +-
 boot/uboot/uboot.mk                   |  2 +-
 linux/linux-ext-rtai.mk               |  4 ++--
 linux/linux.mk                        |  6 +++---
 package/Makefile.in                   |  6 ++++++
 package/cvs/cvs.mk                    |  2 +-
 package/gcc/gcc.mk                    |  4 ++--
 package/input-tools/input-tools.mk    |  2 +-
 package/mii-diag/mii-diag.mk          |  2 +-
 package/pkg-autotools.mk              | 12 ++++++------
 package/pkg-generic.mk                |  6 +++---
 package/setserial/setserial.mk        |  2 +-
 package/sysklogd/sysklogd.mk          |  2 +-
 package/sysvinit/sysvinit.mk          |  2 +-
 package/thttpd/thttpd.mk              |  2 +-
 support/scripts/apply-patches.sh      | 17 ++++++++++++++---
 18 files changed, 47 insertions(+), 30 deletions(-)

Comments

Thomas Petazzoni July 15, 2014, 7:28 p.m. UTC | #1
Dear Fabio Porcedda,

On Wed,  9 Jul 2014 13:46:53 +0200, Fabio Porcedda wrote:
> The make "-s" option is used to enable the "Silent operation" so if
> that option is used don't print anything as far as there isn't any
> error.
> Add the "-s" option to "apply-patches.sh" to enable silent operation.
> Because "apply-patches.sh" is called in many places add a
> "APPLY_PATCHES" variable to permit adding the "-s" easily.
> 
> Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>

Hum, yes, but why? The entire build process is anyway very noisy, so is
there really a point in silencing specifically this part? What is the
ultimate goal you're trying to achieve here?

Thanks!

Thomas
Fabio Porcedda July 17, 2014, 5:40 p.m. UTC | #2
On Tue, Jul 15, 2014 at 9:28 PM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> Dear Fabio Porcedda,
>
> On Wed,  9 Jul 2014 13:46:53 +0200, Fabio Porcedda wrote:
>> The make "-s" option is used to enable the "Silent operation" so if
>> that option is used don't print anything as far as there isn't any
>> error.
>> Add the "-s" option to "apply-patches.sh" to enable silent operation.
>> Because "apply-patches.sh" is called in many places add a
>> "APPLY_PATCHES" variable to permit adding the "-s" easily.
>>
>> Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
>
> Hum, yes, but why? The entire build process is anyway very noisy, so is
> there really a point in silencing specifically this part? What is the
> ultimate goal you're trying to achieve here?

My ultimate goal is to be able using the "-s" flags to silence all
parts, because sometimes i just want to build and view only ">>> *"
messages, errors, warning without anything else.

As example the "toolchain-external" target already do that when the
"-s" option is used.

I've silenced only this part because it was easy and it's anyway an improvement.

Maybe i can work on silencing other parts too if the feature is desired.

Best regards
Thomas Petazzoni July 17, 2014, 6:31 p.m. UTC | #3
Dear Fabio Porcedda,

On Thu, 17 Jul 2014 19:40:46 +0200, Fabio Porcedda wrote:

> > Hum, yes, but why? The entire build process is anyway very noisy, so is
> > there really a point in silencing specifically this part? What is the
> > ultimate goal you're trying to achieve here?
> 
> My ultimate goal is to be able using the "-s" flags to silence all
> parts, because sometimes i just want to build and view only ">>> *"
> messages, errors, warning without anything else.
> 
> As example the "toolchain-external" target already do that when the
> "-s" option is used.
> 
> I've silenced only this part because it was easy and it's anyway an improvement.
> 
> Maybe i can work on silencing other parts too if the feature is desired.

Ok, thanks for the explanation.

I guess we need to decide whether having a fully silent build in "make
-s" is a goal we should aim at. It seems like a good idea to me, but I
don't have a really strong opinion about this.

What do others think about this?

Thomas
Yann E. MORIN July 17, 2014, 8:29 p.m. UTC | #4
Thomas, All,

On 2014-07-17 20:31 +0200, Thomas Petazzoni spake thusly:
> On Thu, 17 Jul 2014 19:40:46 +0200, Fabio Porcedda wrote:
> 
> > > Hum, yes, but why? The entire build process is anyway very noisy, so is
> > > there really a point in silencing specifically this part? What is the
> > > ultimate goal you're trying to achieve here?
> > 
> > My ultimate goal is to be able using the "-s" flags to silence all
> > parts, because sometimes i just want to build and view only ">>> *"
> > messages, errors, warning without anything else.
> > 
> > As example the "toolchain-external" target already do that when the
> > "-s" option is used.
> > 
> > I've silenced only this part because it was easy and it's anyway an improvement.
> > 
> > Maybe i can work on silencing other parts too if the feature is desired.
> 
> Ok, thanks for the explanation.
> 
> I guess we need to decide whether having a fully silent build in "make
> -s" is a goal we should aim at. It seems like a good idea to me, but I
> don't have a really strong opinion about this.
> 
> What do others think about this?

Here's what I use for a silent build:

    brmake() {
        make "${@}" \
        |sed -r -e '/^.{4}>>>[[:space:]]+(.*).{5}$/!d; s//\1/;'
    }

Then calling 'brmake' instead of 'make', will get you only the >>> lines.

Of course, does not work if you invoke a CLI configurator, either
directly, or as a consequence of a missing .config. I basically
always call it with no argument, otherwise, I use plain 'make'.

Regards,
Yann E. MORIN.
Fabio Porcedda July 18, 2014, 8:18 a.m. UTC | #5
On Thu, Jul 17, 2014 at 10:29 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> Thomas, All,
>
> On 2014-07-17 20:31 +0200, Thomas Petazzoni spake thusly:
>> On Thu, 17 Jul 2014 19:40:46 +0200, Fabio Porcedda wrote:
>>
>> > > Hum, yes, but why? The entire build process is anyway very noisy, so is
>> > > there really a point in silencing specifically this part? What is the
>> > > ultimate goal you're trying to achieve here?
>> >
>> > My ultimate goal is to be able using the "-s" flags to silence all
>> > parts, because sometimes i just want to build and view only ">>> *"
>> > messages, errors, warning without anything else.
>> >
>> > As example the "toolchain-external" target already do that when the
>> > "-s" option is used.
>> >
>> > I've silenced only this part because it was easy and it's anyway an improvement.
>> >
>> > Maybe i can work on silencing other parts too if the feature is desired.
>>
>> Ok, thanks for the explanation.
>>
>> I guess we need to decide whether having a fully silent build in "make
>> -s" is a goal we should aim at. It seems like a good idea to me, but I
>> don't have a really strong opinion about this.
>>
>> What do others think about this?
>
> Here's what I use for a silent build:
>
>     brmake() {
>         make "${@}" \
>         |sed -r -e '/^.{4}>>>[[:space:]]+(.*).{5}$/!d; s//\1/;'
>     }
>
> Then calling 'brmake' instead of 'make', will get you only the >>> lines.

Nice, so i'm not the only one who likes a silent build ;-)

I think that a downside of this method is that even the stderr is
filtered as well so messages like warning or errors are filtered as
well.

> Of course, does not work if you invoke a CLI configurator, either
> directly, or as a consequence of a missing .config. I basically
> always call it with no argument, otherwise, I use plain 'make'.
>

Regards
Yann E. MORIN July 18, 2014, 8:15 p.m. UTC | #6
Fabio, All,

On 2014-07-18 10:18 +0200, Fabio Porcedda spake thusly:
> On Thu, Jul 17, 2014 at 10:29 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> > Thomas, All,
> >
> > On 2014-07-17 20:31 +0200, Thomas Petazzoni spake thusly:
> >> On Thu, 17 Jul 2014 19:40:46 +0200, Fabio Porcedda wrote:
> >>
> >> > > Hum, yes, but why? The entire build process is anyway very noisy, so is
> >> > > there really a point in silencing specifically this part? What is the
> >> > > ultimate goal you're trying to achieve here?
> >> >
> >> > My ultimate goal is to be able using the "-s" flags to silence all
> >> > parts, because sometimes i just want to build and view only ">>> *"
> >> > messages, errors, warning without anything else.
> >> >
> >> > As example the "toolchain-external" target already do that when the
> >> > "-s" option is used.
> >> >
> >> > I've silenced only this part because it was easy and it's anyway an improvement.
> >> >
> >> > Maybe i can work on silencing other parts too if the feature is desired.
> >>
> >> Ok, thanks for the explanation.
> >>
> >> I guess we need to decide whether having a fully silent build in "make
> >> -s" is a goal we should aim at. It seems like a good idea to me, but I
> >> don't have a really strong opinion about this.
> >>
> >> What do others think about this?
> >
> > Here's what I use for a silent build:
> >
> >     brmake() {
> >         make "${@}" \
> >         |sed -r -e '/^.{4}>>>[[:space:]]+(.*).{5}$/!d; s//\1/;'
> >     }
> >
> > Then calling 'brmake' instead of 'make', will get you only the >>> lines.
> 
> Nice, so i'm not the only one who likes a silent build ;-)

Well, I still believe the build should be verbose by default, otherwise
we would miss a lot of important information on bug reports. The problem
is where to store the build.log in case of a silent build, so the user
can provide it.

I think the best we can do is document a simple solution (like my little
function above, for example).

> I think that a downside of this method is that even the stderr is
> filtered as well so messages like warning or errors are filtered as
> well.

No, because only stdout is filtered, there's no redirection of stderr.

Regards,
Yann E. MORIN.
Fabio Porcedda July 21, 2014, 4:25 p.m. UTC | #7
On Fri, Jul 18, 2014 at 10:15 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> Fabio, All,
>
> On 2014-07-18 10:18 +0200, Fabio Porcedda spake thusly:
>> On Thu, Jul 17, 2014 at 10:29 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>> > Thomas, All,
>> >
>> > On 2014-07-17 20:31 +0200, Thomas Petazzoni spake thusly:
>> >> On Thu, 17 Jul 2014 19:40:46 +0200, Fabio Porcedda wrote:
>> >>

<snip>

>> >> I guess we need to decide whether having a fully silent build in "make
>> >> -s" is a goal we should aim at. It seems like a good idea to me, but I
>> >> don't have a really strong opinion about this.
>> >>
>> >> What do others think about this?
>> >
>> > Here's what I use for a silent build:
>> >
>> >     brmake() {
>> >         make "${@}" \
>> >         |sed -r -e '/^.{4}>>>[[:space:]]+(.*).{5}$/!d; s//\1/;'
>> >     }
>> >
>> > Then calling 'brmake' instead of 'make', will get you only the >>> lines.
>>
>> Nice, so i'm not the only one who likes a silent build ;-)
>
> Well, I still believe the build should be verbose by default, otherwise
> we would miss a lot of important information on bug reports. The problem
> is where to store the build.log in case of a silent build, so the user
> can provide it.

I don't know a way to store the full log (stdout & stderr) and view a
filtered version of stdout & the unfiltered stderr, maybe you have an
idea?

> I think the best we can do is document a simple solution (like my little
> function above, for example).

Yes, i think it's a good idea.

I personally prefer using a line like this:
 make | grep --color=never ">>> "
to be able to distinguish more easily stdoud messages from stderr messages.

Nevertheless, I still would like that this patch will be applied because:
- using "make -s" is still simpler that using some "make | sed
........", many tools have a quiet flag for this reason.
- is a work already done.
- does not change the usual behavior.
- it's just adds 12 line of code .

>> I think that a downside of this method is that even the stderr is
>> filtered as well so messages like warning or errors are filtered as
>> well.
>
> No, because only stdout is filtered, there's no redirection of stderr.

Good point, you are right.

Regards
Yann E. MORIN July 21, 2014, 5:16 p.m. UTC | #8
Fabio, All,

On 2014-07-21 18:25 +0200, Fabio Porcedda spake thusly:
> On Fri, Jul 18, 2014 at 10:15 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> > Well, I still believe the build should be verbose by default, otherwise
> > we would miss a lot of important information on bug reports. The problem
> > is where to store the build.log in case of a silent build, so the user
> > can provide it.
> 
> I don't know a way to store the full log (stdout & stderr) and view a
> filtered version of stdout & the unfiltered stderr, maybe you have an
> idea?

    brmake() {
        # This is a bash function, pipefail is not POSIX
        set -o pipefail
        make "${@}" 2>&1 \
        |tee build.log   \
        |sed -r -e '/^.{4}>>>[[:space:]]+(.*).{5}$/!d; s//\1/;'
    }

> > I think the best we can do is document a simple solution (like my little
> > function above, for example).
> 
> Yes, i think it's a good idea.
> 
> I personally prefer using a line like this:
>  make | grep --color=never ">>> "
> to be able to distinguish more easily stdoud messages from stderr messages.

Yes, why not. That's a bit trickier to handle, but no undoable. It would
need playing tricks with redirection and duplicating filedescriptors...

> Nevertheless, I still would like that this patch will be applied because:
> - using "make -s" is still simpler that using some "make | sed
> ........", many tools have a quiet flag for this reason.
> - is a work already done.
> - does not change the usual behavior.
> - it's just adds 12 line of code .

I'll have another look at it...

Regards,
Yann E. MORIN.
Yann E. MORIN July 21, 2014, 5:26 p.m. UTC | #9
Fabio, All,

On 2014-07-09 13:46 +0200, Fabio Porcedda spake thusly:
> The make "-s" option is used to enable the "Silent operation" so if
> that option is used don't print anything as far as there isn't any
> error.
> Add the "-s" option to "apply-patches.sh" to enable silent operation.
> Because "apply-patches.sh" is called in many places add a
> "APPLY_PATCHES" variable to permit adding the "-s" easily.
> 
> Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>

OK, this patch does two things:
  - introduce the APPLY_PATCHES variable, to be used instead of
    duplicating support/scripts/apply-patches.sh everywhere,
  - add the -s option to apply-patches

So, it should be split in two.

I did not initially notice that appy-patches was not always made silent,
but that it was conditional to the user using 'make -s' in the first
place.

So, I would not oppose that patch. After all, if the user uses make -s,
and it is not really complicated to propagate that to our sub-tools,
that's pretty OK.

However, see below...

[--SNIP--]
> diff --git a/package/Makefile.in b/package/Makefile.in
> index 97053ba..e1fdb4d 100644
> --- a/package/Makefile.in
> +++ b/package/Makefile.in
> @@ -218,6 +218,12 @@ FLEX:=$(shell which flex || type -p flex)
>  BISON:=$(shell which bison || type -p bison)
>  SED:=$(shell which sed || type -p sed) -i -e
>  
> +ifeq (,$(findstring s,$(MAKEFLAGS)))
> +APPLY_PATCHES = support/scripts/apply-patches.sh
> +else
> +APPLY_PATCHES = support/scripts/apply-patches.sh -s
> +endif

I would do:

    BR_SILENT = $(if $(findstring s,$(MAKEFLAGS)),YES)

    APPLY_PATCHES = support/scripts/apply-patches.sh $(if $(BR_SILENT),-s)

That way, we can re-use $(BR_SILENT) for other tools (I'm thinking of
graph-depends and our other custom tools in support/scripts/ .)

Regards,
Yann E. MORIN.
Fabio Porcedda July 25, 2014, 4:42 p.m. UTC | #10
On Mon, Jul 21, 2014 at 7:26 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> Fabio, All,
>
> On 2014-07-09 13:46 +0200, Fabio Porcedda spake thusly:
>> The make "-s" option is used to enable the "Silent operation" so if
>> that option is used don't print anything as far as there isn't any
>> error.
>> Add the "-s" option to "apply-patches.sh" to enable silent operation.
>> Because "apply-patches.sh" is called in many places add a
>> "APPLY_PATCHES" variable to permit adding the "-s" easily.
>>
>> Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
>
> OK, this patch does two things:
>   - introduce the APPLY_PATCHES variable, to be used instead of
>     duplicating support/scripts/apply-patches.sh everywhere,
>   - add the -s option to apply-patches
>
> So, it should be split in two.

Ok, done.

> I did not initially notice that appy-patches was not always made silent,
> but that it was conditional to the user using 'make -s' in the first
> place.
>
> So, I would not oppose that patch. After all, if the user uses make -s,
> and it is not really complicated to propagate that to our sub-tools,
> that's pretty OK.

Great!

> However, see below...
>
> [--SNIP--]
>> diff --git a/package/Makefile.in b/package/Makefile.in
>> index 97053ba..e1fdb4d 100644
>> --- a/package/Makefile.in
>> +++ b/package/Makefile.in
>> @@ -218,6 +218,12 @@ FLEX:=$(shell which flex || type -p flex)
>>  BISON:=$(shell which bison || type -p bison)
>>  SED:=$(shell which sed || type -p sed) -i -e
>>
>> +ifeq (,$(findstring s,$(MAKEFLAGS)))
>> +APPLY_PATCHES = support/scripts/apply-patches.sh
>> +else
>> +APPLY_PATCHES = support/scripts/apply-patches.sh -s
>> +endif
>
> I would do:
>
>     BR_SILENT = $(if $(findstring s,$(MAKEFLAGS)),YES)
>
>     APPLY_PATCHES = support/scripts/apply-patches.sh $(if $(BR_SILENT),-s)

Ok, done.

> That way, we can re-use $(BR_SILENT) for other tools (I'm thinking of
> graph-depends and our other custom tools in support/scripts/ .)

I've sent a new revision:
http://lists.busybox.net/pipermail/buildroot/2014-July/102796.html

Thanks and best regards
diff mbox

Patch

diff --git a/boot/at91bootstrap/at91bootstrap.mk b/boot/at91bootstrap/at91bootstrap.mk
index c5fd099..896804e 100644
--- a/boot/at91bootstrap/at91bootstrap.mk
+++ b/boot/at91bootstrap/at91bootstrap.mk
@@ -24,7 +24,7 @@  endef
 
 ifneq ($(call qstrip,$(BR2_TARGET_AT91BOOTSTRAP_CUSTOM_PATCH_DIR)),)
 define AT91BOOTSTRAP_APPLY_CUSTOM_PATCHES
-	support/scripts/apply-patches.sh $(@D) $(BR2_TARGET_AT91BOOTSTRAP_CUSTOM_PATCH_DIR) \
+	$(APPLY_PATCHES) $(@D) $(BR2_TARGET_AT91BOOTSTRAP_CUSTOM_PATCH_DIR) \
 		at91bootstrap-$(AT91BOOTSTRAP_VERSION)-\*.patch
 endef
 
diff --git a/boot/at91bootstrap3/at91bootstrap3.mk b/boot/at91bootstrap3/at91bootstrap3.mk
index 07df75d..be63252 100644
--- a/boot/at91bootstrap3/at91bootstrap3.mk
+++ b/boot/at91bootstrap3/at91bootstrap3.mk
@@ -21,7 +21,7 @@  AT91BOOTSTRAP3_MAKE_OPT = CROSS_COMPILE=$(TARGET_CROSS) DESTDIR=$(BINARIES_DIR)
 
 ifneq ($(AT91BOOTSTRAP3_CUSTOM_PATCH_DIR),)
 define AT91BOOTSTRAP3_APPLY_CUSTOM_PATCHES
-	support/scripts/apply-patches.sh $(@D) $(AT91BOOTSTRAP3_CUSTOM_PATCH_DIR) \
+	$(APPLY_PATCHES) $(@D) $(AT91BOOTSTRAP3_CUSTOM_PATCH_DIR) \
 		at91bootstrap3-\*.patch
 endef
 
diff --git a/boot/barebox/barebox.mk b/boot/barebox/barebox.mk
index f57d297..d970fbc 100644
--- a/boot/barebox/barebox.mk
+++ b/boot/barebox/barebox.mk
@@ -26,7 +26,7 @@  BAREBOX_LICENSE_FILES = COPYING
 
 ifneq ($(call qstrip,$(BR2_TARGET_BAREBOX_CUSTOM_PATCH_DIR)),)
 define BAREBOX_APPLY_CUSTOM_PATCHES
-	support/scripts/apply-patches.sh $(@D) \
+	$(APPLY_PATCHES) $(@D) \
 		$(BR2_TARGET_BAREBOX_CUSTOM_PATCH_DIR) \
 		barebox-$(BAREBOX_VERSION)-\*.patch
 endef
diff --git a/boot/uboot/uboot.mk b/boot/uboot/uboot.mk
index 532ac8b..522b531 100644
--- a/boot/uboot/uboot.mk
+++ b/boot/uboot/uboot.mk
@@ -87,7 +87,7 @@  UBOOT_POST_EXTRACT_HOOKS += UBOOT_COPY_OLD_LICENSE_FILE
 
 ifneq ($(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR)),)
 define UBOOT_APPLY_CUSTOM_PATCHES
-	support/scripts/apply-patches.sh $(@D) $(BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR) \
+	$(APPLY_PATCHES) $(@D) $(BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR) \
 		uboot-\*.patch
 endef
 
diff --git a/linux/linux-ext-rtai.mk b/linux/linux-ext-rtai.mk
index dcfab49..bf998d5 100644
--- a/linux/linux-ext-rtai.mk
+++ b/linux/linux-ext-rtai.mk
@@ -25,7 +25,7 @@  ifeq ($(RTAI_PATCH),)
 define RTAI_PREPARE_KERNEL
 	kver=`$(MAKE) $(LINUX_MAKE_FLAGS) -C $(LINUX_DIR) --no-print-directory -s kernelversion` ; \
 	if test -f $(RTAI_DIR)/base/arch/$(RTAI_ARCH)/patches/hal-linux-$${kver}-*patch ; then \
-		support/scripts/apply-patches.sh $(LINUX_DIR) 		\
+		$(APPLY_PATCHES) $(LINUX_DIR)		 		\
 			$(RTAI_DIR)/base/arch/$(RTAI_ARCH)/patches/ 	\
 			hal-linux-$${kver}-*patch ; \
 	else \
@@ -35,7 +35,7 @@  define RTAI_PREPARE_KERNEL
 endef
 else
 define RTAI_PREPARE_KERNEL
-	support/scripts/apply-patches.sh 	\
+	$(APPLY_PATCHES) 			\
 		$(LINUX_DIR)			\
 		$(dir $(RTAI_PATCH))		\
 		$(notdir $(RTAI_PATCH))
diff --git a/linux/linux.mk b/linux/linux.mk
index bd3f2ac..30ee740 100644
--- a/linux/linux.mk
+++ b/linux/linux.mk
@@ -148,11 +148,11 @@  LINUX_POST_DOWNLOAD_HOOKS += LINUX_DOWNLOAD_PATCHES
 define LINUX_APPLY_PATCHES
 	for p in $(LINUX_PATCHES) ; do \
 		if echo $$p | grep -q -E "^ftp://|^http://" ; then \
-			support/scripts/apply-patches.sh $(@D) $(DL_DIR) `basename $$p` ; \
+			$(APPLY_PATCHES) $(@D) $(DL_DIR) `basename $$p` ; \
 		elif test -d $$p ; then \
-			support/scripts/apply-patches.sh $(@D) $$p linux-\*.patch ; \
+			$(APPLY_PATCHES) $(@D) $$p linux-\*.patch ; \
 		else \
-			support/scripts/apply-patches.sh $(@D) `dirname $$p` `basename $$p` ; \
+			$(APPLY_PATCHES) $(@D) `dirname $$p` `basename $$p` ; \
 		fi \
 	done
 endef
diff --git a/package/Makefile.in b/package/Makefile.in
index 97053ba..e1fdb4d 100644
--- a/package/Makefile.in
+++ b/package/Makefile.in
@@ -218,6 +218,12 @@  FLEX:=$(shell which flex || type -p flex)
 BISON:=$(shell which bison || type -p bison)
 SED:=$(shell which sed || type -p sed) -i -e
 
+ifeq (,$(findstring s,$(MAKEFLAGS)))
+APPLY_PATCHES = support/scripts/apply-patches.sh
+else
+APPLY_PATCHES = support/scripts/apply-patches.sh -s
+endif
+
 HOST_CPPFLAGS  = -I$(HOST_DIR)/usr/include
 HOST_CFLAGS   ?= -O2
 HOST_CFLAGS   += $(HOST_CPPFLAGS)
diff --git a/package/cvs/cvs.mk b/package/cvs/cvs.mk
index 596eabf..3229e83 100644
--- a/package/cvs/cvs.mk
+++ b/package/cvs/cvs.mk
@@ -38,7 +38,7 @@  define CVS_DEBIAN_PATCHES
 		 do $(SED) 's,^\+\+\+ .*cvs-$(CVS_VERSION)/,+++ cvs-$(CVS_VERSION)/,' $$i; \
 		 done; \
 		); \
-		support/scripts/apply-patches.sh $(@D) $(@D)/debian/patches \*; \
+		$(APPLY_PATCHES) $(@D) $(@D)/debian/patches \*; \
 	fi
 endef
 endif
diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
index 5b60bc3..8be0233 100644
--- a/package/gcc/gcc.mk
+++ b/package/gcc/gcc.mk
@@ -44,14 +44,14 @@  endef
 ifeq ($(ARCH),powerpc)
 ifneq ($(BR2_SOFT_FLOAT),)
 define HOST_GCC_APPLY_POWERPC_PATCH
-	support/scripts/apply-patches.sh $(@D) package/gcc/$(GCC_VERSION) powerpc-link-with-math-lib.patch.conditional
+	$(APPLY_PATCHES) $(@D) package/gcc/$(GCC_VERSION) powerpc-link-with-math-lib.patch.conditional
 endef
 endif
 endif
 
 define HOST_GCC_APPLY_PATCHES
 	if test -d package/gcc/$(GCC_VERSION); then \
-	  support/scripts/apply-patches.sh $(@D) package/gcc/$(GCC_VERSION) \*.patch ; \
+	  $(APPLY_PATCHES) $(@D) package/gcc/$(GCC_VERSION) \*.patch ; \
 	fi;
 	$(HOST_GCC_APPLY_POWERPC_PATCH)
 endef
diff --git a/package/input-tools/input-tools.mk b/package/input-tools/input-tools.mk
index ae3f7d2..b1d0149 100644
--- a/package/input-tools/input-tools.mk
+++ b/package/input-tools/input-tools.mk
@@ -17,7 +17,7 @@  INPUT_TOOLS_TARGETS_$(BR2_PACKAGE_INPUT_TOOLS_JSTEST)      += jstest
 
 define INPUT_TOOLS_DEBIAN_PATCHES
 	if [ -d $(@D)/debian/patches ]; then \
-		support/scripts/apply-patches.sh $(@D) $(@D)/debian/patches \*.patch; \
+		$(APPLY_PATCHES) $(@D) $(@D)/debian/patches \*.patch; \
 	fi
 endef
 
diff --git a/package/mii-diag/mii-diag.mk b/package/mii-diag/mii-diag.mk
index 7a7bc7f..d2b3b9f 100644
--- a/package/mii-diag/mii-diag.mk
+++ b/package/mii-diag/mii-diag.mk
@@ -15,7 +15,7 @@  MII_DIAG_MAKE_OPT = $(TARGET_CONFIGURE_OPTS)
 
 define MII_DIAG_DEBIAN_PATCHES
 	if [ -d $(@D)/debian/patches ]; then \
-		support/scripts/apply-patches.sh $(@D) $(@D)/debian/patches \*.patch; \
+		$(APPLY_PATCHES) $(@D) $(@D)/debian/patches \*.patch; \
 	fi
 endef
 
diff --git a/package/pkg-autotools.mk b/package/pkg-autotools.mk
index ddff9bf..ba44660 100644
--- a/package/pkg-autotools.mk
+++ b/package/pkg-autotools.mk
@@ -184,11 +184,11 @@  define LIBTOOL_PATCH_HOOK
 			ltmain_version=`sed -n '/^[ 	]*VERSION=/{s/^[ 	]*VERSION=//;p;q;}' $$$$i | \
 			sed -e 's/\([0-9].[0-9]*\).*/\1/' -e 's/\"//'`; \
 			if test $$$${ltmain_version} = '1.5'; then \
-				support/scripts/apply-patches.sh $$$${i%/*} support/libtool buildroot-libtool-v1.5.patch; \
+				$(APPLY_PATCHES) $$$${i%/*} support/libtool buildroot-libtool-v1.5.patch; \
 			elif test $$$${ltmain_version} = "2.2"; then\
-				support/scripts/apply-patches.sh $$$${i%/*} support/libtool buildroot-libtool-v2.2.patch; \
+				$(APPLY_PATCHES) $$$${i%/*} support/libtool buildroot-libtool-v2.2.patch; \
 			elif test $$$${ltmain_version} = "2.4"; then\
-				support/scripts/apply-patches.sh $$$${i%/*} support/libtool buildroot-libtool-v2.4.patch; \
+				$(APPLY_PATCHES) $$$${i%/*} support/libtool buildroot-libtool-v2.4.patch; \
 			fi \
 		done \
 	fi
@@ -210,11 +210,11 @@  define AUTORECONF_HOOK
 			ltmain_version=`sed -n '/^[ 	]*VERSION=/{s/^[ 	]*VERSION=//;p;q;}' $$$$i | \
 			sed -e 's/\([0-9].[0-9]*\).*/\1/' -e 's/\"//'`; \
 			if test $$$${ltmain_version} = "1.5"; then \
-				support/scripts/apply-patches.sh $$$${i%/*} support/libtool buildroot-libtool-v1.5.patch; \
+				$(APPLY_PATCHES) $$$${i%/*} support/libtool buildroot-libtool-v1.5.patch; \
 			elif test $$$${ltmain_version} = "2.2"; then\
-				support/scripts/apply-patches.sh $$$${i%/*} support/libtool buildroot-libtool-v2.2.patch; \
+				$(APPLY_PATCHES) $$$${i%/*} support/libtool buildroot-libtool-v2.2.patch; \
 			elif test $$$${ltmain_version} = "2.4"; then\
-				support/scripts/apply-patches.sh $$$${i%/*} support/libtool buildroot-libtool-v2.4.patch; \
+				$(APPLY_PATCHES) $$$${i%/*} support/libtool buildroot-libtool-v2.4.patch; \
 			fi \
 		done \
 	fi
diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index 395e593..4e323e7 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -146,14 +146,14 @@  $(BUILD_DIR)/%/.stamp_patched:
 	@$(call step_start,patch)
 	@$(call MESSAGE,"Patching")
 	$(foreach hook,$($(PKG)_PRE_PATCH_HOOKS),$(call $(hook))$(sep))
-	$(foreach p,$($(PKG)_PATCH),support/scripts/apply-patches.sh $(@D) $(DL_DIR) $(notdir $(p))$(sep))
+	$(foreach p,$($(PKG)_PATCH),$(APPLY_PATCHES) $(@D) $(DL_DIR) $(notdir $(p))$(sep))
 	$(Q)( \
 	for D in $(PATCH_BASE_DIRS); do \
 	  if test -d $${D}; then \
 	    if test -d $${D}/$($(PKG)_VERSION); then \
-	      support/scripts/apply-patches.sh $(@D) $${D}/$($(PKG)_VERSION) \*.patch \*.patch.$(ARCH) || exit 1; \
+	      $(APPLY_PATCHES) $(@D) $${D}/$($(PKG)_VERSION) \*.patch \*.patch.$(ARCH) || exit 1; \
 	    else \
-	      support/scripts/apply-patches.sh $(@D) $${D} \*.patch \*.patch.$(ARCH) || exit 1; \
+	      $(APPLY_PATCHES) $(@D) $${D} \*.patch \*.patch.$(ARCH) || exit 1; \
 	    fi; \
 	  fi; \
 	done; \
diff --git a/package/setserial/setserial.mk b/package/setserial/setserial.mk
index 9f28216..6900197 100644
--- a/package/setserial/setserial.mk
+++ b/package/setserial/setserial.mk
@@ -16,7 +16,7 @@  define SETSERIAL_APPLY_DEBIAN_PATCHES
 	if [ -d $(@D)/debian/patches ]; then \
 		touch $(@D)/gorhack.h; \
 		rm $(@D)/debian/patches/01_makefile.dpatch; \
-		support/scripts/apply-patches.sh $(@D) $(@D)/debian/patches *.dpatch; \
+		$(APPLY_PATCHES) $(@D) $(@D)/debian/patches *.dpatch; \
 	fi
 endef
 
diff --git a/package/sysklogd/sysklogd.mk b/package/sysklogd/sysklogd.mk
index 37293da..9c4895d 100644
--- a/package/sysklogd/sysklogd.mk
+++ b/package/sysklogd/sysklogd.mk
@@ -18,7 +18,7 @@  endif
 
 define SYSKLOGD_DEBIAN_PATCHES
 	if [ -d $(@D)/debian/patches ]; then \
-		support/scripts/apply-patches.sh $(@D) $(@D)/debian/patches \*.patch; \
+		$(APPLY_PATCHES) $(@D) $(@D)/debian/patches \*.patch; \
 	fi
 endef
 
diff --git a/package/sysvinit/sysvinit.mk b/package/sysvinit/sysvinit.mk
index 3a7eac2..ff1ba24 100644
--- a/package/sysvinit/sysvinit.mk
+++ b/package/sysvinit/sysvinit.mk
@@ -18,7 +18,7 @@  endif
 
 define SYSVINIT_DEBIAN_PATCHES
 	if [ -d $(@D)/debian/patches ]; then \
-		support/scripts/apply-patches.sh $(@D) $(@D)/debian/patches \*.patch; \
+		$(APPLY_PATCHES) $(@D) $(@D)/debian/patches \*.patch; \
 	fi
 endef
 
diff --git a/package/thttpd/thttpd.mk b/package/thttpd/thttpd.mk
index 7be264a..7d663b9 100644
--- a/package/thttpd/thttpd.mk
+++ b/package/thttpd/thttpd.mk
@@ -14,7 +14,7 @@  THTTPD_LICENSE_FILES = thttpd.c
 ifneq ($(THTTPD_PATCH),)
 define THTTPD_DEBIAN_PATCHES
 	if [ -d $(@D)/debian/patches ]; then \
-		support/scripts/apply-patches.sh $(@D) $(@D)/debian/patches \*.patch; \
+		$(APPLY_PATCHES) $(@D) $(@D)/debian/patches \*.patch; \
 	fi
 endef
 endif
diff --git a/support/scripts/apply-patches.sh b/support/scripts/apply-patches.sh
index 37f2d81..8d4ba6d 100755
--- a/support/scripts/apply-patches.sh
+++ b/support/scripts/apply-patches.sh
@@ -6,6 +6,8 @@ 
 # (c) 2002 Erik Andersen <andersen@codepoet.org>
 #
 # Parameters:
+# - "-s",optional. Silent operation, don't print anything if there
+# isn't any error.
 # - the build directory, optional, default value is '.'. The place where are
 # the package sources.
 # - the patch directory, optional, default '../kernel-patches'. The place
@@ -28,6 +30,13 @@ 
 # applied. The list of the patches applied is stored in '.applied_patches_list'
 # file in the build directory.
 
+silent=
+if [[ $1 == "-s" ]] ; then
+    # add option to be used by the patch tool
+    silent=-s
+    shift
+fi
+
 # Set directories from arguments, or use defaults.
 builddir=${1-.}
 patchdir=${2-../kernel-patches}
@@ -77,14 +86,16 @@  function apply_patch {
 	return 0
 	;;
     esac
-    echo ""
-    echo "Applying $patch using ${type}: "
+    if [[ ! $silent ]] ; then
+	echo ""
+	echo "Applying $patch using ${type}: "
+    fi
     if [ ! -e "${path}/$patch" ] ; then
 	echo "Error: missing patch file ${path}/$patch"
 	exit 1
     fi
     echo $patch >> ${builddir}/.applied_patches_list
-    ${uncomp} "${path}/$patch" | patch -g0 -p1 -E -d "${builddir}" -t -N
+    ${uncomp} "${path}/$patch" | patch $silent -g0 -p1 -E -d "${builddir}" -t -N
     if [ $? != 0 ] ; then
         echo "Patch failed!  Please fix ${patch}!"
 	exit 1