[cmake-developers] [CMake 0015969]: String property broken in cmake 3.5.0-rc2 with XCode

Mantis Bug Tracker mantis at public.kitware.com
Thu Feb 11 02:58:31 EST 2016


The following issue has been SUBMITTED. 
====================================================================== 
https://public.kitware.com/Bug/view.php?id=15969 
====================================================================== 
Reported By:                A. Klitzing
Assigned To:                
====================================================================== 
Project:                    CMake
Issue ID:                   15969
Category:                   CMake
Reproducibility:            always
Severity:                   major
Priority:                   normal
Status:                     new
====================================================================== 
Date Submitted:             2016-02-11 02:58 EST
Last Modified:              2016-02-11 02:58 EST
====================================================================== 
Summary:                    String property broken in cmake 3.5.0-rc2 with XCode
Description: 
We build our application for iOS with cmake and iOS toolchain file [1].

We pass some strings with "-D" property to the compiler. In cmake 3.5.0rc2 (rc1
not tested) the build will fail as the quotes of the strings are broken.

Same code works with cmake 3.4.1.


[1] https://github.com/cristeab/ios-cmake


Steps to Reproduce: 
1. cmake ../source -DCMAKE_BUILD_TYPE=release -DCMAKE_PREFIX_PATH=/[...]/dist
-DCMAKE_TOOLCHAIN_FILE=../source/cmake/iOS.toolchain.cmake -GXcode

2. xcodebuild -target install -configuration Release

3. Compiler failed


Additional Information: 
Snippets of compiler cmdline:
See at -DVERSION=


3.5.0-rc2:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
-x c++ -arch armv7 [.....] -std=c++11 -ObjC++ -fPIC
-DVERSION=\\1.6.3+5-default-53920e4f2686\\ -MMD -MT dependencies [...] -c
/.../src/main.cpp -o
/.../build/src/XYZ.build/Release-iphoneos/XYZ.build/Objects-normal/armv7/main.o



3.4.1:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
-x c++ -arch armv7 [.....] -std=c++11 -fPIC
-DVERSION=\"1.6.3+5-default-53920e4f2686\" -MMD -MT dependencies -c
/.../src/main.cpp -o
/.../build/src/XYZ.build/Release-iphoneos/XYZ.build/Objects-normal/armv7/main.o




We use a little wrapper for quoted strings as XCode, windres and other compilers
works different here.




FUNCTION(GET_QUOTED_STRING _dest _str _filename)
	IF(CMAKE_GENERATOR STREQUAL Xcode)
		SET(tmp_var \\\\"${_str}\\\\")
	ELSEIF(NOT ${arg} MATCHES ".rc$")
		SET(tmp_var \\"${_str}\\")
	ELSE()
		SET(tmp_var ${_str})
	ENDIF()

	SET(${_dest} ${tmp_var} PARENT_SCOPE)
ENDFUNCTION()

FUNCTION(ADD_STRING_DEFINITION _str _def)
	IF(ARGN)
		FOREACH(arg ${ARGN})
			IF (${arg} MATCHES "^AppTargetName")
				SET(ARG_TYPE TARGET)
			ELSE()
				SET(ARG_TYPE SOURCE)
			ENDIF()

			IF(NOT "${_str}" STREQUAL "")
				GET_QUOTED_STRING(tmp_var ${_str} ${arg})
				SET(tmp_var =${tmp_var})
			ENDIF()

			SET_PROPERTY(${ARG_TYPE} ${arg} APPEND_STRING PROPERTY COMPILE_FLAGS "
-D${_def}${tmp_var}")
		ENDFOREACH()
	ELSE()
		IF(NOT "${_str}" STREQUAL "")
			GET_QUOTED_STRING(tmp_var ${_str} ${arg})
			SET(tmp_var =${tmp_var})
		ENDIF()
		ADD_DEFINITIONS(-D${_def}${tmp_var})
	ENDIF()
ENDFUNCTION()

FUNCTION(ADD_DEFINITION _def)
	ADD_STRING_DEFINITION("" ${_def} ${ARGN})
ENDFUNCTION()


##########################################

PROJECT(XYZ VERSION 1.6.3 CXX)
SET(VERSION_MERCURIAL ${PROJECT_VERSION}+5-default-53920e4f2686)
ADD_STRING_DEFINITION(${VERSION_MERCURIAL} "VERSION" main.cpp)

====================================================================== 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2016-02-11 02:58 A. Klitzing    New Issue                                    
======================================================================



More information about the cmake-developers mailing list