<commit_before>cmake_minimum_required(VERSION 3.0)

project(sol2)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include_directories(.)

set(LUA_VERSION "5.3" CACHE STRING "The version of Lua needed (5.1, 5.2, 5.3)")
if (LUA_VERSION MATCHES "5.1")
  find_package(Lua 5.1 EXACT REQUIRED)
elseif(LUA_VERSION MATCHES "5.2")
  find_package(Lua 5.2 EXACT REQUIRED)
elseif(LUA_VERSION MATCHES "5.3")
  find_package(Lua 5.3 EXACT REQUIRED)
elseif(LUA_VERSION MATCHES "LuaJIT")
  find_package(LuaJIT REQUIRED)
else()
  message(FATAL_ERROR "${LUA_VERSION} is not a supported version for lua.")
endif()

include_directories(${LUA_INCLUDE_DIR})

set(HEADER_SRCS sol.hpp
                sol/as_args.hpp
                sol/as_returns.hpp
                sol/bind_traits.hpp
                sol/call.hpp
                sol/compatibility/5.0.0.h
                sol/compatibility/5.1.0.h
                sol/compatibility/5.2.0.h
                sol/compatibility/5.x.x.h
                sol/compatibility/5.x.x.inl
                sol/compatibility/version.hpp
                sol/compatibility.hpp
                sol/container_traits.hpp
                sol/container_usertype_metatable.hpp
                sol/coroutine.hpp
                sol/debug.hpp
                sol/demangle.hpp
                sol/deprecate.hpp
                sol/environment.hpp
                sol/error.hpp
                sol/feature_test.hpp
                sol/filters.hpp
                sol/forward_detail.hpp
                sol/forward.hpp
                sol/function.hpp
                sol/function_result.hpp
                sol/function_types_core.hpp
                sol/function_types.hpp
                sol/function_types_overloaded.hpp
                sol/function_types_stateful.hpp
                sol/function_types_stateless.hpp
                sol/function_types_templated.hpp
                sol/inheritance.hpp
                sol/in_place.hpp
                sol/load_result.hpp
                sol/object_base.hpp
                sol/object.hpp
                sol/optional.hpp
                sol/optional_implementation.hpp
                sol/overload.hpp
                sol/property.hpp
                sol/protected_function.hpp
                sol/protected_function_result.hpp
                sol/protect.hpp
                sol/proxy_base.hpp
                sol/proxy.hpp
                sol/raii.hpp
                sol/reference.hpp
                sol/resolve.hpp
                sol/simple_usertype_metatable.hpp
                sol/stack_check_get.hpp
                sol/stack_check.hpp
                sol/stack_core.hpp
                sol/stack_field.hpp
                sol/stack_get.hpp
                sol/stack_guard.hpp
                sol/stack.hpp
                sol/stack_pop.hpp
                sol/stack_probe.hpp
                sol/stack_proxy.hpp
                sol/stack_push.hpp
                sol/stack_reference.hpp
                sol/state.hpp
                sol/state_view.hpp
                sol/string_shim.hpp
                sol/table_core.hpp
                sol/table.hpp
                sol/table_iterator.hpp
                sol/thread.hpp
                sol/tie.hpp
                sol/traits.hpp
                sol/tuple.hpp
                sol/types.hpp
                sol/unsafe_function.hpp
                sol/userdata.hpp
                sol/usertype_core.hpp
                sol/usertype.hpp
                sol/usertype_metatable.hpp
                sol/usertype_traits.hpp
                sol/variadic_args.hpp
                sol/variadic_results.hpp
                sol/wrapper.hpp)

if (NOT MSVC)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning -Wno-unknown-warning-option -Wall -Wextra -Wpedantic -pedantic -pedantic-errors -Wno-noexcept-type -ftemplate-depth=1024")
endif()

set(EXAMPLES_SRC examples/any_return.cpp
                 examples/basic.cpp
                 examples/calling_lua_functions.cpp
                 examples/config.cpp
                 examples/containers_as_table.cpp
                 examples/containers.cpp
                 examples/container_usertype_as_container.cpp
                 examples/coroutine.cpp
                 examples/customization.cpp
                 examples/dynamic_object.cpp
                 examples/environments.cpp
                 examples/environment_snooping.cpp
                 examples/environments_on_functions.cpp
                 examples/functions.cpp
                 examples/multi_results.cpp
                 examples/namespacing.cpp
                 examples/optional_with_iteration.cpp
                 examples/overloading.cpp
                 examples/overloading_with_fallback.cpp
                 examples/protected_functions.cpp
                 examples/require.cpp
                 examples/runtime_additions.cpp
                 examples/script_error_handling.cpp
                 examples/self_call.cpp
                 examples/self_from_lua.cpp
                 examples/stack_aligned_function.cpp
                 examples/static_variables.cpp
                 examples/tables.cpp
                 examples/usertype_advanced.cpp
                 examples/usertype_automatic_operators.cpp
                 examples/usertype_bitfields.cpp
                 examples/usertype_call_from_c++.cpp
                 examples/usertype.cpp
                 examples/usertype_dynamic_getter_setter.cpp
                 examples/usertype_initializers.cpp
                 examples/usertype_simple.cpp
                 examples/usertype_special_functions.cpp
                 examples/usertype_var.cpp
                 examples/variables.cpp
                 examples/variadic_args.cpp)
source_group(EXAMPLES FILES ${EXAMPLES_SRC})
foreach(example_source_file ${EXAMPLES_SRC})
message(STATUS "${example_source_file}")
  get_filename_component(example_name ${example_source_file} NAME_WE)
  add_executable(${example_name} ${example_source_file} ${HEADER_SRCS})
  target_link_libraries(${example_name} ${LUA_LIBRARIES})
  install(TARGETS ${example_name} RUNTIME DESTINATION bin/examples)
endforeach()

set(TEST_SRC test_state.cpp test_operators.cpp
             test_tables.cpp test_utility.cpp
             test_strings.cpp test_environments.cpp
             test_customizations.cpp test_large_integer.cpp
             test_inheritance.cpp tests.cpp
             test_variadics.cpp test_coroutines.cpp
             test_container_semantics.cpp test_storage.cpp
             test_overflow.cpp test_plain_types.cpp
             test_simple_usertypes.cpp test_gc.cpp
             test_functions.cpp test_usertypes.cpp
             test_containers.cpp test_filters.cpp)
source_group(TESTS FILES ${TEST_SRC})

add_executable(tests ${TEST_SRC} ${HEADER_SRCS})
target_include_directories(tests PRIVATE ./Catch/include/)

find_package(Threads)
target_link_libraries(tests Threads::Threads ${LUA_LIBRARIES})
install(TARGETS tests RUNTIME DESTINATION bin)

find_package(PythonInterp 3)
if (PYTHONINTERP_FOUND)
  add_custom_command(OUTPUT single/sol.hpp COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/single && ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/single.py --output ${CMAKE_CURRENT_BINARY_DIR}/single/sol.hpp DEPENDS ${HEADER_SRCS})
  add_custom_target(single_sol DEPENDS single/sol.hpp)
  install(FILES "${CMAKE_CURRENT_BINARY_DIR}/single/sol.hpp" DESTINATION include/single)
  message(STATUS "single_sol can be generated as python 3 has been found.")
else()
  message(STATUS "single_sol cannot be generated as python 3 has not been found.")
endif()
<commit_msg>Generate single_sol in source dir<commit_after>cmake_minimum_required(VERSION 3.0)

project(sol2)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include_directories(.)

set(LUA_VERSION "5.3" CACHE STRING "The version of Lua needed (5.1, 5.2, 5.3)")
if (LUA_VERSION MATCHES "5.1")
  find_package(Lua 5.1 EXACT REQUIRED)
elseif(LUA_VERSION MATCHES "5.2")
  find_package(Lua 5.2 EXACT REQUIRED)
elseif(LUA_VERSION MATCHES "5.3")
  find_package(Lua 5.3 EXACT REQUIRED)
elseif(LUA_VERSION MATCHES "LuaJIT")
  find_package(LuaJIT REQUIRED)
else()
  message(FATAL_ERROR "${LUA_VERSION} is not a supported version for lua.")
endif()

include_directories(${LUA_INCLUDE_DIR})

set(HEADER_SRCS sol.hpp
                sol/as_args.hpp
                sol/as_returns.hpp
                sol/bind_traits.hpp
                sol/call.hpp
                sol/compatibility/5.0.0.h
                sol/compatibility/5.1.0.h
                sol/compatibility/5.2.0.h
                sol/compatibility/5.x.x.h
                sol/compatibility/5.x.x.inl
                sol/compatibility/version.hpp
                sol/compatibility.hpp
                sol/container_traits.hpp
                sol/container_usertype_metatable.hpp
                sol/coroutine.hpp
                sol/debug.hpp
                sol/demangle.hpp
                sol/deprecate.hpp
                sol/environment.hpp
                sol/error.hpp
                sol/feature_test.hpp
                sol/filters.hpp
                sol/forward_detail.hpp
                sol/forward.hpp
                sol/function.hpp
                sol/function_result.hpp
                sol/function_types_core.hpp
                sol/function_types.hpp
                sol/function_types_overloaded.hpp
                sol/function_types_stateful.hpp
                sol/function_types_stateless.hpp
                sol/function_types_templated.hpp
                sol/inheritance.hpp
                sol/in_place.hpp
                sol/load_result.hpp
                sol/object_base.hpp
                sol/object.hpp
                sol/optional.hpp
                sol/optional_implementation.hpp
                sol/overload.hpp
                sol/property.hpp
                sol/protected_function.hpp
                sol/protected_function_result.hpp
                sol/protect.hpp
                sol/proxy_base.hpp
                sol/proxy.hpp
                sol/raii.hpp
                sol/reference.hpp
                sol/resolve.hpp
                sol/simple_usertype_metatable.hpp
                sol/stack_check_get.hpp
                sol/stack_check.hpp
                sol/stack_core.hpp
                sol/stack_field.hpp
                sol/stack_get.hpp
                sol/stack_guard.hpp
                sol/stack.hpp
                sol/stack_pop.hpp
                sol/stack_probe.hpp
                sol/stack_proxy.hpp
                sol/stack_push.hpp
                sol/stack_reference.hpp
                sol/state.hpp
                sol/state_view.hpp
                sol/string_shim.hpp
                sol/table_core.hpp
                sol/table.hpp
                sol/table_iterator.hpp
                sol/thread.hpp
                sol/tie.hpp
                sol/traits.hpp
                sol/tuple.hpp
                sol/types.hpp
                sol/unsafe_function.hpp
                sol/userdata.hpp
                sol/usertype_core.hpp
                sol/usertype.hpp
                sol/usertype_metatable.hpp
                sol/usertype_traits.hpp
                sol/variadic_args.hpp
                sol/variadic_results.hpp
                sol/wrapper.hpp)

if (NOT MSVC)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning -Wno-unknown-warning-option -Wall -Wextra -Wpedantic -pedantic -pedantic-errors -Wno-noexcept-type -ftemplate-depth=1024")
endif()

set(EXAMPLES_SRC examples/any_return.cpp
                 examples/basic.cpp
                 examples/calling_lua_functions.cpp
                 examples/config.cpp
                 examples/containers_as_table.cpp
                 examples/containers.cpp
                 examples/container_usertype_as_container.cpp
                 examples/coroutine.cpp
                 examples/customization.cpp
                 examples/dynamic_object.cpp
                 examples/environments.cpp
                 examples/environment_snooping.cpp
                 examples/environments_on_functions.cpp
                 examples/functions.cpp
                 examples/multi_results.cpp
                 examples/namespacing.cpp
                 examples/optional_with_iteration.cpp
                 examples/overloading.cpp
                 examples/overloading_with_fallback.cpp
                 examples/protected_functions.cpp
                 examples/require.cpp
                 examples/runtime_additions.cpp
                 examples/script_error_handling.cpp
                 examples/self_call.cpp
                 examples/self_from_lua.cpp
                 examples/stack_aligned_function.cpp
                 examples/static_variables.cpp
                 examples/tables.cpp
                 examples/usertype_advanced.cpp
                 examples/usertype_automatic_operators.cpp
                 examples/usertype_bitfields.cpp
                 examples/usertype_call_from_c++.cpp
                 examples/usertype.cpp
                 examples/usertype_dynamic_getter_setter.cpp
                 examples/usertype_initializers.cpp
                 examples/usertype_simple.cpp
                 examples/usertype_special_functions.cpp
                 examples/usertype_var.cpp
                 examples/variables.cpp
                 examples/variadic_args.cpp)
source_group(EXAMPLES FILES ${EXAMPLES_SRC})
foreach(example_source_file ${EXAMPLES_SRC})
message(STATUS "${example_source_file}")
  get_filename_component(example_name ${example_source_file} NAME_WE)
  add_executable(${example_name} ${example_source_file} ${HEADER_SRCS})
  target_link_libraries(${example_name} ${LUA_LIBRARIES})
  install(TARGETS ${example_name} RUNTIME DESTINATION bin/examples)
endforeach()

set(TEST_SRC test_state.cpp test_operators.cpp
             test_tables.cpp test_utility.cpp
             test_strings.cpp test_environments.cpp
             test_customizations.cpp test_large_integer.cpp
             test_inheritance.cpp tests.cpp
             test_variadics.cpp test_coroutines.cpp
             test_container_semantics.cpp test_storage.cpp
             test_overflow.cpp test_plain_types.cpp
             test_simple_usertypes.cpp test_gc.cpp
             test_functions.cpp test_usertypes.cpp
             test_containers.cpp test_filters.cpp)
source_group(TESTS FILES ${TEST_SRC})

add_executable(tests ${TEST_SRC} ${HEADER_SRCS})
target_include_directories(tests PRIVATE ./Catch/include/)

find_package(Threads)
target_link_libraries(tests Threads::Threads ${LUA_LIBRARIES})
install(TARGETS tests RUNTIME DESTINATION bin)

find_package(PythonInterp 3)
if (PYTHONINTERP_FOUND)
  add_custom_command(OUTPUT single/sol/sol.hpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/single.py --output ${CMAKE_CURRENT_SOURCE_DIR}/single/sol/sol.hpp DEPENDS ${HEADER_SRCS})
  add_custom_target(single_sol DEPENDS single/sol/sol.hpp)
  install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/single/sol/sol.hpp" DESTINATION include/single/sol)
  message(STATUS "single_sol can be generated as python 3 has been found.")
else()
  message(STATUS "single_sol cannot be generated as python 3 has not been found.")
endif()

{'fraction_non_alphanumeric': 0.07040408671163796, 'fraction_numerical': 0.005632326936931037, 'mean_word_length': 1.748874887488749, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4282369', 'n_tokens_mistral': 4527, 'n_tokens_neox': 4221, 'n_words': 620}