MantisBT - CMake
View Issue Details
0014210CMakeCMakepublic2013-06-09 14:472013-06-11 16:01
szx 
Alex Neundorf 
normalminoralways
closedfixed 
Windows 8
 
 
0014210: CMAKE_ASM_NASM_COMPILER is set to "nasm;yasm" instead of a full path
I have only yasm installed (no nasm) but CMake sets the CMAKE_ASM_NASM_COMPILER variable to "nasm;yasm" whereas in earlier versions (2.8.9?) it was set to the full path to the nasm/yasm compiler.
Test project:

project(test)
cmake_minimum_required(VERSION 2.8.11)
enable_language(ASM_NASM)
No tags attached.
? CMakeDetermineASM_NASMCompiler.cmake (1,011) 2013-06-10 18:28
https://public.kitware.com/Bug/file/4786/CMakeDetermineASM_NASMCompiler.cmake
? CMakeDetermineASMCompiler.cmake (7,415) 2013-06-10 18:28
https://public.kitware.com/Bug/file/4787/CMakeDetermineASMCompiler.cmake
Issue History
2013-06-09 14:47szxNew Issue
2013-06-09 15:04Alex NeundorfAssigned To => Alex Neundorf
2013-06-09 15:04Alex NeundorfStatusnew => assigned
2013-06-09 15:42Alex NeundorfNote Added: 0033259
2013-06-09 18:00szxNote Added: 0033260
2013-06-09 18:17Alex NeundorfNote Added: 0033261
2013-06-10 04:24szxNote Added: 0033262
2013-06-10 04:26szxNote Added: 0033263
2013-06-10 04:27szxNote Deleted: 0033263
2013-06-10 04:27szxNote Edited: 0033262bug_revision_view_page.php?bugnote_id=33262#r1183
2013-06-10 11:00szxNote Added: 0033266
2013-06-10 17:22Alex NeundorfNote Added: 0033267
2013-06-10 18:28Alex NeundorfFile Added: CMakeDetermineASM_NASMCompiler.cmake
2013-06-10 18:28Alex NeundorfFile Added: CMakeDetermineASMCompiler.cmake
2013-06-10 18:30Alex NeundorfNote Added: 0033268
2013-06-11 13:05szxNote Added: 0033271
2013-06-11 16:01Alex NeundorfNote Added: 0033272
2013-06-11 16:01Alex NeundorfStatusassigned => closed
2013-06-11 16:01Alex NeundorfResolutionopen => fixed

Notes
(0033259)
Alex Neundorf   
2013-06-09 15:42   
Does that happen on a fresh buildtree, or do you already have something in the cache (CMakeCache.txt) ?
(0033260)
szx   
2013-06-09 18:00   
Yes, it's a fresh build.
(0033261)
Alex Neundorf   
2013-06-09 18:17   
Which generator are you using ?
(0033262)
szx   
2013-06-10 04:24   
(edited on: 2013-06-10 04:27)
I tried MinGW Makefiles and Visual Studio 10/11, none of them worked. Here's the output from the MinGW one:

The C compiler identification is GNU 4.8.0
The CXX compiler identification is GNU 4.8.0
Check for working C compiler: C:/mingw32/bin/gcc.exe
Check for working C compiler: C:/mingw32/bin/gcc.exe -- works
Detecting C compiler ABI info
Detecting C compiler ABI info - done
Check for working CXX compiler: C:/mingw32/bin/g++.exe
Check for working CXX compiler: C:/mingw32/bin/g++.exe -- works
Detecting CXX compiler ABI info
Detecting CXX compiler ABI info - done
The ASM_NASM compiler identification is unknown
Found assembler: nasm;yasm
CMake Error: your ASM_NASM compiler: "nasm;yasm" was not found. Please set CMAKE_ASM_NASM_COMPILER to a valid compiler path or name.
Configuring incomplete, errors occurred!

Interestingly, VS10 generator printed a weird error during configuration:

The C compiler identification is MSVC 16.0.30319.1
The CXX compiler identification is MSVC 16.0.30319.1
Check for working C compiler using: Visual Studio 10
Check for working C compiler using: Visual Studio 10 -- works
Detecting C compiler ABI info
Detecting C compiler ABI info - done
Check for working CXX compiler using: Visual Studio 10
Check for working CXX compiler using: Visual Studio 10 -- works
Detecting CXX compiler ABI info
Detecting CXX compiler ABI info - done
CMake Error at C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/CMakeDetermineASMCompiler.cmake:21 (if):
  if given arguments:

    "nasm" "yasm" "MATCHES" ".+"

  Unknown arguments specified
Call Stack (most recent call first):
  C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/CMakeDetermineASM_NASMCompiler.cmake:26 (include)
  CMakeLists.txt:3 (enable_language)


CMake Error: Could not find cmake module file:C:/Users/szx/Desktop/test/build/CMakeFiles/2.8.11.1/CMakeASM_NASMCompiler.cmake
Configuring incomplete, errors occurred!

^ Looks like the if() condition was passed the same string "nasm;yasm" and interpreted it as a list.

(0033266)
szx   
2013-06-10 11:00   
Forgive my stupidness, it turns out I forgot to add yasm to the system PATH!

Though I must admit the contents of the CMAKE_ASM_NASM_COMPILER variable are somewhat misleading. Shouldn't it be set to an empty string on error?
(0033267)
Alex Neundorf   
2013-06-10 17:22   
No, it's ok.
The detect compiler function was changed in 2.8.10 and the assembler support was not modified accordingly.
It seems instead of the _INIT variable the _LIST variable should be set.
I'll post a patch later today.
(0033268)
Alex Neundorf   
2013-06-10 18:30   
Can you please put the two attached files in your cmake installation and see whether this makes it work better for you, both in the case that you have yasm in the PATH and that you don't have if it in the PATH ?

Thanks
Alex
(0033271)
szx   
2013-06-11 13:05   
Now with the new files when yasm is not found CMAKE_ASM_NASM_COMPILER is set to CMAKE_ASM_NASM_COMPILER-NOTFOUND and I see "Didn't find assembler". When found it's set to the full path.
(0033272)
Alex Neundorf   
2013-06-11 16:01   
Merged into next, so it should be in the next release.