windows-tty: We now support changing altkeyhandler in game
windows: Added ntassert() mechanism for Windows based port use
tty: significant optimizations for performance and per field rendering
+unix: Makefile.src and Makefile.utl inadvertently relied on a 'gnu make'
+ extension when using $(VERBOSEMAKE) to reduce build-time feedback;
+ replace with $(QUIETCC) which operates the same but defaults to
+ verbose so doesn't use '$<' for multi-prerequisite targets unless
+ specifically requested; use 'make QUIETCC=1 <target>' to get the
+ 3.6.1 behavior back
General New Features
# NetHack Makefile.
-# NetHack 3.6 Makefile.src $NHDT-Date: 1524689449 2018/04/25 20:50:49 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.54 $
+# NetHack 3.6 Makefile.src $NHDT-Date: 1526687360 2018/05/18 23:49:20 $ $NHDT-Branch: NetHack-3.6.2 $:$NHDT-Revision: 1.55 $
# Copyright (c) 2018 by Pasi Kallinen
# NetHack may be freely redistributed. See license for details.
# will proceed without it
GITINFO=1
-#VERBOSEMAKE = 1
+# if you change this to 1, feedback while building will omit -Dthis -Wthat
+# -Isomewhere so that each file being compiled is listed on one short line;
+# it requires support for '$<' in rules with more than one prerequisite
+# (rather than just in suffix default rule), such as is implemented by
+# gnu make and others which have picked up its extensions;
+# allowed values are 0, 1, and empty (which behaves like 0)
+QUIETCC=0
# ----------------------------------------
#
# {unixconf.h, pcconf.h, tosconf.h}, and possibly system.h
# Verbosity definitions, begin
-# Set VERBOSEMAKE=1 to output more stuff.
+# Set QUIETCC=1 above to output less feedback while building.
# CC and CXX obey verbosity, LD and LINK don't.
# AT is @ when not verbose, empty otherwise
ACTUAL_CC := $(CC)
ACTUAL_LD := $(LD)
ACTUAL_LINK := $(LINK)
-CC_V0 = @echo "[CC] $<"; $(ACTUAL_CC)
+CC_V0 = $(ACTUAL_CC)
CC_V = $(CC_V0)
-CC_V1 = $(ACTUAL_CC)
-CC = $(CC_V$(VERBOSEMAKE))
+CC_V1 = @echo "[CC] $<"; $(ACTUAL_CC)
+CC = $(CC_V$(QUIETCC))
-CXX_V0 = @echo "[CXX] $<"; $(ACTUAL_CXX)
+CXX_V0 = $(ACTUAL_CXX)
CXX_V = $(CXX_V0)
-CXX_V1 = $(ACTUAL_CXX)
-CXX = $(CXX_V$(VERBOSEMAKE))
+CXX_V1 = @echo "[CXX] $<"; $(ACTUAL_CXX)
+CXX = $(CXX_V$(QUIETCC))
+# LD and LINK might be based on invoking CC and may not be able to substitute
+# for QUIETCC, so feedback from them is handled differently (via $AT)
LD = $(ACTUAL_LD)
LINK = $(ACTUAL_LINK)
-AT_V0 := @
+AT_V0 :=
AT_V := $(AT_V0)
-AT_V1 :=
-AT = $(AT_V$(VERBOSEMAKE))
+AT_V1 := @
+AT = $(AT_V$(QUIETCC))
# Verbosity, end
MAKEDEFS = ../util/makedefs
# Makefile for NetHack's utility programs.
-# NetHack 3.6 Makefile.utl $NHDT-Date: 1524689449 2018/04/25 20:50:49 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.35 $
+# NetHack 3.6 Makefile.utl $NHDT-Date: 1526687364 2018/05/18 23:49:24 $ $NHDT-Branch: NetHack-3.6.2 $:$NHDT-Revision: 1.36 $
# Copyright (c) 2018 by Robert Patrick Rankin
# NetHack may be freely redistributed. See license for details.
# LEXYYC = lexyy.c
+# if you change this to 1, feedback while building will omit -Dthis -Wthat
+# -Isomewhere so that each file being compiled is listed on one short line;
+# it requires support for '$<' in rules with more than one prerequisite
+# (rather than just in suffix default rule), such as is implemented by
+# gnu make and others which have picked up its extensions;
+# allowed values are 0, 1, and empty (which behaves like 0)
+QUIETCC=0
+
+# TODO? the link/load commands below are handled differently from the ones
+# in Makefile.src; these use '$(CC) $(LFLAGS)' and ought to be changed to use
+# $(LD) or $(LINK) as appropriate [quiet mode echoes a misleading $< value]
# ----------------------------------------
#
# Nothing below this line should have to be changed.
# Verbosity definitions, begin
+# Set QUIETCC=1 above to output less feedback while building.
+# CC and CXX obey verbosity, LD and LINK don't.
+# AT is @ when not verbose, empty otherwise
ACTUAL_CC := $(CC)
ACTUAL_CXX := $(CXX)
ACTUAL_LD := $(LD)
ACTUAL_LINK := $(LINK)
-CC_V0 = @echo "[CC] $<"; $(ACTUAL_CC)
+CC_V0 = $(ACTUAL_CC)
CC_V = $(CC_V0)
-CC_V1 = $(ACTUAL_CC)
-CC = $(CC_V$(VERBOSEMAKE))
+CC_V1 = @echo "[CC] $<"; $(ACTUAL_CC)
+CC = $(CC_V$(QUIETCC))
-CXX_V0 = @echo "[CXX] $<"; $(ACTUAL_CXX)
+CXX_V0 = $(ACTUAL_CXX)
CXX_V = $(CXX_V0)
-CXX_V1 = $(ACTUAL_CXX)
-CXX = $(CXX_V$(VERBOSEMAKE))
+CXX_V1 = @echo "[CXX] $<"; $(ACTUAL_CXX)
+CXX = $(CXX_V$(QUIETCC))
+# LD and LINK might be based on invoking CC and may not be able to substitute
+# for QUIETCC, so feedback from them is handled differently (via $AT)
LD = $(ACTUAL_LD)
LINK = $(ACTUAL_LINK)
-AT_V0 := @
+AT_V0 :=
AT_V := $(AT_V0)
-AT_V1 :=
-AT = V$(AT_$(VERBOSEMAKE))
+AT_V1 := @
+AT = $(AT_V$(QUIETCC))
# Verbosity, end
# timestamps for primary header files, matching src/Makefile
--- /dev/null
+diff --git a/sys/unix/unixmain.c b/sys/unix/unixmain.c
+index c1069144..1d51de1b 100644
+--- a/sys/unix/unixmain.c
++++ b/sys/unix/unixmain.c
+@@ -44,6 +44,39 @@ static void NDECL(wd_message);
+ static boolean wiz_error_flag = FALSE;
+ static struct passwd *NDECL(get_unix_pw);
+
++#if defined(__APPLE__) /* a much more convoluted version of this
++ * code used to be inline within main() */
++static void FDECL(osx_finder, (const char *));
++
++/* special hack to change working directory to a resource fork when running
++ from 'Finder' on MacOSX (recognized via "/" as current dir) --sam */
++static void
++osx_finder(arg0)
++const char *arg0;
++{
++ /* #define MAC_PATH_VALUE ".app/Contents/MacOS/" */
++ char mac_cwd[1024], *mac_path, *p;
++
++ /*
++ * If current working directory is "/", switch to same directory
++ * as nethack. [This overrides !CHDIR config.]
++ */
++ getcwd(mac_cwd, 1024);
++ if (*arg0 == '/' && !strcmp(mac_cwd, "/")) {
++ /* copy executable path/name into modifiable buffer
++ [we know there's a path since the value starts with '/'] */
++ mac_path = dupstr(arg0);
++ /* strip off the name portion, leaving path */
++ p = rindex(mac_path, '/');
++ *(p + 1) = '\0';
++ /* change working directory */
++ chdir(mac_path);
++ /* done */
++ free((genericptr_t) mac_path);
++ }
++}
++#endif /* __APPLE__ */
++
+ int
+ main(argc, argv)
+ int argc;
+@@ -57,37 +90,8 @@ char *argv[];
+ boolean resuming = FALSE; /* assume new game */
+
+ sys_early_init();
+-
+ #if defined(__APPLE__)
+- {
+-/* special hack to change working directory to a resource fork when
+- running from finder --sam */
+-#define MAC_PATH_VALUE ".app/Contents/MacOS/"
+- char mac_cwd[1024], *mac_exe = argv[0], *mac_tmp;
+- int arg0_len = strlen(mac_exe), mac_tmp_len, mac_lhs_len = 0;
+- getcwd(mac_cwd, 1024);
+- if (mac_exe[0] == '/' && !strcmp(mac_cwd, "/")) {
+- if ((mac_exe = strrchr(mac_exe, '/')))
+- mac_exe++;
+- else
+- mac_exe = argv[0];
+- mac_tmp_len = (strlen(mac_exe) * 2) + strlen(MAC_PATH_VALUE);
+- if (mac_tmp_len <= arg0_len) {
+- mac_tmp = malloc(mac_tmp_len + 1);
+- sprintf(mac_tmp, "%s%s%s", mac_exe, MAC_PATH_VALUE, mac_exe);
+- if (!strcmp(argv[0] + (arg0_len - mac_tmp_len), mac_tmp)) {
+- mac_lhs_len =
+- (arg0_len - mac_tmp_len) + strlen(mac_exe) + 5;
+- if (mac_lhs_len > mac_tmp_len - 1)
+- mac_tmp = realloc(mac_tmp, mac_lhs_len);
+- strncpy(mac_tmp, argv[0], mac_lhs_len);
+- mac_tmp[mac_lhs_len] = '\0';
+- chdir(mac_tmp);
+- }
+- free(mac_tmp);
+- }
+- }
+- }
++ osx_finder(argv[0]);
+ #endif
+
+ hname = argv[0];