I noticed if you mkdir bld cd bld ../platforms/unix/cmake/configure --CFLAGS="-foo"
-- Setting CFLAGS=-foo -- Using CFLAGS -g -fomit-frame-pointer -O2
make -n confirms that the CFLAGS used for gcc is the "-g -fomit-frame-pointer -O2" not the -foo you asked for.
Now if you toss chicken entrails about you might get -- Setting CFLAGS=-fum -- Setting CFLAGS=-foo ---Setting -g -fomit-frame-pointer -O2 --Using CFLAGS -fum
Or you repeat the ../platforms/unix/cmake/configure --CFLAGS="-foo" a couple of times, then it takes well maybe...
Or various hand waving of CFLAGS= rm CMakeCache.txt
maybe some can explain the magic, or fix the script?
On Thu, Jan 21, 2010 at 07:52:12PM -0800, John McIntosh wrote:
I noticed if you mkdir bld cd bld ../platforms/unix/cmake/configure --CFLAGS="-foo"
-- Setting CFLAGS=-foo -- Using CFLAGS -g -fomit-frame-pointer -O2
make -n confirms that the CFLAGS used for gcc is the "-g -fomit-frame-pointer -O2" not the -foo you asked for.
Now if you toss chicken entrails about you might get -- Setting CFLAGS=-fum -- Setting CFLAGS=-foo ---Setting -g -fomit-frame-pointer -O2 --Using CFLAGS -fum
Or you repeat the ../platforms/unix/cmake/configure --CFLAGS="-foo" a couple of times, then it takes well maybe...
Or various hand waving of CFLAGS= rm CMakeCache.txt
maybe some can explain the magic, or fix the script?
I definitely can't explain the magic, but I've found that if I delete the entire contents of my build directory, then start fresh with configure, then the chicken entrails usually become better aligned.
FWIW, I'm also in the habit of using this directory structure:
./platforms ./src32 ./src64 ./build32 ./build64
Then from an empty build64 directory, I run configure with a command line such as:
../platforms/unix/cmake/configure --src=../src64 --without-gl --CFLAGS=' -g -m64'
Dave
On Thu, 21 Jan 2010, John McIntosh wrote:
maybe some can explain the magic, or fix the script?
There's a bug in platforms/unix/CMakeLists.txt. At line 29, there's STRING (REGEX REPLACE "OPT--(.*)" "\1" var ${opt}) This line splits the arguments in an unexpected way. If you replace the next line MESSAGE (STATUS "Setting ${var}=${${opt}}") with MESSAGE (STATUS "Setting ${var} to ${${opt}}") the error will be obvious. CFLAGS will be unset, so it will fall back to the default.
Levente
On Fri, 22 Jan 2010, Levente Uzonyi wrote:
On Thu, 21 Jan 2010, John McIntosh wrote:
maybe some can explain the magic, or fix the script?
There's a bug in platforms/unix/CMakeLists.txt. At line 29, there's STRING (REGEX REPLACE "OPT--(.*)" "\1" var ${opt}) This line splits the arguments in an unexpected way. If you replace the next line MESSAGE (STATUS "Setting ${var}=${${opt}}") with MESSAGE (STATUS "Setting ${var} to ${${opt}}") the error will be obvious. CFLAGS will be unset, so it will fall back to the default.
It turned out to be a CMake bug/feature. If opt contains an = character, say opt is "foo=bar" then ${opt} will be "foo" and ${$opt} will be "bar". If opt contains more than one = character, the last will count (dumb, dumb, dumb...), so if opt is "CFLAGS=-O3 -march=native" then $opt will be "CFLAGS=-O3 -march" and ${$opt} will be "native".
Levente
Levente
On Fri, Jan 22, 2010 at 01:49:01PM +0100, Levente Uzonyi wrote:
On Fri, 22 Jan 2010, Levente Uzonyi wrote:
On Thu, 21 Jan 2010, John McIntosh wrote:
maybe some can explain the magic, or fix the script?
There's a bug in platforms/unix/CMakeLists.txt. At line 29, there's STRING (REGEX REPLACE "OPT--(.*)" "\1" var ${opt}) This line splits the arguments in an unexpected way. If you replace the next line MESSAGE (STATUS "Setting ${var}=${${opt}}") with MESSAGE (STATUS "Setting ${var} to ${${opt}}") the error will be obvious. CFLAGS will be unset, so it will fall back to the default.
It turned out to be a CMake bug/feature. If opt contains an = character, say opt is "foo=bar" then ${opt} will be "foo" and ${$opt} will be "bar". If opt contains more than one = character, the last will count (dumb, dumb, dumb...), so if opt is "CFLAGS=-O3 -march=native" then $opt will be "CFLAGS=-O3 -march" and ${$opt} will be "native".
Levente,
Wow, nice debugging! Thanks.
Idézet ("David T. Lewis" lewis@mail.msen.com):
On Fri, Jan 22, 2010 at 01:49:01PM +0100, Levente Uzonyi wrote:
On Fri, 22 Jan 2010, Levente Uzonyi wrote:
On Thu, 21 Jan 2010, John McIntosh wrote:
maybe some can explain the magic, or fix the script?
There's a bug in platforms/unix/CMakeLists.txt. At line 29, there's STRING (REGEX REPLACE "OPT--(.*)" "\1" var ${opt}) This line splits the arguments in an unexpected way. If you replace the next line MESSAGE (STATUS "Setting ${var}=${${opt}}") with MESSAGE (STATUS "Setting ${var} to ${${opt}}") the error will be obvious. CFLAGS will be unset, so it will fall back to the default.
It turned out to be a CMake bug/feature. If opt contains an = character, say opt is "foo=bar" then ${opt} will be "foo" and ${$opt} will be "bar". If opt contains more than one = character, the last will count (dumb, dumb, dumb...), so if opt is "CFLAGS=-O3 -march=native" then $opt will be "CFLAGS=-O3 -march" and ${$opt} will be "native".
Levente,
Wow, nice debugging! Thanks.
Thanks, I made a quick-and-dirty fix which I attached.
Levente
vm-dev@lists.squeakfoundation.org