v4l-dvb tree make bug
11 answers - 269 bytes -

I demand that Tais M. Hansen may or may not have written
Btw. the v4l-dvb repos ends up in an endless make loop when using
make-3.81. I had to downgrade to make-3.80 to be able to build v4l-dvb.
Works for me, although I only build a few of the modules.
No.1 | | 1330 bytes |
| 
Tais M. Hansen wrote:
Thursday 15 June 2006 00:08, Darren Salt wrote:
Btw. the v4l-dvb repos ends up in an endless make loop when using
make-3.81. I had to downgrade to make-3.80 to be able to build v4l-dvb.
>>Works for me, although I only build a few of the modules.
>
>>
>
>Strange. Running make-3.81 in a fresh clone of v4l-dvb makes it go into an
>endless loop. But downgrading and doing the exact same thing and it's fine.
>
>Maybe my make-3.81 is broken somehow then.
>
I can confirm the bug, but I don't know how to reproduce it nor fix it.
I have seen this happen on one of my boxes, but it doesnt happen any
more, (not since running make distclean && make allyesconfig) and I
don't recall upgrading make. I continue to see bug reports stating this
problem on the lists from other users.
I think that it would be a good assumption that a given version of make
could be the culprit, but I couldnt say that for sure based on my own
experience. If anybody else sees this problem, please report which
version of make you are running. It seems that upgrading (or
downgrading) make should do the trick
-Mike
No.2 | | 630 bytes |
| 
Em Qui, 2006-06-15 21:44 +0200, Tais M. Hansen escreveu:
Thursday 15 June 2006 00:08, Darren Salt wrote:
Btw. the v4l-dvb repos ends up in an endless make loop when using
make-3.81. I had to downgrade to make-3.80 to be able to build v4l-dvb.
Works for me, although I only build a few of the modules.
Strange. Running make-3.81 in a fresh clone of v4l-dvb makes it go into an
endless loop. But downgrading and doing the exact same thing and it's fine.
Maybe my make-3.81 is broken somehow then.
Maybe. I added a sanity check at make_makefile.pl script that may solve
the issue. Please test.
No.3 | | 2236 bytes |
| 
Weird!
Em Ter, 2006-06-20 21:57 +0200, Tais M. Hansen escreveu:
Tuesday 20 June 2006 18:24, Mauro Carvalho Chehab wrote:
Strange. Running make-3.81 in a fresh clone of v4l-dvb makes it go into
an endless loop. But downgrading and doing the exact same thing and it's
fine.
Maybe my make-3.81 is broken somehow then.
Maybe. I added a sanity check at make_makefile.pl script that may solve
the issue. Please test.
Still looping here. Fresh hg clone:
$ make allmodconfig
make -C /
make[1]: Entering directory `/'
No version yet.
scripts/make_makefile.pl
Creating Makefile.media.
make[2]: Entering directory `/'
scripts/make_makefile.pl
For me, with make 3.81, It runned twice, but the sanity check stopped it
on the second step. Are you using a distro-modified make or the gnu
vanilla one?
Those are my tests with make-3.81 (just compiled from gnu sources at
savanah: )
$hg clone master xxx
762 files updated, 0 files merged, 0 files removed, 0 files unresolved
$cd xxx
$make-3.81 allyesconfig
make-3.81 -C /home/v4l/xxx/v4l allyesconfig
make-3.81[1]: Entering directory `/home/v4l/xxx/v4l'
No version yet.
scripts/make_makefile.pl
Creating Makefile.media.
make[2]: Entering directory `/home/v4l/xxx/v4l'
creating symbolic links
/scripts/make_kconfig.pl 1
Preparing to compile for kernel version 2.6.16
VIDEPLANB requires version 2.6.99
VIDEVIN requires version 2.6.99
VIDEZR36120 requires version 2.6.99
VIDEM32R_AR_M64278 requires version 2.6.99
/scripts/make_noconfig.pl
make[2]: Leaving directory `/home/v4l/xxx/v4l'
make-3.81[1]: Leaving directory `/home/v4l/xxx/v4l'
make-3.81[1]: Entering directory `/home/v4l/xxx/v4l'
scripts/make_makefile.pl
creating symbolic links
/scripts/make_kconfig.pl 1
Preparing to compile for kernel version 2.6.16
VIDEPLANB requires version 2.6.99
VIDEVIN requires version 2.6.99
VIDEZR36120 requires version 2.6.99
VIDEM32R_AR_M64278 requires version 2.6.99
/scripts/make_noconfig.pl
make-3.81[1]: Leaving directory `/home/v4l/xxx/v4l'
Cheers,
Mauro.
No.4 | | 1449 bytes |
| 
Tais,
Em Qua, 2006-06-21 00:02 +0200, Tais M. Hansen escreveu:
Tuesday 20 June 2006 23:25, Mauro Carvalho Chehab wrote:
Maybe. I added a sanity check at make_makefile.pl script that may solve
the issue. Please test.
Still looping here. Fresh hg clone:
For me, with make 3.81, It runned twice, but the sanity check stopped it
on the second step. Are you using a distro-modified make or the gnu
vanilla one?
I found the bug and I've pushed the fix to the hg. Please test.
Btw, there is a bug with our Makefile and make 3.81:
make 3.81 is not accepting this:
@perl -e 'open IN,"$(DIR)/Makefile"; \
while (<IN>) { \
if (/^VERSIN\s*=\s*([0-9]+)/){ $$version=$$1; }\
elsif (/^PATCHLEVEL\s*=\s*([0-9]+)/){ $$level=$$1; }\
elsif (/^SUBLEVEL\s*=\s*([0-9]+)/){ $$sublevel=$$1; }\
elsif (/^EXTRAVERSIN\s*=\s*([^\s]+)\n/){ $$extra=$$1; } \
}; \
printf ("VERSIN=%s\nPATCHLEVEL:=%s\nSUBLEVEL:=%s\nKERNELREL EASE :=%s.%s.%s%s\n", \
$$version,$$level,$$sublevel,$$version,$$level,$$s ublevel,$$extra); \
printf ("SRCDIR:=$(DIR)\n");' $(obj)/.version
make 3.80, it removes all escape signals (the backslash at the end of
each line) before passing this to perl, but, on make 3.81, it just
passes those extra blackslashes to the app. If you remove the
backslashes, it will pass just the first line (as expected).
Cheers,
Mauro.
No.5 | | 1129 bytes |
| 
Wed, 21 Jun 2006, Tais M. Hansen wrote:
./scripts/make_noconfig.pl
It seems like it's looping here if v4l/.myconfig doesn't exist. Touching the
file or running the script above, creates the file and make stops looping.
Make distclean doesn't remove .myconfig, which is what Trent Piepho sent a
patch to the list about. Maybe you had the file there while testing?
The .myconfig file is part of the build system. It is made from .config,
and is the file that acually controls what gets built.
I think the problem is with make_noconfig.pl and the v4l/Makefile. If
noconfig.pl doesn't find the .myconfig file, it will call make again to
create it. If that make decides it needs to create a new Makefile.media
for some reason, before it generates .myconfig, it will call
make_noconfig.pl again, and make_noconfig.pl will call make again because
myconfig still doesn't exist, and so on.
I think the check Mauro added to not re-build Makefile.media when it
doesn't change will make things worse. But it sounds like he has a real
fix now.
No.6 | | 1283 bytes |
| 
Wed, Jun 21, 2006, Mauro Carvalho Chehab wrote:
Btw, there is a bug with our Makefile and make 3.81:
make 3.81 is not accepting this:
@perl -e 'open IN,"$(DIR)/Makefile"; \
while (<IN>) { \
if (/^VERSIN\s*=\s*([0-9]+)/){ $$version=$$1; }\
elsif (/^PATCHLEVEL\s*=\s*([0-9]+)/){ $$level=$$1; }\
elsif (/^SUBLEVEL\s*=\s*([0-9]+)/){ $$sublevel=$$1; }\
elsif (/^EXTRAVERSIN\s*=\s*([^\s]+)\n/){ $$extra=$$1; } \
}; \
printf ("VERSIN=%s\nPATCHLEVEL:=%s\nSUBLEVEL:=%s\nKERNELREL EASE :=%s.%s.%s%s\n", \
$$version,$$level,$$sublevel,$$version,$$level,$$s ublevel,$$extra); \
printf ("SRCDIR:=$(DIR)\n");' $(obj)/.version
make 3.80, it removes all escape signals (the backslash at the end of
each line) before passing this to perl, but, on make 3.81, it just
passes those extra blackslashes to the app. If you remove the
backslashes, it will pass just the first line (as expected).
NEWS.Debian.gz for make says for version 3.81.b3-1:
* WARNING: Backward-incompatibility! In order to comply with PSIX, the way in which GNU make processes backslash-newline sequences in command strings has changed. See the GNU make manual section "Command Execution" for details.
#Splitting-Lines
Johannes
No.7 | | 1149 bytes |
| 
This message is in MIME format which your mailer apparently does not support.
You either require a newer version of your software which supports MIME, or
a separate MIME decoding utility. Alternatively, ask the sender of this
message to resend it in a different format.
Content-Type: text/plain; charset=us-ascii
I demand that Mauro Carvalho Chehab may or may not have written
[snip]
Btw, there is a bug with our Makefile and make 3.81:
make 3.81 is not accepting this:
@perl -e 'open IN,"$(DIR)/Makefile"; \
while (<IN>) { \
if (/^VERSIN\s*=\s*([0-9]+)/){ $$version=$$1; }\
elsif (/^PATCHLEVEL\s*=\s*([0-9]+)/){ $$level=$$1; }\
[snip rest]
make 3.80, it removes all escape signals (the backslash at the end of
each line) before passing this to perl, but, on make 3.81, it just passes
those extra blackslashes to the app. If you remove the backslashes, it will
pass just the first line (as expected).
Fix: replace "\\\n" with "'\\\n'", i.e. put an apostrophe before the
backslash and another at the start of the following line. Patch attached.
No.8 | | 895 bytes |
| 
Em Qua, 2006-06-21 23:57 +0200, Johannes Stezenbach escreveu:
Wed, Jun 21, 2006, Mauro Carvalho Chehab wrote:
Btw, there is a bug with our Makefile and make 3.81:
NEWS.Debian.gz for make says for version 3.81.b3-1:
* WARNING: Backward-incompatibility! In order to comply with PSIX, the way in which GNU make processes backslash-newline sequences in command strings has changed. See the GNU make manual section "Command Execution" for details.
#Splitting-Lines
It is not working as expected. For example, if I create this as a
Makefile:
test:
@echo ' hello \
world'
with make 3.80, it produces:
$ make-3.80 test
hello world
with make -3.81, as stated at the above comment, it should produce
"hello word", but, instead, it does:
$ make-3.81 test
hello \
world
Johannes
Cheers,
Mauro.
No.9 | | 1197 bytes |
| 
Thu, Jun 22, 2006 at 09:12:19AM -0300, Mauro Carvalho Chehab wrote:
Em Qua, 2006-06-21 23:57 +0200, Johannes Stezenbach escreveu:
Wed, Jun 21, 2006, Mauro Carvalho Chehab wrote:
Btw, there is a bug with our Makefile and make 3.81:
NEWS.Debian.gz for make says for version 3.81.b3-1:
* WARNING: Backward-incompatibility! In order to comply with PSIX, the way in which GNU make processes backslash-newline sequences in command strings has changed. See the GNU make manual section "Command Execution" for details.
#Splitting-Lines
It is not working as expected. For example, if I create this as a
Makefile:
test:
@echo ' hello \
world'
with make 3.80, it produces:
$ make-3.80 test
hello world
with make -3.81, as stated at the above comment, it should produce
"hello word", but, instead, it does:
$ make-3.81 test
hello \
world
This is the documented behaviour -- PSIX requires make not to
mess with the command strings but to pass them unmodified
to the shell for evaluation:
$ echo 'foo\
bar'
foo\
bar
$ $ echo "foo\
bar"
foobar
$
Johannes
No.10 | | 983 bytes |
| 
I demand that Trent Piepho may or may not have written
Thu, 22 Jun 2006, Darren Salt wrote:
>Fix: replace "\\\n" with "'\\\n'", i.e. put an apostrophe before the
>backslash and another at the start of the following line. Patch attached.
That works well. It's a little tricky, in that you need to have the '\'
appear right after the closing quote, so the shell will merge the strings.
[snip]
This is true
Another way, is to take advantage of how perl will allow multiple -e
options, so you can do:
@perl \
-e 'first line of code' \
-e 'second line of code' \
-e 'last line'
Better indention, I think.
Definitely better. ("Indention"? "Indentation", surely)
There is also Mauro's fix of packing everything on one line, but that is a
little harder to read.
Agreed. I'd go with the multiple-"-e" fix.
No.11 | | 883 bytes |
| 
Thu, 22 Jun 2006, Darren Salt wrote:
Fix: replace "\\\n" with "'\\\n'", i.e. put an apostrophe before the
backslash and another at the start of the following line. Patch attached.
That works well. It's a little tricky, in that you need to have the '\'
appear right after the closing quote, so the shell will merge the strings.
For example, this won't work because of the space between ' and \.
@ perl -e 'first line' \
'second line'
Another way, is to take adavantage of how perl will allow mutliple -e options,
so you can do:
@perl \
-e 'first line of code' \
-e 'second line of code' \
-e 'last line'
Better indention, I think. There is also Mauro's fix of packing everything on
one line, but that is a little harder to read.