Skip to content

Instantly share code, notes, and snippets.

@tessus
Last active January 25, 2024 23:37
Show Gist options
  • Star 26 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save tessus/5e118d44261a6ab2f198 to your computer and use it in GitHub Desktop.
Save tessus/5e118d44261a6ab2f198 to your computer and use it in GitHub Desktop.
compile tmux (static)
#!/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
@QGB
Copy link

QGB commented Jun 7, 2021

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

@blreay
Copy link

blreay commented Aug 23, 2023

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~

@blreay
Copy link

blreay commented Aug 23, 2023

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"

@tessus
Copy link
Author

tessus commented Aug 23, 2023

@blreay thx, I've updated the gist and added the --with-termlib option.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment