github.com/Konstantin8105/c4go@v0.0.0-20240505174241-768bb1c65a51/scripts/redis.sh (about) 1 #!/bin/bash 2 3 set -e 4 5 go build 6 7 mkdir -p ./testdata/ 8 9 # prepare variables 10 export C4GO_DIR=$GOPATH/src/github.com/Konstantin8105/c4go 11 export C4GO=$C4GO_DIR/c4go 12 export ARCHIVE="http://download.redis.io/releases/redis-5.0.4.tar.gz" 13 export NAME="redis" 14 export VERSION="redis-5.0.4" 15 export TEMP_FOLDER="./testdata/$NAME" 16 export GO_FILE="$TEMP_FOLDER/$NAME.go" 17 export GO_APP="$TEMP_FOLDER/$NAME.app" 18 19 # prepare C code 20 if [ ! -d $TEMP_FOLDER ]; then 21 mkdir -p $TEMP_FOLDER 22 curl $ARCHIVE > $TEMP_FOLDER/$NAME.tar.gz 23 tar -xf $TEMP_FOLDER/$NAME.tar.gz -C $TEMP_FOLDER/ 24 fi 25 26 # remove go files from last transpilation 27 echo "***** remove go files" 28 rm -f $TEMP_FOLDER/*.go 29 rm -f $TEMP_FOLDER/*.app 30 31 # AST tree 32 echo "AST generate to $GO_FILE" 33 if [ "$1" == "-a" ]; then 34 $C4GO ast \ 35 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/hiredis" \ 36 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/jemalloc" \ 37 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/linenoise" \ 38 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/lua" \ 39 $TEMP_FOLDER/$VERSION/src/redis-cli.c 40 fi 41 42 # transpilation of all projects 43 echo "Transpile to Go" 44 $C4GO transpile \ 45 -s \ 46 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/hiredis" \ 47 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/jemalloc" \ 48 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/linenoise" \ 49 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/lua" \ 50 -clang-flag="-I$TEMP_FOLDER/$VERSION/src/" \ 51 -o="$TEMP_FOLDER/redis_cli.go" \ 52 $TEMP_FOLDER/$VERSION/src/redis-cli.c 53 54 55 $C4GO transpile \ 56 -s \ 57 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/hiredis" \ 58 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/jemalloc" \ 59 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/linenoise" \ 60 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/lua" \ 61 -clang-flag="-I$TEMP_FOLDER/$VERSION/src/" \ 62 -o="$TEMP_FOLDER/dict.go" \ 63 $TEMP_FOLDER/$VERSION/src/dict.c 64 65 $C4GO transpile \ 66 -s \ 67 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/hiredis" \ 68 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/jemalloc" \ 69 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/linenoise" \ 70 -clang-flag="-I$TEMP_FOLDER/$VERSION/deps/lua" \ 71 -clang-flag="-I$TEMP_FOLDER/$VERSION/src/" \ 72 -o="$TEMP_FOLDER/sds.go" \ 73 $TEMP_FOLDER/$VERSION/src/sds.c 74 75 $C4GO transpile \ 76 -o="$TEMP_FOLDER/linenoise.go" \ 77 -clang-flag="-I$TEMP_FOLDER/$VERSION/src/" \ 78 $TEMP_FOLDER/$VERSION/deps/linenoise/linenoise.c \ 79 $TEMP_FOLDER/$VERSION/deps/linenoise/example.c 80 81 # Arguments menu 82 echo " -s for show detail of Go build errors" 83 84 # transpilation each file 85 for f in $TEMP_FOLDER/*.go; do 86 # iteration by C projects 87 echo "***** transpilation folder : $f" 88 # show warnings comments in Go source 89 export FILE="$f" 90 echo "Calculate warnings : $FILE" 91 WARNINGS=`cat $FILE | grep "^// Warning" | sort | uniq | wc -l` 92 echo " After transpiling : $WARNINGS warnings." 93 # show amount error from `go build`: 94 echo "Build to $GO_APP file" 95 WARNINGS_GO=`go build -o $GO_APP -gcflags="-e" $f 2>&1 | wc -l` 96 echo " Go build : $WARNINGS_GO warnings" 97 # amount unsafe 98 UNSAFE=`cat $FILE | grep "unsafe\." | wc -l` 99 echo " Unsafe : $UNSAFE" 100 101 if [ "$1" == "-s" ]; then 102 # show go build warnings 103 # c4go warnings 104 cat $f | grep "^// Warning" | sort | uniq 105 # show amount error from `go build`: 106 go build -o $GO_APP -gcflags="-e" $f 2>&1 && echo "OK" || echo "NOK" 107 fi 108 done 109