-
-
Save tessus/5e118d44261a6ab2f198 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
TMUX_VERSION=2.3 | |
NCURSES_VERSION=6.0 | |
LIBEVENT_VERSION=2.0.22 | |
BASEDIR=${HOME}/work/tmux-static | |
TMUXTARGET=${BASEDIR}/local | |
mkdir -p $TMUXTARGET | |
cd $BASEDIR | |
export PKG_CONFIG_PATH="${TMUXTARGET}/lib/pkgconfig" | |
if [ ! -f libevent-${LIBEVENT_VERSION}-stable.tar.gz ]; then | |
wget -O libevent-${LIBEVENT_VERSION}-stable.tar.gz https://github.com/libevent/libevent/releases/download/release-${LIBEVENT_VERSION}-stable/libevent-${LIBEVENT_VERSION}-stable.tar.gz | |
fi | |
if [ ! -f ncurses-${NCURSES_VERSION}.tar.gz ]; then | |
wget -O ncurses-${NCURSES_VERSION}.tar.gz http://ftp.gnu.org/gnu/ncurses/ncurses-${NCURSES_VERSION}.tar.gz | |
fi | |
if [ ! -f tmux-${TMUX_VERSION}.tar.gz ]; then | |
wget -O tmux-${TMUX_VERSION}.tar.gz https://github.com/tmux/tmux/releases/download/${TMUX_VERSION}/tmux-${TMUX_VERSION}.tar.gz | |
fi | |
if [ ! -d libevent-${LIBEVENT_VERSION}-stable ]; then | |
cd ${BASEDIR} | |
tar -xzf libevent-${LIBEVENT_VERSION}-stable.tar.gz | |
cd ${BASEDIR}/libevent-${LIBEVENT_VERSION}-stable | |
./configure --prefix=$TMUXTARGET --disable-shared | |
make && make install | |
fi | |
if [ ! -d ncurses-${NCURSES_VERSION} ]; then | |
cd ${BASEDIR} | |
tar -xzf ncurses-${NCURSES_VERSION}.tar.gz | |
cd ${BASEDIR}/ncurses-${NCURSES_VERSION} | |
./configure --prefix=$TMUXTARGET --with-termlib --with-default-terminfo-dir=/usr/share/terminfo --with-terminfo-dirs="/etc/terminfo:/lib/terminfo:/usr/share/terminfo" | |
make && make install | |
fi | |
if [ ! -d tmux-${TMUX_VERSION} ]; then | |
cd ${BASEDIR} | |
tar -xzf tmux-${TMUX_VERSION}.tar.gz | |
cd tmux-${TMUX_VERSION} | |
./configure --prefix=$TMUXTARGET --enable-static CFLAGS="-I${TMUXTARGET}/include -I${TMUXTARGET}/include/ncurses" LDFLAGS="-L${TMUXTARGET}/lib -L${TMUXTARGET}/include -L${TMUXTARGET}/include/ncurses" LIBEVENT_CFLAGS="-I${TMUXTARGET}/include" LIBEVENT_LIBS="-L${TMUXTARGET}/lib -levent" LIBNCURSES_CFLAGS="-I${TMUXTARGET}/include" LIBNCURSES_LIBS="-L${TMUXTARGET}/lib -lncurses" | |
make && make install | |
fi | |
if [ -f $TMUXTARGET/bin/tmux ]; then | |
$TMUXTARGET/bin/tmux -V | |
echo "`whoami`@`hostname -d`:${TMUXTARGET}/bin/tmux" | |
fi |
not working.. tmux failed to compile
In file included from tmux.h:36:0,
from alerts.c:24:
compat.h:326:9: error: conflicting types for 'forkpty'
pid_t forkpty(int *, char *, struct termios *, struct winsize *);
^
In file included from compat.h:126:0,
from tmux.h:36,
from alerts.c:24:
/usr/include/pty.h:39:12: note: previous declaration of 'forkpty' was here
extern int forkpty (int *__amaster, char *__name,
^
make: *** [alerts.o] Error 1
not working.. tmux failed to compile
Not the script's fault.
Thanks! Makes it easier :-)
@maiaz are you using tmux 3? I get the same error when following the install instructions on the tmux site with static compile tmux 3.1c
https://github.com/tmux/tmux/wiki/Installing
@tessus agree it is not the script fault.
g for library containing SSL_new... no
checking for library containing SSL_new... no
checking openssl/ssl.h usability... no
checking openssl/ssl.h presence... no
checking for openssl/ssl.h... no
configure: error: openssl is a must but can not be found. You should add the directory containing `openssl.pc' to the `PKG_CONFIG_PATH' environment variable, or set `CFLAGS' and `LDFLAGS' directly for openssl, or use `--disable-openssl' to disable support for openssl encryption
make: *** No targets specified and no makefile found. Stop.
checking for egrep... grep -E
Configuring NCURSES 6.2 ABI 6 (Mon Jun 7 23:14:28 CST 2021)
checking for package version... 6.2
checking for package patch date... 20200212
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
not working.. tmux failed to compile In file included from tmux.h:36:0, from alerts.c:24: compat.h:326:9: error: conflicting types for 'forkpty' pid_t forkpty(int *, char *, struct termios *, struct winsize *); ^ In file included from compat.h:126:0, from tmux.h:36, from alerts.c:24: /usr/include/pty.h:39:12: note: previous declaration of 'forkpty' was here extern int forkpty (int *__amaster, char *__name, ^ make: *** [alerts.o] Error 1
I met this error also (build tmux 3.3a with static link) and have resolved it with adding "--with-termlib" to the configure command line of ncurses. the entire command line is:
cd ${BASEDIR}/ncurses-${NCURSES_VERSION}
./configure --prefix=$TMUXTARGET --with-termlib --with-default-terminfo-dir=/usr/share/terminfo --with-terminfo-dirs="/etc/terminfo:/lib/terminfo:/usr/share/terminfo"
make && make install
from ./configure --help:
--with-termlib generate separate terminfo library
It's a great script~
FYI, here are some updates to support building new version tmux with static link. avoid the error of "conflicting types for 'forkpty'"
to add "--with-termlib" option for ncurses configure command line:
./configure --prefix=$TMUXTARGET --with-termlib --with-default-terminfo-dir=/usr/share/terminfo --with-terminfo-dirs="/etc/terminfo:/lib/terminfo:/usr/share/terminfo"
@blreay thx, I've updated the gist and added the --with-termlib
option.
Works flawlessly: Tmux 2.8, Nurses 6.1, Libevent 2.1.8 on Ubuntu 18.04.2 LTS. Thank you very much, sir!.