2 desc "Sound and music computing system"
3 homepage "https://csound.com"
4 license "LGPL-2.1-or-later"
6 head "https://github.com/csound/csound.git", branch: "master"
8 # Remove `stable` block when patches are no longer needed
10 url "https://github.com/csound/csound.git",
12 revision: "a1580f9cdf331c35dceb486f4231871ce0b00266"
14 # Fix build failure due to mismatched pointer types on macOS 14+
16 url "https://github.com/csound/csound/commit/596667daba1ed99eda048e491ff8f36200f09429.patch?full_index=1"
17 sha256 "ab6d09d1a2cede584e151b514fc4cff56b88f79008e725c3a76df64b59caf866"
21 url "https://github.com/csound/csound/commit/2a071ae8ca89bc21b5c80037f8c95a01bb670ac9.patch?full_index=1"
22 sha256 "c7026330b5c89ab399e74aff17019067705011b7e35b9c75f9ed1a5878f53b4b"
28 strategy :github_latest
32 sha256 arm64_sequoia: "61be90827875be2da1ff759baea46c74e0c0ccd7344bc8ab949efe3b05260106"
33 sha256 arm64_sonoma: "71adfde634382610bffb31c3fbf3aeacf25773de90e06b5158e09b18e4d205e9"
34 sha256 arm64_ventura: "e3b0dfd98b61b7b2d1e575fd3719d915982f0da0232368137412d71d03c0dbea"
35 sha256 sonoma: "9431a7350d67b3e144136416cdca5162aba4a31ac7149c64c412be297c660c00"
36 sha256 ventura: "334cd0b0985e049534ab67125b7c173146dff78a7ddd66be4d1b14a8a12d357e"
39 depends_on "asio" => :build
40 depends_on "cmake" => :build
41 depends_on "eigen" => :build
42 depends_on "swig" => :build
45 depends_on "fluid-synth"
52 depends_on "libsamplerate"
53 depends_on "libsndfile"
54 depends_on "libwebsockets"
57 depends_on "openssl@3"
58 depends_on "portaudio"
60 depends_on "python@3.13"
64 uses_from_macos "bison" => :build
65 uses_from_macos "flex" => :build
66 uses_from_macos "curl"
67 uses_from_macos "zlib"
74 conflicts_with "libextractor", because: "both install `extract` binaries"
76 resource "ableton-link" do
77 url "https://github.com/Ableton/link/archive/refs/tags/Link-3.1.2.tar.gz"
78 sha256 "2673dfad75b1484e8388deb8393673c3304b3ab5662dd5828e08e029ca8797aa"
81 resource "csound-plugins" do
82 url "https://github.com/csound/plugins/archive/refs/tags/1.0.2.tar.gz"
83 sha256 "8c2f0625ad1d38400030f414b92d82cfdec5c04b7dc178852f3e1935abf75d30"
85 # Fix build on macOS 12.3+ by replacing old system Python/Python.h with Homebrew's Python.h
87 url "https://github.com/csound/plugins/commit/13800c4dd58e3c214e5d7207180ad7115b4e2f27.patch?full_index=1"
88 sha256 "e088cc300845408f3956f070fa34a900b700c7860678bc6d37f7506d615787a6"
93 url "https://download.savannah.gnu.org/releases/getfem/stable/getfem-5.4.2.tar.gz"
94 sha256 "80b625d5892fe9959c3b316340f326e3ece4e98325eb0a81dd5b9ddae563b1d1"
102 ENV["JAVA_HOME"] = Language::Java.java_home
103 site_packages = prefix/Language::Python.site_packages(python3)
105 rpaths << rpath(target: frameworks) if OS.mac?
107 system "cmake", "-S", ".", "-B", "build",
108 "-DCMAKE_INSTALL_RPATH=#{rpaths.join(";")}",
109 "-DBUILD_JAVA_INTERFACE=ON",
110 "-DBUILD_LUA_INTERFACE=OFF",
112 "-DCS_FRAMEWORK_DEST=#{frameworks}",
113 "-DJAVA_MODULE_INSTALL_DIR=#{libexec}",
114 "-DPYTHON3_MODULE_INSTALL_DIR=#{site_packages}",
116 system "cmake", "--build", "build"
117 system "cmake", "--install", "build"
120 include.install_symlink frameworks/"CsoundLib64.framework/Headers" => "csound"
121 site_packages.install buildpath/"interfaces/ctcsound.py"
123 # On Linux, csound depends on binutils, but both formulae install `srconv` binaries
124 (bin/"srconv").unlink
127 resource("csound-plugins").stage do
128 resource("ableton-link").stage buildpath/"ableton-link"
129 resource("getfem").stage { cp_r "src/gmm", buildpath }
132 -DABLETON_LINK_HOME=#{buildpath}/ableton-link
133 -DBUILD_ABLETON_LINK_OPCODES=ON
134 -DBUILD_CHUA_OPCODES=ON
135 -DBUILD_CUDA_OPCODES=OFF
136 -DBUILD_FAUST_OPCODES=ON
137 -DBUILD_FLUID_OPCODES=ON
138 -DBUILD_HDF5_OPCODES=ON
139 -DBUILD_IMAGE_OPCODES=ON
140 -DBUILD_JACK_OPCODES=ON
141 -DBUILD_LINEAR_ALGEBRA_OPCODES=ON
142 -DBUILD_MP3OUT_OPCODE=ON
143 -DBUILD_OPENCL_OPCODES=OFF
144 -DBUILD_PYTHON_OPCODES=ON
145 -DBUILD_STK_OPCODES=ON
146 -DBUILD_WEBSOCKET_OPCODE=ON
147 -DBUILD_WIIMOTE_OPCODES=ON
148 -DGMM_INCLUDE_DIR=#{buildpath}
149 -DPython3_EXECUTABLE=#{python3}
154 -DBUILD_P5GLOVE_OPCODES=ON
155 -DCSOUND_FRAMEWORK=#{frameworks}/CsoundLib64.framework
156 -DCSOUND_INCLUDE_DIR=#{frameworks}/CsoundLib64.framework/Headers
157 -DPLUGIN_INSTALL_DIR=#{frameworks}/CsoundLib64.framework/Resources/Opcodes64
161 -DBUILD_P5GLOVE_OPCODES=OFF
165 system "cmake", "-S", ".", "-B", "build", *args, *std_cmake_args
166 system "cmake", "--build", "build"
167 system "cmake", "--install", "build"
173 To use the Java bindings, you may need to add to your shell profile
174 e.g. ~/.profile or ~/.zshrc:
175 export CLASSPATH="#{opt_libexec}/csnd6.jar:."
176 and link the native shared library into your Java Extensions folder:
182 mkdir -p ~/Library/Java/Extensions
183 ln -s "#{opt_libexec}/lib_jcsound6.jnilib" ~/Library/Java/Extensions
189 srconv is not installed because it conflicts with binutils. To run srconv:
190 csound --utility=srconv
193 sudo mkdir -p /usr/java/packages/lib
194 sudo ln -s "#{opt_libexec}/lib_jcsound6.jnilib" /usr/java/packages/lib
202 (testpath/"test.orc").write <<~ORC
206 gi_fluidEngineNumber fluidEngine
207 gi_realVector la_i_vr_create 1
210 a_, a_, a_ chuap 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
211 a_signal STKPlucked 440, 1
212 a_, a_ hrtfstat a_signal, 0, 0, sprintf("hrtf-%d-left.dat", sr), sprintf("hrtf-%d-right.dat", sr), 9, sr
213 hdf5write "test.h5", a_signal
214 mp3out a_signal, a_signal, "test.mp3"
219 (testpath/"test.sco").write <<~SCO
225 ENV["OPCODE6DIR64"] = frameworks/"CsoundLib64.framework/Resources/Opcodes64"
226 ENV["SADIR"] = frameworks/"CsoundLib64.framework/Versions/Current/samples"
228 ENV["OPCODE6DIR64"] = lib/"csound/plugins64-6.0"
229 ENV["SADIR"] = share/"samples"
231 ENV["RAWWAVE_PATH"] = Formula["stk"].pkgshare/"rawwaves"
233 system bin/"csound", "test.orc", "test.sco"
235 assert_predicate testpath/"test.#{OS.mac? ? "aif" : "wav"}", :exist?
236 assert_predicate testpath/"test.h5", :exist?
237 assert_predicate testpath/"test.mp3", :exist?
239 (testpath/"opcode-existence.orc").write <<~ORC
246 system bin/"csound", "--orc", "--syntax-check-only", "opcode-existence.orc"
249 (testpath/"mac-opcode-existence.orc").write <<~ORC
254 system bin/"csound", "--orc", "--syntax-check-only", "mac-opcode-existence.orc"
257 system python3, "-c", "import ctcsound"
259 (testpath/"test.java").write <<~JAVA
262 public static void main(String args[]) {
263 csnd6.csoundInitialize(csnd6.CSOUNDINIT_NO_ATEXIT | csnd6.CSOUNDINIT_NO_SIGNAL_HANDLER);
267 system Formula["openjdk"].bin/"javac", "-classpath", "#{libexec}/csnd6.jar", "test.java"
268 system Formula["openjdk"].bin/"java", "-classpath", "#{libexec}/csnd6.jar:.",
269 "-Djava.library.path=#{libexec}", "test"