[cmake-developers] [CMake 0015792]: Bad escaping of parentheses in POST_BUILD events if Ninja generator used
Mantis Bug Tracker
mantis at public.kitware.com
Thu Oct 15 04:49:07 EDT 2015
The following issue has been SUBMITTED.
======================================================================
https://public.kitware.com/Bug/view.php?id=15792
======================================================================
Reported By: Pavel Solodovnikov
Assigned To:
======================================================================
Project: CMake
Issue ID: 15792
Category: CMake
Reproducibility: always
Severity: major
Priority: normal
Status: new
======================================================================
Date Submitted: 2015-10-15 04:49 EDT
Last Modified: 2015-10-15 04:49 EDT
======================================================================
Summary: Bad escaping of parentheses in POST_BUILD events if
Ninja generator used
Description:
CMake generates wrong post-build events if it contains parentheses: they are not
escaped at all (e.g., copy some build artefacts to a directory that contains
parens).
I've attached a small example to reproduce the issue.
================= BEGIN EXAMPLE
cmake_minimum_required(VERSION 2.8.11)
project(example)
add_library(ex abc.cpp)
add_custom_command(TARGET ex POST_BUILD VERBATIM COMMAND cp -f "libex.a"
"mydir (abc)")
================= END EXAMPLE
After running cmake, we can easily observe that parentheses are not escaped
properly in post build event:
57 build libex.a: CXX_STATIC_LIBRARY_LINKER__ex CMakeFiles/ex.dir/abc.cpp.o
OBJECT_DIR = CMakeFiles/ex.dir
POST_BUILD = cd /mnt/sources/work/cmake_parens_test && cp -f libex.a mydir\
(abc)
PRE_LINK = :
TARGET_COMPILE_PDB = CMakeFiles/ex.dir/
TARGET_FILE = libex.a
TARGET_PDB = libex.pdb
It leads to build errors since it's not valid shell syntax:
FAILED: : && /home/prog/Downloads/cmake-3.4.0-rc1-Linux-i386/bin/cmake -E remove
libex.a && /bin/ar qc libex.a CMakeFiles/ex.dir/abc.cpp.o && /bin/ranlib
libex.a && cd /mnt/sources/work/cmake_parens_test && cp -f libex.a mydir\ (abc)
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `: &&
/home/prog/Downloads/cmake-3.4.0-rc1-Linux-i386/bin/cmake -E remove libex.a &&
/bin/ar qc libex.a CMakeFiles/ex.dir/abc.cpp.o && /bin/ranlib libex.a && cd
/mnt/sources/work/cmake_parens_test && cp -f libex.a mydir\ (abc)'
ninja: build stopped: subcommand failed.
It is possible to workaround this by using VERBATIM option in POST_BUILD event,
though.
Tested with the latest CMake v.3.4.0 rc1 (I just couldn't select it in "Product
Version" dropdown list, so I left CMake 3.3.2 there).
Steps to Reproduce:
1) Extract attached example.tar
2) Run "cmake -G "Ninja" ." inside extracted dir.
3) Examine produced build.ninja file.
======================================================================
Issue History
Date Modified Username Field Change
======================================================================
2015-10-15 04:49 Pavel SolodovnikovNew Issue
2015-10-15 04:49 Pavel SolodovnikovFile Added: cmake_parens_test.tar
======================================================================
More information about the cmake-developers
mailing list