Open unlink2 opened 3 years ago
Hi @unlink2 You can find a build script I've been using to build it on a Mac below:
Feel free to adapt it for Linux 🙂
Hello! Thank you very much I'll give it a try :)
Here is the script I used on Ubuntu 24.04
I remember you should manually install scons and zlib-dev pkgs before executing it.
#!/usr/bin/env bash
script_dir=$(pwd)
output_dir=${script_dir}/__output__
echo "Script dir is: " $script_dir
echo "Output dir is set to: " $output_dir
export SED=sed
# ----------------------------------------
# OPENSSL BUILD
# ----------------------------------------
if [ -d "${output_dir}/openssl/" ]; then
echo "* OpenSSL is already built"
else
echo "* Downloading OpenSSL"
curl -OL "https://www.openssl.org/source/openssl-1.1.0k.tar.gz"
echo "* Unpacking OpenSSL"
tar xzf ./openssl-1.1.0k.tar.gz
echo "* Changing directory to OpenSSL"
pushd ./openssl-1.1.0k/
echo "* Building OpenSSL"
perl ./Configure \
linux-x86_64 \
threads \
no-dso \
no-shared \
no-hw \
no-ssl3 \
no-gost \
no-dtls \
no-srp \
no-unit-test \
no-zlib \
no-zlib-dynamic \
enable-static-engine \
-DSSL_FORBID_ENULL \
--prefix="${output_dir}/openssl" \
--openssldir="/usr/lib/ssl"
make depend && make && make install
echo "* Changing directory back"
popd
fi
if [ ! -d "${output_dir}/openssl/" ]; then
echo "OpenSSL build has FAILED!"
exit
fi
# ----------------------------------------
# SQLITE BUILD
# ----------------------------------------
if [ -d "${output_dir}/sqlite3/" ]; then
echo "* SQLite is already built"
else
echo "* Downloading SQLite"
curl -OL "https://www.sqlite.org/2019/sqlite-autoconf-3280000.tar.gz"
echo "* Unpacking SQLite"
tar xzf ./sqlite-autoconf-3280000.tar.gz
echo "* Changing directory to SQLite"
pushd ./sqlite-autoconf-3280000/
echo "* Building SQLite"
./configure --prefix="${output_dir}/sqlite3" \
CPPFLAGS="-fPIC -DNDEBUG \
-DSQLITE_TEMP_STORE=2 \
-DSQLITE_DEFAULT_PAGE_SIZE=4096 \
-DSQLITE_DEFAULT_CACHE_SIZE=20000 \
-DSQLITE_DEFAULT_MEMSTATUS=0 \
-DSQLITE_DEFAULT_RECURSIVE_TRIGGERS=1 \
-DSQLITE_POWERSAFE_OVERWRITE=1 \
-DSQLITE_OMIT_AUTOINIT \
-DSQLITE_OMIT_DEPRECATED \
-DSQLITE_OMIT_LOAD_EXTENSION \
-DSQLITE_OMIT_PROGRESS_CALLBACK \
-DSQLITE_OMIT_TCL_VARIABLE \
-DSQLITE_OMIT_TRACE \
-DSQLITE_OMIT_UTF16 \
-DSQLITE_OMIT_DATETIME_FUNCS \
-DSQLITE_OMIT_LOCALTIME \
-DSQLITE_OMIT_SHARED_CACHE \
-DSQLITE_OMIT_BUILTIN_TEST \
-DSQLITE_OMIT_GET_TABLE \
-DSQLITE_OMIT_SCHEMA_PRAGMAS \
-DSQLITE_OMIT_INTEGRITY_CHECK"
make && make install
echo "* Changing directory back"
popd
fi
if [ ! -d "${output_dir}/sqlite3/" ]; then
echo "SQLite build has FAILED!"
exit
fi
# ----------------------------------------
# APR BUILD
# ----------------------------------------
if [ -d "${output_dir}/apr/" ]; then
echo "* APR is already built"
else
echo "* Downloading APR"
curl -OL "https://archive.apache.org/dist/apr/apr-1.7.0.tar.bz2"
echo "* Unpacking APR"
tar xjf ./apr-1.7.0.tar.bz2
echo "* Changing directory to APR"
pushd ./apr-1.7.0/
echo "* Building APR"
./configure --prefix="${output_dir}/apr" CPPFLAGS="-fPIC"
make && make install
echo "* Changing directory back"
popd
fi
if [ ! -d "${output_dir}/apr/" ]; then
echo "APR build has FAILED!"
exit
fi
# ----------------------------------------
# EXPAT BUILD
# ----------------------------------------
if [ -d "${output_dir}/expat/" ]; then
echo "* Expat is already built"
else
echo "* Downloading Expat"
curl -OL "https://github.com/libexpat/libexpat/releases/download/R_2_6_2/expat-2.6.2.tar.bz2"
echo "* Unpacking Expat"
tar xjf ./expat-2.6.2.tar.bz2
echo "* Changing directory to Expat"
pushd ./expat-2.6.2/
echo "* Building Expat"
./configure --prefix="${output_dir}/expat" CPPFLAGS="-fPIC"
make && make install
echo "* Changing directory back"
popd
fi
if [ ! -d "${output_dir}/expat/" ]; then
echo "Expat build has FAILED!"
exit
fi
# ----------------------------------------
# APR-UTIL BUILD
# ----------------------------------------
if [ -d "${output_dir}/apr-util/" ]; then
echo "* APR-Util is already built"
else
echo "* Downloading APR-Util"
curl -OL "https://archive.apache.org/dist/apr/apr-util-1.6.1.tar.bz2"
echo "* Unpacking APR-Util"
tar xjf ./apr-util-1.6.1.tar.bz2
echo "* Changing directory to APR-Util"
pushd ./apr-util-1.6.1/
echo "* Building APR-Util"
./configure --prefix="${output_dir}/apr-util" \
--with-apr="${output_dir}/apr" \
--with-openssl="${output_dir}/openssl" \
--with-sqlite3="${output_dir}/sqlite3" \
--with-expat="${output_dir}/expat" \
--with-ldap=no \
--with-odbc=no \
CPPFLAGS="-fPIC"
make && make install
echo "* Changing directory back"
popd
fi
if [ ! -d "${output_dir}/apr-util/" ]; then
echo "APR-Util build has FAILED!"
exit
fi
# ----------------------------------------
# SERF BUILD
# ----------------------------------------
if [ -d "${output_dir}/serf/" ]; then
echo "* Serf is already built"
else
echo "* Downloading Serf"
curl -OL "https://archive.apache.org/dist/serf/serf-1.3.10.tar.bz2"
echo "* Unpacking Serf"
tar xjf ./serf-1.3.10.tar.bz2
echo "* Changing directory to Serf"
pushd ./serf-1.3.10/
echo "* Building Serf"
scons PREFIX="${output_dir}/serf" \
OPENSSL="${output_dir}/openssl" \
APR="${output_dir}/apr" \
APU="${output_dir}/apr-util" \
SOURCE_LAYOUT=no \
APR_STATIC=yes \
CFLAGS="-fPIC" \
install-lib \
install-inc
scons install
echo "* Changing directory back"
popd
fi
if [ ! -d "${output_dir}/serf/" ]; then
echo "Serf build has FAILED!"
exit
fi
# ----------------------------------------
# SUBVERSION BUILD
# ----------------------------------------
if [ -d "${output_dir}/subversion/" ]; then
echo "* Subversion is already built"
else
echo "* Downloading Subversion"
curl -OL "https://archive.apache.org/dist/subversion/subversion-1.10.6.tar.bz2"
echo "* Unpacking Subversion"
tar xjf ./subversion-1.10.6.tar.bz2
echo "* Changing directory to Subversion"
pushd ./subversion-1.10.6/
./configure --prefix="${output_dir}/subversion" \
--with-apr="${output_dir}/apr" \
--with-apr-util="${output_dir}/apr-util" \
--with-serf="${output_dir}/serf" \
--with-sqlite="${output_dir}/sqlite3" \
--with-lz4=internal \
--with-utf8proc=internal \
--without-berkeley-db \
--without-swig \
--disable-shared \
CPPFLAGS="-fPIC -DSVN_HI_RES_SLEEP_MS=1"
make && make install
echo "* Changing directory back"
popd
fi
if [ ! -d "${output_dir}/subversion/" ]; then
echo "Subversion build has FAILED!"
exit
fi
# ----------------------------------------
# DYNAMIC LIBRARY LINKING
# ----------------------------------------
echo "* Linking a dynamic library"
gcc -shared \
-Werror=unknown-warning-option -g -O2 \
-o "${output_dir}/subversion/lib/libSharpSvn.Native.so" \
-Wl,--whole-archive \
"${output_dir}/subversion/lib/libsvn_client-1.a" \
"${output_dir}/subversion/lib/libsvn_wc-1.a" \
"${output_dir}/subversion/lib/libsvn_ra-1.a" \
"${output_dir}/subversion/lib/libsvn_ra_local-1.a" \
"${output_dir}/subversion/lib/libsvn_repos-1.a" \
"${output_dir}/subversion/lib/libsvn_fs-1.a" \
"${output_dir}/subversion/lib/libsvn_fs_fs-1.a" \
"${output_dir}/subversion/lib/libsvn_fs_x-1.a" \
"${output_dir}/subversion/lib/libsvn_fs_util-1.a" \
"${output_dir}/subversion/lib/libsvn_ra_svn-1.a" \
"${output_dir}/subversion/lib/libsvn_ra_serf-1.a" \
"${output_dir}/serf/lib/libserf-1.a" \
"${output_dir}/subversion/lib/libsvn_delta-1.a" \
"${output_dir}/subversion/lib/libsvn_diff-1.a" \
"${output_dir}/subversion/lib/libsvn_subr-1.a" \
"${output_dir}/openssl/lib/libcrypto.a" \
"${output_dir}/openssl/lib/libssl.a" \
"${output_dir}/apr-util/lib/libaprutil-1.a" \
"${output_dir}/apr/lib/libapr-1.a" \
"${output_dir}/sqlite3/lib/libsqlite3.a" \
"${output_dir}/expat/lib/libexpat.a" \
-lz -lpthread -ldl -lrt \
-Wl,--no-whole-archive
if [ ! -f "${output_dir}/subversion/lib/libSharpSvn.Native.so" ]; then
echo "Dynamic library build has FAILED!"
exit
fi
strip -x "${output_dir}/subversion/lib/libSharpSvn.Native.so"
echo "The build SUCCEEDED!"
# Maybe we should clean up a bit ...
Hello,
we're trying to implement a wrapper around SVN using .Net 5 on Linux and we'd love to give this library a try however we are not certain how to set up a build environment. Any help would be greatly appreciated.