musl libc build, rather than glibc
We've had reports of a couple of issues building against musl libc.
Issues reported:
- build procedures utilize cat for Guidebook-creation, and cat
is deprecated in distros that use musl libc.
- some of the CRASHREPORT code is using library functions that
are not available in the musl libc environment. The reported
functions were backtrace() and backtrace_symbols(), which use
header file /usr/include/execinfo.h.
So we'll try to accommodate this. Since we don't have a means of
autodetecting the musl libc situation during the build (as of yet), the
builder will have to specify 'make musl=1' on the make command line.
Specifying 'musl=1' on the make command line will:
1. ensure that NOCRASHREPORT gets defined in the C preprocessor.
2. set COLCMD to be '../util/stripbs' instead of 'col -bx'.
Closes #1393
This commit is contained in:
@@ -11,6 +11,8 @@ NHSROOT=..
|
|||||||
|
|
||||||
MAKEDEFS = ../util/makedefs
|
MAKEDEFS = ../util/makedefs
|
||||||
|
|
||||||
|
#STRIPBS ?= ../util/stripbs
|
||||||
|
|
||||||
# Which version do we want to build? (XXX These are not used anywhere.)
|
# Which version do we want to build? (XXX These are not used anywhere.)
|
||||||
GUIDEBOOK = Guidebook # regular ASCII file
|
GUIDEBOOK = Guidebook # regular ASCII file
|
||||||
#GUIDEBOOK = Guidebook.ps # PostScript file
|
#GUIDEBOOK = Guidebook.ps # PostScript file
|
||||||
@@ -21,8 +23,9 @@ GUIDEBOOK = Guidebook # regular ASCII file
|
|||||||
# recognize the option. Sigh.
|
# recognize the option. Sigh.
|
||||||
#
|
#
|
||||||
# col is unnecessary, but harmless, with groff. See grotty(1).
|
# col is unnecessary, but harmless, with groff. See grotty(1).
|
||||||
COLCMD = col -bx
|
COLCMD ?= col -bx
|
||||||
#COLCMD = col -b
|
#COLCMD ?= col -b
|
||||||
|
#COLCMD ?= $(STRIPBS)
|
||||||
|
|
||||||
# The command to use to generate a PostScript file
|
# The command to use to generate a PostScript file
|
||||||
# PSCMD = ditroff | psdit
|
# PSCMD = ditroff | psdit
|
||||||
@@ -59,8 +62,8 @@ ONEPAGE_PREFORMAT = cat Gbk-1pg-pfx.mn $(GUIDEBOOK_MN) Gbk-1pg-sfx.mn \
|
|||||||
| $(NHGREP) | tbl tmac.n -
|
| $(NHGREP) | tbl tmac.n -
|
||||||
|
|
||||||
# the basic guidebook
|
# the basic guidebook
|
||||||
Guidebook : $(GUIDEBOOK_MN) tmac.n tmac.nh $(NEEDMAKEDEFS)
|
Guidebook : $(GUIDEBOOK_MN) tmac.n tmac.nh $(NEEDMAKEDEFS) $(STRIPBS)
|
||||||
$(GUIDECMD) > Guidebook
|
-$(GUIDECMD) > Guidebook
|
||||||
|
|
||||||
# Fancier output for those with ditroff, psdit and a PostScript printer.
|
# Fancier output for those with ditroff, psdit and a PostScript printer.
|
||||||
# Could be converted to Guidebook.pdf if tool(s) for that are available.
|
# Could be converted to Guidebook.pdf if tool(s) for that are available.
|
||||||
@@ -80,7 +83,10 @@ Guidebook.dvi : $(GUIDEBOOK_TEX)
|
|||||||
# (note: 'make makedefs', not 'make $(MAKEDEFS)')
|
# (note: 'make makedefs', not 'make $(MAKEDEFS)')
|
||||||
$(MAKEDEFS) : ../util/makedefs.c ../include/config.h ../src/mdlib.c \
|
$(MAKEDEFS) : ../util/makedefs.c ../include/config.h ../src/mdlib.c \
|
||||||
../util/mdgrep.h
|
../util/mdgrep.h
|
||||||
( cd ../util ; make makedefs )
|
( cd .. ; make makedefs )
|
||||||
|
|
||||||
|
../util/stripbx: ../util/stripbs.c
|
||||||
|
( cd .. ; $(MAKE) stripbs )
|
||||||
|
|
||||||
GAME = nethack
|
GAME = nethack
|
||||||
MANDIR ?= /usr/man/man6
|
MANDIR ?= /usr/man/man6
|
||||||
|
|||||||
@@ -416,6 +416,12 @@ fetch-docs:
|
|||||||
shift; \
|
shift; \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
makedefs:
|
||||||
|
( cd util ; $(MAKE) makedefs )
|
||||||
|
|
||||||
|
stripbs:
|
||||||
|
( cd util ; $(MAKE) stripbs )
|
||||||
|
|
||||||
# 'make update' can be used to install a revised version after making
|
# 'make update' can be used to install a revised version after making
|
||||||
# customizations or such. Unlike 'make install', it doesn't delete everything
|
# customizations or such. Unlike 'make install', it doesn't delete everything
|
||||||
# from the target directory to have a clean start.
|
# from the target directory to have a clean start.
|
||||||
|
|||||||
@@ -293,6 +293,11 @@ dlb: $(DLBOBJS) $(HACKLIB)
|
|||||||
dlb_main.o: dlb_main.c $(CONFIG_H) ../include/dlb.h
|
dlb_main.o: dlb_main.c $(CONFIG_H) ../include/dlb.h
|
||||||
$(CC) $(CFLAGS) $(CSTD) -c dlb_main.c -o $@
|
$(CC) $(CFLAGS) $(CSTD) -c dlb_main.c -o $@
|
||||||
|
|
||||||
|
stripbs: stripbs.o
|
||||||
|
$(CC) $(LFLAGS) -o stripbs stripbs.o
|
||||||
|
|
||||||
|
stripbs.o: stripbs.c
|
||||||
|
$(CC) $(CFLAGS) -c stripbs.c
|
||||||
|
|
||||||
# dependencies for tile utilities
|
# dependencies for tile utilities
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -194,6 +194,20 @@ CPLUSPLUS_NEEDED = 1
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq "$(musl)" "1"
|
||||||
|
MUSL=1
|
||||||
|
endif
|
||||||
|
ifeq "$(MUSL)" "1"
|
||||||
|
ifneq "$(NOCRASHREPORT)" "1"
|
||||||
|
NOCRASHREPORT=1
|
||||||
|
endif
|
||||||
|
WINCFLAGS += -DMUSL_LIBC
|
||||||
|
# use this instead of col -bx
|
||||||
|
COLCMD = ../util/stripbs
|
||||||
|
else
|
||||||
|
WINCFLAGS += -DGNU_LIBC
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq "$(NOCRASHREPORT)" "1"
|
ifeq "$(NOCRASHREPORT)" "1"
|
||||||
WINCFLAGS += -DNOCRASHREPORT
|
WINCFLAGS += -DNOCRASHREPORT
|
||||||
endif
|
endif
|
||||||
|
|||||||
1
util/.gitignore
vendored
1
util/.gitignore
vendored
@@ -11,6 +11,7 @@ lev_comp
|
|||||||
dlb
|
dlb
|
||||||
dlb_main
|
dlb_main
|
||||||
recover
|
recover
|
||||||
|
stripbs
|
||||||
tilemap
|
tilemap
|
||||||
tileedit
|
tileedit
|
||||||
tile2x11
|
tile2x11
|
||||||
|
|||||||
42
util/stripbs.c
Normal file
42
util/stripbs.c
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
/* NetHack 3.7 stripbs.c */
|
||||||
|
/* Copyright (c) Michael Allison, 2025. */
|
||||||
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* a simple filter to strip character-backspace-character
|
||||||
|
* from stdin and write the results to stdout.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int stop = 0, trouble = 0;
|
||||||
|
char buf[2];
|
||||||
|
char *cp = &buf[0], *prev = &buf[1];
|
||||||
|
|
||||||
|
*prev = 0;
|
||||||
|
while (!stop) {
|
||||||
|
if ((fread(buf, 1, 1, stdin)) > 0) {
|
||||||
|
if (*cp == 8) {
|
||||||
|
*prev = 0;
|
||||||
|
} else {
|
||||||
|
if (*prev)
|
||||||
|
fputc(*prev, stdout);
|
||||||
|
*prev = *cp;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (errno != EOF)
|
||||||
|
trouble = 1;
|
||||||
|
if (*prev)
|
||||||
|
fputc(*prev, stdout);
|
||||||
|
stop = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fflush(stdout);
|
||||||
|
fclose(stdout);
|
||||||
|
return trouble ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user