Skip to content
Snippets Groups Projects
Makefile 7.46 KiB
Newer Older
#
# This is a grand unifying Makefile for compiling Pd-extended under MinGW
#
all: install

export CC = gcc
CWD := $(shell pwd)

DESTDIR = $(CWD)/build
cvs_root_dir := $(shell cd $(CWD)/../.. && pwd)
BUILDLAYOUT_DIR = $(cvs_root_dir)/packages


include $(BUILDLAYOUT_DIR)/Makefile.buildlayout


# Generic x86 (tune for Pentium III, since that's most common these days)
OPT_CFLAGS += -mcpu=i586 -mtune=pentium3


# these are sent to all of the various Makefiles so that they all copy their
# output to the same directory tree
DEST_PATHS = BUILDLAYOUT_DIR=$(BUILDLAYOUT_DIR) \
				cvs_root_dir=$(cvs_root_dir) \
				DESTDIR=$(DESTDIR) \
				prefix=$(prefix) \
				OPT_CFLAGS="$(OPT_CFLAGS)" \
				UNAME=$(UNAME)

PD_INNO_SETUP = pd-inno.iss

package:  $(PD_INNO_SETUP)
## this pops up the GUI app
#	start $(PD_INNO_SETUP)
## this compiles the package on the command line. On 64-bit Windows
#  we have to look in a different path, hence the ugly ifeq below...
ifeq (,$(wildcard /c/Program\ Files/Inno\ Setup\ 5/ISCC.exe))
	/c/Program\ Files\ \(x86\)/Inno\ Setup\ 5/ISCC.exe $(PD_INNO_SETUP)
else
	/c/Program\ Files/Inno\ Setup\ 5/ISCC.exe $(PD_INNO_SETUP)
	@echo " "
	@echo "win32_inno install succeeded!"

build_pd:
	cd $(pd_src)/src && $(MAKE) -f makefile.mingw

pd_install: build_pd
# the autoconf/MinGW setup doesn't compile the extras yet
#	$(MAKE) -C $(pd_src)/src $(DEST_PATHS) bin
#	-$(MAKE) -C $(pd_src)/src $(DEST_PATHS) install
	$(MAKE) -C $(pd_src)/src -f makefile.mingw $(DEST_PATHS) install

install: pd_install prebuilt_install lib_install exe_install
	@echo " "
	@echo "win32_inno install succeeded!"


prebuilt_install:
	$(MAKE) -C $(packages_src) $(DEST_PATHS) extended_install
	$(MAKE) -C $(packages_src) $(DEST_PATHS) doc_format
	install -p pd-settings.reg $(DESTDIR)$(prefix)

#==============================================================================#
#
## setup Pd binaries
#
#==============================================================================#

Jonathan Wilkes's avatar
Jonathan Wilkes committed
bin_src = /mingw32/bin
system32 = /c/WINDOWS/system32
lib_install:
# ultimately, the DLLs should be installed in %SystemRoot%\system32 by
# InnoSetup since they are 'officially' named and versioned DLLs, and can be
# shared between apps
# GUI port note: Pd doesn't seem to be able to find the following libs
# unless they are in $(DESTDIR)$(bindir) instead of $(DESTDIR)$(prefix).
# I figured that out by trial and error. If a Windows expert wants to figure
# out a better way to do it, that's fine-- I'm just trying to get it to build
# at all at this point...
	install -d $(DESTDIR)$(prefix)/
	install -d $(DESTDIR)$(bindir)
	install -p $(bin_src)/libfftw3-3.dll  $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libfftw3f-3.dll  $(DESTDIR)$(bindir)/
	#install -p $(bin_src)/libgnurx-0.dll  $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libogg-0.dll  $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libsndfile-1.dll  $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libvorbis-0.dll  $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libvorbisenc-2.dll  $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libvorbisfile-3.dll  $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libmp3lame-0.dll  $(DESTDIR)$(bindir)/
	# I think these two are needed for zexy/matchbox and zexy/regex
	install -p $(bin_src)/libsystre-0.dll $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libtre-5.dll $(DESTDIR)$(bindir)/
	# For fluid~
	install -p $(bin_src)/libfluidsynth-1.dll $(DESTDIR)$(bindir)/
	install -p $(bin_src)/lua53.dll          $(DESTDIR)$(bindir)/
	#install -p $(bin_src)/pthreadGC2.dll     $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libdl-0.dll     $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libportaudio-2.dll     $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libFLAC-8.dll     $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libspeex-1.dll     $(DESTDIR)$(bindir)/
        # These are for Gem
	install -p $(bin_src)/libftgl-2.dll $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libfreetype-6.dll $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libbz2-1.dll $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libharfbuzz-0.dll $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libglib-2.0-0.dll $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libintl-8.dll $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libiconv-2.dll $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libpng16-16.dll $(DESTDIR)$(bindir)/
	install -p $(bin_src)/zlib1.dll $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libpcre-1.dll $(DESTDIR)$(bindir)/
	install -p $(bin_src)/libgraphite2.dll $(DESTDIR)$(bindir)/
	# Apparently these Gem dependencies must be in the bindir
	# to be found on Windows
	-install -p $(DESTDIR)/extra/Gem/gem_film*.dll $(DESTDIR)$(bindir)/
	-install -p $(DESTDIR)/extra/Gem/gem_image*.dll $(DESTDIR)$(bindir)/
	-install -p $(DESTDIR)/extra/Gem/gem_model*.dll $(DESTDIR)$(bindir)/
	-install -p $(DESTDIR)/extra/Gem/gem_record*.dll $(DESTDIR)$(bindir)/
	-install -p $(DESTDIR)/extra/Gem/gem_video*.dll $(DESTDIR)$(bindir)/
# if these are installed, include them in the build root
	-install -p $(system32)/msvcp71.dll   $(DESTDIR)$(bindir)
	-install -p $(system32)/msvcr71.dll   $(DESTDIR)$(bindir)
	#-install -p $(system32)/pthreadVC.dll $(DESTDIR)$(bindir)
	install -p $(bin_src)/libwinpthread-1.dll $(DESTDIR)$(bindir)
	install -p $(bin_src)/libgcc_s_dw2-1.dll $(DESTDIR)$(bindir)
	install -p $(bin_src)/libstdc++-6.dll $(DESTDIR)$(bindir)
# lyonpotpourri compiles its own shared lib. On Windows it needs to be
# in the path of the pd executable in order to get loaded. (There's probably
# also a way to add the external lib's path but I don't know how to do that.)
	install -p $(DESTDIR)/extra/lyonpotpourri/liblyonpotpourri.dll $(DESTDIR)$(bindir)
# fftease also uses a shared lib...
	install -p $(DESTDIR)/extra/fftease/libfftease.dll $(DESTDIR)$(bindir)


exe_install:
	install -d $(DESTDIR)$(bindir)

$(PD_INNO_SETUP): $(PD_INNO_SETUP).in
	@echo "Making Inno Setup file: $(PD_INNO_SETUP)"
	cat "$(PD_INNO_SETUP).in" | \
		sed 's/PACKAGE_NAME/$(PACKAGE_NAME)/g' | \
		sed 's/PD_VERSION/$(PD_VERSION)/g' | \
		sed 's/GIT_VERSION/$(GIT_VERSION)/g' > \
		$(PD_INNO_SETUP)
#	start $(PD_INNO_SETUP)


#==============================================================================#
#
## CLEAN TARGETS
#
#==============================================================================#

distclean: package_clean
	$(MAKE) -C $(packages_src) $(DEST_PATHS) distclean


package_clean: 	
	-rm $(PD_INNO_SETUP)
	-rm -rf $(DESTDIR)
	-rm -rf Output


clean: package_clean
	$(MAKE) -C $(packages_src) $(DEST_PATHS) clean

#==============================================================================#
#
## TEST TARGETS
#
#==============================================================================#

test_package:
	echo "No tests here yet"


test_locations:
	@echo --------------------------------------------------
	@echo "PD_VERSION: $(PD_VERSION)"
	@echo "GIT_VERSION: $(GIT_VERSION)"
	@echo "CWD $(CWD)"
	@echo "DESTDIR $(DESTDIR)"
	@echo "PREFIX $(prefix)"
	@echo "BINDIR  $(bindir)"
	@echo "LIBDIR  $(libdir)"
	@echo "OBJECTSDIR  $(objectsdir)"
	@echo "PDDOCDIR  $(pddocdir)"
	@echo "LIBPDDIR  $(libpddir)"
	@echo "LIBPDBINDIR  $(libpdbindir)"
	@echo "HELPDIR  $(helpdir)"
	@echo "MANUALSDIR  $(manualsdir)"
	@echo "EXAMPLESDIR  $(examplesdir)"
	@echo --------------------------------------------------
	autoconf --version
	@echo --------------------------------------------------
	make --version
	@echo --------------------------------------------------
	gcc --version


.PHONY: all install package clean distclean test_locations test_package exe_install