From c67180156bb011ebe9a0524757052a28a6c62692 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 21 Nov 2005 04:39:02 +0000 Subject: Lots of changes, got the first complete(-ish) build with the new extended build system. I left as much of the old functionality in place as possible, definitely were it was being used. But there are some changes that break backwards compatibility, thought they should be noticed by few, and be easy to fix going forward. Some highlights: - centralized patch system (packages/patches with targets patch_pd and unpatch_pd) - easily redirected builds, using INSTALL_PREFIX and all of the *_DEST variables. This makes building packages like Pd.app, .deb, .rpm, etc. much easier. - libdir format: basically a libdir is a directory that has both the objects and the help files together in one folder. It can be added using -lib or the StartUp preferences, or you can access them via geiger namespaces, i.e. [mylibrary/myobject]. - special characters allow in setup function/file names for objects. This makes objects like [||~] possible without having to be in a library. Now they can be either .pd files or individual .pd_darwin files (thanks IOhannes for the patch). svn path=/trunk/; revision=3993 --- packages/Makefile | 322 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 313 insertions(+), 9 deletions(-) (limited to 'packages/Makefile') diff --git a/packages/Makefile b/packages/Makefile index 21d7cb96..72d94f68 100644 --- a/packages/Makefile +++ b/packages/Makefile @@ -2,7 +2,8 @@ # # Centralized cross-platform build system # -# see README for instructions +# see for instructions: http://puredata.org/docs/developer/build +# # #==============================================================================# @@ -14,11 +15,92 @@ BUILDLAYOUT_DIR = $(CWD) # default target -all: abstractions doc externals flext gem pd +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 +# +#==============================================================================# + + +PD_MAJOR_VERSION := $(shell /usr/bin/grep 'Pd version' $(PD_SRC)/src/s_main.c | \ + sed 's/char pd_version\[\] = "Pd version \([0-9]\)\.[0-9]*[. TES]*[0-9]*[0-9extndRC.-]*\\n";/\1/') +PD_MINOR_VERSION := $(shell /usr/bin/grep 'Pd version' $(PD_SRC)/src/s_main.c | \ + sed 's/char pd_version\[\] = "Pd version [0-9]\.\([0-9]*\)[. TES]*\([0-9]*\)[0-9extndRC.-]*\\n";/\1/') +PD_BUGFIX_VERSION := $(shell /usr/bin/grep 'Pd version' $(PD_SRC)/src/s_main.c | \ + sed 's/char pd_version\[\] = "Pd version [0-9]\.[0-9]*[. TES]*\([0-9]*\)[0-9extndRC.-]*\\n";/\1/') +PD_VERSION = $(PD_MAJOR_VERSION).$(PD_MINOR_VERSION)-$(PD_BUGFIX_VERSION) + + +# release version for this distro +PACKAGE_VERSION = extended-RC3 +PACKAGE_NAME = Pd-$(PD_VERSION)-$(PACKAGE_VERSION) +DMG_NAME = $(PACKAGE_NAME) + + +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) \ @@ -26,6 +108,7 @@ DEST_PATHS = BUILDLAYOUT_DIR=$(BUILDLAYOUT_DIR) \ INSTALL_PREFIX=$(INSTALL_PREFIX) \ UNAME=$(UNAME) + #==============================================================================# # # BUILD TARGETS @@ -51,7 +134,13 @@ externals: #------------------------------------------------------------------------------ # 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 @@ -60,7 +149,44 @@ gem: #------------------------------------------------------------------------------ # 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) + LIBPD_DEST = $(INSTALL_PREFIX) + LIBBIN_DEST = $(BIN_DEST) +else + ifeq ($(OS_NAME),win) + LIBPD_DEST = $(INSTALL_PREFIX) + LIBBIN_DEST = $(BIN_DEST) + else + LIBPD_DEST = $(INSTDIR)/lib/pd + LIBBIN_DEST = $(LIB_DEST)/pd/bin + endif +endif + +PD_DEST_PATHS = $(DEST_PATHS) DESTDIR=$(DESTDIR) \ + LIBPD_DEST=$(LIBPD_DEST) \ + LIBBIN_DEST=$(LIBBIN_DEST) + +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 "DESTDIR $(DESTDIR) LIBBIN_DEST $(LIBBIN_DEST)" + 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) + #==============================================================================# # @@ -75,7 +201,8 @@ abstractions_install: #------------------------------------------------------------------------------ # doc -doc_install: +doc_install: + cd $(DOC_SRC) && make $(DEST_PATHS) install #------------------------------------------------------------------------------ @@ -87,6 +214,14 @@ externals_install: #------------------------------------------------------------------------------ # flext_install flext_install: +# 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 #------------------------------------------------------------------------------ @@ -96,17 +231,182 @@ gem_install: #------------------------------------------------------------------------------ # pd -pd_install: +pd_install: pd + cd $(PD_SRC)/src && \ + make $(PD_DEST_PATHS) $(PD_EXTRA_FLAGS) install #------------------------------------------------------------------------------ # install -install: abstractions_install doc_install externals_install flext_install -install: gem_install pd_install +install: pd_install abstractions_install doc_install externals_install +#install: flext_install gem_install @echo "Complete install succeeded!" + + +#==============================================================================# +# +# GENERATE TEXT FILES FOR PACKAGE +# #==============================================================================# + +LICENSE_FILE = $(INSTALL_PREFIX)/License.html +license: + # generate HTML version of License + touch $(LICENSE_FILE) + echo "" >> "$(LICENSE_FILE)" + echo "

(Parts of this package can be used under the Pd/BSD license)

" >> "$(LICENSE_FILE)" + echo "" >> "$(LICENSE_FILE)" + cat "$(EXTERNALS_SRC)/creb/COPYING" | sed -e 's/^$$/\/g' >> "$(LICENSE_FILE)" + echo "" >> $(LICENSE_FILE) + install -p "$(PD_SRC)/LICENSE.txt" "$(INSTALL_PREFIX)/PD LICENSE.txt" + + + +WELCOME_FILE = $(INSTALL_PREFIX)/Welcome.html +welcome: + 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 = $(INSTALL_PREFIX)/ReadMe.html +readme: + 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 "
  • pure data: $(PD_VERSION) " >> $(README_FILE) + echo "
  • cyclone: $(CYCLONE_VERSION)" >> $(README_FILE) + echo "
  • flext: $(FLEXT_VERSION)" >> $(README_FILE) + echo "
  • gem: $(GEM_VERSION)" >> $(README_FILE) + echo "
  • iemlib: `date +20%y.%m.%d`" >> $(README_FILE) +# +# these cause this error: +# Makefile:308: *** unterminated call to function `shell': missing `)'. Stop. +# + echo "
  • maxlib: $(MAXLIB_VERSION)" >> $(README_FILE) + echo "
  • osc: $(OSC_VERSION)" >> $(README_FILE) + echo "
  • pmpd: $(PMPD_VERSION)" >> $(README_FILE) + echo "
  • pd-abstractions: `date +20%y.%m.%d`" >> $(README_FILE) + echo "
  • pd-doc: `date +20%y.%m.%d`" >> $(README_FILE) + echo "
  • pd-externals: `date +20%y.%m.%d`" >> $(README_FILE) + echo "
  • pddp: `date +20%y.%m.%d`" >> $(README_FILE) + echo "
  • pdp: $(PDP_VERSION)" >> $(README_FILE) + echo "
  • toxy: $(TOXY_VERSION)" >> $(README_FILE) + echo "
  • unauthorized: `date +20%y.%m.%d`" >> $(README_FILE) + echo "
  • zexy: $(ZEXY_VERSION)" >> $(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 $(INSTALL_PREFIX) -name .DS_Store -delete + -find $(INSTALL_PREFIX) -name '*.*.bak' -delete +# run script to move help-*.pd files to *-help.pd according to the standard + cd $(DOCS_DEST) && \ + $(SCRIPTS_SRC)/convert-help-to-standard.sh +#---------------------------------------------------------------------------- +# remove write perms to prevent people form editing the helpfiles by mistake + cd $(DOCS_DEST) && chmod a-wx */*.pd */*/*.pd + cd $(DOCS_DEST) && chmod a-w ????*/*.* *.txt + + + +#==============================================================================# +# +# DEVELOPER TARGETS +# +#==============================================================================# + +devsymlinks: + + + +patch_pd: +# change Pd's version number to reflect the extended build + sed -i.bak 's/\(pd_version\[\] = "Pd version \)[0-9extndRC.-]*/\1$(PD_VERSION)-$(PACKAGE_VERSION)/' $(PD_SRC)/src/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 -i.bak 's/\(pd_version\[\] = "Pd version [0-9.]*\)[0-9extndRC.-]*/\1/' \ + 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 @@ -126,9 +426,13 @@ gem_clean: pd_clean: + -cd $(PD_SRC) && make $(PD_DEST_PATHS) clean + -# these targets are all from Makefile.buildlayout: -# install_clean cruft_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 -- cgit v1.2.1