[CMake] cmake 2.8.5 qt4 macros and file names with parentheses
Pierre-Francois Laquerre
pierre.francois at gmail.com
Mon Oct 31 16:39:16 EDT 2011
Short version: shouldn't the macros in Modules/Qt4Macros.cmake call
ADD_CUSTOM_COMMAND with VERBATIM?
Long version:
I'm trying to build
https://github.com/pflaquerre/torch/tree/build-under-path-with-parentheses
with cmake 2.8.5. It works fine when building in, say, /tmp/test/, but
not in /tmp/test(foo):
> cd "/tmp/test(foo)/build.rel/qtlua/qlua" && /usr/lib64/qt4/bin/rcc -name qlua -o /tmp/test(foo)/build.rel/qtlua/qlua/qrc_qlua.cxx /tmp/test(foo)/qtlua/qlua/qlua.qrc
> /bin/sh: -c: line 0: syntax error near unexpected token `('
> /bin/sh: -c: line 0: `cd "/tmp/test(foo)/build.rel/qtlua/qlua" && /usr/lib64/qt4/bin/rcc -name qlua -o /tmp/test(foo)/build.rel/qtlua/qlua/qrc_qlua.cxx /tmp/test(foo)/qtlua/qlua/qlua.qrc'
> make[2]: *** [qtlua/qlua/qrc_qlua.cxx] Error 1
> make[2]: Leaving directory `/tmp/test(foo)/build.rel'
> make[1]: *** [qtlua/qlua/CMakeFiles/libqlua.dir/all] Error 2
> make[1]: Leaving directory `/tmp/test(foo)/build.rel'
> make: *** [all] Error 2
The issue is obviously the lack of quotes around the paths, but I'm
not sure what is causing it. One of the offending cmake files is
https://github.com/pflaquerre/torch/blob/build-under-path-with-parentheses/qtlua/qlua/CMakeLists.txt,
which calls MACRO_QT4_AUTOGEN from
https://github.com/pflaquerre/torch/blob/build-under-path-with-parentheses/qtlua/cmake/MacroQt4AutoGen.cmake,
which in turn calls the cmake macros QT4_WRAP_UI, QT4_ADD_RESOURCES,
QT4_WRAP_CPP and QT4_GENERATE_MOC. However, it doesn't seem like those
cmake files are doing anything wrong as far as quoting goes. I had a
look at the latest Modules/Qt4Macros.cmake on github and noticed that
there are a few places where ADD_CUSTOM_COMMAND is not called with
VERBATIM. For instance, QT4_CREATE_MOC_COMMAND only uses VERBATIM on
WIN32:
> MACRO (QT4_CREATE_MOC_COMMAND infile outfile moc_flags moc_options)
> # For Windows, create a parameters file to work around command line length limit
> IF (WIN32)
> # Pass the parameters in a file. Set the working directory to
> # be that containing the parameters file and reference it by
> # just the file name. This is necessary because the moc tool on
> # MinGW builds does not seem to handle spaces in the path to the
> # file given with the @ syntax.
> GET_FILENAME_COMPONENT(_moc_outfile_name "${outfile}" NAME)
> GET_FILENAME_COMPONENT(_moc_outfile_dir "${outfile}" PATH)
> IF(_moc_outfile_dir)
> SET(_moc_working_dir WORKING_DIRECTORY ${_moc_outfile_dir})
> ENDIF(_moc_outfile_dir)
> SET (_moc_parameters_file ${outfile}_parameters)
> SET (_moc_parameters ${moc_flags} ${moc_options} -o "${outfile}" "${infile}")
> STRING (REPLACE ";" "\n" _moc_parameters "${_moc_parameters}")
> FILE (WRITE ${_moc_parameters_file} "${_moc_parameters}")
> ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
> COMMAND ${QT_MOC_EXECUTABLE} @${_moc_outfile_name}_parameters
> DEPENDS ${infile}
> ${_moc_working_dir}
> VERBATIM)
> ELSE (WIN32)
> ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
> COMMAND ${QT_MOC_EXECUTABLE}
> ARGS ${moc_flags} ${moc_options} -o ${outfile} ${infile}
> DEPENDS ${infile})
> ENDIF (WIN32)
> ENDMACRO (QT4_CREATE_MOC_COMMAND)
Is this on purpose? Adding VERBATIM to the ADD_CUSTOM_COMMAND calls in
that file solved the quoting issue and allowed me to build without any
problems. Is that project just misusing cmake, or is it really a
problem with Qt4Macros.cmake?
Regards,
Pierre-Francois
More information about the CMake
mailing list