mirror of
https://github.com/pbek/QOwnNotes.git
synced 2025-06-28 21:09:52 +00:00
#2786 botan: add script to build botan3 amalgamation
Signed-off-by: Patrizio Bekerle <patrizio@bekerle.com>
This commit is contained in:
parent
49c3b5ed28
commit
7f6dd7939d
2 changed files with 179 additions and 0 deletions
5
justfile
5
justfile
|
@ -202,3 +202,8 @@ format args='':
|
|||
[group('linter')]
|
||||
run-github-workflow args='format-check':
|
||||
nix-shell -p act --run "act -j {{ args }}"
|
||||
|
||||
# Build botan3 amalgamation
|
||||
[group('maintenance')]
|
||||
build-botan3-amalgamation:
|
||||
nix-build -E 'with import <nixpkgs> {}; callPackage ./scripts/botan3-amalgamation.nix {}'
|
||||
|
|
174
scripts/botan3-amalgamation.nix
Normal file
174
scripts/botan3-amalgamation.nix
Normal file
|
@ -0,0 +1,174 @@
|
|||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchurl,
|
||||
python3,
|
||||
which,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "botan3-amalgamation";
|
||||
version = "3.8.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://botan.randombit.net/releases/Botan-${version}.tar.xz";
|
||||
hash = "sha256-sDloHUuGGi9YU3Rti6gG9VPiOGntctie2/o8Pb+hfmg=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
python3
|
||||
which
|
||||
];
|
||||
|
||||
# Configure to build amalgamation
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
|
||||
# Configure Botan to generate amalgamation files
|
||||
# We only need the amalgamation, so we can use --no-install-python-module
|
||||
# and other minimal flags to avoid building the full library
|
||||
python3 configure.py \
|
||||
--amalgamation \
|
||||
--no-install-python-module \
|
||||
--prefix=$out
|
||||
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
||||
# Build phase - we only need the amalgamation generation, not the full build
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
# The amalgamation files are generated during configure
|
||||
# We just need to make sure they exist
|
||||
if [ ! -f botan_all.cpp ] || [ ! -f botan_all.h ]; then
|
||||
echo "Error: Amalgamation files were not generated"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ls -hal
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
# Install the amalgamation files
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/include
|
||||
mkdir -p $out/src
|
||||
|
||||
# Copy the amalgamation header and source
|
||||
cp botan_all.h $out/include/
|
||||
cp botan_all.cpp $out/src/
|
||||
|
||||
echo "Amalgamation files installed:"
|
||||
echo " Header: $out/include/botan_all.h"
|
||||
echo " Source: $out/src/botan_all.cpp"
|
||||
|
||||
# Create a simple usage example
|
||||
cat > $out/README.md << EOF
|
||||
# Botan ${version} Amalgamation
|
||||
|
||||
This package provides the Botan ${version} cryptography library as amalgamation files:
|
||||
|
||||
- \`include/botan_all.h\` - Single header file containing all Botan headers
|
||||
- \`src/botan_all.cpp\` - Single source file containing all Botan implementation
|
||||
|
||||
## Usage
|
||||
|
||||
To use in your C++ project:
|
||||
|
||||
1. Include the header: \`#include "botan_all.h"\`
|
||||
2. Compile with the source: \`g++ -std=c++20 your_code.cpp botan_all.cpp\`
|
||||
|
||||
## Example
|
||||
|
||||
\`\`\`cpp
|
||||
#include "botan_all.h"
|
||||
#include <iostream>
|
||||
|
||||
int main() {
|
||||
// Initialize Botan
|
||||
Botan::LibraryInitializer init;
|
||||
|
||||
// Use Botan functionality
|
||||
auto rng = std::make_unique<Botan::AutoSeeded_RNG>();
|
||||
auto random_data = rng->random_vec(32);
|
||||
|
||||
std::cout << "Generated " << random_data.size() << " random bytes" << std::endl;
|
||||
return 0;
|
||||
}
|
||||
\`\`\`
|
||||
|
||||
## Version Information
|
||||
|
||||
- Botan Version: ${version}
|
||||
- Generated: $(date)
|
||||
- Configuration: Amalgamation build
|
||||
EOF
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
# Verify the amalgamation files are valid
|
||||
doCheck = true;
|
||||
checkPhase = ''
|
||||
runHook preCheck
|
||||
|
||||
echo "Checking amalgamation files..."
|
||||
|
||||
if [ ! -f botan_all.h ]; then
|
||||
echo "ERROR: botan_all.h not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f botan_all.cpp ]; then
|
||||
echo "ERROR: botan_all.cpp not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
header_size=$(stat -c%s botan_all.h)
|
||||
source_size=$(stat -c%s botan_all.cpp)
|
||||
|
||||
if [ $header_size -lt 100000 ]; then
|
||||
echo "WARNING: Header file seems too small ($header_size bytes)"
|
||||
fi
|
||||
|
||||
if [ $source_size -lt 1000000 ]; then
|
||||
echo "WARNING: Source file seems too small ($source_size bytes)"
|
||||
fi
|
||||
|
||||
if ! grep -q "namespace Botan" botan_all.h; then
|
||||
echo "ERROR: Botan namespace not found in header"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Amalgamation files validation passed"
|
||||
echo "Header size: $header_size bytes"
|
||||
echo "Source size: $source_size bytes"
|
||||
|
||||
runHook postCheck
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Botan ${version} cryptography library amalgamation files";
|
||||
longDescription = ''
|
||||
This package provides Botan ${version} as amalgamation files - a single
|
||||
header (botan_all.h) and source file (botan_all.cpp) that contain the
|
||||
entire Botan cryptography library. This makes it easy to integrate Botan
|
||||
into projects without dealing with complex build dependencies.
|
||||
|
||||
Botan is a C++ cryptography library providing TLS, X.509, ECDSA, AES,
|
||||
RSA, and many other cryptographic algorithms and protocols.
|
||||
'';
|
||||
homepage = "https://botan.randombit.net/";
|
||||
changelog = "https://botan.randombit.net/news.html";
|
||||
license = licenses.bsd2;
|
||||
maintainers = [ pbek ];
|
||||
platforms = platforms.all;
|
||||
|
||||
# This is a source-only package
|
||||
hydraPlatforms = [ ];
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue