diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/bootstrap.sh pd-pool-0.2.2+git20210923.1.40cb82e/bootstrap.sh --- pd-pool-0.2.2+git20161105.1.4b157f51/bootstrap.sh 2015-03-24 23:04:53.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/bootstrap.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -#! /bin/sh - -( - ( - ( - test -x "$(which libtoolize)" && libtoolize --force - ) || - ( - # MacOS has no libtoolize... use glibtoolize instead - test -x "$(which glibtoolize)" && glibtoolize --force - ) - ) && - aclocal && - automake --foreign --add-missing && - autoconf -) || -( - echo Bootstrapping failed - false -) diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/configure.ac pd-pool-0.2.2+git20210923.1.40cb82e/configure.ac --- pd-pool-0.2.2+git20161105.1.4b157f51/configure.ac 2015-03-24 23:04:53.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/configure.ac 1970-01-01 00:00:00.000000000 +0000 @@ -1,215 +0,0 @@ -threads_default=no - -AC_INIT([pool],[0.0.0],[gr@grrrr.org]) - -########################################################### - -AM_INIT_AUTOMAKE - -AC_SUBST(SYSTEM) -AC_SUBST(INCLUDEDIRS) -AC_SUBST(LIBDIRS) -AC_SUBST(libs) -AC_SUBST(FRAMEWORKS) -AC_SUBST(EXT_CFLAGS) -AC_SUBST(EXT_LDFLAGS) -AC_SUBST(EXTENSION) - -# configure options -AC_ARG_ENABLE(system, - AC_HELP_STRING(--enable-system,[realtime system [default=pd]]), - [SYSTEM=$enableval], - [SYSTEM=pd] -) - -AC_ARG_WITH(sysdir, - AC_HELP_STRING(--with-sysdir,[path to pd or max headers]), - [sysdir=$withval], - AC_MSG_ERROR([path to system headers is required]) -) - -AC_ARG_WITH(flext-headers, - AC_HELP_STRING(--with-flext-headers,[path to the flext headers [default=/usr/local/include/flext]]), - [flext_headers=$withval], - [flext_headers="/usr/local/include/flext"] -) - -AC_ARG_WITH(flext-libs, - AC_HELP_STRING(--with-flext-libs,[path to the flext libraries [default=/usr/local/lib]]), - [flext_libs=$withval], - [flext_libs="/usr/local/lib"] -) - -AC_ARG_ENABLE(dynamic, - AC_HELP_STRING(--enable-dynamic,[link dynamically to flext [default=no]]), - [dynamic=$enableval], - [dynamic=no] -) - -AC_ARG_ENABLE(debug, - AC_HELP_STRING(--enable-debug,[enables debug build [default=no]]), - [debug=$enableval], - [debug=no] -) - -AC_ARG_ENABLE(threads, - AC_HELP_STRING(--enable-threads,[enables threaded build [default=$threads_default]]), - [threads=$enableval], - [threads=$threads_default], -) - -AC_ARG_ENABLE(optimize, - AC_HELP_STRING(--enable-optimize,[enables optimized builds for: pentium4, pentium3, G4, G5, etc.]), - [optimize=$enableval] -) - -# if CFLAGS aren't set by the user, set them to an empty string -# otherwise AC_PROG_CC sets them to "-O2 -g" -test ".$CFLAGS" = "." && CFLAGS=" " -test ".$CXXFLAGS" = "." && CXXFLAGS=" " - -# disable static library building (must be before AC_PROG_LIBTOOL) -AC_DISABLE_STATIC -# needed to build win32 dlls -AC_LIBTOOL_WIN32_DLL - -# Checks for programs. -AC_PROG_CC -AC_PROG_CXX -AC_PROG_LIBTOOL -AC_PROG_INSTALL -AC_PROG_MAKE_SET - -# Language use for checks -AC_LANG(C++) - -# Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_C_INLINE -AC_TYPE_SIZE_T -AC_STRUCT_TM - -# Checks for libraries. - -INCLUDEDIRS="$INCLUDEDIRS $flext_headers" -LIBDIRS="$LIBDIRS $flext_libs" - - -if test $SYSTEM == pd; then - AC_DEFINE(FLEXT_SYS,2) -# check for g_canvas.h in pd folder - AC_CHECK_FILE([$sysdir/g_canvas.h],,AC_MSG_ERROR([Cannot find $sysdir/g_canvas.h])) - INCLUDEDIRS="$INCLUDEDIRS $sysdir" - libs="$libs pd" - - if test $(uname -s) == Linux; then - EXTENSION=.pd_linux - elif test $(uname -s) == Darwin; then - EXT_LDFLAGS="-flat_namespace -undefined suppress" - EXTENSION=.pd_darwin - elif ( test $(uname -s) == CYGWIN_NT-5.0 ) || ( test $(uname -s) == CYGWIN_NT-5.1 ) || ( test $(uname -s) == MINGW32_NT-5.1 ) ; then - EXTENSION=.dll - AC_DEFINE(NT) - fi - -elif test $SYSTEM == max; then - AC_DEFINE(FLEXT_SYS,1) -# check for MaxAPI.h in pd folder - AC_CHECK_FILE([$sysdir/max-includes/MaxAPI.h],,AC_MSG_ERROR([Cannot find $sysdir/max-includes/MaxAPI.h])) - AC_CHECK_FILE([$sysdir/max-includes/MaxAudioAPI.h],,AC_MSG_ERROR([Cannot find $sysdir/max-includes/MaxAudioAPI.h])) - INCLUDEDIRS="$INCLUDEDIRS $sysdir/max-includes $sysdir/msp-includes" - -else - AC_MSG_ERROR([system must be pd or max]) -fi - - -if test ".$dynamic" == ".yes"; then - AC_DEFINE(FLEXT_SHARED) - LIBNAME=flext-${SYSTEM} - if test ".$debug" == ".yes"; then - LIBNAME=${LIBNAME}_d - fi -else - LIBNAME=flext-${SYSTEM}_ - if test ".$threaded" == ".yes"; then - AC_DEFINE(FLEXT_THREADS) - LIBNAME=${LIBNAME}t - else - LIBNAME=${LIBNAME}s - fi - if test ".$debug" == ".yes"; then - LIBNAME=${LIBNAME}d - fi -fi - -libs="$libs $LIBNAME" - - -# Checks are complicated because flext references symbols from pd or Max -#AC_CHECK_LIB([$LIBNAME], -# buf_class, # check for variable "buf_class"" -# true, -# AC_MSG_ERROR([cannot find flext library $flext_libs/$LIBNAME]) -#) -# test for existence of library file -AC_MSG_CHECKING([for $flext_libs/lib$LIBNAME.*]) -if test ".$(ls $flext_libs/lib$LIBNAME.*)" == "."; then - AC_MSG_ERROR([cannot find flext library $flext_libs/$LIBNAME]) -else - AC_MSG_RESULT(yes) -fi - -# we ought to check flext header files: -#AC_CHECK_HEADERS([$flext_headers/flext.h], -# but we rather check for pure existence since we are dependent on the pd/Max/pthreads etc. headers -AC_CHECK_FILE([$flext_headers/flext.h], - , - AC_MSG_ERROR([cannot find $flext_headers/flext.h]) -) - - -if test $(uname -s) == Linux; then - true -elif test $(uname -s) == Darwin; then - FRAMEWORKS="$FRAMEWORKS ApplicationServices vecLib" -elif ( test $(uname -s) == CYGWIN_NT-5.0 ) || ( test $(uname -s) == CYGWIN_NT-5.1 ) || ( test $(uname -s) == MINGW32_NT-5.1 ) ; then - EXT_CFLAGS="$EXT_CFLAGS -mms-bitfields -mno-cygwin" - EXT_LDFLAGS="$EXT_LDFLAGS -mno-cygwin" -fi - - -# set compilation flags -if test ".$debug" == ".yes"; then - AC_DEFINE(FLEXT_DEBUG) - EXT_CFLAGS="$EXT_CFLAGS -g" -else - EXT_CFLAGS="$EXT_CFLAGS -O2" -fi - - - -if test ".$optimize" == ".yes"; then - OPT_FLAGS="$OPT_FLAGS -mtune=$optimize" - case $optimize in - pentium | pentium2 | athlon | pentium-mmx) - EXT_CFLAGS="$EXT_CFLAGS -march=$optimize";; - pentium3 | pentium3m | pentium4 | pentium4m | pentium-m | prescott | nocona | athlon-xp | athlon-mp | athlon64 | opteron) - EXT_CFLAGS="$EXT_CFLAGS -march=$optimize -mfpmath=sse"; - AC_DEFINE(FLEXT_USE_SIMD);; - G3) - EXT_CFLAGS="$EXT_CFLAGS -mcpu=$optimize";; - G5 | G4) - EXT_CFLAGS="$EXT_CFLAGS -mcpu=$optimize -faltivec"; - AC_DEFINE(FLEXT_USE_SIMD);; - *) - ;; - esac -fi - -########################################################### - -AC_OUTPUT([ - Makefile - source/Makefile -]) diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/debian/changelog pd-pool-0.2.2+git20210923.1.40cb82e/debian/changelog --- pd-pool-0.2.2+git20161105.1.4b157f51/debian/changelog 2020-03-22 15:53:50.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/debian/changelog 2021-09-25 21:06:27.000000000 +0000 @@ -1,8 +1,26 @@ -pd-pool (0.2.2+git20161105.1.4b157f51-1build1) focal; urgency=medium +pd-pool (0.2.2+git20210923.1.40cb82e-1) unstable; urgency=medium - * No-change rebuild for libgcc-s1 package name change. + * New upstream version 0.2.2+git20210923.1.40cb82e - -- Matthias Klose Sun, 22 Mar 2020 16:53:50 +0100 + [ Ondřej Nový ] + * Use debhelper-compat instead of debian/compat + + [ Debian Janitor ] + * Bump debhelper from old 11 to 13. + * Set upstream metadata fields: Bug-Database, Bug-Submit. + + [ IOhannes m zmölnig (Debian/GNU) ] + * Adjust to new build-system + * Fix FTCBFS: Let dh_auto_build pass cross tools to make. + Thanks to Helmut Grohne (Closes: #977755) + * Include buildtools.mk (also needed for cross-compilation) + * Add salsa-ci configuration + * Declare that building this package does not require 'root' powers. + * Apply "warp-and-sort -ast" + * Bump d/watch version + * Bump standards version to 4.6.0 + + -- IOhannes m zmölnig (Debian/GNU) Sat, 25 Sep 2021 23:06:27 +0200 pd-pool (0.2.2+git20161105.1.4b157f51-1) unstable; urgency=medium diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/debian/compat pd-pool-0.2.2+git20210923.1.40cb82e/debian/compat --- pd-pool-0.2.2+git20161105.1.4b157f51/debian/compat 2018-02-01 22:31:57.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/debian/compat 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -11 diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/debian/control pd-pool-0.2.2+git20210923.1.40cb82e/debian/control --- pd-pool-0.2.2+git20161105.1.4b157f51/debian/control 2018-02-01 22:31:57.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/debian/control 2021-09-25 21:06:27.000000000 +0000 @@ -5,11 +5,12 @@ Uploaders: IOhannes m zmölnig (Debian/GNU) , Build-Depends: - debhelper (>=11~), + debhelper-compat (= 13), pd-flext-dev, - pkg-config, pd-lib-builder, -Standards-Version: 4.1.3 + pkg-config, +Standards-Version: 4.6.0 +Rules-Requires-Root: no Homepage: https://grrrr.org/research/software/pool Vcs-Git: https://salsa.debian.org/multimedia-team/pd/pd-pool.git Vcs-Browser: https://salsa.debian.org/multimedia-team/pd/pd-pool @@ -17,8 +18,8 @@ Package: pd-pool Architecture: any Depends: - ${shlibs:Depends}, ${misc:Depends}, + ${shlibs:Depends}, Description: Hierarchical data storage for Pure Data [pool] can store and retrieve key/value pairs, where a key can be any atom and the value can be any list of atoms. [pool] can manage folders, a folder name diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/debian/rules pd-pool-0.2.2+git20210923.1.40cb82e/debian/rules --- pd-pool-0.2.2+git20161105.1.4b157f51/debian/rules 2018-02-01 22:31:57.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/debian/rules 2021-09-25 21:06:27.000000000 +0000 @@ -4,22 +4,43 @@ #enable hardening export DEB_BUILD_MAINT_OPTIONS=hardening=+all + +-include /usr/share/dpkg/buildtools.mk + +PKG_CONFIG?=pkg-config +CFLAGS+=$(shell $(PKG_CONFIG) --cflags pd-flext) +LDFLAGS+=$(shell $(PKG_CONFIG) --libs pd-flext) + +pkglibdir = /usr/lib/pd/extra + DEB_COPYRIGHT_CHECK_IGNORE_REGEX = \ ^\./\.git/.*|\./debian/|\./pool\.mcp|\./pool\.help$ %: - dh $@ --without autoreconf + dh $@ + +override_dh_install: + dh_install +# fix permissions + find $(CURDIR)/debian/*/$(pkglibdir) -name "*.pd_linux" -exec \ + chmod 0664 {} + +# remove license file so we can replace it with link to the Debian license file + rm -f -- $(CURDIR)/debian/*/$(pkglibdir)/*/LICENSE.txt -override_dh_auto_build: - make -f /usr/share/pd-flext/dev/Makefile.flext \ - CFLAGS="$(CPPFLAGS) $(CFLAGS)" \ +override_dh_auto_clean \ +override_dh_auto_build \ +override_dh_auto_test \ +override_dh_auto_install: + $(patsubst override_%,%,$@) -- \ + PDLIBBUILDER_DIR=/usr/share/pd-lib-builder/ \ + prefix=/usr pkglibdir=$(pkglibdir) \ + arch.flags="" \ + cflags="-DFLEXT_ATTRIBUTES=1" \ + CPPFLAGS="$(CPPFLAGS)" \ + CFLAGS="$(CPPFLAGS) $(CFLAGS) $(CXXFLAGS)" \ LDFLAGS="$(LDFLAGS)" \ $(empty) -override_dh_auto_clean: - make -f /usr/share/pd-flext/dev/Makefile.flext clean - dh_auto_clean - licensecheck: licensecheck -i "$(DEB_COPYRIGHT_CHECK_IGNORE_REGEX)" --deb-machine -r . \ > debian/copyright_newhints diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/debian/salsa-ci.yml pd-pool-0.2.2+git20210923.1.40cb82e/debian/salsa-ci.yml --- pd-pool-0.2.2+git20161105.1.4b157f51/debian/salsa-ci.yml 1970-01-01 00:00:00.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/debian/salsa-ci.yml 2021-09-25 21:06:27.000000000 +0000 @@ -0,0 +1,4 @@ +--- +include: + - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml + - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/debian/upstream/metadata pd-pool-0.2.2+git20210923.1.40cb82e/debian/upstream/metadata --- pd-pool-0.2.2+git20161105.1.4b157f51/debian/upstream/metadata 1970-01-01 00:00:00.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/debian/upstream/metadata 2021-09-25 21:06:27.000000000 +0000 @@ -0,0 +1,3 @@ +--- +Bug-Database: https://github.com/grrrr/pool/issues +Bug-Submit: https://github.com/grrrr/pool/issues/new diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/debian/watch pd-pool-0.2.2+git20210923.1.40cb82e/debian/watch --- pd-pool-0.2.2+git20161105.1.4b157f51/debian/watch 2018-02-01 22:31:57.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/debian/watch 2021-09-25 21:06:27.000000000 +0000 @@ -1,4 +1,4 @@ # process this file with uscan(1) -version=3 +version=4 opts=uversionmangle=s/-/./g,dversionmangle=s/\+git[0-9a-f.]*$//,filenamemangle=s/.+\/v(\d\S*)\.tar\.gz/pool-$1\.tar\.gz/ \ https://github.com/grrrr/pool/tags .*/v(\d\S*)\.tar\.gz diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/Makefile pd-pool-0.2.2+git20210923.1.40cb82e/Makefile --- pd-pool-0.2.2+git20161105.1.4b157f51/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/Makefile 2020-03-05 12:11:14.000000000 +0000 @@ -0,0 +1,12 @@ +NAME=pool +cflags=-DFLEXT_INLINE -DFLEXT_ATTRIBUTES=1 + +# source files +$(NAME).class.sources = $(wildcard source/*.cpp) + +# help files +datafiles = $(wildcard pd/*-help.pd) + +# include Makefile.pdlibbuilder from submodule directory 'pd-lib-builder' +PDLIBBUILDER_DIR=./pd-lib-builder/ +include $(PDLIBBUILDER_DIR)/Makefile.pdlibbuilder diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/Makefile.am pd-pool-0.2.2+git20210923.1.40cb82e/Makefile.am --- pd-pool-0.2.2+git20161105.1.4b157f51/Makefile.am 2015-03-24 23:04:53.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -# -# automake template -# - -SUBDIRS = source diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/pd-lib-builder/CHANGELOG.txt pd-pool-0.2.2+git20210923.1.40cb82e/pd-lib-builder/CHANGELOG.txt --- pd-pool-0.2.2+git20161105.1.4b157f51/pd-lib-builder/CHANGELOG.txt 1970-01-01 00:00:00.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/pd-lib-builder/CHANGELOG.txt 2020-03-05 12:11:14.000000000 +0000 @@ -0,0 +1,104 @@ +Changelog for Makefile.pdlibbuilder. + +v0.6.0, dated 2019-12-21 +- detect target platform (OS and architecture) rather than build platform (#55) +- introduce optional user variable 'PLATFORM' for cross compilation +- no longer build OSX/MacOS fat binaries by default (#21, #50) +- do build fat binaries when 'extension=d_fat' is specified for OSX/MacOS +- fix bug where minimum OSX/MacOS version wasn't defined, and set it to 10.6 + +v0.5.1, dated 2018-03-15 +Fixes and improvements for Windows builds: +- properly evaluate variables 'PDDIR' and 'PDBINDIR' to find pd.dll +- define default path of 32 bit Pd on 64 bit Windows +- link C++ externals with standard C libs on Windows, they don't load otherwise +- strip installed Windows binaries by default +(issues #34, #39, #41, #42 respectively) +Warning for all platforms: variable 'PD_PATH' is no longer supported, use the +equivalent 'PDDIR'. + +v0.5.0, dated 2018-01-23 +Implement target architecture detection for Windows builds, +and set appropriate options for 32 and 64 bit (used to be for 32 bit only). +(feature, issue #37 #38, merge commit 215bf3e) + +v0.4.4, dated 2016-11-22 +Use variable 'system' when evaluating 'for{Linux,Darwin,Windows}' +(bugfix, issue #31, commit 2c14110) + +v0.4.3, dated 2016-11-02 +Replace flags '-fpic' by 'fPIC'. +(bugfix, issue #29, commit 426b38b) + +v0.4.2, dated 2016-10-30 +Fix issue where incorrect message about m_pd.h is given. +(bugfix, commit 2e13d8f) + +v0.4.1, dated 2016-10-27 +Respect cflag for minimum OSX version when defined by lib makefile. +(bugfix, pull request #22, commit 48c4127) + +v0.4.0, dated 2016-10-14 +Introduced path variables PDDIR, PDINCLUDEDIR, PDBINDIR, PDLIBDIR which can +also be defined in environment. +(feature, issue #27, commit b0dab72) + +v0.3.1, dated 2016-10-13 +Fix bug where pd.dll wouldn't be found. +(bugfix, commit a0c87be) + +v0.3.0, dated 2016-10-09 +Variable 'PD_PATH' introduced for pd-extended / pd-l2ork compatibility. +(feature, issue #26, commit 41e9743) + +v0.2.8, dated 2016-10-09 +Allow installed files to contain weird characters (notably '$'). +(bugfix, pull request #20, commit 5b920b1) + +v0.2.7, dated 2016-10-04 +Remove all default pd search paths except vanilla's. +(discussion, issue #25, commit a6a89dc) + +v0.2.6, dated 2016-09-20 +Redefined dependency checking so it won't stall rebuilds on OSX. +(bugfix, issue #16, commit 9fd1795) + +v0.2.5, dated 2016-06-26 +Fixed dependency checking for object files in other directories. +(bugfix, commit f06e550) + +v0.2.4, dated 2016-06-25 +Fixed regression bug that disabled all dependency checking. +(bugfix, commit 1d7bb5e) + +v0.2.3, dated 2016-03-29 +Disabled dependency checking for OSX <= 10.5 because it stalled rebuilds. +(bugfix, issue #16, commit eb614fd) + +v0.2.2, dated 2016-03-28 +Removed target 'pre' because it forced rebuild of everything in 'all'. +(bugfix, issue #17, commit c989c8e) + +v0.2.1, dated 2015-12-27 +Implement / respect 'CPPFLAGS','CFLAGS'and 'LDFLAGS'. +(bugfix, issue #5, commit 98f3582) + +v0.2.0, dated 2015-12-19 +Added per-platform multiline defines 'forLinux', 'forDarwin', 'forWindows'. +(feature, pull request #9, commit 3946ea5) + +v0.1.0, dated 2015-12-08 +Added targets 'pre' and 'post' to automatically run before and after 'all'. +(feature, pull request #4, commit a5678ac) + +v0.0.2, dated 2015-12-06 +Improved methods for searching pd paths. +(bugfix, commit ed37e6b) + +v0.0.1, dated 2015-10-31 +Fixed expansion of variable 'lib.version'. +(bugfix, issue #1, commit 974b617) + +v0.0.0, dated 2015-06-24 +Initial version. +(commit 16517a2) diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/pd-lib-builder/Makefile.pdlibbuilder pd-pool-0.2.2+git20210923.1.40cb82e/pd-lib-builder/Makefile.pdlibbuilder --- pd-pool-0.2.2+git20161105.1.4b157f51/pd-lib-builder/Makefile.pdlibbuilder 1970-01-01 00:00:00.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/pd-lib-builder/Makefile.pdlibbuilder 2020-03-05 12:11:14.000000000 +0000 @@ -0,0 +1,1336 @@ +# Makefile.pdlibbuilder dated 2019-12-21 +version = 0.6.0 + +# 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. +# +# Grab the newest version of Makefile.pdlibbuilder from +# https://github.com/pure-data/pd-lib-builder/ +# +# 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 +# - .class.sources +# - .class.ldflags +# - .class.ldlibs +# - cflags +# - ldflags +# - ldlibs +# - datafiles +# - datadirs +# - makefiles +# - makefiledirs +# - externalsdir +# +# Optional multiline defines evaluated per operating system: +# +# - forLinux +# - forDarwin +# - forWindows +# +# Variables available for your makefile or make command line: +# +# - make-lib-executable +# - suppress-wunused +# +# Path variables for make command line or environment: +# +# - PDDIR +# - PDINCLUDEDIR +# - PDBINDIR +# - PDLIBDIR +# +# Standard make variables for make command line or environment: +# +# - CPPFLAGS +# - CFLAGS +# - LDFLAGS +# - CC +# - CXX +# - INSTALL +# - STRIP +# - DESTDIR +# +# Optional user variables for make command line or environment: +# +# - PLATFORM +# +# Deprecated path variables: +# +# - pdincludepath +# - pdbinpath +# - objectsdir +# +# +#=== 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. +# +# .class.sources: +# Source file(s) (C or C++) specific to class . 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. +# +# .class.ldflags and .class.ldlibs: +# Define ldflags resp. ldlibs specific to class . 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. +# +# 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. +# +# 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 overridden 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. +# +# PDDIR: +# Root directory of 'portable' pd package. When defined, PDINCLUDEDIR and +# PDBINDIR will be evaluated as $(PDDIR)/src and $(PDDIR)/bin. +# +# PDINCLUDEDIR: +# Directory where Pd API m_pd.h should be found, and other Pd header files. +# Overrides the default search path. +# +# PDBINDIR: +# Directory where pd.dll should be found for linking (Windows only). Overrides +# the default search path. +# +# PDLIBDIR: +# Root directory for installation of Pd library directories. Overrides the +# default install location. +# +# DESTDIR: +# Prepended path component for staged install. +# +# PLATFORM: +# Target platform for cross compilation in the form of GNU triplet: +# cpu-vendor-os. Example: x86_64-w64-mingw32. This specifies the tool chain that +# pdlibbuilder will use, if installed and locatable. System and architecture +# will then be autodefined accordingly. In most cases no other variables need to +# be overridden. +# +# 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 +# Definition of install program. +# +# STRIP +# Name of strip program. Default 'strip' can be overridden in cross compilation +# environments. +# +# objectsdir: +# Root directory for installation of Pd library directories, like PDLIBDIR but +# not overridable by environment. Supported for compatibility with pd-extended +# central makefile, but deprecated otherwise. +# +# pdincludepath, pdbinpath: +# As PDINCLUDEDIR and PDBINDIR but not overridable by environment. Deprecated +# as user variables. +# +# +#=== 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. +# +# Default search path for m_pd.h and other API header files is platform +# dependent, and overridable by PDINCLUDEDIR: +# +# Linux: /usr/include/pd +# +# OSX: /Applications/Pd*.app/Contents/Resources/src +# +# Windows: %PROGRAMFILES%/Pd/src +# %PROGRAMFILES(X86)%/Pd/src (32 bit builds on 64 bit Windows) +# +# Default search path for binary pd.dll (Windows), overridable by PDBINDIR +# +# %PROGRAMFILES%/Pd/bin +# %PROGRAMFILES(X86)%/Pd/bin (32 bit builds on 64 bit Windows) +# +# Default location to install pd libraries is platform dependent, and +# overridable by PDLIBDIR: +# +# Linux: /usr/local/lib/pd-externals +# OSX: ~/Library/Pd +# Windows: %APPDATA%/Pd +# +# https://puredata.info/docs/faq/how-do-i-install-externals-and-help-files +# 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 +# : force clean build of an individual class +# .pre: make preprocessor output file in current working directory +# .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 +# dumpmachine: print compiler output of option '-dumpmachine' +# 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 -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 ' to print debug details of the make process. +# Use 'make -p ' to print make's database. +# +# +#=== TODO ====================================================================== +# +# +# - decide whether to use -static-libgcc or shared dll in MinGW +# - cygwin support +# - android 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. +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 .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 .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 + + +################################################################################ +### target platform detection ################################################## +################################################################################ + + +#=== target platform =========================================================== + + +# PLATFORM: optional user variable to define target platform for cross +# compilation. Redefine build tools accordingly. PLATFORM should match +# the exact target prefix of tools present in $PATH, like x86_64-w64-mingw32, +# x86_64-apple-darwin12 etc. Tool definitions are exported to ensure submakes +# will get the same. + +ifneq ($(PLATFORM),) + ifneq ($(findstring darwin, $(PLATFORM)),) + export CC = $(PLATFORM)-cc + export CXX = $(PLATFORM)-c++ + export CPP = $(PLATFORM)-cc + else + export CC = $(PLATFORM)-gcc + export CXX = $(PLATFORM)-g++ + export CPP = $(PLATFORM)-cpp + endif + STRIP = $(PLATFORM)-strip +endif + +# Let (native or cross-) compiler report target triplet and isolate individual +# words therein to facilitate later processing. +target.triplet := $(subst -, ,$(shell $(CC) -dumpmachine)) + + +#=== operating system ========================================================== + + +# The following systems are defined: Linux, Darwin, Windows. GNU and +# GNU/kFreeBSD are treated as Linux to get the same options. + +ifneq ($(filter linux gnu% kfreebsd, $(target.triplet)),) + system = Linux +endif + +ifneq ($(filter darwin%, $(target.triplet)),) + system = Darwin +endif + +ifneq ($(filter mingw% cygwin%, $(target.triplet)),) + system = Windows +endif + +# evaluate possible system-specific multiline defines from library makefile +$(eval $(for$(system))) + + +# TODO: Cygwin, Android + + +#=== architecture ============================================================== + + +# The following CPU names can be processed by pdlibbuilder: +# i*86 Intel 32 bit +# x86_64 Intel 64 bit +# arm ARM 32 bit +# aarch64 ARM 64 bit + +target.arch := $(firstword $(target.triplet)) + + +################################################################################ +### variables per platform ##################################################### +################################################################################ + + +#=== flags per architecture ==================================================== + + +# Set architecture-dependent cflags, mainly for Linux. For Mac and Windows, +# arch.c.flags are overriden below. To see gcc's default architecture flags: +# $ gcc -Q --help=target + +# ARMv6: Raspberry Pi 1st gen, not detectable from target.arch +ifeq ($(shell uname), armv6l) + arch.c.flags = -march=armv6 -mfpu=vfp -mfloat-abi=hard + +# ARMv7: Beagle, Udoo, RPi2 etc. +else ifeq ($(target.arch), arm) + arch.c.flags = -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard + +# ARMv8 64 bit, not tested yet +else ifeq ($(target.arch), aarch64) + arch.c.flags = -mcpu=cortex-a53 + +# Intel 32 bit, build with SSE and SSE2 instructions +else ifneq ($(filter i%86, $(target.arch)),) + arch.c.flags = -march=pentium4 -mfpmath=sse -msse -msse2 + +# Intel/AMD 64 bit, build with SSE, SSE2 and SSE3 instructions +else ifeq ($(target.arch), x86_64) + arch.c.flags = -march=core2 -mfpmath=sse -msse -msse2 -msse3 + +# if none of the above architectures detected +else + arch.c.flags = +endif + + +#=== flags and paths for Linux ================================================= + + +ifeq ($(system), Linux) + prefix = /usr/local + libdir := $(prefix)/lib + pkglibdir = $(libdir)/pd-externals + pdincludepath := $(wildcard /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) +endif + + +#=== flags and paths for Darwin ================================================ + + +# LLVM-clang doesn't support -fcheck-new, therefore this flag is only used when +# compiling with g++. + +ifeq ($(system), Darwin) + pkglibdir = $(HOME)/Library/Pd + pdincludepath := $(firstword $(wildcard \ + /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 + ifneq ($(filter %g++, $(CXX)),) + cxx.flags := -fcheck-new + endif + ifeq ($(extension), d_fat) + arch := i386 x86_64 + else + arch := $(target.arch) + endif + ifneq ($(filter -mmacosx-version-min=%, $(cflags)),) + version.flag := $(filter -mmacosx-version-min=%, $(cflags)) + else + version.flag = -mmacosx-version-min=10.6 + endif + arch.c.flags := $(addprefix -arch , $(arch)) $(version.flag) + arch.ld.flags := $(arch.c.flags) +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 when probing for a path, and use double quotes +# when specifying a path in a command argument. + +# Default paths in Mingw / Mingw-w64 environments. 'PROGRAMFILES' is standard +# location for builds with native architecture, 'ProgramFiles(x86)' for i686 +# builds on x86_64 Windows (detection method by Lucas Cordiviola). Curly braces +# required because of parentheses in variable name. +ifeq ($(system), Windows) + pkglibdir := $(APPDATA)/Pd + ifeq ($(target.arch), i686) + programfiles := ${ProgramFiles(x86)} + else + programfiles := $(PROGRAMFILES) + endif + pdbinpath := $(programfiles)/Pd/bin + pdincludepath := $(programfiles)/Pd/src +endif + +# Store default path to pd.dll in PDBINDIR if the latter is not user-defined. +# For include path this is done in the platform-independent paths section below, +# but for PDBINDIR it is done here so ld flags can be evaluated as immediate +# variables. +ifeq ($(system), Windows) + ifdef PDDIR + PDBINDIR := $(PDDIR)/bin + endif + PDBINDIR ?= $(pdbinpath) +endif + +# TODO: decide whether -mms-bitfields should be specified. +ifeq ($(system), Windows) + cpp.flags := -DMSW -DNT + ifeq ($(target.arch), i686) + arch.c.flags := -march=pentium4 -msse -msse2 -mfpmath=sse + else ifeq ($(target.arch), x86_64) + cpp.flags := -DMSW -DNT -DPD_LONGINTTYPE=__int64 + arch.c.flags := -march=core2 -msse -msse2 -msse3 -mfpmath=sse + else + arch.c.flags = + endif + extension = dll + c.flags := + c.ldflags := -static-libgcc -shared \ + -Wl,--enable-auto-import "$(PDBINDIR)/pd.dll" + c.ldlibs := + cxx.flags := -fcheck-new + cxx.ldflags := -static-libgcc -static-libstdc++ -shared \ + -Wl,--enable-auto-import "$(PDBINDIR)/pd.dll" + cxx.ldlibs := + shared.extension = dll + shared.ldflags := -static-libgcc -shared "$(PDBINDIR)/pd.dll" + stripflags = --strip-all +endif + + +#=== paths ===================================================================== + + +# Platform-dependent default paths are specified above, but overridable. +# Path variables in upper case can be defined as make command argument or in the +# environment. Variable 'objectsdir' is supported for compatibility with +# the build system that pd-l2ork has inherited from pd-extended. + +PDINCLUDEDIR ?= $(pdincludepath) +PDLIBDIR ?= $(firstword $(objectsdir) $(pkglibdir)) + +ifdef PDDIR + PDINCLUDEDIR := $(wildcard $(PDDIR)/src) +endif + +# base path where all components of the lib will be installed by default +installpath := $(DESTDIR)$(PDLIBDIR)/$(lib.name) + +# check if include path 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, $(PDINCLUDEDIR)), $(PDINCLUDEDIR)) + + +#=== 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 "$(PDINCLUDEDIR)" $(cpp.flags) $(CPPFLAGS) + +# flags for dependency checking (cflags from makefile may define -I options) +depcheck.flags := $(cpp.flags) $(cflags) + +# 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. + +# print Makefile.pdlibbuilder version before possible termination +$(info ++++ info: using Makefile.pdlibbuilder version $(version)) + +# Terminate if target triplet remained empty, to avoid all sorts of confusing +# scenarios and spurious bugs. +ifeq ($(target.triplet),) + $(error Command "$(CC) -dumpmachine" did not return a target triplet, \ + needed for a build. \ + Is compiler "$(CC)" installed in your PATH? ($(PATH)). \ + Does compiler "$(CC)" support option "-dumpmachine"?) +endif + +# '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 PDINCLUDEDIR + mpdh := $(shell ls "$(PDINCLUDEDIR)/m_pd.h") +endif + +# store path to pd.dll; if not found, ls will give a useful error +ifeq ($(system), Windows) + pddll := $(shell ls "$(PDBINDIR)/pd.dll") +endif + +# 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. +disable-dependency-tracking := $(strip $(pdincludepathwithspaces)) + +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) $(depcheck.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 ################################################ +################################################################################ + + +#=== strip ===================================================================== + + +# Stripping of installed binaries will only be done when variable 'stripflags' +# is defined non-empty. No default definition is provided except for Windows +# where the unstripped binaries are large, especially in the case of Mingw-w64. + +# Note: while stripping all symbols ('-s' or '--strip-all') is possible for +# Linux and Windows, in the case of OSX only non-global symbols can be stripped +# (option '-x' or '--discard-all'). + +# Make definition of strip command overridable so it can be defined in an +# environment for cross-compilation. +STRIP ?= strip + +# Commands in 'strip-executables' will be executed conditionally in the rule for +# target 'install-executables'. +strip-executables = cd "$(installpath)" && \ + $(foreach v, $(executables), $(STRIP) $(stripflags) '$v';) + + +#=== install =================================================================== + + +# 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)" + $(foreach v, $(executables), \ + $(INSTALL_PROGRAM) '$v' "$(installpath)";) + $(info ++++ info: executables of lib $(lib.name) installed \ + from $(CURDIR) to $(installpath)) + $(if $(stripflags), $(strip-executables),) + +install-datafiles: all + $(INSTALL_DIR) -v "$(installpath)" + $(foreach v, $(datafiles), \ + $(INSTALL_DATA) '$(v)' "$(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 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 directory as argument" + @echo " to the make command, like 'PDINCLUDEDIR=path/to/pd/src'." + @echo + @echo " Path for installation of your libdir(s):" + @echo " $(PDLIBDIR)" + @echo " Alternatively you may specify your path for installation as argument" + @echo " to the make command, like 'PDLIBDIR=path/to/pd-externals'." + @echo + @echo " Default paths are listed in the doc sections in Makefile.pdlibbuilder." + @echo + + +#=== platform test ============================================================= + + +# This target can be used to test if the compiler for specified PLATFORM is +# correctly defined and available. + +dumpmachine: + @$(CC) -dumpmachine + + +#=== 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 -Nru pd-pool-0.2.2+git20161105.1.4b157f51/pd-lib-builder/README.md pd-pool-0.2.2+git20210923.1.40cb82e/pd-lib-builder/README.md --- pd-pool-0.2.2+git20161105.1.4b157f51/pd-lib-builder/README.md 1970-01-01 00:00:00.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/pd-lib-builder/README.md 2020-03-05 12:11:14.000000000 +0000 @@ -0,0 +1,162 @@ + + +### Makefile.pdlibbuilder ### + +Helper makefile for Pure Data external libraries. Written by Katja Vetter +March-June 2015 for the public domain and since then developed as a Pd +community project. 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 target platform +* 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 name == 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, read the documentation sections in Makefile.pdlibbuilder. + + +### paths ### + + +Makefile.pdlibbuilder >= v0.4.0 supports pd path variables which can be +defined not only as make command argument but also in the environment, to +override platform-dependent defaults: + +PDDIR: +Root directory of 'portable' pd package. When defined, PDINCLUDEDIR and +PDBINDIR will be evaluated as $(PDDIR)/src and $(PDDIR)/bin. + +PDINCLUDEDIR: +Directory where Pd API m_pd.h should be found, and other Pd header files. +Overrides the default search path. + +PDBINDIR: +Directory where pd.dll should be found for linking (Windows only). Overrides +the default search path. + +PDLIBDIR: +Root directory for installation of Pd library directories. Overrides the +default install location. + + +### documentation ### + + +This README.md provides only basic information. A large comment section inside +Makefile.pdlibbuilder lists and explains the available user variables, default +paths, and targets. The internal documentation reflects the exact functionality +of the particular version. For suggestions about project maintenance and +advanced compilation see tips-tricks.md. + + +### versioning ### + + +The project is versioned in MAJOR.MINOR.BUGFIX format (see http://semver.org), +and maintained at https://github.com/pure-data/pd-lib-builder. Pd lib developers +are invited to regulary check for updates, and to contribute and discuss +improvements here. If you really need to distribute a personalized version with +your library, rename Makefile.pdlibbuilder to avoid confusion. + + +### examples ### + +The list of projects using pd-lib-builder can be helpful if you are looking for +examples, from the simplest use case to more complex implementations. + +- helloworld: traditional illustration of simplest use case +- pd-windowing: straightforward real world use case of a small library +- pd-nilwind / pd-cyclone: more elaborate source tree +- zexy: migrated from autotools to pd-lib-builder + + +### projects using pd-lib-builder ### + +non-exhaustive list + +https://github.com/pure-data/helloworld + +https://github.com/electrickery/pd-nilwind + +https://github.com/electrickery/pd-maxlib + +https://github.com/electrickery/pd-sigpack + +https://github.com/electrickery/pd-tof + +https://github.com/electrickery/pd-windowing + +https://github.com/electrickery/pd-smlib + +https://github.com/porres/pd-cyclone + +https://github.com/porres/pd-else + +https://github.com/porres/pd-psycho + +https://git.iem.at/pd/comport + +https://git.iem.at/pd/hexloader + +https://git.iem.at/pd/iemgui + +https://git.iem.at/pd/iemguts + +https://git.iem.at/pd/iemlib + +https://git.iem.at/pd/iemnet + +https://git.iem.at/pd/iem_ambi + +https://git.iem.at/pd/iem_tab + +https://git.iem.at/pd/iem_adaptfilt + +https://git.iem.at/pd/iem_roomsim + +https://git.iem.at/pd/iem_spec2 + +https://git.iem.at/pd/mediasettings + +https://git.iem.at/pd/zexy + +https://git.iem.at/pd-gui/punish + +https://github.com/residuum/PuRestJson + +https://github.com/libpd/abl_link + +https://github.com/wbrent/timbreID + +https://github.com/MetaluNet/moonlib + + diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/pd-lib-builder/tips-tricks.md pd-pool-0.2.2+git20210923.1.40cb82e/pd-lib-builder/tips-tricks.md --- pd-pool-0.2.2+git20161105.1.4b157f51/pd-lib-builder/tips-tricks.md 1970-01-01 00:00:00.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/pd-lib-builder/tips-tricks.md 2020-03-05 12:11:14.000000000 +0000 @@ -0,0 +1,230 @@ +pd-lib-builder cheatsheet +========================= + +# Creating special builds + +## cross-compiling on linux x86_64 for other platforms + +Using pd-lib-builder >=0.6.0 we can define variable `PLATFORM` to specify a +target triplet for cross-compilation. Example to build W32 binaries (assuming +package `mingw-w64` is installed and a W32 package for Pd is unzipped into a +path `${PDWIN32}`: + + make PLATFORM=x86_64-w64-mingw32 PDDIR="${PDWIN32}" + +#### older pd-lib-builder versions + +Using pd-lib-builder < 0.6.0, in the absence of variable `PLATFORM`, you would +instead override variables `system`, `target.arch`, `CC` and / or `CXX`, +`STRIP`. Example: + + make system=Windows target.arch=i686 CC=i686-w64-mingw32-gcc STRIP=i686-w64-mingw32-strip PDDIR="${PDWIN32}" + +#### toolchains + +Cross toolchains for relevant platforms in Debian Buster (install g++ +with dependencies for a given platform to get the whole tool chain): + +- `arm-linux-gnueabihf` +- `aarch64-linux-gnu` +- `i686-linux-gnu` +- `i686-w64-mingw32` and `x86_64-w64-mingw32` (install `mingw-w64`) + +OSX/MacOS cross tool chains are not distributed by Debian. Use project +`osxcross` from Thomas Poechtraeger to create the tools. + +## building double-precision externals + +At the time of writing (2018-02) there is no official Pd that supports +double-precision numbers yet. +However, if you do get hold of an experimental double-precision Pd, you can +easily build your externals for 64-bit numbers: + + make CPPFLAGS="-DPD_FLOATSIZE=64" + +## building externals for W64 (64-bit Windows) + +At the time of writing (2018-02) there is no official Pd that supports +W64 yet. +However, if you do get hold of an experimental W64 Pd, you can +easily build your externals for this environment with + + make CPPFLAGS="-DPD_LONGINTTYPE=__int64" CC=x86_64-w64-mingw32-gcc + + +To build a double-precision external for W64, use something like: + + make CPPFLAGS="-DPD_LONGINTTYPE=__int64 -DPD_FLOATSIZE=64" CC=x86_64-w64-mingw32-gcc + + +## TODO universal binaries on OSX + + +# Project management + +In general it is advised to put the `Makefile.pdlibbuilder` into a separate +subdirectory (e.g. `pd-lib-builder/`). +This makes it much easier to update the `Makefile.pdlibbuilder` later + +You *should* also use a variable to the actual path of the Makefile.pdlibbuilder +(even if you keep it in the root-directory), as this allows easy experimenting +with newer (or older) (or site-specific) versions of the pd-lib-builder +Makefile. + +~~~make +PDLIBBUILDER_DIR=pd-lib-builder/ +include $(PDLIBBUILDER_DIR)/Makefile.pdlibbuilder +~~~ + +## Keeping pd-lib-builder up-to-date + +### `git subtree` + +With git-subtrees, you make the pd-lib-builder repository (or any other +repository for that matter) part of your own repository - with full history and +everything - put nicely into a distinct subdirectory. + +Support for *manipulating* subtrees has been added with Git-v1.7.11 (May 2012). +The nice thing however is, that from "outside" the subtree is part of your +repository like any other directory. E.g. older versions of Git can clone your +repository with the full subtree (and all it's history) just fine. +You can also use git-archive to make a complete snapshot of your repository +(including the subtree) - nice, if you e.g. want self-contained downloads of +your project from git hosting platforms (like Github, Gitlab, Bitbucket,...) + +In short, `git subtree` is the better `git submodule`. + +So here's how to do it: + +#### Initial setup/check-out +This will create a `pd-lib-builder/` directory containing the full history of +the pd-lib-builder repository up to its release `v0.5.0` + +~~~sh +git subtree add --prefix=pd-lib-builder/ https://github.com/pure-data/pd-lib-builder v0.5.0 +~~~ + +This will automatically merge the `pd-lib-builder/` history into your current +branch, so everything is ready to go. + +#### Cloning your repository with the subtree +Nothing special, really. +Just clone your repository as always: + +~~~sh +git clone https://git.example.org/pd/superbonk~.git +~~~ + +#### Updating the subtree +Time passes and sooner or later you will find, that there is a shiny new +pd-lib-builder with plenty of bugfixes and new features. +To update your local copy to pd-lib-builder's current `master`, simply run: + +~~~sh +git subtree pull --prefix pd-lib-builder/ https://github.com/pure-data/pd-lib-builder master +~~~ + +#### Pulling the updated subtree into existing clones +Again, nothing special. +Just pull as always: + +~~~sh +git pull +~~~ + + +#### Further reading +More on the power of `git subtree` can be found online +- https://medium.com/@v/git-subtrees-a-tutorial-6ff568381844 +- https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtree +- ... + +### ~~`git submodule`~~ [DISCOURAGED] + + +#### Initial setup/check-out +To add a new submodule to your repository, just run `git submodule add` and +commit the changes: + +~~~sh +git submodule add https://github.com/pure-data/pd-lib-builder +git commit .gitmodules pd-lib-builder/ -m "Added pd-lib-builder as git-submodule" +~~~ + +#### Cloning your repository with the submodule + +When doing a fresh clone of your repository, pass the `--recursive` option to +automatically fetch all submodules: + +~~~sh +git clone --recursive https://git.example.org/pd/superbonk~.git +~~~ + +If you've cloned non-recursively, you can initialize and update the submodules +manually: + +~~~sh +git submodule init +git submodule update +~~~ + +#### Updating the submodule +Submodules are usually fixed to a given commit in their repository. +To update the `pd-lib-builder` submodule to the current `master` do something +like: + +~~~sh +cd pd-lib-builder +git checkout master +git pull +cd .. +git status pd-lib-builder +git commit pd-lib-builder -m "Updated pd-lib-builder to current master" +~~~ + +#### Pulling the updated submodule into existing clones +After you have pushed the submodule updates in your repository, other clones of +the repository can be updated as follows: + +~~~sh +git pull +~~~ + +The above will make your repository aware, that the submodule is out-of-sync. + +~~~sh +$ LANG=C git status pd-lib-builder +On branch master +Your branch is up to date with 'origin/master'. + +Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git checkout -- ..." to discard changes in working directory) + + modified: pd-lib-builder (new commits) +$ +~~~ + +In order to sync the submodule to the correct commit, run the following: + +~~~sh +git submodule update +~~~ + +#### Drawbacks +`git submodule` has a number of drawbacks: +- it requires special commands to synchronize the submodules, in addition to + synching your repository. +- you must make sure to use an URL for the submodule that is accessible to your + potential users. e.g. using `git@github.com:pure-data/pd-lib-builder` is bad, + because it requires everybody who wants to checkout your sources to have a + github-account - even if they could checkout *your* repository anonymously. +- submodules will be excluded from `git archive`. This means, that if you use a + mainstream git provider (like Github, GitLab, Bitbucket,...) and make releases + by creating a `git tag`, the automatically generated zipfiles with the sources + will lack the submodule - and your users will not be able to compile your + source code. + +In general, I would suggest to **avoid** `git submodule`, and instead use the +better `git subtree` (above). + Binary files /tmp/tmp984pdbg8/JWg6RyzHpY/pd-pool-0.2.2+git20161105.1.4b157f51/pool.mcp and /tmp/tmp984pdbg8/zQ8cESxOLv/pd-pool-0.2.2+git20210923.1.40cb82e/pool.mcp differ diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/readme.txt pd-pool-0.2.2+git20210923.1.40cb82e/readme.txt --- pd-pool-0.2.2+git20161105.1.4b157f51/readme.txt 2015-03-24 23:04:53.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/readme.txt 2020-03-05 12:11:14.000000000 +0000 @@ -1,6 +1,6 @@ pool - a hierarchical storage object for PD and Max/MSP -Copyright (c) 2002-2008 Thomas Grill (gr@grrrr.org) +Copyright (c) 2002-2020 Thomas Grill (gr@grrrr.org) For information on usage and redistribution, and for a DISCLAIMER OF ALL WARRANTIES, see the file, "license.txt," in this distribution. @@ -50,20 +50,25 @@ You will need the flext C++ layer for PD and Max/MSP externals to compile this. See http://grrrr.org/ext/flext -Download, install and compile the package. -Afterwards you can proceed with building this external. +Download and unzip, or git-clone the package. -POSIX configure style ---------------------- -./bootstrap.sh -./configure --enable-system=pd_OR_max --with-sysdir=PATH_TO_PD_OR_MAX_HEADER_FILES --libdir=WHERE_TO_PUT_THE_EXTERNAL -make -sudo make install +Pure data - any platform supporting gcc-compatible compilers +------------------------------------------------------------ +The pd-lib-builder project (https://github.com/pure-data/pd-lib-builder) is used to compile the project. +A git subtree of this project is already present. +The compilation is done using the GNU make tool and it will need additional information about the location of the flext source files, and possibly, Pure data, if a specific version should be used. -pd/Max - Windows - Microsoft Visual C, Borland C++, MinGW: +This could be an example: +make CPPFLAGS="-I ../flext/source" PDDIR="../../pure-data" + +For OS X, further flags can be needed: +CFLAGS="-mmacosx-version-min=10.9" LDFLAGS="-mmacosx-version-min=10.9" + + +pd/Max - Windows - Microsoft Visual C, MinGW: ---------------------------------------------------------- Start a command shell with your eventual build environment (e.g. run vcvars32.bat for Microsoft Visual Studio) @@ -85,6 +90,7 @@ Version history: 0.2.2: +- fixed UTF-8 file load/save bug - fixed serious bug with clearing values and dirs. e.g. "clrall" and "clrrec" messages. - fixed double-free for clearing dirs and values - re-introduced a help message diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/source/data.cpp pd-pool-0.2.2+git20210923.1.40cb82e/source/data.cpp --- pd-pool-0.2.2+git20161105.1.4b157f51/source/data.cpp 2015-03-24 23:04:53.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/source/data.cpp 2020-03-05 12:11:14.000000000 +0000 @@ -1,13 +1,9 @@ /* pool - hierarchical storage object for PD and Max/MSP -Copyright (c) 2002-2008 Thomas Grill (gr@grrrr.org) +Copyright (c) 2002-2019 Thomas Grill (gr@grrrr.org) For information on usage and redistribution, and for a DISCLAIMER OF ALL WARRANTIES, see the file, "license.txt," in this distribution. - -$LastChangedRevision: 26 $ -$LastChangedDate$ -$LastChangedBy$ */ #include "pool.h" diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/source/main.cpp pd-pool-0.2.2+git20210923.1.40cb82e/source/main.cpp --- pd-pool-0.2.2+git20161105.1.4b157f51/source/main.cpp 2015-03-24 23:04:53.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/source/main.cpp 2020-03-05 12:11:14.000000000 +0000 @@ -1,20 +1,16 @@ /* pool - hierarchical storage object for PD and Max/MSP -Copyright (c) 2002-2008 Thomas Grill (gr@grrrr.org) +Copyright (c) 2002-2019 Thomas Grill (gr@grrrr.org) For information on usage and redistribution, and for a DISCLAIMER OF ALL WARRANTIES, see the file, "license.txt," in this distribution. - -$LastChangedRevision: 26 $ -$LastChangedDate$ -$LastChangedBy$ */ #include "pool.h" #include #include -#define POOL_VERSION "0.2.2pre" +#define POOL_VERSION "0.2.2" #define VCNT 32 #define DCNT 8 @@ -44,7 +40,7 @@ void mg_priv(bool &p) const { p = pl && pl->Private(); } // print some help message - static void m_help() { post("pool " POOL_VERSION " - hierarchical storage object, (C)2002-2008 Thomas Grill"); } + static void m_help() { post("pool " POOL_VERSION " - hierarchical storage object, (C)2002-2019 Thomas Grill"); } // clear all data in pool void m_reset(); diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/source/pool.cpp pd-pool-0.2.2+git20210923.1.40cb82e/source/pool.cpp --- pd-pool-0.2.2+git20161105.1.4b157f51/source/pool.cpp 2015-03-24 23:04:53.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/source/pool.cpp 2020-03-05 12:11:14.000000000 +0000 @@ -1,13 +1,9 @@ /* pool - hierarchical storage object for PD and Max/MSP -Copyright (c) 2002-2008 Thomas Grill (gr@grrrr.org) +Copyright (c) 2002-2019 Thomas Grill (gr@grrrr.org) For information on usage and redistribution, and for a DISCLAIMER OF ALL WARRANTIES, see the file, "license.txt," in this distribution. - -$LastChangedRevision: 26 $ -$LastChangedDate$ -$LastChangedBy$ */ #include "pool.h" @@ -19,8 +15,6 @@ #if FLEXT_OS == FLEXT_OS_WIN #include // for charset conversion functions -#elif FLEXT_OS == FLEXT_OS_MAC -#include #else static bool WCStoUTF8(char *sdst,const wchar_t *src,int dstlen) { @@ -660,28 +654,6 @@ if(!err) return NULL; tmp[err] = 0; c = tmp; -#elif FLEXT_OS == FLEXT_OS_MAC - char ctmp[1024]; - - // is the output always MacRoman? - TextEncoding inconv = CreateTextEncoding(kTextEncodingUnicodeDefault,kTextEncodingDefaultVariant,kUnicodeUTF8Format); - TextEncoding outconv = CreateTextEncoding(kTextEncodingMacRoman,kTextEncodingDefaultVariant,kTextEncodingDefaultFormat); - - TECObjectRef converter; - OSStatus status = TECCreateConverter(&converter,inconv,outconv); - if(status) return NULL; - - ByteCount inlen,outlen; - status = TECConvertText( - converter, - (ConstTextPtr)tmp,strlen(tmp),&inlen, - (TextPtr)ctmp,sizeof(ctmp),&outlen - ); - ctmp[outlen] = 0; - - TECDisposeConverter(converter); - c = ctmp; - if(status) return NULL; #else wchar_t wtmp[1024]; size_t len = mbstowcs(wtmp,tmp,1024); @@ -742,39 +714,16 @@ #if FLEXT_OS == FLEXT_OS_WIN char tmp[1024]; wchar_t wtmp[1024]; - int err = MultiByteToWideChar(CP_ACP,0,c,strlen(c),wtmp,1024); + int err = MultiByteToWideChar(CP_ACP,0,c,strlen(c),wtmp,sizeof(wtmp)/sizeof(*wtmp)); if(!err) return false; - err = WideCharToMultiByte(CP_UTF8,0,wtmp,err,tmp,1024,NULL,FALSE); + err = WideCharToMultiByte(CP_UTF8,0,wtmp,err,tmp,sizeof(tmp),NULL,FALSE); if(!err) return false; tmp[err] = 0; c = tmp; -#elif FLEXT_OS == FLEXT_OS_MAC - char tmp[1024]; - - // is the input always MacRoman? - TextEncoding inconv = CreateTextEncoding(kTextEncodingMacRoman,kTextEncodingDefaultVariant,kTextEncodingDefaultFormat); - TextEncoding outconv = CreateTextEncoding(kTextEncodingUnicodeDefault,kTextEncodingDefaultVariant,kUnicodeUTF8Format); - - TECObjectRef converter; - OSStatus status = TECCreateConverter(&converter,inconv,outconv); - if(status) return false; - - ByteCount inlen,outlen; - status = TECConvertText( - converter, - (ConstTextPtr)c,strlen(c),&inlen, - (TextPtr)tmp,sizeof(tmp),&outlen - ); - tmp[outlen] = 0; - - TECDisposeConverter(converter); - - if(status) return false; - c = tmp; #else char tmp[1024]; wchar_t wtmp[1024]; - if(!UTF8toWCS(wtmp,c,1024)) return false; + if(!UTF8toWCS(wtmp,c,sizeof(wtmp)/sizeof(*wtmp))) return false; size_t len = wcstombs(tmp,wtmp,sizeof(tmp)); if(len < 0) return false; c = tmp; diff -Nru pd-pool-0.2.2+git20161105.1.4b157f51/source/pool.h pd-pool-0.2.2+git20210923.1.40cb82e/source/pool.h --- pd-pool-0.2.2+git20161105.1.4b157f51/source/pool.h 2015-03-24 23:04:53.000000000 +0000 +++ pd-pool-0.2.2+git20210923.1.40cb82e/source/pool.h 2020-03-05 12:11:14.000000000 +0000 @@ -1,13 +1,9 @@ /* pool - hierarchical storage object for PD and Max/MSP -Copyright (c) 2002-2008 Thomas Grill (gr@grrrr.org) +Copyright (c) 2002-2019 Thomas Grill (gr@grrrr.org) For information on usage and redistribution, and for a DISCLAIMER OF ALL WARRANTIES, see the file, "license.txt," in this distribution. - -$LastChangedRevision: 26 $ -$LastChangedDate$ -$LastChangedBy$ */ #ifndef __POOL_H