################################################# # 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)/Resources/Graphics/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