#!/usr/bin/env bash help() { { echo "" echo "Usage: $0 [--exec] [--prefix pf] args.." echo " $0 --build modname.so cppsources.." echo "" echo "Replacement args:" echo " --cxx @CXX@" echo " --cxxflags $( echo '@CXXFLAGS@' | fmt -w60 | sed ':a;N;$!ba;s/\n/ \\\n /g' )" echo " --linkflags @LINKFLAGS@" echo " --ldflags (alias of --linkflags)" echo " --libs @LIBS@" echo " --ldlibs (alias of --libs)" echo " --bindir @BINDIR@" echo " --datdir @DATDIR@" echo "" echo "All other args are passed through as they are." echo "" echo "Use --exec to call a command instead of generating output. Example usage:" echo "" echo " $0 --exec --cxx --cxxflags --ldflags -o plugin.so -shared plugin.cc --libs" echo "" echo "The above command can be abbreviated as:" echo "" echo " $0 --build plugin.so plugin.cc" echo "" echo "Use --prefix to change the prefix for the special args from '--' to" echo "something else. Example:" echo "" echo " $0 --prefix @ bindir: @bindir" echo "" echo "The args --bindir and --datdir can be directly followed by a slash and" echo "additional text. Example:" echo "" echo " $0 --datdir/simlib.v" echo "" } >&2 exit 1 } if [ $# -eq 0 ]; then help fi if [ "$1" == "--build" ]; then modname="$2"; shift 2 set -- --exec --cxx --cxxflags --ldflags -o "$modname" -shared "$@" --libs fi prefix="--" get_prefix=false exec_mode=false declare -a tokens=() for opt; do if $get_prefix; then prefix="$opt" get_prefix=false continue fi case "$opt" in "$prefix"cxx) tokens=( "${tokens[@]}" @CXX@ ) ;; "$prefix"cxxflags) tokens=( "${tokens[@]}" @CXXFLAGS@ ) ;; "$prefix"linkflags) tokens=( "${tokens[@]}" @LINKFLAGS@ ) ;; "$prefix"libs) tokens=( "${tokens[@]}" @LIBS@ ) ;; "$prefix"ldflags) tokens=( "${tokens[@]}" @LINKFLAGS@ ) ;; "$prefix"ldlibs) tokens=( "${tokens[@]}" @LIBS@ ) ;; "$prefix"bindir) tokens=( "${tokens[@]}" '@BINDIR@' ) ;; "$prefix"datdir) tokens=( "${tokens[@]}" '@DATDIR@' ) ;; "$prefix"bindir/*) tokens=( "${tokens[@]}" '@BINDIR@'"${opt#${prefix}bindir}" ) ;; "$prefix"datdir/*) tokens=( "${tokens[@]}" '@DATDIR@'"${opt#${prefix}datdir}" ) ;; --help|-\?|-h) if [ ${#tokens[@]} -eq 0 ]; then help else tokens=( "${tokens[@]}" "$opt" ) fi ;; --exec) if [ ${#tokens[@]} -eq 0 ]; then exec_mode=true else tokens=( "${tokens[@]}" "$opt" ) fi ;; --prefix) if [ ${#tokens[@]} -eq 0 ]; then get_prefix=true else tokens=( "${tokens[@]}" "$opt" ) fi ;; *) tokens=( "${tokens[@]}" "$opt" ) esac done if $exec_mode; then exec "${tokens[@]}" fi echo "${tokens[@]}" exit 0