1
0
Fork 0
elinks/build.sh

357 lines
9.1 KiB
Bash
Executable File

#!/bin/bash
#
# shell script menus for elinks binaries building
#
clear
echo ' --/ \--'
echo ' --[ Welcome to the elinks build helper ]--'
echo ' --[ ]--'
echo ' --[ [*] use option 1 to change arch ]--'
echo ' --[ [*] use option 4 to config and make ]--'
echo ' --[ [*] use option 5 for config ]--'
echo ' --[ [*] use option 6 for make ]--'
echo ' --[ [*] use option 7 for test ]--'
echo ' --[ [*] use option 8 for publishing ]--'
echo ' --\ /--'
echo ' '
JS_ENABLE=0
gen_conf() {
./autogen.sh
}
configure() {
echo "--[ Configure starts in 2 seconds ]--"
echo "--[ Compiler: " $1 "]--"
echo "--[ Host : " $2 "]--"
sleep 2
rm -f config.cache
# Thanks rkd77 for discovery of jemmaloc needed
# to correct openssl functionality
# LIBS="-ljemalloc -lpthread -lm" \
# Update: Thanks to JF for this solution for solving
# crashes using pthread
# -Wl,--whole-archive -lpthread -Wl,--no-whole-archive
BUILD_CMD="time \
CC='$1' \
LD='$2' \
LDFLAGS='$4' \
CXX=$CXX_CUST \
CFLAGS='$6' \
LIBS='$5' \
CXXFLAGS='$6' \
PKG_CONFIG='./pkg-config.sh' \
./configure -C \
--host='$3' \
--prefix=/usr \
--enable-256-colors \
--enable-fastmem \
--enable-utf-8 \
--with-static \
--with-openssl \
--without-gpm \
--without-quickjs \
--disable-88-colors \
--disable-backtrace \
--disable-bittorrent \
--disable-debug \
--disable-cgi \
--disable-combining \
--disable-gopher \
--disable-nls \
--disable-ipv6 \
--disable-sm-scripting \
--disable-true-color \
--without-bzlib \
--without-brotli \
--without-gnutls \
--without-libev \
--without-libevent \
--without-lzma \
--without-perl \
--without-python \
--without-ruby \
--without-terminfo \
--without-zlib \
--without-zstd \
--without-x"
if [ $JS_ENABLE == 1 ]; then
BUILD_CMD="${BUILD_CMD/without-quickjs/with-quickjs}"
fi
echo "$BUILD_CMD"
bash -c "$BUILD_CMD"
if [ $? -eq 0 ]; then
echo "--[ Configuration Sucessfull ]--"
# turn off warnings
#sed -i 's/-Wall/-w/g' Makefile.config
#sed -i 's/-lpthread/-pthread/g' Makefile.config
#build
return 0
else
echo "--[ Listing errors in config.log ]--"
cat config.log | grep error | tail
echo "--[ Configuration failed... ]--"
return 1
fi
}
# BUILD FUNCTION
build() {
echo "--[ Build starts in 2 seconds ]--"
sleep 2
time make # --trace
if [ $? -eq 0 ]; then
echo "--[ ................ ]--"
echo "--[ Build Sucessfull ]--"
echo "--[ All Done. ]--"
echo "--[ ................ ]--"
return 0
else
echo "--[ Build failed... ]--"
return 1
fi
}
test() {
#
# very basic to test binary
# won't core dump
#
# for arm32: qemu-arm-static
# for win64: wineconsole
#
#./src/elinks$1 \
#--no-connect \
#--dump \
#./test/hello.html
# more complete testing
./test.sh "$BIN_SUFFIX" "$ARCHIT"
}
pub() {
ls -l ./src/elinks$1
file ./src/elinks$1
if [ ! -d ../bin ]; then
mkdir ../bin
fi
cp ./src/elinks$1 ../bin/elinks_$2$1
echo "--[ File Published to ../bin ]--"
}
info() {
echo "--[ binary info ]--"
if [ ! -f ../src/elinks$1 ]; then
file ./src/elinks$1
ls -lh ./src/elinks$1
ls -l ./src/elinks$1
if [ "$ARCHIT" = "win64" ] || [ "$ARCHIT" = "win32" ]; then
wineconsole --backend=ncurses ./src/elinks$1 --version
else
./src/elinks$1 --version
fi
else
echo "--[*] No binary compiled."
fi
}
set_arch() {
if [ "$1" = "lin32" ]; then
ARCHIT="$1"
CC="i686-linux-gnu-gcc"
LD="i686-linux-gnu-ld"
MAKE_HOST="i686-linux-gnu"
BIN_SUFFIX=""
CXXFLAGS=""
LDFLAGS=""
LIBS=""
elif [ "$1" = "lin64" ]; then
ARCHIT="$1"
CC="x86_64-linux-gnu-gcc"
LD="x86_64-linux-gnu-ld"
MAKE_HOST="x86_64-linux-gnu"
BIN_SUFFIX=""
CXXFLAGS=""
LDFLAGS=""
LIBS="-Wl,--whole-archive -lpthread -Wl,--no-whole-archive"
elif [ "$1" = "win32" ]; then
ARCHIT="$1"
CC="i686-w64-mingw32-gcc"
LD="i686-w64-mingw32-ld"
MAKE_HOST="x86_64-w32-mingw32"
BIN_SUFFIX=".exe"
CXXFLAGS="-I/usr/local/include"
LDFLAGS="-L/usr/local/lib"
LIBS="-lws2_32 -Wl,--whole-archive -lpthread -Wl,--no-whole-archive"
CXX_CUST="i686-w64-mingw32-g++"
elif [ "$1" = "win64" ]; then
ARCHIT="$1"
CC="x86_64-w64-mingw32-gcc"
LD="x86_64-w64-mingw32-ld"
MAKE_HOST="x86_64-w64-mingw32"
BIN_SUFFIX=".exe"
CXXFLAGS="-I/usr/local/include"
LDFLAGS="-L/usr/local/lib"
LIBS="-lws2_32 -Wl,--whole-archive -lpthread -Wl,--no-whole-archive"
elif [ "$1" = "djgpp" ]; then
ARCHIT="$1"
CC="i586-pc-msdosdjgpp-gcc"
LD="i586-pc-msdosdjgpp-ld --allow-multiple-definition"
MAKE_HOST="i586-pc-msdosdjgpp"
BIN_SUFFIX=".exe"
CXXFLAGS="-I/usr/local/include -I/home/elinks/.dosemu/drive_c/LINKS/watt32/inc"
LDFLAGS="-L/usr/local/lib -L/home/elinks/.dosemu/drive_c/LINKS/watt32/lib"
LIBS="-lwatt"
elif [ "$1" = "arm32" ]; then
ARCHIT="$1"
CC="arm-linux-gnueabihf-gcc"
LD="arm-linux-gnueabihf-ld"
MAKE_HOST="arm-linux-gnu"
BIN_SUFFIX=""
CXXFLAGS=""
LDFLAGS=""
LDFLAGS="-L/usr/local/lib"
LIBS="-Wl,--whole-archive -lpthread -Wl,--no-whole-archive"
elif [ "$1" = "arm64" ]; then
ARCHIT="$1"
CC="aarch64-linux-gnu-gcc"
LD="aarch64-linux-gnu-ld"
MAKE_HOST="aarch64-linux-gnu"
BIN_SUFFIX=""
CXXFLAGS="-I/usr/local/include"
LDFLAGS="-L/usr/local/lib"
LIBS="-Wl,--whole-archive -lpthread -Wl,--no-whole-archive"
elif [ "$1" = "native" ]; then
ARCHIT="$1"
CC="gcc"
LD="ld"
MAKE_HOST=""
BIN_SUFFIX=""
CXXFLAGS="-I/usr/local/include"
LDFLAGS="-L/usr/local/lib"
LIBS="-Wl,--whole-archive -lpthread -Wl,--no-whole-archive"
fi
}
# ARCH SELECTION MENU
arch_menu() {
MENU_ARCHS="$ARCHS null null null return"
echo "[=] Build architecture selection menu"
select SEL in $MENU_ARCHS; do
echo "[=] Build architecture selection menu"
if [ "$SEL" = "lin32" ]; then
set_arch "$SEL"
elif [ "$SEL" = "lin64" ]; then
set_arch "$SEL"
elif [ "$SEL" = "win64" ]; then
set_arch "$SEL"
elif [ "$SEL" = "win32" ]; then
set_arch "$SEL"
elif [ "$SEL" = "arm32" ]; then
set_arch "$SEL"
elif [ "$SEL" = "arm64" ]; then
set_arch "$SEL"
elif [ "$SEL" = "djgpp" ]; then
set_arch "$SEL"
elif [ "$SEL" = "native" ]; then
set_arch native
elif [ "$SEL" = "make" ]; then
build
elif [ "$SEL" = "null" ]; then
echo "[.] This option is intentially left blank"
elif [ "$SEL" = "return" ]; then
break
fi
echo "--[ Architecture : " $ARCHIT " ]--"
echo "--[ Compiler : " $CC " ]--"
echo "--[ Host : " $MAKE_HOST " ]--"
done
}
# MAIN LOOP
CMDACT=$1
ARCHIT=""
BIN_SUFFIX=""
ARCHS="lin32 lin64 win32 win64 arm32 arm64 djgpp native"
CC_SEL="arch null null build \
config make test \
pub debug \
info \
build_all \
exit"
set_arch native
# command line action
if [ ! -z $CMDACT ]; then
if [ $CMDACT == "build" ]; then
JS_ENABLE=1
CC=g++
./autogen.sh
configure "$CC" "$LD" "$MAKE_HOST" "$LDFLAGS" "$LIBS" "$CXXFLAGS"
if [ $? -eq 1 ]; then
exit
fi
sed -i 's/^LIBS = .*/LIBS = -ltre -lssl -lcrypto -ldl -Wl,--whole-archive -lpthread -Wl,--no-whole-archive -lidn -lexpat \/usr\/local\/lib\/quickjs\/libquickjs.a \/usr\/local\/lib\/libxml++-5.0.a -lxml2 -lz -licui18n -llzma -lsqlite3 -licuuc -licudata/g' Makefile.config
build
if [ $? -eq 1 ]; then
exit
fi
exit
fi
fi
# user mode action
select SEL in $CC_SEL; do
if [ "$SEL" = "arch" ]; then
set_arch native
arch_menu
elif [ "$SEL" = "build" ]; then
configure "$CC" "$LD" "$MAKE_HOST" "$LDFLAGS" "$LIBS" "$CXXFLAGS"
if [ $? -eq 1 ]; then
break
fi
build
if [ $? -eq 1 ]; then
break
fi
elif [ "$SEL" = "make" ]; then
build
elif [ "$SEL" = "config" ]; then
configure "$CC" "$LD" "$MAKE_HOST" "$LDFLAGS" "$LIBS" "$CXXFLAGS"
elif [ "$SEL" = "test" ]; then
test $BIN_SUFFIX
elif [ "$SEL" = "pub" ]; then
pub "$BIN_SUFFIX" "$ARCHIT"
elif [ "$SEL" = "debug" ]; then
gdb ./src/elinks$BIN_SUFFIX
elif [ "$SEL" = "info" ]; then
info "$BIN_SUFFIX"
elif [ "$SEL" = "build_all" ]; then
#set -f # avoid globbing (expansion of *).
arch_arr=($ARCHS)
for arch in "${arch_arr[@]}"; do
echo "--[ Building: $arch ]--"
set_arch "$arch"
configure "$CC" "$LD" "$MAKE_HOST" "$LDFLAGS" "$LIBS" "$CXXFLAGS"
if [ $? -eq 1 ]; then
break
fi
build
if [ $? -eq 1 ]; then
break
fi
info "$BIN_SUFFIX"
pub "$BIN_SUFFIX" "$ARCHIT"
done
elif [ "$SEL" = "null" ]; then
echo "[.] This option is intentially left blank"
elif [ "$SEL" = "exit" ]; then
exit
fi
echo "--[ [=] elinks build system main menu ]--"
echo "--[ Architecture : " $ARCHIT " ]--"
echo "--[ Compiler : " $CC " ]--"
echo "--[ Host : " $MAKE_HOST " ]--"
done