Compiler features discovery and Bison version check.

This commit is contained in:
Stefano Sanfilippo 2014-12-10 23:02:55 +01:00
parent 815dcf9df2
commit 715b0fe840
3 changed files with 87 additions and 1 deletions

View File

@ -20,8 +20,42 @@
project(Monicelli)
cmake_minimum_required(VERSION 2.8)
message("== Only a limited set of platforms was tested. We need your help!")
message("== Report build errors to https://github.com/esseks/monicelli/issues")
## 1. Compiler sanity check
try_compile(
supported_compiler
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/cmake/features.cpp
COMPILE_DEFINITIONS -std=c++0x
OUTPUT_VARIABLE features_build_log
)
if (checkfeat)
message(${features_build_log})
endif()
if (NOT supported_compiler)
message(FATAL_ERROR
"Some C++11 features we need are not implemented by your compiler.\n"
"Run cmake with -Dcheckfeat=1 to see the exact cause."
)
endif()
## 2. Find Flex and Bison
find_package(BISON REQUIRED)
find_package(FLEX REQUIRED)
find_package(FLEX 2.5 REQUIRED)
if (BISON_VERSION VERSION_LESS 2.5)
message(FATAL_ERROR "At least Bison 2.5 is required.")
elseif(BISON_VERSION VERSION_LESS 3.0)
message("== Bison 2.5 was found. You have to apply cmake/bison2.patch...")
endif()
## 3. Build
include_directories(
${CMAKE_CURRENT_BINARY_DIR}

52
cmake/features.cpp Normal file
View File

@ -0,0 +1,52 @@
/*
* Monicelli: an esoteric language compiler
*
* Copyright (C) 2014 Stefano Sanfilippo
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* Minimum program containing all required C++11 features.
* If a compiler cannot compile this, then it won't compile Monicelli.
*/
#include <memory>
#include <unordered_set>
#include <functional>
#include <vector>
#include <string>
enum class Dummy {
FOO, BAR, BAZ
};
class Banana {
int yep() const noexcept {
return 0;
}
};
int main() {
std::unique_ptr<int> foo(new int{0});
std::vector<int> bar = {1, 2, 3};
for (int baz: bar) {
baz += 1;
}
char *str = nullptr;
Banana a;
Banana b = std::move(a);
long c = std::stol("100");
}