From 613d32171b0646f69ed9dc60344518f7a6e9de14 Mon Sep 17 00:00:00 2001 From: Colin Ward Date: Sun, 31 Oct 2021 17:00:42 +0100 Subject: [PATCH] Use GNU sed for generating ndk13 headers The BSD version of sed that is included with macOS crashes when it encounters the (c) symbol in NDK includes, and has some other compatibility issues, so use GNU sed on macos instead. --- Makefile | 20 +++++++++++++------- README.md | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index dddd950..b33d423 100644 --- a/Makefile +++ b/Makefile @@ -23,6 +23,12 @@ __DOWNLOADDIR := $(shell mkdir -p $(DOWNLOAD)) GCC_VERSION ?= $(shell cat 2>/dev/null $(PROJECTS)/gcc/gcc/BASE-VER) +ifeq ($(UNAME_S), Darwin) + SED := gsed +else + SED := sed +endif + BINUTILS_BRANCH := amiga GCC_BRANCH := gcc-6-branch NEWLIB_BRANCH := amiga @@ -112,7 +118,7 @@ ifeq ($(verbose),) L1 = ; ($(FLOCK) 200; echo -e \\033[33m$$__p...\\033[0m >>.state; echo -ne \\033[33m$$__p...\\033[0m ) 200>.lock; mkdir -p log; __l="log/$$__p.log" ; ( L2 = )$(TEEEE) "$$__l"; __r=$$?; ($(FLOCK) 200; if (( $$__r > 0 )); then \ echo -e \\n\\033[K\\033[31m$$__p...failed\\033[0m; \ - sed -n '1,/\*\*\*/p' "$$__l" | tail -n 100; \ + $(SED) -n '1,/\*\*\*/p' "$$__l" | tail -n 100; \ echo -e \\033[31m$$__p...failed\\033[0m; \ echo -e use \\033[1mless \"$$__l\"\\033[0m to view the full log and search for \*\*\*; \ else echo -e \\n\\033[K\\033[32m$$__p...done\\033[0m; fi \ @@ -641,7 +647,7 @@ $(BUILD)/vbcc_target_m68k-amigaos/_done: $(BUILD)/vbcc_target_m68k-amigaos.info @mkdir -p $(PREFIX)/m68k-amigaos/vbcc/lib $(L0)"copying vbcc headers"$(L1) rsync $(BUILD)/vbcc_target_m68k-amigaos/targets/m68k-amigaos/lib/* $(PREFIX)/m68k-amigaos/vbcc/lib $(L2) @echo "done" >$@ - $(L0)"creating vbcc config"$(L1) sed -e "s|PREFIX|$(PREFIX)|g" patches/vc.config >$(BUILD)/vasm/vc.config ;\ + $(L0)"creating vbcc config"$(L1) $(SED) -e "s|PREFIX|$(PREFIX)|g" patches/vc.config >$(BUILD)/vasm/vc.config ;\ install $(BUILD)/vasm/vc.config $(PREFIX)/bin/ $(L2) @@ -680,7 +686,7 @@ $(BUILD)/ndk-include_ndk0: $(PROJECTS)/$(NDK_FOLDER_NAME).info $(NDK_INCLUDE) $( @rsync -a $(PROJECTS)/$(NDK_FOLDER_NAME_H)/* $(PREFIX)/m68k-amigaos/ndk-include --exclude proto --exclude inline $(L0)"STDARGing ndk"$(L1) for i in $$(find $(PREFIX)/m68k-amigaos/ndk-include/clib/*protos.h -type f); do \ echo $$i; \ - LC_CTYPE=C sed -i.bak -E 's/([a-zA-Z0-9 _]*)([[:blank:]]+|\*)([a-zA-Z0-9_]+)\(/\1\2 __stdargs \3(/g' $$i; \ + LC_CTYPE=C $(SED) -i.bak -E 's/([a-zA-Z0-9 _]*)([[:blank:]]+|\*)([a-zA-Z0-9_]+)\(/\1\2 __stdargs \3(/g' $$i; \ rm $$i.bak; done $(L2) @rsync -a $(PROJECTS)/$(NDK_FOLDER_NAME_I)/* $(PREFIX)/m68k-amigaos/ndk-include @mkdir -p $(PREFIX)/m68k-amigaos/ndk/lib/fd @@ -752,15 +758,15 @@ $(BUILD)/ndk-include_ndk13: $(BUILD)/ndk-include_ndk $(BUILD)/fd2sfd/_done $(BUI $(L0)"extract ndk13"$(L1) while read p; do p=$$(echo $$p|tr -d '\n'); \ mkdir -p $(PREFIX)/m68k-amigaos/ndk13-include/$$(dirname $$p); \ if grep V36 $(PREFIX)/m68k-amigaos/ndk-include/$$p; then \ - LC_CTYPE=C sed -n -e '/#ifndef[[:space:]]*CLIB/,/V36/p' $(PREFIX)/m68k-amigaos/ndk-include/$$p | sed -e 's/__stdargs//g' >$(PREFIX)/m68k-amigaos/ndk13-include/$$p; \ + LC_CTYPE=C $(SED) -n -e '/#ifndef[[:space:]]*CLIB/,/V36/p' $(PREFIX)/m68k-amigaos/ndk-include/$$p | $(SED) -e 's/__stdargs//g' >$(PREFIX)/m68k-amigaos/ndk13-include/$$p; \ echo -e "#ifdef __cplusplus\n}\n#endif /* __cplusplus */\n#endif" >>$(PREFIX)/m68k-amigaos/ndk13-include/$$p; \ - else LC_CTYPE=C sed $(PREFIX)/m68k-amigaos/ndk-include/$$p -e 's/__stdargs//g' >$(PREFIX)/m68k-amigaos/ndk13-include/$$p; fi \ + else LC_CTYPE=C $(SED) $(PREFIX)/m68k-amigaos/ndk-include/$$p -e 's/__stdargs//g' >$(PREFIX)/m68k-amigaos/ndk13-include/$$p; fi \ done < patches/ndk13/chfiles $(L2) @while read p; do p=$$(echo $$p|tr -d '\n'); mkdir -p $(PREFIX)/m68k-amigaos/ndk13-include/$$(dirname $$p); echo "" >$(PREFIX)/m68k-amigaos/ndk13-include/$$p; done < patches/ndk13/ehfiles @echo '#undef EXECNAME' > $(PREFIX)/m68k-amigaos/ndk13-include/exec/execname.h @echo '#define EXECNAME "exec.library"' >> $(PREFIX)/m68k-amigaos/ndk13-include/exec/execname.h @mkdir -p $(PREFIX)/m68k-amigaos/ndk/lib/fd13 - @while read p; do p=$$(echo $$p|tr -d '\n'); LC_CTYPE=C sed -n -e '/##base/,/V36/P' $(PREFIX)/m68k-amigaos/ndk/lib/fd/$$p >$(PREFIX)/m68k-amigaos/ndk/lib/fd13/$$p; done < patches/ndk13/fdfiles + @while read p; do p=$$(echo $$p|tr -d '\n'); LC_CTYPE=C $(SED) -n -e '/##base/,/V36/P' $(PREFIX)/m68k-amigaos/ndk/lib/fd/$$p >$(PREFIX)/m68k-amigaos/ndk/lib/fd13/$$p; done < patches/ndk13/fdfiles @mkdir -p $(PREFIX)/m68k-amigaos/ndk/lib/sfd13 @for i in $(PREFIX)/m68k-amigaos/ndk/lib/fd13/*; do fd2sfd $$i $(PREFIX)/m68k-amigaos/ndk13-include/clib/$$(basename $$i _lib.fd)_protos.h > $(PREFIX)/m68k-amigaos/ndk/lib/sfd13/$$(basename $$i .fd).sfd; done $(L0)"macros+protos ndk13"$(L1) for i in $(PREFIX)/m68k-amigaos/ndk/lib/sfd13/*; do \ @@ -769,7 +775,7 @@ $(BUILD)/ndk-include_ndk13: $(BUILD)/ndk-include_ndk $(BUILD)/fd2sfd/_done $(BUI done $(L2) $(L0)"STDARGing ndk13"$(L1) for i in $$(find $(PREFIX)/m68k-amigaos/ndk13-include/clib/*protos.h -type f); do \ echo $$i; \ - LC_CTYPE=C sed -i.bak -E 's/([a-zA-Z0-9 _]*)([[:blank:]]+|\*)([a-zA-Z0-9_]+)\(/\1\2 __stdargs \3(/g' $$i; \ + LC_CTYPE=C $(SED) -i.bak -E 's/([a-zA-Z0-9 _]*)([[:blank:]]+|\*)([a-zA-Z0-9_]+)\(/\1\2 __stdargs \3(/g' $$i; \ rm $$i.bak; done $(L2) @echo "done" >$@ diff --git a/README.md b/README.md index 06b1a16..1094c74 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ If building with a normal user, the `PREFIX` directory must be writable (default ### macOS Install Homebrew (https://brew.sh/) or any other package manager first. The compiler will be installed together with XCode. Once XCode and Homebrew are up install the required packages: -`brew install bash wget make lhasa gmp mpfr libmpc flex gettext texinfo gcc make autoconf` +`brew install bash wget make lhasa gmp mpfr libmpc flex gettext gnu_sed texinfo gcc make autoconf` By default macOS uses an outdated version of bash. Therefore, on macOS host always pass the the SHELL=/usr/local/bin/bash parameter (or any other valid path pointing to bash), e.g.: ```