TubeLab-App-Android/frostwire-jlibtorrent/swig/run-swig.sh

117 lines
5.5 KiB
Bash
Executable File

#!/bin/bash
# NOTE: Run this script manually every time you make changes to libtorrent.i, this is not ran by any of the build scripts, including .travis.yml
source build-utils.shinc
abort_if_var_unset "LIBTORRENT_ROOT" ${LIBTORRENT_ROOT}
abort_if_var_unset "BOOST_ROOT" ${BOOST_ROOT}
# Extracted from ../build.gradle
JLIBTORRENT_VERSION=`sed -n -e '/^version /s/.* //p' ../build.gradle | tr -d "'"`
abort_if_var_unset "JLIBTORRENT_VERSION" ${JLIBTORRENT_VERSION}
function fixCode() {
uname=`uname -s`
if [ "$(uname)" == "Darwin" ]; then
# FreeBSD's sed is weird, it needs that extra '' parameter there for some reason
sed -i '' 's/constexpr alert_category_t all = alert_category_t::all();/ \/\/deleted temporarily because it is defined twice/g' ${LIBTORRENT_ROOT}/include/libtorrent/alert.hpp
# The line above will be reverted to normal when we build by the checkout, if not commented/deleted swig breaks
sed -i '' 's/) &;/) ;/g' ${LIBTORRENT_ROOT}/include/libtorrent/file_storage.hpp
sed -i '' 's/) & noexcept;/) noexcept;/g' ${LIBTORRENT_ROOT}/include/libtorrent/file_storage.hpp
sed -i '' 's/(time_point32::min)();/time_point32::min();/g' ${LIBTORRENT_ROOT}/include/libtorrent/announce_entry.hpp
sed -i '' 's/userdata = client_data_t{});/userdata);/g' ${LIBTORRENT_ROOT}/include/libtorrent/torrent_handle.hpp
else
sed -i 's/constexpr alert_category_t all = alert_category_t::all();/ \/\/deleted temporarily because it is defined twice/g' ${LIBTORRENT_ROOT}/include/libtorrent/alert.hpp
sed -i 's/) &;/) ;/g' ${LIBTORRENT_ROOT}/include/libtorrent/file_storage.hpp
sed -i 's/) & noexcept;/) noexcept;/g' ${LIBTORRENT_ROOT}/include/libtorrent/file_storage.hpp
sed -i 's/(time_point32::min)();/time_point32::min();/g' ${LIBTORRENT_ROOT}/include/libtorrent/announce_entry.hpp
sed -i 's/userdata = client_data_t{});/userdata);/g' ${LIBTORRENT_ROOT}/include/libtorrent/torrent_handle.hpp
fi
}
function refixCode() {
uname=`uname -s`
if [ "$(uname)" == "Darwin" ]; then
sed -i '' 's/) ;/) \&;/g' ${LIBTORRENT_ROOT}/include/libtorrent/file_storage.hpp
sed -i '' 's/) noexcept;/) \& noexcept;/g' ${LIBTORRENT_ROOT}/include/libtorrent/file_storage.hpp
sed -i '' 's/time_point32::min();/(time_point32::min)();/g' ${LIBTORRENT_ROOT}/include/libtorrent/announce_entry.hpp
sed -i '' 's/userdata);/userdata = client_data_t{});/g' ${LIBTORRENT_ROOT}/include/libtorrent/torrent_handle.hpp
else
sed -i 's/) ;/) \&;/g' ${LIBTORRENT_ROOT}/include/libtorrent/file_storage.hpp
sed -i 's/) noexcept;/) \& noexcept;/g' ${LIBTORRENT_ROOT}/include/libtorrent/file_storage.hpp
sed -i 's/time_point32::min();/(time_point32::min)();/g' ${LIBTORRENT_ROOT}/include/libtorrent/announce_entry.hpp
sed -i 's/userdata);/userdata = client_data_t{});/g' ${LIBTORRENT_ROOT}/include/libtorrent/torrent_handle.hpp
fi
}
function runJni()
{
JAVA_SRC_OUTPUT=../src/main/java/com/frostwire/jlibtorrent/swig
rm -rf ${JAVA_SRC_OUTPUT}
mkdir -p ${JAVA_SRC_OUTPUT}
# If you're running from Ubuntu and you have swig 3.0.5 you might end up with a segfault running the swig command below
#./run-swig.sh: line 33: 46204 Segmentation fault
# Make sure your swig command is compiled from source, version 3.0.12 works on mac
# https://sourceforge.net/projects/swig/files/swig/swig-3.0.12/swig-3.0.12.tar.gz/download
swig -c++ -java -o libtorrent_jni.cpp \
-outdir ${JAVA_SRC_OUTPUT} \
-package com.frostwire.jlibtorrent.swig \
-I${BOOST_ROOT} \
-I${LIBTORRENT_ROOT}/include \
-DBOOST_ASIO_DECL="" \
-DBOOST_NO_TYPEID=1 \
-DBOOST_NO_EXCEPTIONS \
-DBOOST_POSIX_API=1 \
-DBOOST_SYSTEM_CONSTEXPR="" \
-DBOOST_SYSTEM_NOEXCEPT="" \
-DBOOST_SYSTEM_DECL="" \
-DBOOST_SYSTEM_NO_DEPRECATED=1 \
-DBOOST_NO_IOSTREAM \
-DBOOST_SYMBOL_VISIBLE \
-DBOOST_NOEXCEPT="" \
-DBOOST_NOEXCEPT_OR_NOTHROW="" \
-DTORRENT_ABI_VERSION=2 \
-DTORRENT_VERSION_NAMESPACE_2="" \
-DTORRENT_VERSION_NAMESPACE_2_END="" \
-DTORRENT_IPV6_NAMESPACE="" \
-DTORRENT_IPV6_NAMESPACE_END="" \
-DTORRENT_CFG="TORRENT_CFG" \
-DTORRENT_NO_DEPRECATE \
-DTORRENT_DEPRECATED_EXPORT="" \
-DTORRENT_DEPRECATED_MEMBER="" \
-DTORRENT_DEPRECATED_ENUM="" \
-DTORRENT_DEPRECATED \
-DTORRENT_EXPORT="" \
-DTORRENT_EXTRA_EXPORT="" \
-DTORRENT_FORMAT\(x,y\)="" \
-DNDEBUG=1 \
-D_bit="" \
-Dfinal="" \
-DBOOST_OVERRIDE="override" \
libtorrent.i
# at first sight, this could look like a very dangerous thing to
# do, but in practice, these director types are controlled by us
# and we know we can do it. The main reason is to be able to
# compile with -fno-rtti.
uname=`uname -s`
if [ "$(uname)" == "Darwin" ]; then
sed -i '' 's/dynamic_cast<SwigDirector_/static_cast<SwigDirector_/g' libtorrent_jni.cpp
else
sed -i 's/dynamic_cast<SwigDirector_/static_cast<SwigDirector_/g' libtorrent_jni.cpp
fi
# replace jlibtorrent version
#uname=`uname -s`
if [ "$(uname)" == "Darwin" ]; then
sed -i '' 's/\$JLIBTORRENT_VERSION\$/'"${JLIBTORRENT_VERSION}"'/g' ../src/main/java/com/frostwire/jlibtorrent/swig/libtorrent_jni.java
else
sed -i 's/\$JLIBTORRENT_VERSION\$/'"${JLIBTORRENT_VERSION}"'/g' ../src/main/java/com/frostwire/jlibtorrent/swig/libtorrent_jni.java
fi
}
fixCode
runJni
refixCode