diff options
author | David Benjamin <davidben@google.com> | 2018-06-29 15:54:42 -0400 |
---|---|---|
committer | David Benjamin <davidben@google.com> | 2018-07-02 18:50:12 -0400 |
commit | cb694f8cd65dfb4e73fedcfa04f92c8be7a2bcf6 (patch) | |
tree | 1864e4af430fe5f2b33beb0adad881430ba28cdb | |
parent | 9539985fb215439d3d379f60a381e6102ac49e4b (diff) | |
download | cmake-cb694f8cd65dfb4e73fedcfa04f92c8be7a2bcf6.tar.gz |
VS: Properly quote arguments in nasm.xml
Most arguments were quoted, but some weren't, causing problems if the
arguments contained whitespace.
In particular, the _STL_EXTRA_DISABLED_WARNINGS value takes spaces and
CMake's NASM support applies all add_definitions lines to NASM. The -D
flag is missing quotes, so projects using NASM and setting
_STL_EXTRA_DISABLED_WARNINGS break in the Visual Studio generator.
Likewise, the -o flag is missing quotes, which means filenames with
spaces do not work.
(The -U flag is unlikely to need quotes, but include them for
consistency.)
Extend the existing VSNASM test to cover these cases.
-rw-r--r-- | Templates/MSBuild/nasm.xml | 6 | ||||
-rw-r--r-- | Tests/VSNASM/CMakeLists.txt | 12 | ||||
-rw-r--r-- | Tests/VSNASM/bar.asm | 13 | ||||
-rw-r--r-- | Tests/VSNASM/include/foo-proc.asm | 2 | ||||
-rw-r--r-- | Tests/VSNASM/main.c | 3 |
5 files changed, 30 insertions, 6 deletions
diff --git a/Templates/MSBuild/nasm.xml b/Templates/MSBuild/nasm.xml index 92f8548c39..a5dcdd5e20 100644 --- a/Templates/MSBuild/nasm.xml +++ b/Templates/MSBuild/nasm.xml @@ -36,7 +36,7 @@ <DataSource Persistence="ProjectFile" ItemType="NASM" SourceType="Item"/> </StringProperty.DataSource> </StringProperty> - <StringProperty Name="OutputFormat" Category="Assembler Options" HelpUrl="http://www.nasm.us/doc/" DisplayName="Output File Name" Description="Specify Output Filename.-o [value]" Switch="-o [value]"/> + <StringProperty Name="OutputFormat" Category="Assembler Options" HelpUrl="http://www.nasm.us/doc/" DisplayName="Output File Name" Description="Specify Output Filename.-o [value]" Switch="-o "[value]""/> <BoolProperty Name="tasmmode" Category="Advanced" HelpUrl="http://www.nasm.us/doc/" DisplayName="SciTech TASM compatible mode" Description="assemble in SciTech TASM compatible mode" Switch="-t"/> <EnumProperty Name="Outputswitch" Category="Assembler Options" HelpUrl="http://www.nasm.us/doc/" DisplayName="Output Switch" Description="Select the type of output format required. Linking Should be disabled for ELF and Binary ,else error will popup"> <EnumValue Name="0" DisplayName="Object File win32" Switch="-fwin32"/> @@ -48,8 +48,8 @@ <BoolProperty Name="GenerateDebugInformation" Category="Assembler Options" DisplayName="Generate Debug Information" Description="Generates Debug Information. (-g)" HelpUrl="http://www.nasm.us/doc/" Switch="-g"/> <StringListProperty Name="ErrorReporting" Category="Advanced" HelpUrl="http://www.nasm.us/doc/" DisplayName="Redirect Error Messages to File" Description="Drops the error Message on specified device" Switch="-Z "[value]""/> <StringListProperty Name="IncludePaths" Category="General" DisplayName="Include Paths" Description="Sets path for include file. (-I[path])" HelpUrl="http://www.nasm.us/doc/" Switch="-I"[value]""/> - <StringListProperty Name="PreprocessorDefinitions" Category="Preprocessor" HelpUrl="http://www.nasm.us/doc/" DisplayName="Preprocessor Definitions" Description="Defines a text macro with the given name. (-D[symbol])" Switch="-D[value]"/> - <StringListProperty Name="UndefinePreprocessorDefinitions" Category="Preprocessor" HelpUrl="http://www.nasm.us/doc/" DisplayName="Undefine Preprocessor Definitions" Description="Undefines a text macro with the given name. (-U[symbol])" Switch="-U[value]"/> + <StringListProperty Name="PreprocessorDefinitions" Category="Preprocessor" HelpUrl="http://www.nasm.us/doc/" DisplayName="Preprocessor Definitions" Description="Defines a text macro with the given name. (-D[symbol])" Switch="-D"[value]""/> + <StringListProperty Name="UndefinePreprocessorDefinitions" Category="Preprocessor" HelpUrl="http://www.nasm.us/doc/" DisplayName="Undefine Preprocessor Definitions" Description="Undefines a text macro with the given name. (-U[symbol])" Switch="-U"[value]""/> <EnumProperty Name="ErrorReportingFormat" Category="Advanced" HelpUrl="http://www.nasm.us/doc/" DisplayName="Error Reporting Format" Description="Select the error reporting format ie. GNU or VC"> <EnumValue Name="0" DisplayName="-Xgnu GNU format: Default format" Switch="-Xgnu"/> <EnumValue Name="1" DisplayName="-Xvc Style used by Microsoft Visual C++" Switch="-Xvc"/> diff --git a/Tests/VSNASM/CMakeLists.txt b/Tests/VSNASM/CMakeLists.txt index c2e29df257..821d0227e3 100644 --- a/Tests/VSNASM/CMakeLists.txt +++ b/Tests/VSNASM/CMakeLists.txt @@ -1,10 +1,20 @@ cmake_minimum_required(VERSION 2.8.12) project(VSNASM C ASM_NASM) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) add_definitions(-DTESTx64) string(APPEND CMAKE_ASM_NASM_FLAGS " -DTEST2x64") else() add_definitions(-DTESTi386) endif() + +# Test quoting for definitions with spaces. +add_definitions("-DEAX_COMMA_SPACE_ZERO=eax, 0") + +# Test quoting for file names with spaces. The file is generated because CMake +# itself cannot have files with spaces. +file(READ bar.asm BAR_ASM_CONTENTS) +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/bar baz.asm" "${BAR_ASM_CONTENTS}") + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) -add_executable(VSNASM main.c foo.asm) +add_executable(VSNASM main.c foo.asm "${CMAKE_CURRENT_BINARY_DIR}/bar baz.asm") diff --git a/Tests/VSNASM/bar.asm b/Tests/VSNASM/bar.asm new file mode 100644 index 0000000000..b486d82aec --- /dev/null +++ b/Tests/VSNASM/bar.asm @@ -0,0 +1,13 @@ +section .text +%ifdef TEST2x64 +global bar +%else +global _bar +%endif +%ifdef TESTx64 +bar: +%else +_bar: +%endif + mov EAX_COMMA_SPACE_ZERO + ret diff --git a/Tests/VSNASM/include/foo-proc.asm b/Tests/VSNASM/include/foo-proc.asm index 450a7919b5..eb5bb2b06d 100644 --- a/Tests/VSNASM/include/foo-proc.asm +++ b/Tests/VSNASM/include/foo-proc.asm @@ -3,5 +3,5 @@ foo: %else _foo: %endif - mov eax, 0 + mov EAX_COMMA_SPACE_ZERO ret diff --git a/Tests/VSNASM/main.c b/Tests/VSNASM/main.c index 18ddb7826f..b1401b6982 100644 --- a/Tests/VSNASM/main.c +++ b/Tests/VSNASM/main.c @@ -1,5 +1,6 @@ extern int foo(void); +extern int bar(void); int main(void) { - return foo(); + return foo() + bar(); } |