caste 0.1.1__cp314-cp314-musllinux_1_2_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- caste/__init__.py +15 -0
- caste/_caste.cpython-314-x86_64-linux-musl.so +0 -0
- caste-0.1.1.dist-info/METADATA +74 -0
- caste-0.1.1.dist-info/RECORD +16 -0
- caste-0.1.1.dist-info/WHEEL +5 -0
- caste-0.1.1.dist-info/sboms/auditwheel.cdx.json +1 -0
- caste.libs/libgcc_s-0cd532bd.so.1 +0 -0
- caste.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
- include/caste/caste.hpp +48 -0
- lib/cmake/caste/casteConfig.cmake +27 -0
- lib/cmake/caste/casteConfigVersion.cmake +65 -0
- lib/cmake/caste/casteTargets-release.cmake +19 -0
- lib/cmake/caste/casteTargets.cmake +108 -0
- lib/libcaste.a +0 -0
- share/doc/caste/LICENSE +21 -0
- share/man/man1/caste.1 +36 -0
caste/__init__.py
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Opinionated hardware classification library.
|
|
3
|
+
|
|
4
|
+
Caste inspects a user's machine and assigns it to a practical hardware category
|
|
5
|
+
(Mini, User, Developer, Workstation, or Rig) to help set sensible application defaults.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from ._caste import __version__, detect_caste, detect_caste_word, detect_hw_facts
|
|
9
|
+
|
|
10
|
+
__all__ = [
|
|
11
|
+
"__version__",
|
|
12
|
+
"detect_caste",
|
|
13
|
+
"detect_caste_word",
|
|
14
|
+
"detect_hw_facts",
|
|
15
|
+
]
|
|
Binary file
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: caste
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: Opinionated hardware classification library.
|
|
5
|
+
Keywords: hardware,classification,system-info,gpu,cpu
|
|
6
|
+
Author-Email: Zeth <holdercardteam+caste@gmail.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Project-URL: Repository, https://github.com/zeth/caste
|
|
9
|
+
Project-URL: Issues, https://github.com/zeth/caste/issues
|
|
10
|
+
Requires-Python: >=3.8
|
|
11
|
+
Provides-Extra: test
|
|
12
|
+
Requires-Dist: pytest; extra == "test"
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
|
|
15
|
+
# caste - T-Shirt sizes for hardware
|
|
16
|
+
|
|
17
|
+
Opinionated hardware classification library for Python.
|
|
18
|
+
|
|
19
|
+
`caste` is a deliberately simple library that inspects a user’s machine and assigns it to a small, practical "hardware caste" (like Mini, User, or Developer). This helps you set sensible defaults for your application based on the user's hardware without manually parsing RAM, CPU, and GPU stats.
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
pip install caste
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Quick Start
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
import caste
|
|
31
|
+
|
|
32
|
+
# Get a simple one-word label for the machine
|
|
33
|
+
print(caste.detect_caste_word()) # e.g., "User"
|
|
34
|
+
|
|
35
|
+
# Get the label and the reason for the classification
|
|
36
|
+
label, reason = caste.detect_caste()
|
|
37
|
+
print(f"Caste: {label} (Reason: {reason})")
|
|
38
|
+
|
|
39
|
+
# Get raw hardware facts if you want to perform your own logic
|
|
40
|
+
facts = caste.detect_hw_facts()
|
|
41
|
+
print(f"RAM: {facts['ram_bytes'] / 1024**3:.1f} GB")
|
|
42
|
+
print(f"Discrete GPU: {facts['has_discrete_gpu']}")
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Hardware Castes
|
|
46
|
+
|
|
47
|
+
- **Mini** — Microcomputers, embedded systems, classic/legacy PCs.
|
|
48
|
+
- **User** — Standard consumer-level machines.
|
|
49
|
+
- **Developer** — High-end personal computers.
|
|
50
|
+
- **Workstation** — Professional content-creation or high-end gaming machines.
|
|
51
|
+
- **Rig** — Dedicated servers or specialised compute systems.
|
|
52
|
+
|
|
53
|
+
## API Reference
|
|
54
|
+
|
|
55
|
+
`detect_hw_facts()` returns a dictionary with:
|
|
56
|
+
|
|
57
|
+
- `ram_bytes` (int)
|
|
58
|
+
- `physical_cores` (int)
|
|
59
|
+
- `logical_threads` (int)
|
|
60
|
+
- `gpu_kind` (0=None, 1=Integrated, 2=Unified, 3=Discrete)
|
|
61
|
+
- `vram_bytes` (int)
|
|
62
|
+
- `has_discrete_gpu` (bool)
|
|
63
|
+
- `is_apple_silicon` (bool)
|
|
64
|
+
- `is_intel_arc` (bool)
|
|
65
|
+
|
|
66
|
+
## Why use caste?
|
|
67
|
+
|
|
68
|
+
Modern applications often launch with no idea of the underlying hardware capability. If defaults are tuned only for a developer’s machine, it can lead to sluggish experiences on low-end hardware or not showing off your apps's best capabilities on high-end systems. `caste` provides a standardized way to bridge this gap.
|
|
69
|
+
|
|
70
|
+
There is also a C++ library and an executable for shell scripts and build systems. See the Github repo for details.
|
|
71
|
+
|
|
72
|
+
## License
|
|
73
|
+
|
|
74
|
+
MIT
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
caste/__init__.py,sha256=MJlHCvtpkMulHvGIqMeEkJgrOXMflPvZzDem-AONXc4,407
|
|
2
|
+
caste/_caste.cpython-314-x86_64-linux-musl.so,sha256=rZkZ4fjmtyQl0o7mzJWvn4pDDZJFkY_sXvELzHT9Gz0,191913
|
|
3
|
+
caste.libs/libgcc_s-0cd532bd.so.1,sha256=yPk0-VjyKzucjnkP3mvC0vVaua6Ln17qZUJbICcXgtA,181737
|
|
4
|
+
caste.libs/libstdc++-5d72f927.so.6.0.33,sha256=fogxHsmB1_D6C-a_-uHh8Ei_6Qh52a8vLlicJRM3ehk,3562401
|
|
5
|
+
include/caste/caste.hpp,sha256=3SWO24J59dRG9LtHh6YgvI4dxT9Tvjd0iP8CKVoJE-E,1304
|
|
6
|
+
lib/libcaste.a,sha256=FbLVHyfiw6bskHmprW3QRQYBJ6uh3yCNy1UiEoO2IKs,56516
|
|
7
|
+
lib/cmake/caste/casteConfig.cmake,sha256=MQiqwhWln2NUUXYSsuqkWIKqGo3JG9YaSEMUfXeNRFc,935
|
|
8
|
+
lib/cmake/caste/casteConfigVersion.cmake,sha256=REDN-rfH5OT__PDYHWmPzYApDE8qjTLE-CQpk7CvlR0,2762
|
|
9
|
+
lib/cmake/caste/casteTargets-release.cmake,sha256=azYExIX60eoPQgJMl-jRHxYePK5kucetIOrQU4EypPs,831
|
|
10
|
+
lib/cmake/caste/casteTargets.cmake,sha256=cAshrk68d0y6rXuzWbfYMqO2z7NeV1itor8VmA6oW0U,4187
|
|
11
|
+
share/doc/caste/LICENSE,sha256=nKZjaL__KpJTeJioBnR2Np2AAxZkH8R1DTXjhFRJ1IA,1061
|
|
12
|
+
share/man/man1/caste.1,sha256=tijtiabbdGwW5nVGm6vIC5wsHVT5l8q7oDY5IlNiOVE,690
|
|
13
|
+
caste-0.1.1.dist-info/METADATA,sha256=E-hForFUoAKWWaVn0wXsBSw595c63_QylMhr7RpqviM,2496
|
|
14
|
+
caste-0.1.1.dist-info/WHEEL,sha256=pEBxBeO8W2ULYAGwFktgcoZsiuSJ4czyKsyQXQJ2Itg,117
|
|
15
|
+
caste-0.1.1.dist-info/RECORD,,
|
|
16
|
+
caste-0.1.1.dist-info/sboms/auditwheel.cdx.json,sha256=kxVcqSjUjYk41Ou0yOiQ4BEHoXSXdjtYp48UlcsaHhs,1654
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"bomFormat": "CycloneDX", "specVersion": "1.4", "version": 1, "metadata": {"component": {"type": "library", "bom-ref": "pkg:pypi/caste@0.1.1?file_name=caste-0.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", "name": "caste", "version": "0.1.1", "purl": "pkg:pypi/caste@0.1.1?file_name=caste-0.1.1-cp314-cp314-musllinux_1_2_x86_64.whl"}, "tools": [{"name": "auditwheel", "version": "6.6.0"}]}, "components": [{"type": "library", "bom-ref": "pkg:pypi/caste@0.1.1?file_name=caste-0.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", "name": "caste", "version": "0.1.1", "purl": "pkg:pypi/caste@0.1.1?file_name=caste-0.1.1-cp314-cp314-musllinux_1_2_x86_64.whl"}, {"type": "library", "bom-ref": "pkg:apk/alpine/libstdc%2B%2B@14.2.0-r6#76f023cbc3d7b369d6008f354e88aa983d13e4bd8f06e4e49a01686039fe1509", "name": "libstdc++", "version": "14.2.0-r6", "purl": "pkg:apk/alpine/libstdc%2B%2B@14.2.0-r6"}, {"type": "library", "bom-ref": "pkg:apk/alpine/libgcc@14.2.0-r6#933a623c9e323e83b1734e630a342f206999adc096732a3fea9896fa0181ea29", "name": "libgcc", "version": "14.2.0-r6", "purl": "pkg:apk/alpine/libgcc@14.2.0-r6"}], "dependencies": [{"ref": "pkg:pypi/caste@0.1.1?file_name=caste-0.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", "dependsOn": ["pkg:apk/alpine/libstdc%2B%2B@14.2.0-r6#76f023cbc3d7b369d6008f354e88aa983d13e4bd8f06e4e49a01686039fe1509", "pkg:apk/alpine/libgcc@14.2.0-r6#933a623c9e323e83b1734e630a342f206999adc096732a3fea9896fa0181ea29"]}, {"ref": "pkg:apk/alpine/libstdc%2B%2B@14.2.0-r6#76f023cbc3d7b369d6008f354e88aa983d13e4bd8f06e4e49a01686039fe1509"}, {"ref": "pkg:apk/alpine/libgcc@14.2.0-r6#933a623c9e323e83b1734e630a342f206999adc096732a3fea9896fa0181ea29"}]}
|
|
Binary file
|
|
Binary file
|
include/caste/caste.hpp
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <cstdint>
|
|
4
|
+
#include <string>
|
|
5
|
+
|
|
6
|
+
enum class Caste {
|
|
7
|
+
Mini,
|
|
8
|
+
User,
|
|
9
|
+
Developer,
|
|
10
|
+
Workstation,
|
|
11
|
+
Rig
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
enum class GpuKind {
|
|
15
|
+
None,
|
|
16
|
+
Integrated, // Intel UHD/Iris Xe, AMD iGPU, etc. (shared memory)
|
|
17
|
+
Unified, // Apple Silicon style unified memory (shared, but fast)
|
|
18
|
+
Discrete // NVIDIA/AMD dGPU with dedicated VRAM
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
struct HwFacts {
|
|
22
|
+
// Memory
|
|
23
|
+
uint64_t ram_bytes = 0;
|
|
24
|
+
|
|
25
|
+
// CPU (use whatever you can get; physical if known, else set to 0)
|
|
26
|
+
int physical_cores = 0;
|
|
27
|
+
int logical_threads = 0;
|
|
28
|
+
|
|
29
|
+
// GPU summary (your detection layer fills this)
|
|
30
|
+
GpuKind gpu_kind = GpuKind::None;
|
|
31
|
+
uint64_t vram_bytes = 0; // only meaningful if gpu_kind == Discrete
|
|
32
|
+
bool has_discrete_gpu = false; // convenience (often same as gpu_kind==Discrete)
|
|
33
|
+
bool is_apple_silicon = false; // macOS arm64
|
|
34
|
+
bool is_intel_arc = false; // Arc dGPU OR Arc-class iGPU (your detection decides)
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
struct CasteResult {
|
|
38
|
+
Caste caste = Caste::Mini;
|
|
39
|
+
std::string reason; // for logs/UI
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
CasteResult classify_caste(const HwFacts& hw);
|
|
43
|
+
const char* caste_name(Caste t);
|
|
44
|
+
|
|
45
|
+
// Simple public API: call this and get a single word bucket name.
|
|
46
|
+
HwFacts detect_hw_facts();
|
|
47
|
+
CasteResult detect_caste();
|
|
48
|
+
std::string detect_caste_word();
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
|
|
2
|
+
####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
|
|
3
|
+
####### Any changes to this file will be overwritten by the next CMake run ####
|
|
4
|
+
####### The input file was casteConfig.cmake.in ########
|
|
5
|
+
|
|
6
|
+
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
|
|
7
|
+
|
|
8
|
+
macro(set_and_check _var _file)
|
|
9
|
+
set(${_var} "${_file}")
|
|
10
|
+
if(NOT EXISTS "${_file}")
|
|
11
|
+
message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
|
|
12
|
+
endif()
|
|
13
|
+
endmacro()
|
|
14
|
+
|
|
15
|
+
macro(check_required_components _NAME)
|
|
16
|
+
foreach(comp ${${_NAME}_FIND_COMPONENTS})
|
|
17
|
+
if(NOT ${_NAME}_${comp}_FOUND)
|
|
18
|
+
if(${_NAME}_FIND_REQUIRED_${comp})
|
|
19
|
+
set(${_NAME}_FOUND FALSE)
|
|
20
|
+
endif()
|
|
21
|
+
endif()
|
|
22
|
+
endforeach()
|
|
23
|
+
endmacro()
|
|
24
|
+
|
|
25
|
+
####################################################################################
|
|
26
|
+
|
|
27
|
+
include("${CMAKE_CURRENT_LIST_DIR}/casteTargets.cmake")
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# This is a basic version file for the Config-mode of find_package().
|
|
2
|
+
# It is used by write_basic_package_version_file() as input file for configure_file()
|
|
3
|
+
# to create a version-file which can be installed along a config.cmake file.
|
|
4
|
+
#
|
|
5
|
+
# The created file sets PACKAGE_VERSION_EXACT if the current version string and
|
|
6
|
+
# the requested version string are exactly the same and it sets
|
|
7
|
+
# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version,
|
|
8
|
+
# but only if the requested major version is the same as the current one.
|
|
9
|
+
# The variable CVF_VERSION must be set before calling configure_file().
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
set(PACKAGE_VERSION "0.1.0")
|
|
13
|
+
|
|
14
|
+
if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
|
|
15
|
+
set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
|
16
|
+
else()
|
|
17
|
+
|
|
18
|
+
if("0.1.0" MATCHES "^([0-9]+)\\.")
|
|
19
|
+
set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
|
20
|
+
if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0)
|
|
21
|
+
string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}")
|
|
22
|
+
endif()
|
|
23
|
+
else()
|
|
24
|
+
set(CVF_VERSION_MAJOR "0.1.0")
|
|
25
|
+
endif()
|
|
26
|
+
|
|
27
|
+
if(PACKAGE_FIND_VERSION_RANGE)
|
|
28
|
+
# both endpoints of the range must have the expected major version
|
|
29
|
+
math (EXPR CVF_VERSION_MAJOR_NEXT "${CVF_VERSION_MAJOR} + 1")
|
|
30
|
+
if (NOT PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
|
|
31
|
+
OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR)
|
|
32
|
+
OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL CVF_VERSION_MAJOR_NEXT)))
|
|
33
|
+
set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
|
34
|
+
elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
|
|
35
|
+
AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX)
|
|
36
|
+
OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX)))
|
|
37
|
+
set(PACKAGE_VERSION_COMPATIBLE TRUE)
|
|
38
|
+
else()
|
|
39
|
+
set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
|
40
|
+
endif()
|
|
41
|
+
else()
|
|
42
|
+
if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR)
|
|
43
|
+
set(PACKAGE_VERSION_COMPATIBLE TRUE)
|
|
44
|
+
else()
|
|
45
|
+
set(PACKAGE_VERSION_COMPATIBLE FALSE)
|
|
46
|
+
endif()
|
|
47
|
+
|
|
48
|
+
if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
|
|
49
|
+
set(PACKAGE_VERSION_EXACT TRUE)
|
|
50
|
+
endif()
|
|
51
|
+
endif()
|
|
52
|
+
endif()
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
|
|
56
|
+
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "")
|
|
57
|
+
return()
|
|
58
|
+
endif()
|
|
59
|
+
|
|
60
|
+
# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
|
|
61
|
+
if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8")
|
|
62
|
+
math(EXPR installedBits "8 * 8")
|
|
63
|
+
set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
|
|
64
|
+
set(PACKAGE_VERSION_UNSUITABLE TRUE)
|
|
65
|
+
endif()
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#----------------------------------------------------------------
|
|
2
|
+
# Generated CMake target import file for configuration "Release".
|
|
3
|
+
#----------------------------------------------------------------
|
|
4
|
+
|
|
5
|
+
# Commands may need to know the format version.
|
|
6
|
+
set(CMAKE_IMPORT_FILE_VERSION 1)
|
|
7
|
+
|
|
8
|
+
# Import target "caste::caste" for configuration "Release"
|
|
9
|
+
set_property(TARGET caste::caste APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
|
10
|
+
set_target_properties(caste::caste PROPERTIES
|
|
11
|
+
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
|
|
12
|
+
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libcaste.a"
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
list(APPEND _cmake_import_check_targets caste::caste )
|
|
16
|
+
list(APPEND _cmake_import_check_files_for_caste::caste "${_IMPORT_PREFIX}/lib/libcaste.a" )
|
|
17
|
+
|
|
18
|
+
# Commands beyond this point should not need to know the version.
|
|
19
|
+
set(CMAKE_IMPORT_FILE_VERSION)
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Generated by CMake
|
|
2
|
+
|
|
3
|
+
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
|
|
4
|
+
message(FATAL_ERROR "CMake >= 2.8.3 required")
|
|
5
|
+
endif()
|
|
6
|
+
if(CMAKE_VERSION VERSION_LESS "2.8.3")
|
|
7
|
+
message(FATAL_ERROR "CMake >= 2.8.3 required")
|
|
8
|
+
endif()
|
|
9
|
+
cmake_policy(PUSH)
|
|
10
|
+
cmake_policy(VERSION 2.8.3...4.0)
|
|
11
|
+
#----------------------------------------------------------------
|
|
12
|
+
# Generated CMake target import file.
|
|
13
|
+
#----------------------------------------------------------------
|
|
14
|
+
|
|
15
|
+
# Commands may need to know the format version.
|
|
16
|
+
set(CMAKE_IMPORT_FILE_VERSION 1)
|
|
17
|
+
|
|
18
|
+
# Protect against multiple inclusion, which would fail when already imported targets are added once more.
|
|
19
|
+
set(_cmake_targets_defined "")
|
|
20
|
+
set(_cmake_targets_not_defined "")
|
|
21
|
+
set(_cmake_expected_targets "")
|
|
22
|
+
foreach(_cmake_expected_target IN ITEMS caste::caste)
|
|
23
|
+
list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
|
|
24
|
+
if(TARGET "${_cmake_expected_target}")
|
|
25
|
+
list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
|
|
26
|
+
else()
|
|
27
|
+
list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}")
|
|
28
|
+
endif()
|
|
29
|
+
endforeach()
|
|
30
|
+
unset(_cmake_expected_target)
|
|
31
|
+
if(_cmake_targets_defined STREQUAL _cmake_expected_targets)
|
|
32
|
+
unset(_cmake_targets_defined)
|
|
33
|
+
unset(_cmake_targets_not_defined)
|
|
34
|
+
unset(_cmake_expected_targets)
|
|
35
|
+
unset(CMAKE_IMPORT_FILE_VERSION)
|
|
36
|
+
cmake_policy(POP)
|
|
37
|
+
return()
|
|
38
|
+
endif()
|
|
39
|
+
if(NOT _cmake_targets_defined STREQUAL "")
|
|
40
|
+
string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}")
|
|
41
|
+
string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}")
|
|
42
|
+
message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n")
|
|
43
|
+
endif()
|
|
44
|
+
unset(_cmake_targets_defined)
|
|
45
|
+
unset(_cmake_targets_not_defined)
|
|
46
|
+
unset(_cmake_expected_targets)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# Compute the installation prefix relative to this file.
|
|
50
|
+
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
|
51
|
+
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
|
|
52
|
+
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
|
|
53
|
+
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
|
|
54
|
+
if(_IMPORT_PREFIX STREQUAL "/")
|
|
55
|
+
set(_IMPORT_PREFIX "")
|
|
56
|
+
endif()
|
|
57
|
+
|
|
58
|
+
# Create imported target caste::caste
|
|
59
|
+
add_library(caste::caste STATIC IMPORTED)
|
|
60
|
+
|
|
61
|
+
set_target_properties(caste::caste PROPERTIES
|
|
62
|
+
INTERFACE_COMPILE_DEFINITIONS "CASTE_VERSION=\"0.1.0\""
|
|
63
|
+
INTERFACE_COMPILE_FEATURES "cxx_std_20"
|
|
64
|
+
INTERFACE_INCLUDE_DIRECTORIES "/caste"
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
# Load information for each installed configuration.
|
|
68
|
+
file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/casteTargets-*.cmake")
|
|
69
|
+
foreach(_cmake_config_file IN LISTS _cmake_config_files)
|
|
70
|
+
include("${_cmake_config_file}")
|
|
71
|
+
endforeach()
|
|
72
|
+
unset(_cmake_config_file)
|
|
73
|
+
unset(_cmake_config_files)
|
|
74
|
+
|
|
75
|
+
# Cleanup temporary variables.
|
|
76
|
+
set(_IMPORT_PREFIX)
|
|
77
|
+
|
|
78
|
+
# Loop over all imported files and verify that they actually exist
|
|
79
|
+
foreach(_cmake_target IN LISTS _cmake_import_check_targets)
|
|
80
|
+
if(CMAKE_VERSION VERSION_LESS "3.28"
|
|
81
|
+
OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target}
|
|
82
|
+
OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}")
|
|
83
|
+
foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
|
|
84
|
+
if(NOT EXISTS "${_cmake_file}")
|
|
85
|
+
message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
|
|
86
|
+
\"${_cmake_file}\"
|
|
87
|
+
but this file does not exist. Possible reasons include:
|
|
88
|
+
* The file was deleted, renamed, or moved to another location.
|
|
89
|
+
* An install or uninstall procedure did not complete successfully.
|
|
90
|
+
* The installation package was faulty and contained
|
|
91
|
+
\"${CMAKE_CURRENT_LIST_FILE}\"
|
|
92
|
+
but not all the files it references.
|
|
93
|
+
")
|
|
94
|
+
endif()
|
|
95
|
+
endforeach()
|
|
96
|
+
endif()
|
|
97
|
+
unset(_cmake_file)
|
|
98
|
+
unset("_cmake_import_check_files_for_${_cmake_target}")
|
|
99
|
+
endforeach()
|
|
100
|
+
unset(_cmake_target)
|
|
101
|
+
unset(_cmake_import_check_targets)
|
|
102
|
+
|
|
103
|
+
# This file does not depend on other imported targets which have
|
|
104
|
+
# been exported from the same project but in a separate export set.
|
|
105
|
+
|
|
106
|
+
# Commands beyond this point should not need to know the version.
|
|
107
|
+
set(CMAKE_IMPORT_FILE_VERSION)
|
|
108
|
+
cmake_policy(POP)
|
lib/libcaste.a
ADDED
|
Binary file
|
share/doc/caste/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Zeth
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
share/man/man1/caste.1
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
.TH CASTE 1 "February 1, 2026" "caste 0.1.0" "User Commands"
|
|
2
|
+
.SH NAME
|
|
3
|
+
caste \- print a single-word hardware class
|
|
4
|
+
.SH SYNOPSIS
|
|
5
|
+
.B caste
|
|
6
|
+
[\fB\-\-reason\fR]
|
|
7
|
+
[\fB\-\-version\fR]
|
|
8
|
+
[\fB\-h\fR|\fB\-\-help\fR]
|
|
9
|
+
.SH DESCRIPTION
|
|
10
|
+
The
|
|
11
|
+
.B caste
|
|
12
|
+
command prints a single-word hardware class inferred from the system:
|
|
13
|
+
Mini, User, Developer, Workstation, or Rig.
|
|
14
|
+
.SH OPTIONS
|
|
15
|
+
.TP
|
|
16
|
+
.B \-\-reason
|
|
17
|
+
Include a short explanation after the class.
|
|
18
|
+
.TP
|
|
19
|
+
.B \-\-version
|
|
20
|
+
Print the version and exit.
|
|
21
|
+
.TP
|
|
22
|
+
.B \-h, \-\-help
|
|
23
|
+
Show a brief usage message.
|
|
24
|
+
.SH EXAMPLES
|
|
25
|
+
.TP
|
|
26
|
+
.B caste
|
|
27
|
+
Print the class only.
|
|
28
|
+
.TP
|
|
29
|
+
.B caste \-\-reason
|
|
30
|
+
Print the class and a short explanation.
|
|
31
|
+
.SH EXIT STATUS
|
|
32
|
+
.TP
|
|
33
|
+
.B 0
|
|
34
|
+
Success.
|
|
35
|
+
.SH SEE ALSO
|
|
36
|
+
.BR uname (1)
|