[Vm-dev] issue with cmake
Levente Uzonyi
leves at elte.hu
Fri Jan 22 15:44:22 UTC 2010
Idézet ("David T. Lewis" <lewis at 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
-------------- next part --------------
# Yes, it's true: you can write makefiles in COBOL.
#
# Last edited: 2009-08-27 19:30:47 by piumarta on emilia-2.local
PROJECT (squeak)
CMAKE_MINIMUM_REQUIRED (VERSION 2.6.2)
IF (NOT DEFINED VM_HOST OR NOT DEFINED VM_VERSION)
MESSAGE (FATAL_ERROR "
You MUST NOT run CMake directly the first time you configure a build.
Run 'platforms/unix/cmake/configure' from within your build directory."
)
ENDIF (NOT DEFINED VM_HOST OR NOT DEFINED VM_VERSION)
SET (prefix ${CMAKE_INSTALL_PREFIX})
SET (version ${VM_VERSION})
SET (bindir bin)
SET (imgdir lib/squeak)
SET (plgdir lib/squeak/${version})
SET (mandir man/man1)
SET (docdir share/doc/squeak-${version})
GET_CMAKE_PROPERTY (vars VARIABLES)
FOREACH (opt ${vars})
IF (opt MATCHES "OPT--.*")
STRING (REGEX REPLACE "OPT--([^=]*)" "\\1" var ${opt})
IF (var MATCHES ".*=.*")
STRING (REGEX REPLACE "([^=]*)=.*" "\\1" first ${var})
STRING (REGEX REPLACE "[^=]*=(.*)" "\\1" rest ${var})
MESSAGE (STATUS "Setting ${first} to ${rest}=${${opt}}")
SET (var ${first})
SET (${var} ${rest}=${${opt}})
ELSE ()
MESSAGE (STATUS "Setting ${var} to ${${opt}}")
SET (${var} ${${opt}})
ENDIF ()
ENDIF ()
ENDFOREACH (opt)
SET (CMAKE_INSTALL_PREFIX ${prefix})
SET (bld ${CMAKE_BINARY_DIR})
SET (unix ${CMAKE_SOURCE_DIR})
SET (config ${unix}/cmake)
GET_FILENAME_COMPONENT (cross ${unix}/../Cross ABSOLUTE)
IF (OPT--src)
GET_FILENAME_COMPONENT (src ${OPT--src} ABSOLUTE)
ELSE (SRC)
SET (src ${unix}/src)
ENDIF (OPT--src)
IF (NOT EXISTS ${src})
MESSAGE (FATAL_ERROR "
Source directory ${src} does not exist."
)
ENDIF (NOT EXISTS ${src})
INCLUDE (${config}/Utils.cmake)
INCLUDE (${config}/Plugins.cmake)
STRING (REGEX REPLACE "([^-]*)-([^-]*)-([^-]*).*" "\\1" VM_HOST_CPU ${VM_HOST})
STRING (REGEX REPLACE "([^-]*)-([^-]*)-([^-]*).*" "\\2" VM_HOST_VENDOR ${VM_HOST})
STRING (REGEX REPLACE "([^-]*)-([^-]*)-([^-]*).*" "\\3" VM_HOST_OS ${VM_HOST})
SET (vm-host "${VM_HOST}")
SET (vm-host-os "${VM_HOST_OS}")
SET (vm-host-cpu "${VM_HOST_CPU}")
IF (OPT--CFLAGS)
SET (CMAKE_C_FLAGS "${OPT--CFLAGS}")
ELSE (CFLAGS)
SET (CMAKE_C_FLAGS "${CFLAGS}")
ENDIF ()
IF (NOT CMAKE_C_FLAGS)
IF (CMAKE_COMPILER_IS_GNUCC)
IF (VM_HOST_CPU MATCHES "i.86")
SET (CMAKE_C_FLAGS "-g -O2 -fomit-frame-pointer")
ELSEIF (VM_HOST_CPU STREQUAL "ppc" OR VM_HOST_CPU STREQUAL "powerpc")
SET (CMAKE_C_FLAGS "-g -O3 -funroll-loops -mcpu=750 -mno-fused-madd")
ENDIF ()
ELSE ()
SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS_RELEASE}")
ENDIF (CMAKE_COMPILER_IS_GNUCC)
ENDIF (NOT CMAKE_C_FLAGS)
IF (NOT CMAKE_C_FLAGS)
SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS_RELEASE}")
ENDIF (NOT CMAKE_C_FLAGS)
MESSAGE (STATUS "Using CFLAGS ${CMAKE_C_FLAGS}")
MACRO (USE_LIBRARY lib)
LIST (APPEND squeak_libs "${lib}")
ENDMACRO (USE_LIBRARY)
MACRO (USE_FRAMEWORK fwk)
USE_LIBRARY ("-framework ${fwk}")
ENDMACRO (USE_FRAMEWORK)
MACRO (CONFIG_DEFINE var)
LIST (APPEND config_vars "${var}")
ENDMACRO (CONFIG_DEFINE var)
SET (UNIX 1)
CONFIG_DEFINE (UNIX)
SET (CMAKE_SKIP_BUILD_RPATH TRUE)
SET (CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET (CMAKE_INSTALL_RPATH "")
SET (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
INCLUDE (${unix}/vm/config.cmake)
CONFIGURE_PLUGINS ()
LIST (REMOVE_DUPLICATES config_vars)
FILE (WRITE ${bld}/config.h.in "")
FOREACH (var ${config_vars})
FILE (APPEND ${bld}/config.h.in "#cmakedefine ${var} @${var}@\n")
ENDFOREACH (var)
CONFIGURE_FILE (${bld}/config.h.in ${bld}/config.h)
INCLUDE (${unix}/vm/build.cmake)
BUILD_PLUGINS ()
SET (cmake ${unix}/../../cmake)
IF (EXISTS ${cmake}/Packages.cmake)
INCLUDE (${cmake}/Packages.cmake)
ENDIF ()
GET_CMAKE_PROPERTY (tmp VARIABLES)
LIST (REMOVE_ITEM tmp tmp)
LIST (SORT tmp)
FILE (WRITE ${bld}/config.status "")
FOREACH (var ${tmp})
FILE (APPEND ${bld}/config.status "${var}=${${var}}\n")
ENDFOREACH ()
More information about the Vm-dev
mailing list