st now runs on Linux, OpenBSD and FreeBSD.

This commit is contained in:
Aurélien Aptel 2010-08-28 03:18:22 +02:00
parent fa6a9216a1
commit cf527c22d5
3 changed files with 23 additions and 20 deletions

View File

@ -10,6 +10,7 @@ all: options st
options: options:
@echo st build options: @echo st build options:
@echo "SYSTEM = ${SYSTEM}"
@echo "CFLAGS = ${CFLAGS}" @echo "CFLAGS = ${CFLAGS}"
@echo "LDFLAGS = ${LDFLAGS}" @echo "LDFLAGS = ${LDFLAGS}"
@echo "CC = ${CC}" @echo "CC = ${CC}"
@ -31,7 +32,7 @@ clean:
dist: clean dist: clean
@echo creating dist tarball @echo creating dist tarball
@mkdir -p st-${VERSION} @mkdir -p st-${VERSION}
@cp -R LICENSE Makefile README config.mk st.h ${SRC} st-${VERSION} @cp -R LICENSE Makefile README config.mk config.h st.info ${SRC} st-${VERSION}
@tar -cf st-${VERSION}.tar st-${VERSION} @tar -cf st-${VERSION}.tar st-${VERSION}
@gzip st-${VERSION}.tar @gzip st-${VERSION}.tar
@rm -rf st-${VERSION} @rm -rf st-${VERSION}
@ -41,7 +42,7 @@ install: all
@mkdir -p ${DESTDIR}${PREFIX}/bin @mkdir -p ${DESTDIR}${PREFIX}/bin
@cp -f st ${DESTDIR}${PREFIX}/bin @cp -f st ${DESTDIR}${PREFIX}/bin
@chmod 755 ${DESTDIR}${PREFIX}/bin/st @chmod 755 ${DESTDIR}${PREFIX}/bin/st
@tic st.info @tic -s st.info
uninstall: uninstall:
@echo removing executable file from ${DESTDIR}${PREFIX}/bin @echo removing executable file from ${DESTDIR}${PREFIX}/bin

View File

@ -12,16 +12,17 @@ X11LIB = /usr/X11R6/lib
# includes and libs # includes and libs
INCS = -I. -I/usr/include -I${X11INC} INCS = -I. -I/usr/include -I${X11INC}
LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lutil
# uncomment your system #
#SYSTEM = -DLINUX
#SYSTEM = -DOPENBSD
#SYSTEM = -DFREEBSD
# flags # flags
CPPFLAGS = -DVERSION=\"${VERSION}\" CPPFLAGS = -DVERSION=\"${VERSION}\" ${SYSTEM}
CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
LDFLAGS = -s ${LIBS} LDFLAGS = -s ${LIBS}
# Solaris
#CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\"
#LDFLAGS = ${LIBS}
# compiler and linker # compiler and linker
CC = cc CC = cc

25
st.c
View File

@ -20,6 +20,14 @@
#include <X11/keysym.h> #include <X11/keysym.h>
#include <X11/Xutil.h> #include <X11/Xutil.h>
#if defined(LINUX)
#include <pty.h>
#elif defined(OPENBSD)
#include <util.h>
#elif defined(FREEBSD)
#include <libutil.h>
#endif
/* Arbitrary sizes */ /* Arbitrary sizes */
#define ESC_TITLE_SIZ 256 #define ESC_TITLE_SIZ 256
#define ESC_BUF_SIZ 256 #define ESC_BUF_SIZ 256
@ -242,19 +250,12 @@ sigchld(int a) {
void void
ttynew(void) { ttynew(void) {
int m, s; int m, s;
char *pts;
if((m = posix_openpt(O_RDWR | O_NOCTTY)) < 0) /* seems to work fine on linux, openbsd and freebsd */
die("openpt failed: %s\n", SERRNO); struct winsize w = {term.row, term.col, 0, 0};
if(grantpt(m) < 0) if(openpty(&m, &s, NULL, NULL, &w) < 0)
die("grantpt failed: %s\n", SERRNO); die("openpty failed: %s\n", SERRNO);
if(unlockpt(m) < 0)
die("unlockpt failed: %s\n", SERRNO);
if(!(pts = ptsname(m)))
die("ptsname failed: %s\n", SERRNO);
if((s = open(pts, O_RDWR | O_NOCTTY)) < 0)
die("Couldn't open slave: %s\n", SERRNO);
fcntl(s, F_SETFL, O_NDELAY);
switch(pid = fork()) { switch(pid = fork()) {
case -1: case -1:
die("fork failed\n"); die("fork failed\n");