blob: 19e26c7c277124ec58f06e234481acb446cea0d9 (
plain) (
tree)
|
|
#################################################
# Makefile for @PACKAGE_STRING@
# @configure_input@
#################################################
# general definitions
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
infodir = @infodir@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
datarootdir = @datarootdir@
VPATH = @srcdir@
usdxrootdir = @usdxrootdir@
INSTALL_PATH_SUFFIX = @suffix@
INSTALL_datadir = $(datarootdir)/$(INSTALL_PATH_SUFFIX)
@SET_MAKE@
# recursive dir creation tool
MKDIR_P = @MKDIR_P@
# install tool
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
# calls "ln -s"
LN_S = @LN_S@
# Package configuration
USDX_PACKAGE_NAME = @PACKAGE_NAME@
# should be $(USDX_PACKAGE_NAME) instead
USDX_PREFIX = ultrastardx
USDX_VERSION = @PACKAGE_VERSION@
USDX_TARNAME = @PACKAGE_TARNAME@
USDX_TOOLS_DIR = $(usdxrootdir)/tools
USDX_LIB_DIR = ./lib
USDX_BUILD_DIR = ./build
# file-type suffix of executables (e.g. ".exe" in windows)
EXE_SUFFIX = @EXEEXT@
# Free Pascal compiler
PPC = @PPC@
# FPC target platform and processor
PPLATFORM = @FPC_PLATFORM@
PPROCESSOR = @FPC_PROCESSOR@
EXTRA_SRCDIRS =
# RC resource extraction config
RESEXTRACTOR_NAME = ResourceExtractor
RESEXTRACTOR_DIR = $(USDX_TOOLS_DIR)/$(RESEXTRACTOR_NAME)
RESEXTRACTOR_BIN = $(RESEXTRACTOR_DIR)/$(RESEXTRACTOR_NAME)$(EXE_SUFFIX)
RESOURCE_DIR = $(usdxrootdir)/Resources
RESOURCE_FILE = resource.inc
RC_FILE = ultrastardx.rc
EXTRA_SRCDIRS += $(RESEXTRACTOR_DIR)
# cwrapper settings
PROJECTM_CWRAPPER_DIR = $(USDX_LIB_DIR)/projectM/cwrapper
@COMMENT_PROJECTM_CWRAPPER@EXTRA_SRCDIRS += $(PROJECTM_CWRAPPER_DIR)
# Directories added to the unit path
PUNIT_TOKEN = -Fu
PUNIT_FLAGS = $(PUNIT_TOKEN).
# Directory where compiled units (.ppu and .o files) are stored
PCUNIT_TOKEN = -FU
PCUNIT_DIR = $(USDX_BUILD_DIR)/$(PPLATFORM)/fpc
PCUNIT_FLAGS = $(PCUNIT_TOKEN)$(PCUNIT_DIR)
# Directories added to the includes path
PINC_TOKEN = -Fi
PINC_FLAGS = $(PINC_TOKEN)$(USDX_LIB_DIR)/JEDI-SDL/SDL/Pas
# FPC flags
# The user can overwrite the default flags with
# make PFLAGS_BASE="myflags"
PFLAGS_BASE = -S2gi -vB
# The user can specify additional flags with
# make PFLAGS_EXTRA="myflags"
PFLAGS_EXTRA = @PFLAGS_EXTRA@
PFLAGS_DEBUG = @PFLAGS_DEBUG@
PFLAGS_RELEASE = @PFLAGS_RELEASE@
# the user's flags (specified with configure) must be the last in
# the list to overwrite the defaults (e.g.with the - option: -Xs-).
PFLAGS = $(PFLAGS_BASE) @PFLAGS_MAKE@ $(PFLAGS_EXTRA)
LIBS = @LIBS@
LDFLAGS = @LDFLAGS@
linkflags = $(strip $(LDFLAGS) $(LIBS))
ifneq ($(linkflags),)
PLINKFLAGS = -k"$(linkflags)"
endif
# dpr project file used as input
USDX_SRC = ultrastardx.dpr
# name of executable
USDX_BIN_NAME = $(USDX_PREFIX)$(EXE_SUFFIX)
USDX_BIN = $(usdxrootdir)/$(USDX_BIN_NAME)
# name of the modification timestamp filename
modfile = lastmod
# otool: Mac OS X object file displaying tool
OTOOL = /usr/bin/otool
# install_name_tool: Mac OS X tool to change dynamic shared library install names
INSTALL_NAME_TOOL = /usr/bin/install_name_tool
# hdiutil: Mac OS X disk image tool
HDIUTIL = /usr/bin/hdiutil
#################################################
# general targets
#################################################
.PHONY: debug release recursive all recursive-all dependencies install install-local install-global install-data install-data-recursive install-exec uninstall uninstall-local uninstall-global uninstall-data uninstall-exec clean recursive-clean distclean recursive-distclean clean_obj clean_res dist debian-package update-modfile $(EXTRA_SRCDIRS)
debug: PFLAGS = $(PFLAGS_BASE) $(PFLAGS_DEBUG) $(PFLAGS_EXTRA)
debug: all
release: PFLAGS = $(PFLAGS_BASE) $(PFLAGS_RELEASE) $(PFLAGS_EXTRA)
release: all
all: recursive-all update-modfile dependencies $(USDX_BIN)
recursive-all: recursive-target = all
recursive-all: recursive
dependencies: $(RESOURCE_FILE)
# call Makefiles in other source-dirs
recursive: $(EXTRA_SRCDIRS)
$(EXTRA_SRCDIRS):
$(MAKE) -C $@ $(recursive-target)
#################################################
# build
#################################################
# clean old data before compiling, otherwise FPC might miss some changes.
$(USDX_BIN): lastmod
$(MAKE) clean_obj
mkdir -p "$(PCUNIT_DIR)"
$(PPC) $(strip $(PFLAGS) $(PDEFINES) $(PLINKFLAGS) $(PINC_FLAGS) $(PUNIT_FLAGS) $(PCUNIT_FLAGS)) -o$@ $(USDX_SRC)
#################################################
# install/uninstall
#################################################
install: all install-@install_type@
uninstall: uninstall-@install_type@
# local build
install-local:
uninstall-local:
rm -f "$(USDX_BIN)"
# global build
install-global: install-data install-exec
install-data:
$(MAKE) RECURSIVE_SRC_DIR="$(usdxrootdir)/artwork" RECURSIVE_DST_DIR="$(INSTALL_datadir)/artwork" install-data-recursive
$(MAKE) RECURSIVE_SRC_DIR="$(usdxrootdir)/Languages" RECURSIVE_DST_DIR="$(INSTALL_datadir)/Languages" install-data-recursive
$(MAKE) RECURSIVE_SRC_DIR="$(usdxrootdir)/Sounds" RECURSIVE_DST_DIR="$(INSTALL_datadir)/Sounds" install-data-recursive
$(MAKE) RECURSIVE_SRC_DIR="$(usdxrootdir)/Themes" RECURSIVE_DST_DIR="$(INSTALL_datadir)/Themes" install-data-recursive
$(MAKE) RECURSIVE_SRC_DIR="$(usdxrootdir)/Resources" RECURSIVE_DST_DIR="$(INSTALL_datadir)/Resources" install-data-recursive
$(INSTALL_DATA) "$(usdxrootdir)/License.txt" "$(INSTALL_datadir)"
install-data-recursive:
$(MKDIR_P) "$(RECURSIVE_DST_DIR)"
@for file in "$(RECURSIVE_SRC_DIR)"/*; do \
if test -f "$$file"; then \
echo $(INSTALL_DATA) "$$file" "$(RECURSIVE_DST_DIR)"; \
$(INSTALL_DATA) "$$file" "$(RECURSIVE_DST_DIR)"; \
fi; \
if test -d "$$file"; then \
subdir="$$file"; \
subdirname=`basename "$$subdir"`; \
$(MAKE) RECURSIVE_SRC_DIR="$$subdir" RECURSIVE_DST_DIR="$(RECURSIVE_DST_DIR)/$$subdirname" install-data-recursive; \
fi; \
done
install-exec:
$(MKDIR_P) "$(bindir)"
$(INSTALL) "$(USDX_BIN)" "$(bindir)"
uninstall-global: uninstall-data uninstall-exec
uninstall-data:
rm -rf "$(INSTALL_datadir)/artwork"
rm -rf "$(INSTALL_datadir)/Languages"
rm -rf "$(INSTALL_datadir)/Sounds"
rm -rf "$(INSTALL_datadir)/Themes"
rm -rf "$(INSTALL_datadir)/Resources"
rm -f "$(INSTALL_datadir)/License.txt"
-rmdir "$(INSTALL_datadir)"
uninstall-exec:
rm -f "$(bindir)/$(USDX_BIN_NAME)"
#################################################
# Distributable source-package (TODO)
#################################################
disttmpdir = ./distdir
dist:
# $(MKDIR_P) $(disttmpdir)
# acm $(usdxrootdir) $(disttmpdir)
# $(MAKE) -C $(disttmpdir)/src distclean
# tar cvzf $(USDX_TARNAME)-$(USDX_VERSION).tar.gz $(usdxrootdir)
@echo "Comming soon"
#################################################
# Debian package
#################################################
debpkgoutdir = $(usdxrootdir)/packages
debpkgtmpdir = $(debpkgoutdir)/deb-package
# should be $(USDX_PACKAGE_NAME) instead
debpkgprefix = ultrastardx
debpkgname = $(debpkgprefix)_$(USDX_VERSION)_$(PPROCESSOR).deb
debian-pkg: all
rm -rf $(debpkgtmpdir)
rm -rf $(debpkgoutdir)
$(MKDIR_P) $(debpkgoutdir)
$(MKDIR_P) $(debpkgtmpdir)/DEBIAN
$(MAKE) prefix=$(debpkgtmpdir)/$(prefix) install
$(INSTALL_DATA) $(debpkgprefix).control $(debpkgtmpdir)/DEBIAN/control
dpkg-deb --build $(debpkgtmpdir)
mv $(debpkgtmpdir)/../deb-package.deb $(debpkgoutdir)/$(debpkgname)
rm -rf $(debpkgtmpdir)
#################################################
# RPM (TODO)
#################################################
rpm: all
@echo "Coming soon"
#################################################
# Mac OS X app-bundle
#################################################
macosx_bundle_path = $(usdxrootdir)/UltraStarDeluxe.app/Contents
macosx-app: all
# Create double clickable Mac OS X application.
@echo ""
@echo "Creating the Mac OS X application"
@echo ""
$(MKDIR_P) $(macosx_bundle_path)/Resources
# Put the icon file into its particular place.
# Must be done BEFORE info.plist is created.
$(INSTALL_DATA) $(usdxrootdir)/icons/ustar-icon_v01.icns $(macosx_bundle_path)/Resources/
# the info.plist file
$(INSTALL_DATA) macosx/Info.plist $(macosx_bundle_path)/
# Copy the resources.
$(MAKE) install-global INSTALL_datadir=$(macosx_bundle_path)/Resources bindir=$(macosx_bundle_path)/MacOS
# final messages
@echo ""
@echo "Mac OS X application created."
@echo "Please report issues to the developer team, preferably mischi."
@echo "Have fun."
@echo ""
macosx-standalone-app: macosx-app
# Create double clickable standalone (does not need fink) Mac OS X
# application. Not fully test, but should work on 10.5.
@echo ""
@echo "Creating the standalone Mac OS X application"
@echo ""
# copy the dylib and change its install names
define install_osx_libraries
$(shell $(INSTALL) -m 755 $(dylib) $(macosx_bundle_path)/MacOS)
$(shell $(INSTALL_NAME_TOOL) -change $(dylib) @executable_path/$(notdir $(dylib)) $(macosx_bundle_path)/MacOS/ultrastardx)
$(shell $(INSTALL_NAME_TOOL) -id @executable_path/$(notdir $(dylib)) $(macosx_bundle_path)/MacOS/$(notdir $(dylib)))
$(foreach linked_dylibs_2,$(shell $(OTOOL) -L $(dylib) | grep version | cut -f 1 -d ' ' | grep -v \/System\/Library | grep -v \usr\/lib | grep -v executable_path),$(rename_secondary_osx_libraries))
endef
define rename_secondary_osx_libraries
$(shell $(INSTALL_NAME_TOOL) -change $(linked_dylibs_2) @executable_path/$(notdir $(linked_dylibs_2)) $(macosx_bundle_path)/MacOS/$(notdir $(dylib)))
endef
# work on the dylibs in $(macosx_bundle_path)/MacOS/ultrastardx
$(foreach dylib,$(shell $(OTOOL) -L $(macosx_bundle_path)/MacOS/ultrastardx | grep version | cut -f 1 -d ' ' | grep -v \/System\/Library | grep -v \/usr\/lib),$(install_osx_libraries))
# work on the secondary dylibs from ffmpeg
# libavcodec references all tertiary libraries of the ffmpeg libs
$(foreach dylib,$(shell $(OTOOL) -L /sw/lib/libavcodec.dylib | grep version | cut -f 1 -d ' ' | grep -v \/System\/Library | grep -v \/usr\/lib),$(install_osx_libraries))
# same procedure in libfaac. it gets libgnugetopt
$(foreach dylib,$(shell $(OTOOL) -L /sw/lib/libfaac.dylib | grep version | cut -f 1 -d ' ' | grep -v \/System\/Library | grep -v \/usr\/lib),$(install_osx_libraries))
# same procedure for tertiary libs in SDL_image
$(foreach dylib,$(shell $(OTOOL) -L /sw/lib/libSDL_image.dylib | grep version | cut -f 1 -d ' ' | grep -v \/System\/Library | grep -v \/usr\/lib),$(install_osx_libraries))
# X11 libs as well, because users may not have installed it on 10.4
$(foreach dylib,$(shell $(OTOOL) -L /usr/X11R6/lib/libX11.dylib | grep version | cut -f 1 -d ' ' | grep -v \/System\/Library | grep -v \/usr\/lib),$(install_osx_libraries))
# final messages
@echo "Standalone Mac OS X application created."
@echo ""
macosx-disk-image: macosx-standalone-app
/bin/rm -f ultrastardx.dmg
$(HDIUTIL) create -type SPARSE -size 30m -fs HFS+ -volname UltraStarDeluxe -ov -attach UltraStarDeluxe.sparseimage
/bin/cp -R ../UltraStarDeluxe.app /Volumes/UltraStarDeluxe
# /bin/cp ultrastardx/icons/UltraStarDeluxeVolumeIcon.icns /Volumes/UltraStarDeluxe/.VolumeIcon.icns
# /Developer/Tools/SetFile -a C /Volumes/UltraStarDeluxe/.VolumeIcon.icns /Volumes/UltraStarDeluxe
$(HDIUTIL) detach /Volumes/UltraStarDeluxe
$(HDIUTIL) convert UltraStarDeluxe.sparseimage -format UDBZ -o ultrastardx.dmg
/bin/rm -f UltraStarDeluxe.sparseimage
#################################################
# clean-up
#################################################
clean: recursive-clean clean_obj
recursive-clean: recursive-target = clean
recursive-clean: recursive
distclean: recursive-distclean clean clean_res
find . -name "*.o" -o -name "*.ppu" -o -name "*.rst" -o -name "*.compiled" | xargs rm -f
find . -name "*~" -name "*.bak" -o -name "*.orig" -o -name "*.dcu" | xargs rm -f
find . -name "__history" | xargs rm -r -f
rm -f "$(USDX_PREFIX).res" "$(USDX_PREFIX).identcache"
rm -f config.inc Makefile config.log config.status configure aclocal.m4
rm -rf autom4te.cache
recursive-distclean: recursive-target = distclean
recursive-distclean: recursive
clean_obj:
find "$(PCUNIT_DIR)" -name "*.o" -o -name "*.ppu" -o -name "*.rst" -o -name "*.compiled" | xargs rm -f
rm -f "$(USDX_BIN)"
#################################################
# Resource-file
#################################################
$(RESOURCE_FILE): $(RC_FILE)
$(RESEXTRACTOR_BIN) $(RC_FILE) $(RESOURCE_DIR) $(RESOURCE_FILE)
clean_res:
rm -f "$(RESOURCE_FILE)"
#################################################
# auto-update
#################################################
# FPC does not recognize changes correctly. E.g. sometimes changes in .inc-files or
# conditional .pas dependencies are ignored which results in corrupted builds.
# So check for changes with a modification timestamp.
update-modfile:
test -e $(modfile) || touch $(modfile)
find . \( -name "*.pas" -o -name "*.pp" -o -name "*.inc" -o -name "*.dpr" \) -newer $(modfile) -exec touch $(modfile) \;
find $(USDX_LIB_DIR) -name "*.a" -newer $(modfile) -exec touch $(modfile) \;
Makefile: Makefile.in config.status
./config.status
config.status: configure
./config.status --recheck
configure: configure.ac config.inc.in aclocal.m4
autoconf
aclocal.m4: m4/*
aclocal -I m4
|