#==============================================================================# # # Centralized cross-platform build system # # see for instructions: http://puredata.org/docs/developer/build # # #==============================================================================# CWD := $(shell pwd) cvs_root_dir = $(CWD)/.. prefix = $(cvs_root_dir)/packages/build BUILDLAYOUT_DIR = $(CWD) # default target all: pd abstractions doc externals #all: pd abstractions doc externals flext gem @echo "Complete build succeeded!" include $(BUILDLAYOUT_DIR)/Makefile.buildlayout #==============================================================================# # # GET VERSIONS FOR RELEVANT SOFTWARE # #==============================================================================# CYCLONE_MAJOR_VERSION := $(shell grep CYCLONE_VERSION \ $(externals_src)/miXed/cyclone/build_counter | cut -d ' ' -f 3 | \ cut -d '"' -f 2) CYCLONE_RELEASE := $(shell grep CYCLONE_RELEASE \ $(externals_src)/miXed/cyclone/build_counter | cut -d ' ' -f 3 | \ cut -d '"' -f 2) CYCLONE_BUILD := $(shell grep CYCLONE_BUILD \ $(externals_src)/miXed/cyclone/build_counter | cut -d ' ' -f 3 | \ cut -d '"' -f 2) CYCLONE_VERSION := $(CYCLONE_MAJOR_VERSION) $(CYCLONE_RELEASE) $(CYCLONE_BUILD) FLEXT_MAJOR_VERSION := $(shell grep FLEXTMAJOR \ $(externals_src)/grill/flext/buildsys/version.inc | cut -d '=' -f2) FLEXT_MINOR_VERSION := $(shell grep FLEXTMINOR \ $(externals_src)/grill/flext/buildsys/version.inc | cut -d '=' -f2) FLEXT_MICRO_VERSION := $(shell grep FLEXTMICRO \ $(externals_src)/grill/flext/buildsys/version.inc | cut -d '=' -f2) FLEXT_VERSION := $(FLEXT_MAJOR_VERSION).$(FLEXT_MINOR_VERSION).$(FLEXT_MICRO_VERSION) GEM_VERSION := $(shell grep "GEM_VERSION" $(gem_src)/src/Base/GemVersion.h | \ cut -d '"' -f 2) MAXLIB_VERSION := $(shell grep "define VERSION" \ $(externals_src)/maxlib/maxlib.c | cut -d '"' -f 2) OSC_VERSION := $(shell grep "define VERSION" $(externals_src)/OSCx/src/OSC.c | \ cut -d '"' -f 2) PDP_VERSION := $(shell grep PDP_VERSION= $(externals_src)/pdp/configure | \ cut -d '=' -f 2) PMPD_VERSION := $(shell grep "define VERSION" \ $(externals_src)/pmpd/src/pmpd.c | cut -d '"' -f 2) TOXY_MAJOR_VERSION := $(shell grep TOXY_VERSION \ $(externals_src)/miXed/toxy/build_counter | cut -d ' ' -f 3 | \ cut -d '"' -f 2) TOXY_RELEASE := $(shell grep TOXY_RELEASE \ $(externals_src)/miXed/toxy/build_counter | cut -d ' ' -f 3 | \ cut -d '"' -f 2) TOXY_BUILD := $(shell grep TOXY_BUILD \ $(externals_src)/miXed/toxy/build_counter | cut -d ' ' -f 3 | \ cut -d '"' -f 2) TOXY_VERSION := $(TOXY_MAJOR_VERSION) $(TOXY_RELEASE) $(TOXY_BUILD) ZEXY_VERSION := $(shell grep VERSION $(externals_src)/zexy/src/zexy.h | \ grep -v _VERSION | cut -d ' ' -f 3 | cut -d '"' -f 2) # 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) \ prefix=$(prefix) \ UNAME=$(UNAME) #==============================================================================# # # BUILD TARGETS # #==============================================================================# #------------------------------------------------------------------------------ # abstractions abstractions: #------------------------------------------------------------------------------ # doc doc: #------------------------------------------------------------------------------ # externals externals: cd $(externals_src) && make $(DEST_PATHS) #------------------------------------------------------------------------------ # flext flext: # nusmuk cd $(externals_src)/nusmuk/msd && $(externals_src)/grill/flext/build.sh \ pd gcc cd $(externals_src)/nusmuk/msd2D && $(externals_src)/grill/flext/build.sh \ pd gcc cd $(externals_src)/nusmuk/msd3D && $(externals_src)/grill/flext/build.sh \ pd gcc #------------------------------------------------------------------------------ # Gem gem: # cd $(gem_src)/Gem && xcodebuild #------------------------------------------------------------------------------ # pd # pd's makefile has some of its own variables that need to be remapped # this relies on patches/build_vars_4_makefile.in.patch DESTDIR = "" ifeq ($(OS_NAME),darwin) libpddir = $(prefix) libpdbindir = $(bindir) else ifeq ($(OS_NAME),win) libpddir = $(prefix) libpdbindir = $(bindir) else libpddir = $(prefix)/lib/pd libpdbindir = $(libpddir)/bin endif endif PD_DEST_PATHS = $(DEST_PATHS) DESTDIR=$(DESTDIR) \ libpddir=$(libpddir) \ libpdbindir=$(libpdbindir) PD_CONFIGURE_FLAGS = PD_EXTRA_FLAGS = # Pd sometimes needs a specific autoconf, which is labeled differently on different # machines #PD_AUTOCONF := ${shell ( test -x "`which autoconf-2.59`" && echo autoconf-2.59 ) || echo autoconf } PD_AUTOCONF = autoconf pd: echo "OS_NAME $(OS_NAME)" echo "DESTDIR $(DESTDIR) libpdbindir $(libpdbindir)" echo "DEST_PATHS $(DEST_PATHS)" echo "PD_DEST_PATHS $(PD_DEST_PATHS)" echo "PD_EXTRA_FLAGS $(PD_EXTRA_FLAGS)" -cd $(pd_src)/src/ && $(PD_AUTOCONF) -cd $(pd_src)/src && ./configure $(PD_CONFIGURE_FLAGS) && \ make $(PD_DEST_PATHS) $(PD_EXTRA_FLAGS) #==============================================================================# # # INSTALL TARGETS # #==============================================================================# # this is used for installing into a pre-build Pd binary extended_install: abstractions_install doc_install externals_install \ flext_install gem_install readme_install welcome_install license_install \ noncvs_install #------------------------------------------------------------------------------ # install install: pd_install extended_install @echo "Complete install succeeded!" #------------------------------------------------------------------------------ # abstractions_install abstractions_install: cd $(abstractions_src) && make $(DEST_PATHS) install #------------------------------------------------------------------------------ # doc_install doc_install: cd $(doc_src) && make $(DEST_PATHS) install #------------------------------------------------------------------------------ # externals_install externals_install: cd $(externals_src) && make $(DEST_PATHS) install #------------------------------------------------------------------------------ # flext_install flext_install: # FLEXT # temp hack -HCS # test -f $(externals_src)/grill/flext/buildsys/mac/pd/config-gcc.def || \ # cp $(externals_src)/grill/flext/buildsys/mac/pd/config-gcc.def \ # $(externals_src)/grill/flext/buildsys/config-mac-pd-gcc.txt # end temp hack # tigital 8/30/2005 added # cd $(externals_src)/grill/flext && \ # ( \ # test -f buildsys/config-mac-pd-gcc.txt || \ # ( \ # cp buildsys/mac/pd/config-gcc.def buildsys/config-mac-pd-gcc.txt && \ # echo Copied template sys config file \ ) \ ) && \ ( \ cat buildsys/config-mac-pd-gcc.txt | \ sed "s/^PDPATH=.*/PDPATH=..\/..\/..\/pd/" > buildsys/config-mac-pd-gcc.txt \ ) && \ ( \ cat package.txt | sed "s/^PRECOMPILE=.*/PRECOMPILE=/" > package.txt \ ) && \ ( \ cat buildsys/mac/pd/gnumake-gcc-ext.inc | \ sed "s/^LDFLAG\S +=.*/LDFLAG\S += -bundle -bundle_loader ..\/..\/..\/pd\/bin\/pd/" > buildsys/mac/pd/gnumake-gcc-ext.inc \ ) && \ ( \ cat buildsys/mac/pd/gnumake-gcc-flext.inc | \ sed "s/^LDFLAG\S +=.*/LDFLAG\S += -dynamiclib -undefined dynamic_lookup /" > buildsys/mac/pd/gnumake-gcc-flext.inc \ ) && \ ( \ test -f config.txt || \ ( \ cp -f build/config-mac.def config.txt && \ echo Copied template flext config file \ ) \ ) && \ # MACOSX_DEPLOYMENT_TARGET=10.3 bash build.sh pd gcc build-release-shared FLEXTLIB=@executable_path/../extra FLEXTINC=../flext/source FLEXTSYS=$(objectsdir) # ln -sf $(externals_src)/grill/flext/pd-darwin/release-shared/libflext-pd.$(FLEXT_VERSION).dylib $(externals_src)/grill/flext/pd-darwin/release-shared/libflext-pd.dylib # install -p $(externals_src)/grill/flext/pd-darwin/release-shared/libflext-pd.$(FLEXT_VERSION).dylib $(objectsdir) # ln -sf libflext-pd.$(FLEXT_VERSION).dylib $(objectsdir)/libflext-pd.dylib install -d $(manualsdir)/flext cp -rp $(externals_src)/grill/flext/tutorial $(manualsdir)/flext install -p $(externals_src)/grill/flext/gpl.txt \ $(externals_src)/grill/flext/readme.txt \ $(externals_src)/grill/flext/license.txt \ $(manualsdir)/flext # FLEXTERNALS ######### # dyn~ -cd $(externals_src)/grill/dynext && bash ../flext/build.sh pd gcc build-release-shared FLEXTLIB=../flext/pd-darwin/release-shared FLEXTINC=../flext/source FLEXTSYS=$(objectsdir) -install -p $(externals_src)/grill/dynext/pd-darwin/release-shared/*.$(EXTENSION) $(objectsdir) install -p $(externals_src)/grill/dynext/pd/*.pd $(helpdir) install -d $(manualsdir)/dynext install -p $(externals_src)/grill/dynext/gpl.txt \ $(externals_src)/grill/dynext/readme.txt \ $(externals_src)/grill/dynext/license.txt \ $(manualsdir)/dynext ######### # pool -cd $(externals_src)/grill/pool && bash ../flext/build.sh pd gcc build-release-shared FLEXTPREFIX=. FLEXTLIB=$(objectsdir) FLEXTINC=../flext/source -install -p $(externals_src)/grill/pool/pd-darwin/release-shared/*.$(EXTENSION) $(objectsdir) install -p $(externals_src)/grill/pool/pool-help.pd $(helpdir) install -d $(manualsdir)/pool install -p $(externals_src)/grill/pool/gpl.txt \ $(externals_src)/grill/pool/readme.txt \ $(externals_src)/grill/pool/license.txt \ $(manualsdir)/pool ######### # py/pyext # cd $(externals_src)/grill/py && \ # ( \ # cp -f build/config-mac.def config.txt \ # ) && \ # bash ../flext/build.sh pd gcc build-release-shared FLEXTPREFIX=. FLEXTLIB=$(objectsdir) FLEXTINC=../flext/source # install -p $(externals_src)/grill/py/pd-darwin/release-shared/*.$(EXTENSION) $(objectsdir) # this wasn't building for me -HCS 2005-06-09 install -d $(examplesdir)/py/examples install -d $(examplesdir)/py/scripts install -p $(externals_src)/grill/py/pd/*.pd $(examplesdir)/py/examples install -p $(externals_src)/grill/py/scripts/*.py $(examplesdir)/py/scripts install -d $(manualsdir)/py/scripts install -p $(externals_src)/grill/py/gpl.txt \ $(externals_src)/grill/py/readme.txt $(externals_src)/grill/py/license.txt \ $(manualsdir)/py # install -d $(prefix)/Library/Frameworks # cp -R /Library/Frameworks/Python.framework $(prefix)/Library/Frameworks ######### # vasp # fails without the dir # test -d ../../vasp/pd-darwin || mkdir -p ../../vasp/pd-darwin # cd $(externals_src)/grill/vasp/ && bash ../flext/build.sh pd gcc build-release-shared FLEXTPREFIX=. FLEXTLIB=$(objectsdir) FLEXTINC=../flext/source # install -p $(externals_src)/grill/vasp/pd-darwin/release-shared/*.$(EXTENSION) $(objectsdir) # this wasn't building for me -HCS 2005-06-09 install -d $(helpdir)/vasp install -p $(externals_src)/grill/vasp/pd-help/*.pd $(helpdir)/vasp install -d $(manualsdir)/vasp install -p $(externals_src)/grill/vasp/gpl.txt \ $(externals_src)/grill/vasp/readme.txt \ $(externals_src)/grill/vasp/license.txt \ $(externals_src)/grill/vasp/changes.txt \ $(externals_src)/grill/vasp/todo.txt \ $(manualsdir)/vasp install -d $(examplesdir)/vasp cp -rp $(externals_src)/grill/vasp/pd-ex $(examplesdir)/vasp ######### # xsample # cd $(externals_src)/grill/xsample && bash ../flext/build.sh pd gcc build-release-shared FLEXTPREFIX=. FLEXTLIB=$(objectsdir) FLEXTINC=../flext/source # install -p $(externals_src)/grill/xsample/pd-darwin/release-shared/*.$(EXTENSION) $(objectsdir) install -p $(externals_src)/grill/xsample/pd/*.pd $(helpdir) install -d $(manualsdir)/xsample install -p $(externals_src)/grill/xsample/gpl.txt \ $(externals_src)/grill/xsample/readme.txt \ $(externals_src)/grill/xsample/license.txt \ $(manualsdir)/xsample ########## FOOTILS ######### # syncgrain # cd $(externals_src)/footils/syncgrain/ && $(MAKE) -f makefile.pd-darwin # install -p $(externals_src)/footils/syncgrain/pd-darwin/*.$(EXTENSION) \ # $(objectsdir) install -p $(externals_src)/footils/syncgrain/pd/*.* $(helpdir) ########## NUSMUK ########## # nusmuk # cd $(externals_src)/nusmuk/msd && $(externals_src)/grill/flext/build.sh \ # pd gcc install # cd $(externals_src)/nusmuk/msd2D && $(externals_src)/grill/flext/build.sh \ # pd gcc install # cd $(externals_src)/nusmuk/msd3D && $(externals_src)/grill/flext/build.sh \ # pd gcc install #TODO: need to add nusmuk/editor #------------------------------------------------------------------------------ # gem_install GEM_NAME = Gem gem_install: gem $(helpdir) install -d $(helpdir)/$(GEM_NAME) install -p $(gem_src)/help/*.* $(helpdir)/$(GEM_NAME) install -p $(gem_src)/abstractions/*-help.pd $(helpdir) install -d $(objectsdir)/$(GEM_NAME) install -p $(shell ls -1 $(gem_src)/abstractions/*.* | \ grep -v '\-help.pd') $(objectsdir) install -d $(manualsdir)/$(GEM_NAME) install -p $(gem_src)/doc/*.* $(manualsdir)/$(GEM_NAME) install -d $(manualsdir)/$(GEM_NAME)/manual install -p $(gem_src)/manual/*.* $(manualsdir)/$(GEM_NAME)/manual for dir in $(shell ls -1 $(gem_src)/examples | grep -v CVS); do \ echo "installing $$dir"; \ install -d $(examplesdir)/$(GEM_NAME)/$$dir ; \ install -p $(gem_src)/examples/$$dir/*.* $(examplesdir)/$(GEM_NAME)/$$dir ; \ done #------------------------------------------------------------------------------ # noncvs_install # this is for including pre-compiled binaries in a build noncvs_install: -install -p $(packages_src)/noncvs/$(OS_NAME)/bin/*.* $(bindir) -install -p $(packages_src)/noncvs/$(OS_NAME)/doc/5.reference/*.* \ $(helpdir) -install -p $(packages_src)/noncvs/$(OS_NAME)/extra/*.* $(objectsdir) #------------------------------------------------------------------------------ # pd_install PD_NAME=Pd pd_install: pd cd $(pd_src)/src && \ make $(PD_DEST_PATHS) $(PD_EXTRA_FLAGS) install install -d $(manualsdir)/$(PD_NAME) install -p $(pd_src)/src/notes.txt $(manualsdir)/$(PD_NAME) #==============================================================================# # # GENERATE TEXT FILES FOR PACKAGE # #==============================================================================# LICENSE_FILE = $(manualsdir)/$(PD_NAME)/License.html license_install: # generate HTML version of License install -d $(manualsdir)/$(PD_NAME) touch $(LICENSE_FILE) echo "" >> "$(LICENSE_FILE)" echo "

(Parts of this package can be used under " >> "$(LICENSE_FILE)" echo "Pd"s BSD license)

" >> "$(LICENSE_FILE)" echo "" >> "$(LICENSE_FILE)" cat "$(externals_src)/creb/COPYING" | sed -e 's/^$$/\/g' >> "$(LICENSE_FILE)" echo "" >> $(LICENSE_FILE) # Pd's license file install -p "$(pd_src)/LICENSE.txt" "$(manualsdir)/$(PD_NAME)/PD LICENSE.txt" WELCOME_FILE = $(manualsdir)/$(PD_NAME)/Welcome.html welcome_install: install -d $(manualsdir)/$(PD_NAME) touch $(WELCOME_FILE) echo "

" >> $(WELCOME_FILE) echo "

" >> $(WELCOME_FILE) echo "

Version $(PD_VERSION)

" >> $(WELCOME_FILE) echo "

written by Miller S. Puckette

" >> $(WELCOME_FILE) echo "" >> $(WELCOME_FILE) echo "

`grep -A9 ACKNOWLEDG $(pd_src)/README.txt`

" >> $(WELCOME_FILE) echo "
" >> $(WELCOME_FILE) echo "" >> $(WELCOME_FILE) README_FILE = $(manualsdir)/$(PD_NAME)/ReadMe.html readme_install: install -d $(manualsdir)/$(PD_NAME) echo $(CYCLONE_RELEASE) -rm $(README_FILE) touch $(README_FILE) echo "" >> $(README_FILE) echo "" >> $(README_FILE) echo "" >> $(README_FILE) echo "" >> $(README_FILE) echo "" >> $(README_FILE) echo "

Pure Data $(PD_VERSION)-$(PACKAGE_VERSION)

" >> $(README_FILE) echo "

Pd is a free real-time computer music software package resembling Max. It provides a patchable environment for audio analysis, synthesis, and processing, with a rich set of multimedia capabilities. You can get Pd for Linux, Windows, MacOS X, BSD, or IRIX.

" >> $(README_FILE) echo "

For more information, go to: http://puredata.org

" >> $(README_FILE) echo "

Installation

" >> $(README_FILE) echo "

To install Pd, drag the Pd.app to anywhere in your hard disk.

" >> $(README_FILE) echo "

To install Gem, pmpd, xsample, dyn~, and vasp support, copy org.puredata.pd.plist to ~/Library/Preferences (~ means your home folder). WARNING: this will overwrite any existing Pd preferences!

" >> $(README_FILE) echo "

Pure Data CVS Developers

" >> $(README_FILE) # this may seem whack, but it generates the list of developers from the SourceForge site: curl 'http://sourceforge.net/project/memberlist.php?group_id=55736' | grep -A2 -e '' | sed 's|\(href="\)|target="w" \1http://sourceforge.net|' >> $(README_FILE) echo "

" >> $(README_FILE) echo "

" >> $(README_FILE) echo "Many others not listed have contributed their time and effort, this is just a list of the current developers in the SourceForge project. But really, every Pd user is a developer and is encouraged to contribute to the CVS repository." >> $(README_FILE) echo "

" >> $(README_FILE) echo "

License

" >> $(README_FILE) echo "

" >> $(README_FILE) echo "The Pd core is licensed under a BSD license, almost every other part of this package is available under the GNU GPL. A couple packages have BSD-style licenses too." >> $(README_FILE) echo "

" >> $(README_FILE) echo "

Included Versions

" >> $(README_FILE) echo "

These externals are all included from the Pd CVS repository:

" >> $(README_FILE) echo "" >> $(README_FILE) echo "(this package was built on `date`)
" >> $(README_FILE) echo "" >> $(README_FILE) #==============================================================================# # ## FINAL ASSEMBLY # #==============================================================================# #---------------------------------------------------------------------------- # DOC_FORMAT doc_format: # clean out cruft files -find $(prefix) -name .DS_Store -delete -find $(prefix) -name '*.*.bak' -delete # run script to move help-*.pd files to *-help.pd according to the standard cd $(helpdir) && \ $(scripts_src)/convert-help-to-standard.sh cd $(helpdir)/iemabs && \ $(scripts_src)/convert-help-to-standard.sh # remove write perms to prevent people form editing the helpfiles by mistake find $(pddocdir) -name '*.pd' -print0 | xargs -0 chmod a-wx find $(pddocdir) -name '*.txt' -print0 | xargs -0 chmod a-wx #==============================================================================# # # DEVELOPER TARGETS # #==============================================================================# devsymlinks: patch_pd: @echo pd_src $(pd_src) # change Pd's version number to reflect the extended build cd $(pd_src)/src/ && \ sed 's/\(pd_version\[\] = "Pd version \)[0-9extndRC.-]*/\1$(PD_VERSION)-$(PACKAGE_VERSION)/' s_main.c > s_main.c.tmp && \ mv s_main.c.tmp s_main.c # apply all platform-neutral patches for patch in $(wildcard $(CWD)/patches/*.patch); do \ echo "Applying $$patch"; \ cd $(pd_src)/src/ && patch -p0 < $$patch; \ done # apply all platform-specific patches for patch in $(wildcard $(CWD)/patches/$(OS_NAME)/*.patch); do \ echo "Applying $$patch"; \ cd $(pd_src)/src/ && patch -p0 < $$patch; \ done -rm -f -- $(pd_src)/src/configure $(pd_src)/src/makefile @echo " " @echo "patching succeeded!" unpatch_pd: # this sed pattern won't work with TEST versions cd $(pd_src)/src && \ sed 's/\(pd_version\[\] = "Pd version [0-9]\.[0-9]*[.-][0-9]*\)[0-9extndRC.-]*/\1/' \ s_main.c > s_main.c.tmp && \ mv s_main.c.tmp s_main.c # apply all platform-neutral patches for patch in $(wildcard $(CWD)/patches/*.patch); do \ echo "Applying $$patch"; \ cd $(pd_src)/src/ && patch -p0 -R < $$patch; \ done # apply all platform-specific patches for patch in $(wildcard $(CWD)/patches/$(OS_NAME)/*.patch); do \ echo "Applying $$patch"; \ cd $(pd_src)/src/ && patch -p0 -R < $$patch; \ done -rm -f -- $(pd_src)/src/configure $(pd_src)/src/makefile @echo " " @echo "unpatching succeeded!" #==============================================================================# # # CLEAN TARGETS # #==============================================================================# abstractions_clean: -cd $(abstractions_src) && make $(DEST_PATHS) clean doc_clean: externals_clean: -cd $(externals_src) && make $(DEST_PATHS) clean flext_clean: gem_clean: pd_clean: -cd $(pd_src) && make $(PD_DEST_PATHS) clean # these targets are all from Makefile.buildlayout: install_clean cruft_clean clean: abstractions_clean doc_clean externals_clean flext_clean clean: gem_clean pd_clean echo "Complete clean finished." distclean: clean cruft_clean