[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