Skip to content

Commit 857d241

Browse files
committed
first commit
0 parents  commit 857d241

File tree

229 files changed

+26249
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

229 files changed

+26249
-0
lines changed

.github/workflows/main.yml

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
on: ["push", "pull_request"]
2+
jobs:
3+
main:
4+
runs-on: ${{ matrix.os }}
5+
6+
strategy:
7+
fail-fast: false
8+
9+
matrix:
10+
compiler: [cl, g++, clang++]
11+
build_type: [Release, Debug]
12+
include:
13+
- os: windows-latest
14+
compiler: cl
15+
compiler_flags: "/EHsc /WX /Wall /wd4061 /wd4456 /wd4458 /wd4464 /wd4514 /wd4623 /wd4625 /wd4626 /wd4710 /wd4711 /wd4820 /wd5027 /wd5045 /wd5264"
16+
- os: ubuntu-latest
17+
compiler: g++
18+
compiler_flags: "-Werror -Wall -Weffc++ -Wextra -Wpedantic"
19+
- os: ubuntu-latest
20+
compiler: clang++
21+
compiler_flags: "-Werror -Wall -Weffc++ -Wextra -Wpedantic"
22+
23+
steps:
24+
- if: matrix.compiler == 'cl'
25+
run: |
26+
# installing conan
27+
pip3 install --upgrade -- conan
28+
conan profile detect
29+
30+
- if: matrix.compiler != 'cl'
31+
run: |
32+
sudo apt update --assume-yes
33+
sudo apt install --assume-yes -- libboost-all-dev
34+
35+
- if: matrix.compiler == 'cl'
36+
shell: bash
37+
run: |
38+
# conanfile.txt
39+
cat >conanfile.txt <<EOF
40+
[layout]
41+
cmake_layout
42+
[requires]
43+
boost/[>=1.90.0]
44+
[generators]
45+
CMakeDeps
46+
CMakeToolchain
47+
EOF
48+
conan install conanfile.txt --build=missing --settings:all compiler.cppstd=20 --settings:all build_type='${{ matrix.build_type }}'
49+
rm --force -- conanfile.txt
50+
51+
- if: matrix.compiler == 'clang++'
52+
run: |
53+
# bump buggy clang-18 to clang-20
54+
sudo rm --force -- /usr/bin/clang /usr/bin/clang++
55+
sudo ln --symbolic -- clang-20 /usr/bin/clang
56+
sudo ln --symbolic -- clang++-20 /usr/bin/clang++
57+
sudo apt install --assume-yes -- clang-20
58+
59+
- uses: actions/checkout@v4
60+
with:
61+
path: snapshot
62+
63+
- shell: bash
64+
run: |
65+
# initializing cmake
66+
if [ xclx == x'${{ matrix.compiler }}'x ]; then
67+
cp -- build/generators/CMakePresets.json snapshot/
68+
cmake -S snapshot -B build --preset conan-default
69+
else
70+
mkdir --parents -- build/.kconfig
71+
echo CONFIG_HLDS_LAUNCHER=y >build/.kconfig/.config
72+
cmake -S snapshot -B build -DCMAKE_CXX_COMPILER='${{ matrix.compiler }}'
73+
fi
74+
75+
- if: matrix.compiler != 'cl'
76+
run: cmake -S snapshot -B build -DCMAKE_BUILD_TYPE='${{ matrix.build_type }}'
77+
78+
- if: matrix.compiler_flags != ''
79+
run: cmake -S snapshot -B build -DCMAKE_CXX_FLAGS='${{ matrix.compiler_flags }}'
80+
81+
- run: cmake --build build --config '${{ matrix.build_type }}'
82+
83+
- working-directory: build
84+
run: ctest --output-on-failure --build-config '${{ matrix.build_type }}'
85+
86+
- uses: actions/upload-artifact@v4
87+
with:
88+
name: build-${{ matrix.compiler }}-${{ matrix.build_type }}
89+
path: build
90+
91+
flake8:
92+
runs-on: ubuntu-latest
93+
steps:
94+
- run: |
95+
sudo apt update --assume-yes
96+
sudo apt install --assume-yes python3-flake8
97+
98+
- uses: actions/checkout@v4
99+
with:
100+
path: snapshot
101+
102+
- working-directory: snapshot
103+
run: |
104+
python3 -m flake8 \
105+
--statistics --show-source \
106+
--exclude=./extra/lib/python3/_auxiliary/kconfig/_lib \
107+
--extend-ignore=E251,E701 --max-line-length=128 -- .

.gitignore

Whitespace-only changes.

CMakeLists.txt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
cmake_minimum_required(VERSION 3.10)
2+
3+
project("p5-lambda" LANGUAGES "CXX")
4+
5+
include("kconfig.cmake")
6+
cmake_language(CALL "_kconfig::enable")
7+
mark_as_advanced("_kconfig")
8+
9+
unset("_kconfig")
10+
get_directory_property("_kconfig" "_kconfig::TESTS")
11+
if("y" STREQUAL "${_kconfig}")
12+
include("CTest")
13+
endif("y" STREQUAL "${_kconfig}")
14+
15+
add_subdirectory("library")
16+
17+
unset("_kconfig")
18+
get_directory_property("_kconfig" "_kconfig::HLDS_LAUNCHER")
19+
if("y" STREQUAL "${_kconfig}")
20+
add_subdirectory("extra/utils/hlds_launcher")
21+
endif("y" STREQUAL "${_kconfig}")
22+
23+
unset("_kconfig")
24+
get_directory_property("_kconfig" "_kconfig::METAMOD_PLUGIN")
25+
if("" STREQUAL "${_kconfig}")
26+
if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
27+
set("_kconfig" "y")
28+
endif("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
29+
endif("" STREQUAL "${_kconfig}")
30+
if("y" STREQUAL "${_kconfig}")
31+
add_subdirectory("metamod_plugin")
32+
endif("y" STREQUAL "${_kconfig}")

KConfig.in

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
config TESTS
2+
bool "enable tests"
3+
default "@_defaults.TESTS@"
4+
5+
config METAMOD_PLUGIN
6+
bool "enable metamod plugin"
7+
default "@_defaults.METAMOD_PLUGIN@"
8+
9+
config HLDS_LAUNCHER
10+
bool "Developer: add hlds launcher target"
11+
default "@_defaults.HLDS_LAUNCHER@"

LICENSE

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
Creative Commons Legal Code
2+
3+
CC0 1.0 Universal
4+
5+
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
6+
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
7+
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
8+
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
9+
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
10+
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
11+
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
12+
HEREUNDER.
13+
14+
Statement of Purpose
15+
16+
The laws of most jurisdictions throughout the world automatically confer
17+
exclusive Copyright and Related Rights (defined below) upon the creator
18+
and subsequent owner(s) (each and all, an "owner") of an original work of
19+
authorship and/or a database (each, a "Work").
20+
21+
Certain owners wish to permanently relinquish those rights to a Work for
22+
the purpose of contributing to a commons of creative, cultural and
23+
scientific works ("Commons") that the public can reliably and without fear
24+
of later claims of infringement build upon, modify, incorporate in other
25+
works, reuse and redistribute as freely as possible in any form whatsoever
26+
and for any purposes, including without limitation commercial purposes.
27+
These owners may contribute to the Commons to promote the ideal of a free
28+
culture and the further production of creative, cultural and scientific
29+
works, or to gain reputation or greater distribution for their Work in
30+
part through the use and efforts of others.
31+
32+
For these and/or other purposes and motivations, and without any
33+
expectation of additional consideration or compensation, the person
34+
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
35+
is an owner of Copyright and Related Rights in the Work, voluntarily
36+
elects to apply CC0 to the Work and publicly distribute the Work under its
37+
terms, with knowledge of his or her Copyright and Related Rights in the
38+
Work and the meaning and intended legal effect of CC0 on those rights.
39+
40+
1. Copyright and Related Rights. A Work made available under CC0 may be
41+
protected by copyright and related or neighboring rights ("Copyright and
42+
Related Rights"). Copyright and Related Rights include, but are not
43+
limited to, the following:
44+
45+
i. the right to reproduce, adapt, distribute, perform, display,
46+
communicate, and translate a Work;
47+
ii. moral rights retained by the original author(s) and/or performer(s);
48+
iii. publicity and privacy rights pertaining to a person's image or
49+
likeness depicted in a Work;
50+
iv. rights protecting against unfair competition in regards to a Work,
51+
subject to the limitations in paragraph 4(a), below;
52+
v. rights protecting the extraction, dissemination, use and reuse of data
53+
in a Work;
54+
vi. database rights (such as those arising under Directive 96/9/EC of the
55+
European Parliament and of the Council of 11 March 1996 on the legal
56+
protection of databases, and under any national implementation
57+
thereof, including any amended or successor version of such
58+
directive); and
59+
vii. other similar, equivalent or corresponding rights throughout the
60+
world based on applicable law or treaty, and any national
61+
implementations thereof.
62+
63+
2. Waiver. To the greatest extent permitted by, but not in contravention
64+
of, applicable law, Affirmer hereby overtly, fully, permanently,
65+
irrevocably and unconditionally waives, abandons, and surrenders all of
66+
Affirmer's Copyright and Related Rights and associated claims and causes
67+
of action, whether now known or unknown (including existing as well as
68+
future claims and causes of action), in the Work (i) in all territories
69+
worldwide, (ii) for the maximum duration provided by applicable law or
70+
treaty (including future time extensions), (iii) in any current or future
71+
medium and for any number of copies, and (iv) for any purpose whatsoever,
72+
including without limitation commercial, advertising or promotional
73+
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
74+
member of the public at large and to the detriment of Affirmer's heirs and
75+
successors, fully intending that such Waiver shall not be subject to
76+
revocation, rescission, cancellation, termination, or any other legal or
77+
equitable action to disrupt the quiet enjoyment of the Work by the public
78+
as contemplated by Affirmer's express Statement of Purpose.
79+
80+
3. Public License Fallback. Should any part of the Waiver for any reason
81+
be judged legally invalid or ineffective under applicable law, then the
82+
Waiver shall be preserved to the maximum extent permitted taking into
83+
account Affirmer's express Statement of Purpose. In addition, to the
84+
extent the Waiver is so judged Affirmer hereby grants to each affected
85+
person a royalty-free, non transferable, non sublicensable, non exclusive,
86+
irrevocable and unconditional license to exercise Affirmer's Copyright and
87+
Related Rights in the Work (i) in all territories worldwide, (ii) for the
88+
maximum duration provided by applicable law or treaty (including future
89+
time extensions), (iii) in any current or future medium and for any number
90+
of copies, and (iv) for any purpose whatsoever, including without
91+
limitation commercial, advertising or promotional purposes (the
92+
"License"). The License shall be deemed effective as of the date CC0 was
93+
applied by Affirmer to the Work. Should any part of the License for any
94+
reason be judged legally invalid or ineffective under applicable law, such
95+
partial invalidity or ineffectiveness shall not invalidate the remainder
96+
of the License, and in such case Affirmer hereby affirms that he or she
97+
will not (i) exercise any of his or her remaining Copyright and Related
98+
Rights in the Work or (ii) assert any associated claims and causes of
99+
action with respect to the Work, in either case contrary to Affirmer's
100+
express Statement of Purpose.
101+
102+
4. Limitations and Disclaimers.
103+
104+
a. No trademark or patent rights held by Affirmer are waived, abandoned,
105+
surrendered, licensed or otherwise affected by this document.
106+
b. Affirmer offers the Work as-is and makes no representations or
107+
warranties of any kind concerning the Work, express, implied,
108+
statutory or otherwise, including without limitation warranties of
109+
title, merchantability, fitness for a particular purpose, non
110+
infringement, or the absence of latent or other defects, accuracy, or
111+
the present or absence of errors, whether or not discoverable, all to
112+
the greatest extent permissible under applicable law.
113+
c. Affirmer disclaims responsibility for clearing rights of other persons
114+
that may apply to the Work or any use thereof, including without
115+
limitation any person's Copyright and Related Rights in the Work.
116+
Further, Affirmer disclaims responsibility for obtaining any necessary
117+
consents, permissions or other rights required for any use of the
118+
Work.
119+
d. Affirmer understands and acknowledges that Creative Commons is not a
120+
party to this document and has no duty or obligation with respect to
121+
this CC0 or use of the Work.

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# p5-lambda
2+
Yet another SDK for GoldSrc GameDLL developement

extra/lib/cmake/auxiliary.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
cmake_minimum_required(VERSION 3.10)
2+
3+
include("${CMAKE_CURRENT_LIST_DIR}/auxiliary/include_all.cmake")
4+
cmake_language(CALL "_auxiliary::include_all" "${CMAKE_CURRENT_LIST_DIR}/auxiliary")
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
cmake_minimum_required(VERSION 3.20)
2+
3+
include("CMakeParseArguments")
4+
5+
function("_auxiliary::get_target_namespace")
6+
unset("_arguments_OUTPUT")
7+
unset("_arguments_DIRECTORY")
8+
9+
set("_arguments_OUTPUT" "${ARGV0}")
10+
if("" STREQUAL "${_arguments_OUTPUT}")
11+
message(FATAL_ERROR "First argument is empty (output variable name)")
12+
endif("" STREQUAL "${_arguments_OUTPUT}")
13+
14+
unset("${_arguments_OUTPUT}")
15+
set("${_arguments_OUTPUT}" "")
16+
mark_as_advanced("${_arguments_OUTPUT}")
17+
18+
cmake_parse_arguments(
19+
PARSE_ARGV 1
20+
"_arguments" "" "PROJECT;DIRECTORY" ""
21+
)
22+
23+
if(_arguments_UNPARSED_ARGUMENTS)
24+
message(FATAL_ERROR "Unknown arguments: ${_arguments_UNPARSED_ARGUMENTS}")
25+
endif(_arguments_UNPARSED_ARGUMENTS)
26+
27+
if(DEFINED "_arguments_DIRECTORY")
28+
cmake_path(
29+
ABSOLUTE_PATH "_arguments_DIRECTORY"
30+
BASE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
31+
NORMALIZE OUTPUT_VARIABLE "_arguments_DIRECTORY"
32+
)
33+
cmake_path(IS_PREFIX "PROJECT_SOURCE_DIR" "${_arguments_DIRECTORY}" NORMALIZE "_is_prefix")
34+
if(NOT _is_prefix)
35+
message(FATAL_ERROR "DIRECTORY is not relative to PROJECT_SOURCE_DIR")
36+
endif(NOT _is_prefix)
37+
string(REGEX REPLACE "/+$" "" "_arguments_DIRECTORY" "${_arguments_DIRECTORY}")
38+
else()
39+
cmake_path(SET "_arguments_DIRECTORY" NORMALIZE "${CMAKE_CURRENT_SOURCE_DIR}")
40+
endif(DEFINED "_arguments_DIRECTORY")
41+
42+
cmake_path(
43+
RELATIVE_PATH "_arguments_DIRECTORY"
44+
BASE_DIRECTORY "${PROJECT_SOURCE_DIR}"
45+
OUTPUT_VARIABLE "_arguments_DIRECTORY"
46+
)
47+
string(REGEX REPLACE "[^_A-z\-]" "." "${_arguments_OUTPUT}" "${_arguments_DIRECTORY}")
48+
49+
if(NOT "" STREQUAL "${PROJECT_NAME}")
50+
string(PREPEND "${_arguments_OUTPUT}" "${PROJECT_NAME}+")
51+
endif(NOT "" STREQUAL "${PROJECT_NAME}")
52+
53+
set("${_arguments_OUTPUT}" "${${_arguments_OUTPUT}}" PARENT_SCOPE)
54+
endfunction("_auxiliary::get_target_namespace")
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
cmake_minimum_required(VERSION 3.23)
2+
3+
function("_auxiliary::get_timestamp")
4+
unset("_output")
5+
6+
set("_output" "${ARGV0}")
7+
if("" STREQUAL "${_output}")
8+
message(FATAL_ERROR "First argument is empty (output variable name)")
9+
endif("" STREQUAL "${_output}")
10+
11+
unset("_temporary")
12+
13+
find_package("Git")
14+
if(Git_FOUND)
15+
execute_process(
16+
COMMAND "TZ=GMT" "${GIT_EXECUTABLE}" "show" "--no-patch" "--format=%ci" "HEAD"
17+
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
18+
OUTPUT_VARIABLE "_temporary"
19+
OUTPUT_STRIP_TRAILING_WHITESPACE
20+
)
21+
endif(Git_FOUND)
22+
23+
if("" STREQUAL "${_temporary}")
24+
string(TIMESTAMP "_temporary" "%Y-%m-%dT%H:%M:%S")
25+
endif("" STREQUAL "${_temporary}")
26+
27+
unset("${_output}")
28+
set("${_output}" "${_temporary}" PARENT_SCOPE)
29+
endfunction("_auxiliary::get_timestamp")

0 commit comments

Comments
 (0)