#
# Rules for building the Allegro library with MacOS X. This file is included
# by the primary makefile, and should not be used directly.
#
# The "depend" and "install" targets use sed.
#
# See makefile.all for a list of the available targets.
# -------- define some variables that the primary makefile will use --------
PLATFORM = MacOS X
CC = gcc
OBJ_DIR = obj/macosx/$(VERSION)
EXE =
OBJ = .o
HTML = html
PLATFORM_DIR = obj/macosx
UNIX_TOOLS = 1
RM_OPTS = -f
# -------- local variables --------
FRAMEWORK_DIR = /Library/Frameworks
FRAMEWORK_NAME = Allegro
FRAMEWORK = $(FRAMEWORK_DIR)/$(FRAMEWORK_NAME).framework
HELPBUNDLE:=/Library/Documentation/Help/Allegro.bundle
TEMPLATE_DIR = /Developer/ProjectBuilder\ Extras/Project\ Templates/Application
ifeq ($(wildcard $(TEMPLATE_DIR)),)
TEMPLATE_DIR = /Library/Application\ Support/Apple/Developer\ Tools/Project\ Templates/Application
endif
TEMPLATE_NAME = Allegro\ Application
TEMPLATE = $(TEMPLATE_DIR)/$(TEMPLATE_NAME)
MAN_DIR = /usr/local/man
ifdef STATICLINK
# -------- link as a static library --------
LIB_NAME = lib/macosx/lib$(VERSION)_s.a
else
# -------- link as a shared library --------
LIB_NAME = lib/macosx/lib$(VERSION)-$(shared_version).dylib
LIB_MAIN_NAME = lib/macosx/lib$(VERSION)-main.a
DYLINK_FLAGS = -prebind -seg1addr 0x30000000 -compatibility_version $(compatibility_version) -current_version $(shared_version)
INSTALL_NAME = -install_name lib$(VERSION)-$(shared_major_minor).dylib
INSTALL_NAME_EMBED = -install_name "`echo "@executable_path/../Frameworks/$(FRAMEWORK_NAME).framework/Versions/$(shared_version)/$(FRAMEWORK_NAME)" | sed 's!//*!/!g'`"
ifdef EMBED
FRAMEWORK_DESCRIPTION = "embeddable"
else
FRAMEWORK_DESCRIPTION = "system wide"
endif
endif # STATICLINK
# -------- give a sensible default target for make without any args --------
.PHONY: _default
_default: default
# -------- decide what compiler options to use --------
ifdef WARNMODE
WFLAGS = -Wall -W -Werror -Wno-unused -Wno-long-double
else
WFLAGS = -Wall -Wno-unused -Wno-long-double
endif
ifdef TARGET_ARCH_COMPAT
TARGET_ARCH = $(GCC_MTUNE)=$(TARGET_ARCH_COMPAT)
else
ifdef TARGET_ARCH_EXCL
TARGET_ARCH = -march=$(TARGET_ARCH_EXCL)
endif
endif
ifndef TARGET_OPTS
TARGET_OPTS = -O2 -funroll-loops -ffast-math
endif
OFLAGS = $(TARGET_ARCH) $(TARGET_OPTS)
CFLAGS = -DALLEGRO_LIB_BUILD
ifdef DEBUGMODE
# -------- debugging build --------
CFLAGS += -DDEBUGMODE=$(DEBUGMODE) $(WFLAGS) -g
SFLAGS = -DDEBUGMODE=$(DEBUGMODE) $(WFLAGS)
LFLAGS = -g
else
ifdef PROFILEMODE
# -------- profiling build --------
CFLAGS += $(WFLAGS) $(OFLAGS) -pg
SFLAGS = $(WFLAGS)
LFLAGS = -pg
else
# -------- optimised build --------
CFLAGS += $(WFLAGS) $(OFLAGS) -fomit-frame-pointer
SFLAGS = $(WFLAGS)
ifndef SYMBOLMODE
LFLAGS = -s -prebind
else
LFLAGS = -prebind
endif
endif
endif
CFLAGS += -fno-common -pipe
ifndef STATICLINK
CFLAGS += -dynamic
endif
# -------- list platform specific objects and programs --------
VPATH = src/macosx src/unix src/misc src/c tools/macosx
CFLAGS += -DALLEGRO_USE_C
ifdef STATICLINK
ALLEGRO_SRC_MACOSX_FILES += src/macosx/main.m
endif
OBJECT_LIST = $(COMMON_OBJECTS) $(C_OBJECTS) $(basename $(notdir $(ALLEGRO_SRC_MACOSX_FILES)))
STATIC_LIBRARIES = -framework Cocoa -framework Carbon -framework IOKit -framework System -framework CoreAudio -framework AudioUnit -framework AudioToolbox -framework QuickTime
ifdef STATICLINK
LIBRARIES = $(STATIC_LIBRARIES)
else
LIBRARIES = -framework Cocoa
endif
PROGRAMS = fixbundle
fixbundle: tools/macosx/fixbundle
DISTCLEAN_FILES += tools/macosx/fixbundle
# -------- rules for installing and removing the library files --------
DESTDIR =
INSTALLDIR = $(DESTDIR)/usr/local
BINDIR = bin
LIBDIR = lib
INCDIR = include
ifdef STATICLINK
$(INSTALLDIR)/lib/lib$(VERSION)_s.a: $(LIB_NAME)
install -d $(INSTALLDIR)/lib
install $(LIB_NAME) $(INSTALLDIR)/lib
ranlib $(INSTALLDIR)/lib/lib$(VERSION)_s.a
else
$(INSTALLDIR)/lib/lib$(VERSION)-main.a: $(LIB_MAIN_NAME)
install -d $(INSTALLDIR)/lib
install $(LIB_MAIN_NAME) $(INSTALLDIR)/lib
ranlib $(INSTALLDIR)/lib/lib$(VERSION)-main.a
$(INSTALLDIR)/lib/lib$(VERSION)-$(shared_version).dylib: $(LIB_NAME)
install $(LIB_NAME) $(INSTALLDIR)/lib
(cd $(INSTALLDIR)/lib; ln -s -f lib$(VERSION)-$(shared_version).dylib lib$(VERSION)-$(shared_major_minor).dylib)
(cd $(INSTALLDIR)/lib; ln -s -f lib$(VERSION)-$(shared_version).dylib lib$(VERSION)-4.dylib)
(cd $(INSTALLDIR)/lib; ln -s -f lib$(VERSION)-$(shared_version).dylib lib$(VERSION).dylib)
endif
# XXX: Un-hardcode the @prefix@ substitution.
$(INSTALLDIR)/bin/allegro-config: $(LIB_NAME)
install -d $(INSTALLDIR)/bin
ifdef STATICLINK
@sed -e "s/@LINK_WITH_STATIC_LIBS@/yes/" misc/allegro-config.in >temp
else
@sed -e "s/@LINK_WITH_STATIC_LIBS@/no/" misc/allegro-config.in >temp
endif
@sed -e "s/@prefix@/\/usr\/local/" temp > temp2
@sed -e "s/@LIB_TO_LINK@/$(VERSION)/" temp2 > temp
@sed -e "s/@LDFLAGS@//" temp > temp2
@sed -e "s/@LIBS@/$(STATIC_LIBRARIES)/" temp2 > temp
@sed -e "s/@INCLUDE_PREFIX@/\/usr\/local/" temp >temp2
@sed -e "s/@FRAMEWORKS@/-framework Cocoa -framework $(FRAMEWORK_NAME) -l$(VERSION)-main/" temp2 > temp
@sed -e "s/accepts_frameworks=no/accepts_frameworks=yes/" temp > temp2
@sed -e "s/{lib_type} \$$allegro_libs/{lib_type}_s \$$allegro_libs/" temp2 > temp
@sed -e "s/-l\$${lib_type}_unsharable/-l\$${lib_type}-main $(LIBRARIES)/" temp >$(INSTALLDIR)/bin/allegro-config
@rm -f temp temp2
@chmod a+x $(INSTALLDIR)/bin/allegro-config
@echo allegro-config script created in $(INSTALLDIR)/bin
HEADERS = $(INSTALLDIR)/$(INCDIR)/osxalleg.h \
$(INSTALLDIR)/$(INCDIR)/allegro/platform/aintosx.h \
$(INSTALLDIR)/$(INCDIR)/allegro/platform/aintunix.h \
$(INSTALLDIR)/$(INCDIR)/allegro/platform/alosxcfg.h \
$(INSTALLDIR)/$(INCDIR)/allegro/platform/alplatf.h \
$(INSTALLDIR)/$(INCDIR)/allegro/platform/astdint.h \
$(INSTALLDIR)/$(INCDIR)/allegro/platform/alosx.h
ifdef STATICLINK
INSTALL_FILES = $(INSTALLDIR)/$(LIBDIR)/lib$(VERSION)_s.a
else
INSTALL_FILES = $(INSTALLDIR)/$(LIBDIR)/lib$(VERSION)-$(shared_version).dylib
INSTALL_FILES += $(INSTALLDIR)/$(LIBDIR)/lib$(VERSION)-main.a
endif
INSTALL_FILES += $(HEADERS) $(INSTALLDIR)/bin/allegro-config
install: generic-install
@echo The $(DESCRIPTION) $(PLATFORM) library has been installed.
@if (printenv PATH |grep -q -v "$(INSTALLDIR)/bin"); then echo "Please check that $(INSTALLDIR)/bin is in your path (see docs/build/macosx.txt)"; fi
@echo Run make install-man if you wish to install the man pages.
@echo Run make install-applehelp if you wish to install the Apple Help Center documentation
@echo Run make install-framework if you wish to install the library as a framework.
@echo Run make install-template if you wish to install the application template.
UNINSTALL_FILES = $(INSTALLDIR)/$(LIBDIR)/liballeg_s.a \
$(INSTALLDIR)/$(LIBDIR)/liballd_s.a \
$(INSTALLDIR)/$(LIBDIR)/liballp_s.a \
$(INSTALLDIR)/$(LIBDIR)/liballeg-$(shared_version).dylib \
$(INSTALLDIR)/$(LIBDIR)/liballd-$(shared_version).dylib \
$(INSTALLDIR)/$(LIBDIR)/liballp-$(shared_version).dylib \
$(INSTALLDIR)/$(LIBDIR)/liballeg-main.a \
$(INSTALLDIR)/$(LIBDIR)/liballd-main.a \
$(INSTALLDIR)/$(LIBDIR)/liballp-main.a \
$(HEADERS) \
$(INSTALLDIR)/bin/allegro-config
uninstall: generic-uninstall
rm -f $(INSTALLDIR)/$(LIBDIR)/lib$(VERSION)-$(shared_major_minor).dylib
rm -f $(INSTALLDIR)/$(LIBDIR)/lib$(VERSION)-4.dylib
rm -f $(INSTALLDIR)/$(LIBDIR)/lib$(VERSION).dylib
-rm -fr $(FRAMEWORK)
-rm -fr $(TEMPLATE)
-sed -n -e "s,^@[@\\].*@\([a-zA-Z0-9_]*\)[^a-zA-Z0-9_*].*,$(MAN_DIR)/man3/\1.3,p" docs/src/allegro._tx \
| xargs -n 1 rm -f
-sed -n -e "s,^@@Example.*@\(ex.*\),$(MAN_DIR)/man3/\1.3,p" docs/src/allegro._tx \
| xargs -n 1 rm -f
-sed -n -e "s,^@@\(struct\|typedef\).*@\([a-zA-Z0-9_]*\),$(MAN_DIR)/man3/\2.3,p" docs/src/allegro._tx \
| xargs -n 1 rm -f
-rm -f $(HELPBUNDLE)/*
-rmdir $(HELPBUNDLE)
@echo All gone!
install-framework: $(FRAMEWORK)
install-applehelp:
install -d $(HELPBUNDLE)
install docs/html/*.html $(HELPBUNDLE)
sed -n -e '1,6p' docs/html/index.html > $(HELPBUNDLE)/index.html
echo "" >> $(HELPBUNDLE)/index.html
echo "" >> $(HELPBUNDLE)/index.html
sed -n -e '7,$$p' docs/html/index.html >> $(HELPBUNDLE)/index.html
install misc/alex.png $(HELPBUNDLE)
$(FRAMEWORK): $(LIB_NAME)
ifdef STATICLINK
@echo You need to compile Allegro as a dynamic library to install the framework.
else
@rm -fr $(FRAMEWORK)
@install -d $(FRAMEWORK)
@install -d $(FRAMEWORK)/Versions/$(shared_version)/Headers
@install -d $(FRAMEWORK)/Versions/$(shared_version)/Resources
ifdef EMBED
$(CC) -dynamiclib $(DYLINK_FLAGS) $(INSTALL_NAME_EMBED) $(PFLAGS) -o $(FRAMEWORK)/Versions/$(shared_version)/$(FRAMEWORK_NAME) $(OBJECTS) $(STATIC_LIBRARIES)
else
@install $(LIB_NAME) $(FRAMEWORK)/Versions/$(shared_version)/$(FRAMEWORK_NAME)
endif
@install include/allegro.h $(FRAMEWORK)/Versions/$(shared_version)/Headers
@install include/osxalleg.h $(FRAMEWORK)/Versions/$(shared_version)/Headers
@install $(HEADERS) $(FRAMEWORK)/Versions/$(shared_version)/Headers
@(cd $(FRAMEWORK)/Versions; ln -s $(shared_version) Current)
@(cd $(FRAMEWORK); ln -s Versions/Current/Headers $(FRAMEWORK)/Headers)
@(cd $(FRAMEWORK); ln -s Versions/Current/Resources $(FRAMEWORK)/Resources)
@(cd $(FRAMEWORK); ln -s Versions/Current/$(FRAMEWORK_NAME) $(FRAMEWORK)/$(FRAMEWORK_NAME))
@sed -e "s/@NAME@/$(FRAMEWORK_NAME)/" misc/Info.plist >temp
@sed -e "s/@VERSION@/$(shared_version) ($(DESCRIPTION))/" temp >$(FRAMEWORK)/Resources/Info.plist
@rm -f temp
ifdef EMBED
@echo "This is the embeddable version of the Allegro framework" > $(FRAMEWORK)/Resources/Embeddable
endif
@echo The $(FRAMEWORK_DESCRIPTION) Allegro framework has been successfully installed in:
@echo $(FRAMEWORK)
endif
install-template: $(TEMPLATE)
$(TEMPLATE): $(FRAMEWORK)
@rm -fr $(TEMPLATE)
@install -d $(TEMPLATE)/AllegroApp.pbproj
@install misc/template.c $(TEMPLATE)/main.c
@install misc/TemplateInfo.plist $(TEMPLATE)/AllegroApp.pbproj
@install misc/project.pbxproj $(TEMPLATE)/AllegroApp.pbproj
@install misc/project.pbxuser $(TEMPLATE)/AllegroApp.pbproj
@echo Allegro application template for Project Builder \(XCode\) installed in:
@echo $(TEMPLATE)
docs/man/install_allegro.3: docs/src/allegro._tx $(MAKEDOC)
$(MAKEDOC) -man docs/man/dummyname.3 $<
install-man: docs docs/man/install_allegro.3
@install -d $(MAN_DIR)/man3
@echo Installing man files to $(MAN_DIR)/man3
@install docs/man/*.3 $(MAN_DIR)/man3/
# -------- test capabilities --------
TEST_CPP = $(CC) -fno-exceptions -c src/misc/test.cpp -o $(PLATFORM_DIR)/test.o
include makefile.tst
# -------- finally, we get to the fun part... --------
ifdef STATICLINK
# -------- link as a static library --------
define MAKE_LIB
ar rs $(LIB_NAME) $(OBJECTS)
endef
else
# -------- link as a shared library --------
define MAKE_LIB
$(CC) -dynamiclib $(DYLINK_FLAGS) $(INSTALL_NAME) $(PFLAGS) -o $(LIB_NAME) $(OBJECTS) $(STATIC_LIBRARIES)
endef
endif # STATICLINK
$(LIB_MAIN_NAME): obj/macosx/$(VERSION)/main.o
ifndef STATICLINK
ar rs $(LIB_MAIN_NAME) obj/macosx/$(VERSION)/main.o
endif
COMPILE_FLAGS = $(subst src/,-DALLEGRO_SRC ,$(findstring src/, $<))$(CFLAGS)
$(OBJ_DIR)/%.o: %.c
$(CC) $(COMPILE_FLAGS) -I. -I./include -o $@ -c $<
$(OBJ_DIR)/%.o: %.cpp
$(CC) -fno-exceptions $(COMPILE_FLAGS) -I. -I./include -o $@ -c $<
$(OBJ_DIR)/%.o: %.m
$(CC) $(COMPILE_FLAGS) -I. -I./include -o $@ -c $<
demo/demo: $(OBJECTS_DEMO) $(LIB_NAME) $(LIB_MAIN_NAME)
$(CC) $(LFLAGS) -o $@ $(OBJECTS_DEMO) $(LIB_NAME) $(LIB_MAIN_NAME) $(LIBRARIES)
*/%: $(OBJ_DIR)/%.o $(LIB_NAME) $(LIB_MAIN_NAME)
$(CC) $(LFLAGS) -o $@ $< $(LIB_NAME) $(LIB_MAIN_NAME) $(LIBRARIES)
define LINK_WITHOUT_LIB
$(CC) $(LFLAGS) -o $@ $^
endef
PLUGIN_LIB = lib/macosx/lib$(VERY_SHORT_VERSION)dat.a
PLUGINS_H = obj/macosx/plugins.h
PLUGIN_DEPS = $(LIB_NAME) $(PLUGIN_LIB)
PLUGIN_SCR = scr
define GENERATE_PLUGINS_H
cat tools/plugins/*.inc > obj/macosx/plugins.h
endef
define MAKE_PLUGIN_LIB
ar rs $(PLUGIN_LIB) $(PLUGIN_OBJS)
endef
define LINK_WITH_PLUGINS
$(CC) $(LFLAGS) -o $@ $< $(strip $(PLUGIN_LIB) $(addprefix `cat < ,$(addsuffix `,$(PLUGIN_SCRIPTS))) $(LIB_NAME) $(LIB_MAIN_NAME) $(LIBRARIES))
endef
tools/macosx/%: $(OBJ_DIR)/%.o $(LIB_NAME) $(LIB_MAIN_NAME)
ifdef STATICLINK
$(CC) $(LFLAGS) -o $@ $< $(LIB_NAME) $(LIBRARIES)
else
$(CC) $(LFLAGS) -o $@ $< $(LIB_NAME) $(LIB_MAIN_NAME) $(LIBRARIES) -framework Carbon
endif
# -------- demo program iconification --------
.PHONY: fixdemo
fixdemo: demo/demo demo/demo.dat tools/macosx/fixbundle
tools/macosx/fixbundle demo/demo -d demo/demo.dat GAME_PAL SHIP3
# -------- generate automatic dependencies --------
DEPEND_PARAMS = -MM -MG -I. -I./include -DSCAN_DEPEND -DALLEGRO_MACOSX
depend:
$(CC) $(DEPEND_PARAMS) src/*.c src/unix/*.c src/misc/*.c src/c/*.c demo/*.c > _depend.tmp
$(CC) $(DEPEND_PARAMS) docs/src/makedoc/*.c examples/*.c setup/*.c tests/*.c >> _depend.tmp
$(CC) $(DEPEND_PARAMS) tools/*.c tools/plugins/*.c tools/macosx/*.c >> _depend.tmp
$(CC) $(DEPEND_PARAMS) -x c src/macosx/*.m tests/*.cpp >> _depend.tmp
sed -e "s/^[a-zA-Z0-9_\/]*\///" _depend.tmp > _depend2.tmp
sed -e "s/^\([a-zA-Z0-9_]*\.o *:\)/obj\/macosx\/alleg\/\1/" _depend2.tmp > obj/macosx/alleg/makefile.dep
sed -e "s/^\([a-zA-Z0-9_]*\.o *:\)/obj\/macosx\/alld\/\1/" _depend2.tmp > obj/macosx/alld/makefile.dep
sed -e "s/^\([a-zA-Z0-9_]*\.o *:\)/obj\/macosx\/allp\/\1/" _depend2.tmp > obj/macosx/allp/makefile.dep
rm _depend.tmp _depend2.tmp