################################################# # @PACKAGE_STRING@ # @configure_input@ ################################################# @SET_MAKE@ SHELL = /bin/sh ################################################# # Standard definitions ################################################# prefix ?= @prefix@ exec_prefix ?= @exec_prefix@ bindir ?= @bindir@ datarootdir ?= @datarootdir@ datadir ?= @datadir@ libdir ?= @libdir@ docdir ?= @docdir@ pdfdir ?= @pdfdir@ mandir ?= @mandir@ # project root-dir (directory of configure script) top_srcdir ?= @top_srcdir@ # project src-dir (directory of the current Makefile) srcdir ?= @srcdir@ # file-type suffix of executables (e.g. ".exe" in windows) EXEEXT ?= @EXEEXT@ ################################################# # Tools ################################################# # recursive dir creation tool (mkdir -p) MKDIR ?= @MKDIR_P@ RM ?= rm -f RM_REC ?= $(RM) -r # install tool INSTALL ?= @INSTALL@ INSTALL_DATA ?= @INSTALL_DATA@ INSTALL_PROGRAM ?= @INSTALL_PROGRAM@ ################################################# # General package configuration ################################################# USDX_PACKAGE_NAME := @PACKAGE_NAME@ USDX_VERSION := @PACKAGE_VERSION@ USDX_TARNAME := @PACKAGE_TARNAME@ ################################################# # USDX Paths ################################################# USDX_SRC_DIR := $(top_srcdir)/src USDX_GAME_DIR := $(top_srcdir)/game USDX_TOOLS_DIR := $(top_srcdir)/tools USDX_BUILD_DIR := $(top_srcdir)/build USDX_LIB_DIR := $(USDX_SRC_DIR)/lib INSTALL_DATADIR := $(datadir)/$(USDX_PACKAGE_NAME) ################################################# # Binary name ################################################# # name of executable USDX_BIN_NAME ?= ultrastardx$(EXEEXT) USDX_BIN := $(USDX_GAME_DIR)/$(USDX_BIN_NAME) ################################################# # ProjectM ################################################# PROJECTM_CWRAPPER_DIR := $(USDX_LIB_DIR)/projectM/cwrapper USE_PROJECTM_CWRAPPER = @USE_PROJECTM_CWRAPPER@ ################################################# # Dependencies ################################################# DEPS := ifeq ($(USE_PROJECTM_CWRAPPER), yes) DEPS += $(PROJECTM_CWRAPPER_DIR) endif ################################################# # Mac OS X library functions ################################################# # 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 ################################################# # general targets ################################################# ## # IMPORTANT: # Always assure that this Makefile still works with the -jN # parameter set. This is important as Gentoo uses parallel # make (-j2) by default. # If parallel execution is enabled you cannot rely on a # specific order the prerequisites are build. # # Example: # target: dependency dependant # # will first build "dependency" and "dependant" afterwards with a # sequential execution (-j1). With parallel execution "dependant" # might be started before "dependency" is finished and make will # crash. # # If it is not possible, add the virtual .NOTPARALLEL target. # This will disable parallel execution for ALL targets. ## BUILD_TARGETS = all debug release rebuild build .PHONY: $(BUILD_TARGETS) $(BUILD_TARGETS): all-deps $(MAKE) -C $(USDX_SRC_DIR) $@ .PHONY: all-deps all-deps: @for dir in $(DEPS); do \ $(MAKE) -C "$$dir" all; \ done .PHONY: clean clean: clean-src clean-deps .PHONY: clean-src clean-src: $(MAKE) -C $(USDX_SRC_DIR) clean .PHONY: clean-deps clean-deps: @for dir in $(DEPS); do \ $(MAKE) -C "$$dir" clean; \ done .PHONY: clean-game clean-game: $(RM) $(USDX_GAME_DIR)/*.log $(RM) $(USDX_GAME_DIR)/*.db $(RM) $(USDX_GAME_DIR)/*.ini -rmdir $(USDX_GAME_DIR)/screenshots -rmdir $(USDX_GAME_DIR)/playlists -rmdir $(USDX_GAME_DIR)/songs # just clean the game build data but no dependencies (libs, tools, ...) .PHONY: mostlyclean mostlyclean: clean-src .PHONY: distclean distclean: clean clean-game $(RM) config.log config.status aclocal.m4 $(RM_REC) autom4te.cache $(RM) $(USDX_SRC_DIR)/config.inc $(RM) $(srcdir)/Makefile $(USDX_SRC_DIR)/Makefile $(PROJECTM_CWRAPPER_DIR)/Makefile .PHONY: maintainer-clean maintainer-clean: distclean # remove temporary and backup files .PHONY: tidy tidy: # FPC stuff find $(srcdir) -name "*.compiled" | xargs $(RM) # Delphi stuff find $(srcdir) -name "__history" | xargs $(RM_REC) find $(srcdir) -name "*.identcache" -o -name "*.dcu" | xargs $(RM) # Backup files find $(srcdir) -name "*~" -o -name "*.bak" -o -name "*.orig" | xargs $(RM) ################################################# # auto-update ################################################# Makefile: $(srcdir)/Makefile.in $(USDX_SRC_DIR)/Makefile.in $(USDX_SRC_DIR)/config.inc.in $(PROJECTM_CWRAPPER_DIR)/Makefile.in config.status @echo "-----------------------------------" @echo "Performing reconfiguration..." ./config.status @echo "-----------------------------------" config.status: configure ./config.status --recheck .PHONY: reconf reconf: ./autogen.sh ################################################# # install/uninstall ################################################# ## # For information on directory and install conventions see # "info autoconf", Section 4.8.2. Installation Directory Variables # Section 4.8.1, 4.8.3 and 4.8.4 # Notes: # - "make install" must not rebuild, so do not depend on all. # - use the DESTDIR variable as prefix for installation directories, # otherwise Gentoo will not be able to install as it uses a sandbox. ## .PHONY: install install: install-all @echo "--------------------------------" @echo "$(USDX_PACKAGE_NAME) installed." @echo "Start with: $(bindir)/$(USDX_BIN_NAME)" @echo "--------------------------------" # strip binaries during install install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \ install .PHONY: install-all install-all: install-exec install-plugins install-data .PHONY: install-exec install-exec: $(MKDIR) "$(DESTDIR)$(bindir)" $(INSTALL_PROGRAM) "$(USDX_BIN)" "$(DESTDIR)$(bindir)" # FPC target platform and processor PPLATFORM := @FPC_PLATFORM@ PPROCESSOR := @FPC_PROCESSOR@ .PHONY: install-plugins install-plugins: $(MKDIR) "$(DESTDIR)$(INSTALL_DATADIR)/plugins" $(INSTALL) "$(USDX_GAME_DIR)/plugins"/* "$(DESTDIR)$(INSTALL_DATADIR)/plugins" .PHONY: install-data install-data: $(MAKE) RECURSIVE_SRC_DIR="$(USDX_GAME_DIR)/languages" \ RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/languages" \ install-data-recursive $(MAKE) RECURSIVE_SRC_DIR="$(USDX_GAME_DIR)/sounds" \ RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/sounds" \ install-data-recursive $(MAKE) RECURSIVE_SRC_DIR="$(USDX_GAME_DIR)/themes" \ RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/themes" \ install-data-recursive $(MAKE) RECURSIVE_SRC_DIR="$(USDX_GAME_DIR)/fonts" \ RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/fonts" \ install-data-recursive $(MAKE) RECURSIVE_SRC_DIR="$(USDX_GAME_DIR)/resources" \ RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/resources" \ install-data-recursive $(INSTALL_DATA) "COPYING.txt" "$(DESTDIR)$(INSTALL_DATADIR)/COPYING.txt" .PHONY: install-data-recursive install-data-recursive: # Note: the project contains filesnames with whitespace $(MKDIR) "$(RECURSIVE_DST_DIR)" @for file in "$(RECURSIVE_SRC_DIR)"/*; do \ if test -f "$$file"; then \ filename=`basename "$$file"`; \ echo "$(INSTALL_DATA) \"$$file\" \"$(RECURSIVE_DST_DIR)/$$filename\""; \ $(INSTALL_DATA) "$$file" "$(RECURSIVE_DST_DIR)/$$filename" || exit 1; \ 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 || exit 1; \ fi; \ done .PHONY: uninstall uninstall: uninstall-all .PHONY: uninstall-all uninstall-all: uninstall-data uninstall-exec uninstall-plugins .PHONY: uninstall-data uninstall-data: $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/languages" $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/sounds" $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/themes" $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/fonts" $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/resources" $(RM) "$(DESTDIR)$(INSTALL_DATADIR)/COPYING.txt" -rmdir "$(DESTDIR)$(INSTALL_DATADIR)" .PHONY: uninstall-exec uninstall-exec: $(RM) "$(DESTDIR)$(bindir)/$(USDX_BIN_NAME)" .PHONY: uninstall-plugins uninstall-plugins: $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/plugins" ################################################# # Distributable source-package (TODO) ################################################# #disttmpdir := $(USDX_PACKAGE_NAME)-$(USDX_VERSION)-src disttmpdir := $(USDX_PACKAGE_NAME)-1.1_alpha-src # choose all files in SVN that are not deleted svn-files := svn status -v | grep -v "^[?D]" | cut -c8- | tr -s " " | cut -f5- -d" " .PHONY: dist dist: @$(svn-files) | while read FILE; do \ if test -d "$$FILE"; then \ echo "MKDIR: $(disttmpdir)/$$FILE"; \ $(MKDIR) "$(disttmpdir)/$$FILE" || exit 1; \ else \ echo "COPY: $$FILE"; \ cp "$$FILE" "$(disttmpdir)/$$FILE" || exit 1; \ fi; \ done tar cvf $(disttmpdir).tar $(disttmpdir) gzip $(disttmpdir).tar $(RM_REC) $(disttmpdir) ################################################# # Debian package ################################################# debpkgdir ?= dists/debian debpkgtmpdir := $(debpkgdir)/deb-package debpkgprefix := $(USDX_PACKAGE_NAME) debpkgname := $(debpkgprefix)_$(USDX_VERSION)_$(PPROCESSOR).deb .PHONY: deb deb: all $(RM_REC) $(debpkgtmpdir) $(MKDIR) $(debpkgdir) $(MKDIR) $(debpkgtmpdir)/DEBIAN $(MAKE) DESTDIR=$(debpkgtmpdir)/ install-all $(INSTALL_DATA) $(debpkgdir)/$(debpkgprefix).control $(debpkgtmpdir)/DEBIAN/control dpkg-deb --build $(debpkgtmpdir) mv $(debpkgtmpdir)/../deb-package.deb $(debpkgdir)/$(debpkgname) $(RM_REC) $(debpkgtmpdir) ################################################# # RPM (TODO) ################################################# .PHONY: rpm rpm: all @echo "Coming soon" ################################################# # Mac OS X defines ################################################# # 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 # finkLibDir := path for libraries installed using fink finkLibDir := /sw/lib ################################################# # Mac OS X app-bundle ################################################# macosx_bundle_path := UltraStarDeluxe.app/Contents .PHONY: macosx-app macosx-app: all # Create double clickable Mac OS X application. @echo "" @echo "Creating the Mac OS X application" @echo "" $(MKDIR) $(macosx_bundle_path) # Put the icon file into its particular place. # Must be done BEFORE info.plist is created. $(MKDIR) $(macosx_bundle_path)/resources $(INSTALL_DATA) icons/ultrastardx.icns $(macosx_bundle_path)/resources/ # the info.plist file $(INSTALL_DATA) $(USDX_SRC_DIR)/macosx/Info.plist $(macosx_bundle_path)/ # Copy the resources. $(MAKE) install-all INSTALL_DATADIR=$(macosx_bundle_path) bindir=$(macosx_bundle_path)/MacOS # Copy the lua plugins. $(MAKE) install-plugins INSTALL_DATADIR=$(macosx_bundle_path) bindir=$(macosx_bundle_path)/MacOS # Create the song directory. $(MKDIR) $(macosx_bundle_path)/songs # final messages @echo "" @echo "Mac OS X application created." @echo "Please report issues to the developer team, preferably mischi." @echo "Have fun." @echo "" AVCODECLIB := $(shell $(OTOOL) -L $(macosx_bundle_path)/MacOS/ultrastardx | grep avcodec | cut -f 1 -d ' ' | cut -f 4-6 -d '/') SWRESAMPLELIB := $(shell $(OTOOL) -L $(macosx_bundle_path)/MacOS/libavcodec*.dylib | grep swresample | cut -f 1 -d ' ' | cut -f 4-6 -d '/') .PHONY: macosx-standalone-app 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 "" # 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 $(finkLibDir)/$(AVCODECLIB) | 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 $(finkLibDir)/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 $(finkLibDir)/libSDL_image.dylib | grep version | cut -f 1 -d ' ' | grep -v \/System\/Library | grep -v \/usr\/lib),$(install_osx_libraries)) # same procedure for secondary libs in libtiff $(foreach dylib,$(shell $(OTOOL) -L $(finkLibDir)/libtiff.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 /opt/X11/lib/libX11.dylib | grep version | cut -f 1 -d ' ' | grep -v \/System\/Library | grep -v \/usr\/lib),$(install_osx_libraries)) # libpcre.dylib must be installed extra, since it is not linked to the executable but opened using dlopen $(shell $(INSTALL) -m 755 $(finkLibDir)/libpcre.dylib $(macosx_bundle_path)/MacOS) $(shell $(INSTALL_NAME_TOOL) -change $(finkLibDir)/libpcre.dylib @executable_path/libpcre.dylib $(macosx_bundle_path)/MacOS/libpcre.dylib) $(shell $(INSTALL_NAME_TOOL) -id @executable_path/libpcre.dylib $(macosx_bundle_path)/MacOS/libpcre.dylib) # do not forget to sign the code # codesign -f -s USDX-codesign UltraStarDeluxe.app # final messages @echo "Standalone Mac OS X application created." @echo "" .PHONY: macosx-dmg macosx-dmg: macosx-standalone-app $(RM) UltraStarDeluxe.dmg $(RM) UltraStarDeluxe.sparseimage $(HDIUTIL) create -type SPARSE -size 100m -fs HFS+ -volname UltraStarDeluxe -ov UltraStarDeluxe.sparseimage $(HDIUTIL) 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 UltraStarDeluxe.dmg $(RM) UltraStarDeluxe.sparseimage # remove Mac OS X apllication bundle and disk image .PHONY: clean-macosx clean-macosx: clean-macosx-app clean-macosx-dmg .PHONY: clean-macosx-app clean-macosx-app: $(RM_REC) UltraStarDeluxe.app .PHONY: clean-macosx-dmg clean-macosx-dmg: $(RM) UltraStarDeluxe.dmg $(RM) UltraStarDeluxe.sparseimage