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:
nhmall
2025-03-10 17:14:24 -04:00
parent 719166f9ec
commit bddca2ded5
6 changed files with 79 additions and 5 deletions

View File

@@ -11,6 +11,8 @@ NHSROOT=..
MAKEDEFS = ../util/makedefs
#STRIPBS ?= ../util/stripbs
# Which version do we want to build? (XXX These are not used anywhere.)
GUIDEBOOK = Guidebook # regular ASCII file
#GUIDEBOOK = Guidebook.ps # PostScript file
@@ -21,8 +23,9 @@ GUIDEBOOK = Guidebook # regular ASCII file
# recognize the option. Sigh.
#
# col is unnecessary, but harmless, with groff. See grotty(1).
COLCMD = col -bx
#COLCMD = col -b
COLCMD ?= col -bx
#COLCMD ?= col -b
#COLCMD ?= $(STRIPBS)
# The command to use to generate a PostScript file
# PSCMD = ditroff | psdit
@@ -59,8 +62,8 @@ ONEPAGE_PREFORMAT = cat Gbk-1pg-pfx.mn $(GUIDEBOOK_MN) Gbk-1pg-sfx.mn \
| $(NHGREP) | tbl tmac.n -
# the basic guidebook
Guidebook : $(GUIDEBOOK_MN) tmac.n tmac.nh $(NEEDMAKEDEFS)
$(GUIDECMD) > Guidebook
Guidebook : $(GUIDEBOOK_MN) tmac.n tmac.nh $(NEEDMAKEDEFS) $(STRIPBS)
-$(GUIDECMD) > Guidebook
# Fancier output for those with ditroff, psdit and a PostScript printer.
# 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)')
$(MAKEDEFS) : ../util/makedefs.c ../include/config.h ../src/mdlib.c \
../util/mdgrep.h
( cd ../util ; make makedefs )
( cd .. ; make makedefs )
../util/stripbx: ../util/stripbs.c
( cd .. ; $(MAKE) stripbs )
GAME = nethack
MANDIR ?= /usr/man/man6

View File

@@ -416,6 +416,12 @@ fetch-docs:
shift; \
done
makedefs:
( cd util ; $(MAKE) makedefs )
stripbs:
( cd util ; $(MAKE) stripbs )
# 'make update' can be used to install a revised version after making
# customizations or such. Unlike 'make install', it doesn't delete everything
# from the target directory to have a clean start.

View File

@@ -293,6 +293,11 @@ dlb: $(DLBOBJS) $(HACKLIB)
dlb_main.o: dlb_main.c $(CONFIG_H) ../include/dlb.h
$(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
#

View File

@@ -194,6 +194,20 @@ CPLUSPLUS_NEEDED = 1
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"
WINCFLAGS += -DNOCRASHREPORT
endif