python_LIBS := -lpython2.3
python_CPPFLAGS := -I/usr/include/python2.3
sdl_CPPFLAGS := $(shell sdl-config --cflags)
sdl_LIBS := $(shell sdl-config --libs)
fft_CPPFLAGS = -Wall -ansi -O2
fft_LIBS = -lSDL_image -lSDL_ttf -lSDL_mixer -lSDL_gfx -lphysfs

DEBUG=1
ifeq ($(DEBUG),1)
	fft_CPPFLAGS += -g
endif

LD=$(CXX)

C_SRCS = $(wildcard src/*.c)
C_OBJS = $(patsubst %.c,%.o,$(C_SRCS))
CXX_SRCS = $(wildcard src/*.cpp)
CXX_OBJS = $(patsubst %.cpp,%.o,$(CXX_SRCS))

ifneq ($(findstring -framework Cocoa,$(strip $(sdl_LIBS))),)
	COCOA_OBJS = $(patsubst %.m,%.o,$(wildcard *.m))
endif

OBJS = $(C_OBJS) $(CXX_OBJS) $(COCOA_OBJS)


%.o: %.c
	$(CC) -c $(sdl_CPPFLAGS) $(python_CPPFLAGS) $(fft_CPPFLAGS) $(CPPFLAGS) $(CFLAGS) $< -o $@
	
%.o: %.cpp
	$(CXX) -c $(sdl_CPPFLAGS) $(python_CPPFLAGS) $(fft_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $< -o $@

%.o: %.m
	$(CC) -c $(sdl_CPPFLAGS) $(python_CPPFLAGS) $(filter-out -ansi,$(fft_CPPFLAGS)) \
		-I/System/Library/Frameworks/Cocoa/Headers $< -o $@
	
fft: $(OBJS)
	$(LD) $(sdl_LIBS) $(python_LIBS) $(fft_LIBS) $(LDFLAGS) $^ -o $@

new: clean fft


FRAMEWORK_DIR = $(HOME)/Library/Frameworks
LIB_DIR = /sw/lib

EMBED_FRAMEWORKS = SDL SDL_ttf SDL_image SDL_gfx SDL_mixer
EMBEDDED_FRAMEWORKS = $(patsubst %,FFT.app/Contents/Frameworks/%.framework,\
	$(EMBED_FRAMEWORKS))
OTHER_FRAMEWORKS = Cocoa IOKit
FRAMEWORK_FLAGS = -FFFT.app/Contents/Frameworks $(patsubst %,-framework %,\
	$(EMBED_FRAMEWORKS) $(OTHER_FRAMEWORKS))

EMBED_LIBS = readline ncurses
EMBEDDED_LIBS = $(patsubst %,FFT.app/Contents/Resources/lib%.dylib,\
	$(EMBED_LIBS))
LIB_FLAGS = -LFFT.app/Contents/Resources $(patsubst %,-l%,\
	$(EMBED_LIBS))

OSX_SIG = FFtr
OSX_NAME = Final Frontier Trader
OSX_ID = net.sourceforge.fftrader
VERS = 0.70

SDLMain.o: src/osx/SDLMain.m
	$(CC) -c -Iosx $(sdl_CPPFLAGS) $(filter-out -ansi,$(fft_CPPFLAGS)) \
		$(CFLAGS) $< -o $@

$(EMBEDDED_FRAMEWORKS):
	@[ -e $(FRAMEWORK_DIR)/$(@F) ] || echo "Missing framework $(FRAMEWORK_DIR)/$(@F)"
	/bin/cp -R $(FRAMEWORK_DIR)/$(@F) $@

$(EMBEDDED_LIBS):
	@[ -e $(LIB_DIR)/$(@F) ] || echo "Missing lib $(LIB_DIR)/$(@F)"
	/bin/cp $(LIB_DIR)/$(@F) $@
	chmod u+w $@
	install_name_tool -id \@executable_path/../Resources/$(@F) $@
	otool -L $@ | perl -ne \
		'if(m,$(LIB_DIR)/(([^.]+)\S+),){system("install_name_tool -change $(LIBDIR)/$$1 \@executable_path/../Resources/$$2.dylib $@")}'
	
FFT.app: src/osx/Info.plist src/osx/FFT.icns
	mkdir -p FFT.app/Contents/Resources FFT.app/Contents/Frameworks
	echo -n "APPL$(OSX_SIG)" > FFT.app/Contents/PkgInfo
	sed -e 's,APPNAME,$(OSX_NAME),g' -e 's,APPVERS,$(VERS),g' \
		-e 's,APPID,$(OSX_ID),g' -e 's,APPSIG,$(OSX_SIG),g' \
		src/osx/Info.plist > FFT.app/Contents/Info.plist
	cp src/osx/FFT.icns "FFT.app/Contents/Resources/$(OSX_NAME).icns"

FFT.app/Contents/MacOS:
	mkdir -p FFT.app/Contents/MacOS
	$(LD)  $(LDFLAGS) $(FRAMEWORK_FLAGS) $(LIB_FLAGS) SDLMain.o $(OBJS) \
		-o "FFT.app/Contents/MacOS/$(OSX_NAME)"	

osx: $(OBJS) FFT.app $(EMBEDDED_FRAMEWORKS) $(EMBEDDED_LIBS) \
		SDLMain.o FFT.app/Contents/MacOS
	rm -rf "$(OSX_NAME)"
	mkdir "$(OSX_NAME)"
	cp -R FFT.app "$(OSX_NAME)/$(OSX_NAME).app"
	cp -R fpk fonts scenario "$(OSX_NAME)"

.PHONY: fft clean new osx

clean:
	rm -rf fft $(OBJS) SDLMain.o FFT.app "$(OSX_NAME)"
