diff --git a/.gitignore b/.gitignore index 1984447..2fa1bab 100644 --- a/.gitignore +++ b/.gitignore @@ -89,6 +89,7 @@ m4/lt~obsolete.m4 Makefile *.deps .dirstamp +vim-debug *-build/* bin/* build/* diff --git a/editorconfig/local.vimrc b/editorconfig/local.vimrc index 5ff2023..cb94242 100644 --- a/editorconfig/local.vimrc +++ b/editorconfig/local.vimrc @@ -1,53 +1,130 @@ -" quartz-warriors/local.vimrc -" License: The Unlicense { -" This is free and unencumbered software released into the public domain. + +" editorconfig/local.vimrc +" Copyright © 2023 Saul D. Beniquez @{ " -" Anyone is free to copy, modify, publish, use, compile, sell, or -" distribute this software, either in source code form or as a compiled -" binary, for any purpose, commercial or non-commercial, and by any -" means. +" Redistribution and use in source and binary forms, with or without +" modification, are permitted provided that the following conditions are met: " -" In jurisdictions that recognize copyright laws, the author or authors -" of this software dedicate any and all copyright interest in the -" software to the public domain. We make this dedication for the benefit -" of the public at large and to the detriment of our heirs and -" successors. We intend this dedication to be an overt act of -" relinquishment in perpetuity of all present and future rights to this -" software under copyright law. +" 1. Redistributions of source code must retain the above copyright notice, +" this list of conditions and the following disclaimer. " -" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -" OTHER DEALINGS IN THE SOFTWARE. +" 2. Redistributions in binary form must reproduce the above copyright notice, +" this list of conditions and the following disclaimer in the documentation +" and/or other materials provided with the distribution. " -" For more information, please refer to -" } +" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” +" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +" POSSIBILITY OF SUCH DAMAGE. @} + +let s:build_dir = 'vim-debug' +let s:build_cores = 2 +let s:make_args = '-C '. s:build_dir . ' -j ' . s:build_cores + +let s:cmake_path = system('which ' . 'cmake') +let s:ninja_path = system('which ' . 'ninja') + +let s:cmake_generator = 'Unix Makefiles' +if (s:ninja_path != '') + let s:cmake_generator = 'Ninja' +endif + +if (s:cmake_path != '') + let s:cmake_call = s:cmake_path . + \' -B ' . s:build_dir . + \' -D ' . 'CMAKE_BUILD_TYPE=Debug' . + \' -G ' . s:cmake_generator +endif + +let s:make_call = 'make ' . s:make_args +let s:ninja_call = 'ninja ' . s:make_args if ! get(s:, 'defined', 0) " -- prevents the function from being redefined after compiling - function! BuildDebug() - let s:defined = 1 +function! BuildDebug() + let s:defined = 1 - wall - cd ./debug + wall + + if (s:ninja_path != '') + if ( + \ (!filereadable(s:build_dir . '/CMakeCache.txt')) || + \ (!filereadable(s:build_dir . '/build.ninja')) + \ ) + + + exec ':Dispatch ' . s:cmake_call + endif + + set makeprg='ninja' + exec ':Make ' . s:make_args + else + if ( + \ (!filereadable(s:build_dir . '/CMakeCache.txt')) || + \ (!filereadable(s:build_dir . '/Makefile')) + \ ) + exec ':Dispatch ' . s:cmake_call + endif if exists(':Make') - :Make -j 2 all check + exec ':Make ' . s:make_args cd .. else - make -j 2 all check + exec 'make ' . s:make_args vert botright copen vert resize +100 endif + endif - endfunction +endfunction + +function RunTests() + let s:defined = 1 + if (s:ninja_path != '') + if ( + \ (!filereadable(s:build_dir . '/CMakeCache.txt')) || + \ (!filereadable(s:build_dir . '/build.ninja')) + \ ) + + + exec ':Dispatch ' . s:cmake_call + endif + + set makeprg='ninja' + exec ':Make ' . s:make_args. ' ctest' + else + if ( + \ (!filereadable(s:build_dir . '/CMakeCache.txt')) || + \ (!filereadable(s:build_dir . '/Makefile')) + \ ) + exec ':Dispatch ' . s:cmake_call + endif + + if exists(':Make') + exec ':Make ' . s:make_args . ' ctest' + cd .. + else + exec 'make ' . s:make_args . ' ctest' + vert botright copen + vert resize +100 + endif + endif + +endfunction endif nnoremap bd :call BuildDebug() +nnoremap rt :call RunTests() set path+=src +set path+=include +set path+=app -" vim: set ts=4 sts=4 noet sw=4 foldmethod=marker foldmarker={,} : +" vim: set ts=4 sts=4 noet sw=4 foldmethod=marker foldmarker=@{,@} : diff --git a/editorconfig/vim-completion.am b/editorconfig/vim-completion.am deleted file mode 100644 index 0e7c027..0000000 --- a/editorconfig/vim-completion.am +++ /dev/null @@ -1,37 +0,0 @@ - -VIM_COMPLETION_OBJECTS=src/framework/core/libframework_core_la-Observable.lo\ -src/framework/core/input/libframework_core_test_la-EventDispatcher.lo\ -src/framework/core/input/libframework_core_la-EventDispatcher.lo\ -src/framework/core/libframework_core_test_la-Observable.lo\ -src/framework/core/components/libframework_core_test_la-EntityManager.lo\ -src/framework/core/components/libframework_core_la-PositionAttribute.lo\ -src/framework/core/components/libframework_core_test_la-Entity.lo\ -src/framework/core/components/libframework_core_la-EntityManager.lo\ -src/framework/core/components/libframework_core_la-PlayerBehavior.lo\ -src/framework/core/components/libframework_core_test_la-PositionAttribute.lo\ -src/framework/core/components/libframework_core_test_la-PlayerBehavior.lo\ -src/framework/core/components/libframework_core_la-Entity.lo\ -src/framework/system/libframework_system_la-sdl.lo\ -src/tests/game_tests-runtime.tests.o\ -src/tests/framework/types/adapters/game_tests-Sequential.test.o - -if HAVE_COMPILEDB -clean-vim-complete: - rm -rf ${VIM_COMPLETION_OBJECTS} 1> /dev/null - -@abs_top_srcdir@/compile_commands.json: - nice -20 /bin/sh -c "compiledb `basename ${MAKE}` -j 8 ${VIM_COMPLETION_OBJECTS}" - rm -vf @abs_top_srcdir@/compile_commands.json - ln -sv @abs_top_builddir@/compile_commands.json @abs_top_srcdir@ - -phony_targets+= clean_vim_complete @abs_top_srcdir@/compile_commands.json -vim-completion: clean-vim-complete @abs_top_srcdir@/compile_commands.json - -else -vim-completion: - echo "compiledb not found; vim-completion disabled" -endif - -# vim: sts=4 ts=4 noet ft=automake : - - diff --git a/hooks/pre-commit b/hooks/pre-commit deleted file mode 100644 index dfe53c9..0000000 --- a/hooks/pre-commit +++ /dev/null @@ -1,169 +0,0 @@ -#!/bin/sh -# -# An example hook script to verify what is about to be committed. -# Called by "git commit" with no arguments. The hook should -# exit with non-zero status after issuing an appropriate message if -# it wants to stop the commit. -# -# To enable this hook, rename this file to "pre-commit". -# Redirect output to stderr. - -trap restore_stashed_files 1 2 3 6 15 - -# The number of historical CI builds to keep -build_count_max=5 - -proj_root="${PWD}" -workdir_root="${PWD}/.workdir" -my_builddir="${workdir_root}/$(date +"%Y.%m.%d").$(whoami)" -stash_name="pre-commit-$(date +%s)" -diff_against=HEAD # default value - -# Detect diff reference { -if git rev-parse --verify ${diff_against} >/dev/null 2>&1; then - : -else - # Initial commit: diff against an empty tree object - diff_against=$(git hash-object -t tree /dev/null) -fi -# } - -# function definitions -debugecho() { - if [ -n "$GITDEBUG" ]; then - echo "${@}" - fi -} -hook_env() { - debugecho "\$PWD: ${PWD}" -} -show_diff() { - # If there are whitespace errors, print the offending file names and fail. - exec git diff-index --check --cached $against -- -} -stash_unstaged() { - git stash save -q --keep-index ${stash_name} -} -restore_stashed_files() { - if [ -n "$(git stash list | grep "${stash_name}")" ]; then - git stash pop -q - fi -} -validate_filename() { - # If you want to allow non-ASCII filenames set this variable to true. - # - I do. It's 2021, unicode is a thing. - allownonascii=$(git config --type=bool hooks.allownonascii) - - # Cross platform projects tend to avoid non-ASCII filenames; prevent - # them from being added to the repository. We exploit the fact that the - # printable range starts at the space character and ends with tilde. - if [ "$allownonascii" != "true" ]; then - # Note that the use of brackets around a tr range is ok here, (it's - # even required, for portability to Solaris 10's /usr/bin/tr), since - # the square bracket bytes happen to fall in the designated range. - if [ $(git diff --cached --name-only --diff-filter=A -z $against | - LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 ] - then - - exec 1>&2 - cat <<-EOF - Error: Attempt to add a non-ASCII file name. - - This can cause problems if you want to work with people on other platforms. - - To be portable it is advisable to rename the file. - - If you know what you are doing you can disable this check using: - - git config hooks.allownonascii true - EOF - exit 1 - fi - fi -} -recycle_dirs() { - if [ ! -d "${workdir_root}" ]; then - mkdir "${workdir_root}" - fi - - existing_builds=`ls -tr ${workdir_root}` - oldest_build="" - num_builds=0; - - debugecho "builds:" - - for file in ${existing_builds}; do - if [ -z "$oldest_build" ]; then oldest_build=${workdir_root}/$file; fi - - ((num_builds++)) - debugecho "- ${file}" - done - debugecho "\nnum: ${num_builds}" - - if [ ${num_builds} -ge ${build_count_max} ] ; then - debugecho "$oldest_build" - - rm -r "${oldest_build}" - fi -} -create_symlinks() { - symlink_path="${workdir_root}/latest" - symlink_target="$(basename ${my_builddir})" - - if [ -L "${symlink_path}" ] && - [ "$(readlink ${symlink_path})" != "${symlink_target}" ] - then - unlink "${symlink_path}" - fi - - [ ! -L "${symlink_path}" ] && - ln -s "${symlink_target}" "${symlink_path}" - - [ ! -L "${workdir_root}/configure" ] && - ln -s "${proj_root}/configure" "${workdir_root}" - [ ! -L "${workdir_root}/debug.env" ] && - ln -s "${proj_root}/debug.env" "${workdir_root}" - -} -setup_builddir() { - recycle_dirs "${workdir_root}" - - [ ! -d "${my_builddir}" ] && mkdir "${my_builddir}" - - create_symlinks - -} -build() { - setup_builddir - - cd "${my_builddir}" - - if [ ! -f config.status ] - then - source ../debug.env - sh ${proj_root}/configure - fi - make -j 2 qw-test -} -run_test() { - build - - if ./qw-test; then - : - else - >&2 - echo "Tests failed. Commit aborted" - fi -} - -## Begin script - -hook_env -validate_filename -stash_unstaged - -run_test - -restore_stashed_files - -# vim: set foldmethod=marker foldmarker={,} ts=4 sw=4 sts=0 noet: diff --git a/third_party/.keep b/third_party/.keep deleted file mode 100644 index e69de29..0000000