When trying to compile WebAssembly (
wabt-rs) for a dependent package, it failed on Ubuntu 18.04 LTS due to this error message.
wabt-sys-0.8.0/wabt/src/option-parser.cc: In lambda function: wabt-sys-0.8.0/wabt/src/option-parser.cc:60:20: error: ‘CMAKE_PROJECT_VERSION’ was not declared in this scope printf("%s\n", CMAKE_PROJECT_VERSION); ^~~~~~~~~~~~~~~~~~~~~ make: *** [CMakeFiles/wabt.dir/src/option-parser.cc.o] Error 1 make: *** [CMakeFiles/wabt.dir/all] Error 2 make: *** [all] Error 2 thread 'main' panicked at ' command did not execute successfully, got: exit code: 2
The error appears to come from the fact that
CMAKE_PROJECT_VERSION isn’t defined in the source headers of the compilation. The problem is caused by the
cmake version on the system:
$ cmake --version cmake version 3.10.2 CMake suite maintained and supported by Kitware (kitware.com/cmake).
That version (or any version below v3.12.0) generates a header file that looks like this:
/* #undef CMAKE_PROJECT_VERSION */
Whereas the project that’s compiling, expects it look like this:
#define CMAKE_PROJECT_VERSION "1.0.13"
One solution would be to upgrade
cmake to a later version, but depending on your distribution that may not be very convenient (due to dependencies etc.).
In my case, I manually added the header file. The error occurred on line
/root/.cargo/registry/src/github.com-1ecc6299db9ec823/wabt-sys-0.8.0/wabt/src/option-parser.cc according to my error message, so I modified that file and added the definition to the very top.
$ more /root/.cargo/registry/src/github.com-1ecc6299db9ec823/wabt-sys-0.8.0/wabt/src/option-parser.cc /* * Copyright 2016 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #define CMAKE_PROJECT_VERSION "1.0.13" #include "src/option-parser.h"
I added that
#define CMAKE_PROJECT_VERSION "1.0.13" line, just above the first include statement.
After that, I re-ran the compile and it went through without a problem.