Merge remote-tracking branch 'root/master'

Conflicts:
	sol/userdata.hpp
This commit is contained in:
ThePhD 2014-08-05 00:15:34 -07:00
commit 2a73410a4b
5 changed files with 62 additions and 9 deletions

19
.travis.yml Normal file
View File

@ -0,0 +1,19 @@
language: cpp
compiler:
- gcc
- clang
branches:
only:
- master
before_install:
- sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
- sudo add-apt-repository -y ppa:saiarcot895/chromium-beta
- sudo apt-get --yes update
- sudo apt-get --yes install g++-4.8
- if [ "$CXX" == "g++" ]; then export CXX=g++-4.8; fi
- sudo apt-get --yes install ninja-build
- sudo apt-get --yes install liblua5.2-dev
script: ./bootstrap.py --ci --cxx=$CXX && ninja

39
bootstrap.py Normal file → Executable file
View File

@ -29,31 +29,60 @@ def replace_extension(f, e):
(root, ext) = os.path.splitext(f)
return root + e
# Default install dir
install_dir = os.path.join('/usr', 'include') if 'linux' in sys.platform else 'include'
# command line stuff
parser = argparse.ArgumentParser()
parser.add_argument('--debug', action='store_true', help='compile with debug flags')
parser.add_argument('--cxx', metavar='<compiler>', help='compiler name to use (default: g++)', default='g++')
parser.add_argument('--ci', action='store_true', help='compile under TeamCity CI (internal use only)')
parser.add_argument('--ci', action='store_true', help=argparse.SUPPRESS)
parser.add_argument('--lua-dir', metavar='<dir>', help='directory lua is in with include and lib subdirectories')
parser.add_argument('--install-dir', metavar='<dir>', help='directory to install the headers to', default=install_dir);
parser.epilog = """In order to install sol, administrative privileges might be required.
Note that installation is done through the 'ninja install' command. To uninstall, the
command used is 'ninja uninstall'. The default installation directory for this
system is {}""".format(install_dir)
args = parser.parse_args()
# general variables
include = [ '.', os.path.join('Catch', 'include')]
depends = []
cxxflags = [ '-Wall', '-Wextra', '-pedantic', '-pedantic-errors', '-std=c++11' ]
ldflags = [ '-static' ]
ldflags = []
script_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
sol_dir = os.path.join(script_dir, 'sol')
sol_file = os.path.join(script_dir, 'sol.hpp')
copy_command = 'cp -rf {} $in && cp -f {} $in'.format(sol_dir, sol_file)
remove_command = 'rm -rf {} && rm -f {}'.format(os.path.join(args.install_dir, 'sol'), os.path.join(args.install_dir, 'sol.hpp'))
if sys.platform == 'win32':
copy_command = 'robocopy /COPYALL /E {} $in && robocopy /COPYALL {} $in'.format(sol_dir, sol_file)
remove_command = 'rmdir /S /Q {} && erase /F /S /Q /A {}'.format(os.path.join(args.install_dir, 'sol'),
os.path.join(args.install_dir, 'sol.hpp'))
if args.debug:
cxxflags.extend(['-g', '-O0'])
else:
cxxflags.extend(['-DNDEBUG', '-O3'])
if args.cxx == 'clang++':
cxxflags.extend(['-Wno-unused-value', '-Wno-constexpr-not-const'])
if args.lua_dir:
include.extend([os.path.join(args.lua_dir, 'include')])
ldflags.extend(library_includes([os.path.join(args.lua_dir, 'lib')]))
if args.ci:
ldflags.extend(libraries(['lua5.2', 'dl']))
ldflags.extend(libraries(['lua5.2']))
ldflags.extend(library_includes(['lib']))
include.extend(['/usr/include/lua5.2', './lua-5.2.2/src', './include'])
else:
ldflags.extend(libraries(['lua']))
if 'linux' in sys.platform:
ldflags.extend(libraries(['dl']))
builddir = 'bin'
objdir = 'obj'
tests = os.path.join(builddir, 'tests')
@ -77,6 +106,8 @@ ninja.rule('compile', command = '$cxx -MMD -MF $out.d -c $cxxflags -Werror $in -
ninja.rule('link', command = '$cxx $cxxflags $in -o $out $ldflags', description = 'Creating $out')
ninja.rule('runner', command = tests)
ninja.rule('example', command = '$cxx $cxxflags $in -o $out $ldflags')
ninja.rule('installer', command = copy_command)
ninja.rule('uninstaller', command = remove_command)
ninja.newline()
# builds
@ -96,6 +127,8 @@ for f in glob.glob('examples/*.cpp'):
ninja.build(tests, 'link', inputs = tests_object_files)
ninja.build('tests', 'phony', inputs = tests)
ninja.build('install', 'installer', inputs = args.install_dir)
ninja.build('uninstall', 'uninstaller')
ninja.build('examples', 'phony', inputs = examples)
ninja.build('run', 'runner', implicit = 'tests')
ninja.default('run')

View File

@ -24,6 +24,7 @@
#include <string>
#include <array>
#include <cstdlib>
#if defined(__GNUC__) || defined(__clang__)
#include <cxxabi.h>
@ -41,7 +42,7 @@ std::string get_type_name(const std::type_info& id) {
int status;
char* unmangled = abi::__cxa_demangle(id.name(), 0, 0, &status);
std::string realname = unmangled;
free(unmangled);
std::free(unmangled);
return realname;
}

View File

@ -70,7 +70,7 @@ struct functor<T, Func, R, true> {
functor(FxArgs&&... fxargs): item(nullptr), invocation(std::forward<FxArgs>(fxargs)...) {}
template<typename Arg, typename... Args>
void operator()(Arg&& arg, Args&&... args) {
void operator()(Arg&& arg, Args&&...) {
T& member = *item;
(member.*invocation) = std::forward<Arg>(arg);
}

View File

@ -38,12 +38,12 @@ inline std::unique_ptr<T> make_unique(Args&&... args) {
}
} // detail
const std::array<std::string, 2> meta_variable_names = {
const std::array<std::string, 2> meta_variable_names = {{
"__index",
"__newindex"
};
}};
const std::array<std::string, 19> meta_function_names = {
const std::array<std::string, 19> meta_function_names = {{
"__index",
"__newindex",
"__mode",
@ -63,7 +63,7 @@ const std::array<std::string, 19> meta_function_names = {
"__lt",
"__le",
"__gc",
};
}};
/* Too easy?
enum class meta_function {