set shell := ["bash", "-eou", "pipefail", "-c"]

edit:
  just _run_shell shells/main.nix nvim

_run_shell shell *args:
  NO_FISH=1 nix-shell {{shell}} --run "{{args}}"

build *ninja_flags: get_etgen_rs
  just _run_shell shells/main.nix just _build {{ninja_flags}}

_build *ninja_flags:
  #!/usr/bin/env bash
  set -eou pipefail
  mkdir -p build && cd build
  cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DMAKE_TESTS=ON ..
  ninja {{ninja_flags}}

build_proto:
  just _run_shell shells/main.nix just _build_proto

_build_proto:
  protoc --proto_path=./protobuf/ --cpp_out=src ./protobuf/*.proto
  protoc --proto_path=./protobuf/ --python_out=py/src ./protobuf/*.proto

test *args: build
  just _run_shell shells/main.nix "./build/src/etgen_tests {{args}}"

#debug_test test_case: build
#nix-shell --run "gdb --tui --args ./build/src/etgen_tests --gtest_filter={{test_case}}"

watch_build:
  watchexec -c -r -w ./etgen-rs/src -w ./src -e h -e cc -e rs --project-origin . just build

watch_test *args:
  watchexec -c -r -w ./etgen-rs/src -w ./src -e h -e cc -e rs --project-origin . just test {{args}}

clean:
  rm -rf build

reset: clean
  rm -rf ./src/protobuf
  rm -rf ./util/protobuf

deps:
  mkdir -p deps/src
  mkdir -p deps/build
  mkdir -p deps/prefix

clean_deps:
	rm -rf deps

get_czmq: deps
  just _run_shell shells/curvemq.nix ./resource/dep_install/get_czmq.bash

get_curvemq: deps
  just _run_shell shells/curvemq.nix ./resource/dep_install/get_curvemq.bash

get_lyrebird: deps
  git clone --depth 1 --branch lyrebird-0.1.0 \
  https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/lyrebird.git \
  deps/src/lyrebird
  just _run_shell shells/main.nix "cd deps/src/lyrebird && go build ./cmd/lyrebird"
  just _run_shell shells/main.nix "mkdir -p deps/build/lyrebird/bin"
  just _run_shell shells/main.nix "cp deps/src/lyrebird/lyrebird deps/build/lyrebird/bin"
  just _run_shell shells/main.nix "ln -s $(readlink -f deps/build/lyrebird/bin/lyrebird) deps/build/lyrebird/bin/obfs4proxy"
  cd deps/build && stow -t ../prefix lyrebird

get_libp2p: deps
  git clone --depth 1 --branch v0.1.18 \
  https://github.com/libp2p/cpp-libp2p.git deps/src/libp2p
  just _run_shell shells/libp2p.nix "cd deps/src/libp2p && mkdir -p build && cd build && cmake -G Ninja -DCMAKE_INSTALL_PREFIX=$(readlink -f deps/build/libp2p) .. && ninja && ninja install"
  cd deps/build && stow -t ../prefix libp2p

get_libsodium: deps
  just _run_shell shells/libsodium.nix ./resource/dep_install/get_libsodium.bash

get_libzmq: deps
  just _run_shell shells/libzmq.nix ./resource/dep_install/get_libzmq.bash

get_etgen_rs: deps
  just _run_shell shells/main.nix \
  "cd etgen-rs && make install PREFIX=$(readlink -f deps/build/etgen_rs)"
  cd deps/build && stow -t ../prefix etgen_rs

get_proteus: deps
  just _run_shell shells/proteus.nix ./resource/dep_install/get_proteus.bash

get_deps:
  just get_libsodium
  just get_libzmq
  just get_czmq
  just get_curvemq

clean_dep_libs:
  rm -rf deps/src/libzmq
  rm -rf deps/build/libzmq
  rm -rf deps/src/libcurve
  rm -rf deps/build/libcurve
  rm -rf deps/src/libzmq
  rm -rf deps/build/libzmq
  rm -rf deps/src/libsodium
  rm -rf deps/build/libsodium
  rm -rf deps/src/czmq
  rm -rf deps/build/czmq
