--- Csound5.17.2/SConstruct +++ Csound5.17.2/SConstruct @@ -89,6 +89,9 @@ commandOptions.Add('usePortMIDI', 'Build PortMidi plugin for real time MIDI input and output.', '1') +commandOptions.Add('usePulseAudio', + 'Set to 1 to use PulseAudio for real-time audio and MIDI input and output.', + '1') commandOptions.Add('useALSA', 'Set to 1 to use ALSA for real-time audio and MIDI input and output.', '1') @@ -101,6 +104,9 @@ commandOptions.Add('noFLTKThreads', 'Set to 1 to disable use of a separate thread for FLTK widgets.', '1') +commandOptions.Add('useLuaJIT', + 'Set to 1 to use the Just-In-Time Compiler for Lua', + '1') commandOptions.Add('pythonVersion', 'Set to the Python version to be used.', '%d.%d' % (int(sys.hexversion) >> 24, (int(sys.hexversion) >> 16) & 255)) @@ -180,6 +186,15 @@ commandOptions.Add('dynamicCsoundLibrary', 'Build dynamic Csound library instead of libcsound.a', '0') +commandOptions.Add('buildChuaOpcodes', + 'Set to 1 to build chua opcodes.', + '1') +commandOptions.Add('buildLinearOpcodes', + 'Set to 1 to build linear algebra opcodes.', + '1') +commandOptions.Add('buildFluidOpcodes', + 'Set to 1 to build Fluidsynth opcodes.', + '1') commandOptions.Add('buildStkOpcodes', "Build opcodes encapsulating Perry Cook's Synthesis Toolkit in C++ instruments and effects", '0') @@ -352,6 +367,7 @@ fileOptions.Add('customCXXFLAGS') fileOptions.Add('customLIBS') fileOptions.Add('customLIBPATH') +fileOptions.Add('customLINKFLAGS') fileOptions.Add('customSHLINKFLAGS') fileOptions.Add('customSWIGFLAGS') fileOptions.Update(commonEnvironment) @@ -366,6 +382,8 @@ commonEnvironment.Prepend(LIBS = customLIBS) customLIBPATH = commonEnvironment['customLIBPATH'] commonEnvironment.Prepend(LIBPATH = customLIBPATH) +customLINKFLAGS = commonEnvironment['customLINKFLAGS'] +commonEnvironment.Prepend(LINKFLAGS = customLINKFLAGS) customSHLINKFLAGS = commonEnvironment['customSHLINKFLAGS'] commonEnvironment.Prepend(SHLINKFLAGS = customSHLINKFLAGS) customSWIGFLAGS = commonEnvironment['customSWIGFLAGS'] @@ -469,14 +487,6 @@ if commonEnvironment['buildRelease'] == '0': commonEnvironment.Prepend(CPPFLAGS = ['-DBETA']) -if commonEnvironment['Lib64'] == '1': - if getPlatform() == 'sunos': - commonEnvironment.Prepend(LIBPATH = ['.', '#.', '/lib/64', '/usr/lib/64']) - else: - commonEnvironment.Prepend(LIBPATH = ['.', '#.', '/usr/local/lib64']) -else: - commonEnvironment.Prepend(LIBPATH = ['.', '#.', '/usr/local/lib']) - if commonEnvironment['Word64'] == '1': if compilerSun(): commonEnvironment.Append(CCFLAGS = ['-xcode=pic32']) @@ -494,10 +504,7 @@ if getPlatform() == 'linux': commonEnvironment.Append(CCFLAGS = ["-DLINUX"]) commonEnvironment.Append(CPPFLAGS = ['-DHAVE_SOCKETS']) - commonEnvironment.Append(CPPPATH = ['/usr/local/include']) - commonEnvironment.Append(CPPPATH = ['/usr/include']) commonEnvironment.Append(CPPPATH = ['/usr/include']) - commonEnvironment.Append(CPPPATH = ['/usr/X11R6/include']) commonEnvironment.Append(CCFLAGS = ["-DPIPES"]) commonEnvironment.Append(LINKFLAGS = ['-Wl,-Bdynamic']) elif getPlatform() == 'sunos': @@ -559,18 +566,17 @@ if getPlatform() == 'linux': path1 = '/usr/include/python%s' % commonEnvironment['pythonVersion'] - path2 = '/usr/local/include/python%s' % commonEnvironment['pythonVersion'] - pythonIncludePath = [path1, path2] + pythonIncludePath = [path1] path1 = '/usr/include/tcl%s' % commonEnvironment['tclversion'] path2 = '/usr/include/tk%s' % commonEnvironment['tclversion'] tclIncludePath = [path1, path2] pythonLinkFlags = [] if commonEnvironment['Lib64'] == '1': tmp = '/usr/lib64/python%s/config' % commonEnvironment['pythonVersion'] - pythonLibraryPath = ['/usr/local/lib64', '/usr/lib64', tmp] + pythonLibraryPath = ['/usr/lib64', tmp] else: tmp = '/usr/lib/python%s/config' % commonEnvironment['pythonVersion'] - pythonLibraryPath = ['/usr/local/lib', '/usr/lib', tmp] + pythonLibraryPath = ['/usr/lib', tmp] pythonLibs = ['python%s' % commonEnvironment['pythonVersion']] elif getPlatform() == 'sunos': path1 = '/usr/include/python%s' % commonEnvironment['pythonVersion'] @@ -777,6 +783,7 @@ zlibhfound = configure.CheckHeader("zlib.h", language = "C") midiPluginSdkFound = configure.CheckHeader("funknown.h", language = "C++") luaFound = configure.CheckHeader("lua.h", language = "C") +luajitFound = configure.CheckLibWithHeader("luajit-5.1", "luajit-2.0/lua.h", language = "C") #print 'LUA: %s' % (['no', 'yes'][int(luaFound)]) swigFound = 'swig' in commonEnvironment['TOOLS'] print 'Checking for SWIG... %s' % (['no', 'yes'][int(swigFound)]) @@ -1452,25 +1459,31 @@ swigflags = csoundWrapperEnvironment['SWIGFLAGS'] print 'swigflags:', swigflags luaWrapper = None - if not (luaFound and commonEnvironment['buildLuaWrapper'] != '0'): + if not ((luaFound or luajitFound) and commonEnvironment['buildLuaWrapper'] != '0'): print 'CONFIGURATION DECISION: Not building Lua wrapper to Csound C++ interface library.' else: print 'CONFIGURATION DECISION: Building Lua wrapper to Csound C++ interface library.' luaWrapperEnvironment = csoundWrapperEnvironment.Clone() if getPlatform() != 'win32': - csoundWrapperEnvironment.Append(CPPPATH=['/usr/include/lua5.1']) + if luajitFound and commonEnvironment['useLuaJIT'] == '1': + csoundWrapperEnvironment.Append(CPPPATH=['/usr/include/luajit-2.0']) + else: + csoundWrapperEnvironment.Append(CPPPATH=['/usr/include/lua5.1']) if getPlatform() == 'win32': csoundLuaInterface = luaWrapperEnvironment.SharedObject( 'interfaces/lua_interface.i', SWIGFLAGS = [swigflags, '-lua', '-module', 'luaCsnd', '-outdir', '.']) luaWrapperEnvironment.Prepend(LIBS = ['csnd','lua51']) - else: - csoundLuaInterface = luaWrapperEnvironment.SharedObject( - 'interfaces/lua_interface.i', - SWIGFLAGS = [swigflags, '-lua', '-module', 'luaCsnd', '-outdir', '.']) - luaWrapperEnvironment.Prepend(LIBS = ['csnd','luajit-5.1']) - luaWrapper = makeLuaModule(luaWrapperEnvironment, 'luaCsnd', [csoundLuaInterface]) - Depends(luaWrapper, csoundLuaInterface) + else: + csoundLuaInterface = luaWrapperEnvironment.SharedObject( + 'interfaces/lua_interface.i', + SWIGFLAGS = [swigflags, '-lua', '-module', 'luaCsnd', '-outdir', '.']) + if luajitFound and commonEnvironment['useLuaJIT'] == '1': + luaWrapperEnvironment.Prepend(LIBS = ['csnd','luajit-5.1']) + else: + luaWrapperEnvironment.Prepend(LIBS = ['csnd','lua']) + luaWrapper = makeLuaModule(luaWrapperEnvironment, 'luaCsnd', [csoundLuaInterface]) + Depends(luaWrapper, csoundLuaInterface) if not (javaFound and commonEnvironment['buildJavaWrapper'] != '0'): print 'CONFIGURATION DECISION: Not building Java wrapper to Csound C++ interface library.' @@ -1510,6 +1523,9 @@ javaWrapper = javaWrapperEnvironment.Program( 'lib_jcsound.jnilib', javaWrapperSources) else: + soname = 'lib_jcsound.so' + soflag = [ '-Wl,-soname=%s' % soname ] + javaWrapperEnvironment.Prepend(LINKFLAGS = [soflag]) javaWrapper = javaWrapperEnvironment.SharedLibrary( '_jcsound', javaWrapperSources) #Depends(javaWrapper, csoundLibrary) @@ -1759,9 +1775,12 @@ jpluginEnvironment.Append(LINKFLAGS = ['-framework', 'Jackmp']) makePlugin(jpluginEnvironment, 'jackTransport', 'Opcodes/jackTransport.c') makePlugin(jpluginEnvironment, 'jacko', 'Opcodes/jacko.cpp') -if boostFound: +if commonEnvironment['buildChuaOpcodes'] == '1' and boostFound: + print 'CONFIGURATION DECISION: Building chua opcodes.' makePlugin(pluginEnvironment, 'chua', 'Opcodes/chua/ChuaOscillator.cpp') -if gmmFound and commonEnvironment['useDouble'] != '0': +else: + print 'CONFIGURATION DECISION: Not building chua opcodes.' +if commonEnvironment['buildLinearOpcodes'] == '1' and gmmFound and commonEnvironment['useDouble'] != '0': makePlugin(pluginEnvironment, 'linear_algebra', 'Opcodes/linear_algebra.cpp') print 'CONFIGURATION DECISION: Building linear algebra opcodes.' else: @@ -1893,11 +1912,13 @@ alsaEnvironment.Append(LIBS = ['asound', 'pthread']) makePlugin(alsaEnvironment, 'rtalsa', ['InOut/rtalsa.c']) -if pulseaudioFound and (getPlatform() == 'linux' or getPlatform() == 'sunos'): +if commonEnvironment['usePulseAudio'] == '1' and pulseaudioFound and (getPlatform() == 'linux' or getPlatform() == 'sunos'): print "CONFIGURATION DECISION: Building PulseAudio plugin" pulseaudioEnv = pluginEnvironment.Clone() pulseaudioEnv.Append(LIBS = ['pulse-simple']) makePlugin(pulseaudioEnv, 'rtpulse', ['InOut/rtpulse.c']) +else: + print "CONFIGURATION DECISION: Not building PulseAudio plugin." if getPlatform() == 'win32': winmmEnvironment = pluginEnvironment.Clone() @@ -1963,9 +1984,7 @@ # FLUIDSYNTH OPCODES -if not configure.CheckHeader("fluidsynth.h", language = "C"): - print "CONFIGURATION DECISION: Not building fluid opcodes." -else: +if commonEnvironment['buildFluidOpcodes'] == '1' and configure.CheckHeader("fluidsynth.h", language = "C"): print "CONFIGURATION DECISION: Building fluid opcodes." fluidEnvironment = pluginEnvironment.Clone() if getPlatform() == 'win32': @@ -1981,6 +2000,8 @@ fluidEnvironment.Append(LIBS = ['pthread']) makePlugin(fluidEnvironment, 'fluidOpcodes', ['Opcodes/fluidOpcodes/fluidOpcodes.cpp']) +else: + print "CONFIGURATION DECISION: Not building fluid opcodes." # VST HOST OPCODES @@ -2174,7 +2195,7 @@ if getPlatform() == 'win32' and pythonLibs[0] < 'python24': Depends(pythonOpcodes, pythonImportLibrary) -# Python opcodes +# Lua opcodes if not (commonEnvironment['buildLuaOpcodes'] != '0'): print "CONFIGURATION DECISION: Not building Lua opcodes." @@ -2183,10 +2204,13 @@ luaEnvironment = pluginEnvironment.Clone() if getPlatform() == 'linux': - if(luaFound == 1): + if(luajitFound == 1 and commonEnvironment['useLuaJIT'] == '1'): luaEnvironment.Append(LIBS = ['luajit-5.1']) luaEnvironment.Append(LIBS = ['util', 'dl', 'm']) - luaEnvironment.Append(CPPPATH = '/usr/local/include/luajit-2.0') + luaEnvironment.Append(CPPPATH = '/usr/include/luajit-2.0') + elif(luaFound == 1): + luaEnvironment.Append(LIBS = ['lua']) + luaEnvironment.Append(LIBS = ['util', 'dl', 'm']) elif getPlatform() == 'win32': if(luaFound == 1): luaEnvironment.Append(LIBS = ['lua51']) @@ -2538,21 +2562,24 @@ Depends(csoundAcPythonModule, pythonWrapper) Depends(csoundAcPythonModule, csoundac) Depends(csoundAcPythonModule, csnd) - if luaFound and commonEnvironment['buildLuaWrapper'] != '0': - luaCsoundACWrapperEnvironment = acWrapperEnvironment.Clone() - if getPlatform() == 'win32': - luaCsoundACWrapperEnvironment.Prepend(LIBS = Split('luaCsnd lua51 CsoundAC csnd fltk_images')) - else: - luaCsoundACWrapperEnvironment.Prepend(LIBS = [luaWrapper]) - luaCsoundACWrapperEnvironment.Prepend(LIBS = Split('luajit-5.1 CsoundAC csnd fltk_images')) - luaCsoundACWrapper = luaCsoundACWrapperEnvironment.SharedObject( - 'frontends/CsoundAC/luaCsoundAC.i', SWIGFLAGS = [swigflags, Split('-lua ')]) - luaCsoundACWrapperEnvironment.Clean('.', 'frontends/CsoundAC/luaCsoundAC_wrap.h') - CsoundAclModule = makeLuaModule(luaCsoundACWrapperEnvironment, 'luaCsoundAC', [luaCsoundACWrapper]) - Depends(CsoundAclModule, luaCsoundACWrapper) - Depends(CsoundAclModule, luaWrapper) - Depends(CsoundAclModule, csoundac) - Depends(CsoundAclModule, csnd) + if (luajitFound or luaFound) and commonEnvironment['buildLuaWrapper'] != '0': + luaCsoundACWrapperEnvironment = acWrapperEnvironment.Clone() + if getPlatform() == 'win32': + luaCsoundACWrapperEnvironment.Prepend(LIBS = Split('luaCsnd lua51 CsoundAC csnd fltk_images')) + else: + luaCsoundACWrapperEnvironment.Prepend(LIBS = [luaWrapper]) + if commonEnvironment['useLuaJIT'] == '1': + luaCsoundACWrapperEnvironment.Prepend(LIBS = Split('luajit-5.1 CsoundAC csnd fltk_images')) + else: + luaCsoundACWrapperEnvironment.Prepend(LIBS = Split('lua CsoundAC csnd fltk_images')) + luaCsoundACWrapper = luaCsoundACWrapperEnvironment.SharedObject( + 'frontends/CsoundAC/luaCsoundAC.i', SWIGFLAGS = [swigflags, Split('-lua ')]) + luaCsoundACWrapperEnvironment.Clean('.', 'frontends/CsoundAC/luaCsoundAC_wrap.h') + CsoundAclModule = makeLuaModule(luaCsoundACWrapperEnvironment, 'luaCsoundAC', [luaCsoundACWrapper]) + Depends(CsoundAclModule, luaCsoundACWrapper) + Depends(CsoundAclModule, luaWrapper) + Depends(CsoundAclModule, csoundac) + Depends(CsoundAclModule, csnd) # Build CsoundVST