mirror of
https://github.com/ThePhD/sol2.git
synced 2024-03-22 13:10:44 +08:00
Merge remote-tracking branch 'root/master'
Conflicts: sol/userdata.hpp
This commit is contained in:
commit
2a73410a4b
19
.travis.yml
Normal file
19
.travis.yml
Normal 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
39
bootstrap.py
Normal file → Executable 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')
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user