diff --git a/Makefile.grf.in b/Makefile.grf.in --- a/Makefile.grf.in +++ b/Makefile.grf.in @@ -75,10 +75,10 @@ endif $(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $< >$@ # Compile extra grf -$(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(OBJS_DIR)/sprites +$(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(OBJS_DIR)/sprites $(GRF_DIR)/assemble_nfo.awk $(E) '$(STAGE) Assembling openttd.nfo' $(Q)-cp $(PNG_FILES) $(OBJS_DIR)/sprites 2> /dev/null - $(Q) $(CC_BUILD) -nostdinc -I$(GRF_DIR) -C -E - < "$(GRF_DIR)/openttd.nfo" | sed -e '/^#/d' -e '/^$$/d' > $(OBJS_DIR)/sprites/openttd.nfo + $(Q) awk -f $(GRF_DIR)/assemble_nfo.awk $(GRF_DIR)/openttd.nfo > $(OBJS_DIR)/sprites/openttd.nfo $(Q) $(NFORENUM) -s $(OBJS_DIR)/sprites/openttd.nfo $(E) '$(STAGE) Compiling openttd.grf' $(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/openttd.grf diff --git a/media/extra_grf/assemble_nfo.awk b/media/extra_grf/assemble_nfo.awk new file mode 100644 --- /dev/null +++ b/media/extra_grf/assemble_nfo.awk @@ -0,0 +1,32 @@ +# $Id$ + +# This file is part of OpenTTD. +# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. +# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + +BEGIN { + # Very basic variant function; barely any error checking. + # Just use the first argument as the file to start from when assembling everything + path = ARGV[1]; + gsub("[^/\\\\]*$", "", path); + assemble(ARGV[1]); +} + +# Recursive function for assembling by means of resolving the #includes. +function assemble(filename) { + while ((getline < filename) > 0) { + if (NF == 2 && $1 == "#include" ) { + # Remove the quotes. + gsub("[\"'<>]", "", $2); + assemble(path $2); + } else { + print $0; + } + } + + if (close(filename) < 0) { + print "Could not open " filename > "/dev/stderr"; + exit -1; + } +}