Files
2025-11-24 14:19:51 +05:30

157 lines
6.4 KiB
Bash

# settings
BZIP2_VERSION=1.0.6
SWIG_VERSION=2.0.12
function syntaxError
{
echo "Usage:"
echo " MakeSwig.bat <slikenet_root_path> [<dependent_extension>]"
echo " [--rakNetCompatibility]"
echo
echo " slikenet_root_path Path to the SLikeNet root directory."
echo " dependent_extension The dependent extension which should be included."
echo " Supported values: MYSQL_AUTOPATCHER, SQLITE"
echo
echo "Options:"
echo " --rakNetCompatibility If specified, creates the C# wrapper in RakNet"
echo " compatibility mode."
}
# read mandatory parameter
ROOT_DIR=${1%/} # remove trailing '/'
if [ "$ROOT_DIR" == "" ]; then
echo "Invalid number of parameters"
syntaxError
exit 1
fi
# initialize variables to defaults
RAKNET_COMPATIBILITY_MODE=0
BUILD_BZIP2=0
SOURCE_DIR=$ROOT_DIR/Source
SWIG_ADDITIONAL_INCLUDES=
SWIG_INCLUDES="-I$SOURCE_DIR/include/slikenet -ISwigInterfaceFiles"
SWIG_DEFINES=
GCC_ADDITIONAL_FILES=
GCC_ADDITIONAL_INCLUDES=
GCC_ADDITIONAL_LIBS=
GCC_DEFINES=
NAMESPACE=SLNet
OUTPUT_DIR=../../bindings/csharp/interfaces
OUTPUT_WRAPPER_FILENAME=../../bindings/csharp/wrapper/slikenet_wrapper.cpp
SO_NAME=SLikeNet
# check if we have a dependent extension specified in the 2nd argument
if [ "$2" == "SQLITE" ]; then
# TODO #med - find a way around the additional variables and rather only work with a single one (aka: SWIG_INCLUDES)
SWIG_ADDITIONAL_INCLUDES="-I$ROOT_DIR/DependentExtensions/SQLite3Plugin"
SWIG_DEFINES=-DSWIG_ADDITIONAL_SQL_LITE
GCC_ADDITIONAL_FILES="$ROOT_DIR/DependentExtensions/SQLite3Plugin/SQLite3ClientPlugin.cpp $ROOT_DIR/DependentExtensions/SQLite3Plugin/SQLite3PluginCommon.cpp $ROOT_DIR/DependentExtensions/SQLite3Plugin/Logger/ClientOnly/SQLiteClientLoggerPlugin.cpp $ROOT_DIR/DependentExtensions/SQLite3Plugin/Logger/SQLiteLoggerCommon.cpp"
GCC_ADDITIONAL_INCLUDES="-I$ROOT_DIR/DependentExtensions/SQLite3Plugin/Logger/ClientOnly -I$ROOT_DIR/DependentExtensions/SQLite3Plugin/Logger -I$ROOT_DIR/DependentExtensions/SQLite3Plugin"
elif [ "$2" == "MYSQL_AUTOPATCHER" ]; then
SWIG_ADDITIONAL_INCLUDES="-I$ROOT_DIR/DependentExtensions/Autopatcher -I$ROOT_DIR/DependentExtensions/MySQLInterface"
SWIG_DEFINES=-DSWIG_ADDITIONAL_AUTOPATCHER_MYSQL
GCC_ADDITIONAL_FILES="blocksort.o bzip2.o bzlib.o compress.o crctable.o decompress.o dlltest.o huffman.o randtable.o $ROOT_DIR/DependentExtensions/Autopatcher/ApplyPatch.cpp $ROOT_DIR/DependentExtensions/Autopatcher/AutopatcherClient.cpp $ROOT_DIR/DependentExtensions/Autopatcher/AutopatcherMySQLRepository/AutopatcherMySQLRepository.cpp $ROOT_DIR/DependentExtensions/Autopatcher/AutopatcherServer.cpp $ROOT_DIR/DependentExtensions/Autopatcher/CreatePatch.cpp $ROOT_DIR/DependentExtensions/Autopatcher/MemoryCompressor.cpp $ROOT_DIR/DependentExtensions/MySQLInterface/MySQLInterface.cpp"
GCC_ADDITIONAL_INCLUDES="-I/usr/include/mysql/ -I$ROOT_DIR/DependentExtensions/Autopatcher/AutopatcherMySQLRepository -I$ROOT_DIR/DependentExtensions/Autopatcher -I$ROOT_DIR/DependentExtensions/bzip2-$BZIP2_VERSION -I$ROOT_DIR/DependentExtensions/MySQLInterface"
GCC_ADDITIONAL_LIBS=-lmysqlclient
BUILD_BZIP2=1
elif [ "$2" == "--rakNetCompatibility" ]; then
# TODO #med - improve the handling of optional parameters (according to how it's done in MakeSwig.bat)
RAKNET_COMPATIBILITY_MODE=1
elif [ ! "$2" == "" ]; then
echo "Unsupported dependent extension (or option): '$2'"
syntaxError
exit 1
fi
# parse optional parameters
if [ "$3" == "--rakNetCompatibility" ]; then
RAKNET_COMPATIBILITY_MODE=1
elif [ ! "$3" == "" ]; then
echo "Unsupported option: '$3'"
syntaxError
exit 1
fi
# install SWIG, if missing
type -P swig &>/dev/null
if [ ! $? == 0 ]; then
echo "SWIG is not installed. Do you want this script to download, make, and install SWIG version $SWIG_VERSION? ( y/N )"
read answer
if [ ! "$answer" = "y" ] && [ ! "$answer" = "Y" ]; then
echo "Aborting"
exit 2
fi
if [ ! -d "swig-$SWIG_VERSION" ]; then
wget https://prdownloads.sourceforge.net/swig/swig-$SWIG_VERSION.tar.gz
tar xzf swig-$SWIG_VERSION.tar.gz
fi
cd swig-$SWIG_VERSION
./configure
make
echo "Installing SWIG requires root privileges, enter password"
sudo make install
cd ..
# remove the downloaded SWIG source, after it was installed
rm -R swig-$SWIG_VERSION
rm swig-$SWIG_VERSION.tar.gz
fi
# adjust variables for RakNet compatibility mode
if [ $RAKNET_COMPATIBILITY_MODE == 1 ]; then
NAMESPACE=RakNet
SWIG_DEFINES="$SWIG_DEFINES -DRAKNET_COMPATIBILITY"
GCC_DEFINES=-DRAKNET_COMPATIBILITY=1
OUTPUT_DIR=../../bindings/raknet_backwards_compatibility/csharp/interfaces
OUTPUT_WRAPPER_FILENAME=../../bindings/raknet_backwards_compatibility/csharp/wrapper/RakNet_wrap.cxx
SO_NAME=RakNet
fi
echo "Generating C# wrapper/interface files"
# clear output folder
rm -f $OUTPUT_DIR/*
swig -c++ -csharp -namespace $NAMESPACE $SWIG_INCLUDES $SWIG_ADDITIONAL_INCLUDES $SWIG_DEFINES -outdir $OUTPUT_DIR -o $OUTPUT_WRAPPER_FILENAME SwigInterfaceFiles/RakNet.i
if [ ! $? == 0 ]; then
echo "SWIG had an error while generating the C# wrappers/interfaces"
exit 3
fi
echo "C# wrapper/interface files generated succesfully"
OLD_DIR=`pwd`
cd $SOURCE_DIR/src
if [ $BUILD_BZIP2 == 1 ]; then
echo "Building BZip2 $BZIP2_VERSION"
gcc -c $ROOT_DIR/DependentExtensions/bzip2-$BZIP2_VERSION/blocksort.c $ROOT_DIR/DependentExtensions/bzip2-$BZIP2_VERSION/bzip2.c $ROOT_DIR/DependentExtensions/bzip2-$BZIP2_VERSION/bzlib.c $ROOT_DIR/DependentExtensions/bzip2-$BZIP2_VERSION/compress.c $ROOT_DIR/DependentExtensions/bzip2-$BZIP2_VERSION/crctable.c $ROOT_DIR/DependentExtensions/bzip2-$BZIP2_VERSION/decompress.c $ROOT_DIR/DependentExtensions/bzip2-$BZIP2_VERSION/dlltest.c $ROOT_DIR/DependentExtensions/bzip2-$BZIP2_VERSION/huffman.c $ROOT_DIR/DependentExtensions/bzip2-$BZIP2_VERSION/randtable.c
if [ ! $? == 0 ]; then
echo "Error building BZip2".
cd $OLD_DIR
exit 4
fi
echo "BZip2 was built successfully"
fi
echo "Building the C# capable shared library"
g++ *.cpp $OUTPUT_WRAPPER_FILENAME $GCC_ADDITIONAL_FILES $GCC_DEFINES -std=c++0x -fPIC -lpthread $GCC_ADDITIONAL_LIBS -I$SOURCE_DIR/include $GCC_ADDITIONAL_INCLUDES -shared -o $SO_NAME
if [ ! $? == 0 ]; then
echo "There was an error building the shared library"
cd $OLD_DIR
exit 5
fi
echo "Building the C# capable shared library succeeded"
echo "Copying to /usr/lib/ requires root privileges; enter password"
sudo cp ./$SO_NAME /usr/lib
if [ ! $? == 0 ]; then
echo "$SO_NAME lib copy failed"
cd $OLD_DIR
exit 6
fi
echo "$SO_NAME lib copied"
cd $OLD_DIR