{"id":13557939,"url":"https://github.com/bgribble/mfp","last_synced_at":"2025-04-03T12:31:26.252Z","repository":{"id":6272027,"uuid":"7505539","full_name":"bgribble/mfp","owner":"bgribble","description":"Music For Programmers, a graphical patching language","archived":false,"fork":false,"pushed_at":"2024-10-21T18:21:37.000Z","size":5481,"stargazers_count":56,"open_issues_count":43,"forks_count":2,"subscribers_count":17,"default_branch":"master","last_synced_at":"2024-10-21T20:10:00.256Z","etag":null,"topics":["jack","midi","music","puredata","python"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bgribble.png","metadata":{"files":{"readme":"README.build","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-01-08T17:05:03.000Z","updated_at":"2024-10-09T13:03:51.000Z","dependencies_parsed_at":"2024-10-26T18:11:43.505Z","dependency_job_id":"9ba2c7d7-1b51-41bb-a170-30fb206dbfa6","html_url":"https://github.com/bgribble/mfp","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bgribble%2Fmfp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bgribble%2Fmfp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bgribble%2Fmfp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bgribble%2Fmfp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bgribble","download_url":"https://codeload.github.com/bgribble/mfp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247002326,"owners_count":20867445,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jack","midi","music","puredata","python"],"created_at":"2024-08-01T12:04:38.106Z","updated_at":"2025-04-03T12:31:26.246Z","avatar_url":"https://github.com/bgribble.png","language":"Python","funding_links":[],"categories":["Python","music"],"sub_categories":[],"readme":"BUILDING AND INSTALLING MFP\n===================================\n\nPost version 0.07, 2024-01-15\n\nTL;DR\n---------------------\n\n   $ ./waf configure --python=python3 --virtualenv --prefix ~/mfpvirt build install install_deps\n     [...]\n   $ ~/mfpvirt/bin/mfp -v\n\nTHINGS TO KNOW\n---------------------\n\nOS platform: I have only tested MFP on 32-bit (raspi) and 64-bit\nLinux.\n\npython: MFP requires Python 3.x at this time.\n\nwaf: MFP uses 'waf', which you can think of as a replacement for\nautotools and make.  You do not need to install waf; the correct\nversion is supplied in the MFP source tree.  That's the way waf\nis designed to work  More information can be found at\nhttps://code.google.com/p/waf/.  MFP's \"Makefile\" or\n\"configure.in\" equivalent is the file \"wscript\", which is a plain\nPython file.  The entry points used by waf are the functions\n\"configure\" and \"build\", defined near the bottom of the file.\n\nvenv: Python dependencies for MFP can either be installed globally\nwith your installed \"pip\" or into a virtual environment created\nat install time. I recommend using the virtual environment. This\nrequires the Python \"venv\" module, which is part of the standard\nPython library but Debian and others have it packaged separately.\nIf you see a configure error about this you may need to install\npython3-venv or similar. Configure to use venv with the \"--virtualenv\"\narg to \"waf configure\"\n\nsetuptools: The build process depends on Python setuptools.  If\nyou have virtualenv installed, you have setuptools already, but\nif you aren't using virtualenv you may need to install setuptools\nseparately.  It's packaged as \"python-setuptools\" on Debian and\nUbuntu.\n\npip: Pip is still the default package installer for Python. You\nwill need it installed to build the \"wheel\" packages.\n\ngcc: The C components of mfp (mfpdsp, pluginfo, and testext) are\nstraightforward C but include some c99-isms, mainly due to LV2.  I\nhave been using versions from gcc-4.8.3 to 9.3.0 with no trouble.\n\nCONFIGURING\n-----------------------\n\nThe basic form:\n\n    $ ./waf configure [options]\n\nA full list of options is shown by ./waf --help, under\n\"Configuration options\". Most of these are waf builtin options. The custom\noptions for MFP are:\n\n| Option | Purpose |\n|--------|---------|\n| `--virtualenv` | Build in a virtualenv (default: false) |\n| `--with-clutter` | Enable Clutter backend (default: don't build) |\n| `--without-imgui` | Disable Dear ImGUI backend (default: build) |\n\n\nLIBRARIES\n-----------------------\n\nThe \"mfpdsp\" C library/program needs a few C libraries with their\ndevelopment headers and pkg-config files installed:\n\n * ladspa.h       (LADSPA plugins)\n * glib-2.0       (GLib/GObject)\n * json-glib-2.0  (JSON serializing/deserializing)\n * serd-0         (LV2 TTL parsing)\n * jack           (duh)\n * liblo          (OSC library, needed by pyliblo)\n * lv2 headers    (LV2 load/save)\n * libfaust       ([faust~] for embedded Faust DSP)\n * llvm           (LLVM, for Faust live compilation and linking)\n * libpolly       (LLVM helper library needed for Faust+LLVM)\n\nYou'll get errors in the \"./waf configure\" process if these aren't installed.\n\nPython runtime dependencies will be installed automatically.\n\nNote that the Python language bindings for Gtk+/GLib and Clutter libraries\nCANNOT be automatically installed by this build process.  You need to\ninstall your OS package manager's package for the \"GIR\" (GObject\nIntrospection Repository) data for Clutter, Glib, Gtk+, Gdk,\nGtkClutter, and Pango, and the Python infrastructure to use that data.\nIn Debian, these are packaged as:\n\n    gir1.2-clutter-1.0\n    gir1.2-gtkclutter-1.0\n    gir1.2-pango-1.0\n    gir1.2-glib-2.0\n    gir1.2-gtk-3.0\n    python-gi\n\nThey are only needed if you are building the Clutter UI.\n\nBUILDING\n-----------------------\n\n    $ ./waf build\n\nThis will build the project into ./wafbuild (or other directory as\nspecified to \"configure\").  There may be some temporary stuff placed\ninto ./build/ and ./dist/ by setuptools, so I wouldn't use those as\nnames for the waf build directory.\n\nINSTALLING\n--------------------------\n\n    $ ./waf install\n\nThe installation root defaults to /usr/local and can be modified\nby passing in the --prefix argument to \"./waf configure\". You can use a\nshared area like /opt/ or /usr/local/ or specify a MFP-specific dir\nsuch as /opt/mfp or ~/mfp/. There will be a couple of things in $prefix/bin,\none shared library in $prefix/lib, and then a bunch of stuff in\n$prefix/share/mfp/.\n\nYou don't have to add anything to any paths to launch MFP;\n$prefix/bin/mfp is a wrapper which does that for you. Just run it\nand you should be good to go.\n\nNote that once you have installed MFP to a $prefix, there's some\nstuff hardcoded into the launcher so you can't just move the\nwhole directory to another location. You will need to install\nagain to the new location.\n\nDESKTOP FILE\n--------------------------\n\nThe template desktop file `mfp.desktop` will be populated with\npaths and installed to ${PREFIX}/share/mfp/com.billgribble.mfp.desktop. You will\nneed to copy it to wherever such things go on your system.\n\nThe icon path is what I needed to get icons working on my Gnome\nsystem. You may need to change it. If you need to do something\nmanual, the actual icon image is the one in mfp.svg. I can't\nexpress how crabby I am about how messed up icons are on the\nLinux desktop.\n\nFor what it's worth, on my system the desktop file should be\n~/.local/share/applications/com.billgribble.mfp.desktop\n\n\nRUNNING TESTS\n--------------------------\n\nThere are some tests, though not as many as I would like.  What's\nthere basically comes in two flavors, all of which can be run\nwith various incantations of the `nosetests` test runner:\n\n * Python test cases in mfp/test: run with plain `nosetests -v mfp/test/`\n\n * C test cases in mfpdsp/test_*: run with the `testext` plugin\n   to nosetests, `nosetests -v --with-testext --exe wafbuild/libmfpdsp.so`\n\nNote on nosetests: I started using it because, 12+ years ago, it\nwas the best test runner. Now other tools like pytest have won\nmore mindshare. I spent some effort on the plugins to run C tests\nfor mfpdsp so I am sticking with nosetests.\n\nHOWEVER, the original nosetests is abandoned and doesn't work\nwith current Python versions, and the \"new\" version of nosetests\n(nose2) changed the way plugins worked, and doesn't support the\n--exe option needed to point nose to the libmfpdsp.so file. So I\nswitched over to \"pynose\", which is a fork of the original\nnosetests, just updated to work with contemporary Python. It gets\ninstalled by install_deps.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbgribble%2Fmfp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbgribble%2Fmfp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbgribble%2Fmfp/lists"}