From f50b0bb6d68567afac0d59b65609ecb2b921d669 Mon Sep 17 00:00:00 2001 From: Sojourner Truth <jon.w.wilkes@gmail.com> Date: Sun, 7 Aug 2016 17:07:36 -0400 Subject: [PATCH] move rjlib into externals, add new fluid~ lib to externals --- externals/Makefile | 41 +- externals/fluid~/LICENSE | 16 + externals/fluid~/Makefile.pdlibbuilder | 1207 +++++++++++++++++ externals/fluid~/README | 9 + externals/fluid~/ezdac~.pd | 32 + externals/fluid~/fluid.gen.txt | 61 + externals/fluid~/fluid.gen2sym.pd | 55 + externals/fluid~/fluid.pd | 123 ++ externals/fluid~/fluid~-help.pd | 200 +++ externals/fluid~/fluid~.c | 254 ++++ externals/fluid~/makefile | 11 + externals/fluid~/simple_onthego_synth.pd | 39 + {l2ork_addons => externals}/rjlib/Makefile | 0 {l2ork_addons => externals}/rjlib/README | 0 .../rjlib/abs/reverb-echo.pd | 0 .../rjlib/accelerate.pd | 0 .../rjlib/analysepitch.pd | 0 .../rjlib/analysesimpleonset.pd | 0 {l2ork_addons => externals}/rjlib/hilbert~.pd | 0 {l2ork_addons => externals}/rjlib/playback.pd | 0 {l2ork_addons => externals}/rjlib/recorder.pd | 0 {l2ork_addons => externals}/rjlib/reverb.pd | 0 .../rjlib/rj/OVERVIEW.pd | 0 {l2ork_addons => externals}/rjlib/rj/c.txt | 0 .../rjlib/rj/c_adsr-help.pd | 0 .../rjlib/rj/c_adsr.pd | 0 .../rjlib/rj/c_adsrj-help.pd | 0 .../rjlib/rj/c_adsrj.pd | 0 .../rjlib/rj/c_mphasor-help.pd | 0 .../rjlib/rj/c_mphasor.pd | 0 .../rjlib/rj/c_multimetro-help.pd | 0 .../rjlib/rj/c_multimetro.pd | 0 .../rjlib/rj/c_xfade-help.pd | 0 .../rjlib/rj/c_xfade.pd | 0 {l2ork_addons => externals}/rjlib/rj/e.txt | 0 .../rjlib/rj/e_alias-help.pd | 0 .../rjlib/rj/e_alias.pd | 0 .../rjlib/rj/e_chorus-help.pd | 0 .../rjlib/rj/e_chorus.pd | 0 .../rjlib/rj/e_chorusr-help.pd | 0 .../rjlib/rj/e_chorusr.pd | 0 .../rjlib/rj/e_fbdelay-help.pd | 0 .../rjlib/rj/e_fbdelay.pd | 0 .../rjlib/rj/e_fbdelay2.pd | 0 .../rjlib/rj/e_freqshift-help.pd | 0 .../rjlib/rj/e_freqshift.pd | 0 .../rjlib/rj/e_pan-help.pd | 0 {l2ork_addons => externals}/rjlib/rj/e_pan.pd | 0 .../rjlib/rj/e_phaser-help.pd | 0 .../rjlib/rj/e_phaser.pd | 0 .../rjlib/rj/e_pingpong-help.pd | 0 .../rjlib/rj/e_pingpong.pd | 0 .../rjlib/rj/e_pitchshift-help.pd | 0 .../rjlib/rj/e_pitchshift.pd | 0 .../rjlib/rj/e_reslop-help.pd | 0 .../rjlib/rj/e_reslop.pd | 0 .../rjlib/rj/e_reverb-help.pd | 0 .../rjlib/rj/e_reverb.pd | 0 .../rjlib/rj/e_softclip-help.pd | 0 .../rjlib/rj/e_softclip.pd | 0 .../rjlib/rj/e_vocoder-help.pd | 0 .../rjlib/rj/e_vocoder.pd | 0 {l2ork_addons => externals}/rjlib/rj/jon~.pd | 0 {l2ork_addons => externals}/rjlib/rj/m.txt | 0 .../rjlib/rj/m_bpm2ms-help.pd | 0 .../rjlib/rj/m_bpm2ms.pd | 0 .../rjlib/rj/m_scale-help.pd | 0 .../rjlib/rj/m_scale.pd | 0 .../rjlib/rj/m_speedlimit-help.pd | 0 .../rjlib/rj/m_speedlimit.pd | 0 .../rjlib/rj/rjdispatch-help.pd | 0 .../rjlib/rj/rjdispatch.pd | 0 .../rjlib/rj/rjloader-help.pd | 0 .../rjlib/rj/rjloader.pd | 0 {l2ork_addons => externals}/rjlib/rj/s.txt | 0 .../rjlib/rj/s_blsaw-help.pd | 0 .../rjlib/rj/s_blsaw.pd | 0 .../rjlib/rj/s_blsquare-help.pd | 0 .../rjlib/rj/s_blsquare.pd | 0 .../rjlib/rj/s_buzz-help.pd | 0 .../rjlib/rj/s_buzz.pd | 0 .../rjlib/rj/s_fplaytable.pd | 0 .../rjlib/rj/s_fplaytable2.pd | 0 .../rjlib/rj/s_guitar-help.pd | 0 .../rjlib/rj/s_guitar.pd | 0 .../rjlib/rj/s_looper-help.pd | 0 .../rjlib/rj/s_looper.pd | 0 .../rjlib/rj/s_playtable-help.pd | 0 .../rjlib/rj/s_playtable.pd | 0 .../rjlib/rj/s_playtable2-help.pd | 0 .../rjlib/rj/s_playtable2.pd | 0 .../rjlib/rj/s_rhodey-help.pd | 0 .../rjlib/rj/s_rhodey.pd | 0 {l2ork_addons => externals}/rjlib/rj/sssad.pd | 0 {l2ork_addons => externals}/rjlib/rj/u.txt | 0 .../rjlib/rj/u_fade-help.pd | 0 .../rjlib/rj/u_fade.pd | 0 .../rjlib/rj/u_record-help.pd | 0 .../rjlib/rj/u_record.pd | 0 .../rjlib/rj/u_samplebank-help.pd | 0 .../rjlib/rj/u_samplebank.pd | 0 .../rjlib/rj/u_samplebank2-help.pd | 0 .../rjlib/rj/u_samplebank2.pd | 0 .../rjlib/rj/u_splicetrans-help.pd | 0 .../rjlib/rj/u_splicetrans.pd | 0 .../rjlib/rj/u_stereo-help.pd | 0 .../rjlib/rj/u_stereo.pd | 0 .../rjlib/rjXYZshake-help.pd | 0 .../rjlib/rjXYZshake.pd | 0 {l2ork_addons => externals}/rjlib/rj_fft.pd | 0 .../rjlib/rjdispatch-help.pd | 0 .../rjlib/rjdispatch.pd | 0 .../rjlib/rjloader-help.pd | 0 {l2ork_addons => externals}/rjlib/rjloader.pd | 0 .../rjlib/rjsave-ex-help.pd | 0 .../rjlib/rjsave-ex.pd | 0 .../rjlib/soundinput.pd | 0 .../rjlib/soundoutput.pd | 0 .../rjlib/src/makefile | 0 .../rjlib/src/makefile_mingw | 0 .../rjlib/src/rj_accum-help.pd | 0 .../rjlib/src/rj_accum.c | 0 .../rjlib/src/rj_barkflux_accum~-help.pd | 0 .../rjlib/src/rj_barkflux_accum~.c | 0 .../rjlib/src/rj_centroid~-help.pd | 0 .../rjlib/src/rj_centroid~.c | 0 .../rjlib/src/rj_senergy~-help.pd | 0 .../rjlib/src/rj_senergy~.c | 0 .../rjlib/src/rj_zcr~-help.pd | 0 .../rjlib/src/rj_zcr~.c | 0 {l2ork_addons => externals}/rjlib/sssad.pd | 0 {l2ork_addons => externals}/rjlib/touch.pd | 0 l2ork_addons/tar_em_up.sh | 2 - 133 files changed, 2039 insertions(+), 11 deletions(-) create mode 100644 externals/fluid~/LICENSE create mode 100644 externals/fluid~/Makefile.pdlibbuilder create mode 100644 externals/fluid~/README create mode 100644 externals/fluid~/ezdac~.pd create mode 100644 externals/fluid~/fluid.gen.txt create mode 100644 externals/fluid~/fluid.gen2sym.pd create mode 100644 externals/fluid~/fluid.pd create mode 100644 externals/fluid~/fluid~-help.pd create mode 100644 externals/fluid~/fluid~.c create mode 100755 externals/fluid~/makefile create mode 100644 externals/fluid~/simple_onthego_synth.pd rename {l2ork_addons => externals}/rjlib/Makefile (100%) rename {l2ork_addons => externals}/rjlib/README (100%) rename {l2ork_addons => externals}/rjlib/abs/reverb-echo.pd (100%) rename {l2ork_addons => externals}/rjlib/accelerate.pd (100%) rename {l2ork_addons => externals}/rjlib/analysepitch.pd (100%) rename {l2ork_addons => externals}/rjlib/analysesimpleonset.pd (100%) rename {l2ork_addons => externals}/rjlib/hilbert~.pd (100%) rename {l2ork_addons => externals}/rjlib/playback.pd (100%) rename {l2ork_addons => externals}/rjlib/recorder.pd (100%) rename {l2ork_addons => externals}/rjlib/reverb.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/OVERVIEW.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/c.txt (100%) rename {l2ork_addons => externals}/rjlib/rj/c_adsr-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/c_adsr.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/c_adsrj-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/c_adsrj.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/c_mphasor-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/c_mphasor.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/c_multimetro-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/c_multimetro.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/c_xfade-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/c_xfade.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e.txt (100%) rename {l2ork_addons => externals}/rjlib/rj/e_alias-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_alias.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_chorus-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_chorus.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_chorusr-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_chorusr.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_fbdelay-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_fbdelay.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_fbdelay2.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_freqshift-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_freqshift.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_pan-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_pan.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_phaser-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_phaser.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_pingpong-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_pingpong.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_pitchshift-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_pitchshift.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_reslop-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_reslop.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_reverb-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_reverb.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_softclip-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_softclip.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_vocoder-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/e_vocoder.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/jon~.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/m.txt (100%) rename {l2ork_addons => externals}/rjlib/rj/m_bpm2ms-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/m_bpm2ms.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/m_scale-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/m_scale.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/m_speedlimit-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/m_speedlimit.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/rjdispatch-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/rjdispatch.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/rjloader-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/rjloader.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s.txt (100%) rename {l2ork_addons => externals}/rjlib/rj/s_blsaw-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_blsaw.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_blsquare-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_blsquare.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_buzz-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_buzz.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_fplaytable.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_fplaytable2.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_guitar-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_guitar.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_looper-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_looper.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_playtable-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_playtable.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_playtable2-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_playtable2.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_rhodey-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/s_rhodey.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/sssad.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/u.txt (100%) rename {l2ork_addons => externals}/rjlib/rj/u_fade-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/u_fade.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/u_record-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/u_record.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/u_samplebank-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/u_samplebank.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/u_samplebank2-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/u_samplebank2.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/u_splicetrans-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/u_splicetrans.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/u_stereo-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rj/u_stereo.pd (100%) rename {l2ork_addons => externals}/rjlib/rjXYZshake-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rjXYZshake.pd (100%) rename {l2ork_addons => externals}/rjlib/rj_fft.pd (100%) rename {l2ork_addons => externals}/rjlib/rjdispatch-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rjdispatch.pd (100%) rename {l2ork_addons => externals}/rjlib/rjloader-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rjloader.pd (100%) rename {l2ork_addons => externals}/rjlib/rjsave-ex-help.pd (100%) rename {l2ork_addons => externals}/rjlib/rjsave-ex.pd (100%) rename {l2ork_addons => externals}/rjlib/soundinput.pd (100%) rename {l2ork_addons => externals}/rjlib/soundoutput.pd (100%) rename {l2ork_addons => externals}/rjlib/src/makefile (100%) rename {l2ork_addons => externals}/rjlib/src/makefile_mingw (100%) rename {l2ork_addons => externals}/rjlib/src/rj_accum-help.pd (100%) rename {l2ork_addons => externals}/rjlib/src/rj_accum.c (100%) rename {l2ork_addons => externals}/rjlib/src/rj_barkflux_accum~-help.pd (100%) rename {l2ork_addons => externals}/rjlib/src/rj_barkflux_accum~.c (100%) rename {l2ork_addons => externals}/rjlib/src/rj_centroid~-help.pd (100%) rename {l2ork_addons => externals}/rjlib/src/rj_centroid~.c (100%) rename {l2ork_addons => externals}/rjlib/src/rj_senergy~-help.pd (100%) rename {l2ork_addons => externals}/rjlib/src/rj_senergy~.c (100%) rename {l2ork_addons => externals}/rjlib/src/rj_zcr~-help.pd (100%) rename {l2ork_addons => externals}/rjlib/src/rj_zcr~.c (100%) rename {l2ork_addons => externals}/rjlib/sssad.pd (100%) rename {l2ork_addons => externals}/rjlib/touch.pd (100%) diff --git a/externals/Makefile b/externals/Makefile index 93922a2fc..34188f878 100644 --- a/externals/Makefile +++ b/externals/Makefile @@ -128,7 +128,7 @@ CXXFLAGS = $(CFLAGS) # # WARNING! this MUST be all on one line because the automatic package # building scripts rely on it being that way. -LIB_TARGETS = adaptive arraysize autotune bassemu boids bsaylor comport creb cxc cyclone disis earplug ekext ext13 fftease freeverb ggee hcs iem_ambi iem_bin_ambi iemlib iemgui iemguts iem_adaptfilt iemmatrix iemxmlrpc iem_delay iem_roomsim iem_spec2 iem_tab jasch_lib loaders-hexloader loaders-libdir lyonpotpourri mapping markex maxlib mjlib moocow moonlib motex mrpeach oscx pan pdcontainer pddp pdogg plugin pmpd rtcmix sigpack smlib tof unauthorized vbap windowing zexy flext +LIB_TARGETS = adaptive arraysize autotune bassemu boids bsaylor comport creb cxc cyclone disis earplug ekext ext13 fftease fluid freeverb ggee hcs iem_ambi iem_bin_ambi iemlib iemgui iemguts iem_adaptfilt iemmatrix iemxmlrpc iem_delay iem_roomsim iem_spec2 iem_tab jasch_lib loaders-hexloader loaders-libdir lyonpotpourri mapping markex maxlib mjlib moocow moonlib motex mrpeach oscx pan pdcontainer pddp pdogg plugin pmpd rjlib rtcmix sigpack smlib tof unauthorized vbap windowing zexy flext # DISABLED: flatgui @@ -448,6 +448,8 @@ cyclone_clean: #------------------------------------------------------------------------------# # DISIS disis: + cd $(externals_src)/disis/cwiid && aclocal && autoconf && \ + ./configure --with-python=python2 && make make -C $(externals_src)/disis PD_PATH=$(pd_src) disis_install: @@ -456,6 +458,7 @@ disis_install: install disis_clean: + make -C $(externals_src)/disis/cwiid clean make -C $(externals_src)/disis clean #------------------------------------------------------------------------------# @@ -534,9 +537,9 @@ flext: ./build.sh pd gcc install #fluid~ - cd footils/fluid && \ - ../../grill/trunk/flext/build.sh pd gcc build && \ - ../../grill/trunk/flext/build.sh pd gcc build +# cd footils/fluid && \ +# ../../grill/trunk/flext/build.sh pd gcc build && \ +# ../../grill/trunk/flext/build.sh pd gcc build #disis_munger~ cd ../l2ork_addons/disis_munger && \ @@ -548,9 +551,9 @@ flext_install: # so we only install statically linked externals #fluid~ - cd footils/fluid && \ - install -D pd-linux/release-multi/fluid~.pd_linux $(DESTDIR)$(objectsdir)/flext/fluid~.pd_linux && \ - install -D pd/* $(DESTDIR)$(objectsdir)/flext/ +# cd footils/fluid && \ +# install -D pd-linux/release-multi/fluid~.pd_linux $(DESTDIR)$(objectsdir)/flext/fluid~.pd_linux && \ +# install -D pd/* $(DESTDIR)$(objectsdir)/flext/ #disis_munger~ cd ../l2ork_addons/disis_munger && \ @@ -563,8 +566,8 @@ flext_clean: ./build.sh pd gcc clean #fluid~ - cd footils/fluid && \ - ../../grill/trunk/flext/build.sh pd gcc clean +# cd footils/fluid && \ +# ../../grill/trunk/flext/build.sh pd gcc clean #fluid~ cd ../l2ork_addons/disis_munger && \ @@ -596,7 +599,17 @@ flib_clean: -rm -f -- $(externals_src)/postlude/flib/*/*.bak -rm -f -- $(externals_src)/postlude/flib/*/*.*~ +#------------------------------------------------------------------------------# +# FLUID~ + +fluid: + make -C $(externals_src)/fluid~ PD_PATH=$(pd_src) + +fluid_install: + make -C $(externals_src)/fluid~ DESTDIR="$(DESTDIR)" \ + objectsdir="$(objectsdir)" install +fluid_clean: make -C $(externals_src)/fluid~ clean #------------------------------------------------------------------------------# # FRANKENSTEIN @@ -1625,6 +1638,16 @@ postlude_clean: -rm -f -- $(externals_src)/postlude/*/*.bak -rm -f -- $(externals_src)/postlude/*/*.*~ +#------------------------------------------------------------------------------# +# RJLIB + +rjlib: + +rjlib_install: + install -d $(DESTDIR)$(objectsdir)/rjlib + cp -rf $(externals_src)/rjlib/* $(DESTDIR)/$(objectsdir)/rjlib + +rjlib_clean: #------------------------------------------------------------------------------# # RTCMIX~ diff --git a/externals/fluid~/LICENSE b/externals/fluid~/LICENSE new file mode 100644 index 000000000..73edbfcb9 --- /dev/null +++ b/externals/fluid~/LICENSE @@ -0,0 +1,16 @@ +Copyright: Frank Barknecht , 2003 + Jonathan Wilkes, 2016 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. diff --git a/externals/fluid~/Makefile.pdlibbuilder b/externals/fluid~/Makefile.pdlibbuilder new file mode 100644 index 000000000..bb02fe103 --- /dev/null +++ b/externals/fluid~/Makefile.pdlibbuilder @@ -0,0 +1,1207 @@ +# Makefile.pdlibbuilder dated 2016-06-26 + +version = 0.2.5 + +# Helper makefile for Pure Data external libraries. +# Written by Katja Vetter March-June 2015 for the public domain. No warranties. +# Inspired by Hans Christoph Steiner's Makefile Template and Stephan Beal's +# ShakeNMake. +# +# GNU make version >= 3.81 required. +# +# +#=== characteristics =========================================================== +# +# +# - defines build settings based on autodetected OS and architecture +# - defines rules to build Pd class- or lib executables from C or C++ sources +# - defines rules for libdir installation +# - defines convenience targets for developer and user +# - evaluates implicit dependencies for non-clean builds +# +# +#=== basic usage =============================================================== +# +# +# In your Makefile, define your Pd lib name and class files, and include +# Makefile.pdlibbuilder at the end of the Makefile. Like so: +# +# ________________________________________________________________________ +# +# # Makefile for mylib +# +# lib.name = mylib +# +# class.sources = myclass1.c myclass2.c +# +# datafiles = myclass1-help.pd myclass2-help.pd README.txt LICENSE.txt +# +# include Makefile.pdlibbuilder +# ________________________________________________________________________ +# +# +# For files in class.sources it is assumed that class basename == source file +# basename. The default target builds all classes as individual executables +# with Pd's default extension for the platform. For anything more than the +# most basic usage, continue reading. +# +# +#=== list of Makefile.pdlibbuilder API variables =============================== +# +# +# Variables available for definition in your library Makefile: +# +# - lib.name +# - lib.setup.sources +# - class.sources +# - common.sources +# - shared.sources +# - <classname>.class.sources +# - <classname>.class.ldflags +# - <classname>.class.ldlibs +# - cflags +# - ldflags +# - ldlibs +# - datafiles +# - datadirs +# - makefiles +# - makefiledirs +# - externalsdir +# +# Optional multiline defines evaluated per operating system: +# +# - forLinux +# - forDarwin +# - forWindows +# +# +# Variables avaialable for (re)definition via command arguments: +# +# - pdbinpath (Windows only) +# - pdincludepath +# - DESTDIR +# - prefix +# - libdir +# - pkglibdir +# - CPPFLAGS +# - CFLAGS +# - LDFLAGS +# - CC +# - CXX +# - INSTALL +# - INSTALL_PROGRAM +# - INSTALL_DATA +# - INSTALL_DIR +# +# Variables available for your makefile or as command argument: +# +# - objectsdir +# - make-lib-executable +# - suppress-wunused +# +# +#=== descriptions of Makefile.pdlibbuilder API variables ======================= +# +# +# lib.name: +# Name of the library directory as it will be installed / distributed. Also the +# name of the lib executable in the case where all classes are linked into +# a single binary. +# +# lib.setup.sources: +# Source file(s) (C or C++) which must be compiled only when linking all classes +# into a single lib binary. +# +# class.sources: +# All sources files (C or C++) for which the condition holds that +# class name == source file basename. +# +# <classname>.class.sources: +# Source file(s) (C or C++) specific to class <classname>. Use this for +# multiple-source classes or when class name != source file basename. +# +# common.sources: +# Source file(s) which must be statically linked to each class in the library. +# +# shared.sources: +# Source file(s) (C or C++) to build a shared dynamic link lib, to be linked +# with all class executables. +# +# cflags, ldflags, ldlibs: +# Define cflags (preprocessor&compiler), ldflags (linker) and ldlibs (dynamic +# link libs) for the whole library. These flags are added to platform-specific +# flags defined by Makefile.pdlibbuilder. +# +# <classname>.class.ldflags and <classname>.class.ldlibs: +# Define ldflags resp. ldlibs specific to class <classname>. These flags are +# added to platform-specific flags defined by Makefile.pdlibbuilder, and flags +# defined in your Makefile for the whole library. Note: cflags can not be +# defined per class in the current implementation. +# +# datafiles and datadirs: +# All extra files you want to include in binary distributions of the +# library: abstractions and help patches, example patches, meta patch, readme +# and license texts, manuals, sound files, etcetera. Use 'datafiles' for all +# files that should go into your lib rootdir and 'datadirs' for complete +# directories you want to copy from source to distribution. +# +# externalsdir: +# Relative path to directory 'externals' in the context of pd-extended SVN, or +# any other centralized build layout for multiple libraries. Default value +# is '..', meaning the direct parent. The value is used in search paths for +# pd core components (header files, and executable in the case of Windows). +# +# forLinux, forDarwin, forWindows: +# Shorthand for 'variable definitions for Linux only' etc. Use like: +# define forLinux +# cflags += -DLINUX +# class.sources += linuxthing.c +# endef +# +# makefiles and makefiledirs: +# Extra makefiles or directories with makefiles that should be made in sub-make +# processes. +# +# pdbinpath: +# For Windows only. Directory where pd.dll can be found for linking. +# +# pdincludepath: +# Directory where Pd API m_pd.h can be found, and other Pd header files. +# +# DESTDIR, prefix, libdir: +# Components of the path for installation as conventionally used on Linux. +# +# pkglibdir: +# Base path for installation of Pd library directories. Default is specified +# per OS, see section about paths below. +# +# objectsdir: +# Alias of pkglibdir. Can be defined in your makefile to enable project- +# dependent relative install locations. +# +# CPPFLAGS: +# Preprocessor flags which are not strictly required for building. +# +# CFLAGS: +# Compiler flags which are not strictly required for building. Compiler flags +# defined by Makefile.pdlibbuilder for warning, optimization and architecture +# specification are overriden by CFLAGS. +# +# LDFLAGS: +# Linker flags which are not strictly required for building. Linker flags +# defined by Makefile.pdlibbuilder for architecture specification are overriden +# by LDFLAGS. +# +# CC and CXX: +# C and C++ compiler programs as defined in your build environment. +# +# INSTALL, INSTALL_PROGRAM, INSTALL_DATA, INSTALL_DIR: +# Definitions of install program, may be overriden via command argument. +# +# make-lib-executable: +# When this variable is defined 'yes' in your makefile or as command argument, +# Makefile.pdlibbuilder will try to build all classes into a single library +# executable (but it will force exit if lib.setup.sources is undefined). +# If your makefile defines 'make-lib-executable=yes' as the library default, +# this can still be overriden with 'make-lib-executable=no' as command argument +# to build individual class executables (the Makefile.pdlibbuilder default.) +# +# suppress-wunused: +# When this variable is defined ('yes' or any other value), -Wunused-variable, +# -Wunused-parameter, -Wunused-value and -Wunused-function are suppressed, +# but the other warnings from -Wall are retained. +# +# +#=== paths ===================================================================== +# +# +# Source files in directories other than current working directory must be +# prefixed with their relative path. Do not rely on VPATH or vpath. +# Object (.o) files are built in the directory of their source files. +# Executables are built in current working directory. +# +# Variable 'pdincludepath' stores a location where m_pd.h is expected to reside. +# Locations where Makefile.pdlibbuilder tries to find it, in order of priority: +# +# any OS: $(externalsdir)../pd/src +# +# Linux: /usr/include/pdextended +# /usr/include/pd +# +# OSX: /Applications/Pd-extended.app/Contents/Resources/include/pdextended +# /Applications/Pd.app/Contents/Resources/src +# +# Windows: %PROGRAMFILES%/pd/include/pdextended +# %PROGRAMFILES%/pd/src +# +# The path for installation of all library components is constructed as: +# +# installpath := $(DESTDIR)$(objectsdir)/$(lib.name) +# +# Default for 'objectsdir' is defined per platform and follows this convention: +# https://puredata.info/docs/faq/how-do-i-install-externals-and-help-files +# +# Linux: /usr/local/lib/pd-externals +# OSX: ~/Library/Pd +# Windows: %APPDATA%/Pd +# +# The rationale for not installing to ~/pd-externals by default on Linux +# is that some people share the home dir between 32 and 64 bit installations. +# +# +#=== targets =================================================================== +# +# +# all: build $(executables) plus optional post target +# post: target to build after $(executables) +# alldebug: build all with -g option turned on for debug symbols +# <classname>: force clean build of an individual class +# <sourcefile>.pre: make preprocessor output file in current working directory +# <sourcefile>.lst: make asm/source output file in current working directory +# +# install: install executables and data files +# clean: remove build products from source tree +# +# help: print help text +# vars: print makefile variables +# allvars: print all variables +# depend: print generated prerequisites +# coffee: dummy target +# +# Variable $(executables) expands to class executables plus optional shared lib, +# or alternatively to single lib executable when make-lib-executable=true. +# Targets pre and post can be defined by library makefile. Make sure to include +# Makefile.pdlibbuilder first so default target all will not be redefined. +# +# +#=== Pd-extended libdir concept ================================================ +# +# +# For libdir layout as conceived by Hans-Christoph Steiner, see: +# +# https://puredata.info/docs/developer/Libdir +# +# Files README.txt, LICENSE.txt and <lib.name>-meta.pd are part of the libdir +# convention. Help patches for each class and abstraction are supposed to be +# available. Makefile.pdlibbuilder does not force the presence of these files +# however. It does not automatically include such files in libdir installations. +# Data files you want to include in distributions must be defined explicitly in +# your Makefile. +# +# +#=== Makefile.pdlibbuilder syntax conventions ================================== +# +# +# Makefile.pdlibbuilder variable names are lower case. Default make variables, +# environment variables, and standard user variables (CC, CXX, CFLAGS, DESTDIR) +# are upper case. Use target 'allvars' to print all variables and their values. +# +# 'Fields' in data variables are separated by dots, like in 'foo.class.sources'. +# Words in variables expressing a function or command are separated by dashes, +# like in 'make-lib-executable'. +# +# +#=== useful make options ======================================================= +# +# +# Use 'make -d <target>' to print debug details of the make process. +# Use 'make -p <target>' to print make's database. +# +# +#=== TODO ====================================================================== +# +# +# - decide whether to use -static-libgcc or shared dll in MinGW +# - cygwin support +# - android support +# - Windows 64 bit support +# - figure out how to handle '$' in filenames +# - add makefile template targets dpkg-source dist libdir distclean tags? +# +# +#=== end of documentation sections ============================================= +# +# +################################################################################ +################################################################################ +################################################################################ + + +# GNU make version 3.81 (2006) or higher is required because of the following: +# - function 'info' +# - variable '.DEFAULT_GOAL' + +# force exit when make version is < 3.81 +ifneq ($(firstword $(sort 3.81 $(MAKE_VERSION))), 3.81) + $(error GNU make version 3.81 or higher is required) +endif + +# Relative path to externals root dir in multi-lib source tree like +# pd-extended SVN. Default is parent of current working directory. May be +# defined differently in including makefile. This variable is used to probe for +# paths. +externalsdir ?= .. + +# variable you can use to check if Makefile.pdlibbuilder is already included +Makefile.pdlibbuilder = true + + +################################################################################ +### variables: library name and version ######################################## +################################################################################ + + +# strip possibles spaces from lib.name, they mess up calculated file names +lib.name := $(strip $(lib.name)) + +# if meta file exists, check library version +metafile := $(wildcard $(lib.name)-meta.pd) + +ifdef metafile + lib.version := $(shell sed -n \ + 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' \ + $(metafile)) +endif + + +################################################################################ +### variables: files ########################################################### +################################################################################ + + +#=== sources =================================================================== + + +# (re)define <classname>.class.sources using file names in class.sources + +define add-class-source +$(notdir $(basename $v)).class.sources += $v +endef + +$(foreach v, $(class.sources), $(eval $(add-class-source))) + +# derive class names from <classname>.class.sources variables +sourcevariables := $(filter %.class.sources, $(.VARIABLES)) +classes := $(basename $(basename $(sourcevariables))) + +# accumulate all source files specified in makefile +classes.sources := $(sort $(foreach v, $(sourcevariables), $($v))) +all.sources := $(classes.sources) $(lib.setup.sources) \ + $(shared.sources) $(common.sources) + + +#=== object files ============================================================== + + +# construct object filenames from all C and C++ source file names +classes.objects := $(addsuffix .o, $(basename $(classes.sources))) +common.objects := $(addsuffix .o, $(basename $(common.sources))) +shared.objects := $(addsuffix .o, $(basename $(shared.sources))) +lib.setup.objects := $(addsuffix .o, $(basename $(lib.setup.sources))) +all.objects = $(classes.objects) $(common.objects) $(shared.objects) \ + $(lib.setup.objects) + + +#=== executables =============================================================== + + +# use recursive variables here because executable extension is not yet known + +# construct class executable names from class names +classes.executables = $(addsuffix .$(extension), $(classes)) + +# construct shared lib executable name if shared sources are defined +ifdef shared.sources + shared.lib = lib$(lib.name).$(shared.extension) +else + shared.lib = +endif + + +################################################################################ +### variables per platform ##################################################### +################################################################################ + + +#=== flags per architecture ==================================================== + + +# Set architecture-dependent cflags, mainly for Linux. For Mac and Windows, +# arch.c.flags are overriden below. + +machine := $(shell uname -m) + +# Raspberry Pi 1st generation +ifeq ($(machine), armv6l) + arch.c.flags = -march=armv6 -mfpu=vfp -mfloat-abi=hard +endif + +# Beagle, Udoo, RPi2 etc. +ifeq ($(machine), armv7l) + arch.c.flags = -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard +endif + +# Intel 32 bit, build with SSE and SSE2 instructions +ifeq ($(findstring $(machine), i386 i686), $(machine)) + arch.c.flags = -march=pentium4 -mfpmath=sse -msse -msse2 +endif + +# Intel/AMD 64 bit, build with SSE, SSE2 and SSE3 instructions +ifeq ($(findstring $(machine), ia64 x86_64), $(machine)) + arch.c.flags = -march=core2 -mfpmath=sse -msse -msse2 -msse3 +endif + + +#=== operating system ========================================================== + + +# The following systems are defined: Linux, Darwin, Windows. GNU and +# GNU/kFreeBSD are treated as Linux to get the same options. System-specific +# multiline defines (optionally set in library makefile) are conditionally +# evaluated here. + +uname := $(shell uname) + +ifeq ($(findstring $(uname), Linux GNU GNU/kFreeBSD), $(uname)) + system = Linux + $(eval $(forLinux)) +endif + +ifeq ($(uname), Darwin) + system = Darwin + $(eval $(forDarwin)) +endif + +ifeq ($(findstring MINGW, $(uname)), MINGW) + system = Windows + $(eval $(forWindows)) +endif + +# TODO: Cygwin, Android + + +#=== flags and paths for Linux ================================================= + + +ifeq ($(system), Linux) + prefix = /usr/local + libdir := $(prefix)/lib + pkglibdir = $(libdir)/pd-externals + pdincludepath := $(firstword $(wildcard \ + $(externalsdir)/../pd/src \ + /usr/include/pdextended \ + /usr/include/pd)) + extension = pd_linux + cpp.flags := -DUNIX + c.flags := -fpic + c.ldflags := -rdynamic -shared -fpic -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags + c.ldlibs := -lc -lm + cxx.flags := -fpic -fcheck-new + cxx.ldflags := -rdynamic -shared -fpic -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags + cxx.ldlibs := -lc -lm -lstdc++ + shared.extension = so + shared.ldflags := -rdynamic -fpic -shared -Wl,-soname,$(shared.lib) + stripflags = --strip-unneeded -R .note -R .comment +endif + + +#=== flags and paths for Darwin ================================================ + + +# On OSX we try to build fat binaries by default. It is assumed that OSX i386 +# can build for ppc and OSX x86_64 can't. TODO: try to refine this condition. +# LLVM-clang doesn't support -fcheck-new, therefore this flag is omitted for +# OSX x86_64. + +ifeq ($(system), Darwin) + pkglibdir = $(HOME)/Library/Pd + pdincludepath := $(firstword $(wildcard \ + $(externalsdir)/../pd/src \ + /Applications/Pd-extended*.app/Contents/Resources/include/pdextended \ + /Applications/Pd*.app/Contents/Resources/src)) + extension = pd_darwin + cpp.flags := -DUNIX -DMACOSX -I /sw/include + c.flags := + c.ldflags := -undefined suppress -flat_namespace -bundle + c.ldlibs := -lc + cxx.ldflags := -undefined suppress -flat_namespace -bundle + cxx.ldlibs := -lc + shared.extension = dylib + shared.ldflags = -dynamiclib -undefined dynamic_lookup \ + -install_name @loader_path/$(shared.lib) \ + -compatibility_version 1 -current_version 1.0 + stripflags = -x + ifeq ($(machine), i386) + cxx.flags := -fcheck-new + arch.c.flags := -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4 + arch.ld.flags := -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4 + endif + ifeq ($(machine), x86_64) + arch.c.flags := -arch i386 -arch x86_64 -mmacosx-version-min=10.5 + arch.ld.flags := -arch i386 -arch x86_64 -mmacosx-version-min=10.5 + endif +endif + + +#=== flags and paths for Windows =============================================== + + +# Standard paths on Windows contain spaces, and GNU make functions treat such +# paths as lists, with unintended effects. Therefore we must use shell function +# ls instead of make's wildcard, and probe for each standard path individually. +# Using double quotes around paths with spaces is obligatory. Since some path +# variables are assembled or re-expanded later, great care must be taken to put +# quotes at appropriate points throughout the makefile. Thanks, Bill. + +# paths for 32-bit executables on 64-bit Windows aren't yet defined here (TODO) +ifeq ($(system), Windows) + pkglibdir := $(APPDATA)/Pd + pdbinpath := $(wildcard $(externalsdir)/../pd/bin) + pdincludepath := $(wildcard $(externalsdir)/../pd/src) + ifndef pdbinpath + pdbinpath := $(shell ls -d "$(PROGRAMFILES)/pd/bin") + endif + ifndef pdincludepath + pdincludepath := $(shell ls -d "$(PROGRAMFILES)/pd/include/pdextended") + endif + ifndef pdincludepath + pdincludepath := $(shell ls -d "$(PROGRAMFILES)/pd/src") + endif +endif + +# On Windows we build 32 bit by default to match Pd(-extended) binary +# distributions. This may change in the future. +# TODO: decide whether -mms-bitfields should be specified. +ifeq ($(system), Windows) + extension = dll + CC = gcc + CXX = g++ + arch.c.flags := -march=pentium4 -msse -msse2 -mfpmath=sse + cpp.flags := -DMSW -DNT + c.flags := + c.ldflags := -static-libgcc -shared \ + -Wl,--enable-auto-import "$(pdbinpath)/pd.dll" + c.ldlibs := + cxx.flags := -fcheck-new + cxx.ldflags := -static-libstdc++ -shared \ + -Wl,--enable-auto-import "$(pdbinpath)/pd.dll" + cxx.ldlibs := + shared.extension = dll + shared.ldflags := -static-libgcc -shared "$(pdbinpath)/pd.dll" + stripflags = --strip-unneeded -R .note -R .comment +endif + + +#=== paths ===================================================================== + + +# Default pkglibdir is specified above per operating system. It is aliased as +# 'objectsdir' to retain compatibility with pd-extended template. Assignment +# operator '?=' is used to enable a project-relative path definition in the +# including makefile. +objectsdir ?= $(pkglibdir) + +# base path where all components of the lib will be installed by default +installpath := $(DESTDIR)$(objectsdir)/$(lib.name) + +# check if pdincludepath contains spaces (as is often the case on Windows) +# if so, store the path so we can later do checks with it +pdincludepathwithspaces := $(if $(word 2, $(pdincludepath)), $(pdincludepath)) + + +#=== accumulated build flags =================================================== + + +# From GNU make docs: 'Users expect to be able to specify CFLAGS freely +# themselves.' So we use CFLAGS to define options which are not strictly +# required for compilation: optimizations, architecture specifications, and +# warnings. CFLAGS can be safely overriden using a make command argument. +# Variables cflags, ldflags and ldlibs may be defined in including makefile. + +optimization.flags = -O3 -ffast-math -funroll-loops -fomit-frame-pointer +warn.flags = -Wall -Wextra -Wshadow -Winline -Wstrict-aliasing + +# suppress -Wunused-variable & Co if you don't want to clutter a build log +ifdef suppress-wunused + warn.flags += $(addprefix -Wno-unused-, function parameter value variable) +endif + +CFLAGS = $(warn.flags) $(optimization.flags) $(arch.c.flags) + +# preprocessor flags +cpp.flags += -DPD -I "$(pdincludepath)" $(CPPFLAGS) + +# architecture specifications for linker are overridable by LDFLAGS +LDFLAGS := $(arch.ld.flags) + +# now add the same ld flags to shared dynamic lib +shared.ldflags := $(shared.ldflags) $(LDFLAGS) + +# accumulated flags for C compiler / linker +c.flags := $(cpp.flags) $(c.flags) $(cflags) $(CFLAGS) +c.ldflags := $(c.ldflags) $(ldflags) $(LDFLAGS) +c.ldlibs := $(c.ldlibs) $(ldlibs) + +# accumulated flags for C++ compiler / linker +cxx.flags := $(cpp.flags) $(cxx.flags) $(cflags) $(CFLAGS) +cxx.ldflags := $(cxx.ldflags) $(ldflags) $(LDFLAGS) +cxx.ldlibs := $(cxx.ldlibs) $(ldlibs) + + +################################################################################ +### variables: tools ########################################################### +################################################################################ + + +# aliases so we can later define 'compile-$1' and set 'c' or 'cxx' as argument +compile-c := $(CC) +compile-cxx := $(CXX) + + +################################################################################ +### checks ##################################################################### +################################################################################ + + +# At this point most variables are defined. Now do some checks and info's +# before rules begin. + +# 'forward declaration' of default target, needed to do checks +all: + +# To avoid unpredictable results, make sure the default target is not redefined +# by including makefile. +ifneq ($(.DEFAULT_GOAL), all) + $(error Default target must be 'all'.) +endif + +# find out which target(s) will be made +ifdef MAKECMDGOALS + goals := $(MAKECMDGOALS) +else + goals := all +endif + +# store path to Pd API m_pd.h if it is found +ifdef pdincludepath + mpdh := $(shell ls "$(pdincludepath)/m_pd.h") +endif + +# print Makefile.pdlibbuilder version +$(info ++++ info: using Makefile.pdlibbuilder version $(version)) + +# when making target all, check if m_pd.h is found and print info about it +ifeq ($(goals), all) + $(if $(mpdh), \ + $(info ++++ info: using Pd API $(mpdh)), \ + $(warning Where is Pd API m_pd.h? Do 'make help' for info.)) +endif + +# print target info +$(info ++++ info: making target $(goals) $(if $(lib.name),in lib $(lib.name))) + +# when installing, print installpath info +$(if $(filter install install-lib, $(goals)), $(info ++++ info: \ + installpath is '$(installpath)')) + + +#=== define executables ======================================================== + + +# By default we build class executables, and optionally a shared dynamic link +# lib. When make-lib-executable=yes we build all classes into a single lib +# executable, on the condition that variable lib.setup.sources is defined. + +ifeq ($(make-lib-executable),yes) + $(if $(lib.setup.sources), ,\ + $(error Can not build library blob because lib.setup.sources is undefined)) + executables := $(lib.name).$(extension) +else + executables := $(classes.executables) $(shared.lib) +endif + + +################################################################################ +### rules: special targets ##################################################### +################################################################################ + + +# Disable built-in rules. If some target can't be built with the specified +# rules, it should not be built at all. +MAKEFLAGS += --no-builtin-rules + +.PRECIOUS: +.SUFFIXES: +.PHONY: all post build-lib \ + $(classes) $(makefiledirs) $(makefiles) \ + install install-executables install-datafiles install-datadirs \ + force clean vars allvars depend help + + +################################################################################ +### rules: build targets ####################################################### +################################################################################ + + +# Target all forces the build of targets [$(executables) post] in +# deterministic order. Target $(executables) builds class executables plus +# optional shared lib or alternatively a single lib executable when +# make-lib-executable=true. Target post is optionally defined by +# library makefile. + +all: post +post: $(executables) + +all: + $(info ++++info: target all in lib $(lib.name) completed) + +# build all with -g option turned on for debug symbols +alldebug: c.flags += -g +alldebug: cxx.flags += -g +alldebug: all + + +#=== class executable ========================================================== + + +# recipe for linking objects in class executable +# argument $1 = compiler type (c or cxx) +# argument $2 = class basename +define link-class + $(compile-$1) \ + $($1.ldflags) $($2.class.ldflags) \ + -o $2.$(extension) \ + $(addsuffix .o, $(basename $($2.class.sources))) \ + $(addsuffix .o, $(basename $(common.sources))) \ + $($1.ldlibs) $($2.class.ldlibs) $(shared.lib) +endef + +# general rule for linking object files in class executable +%.$(extension): $(shared.lib) + $(info ++++ info: linking objects in $@ for lib $(lib.name)) + $(if $(filter %.cc %.cpp, $($*.class.sources)), \ + $(call link-class,cxx,$*), \ + $(call link-class,c,$*)) + + +#=== library blob ============================================================== + + +# build all classes into single executable +build-lib: $(lib.name).$(extension) + $(info ++++ info: library blob $(lib.name).$(extension) completed) + +# recipe for linking objects in lib executable +# argument $1 = compiler type (c or cxx) +define link-lib + $(compile-$1) \ + $($1.ldflags) $(lib.ldflags) \ + -o $(lib.name).$(extension) $(all.objects) \ + $($1.ldlibs) $(lib.ldlibs) +endef + +# rule for linking objects in lib executable +# declared conditionally to avoid name clashes +ifeq ($(make-lib-executable),yes) +$(lib.name).$(extension): $(all.objects) + $(if $(filter %.cc %.cpp, $(all.sources)), \ + $(call link-lib,cxx), \ + $(call link-lib,c)) +endif + + +#=== shared dynamic lib ======================================================== + + +# recipe for linking objects in shared executable +# argument $1 = compiler type (c or cxx) +define link-shared + $(compile-$1) \ + $(shared.ldflags) \ + -o lib$(lib.name).$(shared.extension) $(shared.objects) \ + $($1.ldlibs) $(shared.ldlibs) +endef + +# rule for linking objects in shared executable +# build recipe is in macro 'link-shared' +lib$(lib.name).$(shared.extension): $(shared.objects) + $(info ++++ info: linking objects in shared lib $@) + $(if $(filter %.cc %.cpp, $(shared.sources)), \ + $(call link-shared,cxx), \ + $(call link-shared,c)) + + +#=== object files ============================================================== + + +# recipe to make .o file from source +# argument $1 is compiler type (c or cxx) +define make-object-file + $(info ++++ info: making $@ in lib $(lib.name)) + $(compile-$1) \ + $($1.flags) \ + -o $@ -c $< +endef + +# Three rules to create .o files. These are double colon 'terminal' rules, +# meaning they are the last in a rules chain. + +%.o:: %.c + $(call make-object-file,c) + +%.o:: %.cc + $(call make-object-file,cxx) + +%.o:: %.cpp + $(call make-object-file,cxx) + + +#=== explicit prerequisites for class executables ============================== + + +# For class executables, prerequisite rules are declared in run time. Target +# 'depend' prints these rules for debugging purposes. + +# declare explicit prerequisites rule like 'class: class.extension' +# argument $v is class basename +define declare-class-target +$v: $v.$(extension) +endef + +# declare explicit prerequisites rule like 'class.extension: object1.o object2.o' +# argument $v is class basename +define declare-class-executable-target +$v.$(extension): $(addsuffix .o, $(basename $($v.class.sources))) \ + $(addsuffix .o, $(basename $(common.sources))) +endef + +# evaluate explicit prerequisite rules for all classes +$(foreach v, $(classes), $(eval $(declare-class-target))) +$(foreach v, $(classes), $(eval $(declare-class-executable-target))) + + +#=== implicit prerequisites for class executables ============================== + + +# Evaluating implicit prerequisites (header files) with help from the +# preprocessor is 'expensive' so this is done conditionally and selectively. +# Note that it is also possible to trigger a build via install targets, in +# which case implicit prerequisites are not checked. + +# When the Pd include path contains spaces it will mess up the implicit +# prerequisites rules. Also it is known that multiple arch flags are +# incompatible with preprocessor option -MM on OSX <= 10.5. Dependency +# tracking must be disabled in those cases. + +oldfat := $(and $(filter ppc i386, $(machine)), \ + $(filter-out 0 1, $(words $(filter -arch, $(c.flags))))) + +disable-dependency-tracking := $(strip $(pdincludepathwithspaces) $(oldfat)) + +ifndef disable-dependency-tracking + must-build-everything := $(filter all, $(goals)) + must-build-class := $(filter $(classes), $(goals)) + must-build-sources := $(foreach v, $(must-build-class), $($v.class.sources)) +endif + +# declare implicit prerequisites rule like 'object.o: header1.h header2.h ...' +# argument $1 is input source file(s) +# dir is explicitly added because option -MM strips it by default +define declare-object-target +$(dir $1)$(filter %.o: %.h, $(shell $(CPP) $(c.flags) -MM $1)) $(MAKEFILE_LIST) +endef + +# evaluate implicit prerequisite rules when rebuilding everything +ifdef must-build-everything + $(if $(wildcard $(all.objects)), \ + $(info ++++ info: evaluating implicit prerequisites in lib $(lib.name).....) \ + $(foreach v, $(all.sources), $(eval $(call declare-object-target, $v)))) +endif + +# evaluate implicit prerequisite rules when selectively building classes +ifdef must-build-class + $(foreach v, $(must-build-sources), \ + $(eval $(call declare-object-target, $v))) + $(foreach v, $(shared.sources), \ + $(eval $(call declare-object-target, $v))) +endif + + +################################################################################ +### rules: preprocessor and assembly files ##################################### +################################################################################ + + +# Preprocessor and assembly output files for bug tracing etc. They are not part +# of the build processes for executables. By default these files are created in +# the current working directory. Dependency tracking is not performed, the build +# is forced instead to make sure it's up to date. + +force: + + +#=== preprocessor file ========================================================= + + +# make preprocessor output file with extension .pre +# argument $1 = compiler type (c or cxx) +define make-preprocessor-file + $(info ++++ info: making preprocessor output file $(notdir $*.pre) \ + in current working directory) + $(compile-$1) -E $< $(c.flags) $($1.flags) -o $(notdir $*.pre) +endef + +%.pre:: %.c force + $(call make-preprocessor-file,c) + +%.pre:: %.cc force + $(call make-preprocessor-file,cxx) + +%.pre:: %.cpp force + $(call make-preprocessor-file,cxx) + + +#=== assembly file ============================================================= + + +# make C / assembly interleaved output file with extension .lst +# argument $1 = compiler type (c or cxx) +define make-assembly-file + $(info ++++ info: making assembly output file $(notdir $*.lst) \ + in current working directory) + $(compile-$1) \ + -c -Wa,-a,-ad -fverbose-asm \ + $($1.flags) \ + $< > $(notdir $*.lst) +endef + +%.lst:: %.c force + $(call make-assembly-file,c) + +%.lst:: %.cc force + $(call make-assembly-file,cxx) + +%.lst:: %.cpp force + $(call make-assembly-file,cxx) + + +################################################################################ +### rules: installation targets ################################################ +################################################################################ + + +# Install targets depend on successful exit status of target all because nothing +# must be installed in case of a build error. + + +# -p = preserve time stamps +# -m = set permission mode (as in chmod) +# -d = create all components of specified directories +INSTALL = install +INSTALL_PROGRAM := $(INSTALL) -p -m 644 +INSTALL_DATA := $(INSTALL) -p -m 644 +INSTALL_DIR := $(INSTALL) -m 755 -d + +# strip spaces from file names +executables := $(strip $(executables)) +datafiles := $(strip $(datafiles)) +datadirs := $(strip $(datadirs)) + +# Do not make any install sub-target with empty variable definition because the +# install program would exit with an error. +install: $(if $(executables), install-executables) +install: $(if $(datafiles), install-datafiles) +install: $(if $(datadirs), install-datadirs) + +install-executables: all + $(INSTALL_DIR) -v "$(installpath)" + $(INSTALL_PROGRAM) $(executables) "$(installpath)" + $(info ++++ info: executables of lib $(lib.name) installed \ + from $(CURDIR) to $(installpath)) + +install-datafiles: all + $(INSTALL_DIR) -v "$(installpath)" + $(INSTALL_DATA) $(datafiles) "$(installpath)" + $(info ++++ info: data files of lib $(lib.name) installed \ + from $(CURDIR) to $(installpath)) + +install-datadirs: all + $(foreach v, $(datadirs), $(INSTALL_DIR) "$(installpath)/$v";) + $(foreach v, $(datadirs), \ + $(INSTALL_DATA) $(wildcard $v/*) "$(installpath)/$v";) + $(info ++++ info: data directories of lib $(lib.name) installed \ + from $(CURDIR) to $(installpath)) + + +################################################################################ +### rules: distribution targets ################################################ +################################################################################ + + +# TODO +# These targets are implemented in Makefile Template, but I have to figure out +# how to do it under the not-so-strict conditions of Makefile.pdlibbuilder. + +# make source package +dist: + @echo "target dist not yet implemented" + +# make Debian source package +dpkg-source: + @echo "target dpkg-source not yet implemented" + +$(ORIGDIR): + +$(DISTDIR): + + +################################################################################ +### rules: clean targets ####################################################### +################################################################################ + + +# delete build products from build tree +clean: + rm -f $(all.objects) + rm -f $(classes.executables) $(lib.name).$(extension) $(shared.lib) + rm -f *.pre *.lst + +# remove distribution directories and tarballs from build tree +distclean: clean + @echo "target distclean not yet implemented" + + +################################################################################ +### rules: submake targets ##################################################### +################################################################################ + + +# Iterate over sub-makefiles or makefiles in other directories. + +# When 'continue-make=yes' is set, sub-makes will report 'true' to the parent +# process regardless of their real exit status. This prevents the parent make +# from being aborted by a sub-make error. Useful when you want to quickly find +# out which sub-makes from a large set will succeed. +ifeq ($(continue-make),yes) + continue = || true +endif + +# These targets will trigger sub-make processes for entries in 'makefiledirs' +# and 'makefiles'. +all alldebug install clean distclean dist dkpg-source: \ + $(makefiledirs) $(makefiles) + +# this expands to identical rules for each entry in 'makefiledirs' +$(makefiledirs): + $(MAKE) --directory=$@ $(MAKECMDGOALS) $(continue) + +# this expands to identical rules for each entry in 'makefiles' +$(makefiles): + $(MAKE) --directory=$(dir $@) --makefile=$(notdir $@) $(MAKECMDGOALS) $(continue) + + +################################################################################ +### rules: convenience targets ################################################# +################################################################################ + + +#=== show variables ============================================================ + + +# Several 'function' macro's cause errors when expanded within a rule or without +# proper arguments. Variables which are set with the define directive are only +# shown by name for that reason. +functions = \ +add-class-source \ +declare-class-target \ +declare-class-executable-target \ +declare-object-target \ +link-class \ +link-lib \ +link-shared \ +make-object-file \ +make-preprocessor-file \ +make-assembly-file + + +# show variables from makefiles +vars: + $(info ++++ info: showing makefile variables:) + $(foreach v,\ + $(sort $(filter-out $(functions) functions, $(.VARIABLES))),\ + $(if $(filter file, $(origin $v)),\ + $(info variable $v = $($v)))) + $(foreach v, $(functions), $(info 'function' name: $v)) + @echo + +# show all variables +allvars: + $(info ++++ info: showing default, automatic and makefile variables:) + $(foreach v, \ + $(sort $(filter-out $(functions) functions, $(.VARIABLES))), \ + $(info variable ($(origin $v)) $v = $($v))) + $(foreach v, $(functions), $(info 'function' name: $v)) + @echo + + +#=== show dependencies ========================================================= + + +# show generated prerequisites rules +depend: + $(info ++++ info: generated prerequisite rules) + $(foreach v, $(classes), $(info $(declare-class-target))) + $(foreach v, $(classes), $(info $(declare-class-executable-target))) + $(foreach v, $(all.sources), $(info $(call declare-object-target, $v))) + @echo + + +#=== show help text ============================================================ + + +# brief info about targets and paths + +ifdef mpdh + mpdhinfo := $(mpdh) +else + mpdhinfo := m_pd.h was not found. Is Pd(-extended) installed? +endif + +help: + @echo + @echo " Main targets:" + @echo " all: build executables (default target)" + @echo " install: install all components of the library" + @echo " vars: print makefile variables for troubleshooting" + @echo " allvars: print all variables for troubleshooting" + @echo " help: print this help text" + @echo + @echo " Pd API m_pd.h:" + @echo " $(mpdhinfo)" + @echo " You may specify your preferred Pd include path as argument to" + @echo " the make command, like 'pdincludepath=path/to/pd/src'." + @echo + @echo " Path for installation of your libdir(s):" + @echo " $(objectsdir)" + @echo " Alternatively you may specify your path for installation as argument" + @echo " to the make command, like 'objectsdir=path/to/pd-externals'." + @echo + @echo " Default paths are listed in the doc sections in Makefile.pdlibbuilder." + @echo + + +#=== dummy target ============================================================== + + +coffee: + @echo "Makefile.pdlibbuilder: Can not make coffee. Sorry." + + +################################################################################ +### end of rules sections ###################################################### +################################################################################ + + +# for syntax highlighting in vim and github +# vim: set filetype=make: + diff --git a/externals/fluid~/README b/externals/fluid~/README new file mode 100644 index 000000000..bdcf2f0ad --- /dev/null +++ b/externals/fluid~/README @@ -0,0 +1,9 @@ + fluid~ - soundfont external for Pd + orchestra in a box by fbar@footils.org + +ported to Pd's C API by Jonathan Wilkes + +fluid~ is an external build around the free fluidsynth soundfont synthesizer +available on www.fluidsynth.org Soundfonts collect digitally sampled +instruments. fluid~ converts Pd or (x)Max to a fullblown orchestra with just a +single external. diff --git a/externals/fluid~/ezdac~.pd b/externals/fluid~/ezdac~.pd new file mode 100644 index 000000000..22f4cd536 --- /dev/null +++ b/externals/fluid~/ezdac~.pd @@ -0,0 +1,32 @@ +#N canvas 304 280 450 300 10; +#X obj 224 205 dac~; +#X obj 224 32 inlet~; +#X obj 259 60 inlet~; +#X obj 318 69 tgl 16 0 \$0-d \$0-d DSP 0 -6 1728 8 -260818 -123526 +-33289 0 1; +#X msg 318 93 \; pd dsp \$1; +#X obj 69 186 hsl 64 16 0 1 0 0 \$0-v \$0-v volume -2 -6 1728 8 -260818 +-123526 -1 0 1; +#X obj 269 108 r \$0-v; +#X obj 262 206 outlet~; +#X obj 166 206 outlet~; +#X obj 357 28 r pd; +#X obj 357 52 route dsp; +#X obj 269 155 line~; +#X msg 269 132 \$1 10; +#X obj 259 180 *~; +#X obj 224 180 *~; +#X connect 1 0 14 0; +#X connect 2 0 13 0; +#X connect 3 0 4 0; +#X connect 6 0 12 0; +#X connect 9 0 10 0; +#X connect 10 0 3 0; +#X connect 11 0 13 1; +#X connect 11 0 14 1; +#X connect 12 0 11 0; +#X connect 13 0 0 1; +#X connect 13 0 7 0; +#X connect 14 0 0 0; +#X connect 14 0 8 0; +#X coords 0 0 1 1 90 55 1; diff --git a/externals/fluid~/fluid.gen.txt b/externals/fluid~/fluid.gen.txt new file mode 100644 index 000000000..6d8f42105 --- /dev/null +++ b/externals/fluid~/fluid.gen.txt @@ -0,0 +1,61 @@ +startaddrofs +endaddrofs +startloopaddrofs +endloopaddrofs +startaddrcoarseofs +modlfotopitch +viblfotopitch +modenvtopitch +filterfc +filterq +modlfotofilterfc +modenvtofilterfc +endaddrcoarseofs +modlfotovol +unused1 +chorussend +reverbsend +pan +unused2 +unused3 +unused4 +modlfodelay +modlfofreq +viblfodelay +viblfofreq +modenvdelay +modenvattack +modenvhold +modenvdecay +modenvsustain +modenvrelease +keytomodenvhold +keytomodenvdecay +volenvdelay +volenvattack +volenvhold +volenvdecay +volenvsustain +volenvrelease +keytovolenvhold +keytovolenvdecay +instrument +reserved1 +keyrange +velrange +startloopaddrcoarseofs +keynum +velocity +attenuation +reserved2 +endloopaddrcoarseofs +coarsetune +finetune +sampleid +samplemode +reserved3 +scaletune +exclusiveclass +overriderootkey +pitch +last diff --git a/externals/fluid~/fluid.gen2sym.pd b/externals/fluid~/fluid.gen2sym.pd new file mode 100644 index 000000000..7b47b41f9 --- /dev/null +++ b/externals/fluid~/fluid.gen2sym.pd @@ -0,0 +1,55 @@ +#N canvas 398 411 737 434 10; +#X msg 301 123 read fluid.gen.txt cr; +#X obj 301 96 loadbang; +#X obj 193 372 outlet; +#X obj 116 30 inlet gen_number; +#X msg 193 138 rewind; +#X obj 78 157 until; +#X obj 193 254 textfile; +#X obj 193 317 spigot; +#X msg 320 277 0; +#X msg 269 279 1; +#X obj 116 91 t f b b b f; +#X obj 78 187 i 0; +#X obj 108 189 + 1; +#X obj 78 112 f; +#X msg 118 157 0; +#X obj 77 207 t b f; +#X obj 269 255 select 0; +#X obj 78 134 + 1; +#X text 268 38 inlet: Number of generator; +#X text 270 56 outlet: Name of generator; +#X text 18 253 Count to inlet num + 1; +#X text 340 254 only open on inlet num; +#X obj 193 346 symbol; +#X text 261 343 we're only interested in syms; +#X text 52 47 change if neccessary; +#X obj 116 62 clip 0 60; +#X text 296 150 fluid.gen.txt was created from the gen.h fluidsynth +header file. All names were converted to lowercase because I hate to +read uppercase.; +#X connect 0 0 6 0; +#X connect 1 0 0 0; +#X connect 3 0 25 0; +#X connect 4 0 6 0; +#X connect 5 0 11 0; +#X connect 6 0 7 0; +#X connect 7 0 22 0; +#X connect 8 0 7 1; +#X connect 9 0 7 1; +#X connect 10 0 13 0; +#X connect 10 2 14 0; +#X connect 10 3 4 0; +#X connect 10 4 16 1; +#X connect 11 0 12 0; +#X connect 11 0 15 0; +#X connect 12 0 11 1; +#X connect 13 0 17 0; +#X connect 14 0 11 1; +#X connect 15 0 6 0; +#X connect 15 1 16 0; +#X connect 16 0 9 0; +#X connect 16 1 8 0; +#X connect 17 0 5 0; +#X connect 22 0 2 0; +#X connect 25 0 10 0; diff --git a/externals/fluid~/fluid.pd b/externals/fluid~/fluid.pd new file mode 100644 index 000000000..53f7fbe5a --- /dev/null +++ b/externals/fluid~/fluid.pd @@ -0,0 +1,123 @@ +#N canvas 243 11 1015 761 10; +#X text 35 71 A soundfont player using If I Were You \, from www.iiwu.org +; +#X text 173 286 fluid~ wants channel # first: should I change this? +; +#X text 263 595 Program change ("prog" or "p" + chan + value); +#X text 173 254 Note messages start with "note" \, "n" or with nothing +(pure list input): chan + note + velocity; +#X obj 36 34 cnv 15 102 32 empty empty empty 20 12 1 14 -1 -66577 0 +; +#X obj 37 35 cnv 15 100 30 empty empty fluid~ 20 15 1 14 -257472 -66577 +0; +#X obj 593 55 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577 +0; +#X text 181 120 "load" soundfonts. Creation argument is possible as +well:; +#X obj 594 56 cnv 15 372 158 empty Notes Soundfonts 20 12 65 14 -228992 +-66577 0; +#X msg 650 146 load /usr/lib/awe/sfbank/2gmgsmt.sf2; +#X msg 644 126 load \$1; +#X obj 644 104 openpanel; +#X obj 644 84 bng 15 250 50 0 empty empty empty 0 -6 0 8 -260818 -1 +-1; +#X obj 629 171 s \$0-iiwu; +#X obj 375 146 fluid~ notavail.sf2; +#X obj 593 219 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577 +0; +#X obj 594 220 cnv 15 372 158 empty Notes Notes 20 12 65 14 -228992 +-66577 0; +#X obj 837 261 notein; +#X obj 837 283 pack 0 0 0; +#X msg 695 325 n 1 60 0; +#X obj 640 348 s \$0-iiwu; +#X obj 695 281 bang; +#X msg 837 305 \$3 \$1 \$2; +#X obj 837 327 s \$0-iiwu; +#X obj 593 382 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577 +0; +#X text 159 432 Controller Change: "control" or "c" or "cc" + chan ++ cc# + value; +#X obj 594 383 cnv 15 372 158 empty Notes Controller_Change/Pitch_Bend +20 12 65 14 -228992 -66577 0; +#X obj 632 510 s \$0-iiwu; +#X floatatom 632 425 5 0 0 0 - - -; +#X msg 649 478 c 2 \$1; +#X msg 632 444 control 1 2 \$1; +#X obj 593 546 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577 +0; +#X obj 594 547 cnv 15 372 158 empty Notes Program_Change 20 12 65 14 +-228992 -66577 0; +#X obj 703 664 s \$0-iiwu; +#X msg 703 617 prog 1 \$1; +#X msg 783 617 p 2 \$1; +#X floatatom 703 587 5 0 0 0 - - -; +#X obj 695 239 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 +-1; +#X floatatom 783 587 5 0 0 0 - - -; +#X floatatom 673 425 5 0 0 0 - - -; +#X msg 695 259 note 1 60 120; +#X obj 741 425 ctlin; +#X msg 741 469 cc \$3 \$2 \$1; +#X obj 741 447 pack 0 0 0; +#X obj 856 433 bendin; +#X obj 856 455 pack 0 0; +#X obj 856 499 s \$0-iiwu; +#X msg 856 477 bend \$2 \$1; +#X text 159 464 Pitch Bend works the same: "bend" or "b" + chan + val +; +#X msg 857 611 bank 1 \$1; +#X floatatom 857 592 5 0 0 0 - - -; +#X text 857 632 bank select; +#X obj 789 224 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 715 224 metro 1000; +#X obj 695 303 del 500; +#X obj 40 261 cnv 15 102 32 empty empty empty 20 12 1 14 -1 -66577 +0; +#X obj 41 262 cnv 15 100 30 empty empty empty 20 15 1 14 -257472 -66577 +0; +#X obj 66 269 fluid~; +#X obj 43 342 ezdac~; +#X obj 66 199 r \$0-iiwu; +#X msg 66 233 help; +#X connect 9 0 13 0; +#X connect 10 0 13 0; +#X connect 11 0 10 0; +#X connect 12 0 11 0; +#X connect 17 0 18 0; +#X connect 17 1 18 1; +#X connect 17 2 18 2; +#X connect 18 0 22 0; +#X connect 19 0 20 0; +#X connect 21 0 54 0; +#X connect 22 0 23 0; +#X connect 28 0 30 0; +#X connect 29 0 27 0; +#X connect 30 0 27 0; +#X connect 34 0 33 0; +#X connect 35 0 33 0; +#X connect 36 0 34 0; +#X connect 37 0 40 0; +#X connect 38 0 35 0; +#X connect 39 0 29 0; +#X connect 40 0 20 0; +#X connect 40 0 21 0; +#X connect 41 0 43 0; +#X connect 41 1 43 1; +#X connect 41 2 43 2; +#X connect 42 0 27 0; +#X connect 43 0 42 0; +#X connect 44 0 45 0; +#X connect 44 1 45 1; +#X connect 45 0 47 0; +#X connect 47 0 46 0; +#X connect 49 0 33 0; +#X connect 50 0 49 0; +#X connect 52 0 53 0; +#X connect 53 0 37 0; +#X connect 54 0 19 0; +#X connect 57 0 58 0; +#X connect 57 1 58 1; +#X connect 59 0 57 0; +#X connect 60 0 57 0; diff --git a/externals/fluid~/fluid~-help.pd b/externals/fluid~/fluid~-help.pd new file mode 100644 index 000000000..fdee7316e --- /dev/null +++ b/externals/fluid~/fluid~-help.pd @@ -0,0 +1,200 @@ +#N canvas 79 6 1015 761 10; +#X text 35 71 A soundfont player using If I Were You \, from www.iiwu.org +; +#X text 170 296 fluid~ wants channel # first: should I change this? +; +#X text 287 518 Program change ( prog or p + chan + value); +#X text 170 246 Note messages start with note \, n or with nothing +(pure list input): chan + note + velocity; +#X obj 36 34 cnv 15 102 32 empty empty empty 20 12 1 14 -1 -66577 0 +; +#X obj 37 35 cnv 15 100 30 empty empty fluid~ 20 15 1 14 -257472 -66577 +0; +#X obj 593 18 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577 +0; +#X text 181 120 load soundfonts. Creation argument is possible as well: +; +#X obj 594 19 cnv 15 372 158 empty Notes Soundfonts 20 12 1 14 -228992 +-66577 0; +#X msg 650 109 load /usr/lib/awe/sfbank/2gmgsmt.sf2; +#X msg 644 89 load \$1; +#X obj 644 67 openpanel; +#X obj 644 47 bng 15 250 50 0 empty empty empty 0 -6 0 8 -260818 -1 +-1; +#X obj 629 134 s \$0-iiwu; +#X obj 375 146 fluid~ notavail.sf2; +#X obj 593 182 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577 +0; +#X obj 594 183 cnv 15 372 158 empty Notes Notes 20 12 1 14 -228992 +-66577 0; +#X obj 837 224 notein; +#X obj 837 246 pack 0 0 0; +#X msg 695 288 n 1 60 0; +#X obj 640 311 s \$0-iiwu; +#X obj 695 244 bang; +#X msg 837 268 \$3 \$1 \$2; +#X obj 837 290 s \$0-iiwu; +#X obj 593 345 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577 +0; +#X text 159 413 Controller Change: control or c or cc + chan + cc# ++ value; +#X obj 594 346 cnv 15 372 158 empty Notes Controller_Change/Pitch_Bend +20 12 1 14 -228992 -66577 0; +#X obj 632 473 s \$0-iiwu; +#X floatatom 632 388 5 0 0 0 - - -; +#X msg 649 441 c 2 \$1; +#X msg 632 407 control 1 2 \$1; +#X obj 593 509 cnv 15 374 160 empty empty empty 20 12 1 14 -1 -66577 +0; +#X obj 594 510 cnv 15 372 158 empty Notes Program_Change 20 12 1 14 +-228992 -66577 0; +#X obj 703 627 s \$0-iiwu; +#X msg 703 580 prog 1 \$1; +#X msg 783 580 p 2 \$1; +#X floatatom 703 550 5 0 0 0 - - -; +#X obj 695 202 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 +-1; +#X floatatom 783 550 5 0 0 0 - - -; +#X floatatom 673 388 5 0 0 0 - - -; +#X msg 695 222 note 1 60 120; +#X obj 741 388 ctlin; +#X obj 741 410 pack 0 0 0; +#X obj 856 396 bendin; +#X obj 856 418 pack 0 0; +#X obj 856 462 s \$0-iiwu; +#X msg 856 440 bend \$2 \$1; +#X text 159 445 Pitch Bend works the same: bend or b + chan + val; +#X msg 857 574 bank 1 \$1; +#X floatatom 857 555 5 0 0 0 - - -; +#X text 857 595 bank select; +#X obj 789 187 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 715 187 metro 1000; +#X obj 40 261 cnv 15 102 32 empty empty empty 20 12 1 14 -1 -66577 +0; +#X obj 41 262 cnv 15 100 30 empty empty empty 20 15 1 14 -257472 -66577 +0; +#X obj 43 342 ezdac~; +#X obj 66 199 r \$0-iiwu; +#X msg 66 233 help; +#X msg 146 217 init /usr/lib/awe/sfbank/2gmgsmt.sf2; +#X obj 66 269 fluid~; +#X text 145 185 init [soundfont] can (re)initialize fluid~ for example +to adapt to new samplerates.; +#X msg 741 432 cc \$3 \$2 \$1; +#X obj 203 617 cnv 15 302 110 empty empty empty 20 12 1 14 -1 -66577 +0; +#X obj 204 618 cnv 15 300 108 empty Notes generators 20 12 1 14 -228992 +-66577 0; +#X msg 231 682 gen 1 \$2 \$1; +#X obj 231 704 s \$0-iiwu; +#X floatatom 289 642 5 0 60 0 - - -; +#X floatatom 231 642 5 0 0 0 - - -; +#X obj 231 662 pack 0 17; +#X text 78 607 gen 17 is "pan".; +#X text 78 594 Setting generators like for example:; +#X obj 695 266 del 1000; +#X symbolatom 343 684 20 0 0 0 - - -; +#X obj 343 656 fluid.gen2sym; +#X text 345 700 a little helper; +#N canvas 402 274 605 444 dust 0; +#X obj 119 135 del 10; +#X obj 119 41 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X floatatom 386 66 5 0 0 1 dustiness - -; +#X floatatom 386 164 5 0 0 1 note_range - -; +#X floatatom 387 198 5 0 0 1 note_center - -; +#X obj 237 417 s \$0-iiwu; +#X obj 387 242 / 2; +#X floatatom 387 223 5 0 0 1 pan_mod - -; +#X msg 237 281 gen 1 17 \$1; +#X obj 237 237 random 100; +#X obj 237 259 - 50; +#X obj 119 273 pack 0 0; +#X obj 119 63 metro; +#X obj 126 339 pack 0 0; +#X msg 126 371 note 1 \$1 \$2; +#X obj 119 251 makenote 100 2; +#X obj 119 212 + 60; +#X obj 119 178 random 24; +#X obj 198 80 random 150; +#X obj 119 301 poly 8 1; +#X obj 198 108 t f f; +#X text 98 11 Inspired by Hans-Christoph Steiner and Derek Holzer; +#X text 15 11 __Dust__; +#X connect 0 0 9 0; +#X connect 0 0 17 0; +#X connect 1 0 12 0; +#X connect 2 0 18 1; +#X connect 3 0 17 1; +#X connect 4 0 16 1; +#X connect 6 0 10 1; +#X connect 7 0 6 0; +#X connect 7 0 9 1; +#X connect 8 0 5 0; +#X connect 9 0 10 0; +#X connect 10 0 8 0; +#X connect 11 0 19 0; +#X connect 12 0 0 0; +#X connect 12 0 18 0; +#X connect 13 0 14 0; +#X connect 14 0 5 0; +#X connect 15 0 11 0; +#X connect 15 1 11 1; +#X connect 16 0 15 0; +#X connect 17 0 16 0; +#X connect 18 0 20 0; +#X connect 19 1 13 0; +#X connect 19 2 13 1; +#X connect 20 0 0 1; +#X restore 709 715 pd dust; +#X text 601 716 A composition:; +#X msg 705 87 load /home/ico/Downloads/Soundfonts/jRhodes3.sf2; +#X connect 9 0 13 0; +#X connect 10 0 13 0; +#X connect 11 0 10 0; +#X connect 12 0 11 0; +#X connect 17 0 18 0; +#X connect 17 1 18 1; +#X connect 17 2 18 2; +#X connect 18 0 22 0; +#X connect 19 0 20 0; +#X connect 21 0 71 0; +#X connect 22 0 23 0; +#X connect 28 0 30 0; +#X connect 29 0 27 0; +#X connect 30 0 27 0; +#X connect 34 0 33 0; +#X connect 35 0 33 0; +#X connect 36 0 34 0; +#X connect 37 0 40 0; +#X connect 38 0 35 0; +#X connect 39 0 29 0; +#X connect 40 0 20 0; +#X connect 40 0 21 0; +#X connect 41 0 42 0; +#X connect 41 1 42 1; +#X connect 41 2 42 2; +#X connect 42 0 61 0; +#X connect 43 0 44 0; +#X connect 43 1 44 1; +#X connect 44 0 46 0; +#X connect 46 0 45 0; +#X connect 48 0 33 0; +#X connect 49 0 48 0; +#X connect 51 0 52 0; +#X connect 52 0 37 0; +#X connect 56 0 59 0; +#X connect 57 0 59 0; +#X connect 58 0 59 0; +#X connect 59 0 55 0; +#X connect 59 1 55 1; +#X connect 61 0 27 0; +#X connect 64 0 65 0; +#X connect 66 0 68 1; +#X connect 66 0 73 0; +#X connect 67 0 68 0; +#X connect 68 0 64 0; +#X connect 71 0 19 0; +#X connect 73 0 72 0; +#X connect 77 0 13 0; diff --git a/externals/fluid~/fluid~.c b/externals/fluid~/fluid~.c new file mode 100644 index 000000000..3a81a7d1b --- /dev/null +++ b/externals/fluid~/fluid~.c @@ -0,0 +1,254 @@ +#include <fluidsynth.h> + +#include "m_pd.h" + +static t_class *fluid_tilde_class; + +typedef struct _fluid_tilde { + t_object x_obj; + fluid_synth_t *x_synth; + fluid_settings_t *x_settings; + t_outlet *x_out_left; + t_outlet *x_out_right; +} t_fluid_tilde; + +t_int *fluid_tilde_perform(t_int *w) +{ + t_fluid_tilde *x = (t_fluid_tilde *)(w[1]); + t_sample *left = (t_sample *)(w[2]); + t_sample *right = (t_sample *)(w[3]); + int n = (int)(w[4]); + + //while (n--) *out++ = (*in1++)*(1-f_pan)+(*in2++)*f_pan; + fluid_synth_write_float(x->x_synth, n, left, 0, 1, right, 0, 1); + + return (w+5); +} + +static void fluid_tilde_dsp(t_fluid_tilde *x, t_signal **sp) +{ + dsp_add(fluid_tilde_perform, 4, x, + sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); +} + +static void fluid_tilde_free(t_fluid_tilde *x) +{ + outlet_free(x->x_out_left); + outlet_free(x->x_out_right); +} + +static void fluid_help(void) +{ + const char * helptext = + "_ __fluid~_ _ a soundfont external for Pd and Max/MSP \n" + "_ argument: \"/path/to/soundfont.sf\" to load on object creation\n" + "_ messages: \n" + "load /path/to/soundfont.sf2 --- Loads a Soundfont \n" + "note 0 0 0 --- Play note. Arguments: \n" + " channel-# note-# veloc-#\n" + "n 0 0 0 --- Play note, same as above\n" + "0 0 0 --- Play note, same as above\n" + "control 0 0 0 --- set controller\n" + "c 0 0 0 --- set controller, shortcut\n" + "prog 0 0 --- progam change, \n" + " args: channel-# prog-#\n" + "p 0 0 --- program change, shortcut\n" + ; + post("%s", helptext); +} + +static void fluid_note(t_fluid_tilde *x, t_symbol *s, int argc, t_atom *argv) +{ + if (x->x_synth == NULL) return; + if (argc == 3) + { + int chan, key, vel; + chan = atom_getintarg(0, argc, argv); + key = atom_getintarg(1, argc, argv); + vel = atom_getintarg(2, argc, argv); + fluid_synth_noteon(x->x_synth, chan - 1, key, vel); + } +} + +static void fluid_program_change(t_fluid_tilde *x, t_symbol *s, int argc, + t_atom *argv) +{ + if (x->x_synth == NULL) return; + if (argc == 2) + { + int chan, prog; + chan = atom_getintarg(0, argc, argv); + prog = atom_getintarg(1, argc, argv); + fluid_synth_program_change(x->x_synth, chan - 1, prog); + } +} + +static void fluid_control_change(t_fluid_tilde *x, t_symbol *s, int argc, + t_atom *argv) +{ + if (x->x_synth == NULL) return; + if (argc == 3) + { + int chan, ctrl, val; + chan = atom_getintarg(0, argc, argv); + ctrl = atom_getintarg(1, argc, argv); + val = atom_getintarg(2, argc, argv); + fluid_synth_cc(x->x_synth, chan - 1, ctrl, val); + } +} + +static void fluid_pitch_bend(t_fluid_tilde *x, t_symbol *s, int argc, + t_atom *argv) +{ + if (x->x_synth == NULL) return; + if (argc == 2) + { + int chan, val; + chan = atom_getintarg(0, argc, argv); + val = atom_getintarg(1, argc, argv); + fluid_synth_pitch_bend(x->x_synth, chan - 1, val); + } +} + +static void fluid_bank(t_fluid_tilde *x, t_symbol *s, int argc, t_atom *argv) +{ + if (x->x_synth == NULL) return; + if (argc == 2) + { + int chan, bank; + chan = atom_getintarg(0, argc, argv); + bank = atom_getintarg(1, argc, argv); + fluid_synth_bank_select(x->x_synth, chan - 1, bank); + } +} + +static void fluid_gen(t_fluid_tilde *x, t_symbol *s, int argc, t_atom *argv) +{ + if (x->x_synth == NULL) return; + if (argc == 3) + { + int chan, param; + float value; + chan = atom_getintarg(0, argc, argv); + param = atom_getintarg(1, argc, argv); + value = atom_getintarg(2, argc, argv); + fluid_synth_set_gen(x->x_synth, chan - 1, param, value); + } +} + +static void fluid_load(t_fluid_tilde *x, t_symbol *s, int argc, t_atom *argv) +{ + if (x->x_synth == NULL) + { + post("No fluidsynth"); + return; + } + if (argc >= 1 && argv->a_type == A_SYMBOL) + { + const char* filename = atom_getsymbolarg(0, argc, argv)->s_name; + if (fluid_synth_sfload(x->x_synth, filename, 0) >= 0) + { + post("Loaded Soundfont: %s", filename); + fluid_synth_program_reset(x->x_synth); + } + } +} + +static void fluid_init(t_fluid_tilde *x, t_symbol *s, int argc, t_atom *argv) +{ + if (x->x_synth) delete_fluid_synth(x->x_synth); + + float sr = sys_getsr(); + + x->x_settings = new_fluid_settings(); + + if (x->x_settings == NULL) + { + post("fluid~: couldn't create synth settings\n"); + } + else + { + // fluid_settings_setstr(settings, "audio.driver", "float"); + // settings: + fluid_settings_setnum(x->x_settings, "synth.midi-channels", 16); + fluid_settings_setnum(x->x_settings, "synth.polyphony", 256); + fluid_settings_setnum(x->x_settings, "synth.gain", 0.600000); + fluid_settings_setnum(x->x_settings, "synth.sample-rate", 44100.000000); + fluid_settings_setstr(x->x_settings, "synth.chorus.active", "no"); + fluid_settings_setstr(x->x_settings, "synth.reverb.active", "no"); + fluid_settings_setstr(x->x_settings, "synth.ladspa.active", "no"); + + if (sr != 0) + { + fluid_settings_setnum(x->x_settings, "synth.sample-rate", sr); + } + // Create fluidsynth instance: + x->x_synth = new_fluid_synth(x->x_settings); + if (x->x_synth == NULL ) + { + post("fluid~: couldn't create synth\n"); + } + // try to load argument as soundfont + fluid_load(x, gensym("load"), argc, argv); + //if (settings != NULL ) + // delete_fluid_settings(settings); + + // We're done constructing: + if (x->x_synth) + post("-- fluid~ for Pd ---"); + } +} + +static void *fluid_tilde_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fluid_tilde *x = (t_fluid_tilde *)pd_new(fluid_tilde_class); + x->x_out_left = outlet_new(&x->x_obj, &s_signal); + x->x_out_right = outlet_new(&x->x_obj, &s_signal); + fluid_init(x, gensym("init"), argc, argv); + return (void *)x; +} + +void fluid_tilde_setup(void) +{ + fluid_tilde_class = class_new(gensym("fluid~"), + (t_newmethod)fluid_tilde_new, 0, sizeof(t_fluid_tilde), + CLASS_DEFAULT, A_GIMME, 0); + class_addmethod(fluid_tilde_class, (t_method)fluid_init, gensym("init"), + A_GIMME, 0); + class_addmethod(fluid_tilde_class, (t_method)fluid_load, gensym("load"), + A_GIMME, 0); + class_addmethod(fluid_tilde_class, (t_method)fluid_note, gensym("note"), + A_GIMME, 0); + class_addmethod(fluid_tilde_class, (t_method)fluid_program_change, + gensym("prog"), A_GIMME, 0); + class_addmethod(fluid_tilde_class, (t_method)fluid_control_change, + gensym("control"), A_GIMME, 0); + class_addmethod(fluid_tilde_class, (t_method)fluid_pitch_bend, + gensym("bend"), A_GIMME, 0); + class_addmethod(fluid_tilde_class, (t_method)fluid_bank, gensym("bank"), + A_GIMME, 0); + class_addmethod(fluid_tilde_class, (t_method)fluid_gen, gensym("gen"), + A_GIMME, 0); + + // list input calls fluid_note(...) + class_addlist(fluid_tilde_class, (t_method)fluid_note); + + // some alias shortcuts: + class_addmethod(fluid_tilde_class, (t_method)fluid_note, gensym("n"), + A_GIMME, 0); + class_addmethod(fluid_tilde_class, (t_method)fluid_program_change, + gensym("p"), A_GIMME, 0); + class_addmethod(fluid_tilde_class, (t_method)fluid_control_change, + gensym("c"), A_GIMME, 0); + class_addmethod(fluid_tilde_class, (t_method)fluid_control_change, + gensym("cc"), A_GIMME, 0); + class_addmethod(fluid_tilde_class, (t_method)fluid_pitch_bend, gensym("b"), + A_GIMME, 0); + + // Simulate Flext's help message + class_addmethod(fluid_tilde_class, (t_method)fluid_help, gensym("help"), + 0); + + class_addmethod(fluid_tilde_class, + (t_method)fluid_tilde_dsp, gensym("dsp"), A_CANT, 0); +} diff --git a/externals/fluid~/makefile b/externals/fluid~/makefile new file mode 100755 index 000000000..b172e9c74 --- /dev/null +++ b/externals/fluid~/makefile @@ -0,0 +1,11 @@ +# Makefile for mylib + +lib.name = fluid~ + +class.sources = fluid~.c + +ldlibs = -lfluidsynth + +datafiles = ezdac~.pd fluid~-help.pd fluid.pd fluid.gen2sym.pd simple_onthego_synth.pd fluid.gen.txt LICENSE README + +include Makefile.pdlibbuilder diff --git a/externals/fluid~/simple_onthego_synth.pd b/externals/fluid~/simple_onthego_synth.pd new file mode 100644 index 000000000..f4227d17e --- /dev/null +++ b/externals/fluid~/simple_onthego_synth.pd @@ -0,0 +1,39 @@ +#N canvas 480 117 389 508 10; +#X declare -lib maxlib; +#X obj 25 197 notein; +#X obj 25 222 + 0; +#X obj 25 20 key; +#X obj 25 42 sel 49 50; +#X msg 25 64 -12; +#X msg 50 85 12; +#X obj 25 117 +; +#X obj 109 134 nbx 3 88 -60 60 0 0 empty empty empty 0 -8 0 70 -262144 +-1 -1 0 256 1; +#X obj 25 253 pack 0 0 0; +#X msg 25 275 \$3 \$1 \$2; +#X obj 25 296 fluid~ /home/l2orkist/Downloads/Soundfonts/jRhodes3.sf2 +; +#X obj 26 377 l2ork_output~; +#X obj 105 334 loadbang; +#X obj 36 350 freeverb~; +#X obj 105 355 t 50 1; +#X connect 0 0 1 0; +#X connect 0 1 8 1; +#X connect 0 2 8 2; +#X connect 1 0 8 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 3 1 5 0; +#X connect 4 0 6 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 6 1; +#X connect 7 0 1 1; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 10 0 13 0; +#X connect 10 0 11 0; +#X connect 12 0 14 0; +#X connect 13 0 11 0; +#X connect 14 0 11 6; +#X connect 14 1 11 7; diff --git a/l2ork_addons/rjlib/Makefile b/externals/rjlib/Makefile similarity index 100% rename from l2ork_addons/rjlib/Makefile rename to externals/rjlib/Makefile diff --git a/l2ork_addons/rjlib/README b/externals/rjlib/README similarity index 100% rename from l2ork_addons/rjlib/README rename to externals/rjlib/README diff --git a/l2ork_addons/rjlib/abs/reverb-echo.pd b/externals/rjlib/abs/reverb-echo.pd similarity index 100% rename from l2ork_addons/rjlib/abs/reverb-echo.pd rename to externals/rjlib/abs/reverb-echo.pd diff --git a/l2ork_addons/rjlib/accelerate.pd b/externals/rjlib/accelerate.pd similarity index 100% rename from l2ork_addons/rjlib/accelerate.pd rename to externals/rjlib/accelerate.pd diff --git a/l2ork_addons/rjlib/analysepitch.pd b/externals/rjlib/analysepitch.pd similarity index 100% rename from l2ork_addons/rjlib/analysepitch.pd rename to externals/rjlib/analysepitch.pd diff --git a/l2ork_addons/rjlib/analysesimpleonset.pd b/externals/rjlib/analysesimpleonset.pd similarity index 100% rename from l2ork_addons/rjlib/analysesimpleonset.pd rename to externals/rjlib/analysesimpleonset.pd diff --git a/l2ork_addons/rjlib/hilbert~.pd b/externals/rjlib/hilbert~.pd similarity index 100% rename from l2ork_addons/rjlib/hilbert~.pd rename to externals/rjlib/hilbert~.pd diff --git a/l2ork_addons/rjlib/playback.pd b/externals/rjlib/playback.pd similarity index 100% rename from l2ork_addons/rjlib/playback.pd rename to externals/rjlib/playback.pd diff --git a/l2ork_addons/rjlib/recorder.pd b/externals/rjlib/recorder.pd similarity index 100% rename from l2ork_addons/rjlib/recorder.pd rename to externals/rjlib/recorder.pd diff --git a/l2ork_addons/rjlib/reverb.pd b/externals/rjlib/reverb.pd similarity index 100% rename from l2ork_addons/rjlib/reverb.pd rename to externals/rjlib/reverb.pd diff --git a/l2ork_addons/rjlib/rj/OVERVIEW.pd b/externals/rjlib/rj/OVERVIEW.pd similarity index 100% rename from l2ork_addons/rjlib/rj/OVERVIEW.pd rename to externals/rjlib/rj/OVERVIEW.pd diff --git a/l2ork_addons/rjlib/rj/c.txt b/externals/rjlib/rj/c.txt similarity index 100% rename from l2ork_addons/rjlib/rj/c.txt rename to externals/rjlib/rj/c.txt diff --git a/l2ork_addons/rjlib/rj/c_adsr-help.pd b/externals/rjlib/rj/c_adsr-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/c_adsr-help.pd rename to externals/rjlib/rj/c_adsr-help.pd diff --git a/l2ork_addons/rjlib/rj/c_adsr.pd b/externals/rjlib/rj/c_adsr.pd similarity index 100% rename from l2ork_addons/rjlib/rj/c_adsr.pd rename to externals/rjlib/rj/c_adsr.pd diff --git a/l2ork_addons/rjlib/rj/c_adsrj-help.pd b/externals/rjlib/rj/c_adsrj-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/c_adsrj-help.pd rename to externals/rjlib/rj/c_adsrj-help.pd diff --git a/l2ork_addons/rjlib/rj/c_adsrj.pd b/externals/rjlib/rj/c_adsrj.pd similarity index 100% rename from l2ork_addons/rjlib/rj/c_adsrj.pd rename to externals/rjlib/rj/c_adsrj.pd diff --git a/l2ork_addons/rjlib/rj/c_mphasor-help.pd b/externals/rjlib/rj/c_mphasor-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/c_mphasor-help.pd rename to externals/rjlib/rj/c_mphasor-help.pd diff --git a/l2ork_addons/rjlib/rj/c_mphasor.pd b/externals/rjlib/rj/c_mphasor.pd similarity index 100% rename from l2ork_addons/rjlib/rj/c_mphasor.pd rename to externals/rjlib/rj/c_mphasor.pd diff --git a/l2ork_addons/rjlib/rj/c_multimetro-help.pd b/externals/rjlib/rj/c_multimetro-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/c_multimetro-help.pd rename to externals/rjlib/rj/c_multimetro-help.pd diff --git a/l2ork_addons/rjlib/rj/c_multimetro.pd b/externals/rjlib/rj/c_multimetro.pd similarity index 100% rename from l2ork_addons/rjlib/rj/c_multimetro.pd rename to externals/rjlib/rj/c_multimetro.pd diff --git a/l2ork_addons/rjlib/rj/c_xfade-help.pd b/externals/rjlib/rj/c_xfade-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/c_xfade-help.pd rename to externals/rjlib/rj/c_xfade-help.pd diff --git a/l2ork_addons/rjlib/rj/c_xfade.pd b/externals/rjlib/rj/c_xfade.pd similarity index 100% rename from l2ork_addons/rjlib/rj/c_xfade.pd rename to externals/rjlib/rj/c_xfade.pd diff --git a/l2ork_addons/rjlib/rj/e.txt b/externals/rjlib/rj/e.txt similarity index 100% rename from l2ork_addons/rjlib/rj/e.txt rename to externals/rjlib/rj/e.txt diff --git a/l2ork_addons/rjlib/rj/e_alias-help.pd b/externals/rjlib/rj/e_alias-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_alias-help.pd rename to externals/rjlib/rj/e_alias-help.pd diff --git a/l2ork_addons/rjlib/rj/e_alias.pd b/externals/rjlib/rj/e_alias.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_alias.pd rename to externals/rjlib/rj/e_alias.pd diff --git a/l2ork_addons/rjlib/rj/e_chorus-help.pd b/externals/rjlib/rj/e_chorus-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_chorus-help.pd rename to externals/rjlib/rj/e_chorus-help.pd diff --git a/l2ork_addons/rjlib/rj/e_chorus.pd b/externals/rjlib/rj/e_chorus.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_chorus.pd rename to externals/rjlib/rj/e_chorus.pd diff --git a/l2ork_addons/rjlib/rj/e_chorusr-help.pd b/externals/rjlib/rj/e_chorusr-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_chorusr-help.pd rename to externals/rjlib/rj/e_chorusr-help.pd diff --git a/l2ork_addons/rjlib/rj/e_chorusr.pd b/externals/rjlib/rj/e_chorusr.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_chorusr.pd rename to externals/rjlib/rj/e_chorusr.pd diff --git a/l2ork_addons/rjlib/rj/e_fbdelay-help.pd b/externals/rjlib/rj/e_fbdelay-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_fbdelay-help.pd rename to externals/rjlib/rj/e_fbdelay-help.pd diff --git a/l2ork_addons/rjlib/rj/e_fbdelay.pd b/externals/rjlib/rj/e_fbdelay.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_fbdelay.pd rename to externals/rjlib/rj/e_fbdelay.pd diff --git a/l2ork_addons/rjlib/rj/e_fbdelay2.pd b/externals/rjlib/rj/e_fbdelay2.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_fbdelay2.pd rename to externals/rjlib/rj/e_fbdelay2.pd diff --git a/l2ork_addons/rjlib/rj/e_freqshift-help.pd b/externals/rjlib/rj/e_freqshift-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_freqshift-help.pd rename to externals/rjlib/rj/e_freqshift-help.pd diff --git a/l2ork_addons/rjlib/rj/e_freqshift.pd b/externals/rjlib/rj/e_freqshift.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_freqshift.pd rename to externals/rjlib/rj/e_freqshift.pd diff --git a/l2ork_addons/rjlib/rj/e_pan-help.pd b/externals/rjlib/rj/e_pan-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_pan-help.pd rename to externals/rjlib/rj/e_pan-help.pd diff --git a/l2ork_addons/rjlib/rj/e_pan.pd b/externals/rjlib/rj/e_pan.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_pan.pd rename to externals/rjlib/rj/e_pan.pd diff --git a/l2ork_addons/rjlib/rj/e_phaser-help.pd b/externals/rjlib/rj/e_phaser-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_phaser-help.pd rename to externals/rjlib/rj/e_phaser-help.pd diff --git a/l2ork_addons/rjlib/rj/e_phaser.pd b/externals/rjlib/rj/e_phaser.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_phaser.pd rename to externals/rjlib/rj/e_phaser.pd diff --git a/l2ork_addons/rjlib/rj/e_pingpong-help.pd b/externals/rjlib/rj/e_pingpong-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_pingpong-help.pd rename to externals/rjlib/rj/e_pingpong-help.pd diff --git a/l2ork_addons/rjlib/rj/e_pingpong.pd b/externals/rjlib/rj/e_pingpong.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_pingpong.pd rename to externals/rjlib/rj/e_pingpong.pd diff --git a/l2ork_addons/rjlib/rj/e_pitchshift-help.pd b/externals/rjlib/rj/e_pitchshift-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_pitchshift-help.pd rename to externals/rjlib/rj/e_pitchshift-help.pd diff --git a/l2ork_addons/rjlib/rj/e_pitchshift.pd b/externals/rjlib/rj/e_pitchshift.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_pitchshift.pd rename to externals/rjlib/rj/e_pitchshift.pd diff --git a/l2ork_addons/rjlib/rj/e_reslop-help.pd b/externals/rjlib/rj/e_reslop-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_reslop-help.pd rename to externals/rjlib/rj/e_reslop-help.pd diff --git a/l2ork_addons/rjlib/rj/e_reslop.pd b/externals/rjlib/rj/e_reslop.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_reslop.pd rename to externals/rjlib/rj/e_reslop.pd diff --git a/l2ork_addons/rjlib/rj/e_reverb-help.pd b/externals/rjlib/rj/e_reverb-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_reverb-help.pd rename to externals/rjlib/rj/e_reverb-help.pd diff --git a/l2ork_addons/rjlib/rj/e_reverb.pd b/externals/rjlib/rj/e_reverb.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_reverb.pd rename to externals/rjlib/rj/e_reverb.pd diff --git a/l2ork_addons/rjlib/rj/e_softclip-help.pd b/externals/rjlib/rj/e_softclip-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_softclip-help.pd rename to externals/rjlib/rj/e_softclip-help.pd diff --git a/l2ork_addons/rjlib/rj/e_softclip.pd b/externals/rjlib/rj/e_softclip.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_softclip.pd rename to externals/rjlib/rj/e_softclip.pd diff --git a/l2ork_addons/rjlib/rj/e_vocoder-help.pd b/externals/rjlib/rj/e_vocoder-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_vocoder-help.pd rename to externals/rjlib/rj/e_vocoder-help.pd diff --git a/l2ork_addons/rjlib/rj/e_vocoder.pd b/externals/rjlib/rj/e_vocoder.pd similarity index 100% rename from l2ork_addons/rjlib/rj/e_vocoder.pd rename to externals/rjlib/rj/e_vocoder.pd diff --git a/l2ork_addons/rjlib/rj/jon~.pd b/externals/rjlib/rj/jon~.pd similarity index 100% rename from l2ork_addons/rjlib/rj/jon~.pd rename to externals/rjlib/rj/jon~.pd diff --git a/l2ork_addons/rjlib/rj/m.txt b/externals/rjlib/rj/m.txt similarity index 100% rename from l2ork_addons/rjlib/rj/m.txt rename to externals/rjlib/rj/m.txt diff --git a/l2ork_addons/rjlib/rj/m_bpm2ms-help.pd b/externals/rjlib/rj/m_bpm2ms-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/m_bpm2ms-help.pd rename to externals/rjlib/rj/m_bpm2ms-help.pd diff --git a/l2ork_addons/rjlib/rj/m_bpm2ms.pd b/externals/rjlib/rj/m_bpm2ms.pd similarity index 100% rename from l2ork_addons/rjlib/rj/m_bpm2ms.pd rename to externals/rjlib/rj/m_bpm2ms.pd diff --git a/l2ork_addons/rjlib/rj/m_scale-help.pd b/externals/rjlib/rj/m_scale-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/m_scale-help.pd rename to externals/rjlib/rj/m_scale-help.pd diff --git a/l2ork_addons/rjlib/rj/m_scale.pd b/externals/rjlib/rj/m_scale.pd similarity index 100% rename from l2ork_addons/rjlib/rj/m_scale.pd rename to externals/rjlib/rj/m_scale.pd diff --git a/l2ork_addons/rjlib/rj/m_speedlimit-help.pd b/externals/rjlib/rj/m_speedlimit-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/m_speedlimit-help.pd rename to externals/rjlib/rj/m_speedlimit-help.pd diff --git a/l2ork_addons/rjlib/rj/m_speedlimit.pd b/externals/rjlib/rj/m_speedlimit.pd similarity index 100% rename from l2ork_addons/rjlib/rj/m_speedlimit.pd rename to externals/rjlib/rj/m_speedlimit.pd diff --git a/l2ork_addons/rjlib/rj/rjdispatch-help.pd b/externals/rjlib/rj/rjdispatch-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/rjdispatch-help.pd rename to externals/rjlib/rj/rjdispatch-help.pd diff --git a/l2ork_addons/rjlib/rj/rjdispatch.pd b/externals/rjlib/rj/rjdispatch.pd similarity index 100% rename from l2ork_addons/rjlib/rj/rjdispatch.pd rename to externals/rjlib/rj/rjdispatch.pd diff --git a/l2ork_addons/rjlib/rj/rjloader-help.pd b/externals/rjlib/rj/rjloader-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/rjloader-help.pd rename to externals/rjlib/rj/rjloader-help.pd diff --git a/l2ork_addons/rjlib/rj/rjloader.pd b/externals/rjlib/rj/rjloader.pd similarity index 100% rename from l2ork_addons/rjlib/rj/rjloader.pd rename to externals/rjlib/rj/rjloader.pd diff --git a/l2ork_addons/rjlib/rj/s.txt b/externals/rjlib/rj/s.txt similarity index 100% rename from l2ork_addons/rjlib/rj/s.txt rename to externals/rjlib/rj/s.txt diff --git a/l2ork_addons/rjlib/rj/s_blsaw-help.pd b/externals/rjlib/rj/s_blsaw-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_blsaw-help.pd rename to externals/rjlib/rj/s_blsaw-help.pd diff --git a/l2ork_addons/rjlib/rj/s_blsaw.pd b/externals/rjlib/rj/s_blsaw.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_blsaw.pd rename to externals/rjlib/rj/s_blsaw.pd diff --git a/l2ork_addons/rjlib/rj/s_blsquare-help.pd b/externals/rjlib/rj/s_blsquare-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_blsquare-help.pd rename to externals/rjlib/rj/s_blsquare-help.pd diff --git a/l2ork_addons/rjlib/rj/s_blsquare.pd b/externals/rjlib/rj/s_blsquare.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_blsquare.pd rename to externals/rjlib/rj/s_blsquare.pd diff --git a/l2ork_addons/rjlib/rj/s_buzz-help.pd b/externals/rjlib/rj/s_buzz-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_buzz-help.pd rename to externals/rjlib/rj/s_buzz-help.pd diff --git a/l2ork_addons/rjlib/rj/s_buzz.pd b/externals/rjlib/rj/s_buzz.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_buzz.pd rename to externals/rjlib/rj/s_buzz.pd diff --git a/l2ork_addons/rjlib/rj/s_fplaytable.pd b/externals/rjlib/rj/s_fplaytable.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_fplaytable.pd rename to externals/rjlib/rj/s_fplaytable.pd diff --git a/l2ork_addons/rjlib/rj/s_fplaytable2.pd b/externals/rjlib/rj/s_fplaytable2.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_fplaytable2.pd rename to externals/rjlib/rj/s_fplaytable2.pd diff --git a/l2ork_addons/rjlib/rj/s_guitar-help.pd b/externals/rjlib/rj/s_guitar-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_guitar-help.pd rename to externals/rjlib/rj/s_guitar-help.pd diff --git a/l2ork_addons/rjlib/rj/s_guitar.pd b/externals/rjlib/rj/s_guitar.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_guitar.pd rename to externals/rjlib/rj/s_guitar.pd diff --git a/l2ork_addons/rjlib/rj/s_looper-help.pd b/externals/rjlib/rj/s_looper-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_looper-help.pd rename to externals/rjlib/rj/s_looper-help.pd diff --git a/l2ork_addons/rjlib/rj/s_looper.pd b/externals/rjlib/rj/s_looper.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_looper.pd rename to externals/rjlib/rj/s_looper.pd diff --git a/l2ork_addons/rjlib/rj/s_playtable-help.pd b/externals/rjlib/rj/s_playtable-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_playtable-help.pd rename to externals/rjlib/rj/s_playtable-help.pd diff --git a/l2ork_addons/rjlib/rj/s_playtable.pd b/externals/rjlib/rj/s_playtable.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_playtable.pd rename to externals/rjlib/rj/s_playtable.pd diff --git a/l2ork_addons/rjlib/rj/s_playtable2-help.pd b/externals/rjlib/rj/s_playtable2-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_playtable2-help.pd rename to externals/rjlib/rj/s_playtable2-help.pd diff --git a/l2ork_addons/rjlib/rj/s_playtable2.pd b/externals/rjlib/rj/s_playtable2.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_playtable2.pd rename to externals/rjlib/rj/s_playtable2.pd diff --git a/l2ork_addons/rjlib/rj/s_rhodey-help.pd b/externals/rjlib/rj/s_rhodey-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_rhodey-help.pd rename to externals/rjlib/rj/s_rhodey-help.pd diff --git a/l2ork_addons/rjlib/rj/s_rhodey.pd b/externals/rjlib/rj/s_rhodey.pd similarity index 100% rename from l2ork_addons/rjlib/rj/s_rhodey.pd rename to externals/rjlib/rj/s_rhodey.pd diff --git a/l2ork_addons/rjlib/rj/sssad.pd b/externals/rjlib/rj/sssad.pd similarity index 100% rename from l2ork_addons/rjlib/rj/sssad.pd rename to externals/rjlib/rj/sssad.pd diff --git a/l2ork_addons/rjlib/rj/u.txt b/externals/rjlib/rj/u.txt similarity index 100% rename from l2ork_addons/rjlib/rj/u.txt rename to externals/rjlib/rj/u.txt diff --git a/l2ork_addons/rjlib/rj/u_fade-help.pd b/externals/rjlib/rj/u_fade-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/u_fade-help.pd rename to externals/rjlib/rj/u_fade-help.pd diff --git a/l2ork_addons/rjlib/rj/u_fade.pd b/externals/rjlib/rj/u_fade.pd similarity index 100% rename from l2ork_addons/rjlib/rj/u_fade.pd rename to externals/rjlib/rj/u_fade.pd diff --git a/l2ork_addons/rjlib/rj/u_record-help.pd b/externals/rjlib/rj/u_record-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/u_record-help.pd rename to externals/rjlib/rj/u_record-help.pd diff --git a/l2ork_addons/rjlib/rj/u_record.pd b/externals/rjlib/rj/u_record.pd similarity index 100% rename from l2ork_addons/rjlib/rj/u_record.pd rename to externals/rjlib/rj/u_record.pd diff --git a/l2ork_addons/rjlib/rj/u_samplebank-help.pd b/externals/rjlib/rj/u_samplebank-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/u_samplebank-help.pd rename to externals/rjlib/rj/u_samplebank-help.pd diff --git a/l2ork_addons/rjlib/rj/u_samplebank.pd b/externals/rjlib/rj/u_samplebank.pd similarity index 100% rename from l2ork_addons/rjlib/rj/u_samplebank.pd rename to externals/rjlib/rj/u_samplebank.pd diff --git a/l2ork_addons/rjlib/rj/u_samplebank2-help.pd b/externals/rjlib/rj/u_samplebank2-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/u_samplebank2-help.pd rename to externals/rjlib/rj/u_samplebank2-help.pd diff --git a/l2ork_addons/rjlib/rj/u_samplebank2.pd b/externals/rjlib/rj/u_samplebank2.pd similarity index 100% rename from l2ork_addons/rjlib/rj/u_samplebank2.pd rename to externals/rjlib/rj/u_samplebank2.pd diff --git a/l2ork_addons/rjlib/rj/u_splicetrans-help.pd b/externals/rjlib/rj/u_splicetrans-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/u_splicetrans-help.pd rename to externals/rjlib/rj/u_splicetrans-help.pd diff --git a/l2ork_addons/rjlib/rj/u_splicetrans.pd b/externals/rjlib/rj/u_splicetrans.pd similarity index 100% rename from l2ork_addons/rjlib/rj/u_splicetrans.pd rename to externals/rjlib/rj/u_splicetrans.pd diff --git a/l2ork_addons/rjlib/rj/u_stereo-help.pd b/externals/rjlib/rj/u_stereo-help.pd similarity index 100% rename from l2ork_addons/rjlib/rj/u_stereo-help.pd rename to externals/rjlib/rj/u_stereo-help.pd diff --git a/l2ork_addons/rjlib/rj/u_stereo.pd b/externals/rjlib/rj/u_stereo.pd similarity index 100% rename from l2ork_addons/rjlib/rj/u_stereo.pd rename to externals/rjlib/rj/u_stereo.pd diff --git a/l2ork_addons/rjlib/rjXYZshake-help.pd b/externals/rjlib/rjXYZshake-help.pd similarity index 100% rename from l2ork_addons/rjlib/rjXYZshake-help.pd rename to externals/rjlib/rjXYZshake-help.pd diff --git a/l2ork_addons/rjlib/rjXYZshake.pd b/externals/rjlib/rjXYZshake.pd similarity index 100% rename from l2ork_addons/rjlib/rjXYZshake.pd rename to externals/rjlib/rjXYZshake.pd diff --git a/l2ork_addons/rjlib/rj_fft.pd b/externals/rjlib/rj_fft.pd similarity index 100% rename from l2ork_addons/rjlib/rj_fft.pd rename to externals/rjlib/rj_fft.pd diff --git a/l2ork_addons/rjlib/rjdispatch-help.pd b/externals/rjlib/rjdispatch-help.pd similarity index 100% rename from l2ork_addons/rjlib/rjdispatch-help.pd rename to externals/rjlib/rjdispatch-help.pd diff --git a/l2ork_addons/rjlib/rjdispatch.pd b/externals/rjlib/rjdispatch.pd similarity index 100% rename from l2ork_addons/rjlib/rjdispatch.pd rename to externals/rjlib/rjdispatch.pd diff --git a/l2ork_addons/rjlib/rjloader-help.pd b/externals/rjlib/rjloader-help.pd similarity index 100% rename from l2ork_addons/rjlib/rjloader-help.pd rename to externals/rjlib/rjloader-help.pd diff --git a/l2ork_addons/rjlib/rjloader.pd b/externals/rjlib/rjloader.pd similarity index 100% rename from l2ork_addons/rjlib/rjloader.pd rename to externals/rjlib/rjloader.pd diff --git a/l2ork_addons/rjlib/rjsave-ex-help.pd b/externals/rjlib/rjsave-ex-help.pd similarity index 100% rename from l2ork_addons/rjlib/rjsave-ex-help.pd rename to externals/rjlib/rjsave-ex-help.pd diff --git a/l2ork_addons/rjlib/rjsave-ex.pd b/externals/rjlib/rjsave-ex.pd similarity index 100% rename from l2ork_addons/rjlib/rjsave-ex.pd rename to externals/rjlib/rjsave-ex.pd diff --git a/l2ork_addons/rjlib/soundinput.pd b/externals/rjlib/soundinput.pd similarity index 100% rename from l2ork_addons/rjlib/soundinput.pd rename to externals/rjlib/soundinput.pd diff --git a/l2ork_addons/rjlib/soundoutput.pd b/externals/rjlib/soundoutput.pd similarity index 100% rename from l2ork_addons/rjlib/soundoutput.pd rename to externals/rjlib/soundoutput.pd diff --git a/l2ork_addons/rjlib/src/makefile b/externals/rjlib/src/makefile similarity index 100% rename from l2ork_addons/rjlib/src/makefile rename to externals/rjlib/src/makefile diff --git a/l2ork_addons/rjlib/src/makefile_mingw b/externals/rjlib/src/makefile_mingw similarity index 100% rename from l2ork_addons/rjlib/src/makefile_mingw rename to externals/rjlib/src/makefile_mingw diff --git a/l2ork_addons/rjlib/src/rj_accum-help.pd b/externals/rjlib/src/rj_accum-help.pd similarity index 100% rename from l2ork_addons/rjlib/src/rj_accum-help.pd rename to externals/rjlib/src/rj_accum-help.pd diff --git a/l2ork_addons/rjlib/src/rj_accum.c b/externals/rjlib/src/rj_accum.c similarity index 100% rename from l2ork_addons/rjlib/src/rj_accum.c rename to externals/rjlib/src/rj_accum.c diff --git a/l2ork_addons/rjlib/src/rj_barkflux_accum~-help.pd b/externals/rjlib/src/rj_barkflux_accum~-help.pd similarity index 100% rename from l2ork_addons/rjlib/src/rj_barkflux_accum~-help.pd rename to externals/rjlib/src/rj_barkflux_accum~-help.pd diff --git a/l2ork_addons/rjlib/src/rj_barkflux_accum~.c b/externals/rjlib/src/rj_barkflux_accum~.c similarity index 100% rename from l2ork_addons/rjlib/src/rj_barkflux_accum~.c rename to externals/rjlib/src/rj_barkflux_accum~.c diff --git a/l2ork_addons/rjlib/src/rj_centroid~-help.pd b/externals/rjlib/src/rj_centroid~-help.pd similarity index 100% rename from l2ork_addons/rjlib/src/rj_centroid~-help.pd rename to externals/rjlib/src/rj_centroid~-help.pd diff --git a/l2ork_addons/rjlib/src/rj_centroid~.c b/externals/rjlib/src/rj_centroid~.c similarity index 100% rename from l2ork_addons/rjlib/src/rj_centroid~.c rename to externals/rjlib/src/rj_centroid~.c diff --git a/l2ork_addons/rjlib/src/rj_senergy~-help.pd b/externals/rjlib/src/rj_senergy~-help.pd similarity index 100% rename from l2ork_addons/rjlib/src/rj_senergy~-help.pd rename to externals/rjlib/src/rj_senergy~-help.pd diff --git a/l2ork_addons/rjlib/src/rj_senergy~.c b/externals/rjlib/src/rj_senergy~.c similarity index 100% rename from l2ork_addons/rjlib/src/rj_senergy~.c rename to externals/rjlib/src/rj_senergy~.c diff --git a/l2ork_addons/rjlib/src/rj_zcr~-help.pd b/externals/rjlib/src/rj_zcr~-help.pd similarity index 100% rename from l2ork_addons/rjlib/src/rj_zcr~-help.pd rename to externals/rjlib/src/rj_zcr~-help.pd diff --git a/l2ork_addons/rjlib/src/rj_zcr~.c b/externals/rjlib/src/rj_zcr~.c similarity index 100% rename from l2ork_addons/rjlib/src/rj_zcr~.c rename to externals/rjlib/src/rj_zcr~.c diff --git a/l2ork_addons/rjlib/sssad.pd b/externals/rjlib/sssad.pd similarity index 100% rename from l2ork_addons/rjlib/sssad.pd rename to externals/rjlib/sssad.pd diff --git a/l2ork_addons/rjlib/touch.pd b/externals/rjlib/touch.pd similarity index 100% rename from l2ork_addons/rjlib/touch.pd rename to externals/rjlib/touch.pd diff --git a/l2ork_addons/tar_em_up.sh b/l2ork_addons/tar_em_up.sh index 49b729abb..c31ac9890 100755 --- a/l2ork_addons/tar_em_up.sh +++ b/l2ork_addons/tar_em_up.sh @@ -292,8 +292,6 @@ then cp -f array* ../../../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra # return to l2ork_addons folder cd ../../ - # copy rjlib into the extra folder - cp -rf rjlib ../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra # install raspberry pi externals (if applicable) #if [ $rpi -eq 1 ] #then -- GitLab