#!/bin/bash BUILD_DIR="$(cd $(dirname $0) && pwd)"; TMUX_VERSION=${TMUX_VERSION:-3.1b} NCURSES_VERSION=${NCURSES_VERSION:-6.2} LIBEVENT_VERSION=${LIBEVENT_VERSION:-2.1.10-stable} UTF8PROC_VERSION=${UTF8PROC_VERSION:-2.4.0} BUILD_PREBUILT_DEP="$BUILD_DIR/prebuilt/dep"; BUILD_PREBUILT_TMUX="$BUILD_DIR/prebuilt/tmux"; echo "We need wget or curl, tar, C compiler(gcc for default), cmake, make, "; echo "BUILD_DIR=$BUILD_DIR"; echo "BUILD_PREBUILT_DEP=$BUILD_PREBUILT_DEP"; echo "BUILD_PREBUILT_TMUX=$BUILD_PREBUILT_TMUX"; sleep 2; # export CC=musl-gcc # export CFLAGS="-fPIC -I$BUILD_PREBUILT_DEP/dep/include" if [[ ${CFLAGS} == *fPIC* ]]; then export CFLAGS="$CFLAGS -I$BUILD_PREBUILT_DEP/dep/include" else export CFLAGS="$CFLAGS -fPIC -I$BUILD_PREBUILT_DEP/dep/include" fi die() { echo "Error: $*" >&2 exit 1 } download_pkg() { local filename=${2:-${1##*/}} local cmd="true" if [[ ! -e "$filename" ]]; then if type -p curl >/dev/null 2>&1; then cmd="curl -Lk \"$1\" -o \"$filename\"" elif type -p wget >/dev/null 2>&1; then cmd="wget --no-check-certificate \"$1\" -O \"$filename\"" else die "You need curl or wget" fi echo "run: $cmd" fi eval "$cmd" } # ============ build libevent ============ set -e cd "$BUILD_DIR" download_pkg https://github.com/libevent/libevent/releases/download/release-$LIBEVENT_VERSION/libevent-$LIBEVENT_VERSION.tar.gz if [ 0 -ne $? ]; then echo "download libevent failed"; exit 1; fi if [ -e "libevent-$LIBEVENT_VERSION" ]; then rm -rf "libevent-$LIBEVENT_VERSION" fi tar -axvf libevent-$LIBEVENT_VERSION.tar.gz if [ ! -e "libevent-$LIBEVENT_VERSION" ]; then echo "unpack libevent failed" exit 1 fi cd libevent-$LIBEVENT_VERSION ./configure \ --prefix="$BUILD_PREBUILT_DEP" \ --disable-openssl \ --enable-shared=no \ --enable-static=yes \ --with-pic make -j4 make install # ============ build ncurses ============ cd "$BUILD_DIR"; download_pkg https://invisible-mirror.net/archives/ncurses/ncurses-$NCURSES_VERSION.tar.gz ; if [ 0 -ne $? ]; then echo "download ncurses failed"; exit 1; fi if [ -e "ncurses-$NCURSES_VERSION" ]; then rm -rf "ncurses-$NCURSES_VERSION"; fi tar -axvf ncurses-$NCURSES_VERSION.tar.gz; if [ ! -e "ncurses-$NCURSES_VERSION" ]; then echo "unpack ncurses failed" exit 1 fi cd ncurses-$NCURSES_VERSION # ncursesw: --enable-ext-colors --enable-widec # build with clang: CC=clang CXX=clang++ CFLAGS="-Wno-unused-command-line-argument" AR=llvm-ar LD=lld ./configure \ --prefix="$BUILD_PREBUILT_DEP" \ --without-cxx \ --without-cxx-binding \ --with-termlib \ --enable-termcap \ --enable-ext-colors \ --enable-ext-mouse \ --enable-bsdpad \ --enable-opaque-curses \ --with-terminfo-dirs=/etc/terminfo:/usr/share/terminfo:/lib/terminfo \ --with-termpath=/etc/termcap:/usr/share/misc/termcap \ --with-fallbacks="linux,xterm,xterm-color,xterm-256color,vt100" make -j4 make install # ============ build utf8proc ============ cd "$BUILD_DIR"; download_pkg https://github.com/JuliaLang/utf8proc/archive/v$UTF8PROC_VERSION.tar.gz utf8proc-$UTF8PROC_VERSION.tar.gz if [ 0 -ne $? ]; then echo "download utf8proc failed" exit 1 fi if [ -e "utf8proc-$UTF8PROC_VERSION" ]; then rm -rf "utf8proc-$UTF8PROC_VERSION" fi tar -axvf utf8proc-$UTF8PROC_VERSION.tar.gz if [ ! -e "utf8proc-$UTF8PROC_VERSION" ]; then echo "unpack utf8proc failed" exit 1 fi mkdir -p utf8proc-$UTF8PROC_VERSION/build cd utf8proc-$UTF8PROC_VERSION/build cmake .. -DCMAKE_INSTALL_PREFIX="$BUILD_PREBUILT_DEP" -DBUILD_SHARED_LIBS=OFF cmake --build . if [ 0 -ne $? ]; then echo "build utf8proc failed" exit 1 fi # install cp ../*.h "$BUILD_PREBUILT_DEP/include" cp *.a "$BUILD_PREBUILT_DEP/lib" # ============ build tmux ============ cd "$BUILD_DIR"; download_pkg https://github.com/tmux/tmux/releases/download/$TMUX_VERSION/tmux-$TMUX_VERSION.tar.gz if [ 0 -ne $? ]; then echo "download tmux failed" exit 1 fi if [ -e "tmux-$TMUX_VERSION" ]; then rm -rf "tmux-$TMUX_VERSION" fi tar -axvf tmux-$TMUX_VERSION.tar.gz if [ ! -e "tmux-$TMUX_VERSION" ]; then echo "unpack tmux failed" exit 1 fi NCURSES_HEADER="$(find $BUILD_PREBUILT_DEP/include -name curses.h)" cd tmux-$TMUX_VERSION PKG_CONFIG_PATH="$BUILD_PREBUILT_DEP/lib/pkgconfig" \ LIBNCURSES_CFLAGS="-I$(dirname $NCURSES_HEADER)" \ LIBNCURSES_LIBS="-L$BUILD_PREBUILT_DEP/lib" \ LIBEVENT_CFLAGS="-I$BUILD_PREBUILT_DEP/include" \ LIBEVENT_LIBS="-L$BUILD_PREBUILT_DEP/lib -levent" \ ./configure \ --prefix="$BUILD_PREBUILT_TMUX" \ --enable-static \ --enable-utf8proc make -j4 make install # pack tmux cd "$BUILD_DIR/prebuilt"; tar -zcvf tmux-$TMUX_VERSION.musl-bin.tar.gz tmux cd "$BUILD_DIR" mv -f "$BUILD_DIR/prebuilt/tmux-$TMUX_VERSION.musl-bin.tar.gz" ./ echo "all jobs done."