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