Closed Bug 616005 Opened 15 years ago Closed 15 years ago

"configure: line 11990: test: : integer expression expected"

Categories

(Firefox Build System :: General, defect)

All
Linux
defect
Not set
normal

Tracking

(Not tracked)

RESOLVED DUPLICATE of bug 591152

People

(Reporter: dholbert, Unassigned)

References

()

Details

(Keywords: regression, Whiteboard: build_warning)

Every fresh build, on Linux at least, has this bit of warning-spew amongst the initial configure lines: > checking for clock_gettime(CLOCK_MONOTONIC) and -lrt... yes > /builds/moz2_slave/mozilla-central-linux/build/configure: line 11990: test: : integer expression expected > checking for res_ninit()... yes http://tinderbox.mozilla.org/showlog.cgi?log=Firefox/1291231082.1291237625.23425.gz This is a regression from this change: http://hg.mozilla.org/mozilla-central/rev/ee594fb0fa3e#l1.121 The responsible line is: > if test -z "$MACOS_DEPLOYMENT_TARGET" -o "$MACOS_DEPLOYMENT_TARGET" -ge "100300"; then which is effectively equivalent to: if test -z "$FOO" -o "$FOO" -ge 5; then echo OHAI; fi (that gives me the same warning, until I define FOO & set it to a numeric value) Basically, it looks like test doesn't short-circuit "-o" or-operations -- it evaluates both arguments. In contrast, it does short-circuit when "||" is used in place of "-o". (or at least, no warning is spammed when I substitute in "||") The line in question used to use "||", until the changeset noted above changed it to "-o".
ah, so it looks like "||" is evaluated by the shell -- not by 'test' -- so it's not correct either. That is: FOO=6; if test -z $FOO || $FOO -ge 5; then echo OHAI; fi prints out: 6: command not found which implies that I'm trying to run "$FOO -ge 5" as a command. So neither the old code nor the new code is quite what we want.
"-a" doesn't short-circuit either -- that is: > if test -z "$FOO" -o \( -n "$FOO" -a "$FOO" -ge 5 \); then echo OHAI; fi I think we might want to just expand this into separate "if" statements, like so: DO_WCRTOMB_CHECK=0 # new helper variable if test -z "$MACOS_DEPLOYMENT_TARGET"; then DO_WCRTOMB_CHECK=1 else if test "$MACOS_DEPLOYMENT_TARGET" -ge "100300"; then DO_WCRTOMB_CHECK=1 fi fi This seems to work locally, and provides the logic I'd expect from the original statement without any warnings. khuey, does that look ok? Or do you know of a more graceful way to do this?
(In reply to comment #2) > "-a" doesn't short-circuit either -- that is: > > if test -z "$FOO" -o \( -n "$FOO" -a "$FOO" -ge 5 \); then echo OHAI; fi Sorry, I didn't finish that thought -- I meant to say that the above one-liner still produces an "integer expression expected" warning message, when FOO is unset or non-numeric. (hence the need to expand into a multi-line check)
(In reply to comment #1) > ah, so it looks like "||" is evaluated by the shell -- not by 'test' [...] > So neither the old code nor the new code is quite what we want. Oh, I just noticed that the old code uses "test" twice -- it's not just a s/-o/||/ from the current code. That's probably cleaner than expanding as in Comment 2.
Status: NEW → RESOLVED
Closed: 15 years ago
Resolution: --- → DUPLICATE
Product: Core → Firefox Build System
You need to log in before you can comment on or make changes to this bug.