taler-mdb

GNU Taler Extensions and Integrations
Log | Files | Refs | Submodules | README | LICENSE

commit 6bf244292bad88792375e0e630150870a22c2d41
parent 6115b134556a32febfc577334814a3d611a8bd6b
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Thu, 23 Apr 2026 10:39:22 +0200

build: Migrate to meson

Diffstat:
M.gitignore | 2--
DMakefile.am | 6------
AMakefile.in | 49+++++++++++++++++++++++++++++++++++++++++++++++++
Mbootstrap | 6+++---
Aconfigure | 255+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dcontrib/Makefile.am | 70----------------------------------------------------------------------
Acontrib/meson.build | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ddoc/Makefile.am | 12------------
Adoc/meson.build | 10++++++++++
Aflake.lock | 822+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aflake.nix | 123+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ameson.build | 292+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ameson.options | 5+++++
Dsrc/Makefile.am | 59-----------------------------------------------------------
Asrc/meson.build | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
15 files changed, 1685 insertions(+), 152 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1,5 +1,4 @@ Makefile -Makefile.in aclocal.m4 autom4te.cache/ autoscan.log @@ -9,7 +8,6 @@ config.h.in config.h.in~ config.log config.status -configure configure.ac~ depcomp install-sh diff --git a/Makefile.am b/Makefile.am @@ -1,6 +0,0 @@ -SUBDIRS = contrib src doc . - -EXTRA_DIST = \ - AUTHORS - -ACLOCAL_AMFLAGS = -I m4 diff --git a/Makefile.in b/Makefile.in @@ -0,0 +1,49 @@ +# Build the program in the local tree +.PHONY: all +all: + $(NINJA) -C $(mesonbuilddir) + +# Install the program +.PHONY: install +install: all + $(MESON) install -C $(mesonbuilddir) + +# Remove files created during 'all' +.PHONY: clean +clean: + $(NINJA) -C $(mesonbuilddir) -t clean + +# Remove files created during 'install' +.PHONY: uninstall +uninstall: + $(NINJA) uninstall -C $(mesonbuilddir) + +# Make tarball +.PHONY: dist +dist: + $(MESON) dist -C $(mesonbuilddir) --no-tests --formats gztar + +# Make doxygen +.PHONY: doxygen +doxygen: + $(NINJA) -C $(mesonbuilddir) doxygen + +# Run tests +.PHONY: check +check: + $(MESON) test -C $(mesonbuilddir) + +.PHONY: installcheck +installcheck: + $(MESON) test -C $(mesonbuilddir) --suite=installcheck + +.PHONY: integrationtests +integrationtests: + $(MESON) test -C $(mesonbuilddir) --suite=integrationtests + +format: + $(MESON) fmt -i -r . + #find ./src -name "*.[h,c]" | uncrustify -l c -c contrib/conf/uncrustify.cfg -F - --replace --no-backup + +Makefile: Makefile.in + ./config.status diff --git a/bootstrap b/bootstrap @@ -5,7 +5,9 @@ if ! git --version >/dev/null; then exit 1 fi -git submodule update --init +if [ -d ".git" ]; then + git submodule update --init +fi # This is more portable than `which' but comes with # the caveat of not(?) properly working on busybox's ash: @@ -24,5 +26,3 @@ if existence uncrustify; then else echo "Uncrustify not detected, hook not installed. Please install uncrustify if you plan on doing development" fi - -autoreconf -fi diff --git a/configure b/configure @@ -0,0 +1,255 @@ +#!/bin/sh + +pkg_name="taler-mdb" +pkg_default_features="" +pkg_optional_features="coverage logging only-doc install-rpath" +pkg_optional_dependencies="" + +# DO NOT EDIT BELOW THIS LINE +standard_dirs="prefix exec_prefix bindir sbindir libexecdir sysconfdir sharedstatedir localstatedir runstatedir libdir includedir oldincludedir datarootdir datadir infodir localedir mandir docdir htmldir dvidir pdfdir psdir srcdir mesonbuilddir" +standard_utils="AR AS BISON CC CXX CPP FLEX INSTALL LD LDCONFIG LEX MAKE MAKEINFO RANLIB TEXI2DVI YACC CHGRP CHMOD CHOWN MKNOD RM NINJA MESON" +standard_flags="ARFLAGS BISONFLAGS CFLAGS CXXFLAGS CPPFLAGS FLEXFLAGS INSTALLFLAGS LDFLAGS LDCONFIGFLAGS LFLAGS MAKEFLAGS MAKEINFOFLAGS RANLIBFLAGS TEXI2DVIFLAGS YACCFLAGS CHGRPFLAGS CHMODFLAGS CHOWNFLAGS MKNODFLAGS" +standard_vars="INSTALL_DATA INSTALL_PROGRAM INSTALL_SCRIPT" +generated_comment="# This file was generated by configure. DO NOT edit it directly." + +# Save arguments +cat > config.status <<EOF +#!/bin/sh +$generated_comment +$0 $* +EOF +chmod 755 config.status + +# Parse arguments +oldifs="$IFS" +while [ "$#" -gt "0" ]; do + arg="$1" + shift + argsave="$@" + + IFS="=" + set -- $arg + IFS="$oldifs" + arg="$1" + shift + argparam="$@" + + case "$arg" in + --help|-h) + cat <<-EOF + Usage: $0 [options...] + General options: + + <variable>=<value> Overrides default utils and flags, e.g. CC=gcc + EOF + echo "" + echo "Directory variables:" + for sdir in $standard_dirs; do + echo "--$sdir=<directory>" + done + echo "" + echo "Options specific to $pkg_name:" + for feat in $pkg_optional_features; do + echo "--enable-$feat[=arg]" + done + for feat in $pkg_default_features; do + echo "--disable-$feat" + done + for dep in $pkg_optional_dependencies; do + echo "--with-$dep" + done + + echo + echo Other options will be ignored. Please see the README for additional information. + exit 0 + ;; + --enable-*) + for feat in $pkg_optional_features $pkg_default_features; do + ft=$(echo $feat | tr - _) + if [ "--enable-$feat" = "$arg" ] && [ -z "$argparam" ]; then + eval "enable_$ft=true" + elif [ "--enable-$feat" = "$arg" ]; then + if [ "$argparam" = "yes" ]; then + eval "enable_$ft=\"true\"" + else + eval "enable_$ft=\"$argparam\"" + fi + fi + done + ;; + --disable-*) + argsave="--enable-${arg#--disable-}=false $argsave" + ;; + --with-*) + for dep in $pkg_optional_dependencies; do + if [ "--with-$dep" = "$arg" ] && [ -z "$argparam" ]; then + eval "with_$dep=yes" + elif [ "--with-$dep" = "$arg" ]; then + eval "with_$dep=\"$argparam\"" + fi + done + ;; + --without-*) + argsave="--with-${arg#--without-}=no $argsave" + ;; + --*) + for dir in $standard_dirs; do + [ "--$dir" = "$arg" ] && eval "var_$dir=\"$argparam\"" + done + ;; + *) + for flag in $standard_utils $standard_flags standard_vars; do + [ "$flag" = "$arg" ] && eval "$flag=\"$argparam\"" + done + ;; + esac + + set -- $argsave +done + +# Set default values +for util in $standard_utils; do + case "$util" in + CPP) eval "$util=\"\${${util}:-\\\$(CC) -E}\"" ;; + CXX) eval "$util=\"\${${util}:-g++}\"" ;; + RM) eval "$util=\"\${${util}:-rm -f}\"" ;; + MESON) eval "$util=\"\${${util}:-meson}\"" ;; + NINJA) eval "$util=\"\${${util}:-ninja}\"" ;; + *) eval "$util=\"\${${util}:-${util}}\"" ;; + esac +done +for feat in $pkg_optional_features; do + ft=$(echo $feat | tr - _) + eval "enable_$ft=\${enable_$ft:-false}" +done +for feat in $pkg_default_features; do + eval "enable_$feat=\${enable_$feat:-true}" +done +for feat in $pkg_optional_dependencies; do + eval "with_$feat=\${with_$feat:-no}" +done + +# Find source files +if [ -z "$var_srcdir" ]; then + [ -f ../Makefile.in ] && var_srcdir=.. + [ -f ./Makefile.in ] && var_srcdir=. +fi +if [ -z "$var_srcdir" ]; then + echo "Source files not found. Please specify a directory using --srcdir=..." >&2 + exit 1 +fi + +# Write Makefile +cat > Makefile <<EOF +$generated_comment +SHELL = /bin/sh +VPATH = ${var_srcdir} + +mesonbuilddir = ${var_mesonbuilddir:-build} +srcdir = ${var_srcdir} +prefix = ${var_prefix:-/usr/local} +exec_prefix = ${var_exec_prefix:-\$(prefix)} +bindir = ${var_bindir:-\$(exec_prefix)/bin} +sbindir = ${var_sbindir:-\$(exec_prefix)/sbin} +libexecdir = ${var_libexecdir:-\$(exec_prefix)/libexec} +datarootdir = ${var_datarootdir:-\$(prefix)/share} +datadir = ${var_datadir:-\$(datarootdir)} +sysconfdir = ${var_sysconfdir:-\$(prefix)/etc} +sharedstatedir = ${var_sharedstatedir:-\$(prefix)/com} +localstatedir = ${var_localstatedir:-\$(prefix)/var} +runstatedir = ${var_runstatedir:-\$(localstatedir)/run} +includedir = ${var_includedir:-\$(prefix)/include} +oldincludedir = ${var_oldincludedir:-/usr/include} +docdir = ${var_docdir:-\$(datarootdir)/doc/"$pkg_name"} +infodir = ${var_infodir:-\$(datarootdir)/info} +htmldir = ${var_htmldir:-\$(docdir)} +dvidir = ${var_dvidir:-\$(docdir)} +pdfdir = ${var_pdfdir:-\$(docdir)} +psdir = ${var_psdir:-\$(docdir)} +libdir = ${var_libdir:-\$(exec_prefix)/lib} +lispdir = ${var_lispdir:-\$(datarootdir)/emacs/site-lisp} +localedir = ${var_localedir:-\$(datarootdir)/locale} +mandir = ${var_mandir:-\$(datarootdir)/man} +manext = .1 +EOF + +if [ -d ${var_mesonbuilddir:-build} ]; then + echo "${var_mesonbuilddir:-build} already exists, deleting with" + $RM -r ${var_mesonbuilddir:-build} || exit 1 +fi + +for var in $standard_utils $standard_flags $standard_vars; do + eval "echo \"${var} = \$${var}\" >> Makefile" +done +echo >> Makefile + +mesonfeatopts="" +for feat in $pkg_optional_features $pkg_default_features; do + ft=$(echo $feat | tr - _) + eval "echo \"enable_$ft=\${enable_$ft}\" >> Makefile" + if [ "coverage" = $feat ]; then + mfeat="b_$feat" + else + mfeat=$feat + fi + eval "mesonfeatopts=\"$mesonfeatopts -D$mfeat=\${enable_$ft}\"" +done +for dep in $pkg_optional_dependencies; do + eval "echo \"with_$dep=\${with_$dep}\" >> Makefile" +done +echo >> Makefile + +cat "${var_srcdir}/Makefile.in" >> Makefile + +# Create default targets, if not already present +default_target() { + grep "^$1:" Makefile >/dev/null && return + echo ".PHONY: $1" >> Makefile + echo "$1: $2" >> Makefile + cat >> Makefile + echo >> Makefile +} + +#default_target Makefile <<EOF +# ./config.status +#EOF +for format in html dvi pdf ps; do + default_target "$format" </dev/null + default_target "install-$format" "$format" </dev/null +done +default_target check </dev/null +default_target mostlyclean clean </dev/null +default_target distclean clean <<EOF + \$(RM) Makefile config.status +EOF +default_target maintainer-clean distclean </dev/null +default_target install-strip <<EOF + \$(MAKE) INSTALL_PROGRAM='\$(INSTALL_PROGRAM) -s' \\ + INSTALL_SCRIPT='\$(INSTALL_SCRIPT)' install +EOF + +mesondiropts="" +for dr in $standard_dirs; do + if [ $dr = "srcdir" ]; then + continue + fi + if [ $dr = "mesonbuilddir" ]; then + continue + fi + eval "vn=\${var_$dr}" + if [ ! -z $vn ]; then + eval "mesondiropts=\"$mesondiropts -D$dr=\${var_$dr}\"" + fi +done + +${MESON} setup \ + -Ddefault_library=shared \ + $mesondiropts \ + $mesonfeatopts \ + ${var_mesonbuilddir:-build} \ + ${var_srcdir} || exit 1 + +# Done +echo "Package $pkg_name configured successfully." +echo "Run 'make' to build and 'make install' to install the package" + diff --git a/contrib/Makefile.am b/contrib/Makefile.am @@ -1,70 +0,0 @@ -SUBDIRS = . - -imgdir=$(datadir)/taler/mdb -img_DATA = \ - err/png/backend-auth-failure.png \ - err/png/backend-dns-resolution-failure.png \ - err/png/backend-no-webserver.png \ - err/png/backend-temporary-failure.png \ - err/png/backend-unexpected-failure.png \ - err/png/backend-unreachable.png \ - err/png/backend-x509-cert-bad.png \ - err/png/child-died.png \ - err/png/dispensing.png \ - err/png/err-num-read-fail.png \ - err/png/err-sold-out.png \ - err/png/internal-failure.png \ - err/png/maintenance.png \ - err/png/no-ip.png \ - err/png/unknown-product.png - -adsdir=$(datadir)/taler/ads -ads_DATA = \ - ads/png/add-without-plus-8s.png \ - ads/png/chocolate-5s.png \ - ads/png/debug-my-code-7s.png \ - ads/png/dep-tree-10s.png \ - ads/png/dont-touch-it-10s.png \ - ads/png/error-handling-5s.png \ - ads/png/just-keep-coding-4s.png \ - ads/png/kitkat-7s.png \ - ads/png/lockpick-9s.png \ - ads/png/lockpick-physical-sec-9s.png \ - ads/png/lua-rules-4s.png \ - ads/png/not-even-the-bread-4s.png \ - ads/png/notsnack-7s.png \ - ads/png/paravirt-8s.png \ - ads/png/success-unreachable-7s.png \ - ads/png/swissknife-10s.png \ - ads/png/taler1-5s.png \ - ads/png/taler2-7s.png \ - ads/png/taler-machine-whats-inside-7s.png \ - ads/png/taler-post-blockchain-18s.png \ - ads/png/taler-principles-1-3s.png \ - ads/png/taler-principles-2-4s.png \ - ads/png/taler-principles-3-3s.png \ - ads/png/taler-principles-4-3s.png \ - ads/png/taler-principles-5-4s.png \ - ads/png/taler-principles-6-3s.png \ - ads/png/taler-principles-7-3s.png \ - ads/png/taler-principles-8-3s.png \ - ads/png/taler-principles-9-3s.png \ - ads/png/taler-rms-5s.png \ - ads/png/taler-wallet-eCHF-french-10s.png \ - ads/png/taler-wallet-eCHF-german-10s.png \ - ads/png/taler-wallet-question-15s.png - - - -bin_SCRIPTS = \ - taler-mdb-ads.sh \ - taler-mdb-show.sh \ - taler-mdb-network-check.sh - -EXTRA_DIST = \ - $(bin_SCRIPTS) \ - $(img_DATA) \ - $(ads_DATA) \ - bump \ - uncrustify.cfg \ - uncrustify_precommit diff --git a/contrib/meson.build b/contrib/meson.build @@ -0,0 +1,65 @@ +install_data( + 'err' / 'png' / 'backend-auth-failure.png', + 'err' / 'png' / 'backend-dns-resolution-failure.png', + 'err' / 'png' / 'backend-no-webserver.png', + 'err' / 'png' / 'backend-temporary-failure.png', + 'err' / 'png' / 'backend-unexpected-failure.png', + 'err' / 'png' / 'backend-unreachable.png', + 'err' / 'png' / 'backend-x509-cert-bad.png', + 'err' / 'png' / 'child-died.png', + 'err' / 'png' / 'dispensing.png', + 'err' / 'png' / 'err-num-read-fail.png', + 'err' / 'png' / 'err-sold-out.png', + 'err' / 'png' / 'internal-failure.png', + 'err' / 'png' / 'maintenance.png', + 'err' / 'png' / 'no-ip.png', + 'err' / 'png' / 'unknown-product.png', + install_dir: get_option('datadir') / 'taler' / 'mdb', +) + +install_data( + 'ads' / 'png' / 'add-without-plus-8s.png', + 'ads' / 'png' / 'chocolate-5s.png', + 'ads' / 'png' / 'debug-my-code-7s.png', + 'ads' / 'png' / 'dep-tree-10s.png', + 'ads' / 'png' / 'dont-touch-it-10s.png', + 'ads' / 'png' / 'error-handling-5s.png', + 'ads' / 'png' / 'just-keep-coding-4s.png', + 'ads' / 'png' / 'kitkat-7s.png', + 'ads' / 'png' / 'lockpick-9s.png', + 'ads' / 'png' / 'lockpick-physical-sec-9s.png', + 'ads' / 'png' / 'lua-rules-4s.png', + 'ads' / 'png' / 'not-even-the-bread-4s.png', + 'ads' / 'png' / 'notsnack-7s.png', + 'ads' / 'png' / 'paravirt-8s.png', + 'ads' / 'png' / 'success-unreachable-7s.png', + 'ads' / 'png' / 'swissknife-10s.png', + 'ads' / 'png' / 'taler1-5s.png', + 'ads' / 'png' / 'taler2-7s.png', + 'ads' / 'png' / 'taler-machine-whats-inside-7s.png', + 'ads' / 'png' / 'taler-post-blockchain-18s.png', + 'ads' / 'png' / 'taler-principles-1-3s.png', + 'ads' / 'png' / 'taler-principles-2-4s.png', + 'ads' / 'png' / 'taler-principles-3-3s.png', + 'ads' / 'png' / 'taler-principles-4-3s.png', + 'ads' / 'png' / 'taler-principles-5-4s.png', + 'ads' / 'png' / 'taler-principles-6-3s.png', + 'ads' / 'png' / 'taler-principles-7-3s.png', + 'ads' / 'png' / 'taler-principles-8-3s.png', + 'ads' / 'png' / 'taler-principles-9-3s.png', + 'ads' / 'png' / 'taler-rms-5s.png', + 'ads' / 'png' / 'taler-wallet-eCHF-french-10s.png', + 'ads' / 'png' / 'taler-wallet-eCHF-german-10s.png', + 'ads' / 'png' / 'taler-wallet-question-15s.png', + install_dir: get_option('datadir') / 'taler' / 'ads', +) + + + + +install_data( + 'taler-mdb-ads.sh', + 'taler-mdb-show.sh', + 'taler-mdb-network-check.sh', + install_dir: get_option('bindir'), +) diff --git a/doc/Makefile.am b/doc/Makefile.am @@ -1,12 +0,0 @@ -SUBDIRS = . - -man_MANS = \ - prebuilt/man/taler-mdb.1 \ - prebuilt/man/taler-mdb-ads.sh.1 \ - prebuilt/man/taler-mdb-display.1 \ - prebuilt/man/taler-mdb-network-check.sh.1 \ - prebuilt/man/taler-mdb-qr-show.1 \ - prebuilt/man/taler-mdb-show.sh.1 - -EXTRA_DIST = \ - $(man_MANS) diff --git a/doc/meson.build b/doc/meson.build @@ -0,0 +1,10 @@ +install_man( + [ + 'prebuilt' / 'man' / 'taler-mdb.1', + 'prebuilt' / 'man' / 'taler-mdb-ads.sh.1', + 'prebuilt' / 'man' / 'taler-mdb-display.1', + 'prebuilt' / 'man' / 'taler-mdb-network-check.sh.1', + 'prebuilt' / 'man' / 'taler-mdb-qr-show.1', + 'prebuilt' / 'man' / 'taler-mdb-show.sh.1', + ], +) diff --git a/flake.lock b/flake.lock @@ -0,0 +1,822 @@ +{ + "nodes": { + "donau": { + "inputs": { + "exchange": "exchange", + "gnunet": "gnunet_2", + "nixpkgs": "nixpkgs_4", + "systems": "systems_4" + }, + "locked": { + "lastModified": 1776068074, + "narHash": "sha256-/UG1yoOAak34+mZ/fTB8+/FMMEaj4enPn+IxOV8R/4A=", + "ref": "refs/heads/master", + "rev": "4f609168fe263891f134eff01f86288066acdd81", + "revCount": 1050, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/donau" + }, + "original": { + "rev": "4f609168fe263891f134eff01f86288066acdd81", + "type": "git", + "url": "https://git.gnunet.org/donau" + } + }, + "donau_2": { + "inputs": { + "exchange": "exchange_3", + "gnunet": "gnunet_6", + "nixpkgs": "nixpkgs_11", + "systems": "systems_11" + }, + "locked": { + "lastModified": 1776068074, + "narHash": "sha256-/UG1yoOAak34+mZ/fTB8+/FMMEaj4enPn+IxOV8R/4A=", + "ref": "refs/heads/master", + "rev": "4f609168fe263891f134eff01f86288066acdd81", + "revCount": 1050, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/donau" + }, + "original": { + "rev": "4f609168fe263891f134eff01f86288066acdd81", + "type": "git", + "url": "https://git.gnunet.org/donau" + } + }, + "exchange": { + "inputs": { + "gnunet": "gnunet", + "nixpkgs": "nixpkgs_2", + "systems": "systems_2" + }, + "locked": { + "lastModified": 1776020637, + "narHash": "sha256-U/KHaAaE/JrlS3RYbRRiRRe0ur2JACkKysevCrzCXYY=", + "ref": "refs/heads/master", + "rev": "1b474b461597d11382e4e036520259a96f254e9b", + "revCount": 9931, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/exchange" + }, + "original": { + "rev": "1b474b461597d11382e4e036520259a96f254e9b", + "type": "git", + "url": "https://git.gnunet.org/exchange" + } + }, + "exchange_2": { + "inputs": { + "gnunet": "gnunet_3", + "nixpkgs": "nixpkgs_6", + "systems": "systems_6" + }, + "locked": { + "lastModified": 1776021477, + "narHash": "sha256-V6qYPCNgaalQi6tRkDZ+Per3PPifm1Ze2pShV6LGomg=", + "ref": "refs/heads/master", + "rev": "92da4e81006404494f6443781c8f55249e723847", + "revCount": 9932, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/exchange" + }, + "original": { + "rev": "92da4e81006404494f6443781c8f55249e723847", + "type": "git", + "url": "https://git.gnunet.org/exchange" + } + }, + "exchange_3": { + "inputs": { + "gnunet": "gnunet_5", + "nixpkgs": "nixpkgs_9", + "systems": "systems_9" + }, + "locked": { + "lastModified": 1776020637, + "narHash": "sha256-U/KHaAaE/JrlS3RYbRRiRRe0ur2JACkKysevCrzCXYY=", + "ref": "refs/heads/master", + "rev": "1b474b461597d11382e4e036520259a96f254e9b", + "revCount": 9931, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/exchange" + }, + "original": { + "rev": "1b474b461597d11382e4e036520259a96f254e9b", + "type": "git", + "url": "https://git.gnunet.org/exchange" + } + }, + "exchange_4": { + "inputs": { + "gnunet": "gnunet_7", + "nixpkgs": "nixpkgs_13", + "systems": "systems_13" + }, + "locked": { + "lastModified": 1776021477, + "narHash": "sha256-V6qYPCNgaalQi6tRkDZ+Per3PPifm1Ze2pShV6LGomg=", + "ref": "refs/heads/master", + "rev": "92da4e81006404494f6443781c8f55249e723847", + "revCount": 9932, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/exchange" + }, + "original": { + "rev": "92da4e81006404494f6443781c8f55249e723847", + "type": "git", + "url": "https://git.gnunet.org/exchange" + } + }, + "gnunet": { + "inputs": { + "nixpkgs": "nixpkgs", + "systems": "systems" + }, + "locked": { + "lastModified": 1774899416, + "narHash": "sha256-YcGma1gX/t76xDv9DW71nKkWFhzXYz3NkN/WEceHbZM=", + "ref": "refs/heads/master", + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "revCount": 33194, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/gnunet" + }, + "original": { + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "type": "git", + "url": "https://git.gnunet.org/gnunet" + } + }, + "gnunet_2": { + "inputs": { + "nixpkgs": "nixpkgs_3", + "systems": "systems_3" + }, + "locked": { + "lastModified": 1774899416, + "narHash": "sha256-YcGma1gX/t76xDv9DW71nKkWFhzXYz3NkN/WEceHbZM=", + "ref": "refs/heads/master", + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "revCount": 33194, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/gnunet" + }, + "original": { + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "type": "git", + "url": "https://git.gnunet.org/gnunet" + } + }, + "gnunet_3": { + "inputs": { + "nixpkgs": "nixpkgs_5", + "systems": "systems_5" + }, + "locked": { + "lastModified": 1774899416, + "narHash": "sha256-YcGma1gX/t76xDv9DW71nKkWFhzXYz3NkN/WEceHbZM=", + "ref": "refs/heads/master", + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "revCount": 33194, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/gnunet" + }, + "original": { + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "type": "git", + "url": "https://git.gnunet.org/gnunet" + } + }, + "gnunet_4": { + "inputs": { + "nixpkgs": "nixpkgs_7", + "systems": "systems_7" + }, + "locked": { + "lastModified": 1774899416, + "narHash": "sha256-YcGma1gX/t76xDv9DW71nKkWFhzXYz3NkN/WEceHbZM=", + "ref": "refs/heads/master", + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "revCount": 33194, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/gnunet" + }, + "original": { + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "type": "git", + "url": "https://git.gnunet.org/gnunet" + } + }, + "gnunet_5": { + "inputs": { + "nixpkgs": "nixpkgs_8", + "systems": "systems_8" + }, + "locked": { + "lastModified": 1774899416, + "narHash": "sha256-YcGma1gX/t76xDv9DW71nKkWFhzXYz3NkN/WEceHbZM=", + "ref": "refs/heads/master", + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "revCount": 33194, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/gnunet" + }, + "original": { + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "type": "git", + "url": "https://git.gnunet.org/gnunet" + } + }, + "gnunet_6": { + "inputs": { + "nixpkgs": "nixpkgs_10", + "systems": "systems_10" + }, + "locked": { + "lastModified": 1774899416, + "narHash": "sha256-YcGma1gX/t76xDv9DW71nKkWFhzXYz3NkN/WEceHbZM=", + "ref": "refs/heads/master", + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "revCount": 33194, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/gnunet" + }, + "original": { + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "type": "git", + "url": "https://git.gnunet.org/gnunet" + } + }, + "gnunet_7": { + "inputs": { + "nixpkgs": "nixpkgs_12", + "systems": "systems_12" + }, + "locked": { + "lastModified": 1774899416, + "narHash": "sha256-YcGma1gX/t76xDv9DW71nKkWFhzXYz3NkN/WEceHbZM=", + "ref": "refs/heads/master", + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "revCount": 33194, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/gnunet" + }, + "original": { + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "type": "git", + "url": "https://git.gnunet.org/gnunet" + } + }, + "gnunet_8": { + "inputs": { + "nixpkgs": "nixpkgs_14", + "systems": "systems_14" + }, + "locked": { + "lastModified": 1774899416, + "narHash": "sha256-YcGma1gX/t76xDv9DW71nKkWFhzXYz3NkN/WEceHbZM=", + "ref": "refs/heads/master", + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "revCount": 33194, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/gnunet" + }, + "original": { + "rev": "7c6b613e37e301b0e81fb94af5878d00c98e5b75", + "type": "git", + "url": "https://git.gnunet.org/gnunet" + } + }, + "merchant": { + "inputs": { + "donau": "donau_2", + "exchange": "exchange_4", + "gnunet": "gnunet_8", + "nixpkgs": "nixpkgs_15", + "systems": "systems_15" + }, + "locked": { + "lastModified": 1776070816, + "narHash": "sha256-R+a90LanaprK2S4XzUXyW5tAUXOf+pVD7ljCfvulgAM=", + "ref": "refs/heads/master", + "rev": "b174138726171601b666fff346762502be5150a1", + "revCount": 5567, + "submodules": true, + "type": "git", + "url": "https://git.gnunet.org/merchant" + }, + "original": { + "rev": "b174138726171601b666fff346762502be5150a1", + "type": "git", + "url": "https://git.gnunet.org/merchant" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1774799055, + "narHash": "sha256-Tsq9BCz0q47ej1uFF39m4tuhcwru/ls6vCCJzutEpaw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "107cba9eb4a8d8c9f8e9e61266d78d340867913a", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_10": { + "locked": { + "lastModified": 1774799055, + "narHash": "sha256-Tsq9BCz0q47ej1uFF39m4tuhcwru/ls6vCCJzutEpaw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "107cba9eb4a8d8c9f8e9e61266d78d340867913a", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_11": { + "locked": { + "lastModified": 1775825553, + "narHash": "sha256-LH0FGBWngFpvqXYfN1eks+L5n3aXy1ALTTRRhxP0HGA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ca62ee54d15571e3122309abb6740578906bcdf7", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_12": { + "locked": { + "lastModified": 1774799055, + "narHash": "sha256-Tsq9BCz0q47ej1uFF39m4tuhcwru/ls6vCCJzutEpaw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "107cba9eb4a8d8c9f8e9e61266d78d340867913a", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_13": { + "locked": { + "lastModified": 1774799055, + "narHash": "sha256-Tsq9BCz0q47ej1uFF39m4tuhcwru/ls6vCCJzutEpaw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "107cba9eb4a8d8c9f8e9e61266d78d340867913a", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_14": { + "locked": { + "lastModified": 1774799055, + "narHash": "sha256-Tsq9BCz0q47ej1uFF39m4tuhcwru/ls6vCCJzutEpaw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "107cba9eb4a8d8c9f8e9e61266d78d340867913a", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_15": { + "locked": { + "lastModified": 1775730577, + "narHash": "sha256-5i3MKmxBFQP9/wp3QyFWyS7DqURq/M4T8gr1JSbyygI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0d5a853f7004a5fc57b61a97ccb02832f8e7ed9d", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_16": { + "locked": { + "lastModified": 1776930694, + "narHash": "sha256-6Rlh6E8RTTpXxXqBcpmwnzkmLQ8vl0k8DLkkjy5BtX8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "7694c5fd26e446ff6bab37c6496f8f5d9cc34377", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1774799055, + "narHash": "sha256-Tsq9BCz0q47ej1uFF39m4tuhcwru/ls6vCCJzutEpaw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "107cba9eb4a8d8c9f8e9e61266d78d340867913a", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1774799055, + "narHash": "sha256-Tsq9BCz0q47ej1uFF39m4tuhcwru/ls6vCCJzutEpaw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "107cba9eb4a8d8c9f8e9e61266d78d340867913a", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1775825553, + "narHash": "sha256-LH0FGBWngFpvqXYfN1eks+L5n3aXy1ALTTRRhxP0HGA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ca62ee54d15571e3122309abb6740578906bcdf7", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1774799055, + "narHash": "sha256-Tsq9BCz0q47ej1uFF39m4tuhcwru/ls6vCCJzutEpaw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "107cba9eb4a8d8c9f8e9e61266d78d340867913a", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1774799055, + "narHash": "sha256-Tsq9BCz0q47ej1uFF39m4tuhcwru/ls6vCCJzutEpaw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "107cba9eb4a8d8c9f8e9e61266d78d340867913a", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1774799055, + "narHash": "sha256-Tsq9BCz0q47ej1uFF39m4tuhcwru/ls6vCCJzutEpaw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "107cba9eb4a8d8c9f8e9e61266d78d340867913a", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1774799055, + "narHash": "sha256-Tsq9BCz0q47ej1uFF39m4tuhcwru/ls6vCCJzutEpaw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "107cba9eb4a8d8c9f8e9e61266d78d340867913a", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "nixpkgs_9": { + "locked": { + "lastModified": 1774799055, + "narHash": "sha256-Tsq9BCz0q47ej1uFF39m4tuhcwru/ls6vCCJzutEpaw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "107cba9eb4a8d8c9f8e9e61266d78d340867913a", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "release-25.11", + "type": "indirect" + } + }, + "root": { + "inputs": { + "donau": "donau", + "exchange": "exchange_2", + "gnunet": "gnunet_4", + "merchant": "merchant", + "nixpkgs": "nixpkgs_16", + "systems": "systems_16" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_10": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_11": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_12": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_13": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_14": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_15": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_16": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_4": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_5": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_6": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_7": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_8": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_9": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix @@ -0,0 +1,123 @@ +# This is a nix flake. To use it, you need nix (with flake support) installed. +# If you do not have nix and do not intend to use it, you can ignore this file. +# Why should you use it? Using this flake will allow you to enter a developer shell +# which has all necessary packages for this repository already installed. +# The shell will allow you to code against the specific revisions of the dependencies +# pinned in this file. +# This is useful when git HEAD of your dependencies already contains breaking changes +# you should not (yet) code against. +# OTOH, if you should code against a newer, not yet released revision, you can specify +# this revision in this file. +# You can use this file in three ways: +# 1. Build: $ nix build +# this will build the package (it runs make for you in an environment with the dependencies installed) +# 2. Develop: $ nix develop +# This will drop you inside a shell in which you can develop and compile (and test) your code. +# It even starts and sets up the test database for you. +# 3. Use this repository in a new project +# Should you create a new project that depends on this project you are in luck. You can create a flake.nix +# in your repository and include this packages as a dependency just like the dependencies of this package are +# included here. + +{ + inputs = { + nixpkgs.url = "nixpkgs/release-25.11"; + systems.url = "github:nix-systems/default"; + gnunet.url = "git+https://git.gnunet.org/gnunet?rev=7c6b613e37e301b0e81fb94af5878d00c98e5b75"; + exchange.url = "git+https://git.gnunet.org/exchange?rev=92da4e81006404494f6443781c8f55249e723847"; + merchant.url = "git+https://git.gnunet.org/merchant?rev=b174138726171601b666fff346762502be5150a1"; + donau.url = "git+https://git.gnunet.org/donau?rev=4f609168fe263891f134eff01f86288066acdd81"; + self.submodules = true; + }; + + outputs = { self, nixpkgs, gnunet, exchange, donau, merchant, systems, ... } @ inputs: + let + supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; + forEachSystem = nixpkgs.lib.genAttrs supportedSystems; + nixpkgsFor = forEachSystem (system: import nixpkgs { inherit system; }); + in + { + # This defines (installable) package derivations + # For use in flakes that use this flake as input in order + # to specify/use this package from git as a dependency + packages = forEachSystem (system: + let + pkgs = nixpkgsFor.${system}; + gnunetpkgs = gnunet.packages.${system}; + exchangepkgs = exchange.packages.${system}; + donaupkgs = donau.packages.${system}; + merchantpkgs = merchant.packages.${system}; + in { + talermdb = pkgs.stdenv.mkDerivation { + name = "taler-mdb"; + src = ./.; + nativeBuildInputs = [ + pkgs.gnumake + pkgs.meson + pkgs.ninja + pkgs.pkg-config + ]; + buildInputs = [ + pkgs.libtool + pkgs.jansson + pkgs.git + pkgs.libmicrohttpd + pkgs.libgcrypt + pkgs.libunistring + pkgs.curlWithGnuTls + pkgs.libnfc + gnunetpkgs.gnunet + exchangepkgs.exchange + donaupkgs.donau + merchantpkgs.merchant + ]; + preConfigure = '' + patchShebangs --build contrib/check-prebuilt + ./bootstrap + ''; + }; + } + ); + defaultPackage = forEachSystem (system: self.packages.${system}.talermdb); + # This defines a development shell in which you can compile + # (and use) exchange + devShells = forEachSystem + (system: + let + pkgs = nixpkgsFor.${system}; + gnunetpkgs = gnunet.packages.${system}; + exchangepkgs = exchange.packages.${system}; + donaupkgs = donau.packages.${system}; + merchantpkgs = merchant.packages.${system}; + in + { + default = pkgs.mkShell { + packages = [ + pkgs.gcc + pkgs.meson + pkgs.ninja + pkgs.gnumake + pkgs.pkg-config + pkgs.libtool + pkgs.jansson + pkgs.git + pkgs.curlWithGnuTls + gnunetpkgs.gnunet + pkgs.codespell + pkgs.clang-tools + pkgs.uncrustify + pkgs.libnfc + exchangepkgs.exchange + donaupkgs.donau + merchantpkgs.merchant + ]; + + shellHook = '' + echo "taler-mdb environment loaded." + export CC=gcc + export CFLAGS="-O" + ''; + }; + }); + }; +} diff --git a/meson.build b/meson.build @@ -0,0 +1,292 @@ +project( + 'taler-mdb', + 'c', + license: 'AGPLv3', + meson_version: '>=1.1.0', + version: '1.5.1', +) + +cc = meson.get_compiler('c') +incdir = include_directories('src/') + +# Used to populate gnunet_private_config.h +private_config = configuration_data() + + +plugindir = get_option('libdir') / 'paivana' +pkgdatadir = get_option('datadir') / 'paivana' +pkgcfgdir = pkgdatadir / 'config.d' +docdir = get_option('datadir') / 'doc' / 'paivana' + +if get_option('install-rpath') + rpath_option = get_option('prefix') / get_option('libdir') +else + rpath_option = '' +endif + +install_emptydir(docdir) +install_data('README', 'COPYING', install_dir: docdir) + +gnunet_user = false +dpkg_architecture_bin = find_program( + 'dpkg-architecture', + '/usr/bin/dpkg-architecture', + required: false, +) +if dpkg_architecture_bin.found() + private_config.set( + 'MULTIARCH', + dpkg_architecture_bin.full_path() + ' -qDEB_HOST_MULTIARCH', + ) +endif + +TALER_PLUGIN_LDFLAGS = [ + '-export-dynamic', + '-avoid-version', + '-module', + '--no-undefined', +] + +cdata = configuration_data() +if not get_option('only-doc') + add_project_arguments( + '-Wall', + '-Wno-address-of-packed-member', + language: 'c', + ) + taler_lib_ldflags = '-export-dynamic -no-undefined' + + check_headers = ['stdint.h', 'stdlib.h', 'string.h', 'unistd.h'] + + foreach h : check_headers + if cc.check_header(h) + define = 'HAVE_' + h.underscorify().to_upper() + message(define) + private_config.set(define, 1) + endif + endforeach + + zlib_dep = dependency('zlib', required: false) + if not zlib_dep.found() + zlib_dep = cc.find_library('zlib', required: true) + endif + m_dep = cc.find_library('m', required: false) + if m_dep.found() + private_config.set('HAVE_LIBM', 1) + endif + + + mhd_dep = dependency('libmicrohttpd', required: false) + if not mhd_dep.found() + mhd_dep = cc.find_library('microhttpd', required: true) + endif + + json_dep = dependency('jansson', required: false) + if not json_dep.found() + json_dep = cc.find_library('jansson', required: true) + endif + + gcrypt_dep = dependency('libgcrypt', required: false) + if not gcrypt_dep.found() + gcrypt_dep = cc.find_library('gcrypt', required: true) + endif + + private_config.set_quoted('NEED_LIBGCRYPT_VERSION', '1.6.1') + + gnunetutil_dep = dependency('gnunetutil', required: false) + if not gnunetutil_dep.found() + gnunetutil_dep = cc.find_library('gnunetutil', required: true) + endif + + cc.has_header_symbol( + 'gnunet/gnunet_util_lib.h', + 'GNUNET_TIME_round_up', + dependencies: [gnunetutil_dep], + required: true, + ) + + gnunetjson_dep = dependency('gnunetjson', required: false) + if not gnunetjson_dep.found() + gnunetjson_dep = cc.find_library('gnunetjson', required: true) + endif + + curl_dep = dependency('libcurl', version: '>=7.34.0', required: false) + if not curl_dep.found() + curl_dep = cc.find_library('curl', required: true) + curl_version_check = '''#include <curl/curl.h> + int main(int argc, char **argv) { + #if LIBCURL_VERSION_NUM < 0x073400 + #error "cURL version >= 7.34.0 required" + #endif + return 0; + } + ''' + if not cc.compiles( + curl_version_check, + name: 'cURL version check', + dependencies: curl_dep, + ) + error('cURL version >=7.34.0 required') + endif + endif + + gnunetcurl_dep = dependency('gnunetcurl', required: false) + if not gnunetcurl_dep.found() + gnunetcurl_dep = cc.find_library('gnunetcurl', required: true) + endif + cc.has_header_symbol( + 'gnunet/gnunet_curl_lib.h', + 'GNUNET_CURL_get_select_info', + dependencies: [gnunetcurl_dep], + required: true, + ) + + talerutil_dep = dependency('talerutil', required: false) + if not talerutil_dep.found() + talerutil_dep = cc.find_library('talerutil', required: true) + endif + cc.has_header_symbol( + 'taler/taler_util.h', + 'TALER_merchant_instance_auth_hash_with_salt', + required: true, + dependencies: [talerutil_dep], + ) + private_config.set10('HAVE_TALERUTIL', talerutil_dep.found()) + talertemplating_dep = dependency('talertemplating', required: false) + if not talertemplating_dep.found() + talertemplating_dep = cc.find_library('talertemplating', required: true) + endif + talerjson_dep = dependency('talerjson', required: false) + if not talerjson_dep.found() + talerjson_dep = cc.find_library('talerjson', required: true) + endif + talermhd_dep = dependency('talermhd', required: false) + if not talermhd_dep.found() + talermhd_dep = cc.find_library('talermhd', required: true) + endif + cc.has_header_symbol( + 'taler/taler_mhd_lib.h', + 'TALER_MHD_parse_request_arg_rel_time', + required: true, + dependencies: [talermhd_dep], + ) + private_config.set10('HAVE_TALERMHD', talermhd_dep.found()) + qrencode_dep = dependency('qrencode', required: false) + if not qrencode_dep.found() + qrencode_dep = cc.find_library('qrencode', required: false) + endif + private_config.set10('HAVE_QR', qrencode_dep.found()) + + + talerexchange_dep = dependency('talerexchange', required: false) + if not talerexchange_dep.found() + talerexchange_dep = cc.find_library('talerexchange', required: true) + endif + private_config.set10('HAVE_TALEREXCHANGE', talerexchange_dep.found()) + + talermerchant_dep = dependency('talermerchant', required: false) + if not talermerchant_dep.found() + talermerchant_dep = cc.find_library('talermerchant', required: true) + endif + cc.has_header_symbol( + 'taler/taler_merchant_service.h', + 'TALER_MERCHANT_parse_pay_uri', + required: true, + dependencies: [talermerchant_dep], + ) + private_config.set10('HAVE_TALERMERCHANT', talermerchant_dep.found()) + talermerchanttesting_dep = dependency( + 'talermerchanttesting', + required: false, + ) + + nfc_dep = dependency('nfc', required: false) + if not nfc_dep.found() + nfc_dep = cc.find_library('nfc', required: true) + endif + cc.has_header_symbol( + 'nfc/nfc.h', + 'nfc_open', + required: true, + dependencies: [nfc_dep], + ) + + logging_opt = get_option('logging') + logging_verbosity = 0 + + if logging_opt == 'yes' + logging_verbosity = 1 + endif + if logging_opt == 'no' + add_project_arguments('-DGNUNET_CULL_LOGGING=1', language: 'c') + endif + if logging_opt == 'verbose' + logging_verbosity = 2 + endif + if logging_opt == 'veryverbose' + logging_verbosity = 3 + endif + + #add_project_arguments('-DGNUNET_EXTRA_LOGGING=@0@'.format(logging_verbosity), language: 'c') + + + # todo gcov has meson builtin + + # Used to populate configuration file and script templates + + + libltversions = [['libtalermdb', '0:0:0']] + + solibversions = {} + + foreach libversion : libltversions + ltversion = libversion[1].split(':') + current = ltversion[0].to_int() + revision = ltversion[1].to_int() + age = ltversion[2].to_int() + soversion_str = '@0@'.format(current - age) + ltversion_str = '@0@.@1@.@2@'.format(current - age, age, revision) + solibversions = solibversions + { + libversion[0]: { + 'soversion': soversion_str, + 'version': ltversion_str, + }, + } + endforeach + + private_config.set_quoted('PACKAGE', meson.project_name()) + private_config.set_quoted('PACKAGE_VERSION', meson.project_version()) + # Compatibility. Used in source. + private_config.set_quoted('VERSION', meson.project_version()) + private_config.set_quoted('VCS_VERSION', 'mesonbuild') + private_config.set_quoted('PACKAGE_BUGREPORT', 'taler@gnu.org') + configure_file(output: 'config.h', configuration: private_config) + configuration_inc = include_directories('.') + + cdata.merge_from(private_config) + add_project_arguments('-DHAVE_CONFIG_H', language: 'c') + + pkg = import('pkgconfig') + subdir('contrib') + subdir('src') + if not get_option('disable-doc') + subdir('doc') + endif + + taler_prefix = get_option('prefix') / get_option('libdir') + + add_test_setup( + 'default', + env: ['TALER_MDB_PREFIX=' + taler_prefix], + exclude_suites: ['perf', 'installcheck', 'integrationtests'], + is_default: true, + ) +else + subdir('contrib') + if not get_option('disable-doc') + subdir('doc') + endif +endif + +#meson.add_dist_script('meson-dist-script') + diff --git a/meson.options b/meson.options @@ -0,0 +1,5 @@ +# Build options +option('only-doc', type : 'boolean', value : false, description: 'whether to compile documentation ONLY') +option('disable-doc', type : 'boolean', value : false, description: 'whether to disable documentation') +option('install-rpath', type : 'boolean', value : false, description: 'Add rpath to installed binaries if set') +option('logging', type : 'string', value: 'yes', description: 'Log setting. Can be set to "yes" (logging, default), "no" (no logging), "verbose" (extra logging"), "veryverbose" (even more logging)') diff --git a/src/Makefile.am b/src/Makefile.am @@ -1,59 +0,0 @@ -# This Makefile.am is in the public domain -bin_PROGRAMS = \ - taler-mdb \ - taler-mdb-display - -if HAVE_QR -bin_PROGRAMS += taler-mdb-qr-show -endif - -if USE_COVERAGE - AM_CFLAGS = --coverage -O0 - XLIB = -lgcov -endif - -lib_LTLIBRARIES = \ - libtalermdb.la - -libtalermdb_la_SOURCES = \ - os_installation.c taler_mdb_util.h -libtalermdb_la_LIBADD = \ - -lgnunetutil \ - $(XLIB) -libtalermdb_la_LDFLAGS = \ - -version-info 0:0:0 \ - -export-dynamic -no-undefined - - -taler_mdb_SOURCES = \ - taler-mdb.c -taler_mdb_LDADD = \ - libtalermdb.la \ - -ltalermerchant \ - -ltalerjson \ - -ltalerutil \ - -lgnunetjson \ - -lgnunetcurl \ - -lgnunetutil \ - -ljansson \ - -lnfc \ - -lcurl \ - @QR_LIBS@ \ - $(XLIB) - - -taler_mdb_qr_show_SOURCES = \ - taler-mdb-qr-show.c -taler_mdb_qr_show_LDADD = \ - libtalermdb.la \ - -lgnunetutil \ - @QR_LIBS@ \ - $(XLIB) - - -taler_mdb_display_SOURCES = \ - taler-mdb-display.c -taler_mdb_display_LDADD = \ - libtalermdb.la \ - -lgnunetutil \ - $(XLIB) diff --git a/src/meson.build b/src/meson.build @@ -0,0 +1,61 @@ +# This file is in the public domain + +libtalermdb = library( + 'talermdb', + ['os_installation.c'], + soversion: solibversions['libtalermdb']['soversion'], + version: solibversions['libtalermdb']['soversion'], + install_rpath: rpath_option, + dependencies: [gnunetutil_dep], + include_directories: [incdir, configuration_inc], + install: true, + install_dir: get_option('libdir'), +) + +libtalermdb_dep = declare_dependency(link_with: libtalermdb) +pkg.generate( + libtalermdb, + url: 'https://taler.net', + description: 'GNU Taler MDB library', +) + +if qrencode_dep.found() + executable( + 'taler-mdb-qr-show', + ['taler-mdb-qr-show.c'], + dependencies: [libtalermdb_dep, qrencode_dep, gnunetutil_dep], + include_directories: [incdir, configuration_inc], + install: true, + ) +endif + +executable( + 'taler-mdb', + ['taler-mdb.c'], + dependencies: [ + libtalermdb_dep, + talermerchant_dep, + talerutil_dep, + talerjson_dep, + gnunetjson_dep, + gnunetcurl_dep, + gnunetutil_dep, + json_dep, + nfc_dep, + curl_dep, + qrencode_dep, + ], + include_directories: [incdir, configuration_inc], + install: true, +) + + +executable( + 'taler-mdb-display', + ['taler-mdb-display.c'], + dependencies: [libtalermdb_dep, gnunetutil_dep], + include_directories: [incdir, configuration_inc], + install: true, +) + +