Files @ r15899:3bbe04d427d2
Branch filter:

Location: cpp/openttd-patchpack/source/Makefile.grf.in

rubidium
(svn r20593) -Fix: (rlongago, r20547): long ago the service interval was int16, after which is got converted to Date except in the order backup. Much later I copied the savegame snippets from a vehicle and applied that on the order backup. Presto, reading/writing 32 bits (of Date) into 16 bits of ancient style service interval. That would then "spoil" the name pointer and that eventually crashes OpenTTD as it's likely to be an invalid pointer.
# $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 <http://www.gnu.org/licenses/>.
#
# Building requires GRFCodec and NFORenum. Older versions of GRFCodec are
#  known to miscompile the graphics.
#
# Recent nightlies (including sources) of both can be found at:
#  http://www.openttd.org/download-grfcodec
#  http://www.openttd.org/download-nforenum
#
# The mercurial repository of both can be found at:
#  http://hg.openttdcoop.org/grfcodec
#  http://hg.openttdcoop.org/nforenum
#


ROOT_DIR = !!ROOT_DIR!!
GRF_DIR  = $(ROOT_DIR)/media/extra_grf
BIN_DIR  = !!BIN_DIR!!/data
OBJS_DIR = !!GRF_OBJS_DIR!!
OS       = !!OS!!
STAGE    = !!STAGE!!

# Check if we want to show what we are doing
ifdef VERBOSE
	Q =
	E = @true
else
	Q = @
	E = @echo
endif

# Some configurational settings for your environment.
# If GRFCodec doesn't know a command, it'll exit with a non-zero exit code.
GRFCODEC := $(shell grfcodec -s -v >/dev/null 2>/dev/null && echo "grfcodec -s" || echo "grfcodec")
# Old NFORenums don't give an error code when a parameter isn't known, so we have to work around that.
NFORENUM := $(shell [ `nforenum -s -v 2>/dev/null | wc -l ` -eq 1 ] && echo "nforenum -s" || echo "nforenum")
MD5SUM   := $(shell [ "$(OS)" = "OSX" ] && echo "md5 -r" || echo "md5sum")

# Some "should not be changed" settings.
NFO_FILES    := $(GRF_DIR)/*.nfo
PCX_FILES    := $(GRF_DIR)/*.pcx

# Build the GRF.
all: $(BIN_DIR)/openttd.grf

# Make sure the sprites directory exists.
$(OBJS_DIR)/sprites:
	$(Q)-mkdir "$@"

# Generic
$(BIN_DIR)/openttd.grf: $(PCX_FILES) $(NFO_FILES) $(OBJS_DIR)/sprites
	@# Only try; if nforenum isn't available, just retouch the file as they likely didn't need it anyway.
	$(Q) ($(NFORENUM) -? > /dev/null 2>&1 && $(MAKE) $(OBJS_DIR)/openttd.grf && cp $(OBJS_DIR)/openttd.grf $(BIN_DIR)/openttd.grf) || ([ -e $(BIN_DIR)/openttd.grf ] && touch $(BIN_DIR)/openttd.grf && echo "no NFORenum and GRFCodec found, skipping rebuild of openttd.grf...") || (echo "no NFORenum and GRFCodec found, but no openttd.grf either. Install NFORenum and GRFCodec." && exit 1)

# Yeah, we'd like to use -i in the sed, but Mac OS X's sed and GNU sed just can't agree on the usage of -i. In any case either one of them fails.
$(OBJS_DIR)/openttd.grf: $(PCX_FILES) $(NFO_FILES) $(OBJS_DIR)/sprites
	$(E) '$(STAGE) Assembling openttd.nfo'
	$(Q)-cp $(PCX_FILES) $(OBJS_DIR)/sprites 2> /dev/null
	$(Q) gcc -I$(GRF_DIR) -C -E - < "$(GRF_DIR)/openttd.nfo" | sed -e '/^#/d' -e '/^$$/d' > $(OBJS_DIR)/sprites/openttd.nfo
	$(Q) $(NFORENUM) $(OBJS_DIR)/sprites/openttd.nfo
	$(E) '$(STAGE) Compiling openttd.grf'
	$(Q) $(GRFCODEC) -e -m1 $(OBJS_DIR)/openttd.grf
	$(Q) cp $(OBJS_DIR)/openttd.grf $(BIN_DIR)/openttd.grf
	$(E) '$(STAGE) Updating base graphics sets'
	$(Q) for grf in $(BIN_DIR)/orig*.obg; do sed 's/^OPENTTD.GRF  = [0-9a-f]*$$/OPENTTD.GRF  = '`$(MD5SUM) $(BIN_DIR)/openttd.grf | sed 's@ .*@@'`'/' $$grf > $$grf.tmp && mv $$grf.tmp $$grf; done

# Clean up temporary files.
clean:
	$(Q)rm -f *.bak *.grf

# Clean up temporary files and result of generation, i.e. the grfs.
mrproper: clean
	$(Q)rm -fr sprites
	$(Q)rm -f $(BIN_DIR)/openttd.grf

.PHONY: all mrproper depend clean