$NetBSD: patch-ac,v 1.10 2019/01/02 18:29:14 tnn Exp $ fix python3.x support and paths --- SConstruct.orig 2013-01-07 12:49:34.000000000 +0000 +++ SConstruct @@ -1,5 +1,5 @@ #J vim:syntax=python -print ''' +print(''' C S O U N D 5 SCons build file for Csound 5: @@ -16,7 +16,7 @@ For MinGW, run in the MSys shell and use www.python.org WIN32 Python to run scons. For Microsoft Visual C++, run in the Platform SDK command shell, and use www.python.org WIN32 Python to run scons. -''' +''') import time import glob @@ -60,6 +60,10 @@ def getPlatform(): return 'darwin' elif sys.platform[:5] == 'sunos': return 'sunos' + elif sys.platform[:6] == 'netbsd': + return 'netbsd' + elif sys.platform[:9] == 'dragonfly': + return 'dragonfly' else: return 'unsupported' @@ -69,7 +73,7 @@ def getPlatform(): # ############################################################################# -print "System platform is '" + getPlatform() + "'." +print("System platform is '" + getPlatform() + "'.") # Create options that can be set from the command line. @@ -317,24 +321,24 @@ def compilerGNU(): optionsFilename = 'custom.py' if compilerIntel(): - Tool('icl')(commonEnvironment) - optionsFilename = 'custom-msvc.py' + Tool('icl')(commonEnvironment) + optionsFilename = 'custom-msvc.py' elif compilerMicrosoft(): - optionsFilename = 'custom-msvc.py' + optionsFilename = 'custom-msvc.py' elif getPlatform() == 'win32': - # On Windows, to exclude MSVC tools, - # we have to force MinGW tools and then re-create - # the environment from scratch. - commonEnvironment = Environment(ENV = os.environ, tools = ['mingw', 'swig', 'javac', 'jar']) - commandOptions.Update(commonEnvironment) - #Tool('mingw')(commonEnvironment) - optionsFilename = 'custom-mingw.py' + # On Windows, to exclude MSVC tools, + # we have to force MinGW tools and then re-create + # the environment from scratch. + commonEnvironment = Environment(ENV = os.environ, tools = ['mingw', 'swig', 'javac', 'jar']) + commandOptions.Update(commonEnvironment) + #Tool('mingw')(commonEnvironment) + optionsFilename = 'custom-mingw.py' if(not FindFile(optionsFilename, '.')): - print "\n\n*************************************************" - print "%s NOT FOUND, please copy one of the custom-***.py" % optionsFilename - print "as %s and modify it to suit your system, if necessary" % optionsFilename - print "*************************************************" + print("\n\n*************************************************" ) + print("%s NOT FOUND, please copy one of the custom-***.py" % optionsFilename) + print("as %s and modify it to suit your system, if necessary" % optionsFilename) + print("*************************************************" ) Exit(-1) @@ -346,7 +350,7 @@ if commonEnvironment['custom']: Requires(optionsFilename, commonEnvironment) -print "Using options from '%s.'" % optionsFilename +print("Using options from '%s.'" % optionsFilename) fileOptions = Variables(optionsFilename) fileOptions.Add('customCPPPATH', 'List of custom CPPPATH variables') @@ -375,21 +379,21 @@ commonEnvironment.Prepend(SWIGFLAGS = cu # Define options for different platforms. if getPlatform() != 'win32' and getPlatform() != 'sunos': - print "Build platform is '" + getPlatform() + "'." + print("Build platform is '" + getPlatform() + "'.") elif getPlatform() == 'sunos': if compilerSun(): - print "Build platform is Sun Studio." + print("Build platform is Sun Studio.") elif compilerGNU(): - print "Build platform is '" + getPlatform() + "'." + print("Build platform is '" + getPlatform() + "'.") else: if compilerMicrosoft(): - print "Build platform is Microsoft Visual C++ (MSVC)." + print("Build platform is Microsoft Visual C++ (MSVC).") elif compilerIntel(): - print "Build platform is the Intel C++ Compiler (ICL)." + print("Build platform is the Intel C++ Compiler (ICL).") elif compilerGNU(): - print "Build platform is MinGW/MSYS" + print("Build platform is MinGW/MSYS") -print "SCons tools on this platform: ", commonEnvironment['TOOLS'] +print("SCons tools on this platform: ", commonEnvironment['TOOLS']) commonEnvironment.Prepend(CPPPATH = ['.', './H']) if commonEnvironment['useLrint'] != '0': @@ -398,7 +402,7 @@ if commonEnvironment['useLrint'] != '0': cf = Configure(commonEnvironment) if commonEnvironment['useGettext'] == '1': if cf.CheckHeader("libintl.h"): - print "CONFIGURATION DECISION: Using GNU gettext scheme" + print("CONFIGURATION DECISION: Using GNU gettext scheme") commonEnvironment.Prepend(CCFLAGS = ['-DGNU_GETTEXT']) if getPlatform() == "win32": commonEnvironment.Append(LIBS=['intl']) @@ -408,8 +412,10 @@ if commonEnvironment['useGettext'] == '1 commonEnvironment.Append(LIBS=['intl']) if getPlatform() == 'haiku': commonEnvironment.Append(LIBS=['intl']) + if getPlatform() == 'netbsd': + commonEnvironment.Append(LIBS=['intl']) else: - print "CONFIGURATION DECISION: No localisation" + print("CONFIGURATION DECISION: No localisation") if getPlatform() == 'haiku': commonEnvironment.Append(LIBS=['network']) @@ -495,9 +501,9 @@ if commonEnvironment['Word64'] == '1': commonEnvironment.Append(CCFLAGS = ['-fPIC']) if commonEnvironment['useDouble'] == '0': - print 'CONFIGURATION DECISION: Using single-precision floating point for audio samples.' + print('CONFIGURATION DECISION: Using single-precision floating point for audio samples.') else: - print 'CONFIGURATION DECISION: Using double-precision floating point for audio samples.' + print('CONFIGURATION DECISION: Using double-precision floating point for audio samples.') commonEnvironment.Append(CPPFLAGS = ['-DUSE_DOUBLE']) # Define different build environments for different types of targets. @@ -505,17 +511,17 @@ else: 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']) + commonEnvironment.Append(CCFLAGS = Split(os.environ['CFLAGS'])) + commonEnvironment.Append(CXXFLAGS = Split(os.environ['CXXFLAGS'])) + commonEnvironment.Append(LINKFLAGS = Split(os.environ['LDFLAGS'])) elif getPlatform() == 'sunos': commonEnvironment.Append(CCFLAGS = "-D_SOLARIS") - commonEnvironment.Append(CPPPATH = '/usr/local/include') - commonEnvironment.Append(CPPPATH = '/usr/include') commonEnvironment.Append(CPPPATH = '/usr/jdk/instances/jdk1.5.0/include') + commonEnvironment.Append(CCFLAGS = Split(os.environ['CFLAGS'])) + commonEnvironment.Append(CXXFLAGS = Split(os.environ['CXXFLAGS'])) + commonEnvironment.Append(LINKFLAGS = Split(os.environ['LDFLAGS'])) if compilerGNU(): commonEnvironment.Append(CCFLAGS = "-DPIPES") commonEnvironment.Append(LINKFLAGS = ['-Wl,-Bdynamic']) @@ -524,7 +530,7 @@ elif getPlatform() == 'darwin': commonEnvironment.Append(CPPPATH = '/usr/local/include') commonEnvironment.Append(CCFLAGS = "-DPIPES") if commonEnvironment['useAltivec'] == '1': - print 'CONFIGURATION DECISION: Using Altivec optimisation' + print('CONFIGURATION DECISION: Using Altivec optimisation') commonEnvironment.Append(CCFLAGS = "-faltivec") elif getPlatform() == 'haiku': commonEnvironment.Append(CPPPATH = '/boot/common/include') @@ -568,8 +574,13 @@ elif getPlatform() == 'win32': if compilerMicrosoft(): commonEnvironment.Append(CCFLAGS = '/arch:sse') if compilerIntel(): - print 'Generating code optimized for Intel Core 2 Duo and Pentium 4 that will run on other processors also.' + print('Generating code optimized for Intel Core 2 Duo and Pentium 4 that will run on other processors also.') commonEnvironment.Append(CCFLAGS = Split('/O3 /QaxTP')) +elif getPlatform() == 'netbsd' or getPlatform() == 'dragonfly' or getPlatform() == 'sunos5': + commonEnvironment.Append(CCFLAGS = Split(os.environ['CFLAGS'])) + commonEnvironment.Append(CXXFLAGS = Split(os.environ['CXXFLAGS'])) + commonEnvironment.Append(LINKFLAGS = Split(os.environ['LDFLAGS'])) + SConsignFile("unused-consign-file") if getPlatform() == 'linux': path1 = '/usr/include/python%s' % commonEnvironment['pythonVersion'] @@ -603,7 +614,7 @@ elif getPlatform() == 'darwin': kernelstr = fout.readline() fout.close() OSXvers = int(kernelstr[:kernelstr.find('.')]) - 4 - print "Mac OS X version 10.%d" % OSXvers + print("Mac OS X version 10.%d" % OSXvers) # dictionary mapping OS X version to Apple Python version # ex. 4:3 maps OS X 10.4 to Python 2.3 # Note that OS X 10.2 did not ship with a Python framework @@ -611,21 +622,21 @@ elif getPlatform() == 'darwin': OSXSystemPythonVersions = { 0:0, 1:0, 2:2, 3:3, 4:3, 5:5, 6:6, 7:7, 8:7 } sysPyVers = OSXSystemPythonVersions[OSXvers] if OSXvers >= 2: - print "Apple Python version is 2.%d" % sysPyVers + print("Apple Python version is 2.%d" % sysPyVers) # vers = (int(sys.hexversion) >> 24, (int(sys.hexversion) >> 16) & 255) vers = sys.version_info pvers = "%s.%s" % (vers[0], vers[1]) # This logic is not quite right on OS X 10.2 and earlier # or if the MacPython version equals the expected Apple Python version if vers[1] == sysPyVers: - print "Current Python version is %s, using Apple Python Framework" % pvers + print("Current Python version is %s, using Apple Python Framework" % pvers) pyBasePath = '/System/Library/Frameworks' else: - print "Current Python version is %s, using MacPython Framework" % pvers + print("Current Python version is %s, using MacPython Framework" % pvers) pyBasePath = '/Library/Frameworks' if commonEnvironment['pythonVersion'] != pvers: commonEnvironment['pythonVersion'] = pvers - print "WARNING python version used is " + pvers + print("WARNING python version used is " + pvers) pythonIncludePath = ['%s/Python.Framework/Headers' % pyBasePath] pythonLinkFlags = [ '-F' + pyBasePath, '-framework', 'python'] path1 = '%s/Python.framework/Versions/Current/lib' % pyBasePath @@ -696,44 +707,44 @@ configure = commonEnvironment.Configure( }) if not configure.CheckHeader("stdio.h", language = "C"): - print " *** Failed to compile a simple test program. The compiler is" - print " *** possibly not set up correctly, or is used with invalid flags." - print " *** Check config.log to find out more about the error." + print(" *** Failed to compile a simple test program. The compiler is") + print(" *** possibly not set up correctly, or is used with invalid flags.") + print(" *** Check config.log to find out more about the error.") Exit(-1) if not configure.CheckLibWithHeader("sndfile", "sndfile.h", language = "C"): - print "The sndfile library is required to build Csound 5." - Exit(-1) + print("The sndfile library is required to build Csound 5.") + Exit(-1) if getPlatform() == 'haiku': - pthreadLib = "root" + pthreadLib = "root" else: - pthreadLib = "pthread" + pthreadLib = "pthread" if not configure.CheckLibWithHeader(pthreadLib, "pthread.h", language = "C"): - print "The pthread library is required to build Csound 5." - Exit(-1) + print("The pthread library is required to build Csound 5.") + Exit(-1) # Support for GEN49 (load MP3 file) if commonEnvironment['includeWii'] != '0' and configure.CheckHeader("wiiuse.h", language = "C"): wiifound = 1 wiiversion = commonEnvironment['includeWii'] - print 'CONFIGURATION DECISION: Building with Wiimote support' + print('CONFIGURATION DECISION: Building with Wiimote support') else: wiifound = 0 - print 'CONFIGURATION DECISION: No Wiimote support' + print('CONFIGURATION DECISION: No Wiimote support') if commonEnvironment['includeP5Glove'] == '1' : p5gfound = 1 - print 'CONFIGURATION DECISION: Building with P5 Glove support' + print('CONFIGURATION DECISION: Building with P5 Glove support') else: p5gfound = 0 - print 'CONFIGURATION DECISION: No P5 Glove support' + print('CONFIGURATION DECISION: No P5 Glove support') if commonEnvironment['includeSerial'] == '1' : serialfound = 1 - print 'CONFIGURATION DECISION: Building with Serial code support' + print('CONFIGURATION DECISION: Building with Serial code support') else: serialfound = 0 - print 'CONFIGURATION DECISION: No Serial code support' + print('CONFIGURATION DECISION: No Serial code support') #pthreadSpinlockFound = configure.CheckLibWithHeader('pthread', 'pthread.h', 'C', 'pthread_spin_lock(0);') @@ -741,13 +752,13 @@ if getPlatform() != 'darwin': # pthreadS commonEnvironment.Append(CPPFLAGS = ['-DHAVE_PTHREAD_SPIN_LOCK']) pthreadBarrierFound = configure.CheckLibWithHeader('pthread', 'pthread.h', 'C', 'pthread_barrier_init(0, NULL, 0);') if pthreadBarrierFound: - print 'CONFIGURATION DECISION: Using HAVE_PTHREAD_BARRIER_INIT' + print('CONFIGURATION DECISION: Using HAVE_PTHREAD_BARRIER_INIT') commonEnvironment.Append(CPPFLAGS = ['-DHAVE_PTHREAD_BARRIER_INIT']) else: - print 'CONFIGURATION DECISION: Not using HAVE_PTHREAD_BARRIER_INIT' + print('CONFIGURATION DECISION: Not using HAVE_PTHREAD_BARRIER_INIT') openMpFound = configure.CheckLibWithHeader('gomp', 'omp.h', 'C++', 'int n = omp_get_num_threads();') if openMpFound and pthreadBarrierFound and commonEnvironment['useOpenMP'] == '1': - print 'CONFIGURATION DECISION: Using OpenMP.' + print('CONFIGURATION DECISION: Using OpenMP.') commonEnvironment.Append(CFLAGS = ['-fopenmp']) commonEnvironment.Append(CXXFLAGS = ['-fopenmp']) commonEnvironment.Append(CPPFLAGS = ['-DUSE_OPENMP']) @@ -760,7 +771,7 @@ else: syncLockTestAndSetFound = configure.CheckLibWithHeader('m', 'stdint.h', 'C', '__sync_lock_test_and_set((int32_t *)0, 0);') if syncLockTestAndSetFound: commonEnvironment.Append(CPPFLAGS = ['-DHAVE_SYNC_LOCK_TEST_AND_SET']) - print 'found sync lock' + print( 'found sync lock') vstSdkFound = configure.CheckHeader("frontends/CsoundVST/vstsdk2.4/public.sdk/source/vst2.x/audioeffectx.h", language = "C++") portaudioFound = configure.CheckHeader("portaudio.h", language = "C") #portmidiFound = configure.CheckHeader("portmidi.h", language = "C") @@ -794,10 +805,10 @@ if not tclhfound: zlibhfound = configure.CheckHeader("zlib.h", language = "C") midiPluginSdkFound = configure.CheckHeader("funknown.h", language = "C++") luaFound = configure.CheckHeader("lua.h", language = "C") -#print 'LUA: %s' % (['no', 'yes'][int(luaFound)]) +#print('LUA: %s' % (['no', 'yes'][int(luaFound)])) swigFound = 'swig' in commonEnvironment['TOOLS'] -print 'Checking for SWIG... %s' % (['no', 'yes'][int(swigFound)]) -print "Python Version: " + commonEnvironment['pythonVersion'] +print('Checking for SWIG... %s' % (['no', 'yes'][int(swigFound)])) +print("Python Version: " + commonEnvironment['pythonVersion']) pythonFound = configure.CheckHeader("Python.h", language = "C") if not pythonFound: if getPlatform() == 'darwin': @@ -865,7 +876,7 @@ elif configure.CheckHeader("dirent.h", l commonEnvironment.Append(CPPFLAGS = ['-DHAVE_DIRENT_H']) if not configure.CheckSndFile(): - print "The sndfile library >= 1.0.19 is required to build Csound 5." + print("The sndfile library >= 1.0.19 is required to build Csound 5.") Exit(-1) # Package contents. @@ -919,9 +930,9 @@ lexBuild = csoundLibraryEnvironment.CFil preBuild = csoundLibraryEnvironment.CFile(target = 'Engine/csound_prelex.c', source = 'Engine/csound_pre.lex') if commonEnvironment['NewParserDebug'] != '0': - print 'CONFIGURATION DECISION: Building with new parser debugging' + print('CONFIGURATION DECISION: Building with new parser debugging') csoundLibraryEnvironment.Append(CPPFLAGS = ['-DPARSER_DEBUG=1']) -else: print 'CONFIGURATION DECISION: Not building with new parser debugging' +else: print('CONFIGURATION DECISION: Not building with new parser debugging') csoundLibraryEnvironment.Append(CPPFLAGS = ['-D__BUILDING_LIBCSOUND']) if commonEnvironment['buildRelease'] != '0': @@ -942,6 +953,13 @@ if commonEnvironment['buildRelease'] != tmp += '64' s = '-DCS_DEFAULT_PLUGINDIR=\\"%s\\"' % tmp csoundLibraryEnvironment.Append(CPPFLAGS = [s]) + if getPlatform() == 'netbsd' or getPlatform() == 'dragonfly' or getPlatform() == 'sunos': + tmp = '%s/lib/csound5/plugins' % commonEnvironment['prefix'] + if commonEnvironment['useDouble'] != '0': + tmp += '64' + s = '-DCS_DEFAULT_PLUGINDIR=\\"%s\\"' % tmp + csoundLibraryEnvironment.Append(CPPFLAGS = [s]) + csoundDynamicLibraryEnvironment = csoundLibraryEnvironment.Clone() csoundDynamicLibraryEnvironment.Append(LIBS = ['sndfile']) if getPlatform() == 'win32': @@ -999,6 +1017,11 @@ ws2_32 csoundDynamicLibraryEnvironment.Append(SHLINKFLAGS = ['-module']) elif getPlatform() == 'linux' or getPlatform() == 'sunos' or getPlatform() == 'darwin': csoundDynamicLibraryEnvironment.Append(LIBS = ['dl', 'm', 'pthread']) +elif getPlatform() == 'netbsd': + csoundDynamicLibraryEnvironment.Append(LIBS = ['m', 'pthread']) +elif getPlatform() == 'dragonfly': + csoundDynamicLibraryEnvironment.Append(LINKFLAGS = ['-pthread']) + csoundDynamicLibraryEnvironment.Append(LIBS = ['m']) csoundInterfacesEnvironment = csoundDynamicLibraryEnvironment.Clone() if buildOSXFramework: @@ -1016,7 +1039,7 @@ if buildOSXFramework: tmp += ['%s/Resources/Opcodes64' % OSXFrameworkCurrentVersion] for i in tmp: try: - os.mkdir(i, 0755) + os.mkdir(i, 0o755) except: pass # set up symbolic links @@ -1045,7 +1068,7 @@ def MacOSX_InstallHeader(headerName): def MacOSX_InstallPlugin(fileName): if buildOSXFramework: - print "COPYINNG plugin" + print("COPYINNG plugin") pluginDir = '%s/Resources/Opcodes' % OSXFrameworkCurrentVersion if commonEnvironment['useDouble'] != '0': pluginDir += '64' @@ -1233,7 +1256,7 @@ libCsoundSources += newParserSources csoundLibraryEnvironment.Append(CCFLAGS='-fPIC') if commonEnvironment['dynamicCsoundLibrary'] == '1': - print 'CONFIGURATION DECISION: Building dynamic Csound library' + print('CONFIGURATION DECISION: Building dynamic Csound library') if getPlatform() == 'linux' or getPlatform() == 'sunos': libName = 'lib' + csoundLibraryName + '.so' libName2 = libName + '.' + csoundLibraryVersion @@ -1285,11 +1308,11 @@ if commonEnvironment['dynamicCsoundLibra csoundLibrary = csoundDynamicLibraryEnvironment.SharedLibrary( csoundLibraryName, libCsoundSources) else: - print 'CONFIGURATION DECISION: Building static Csound library' + print('CONFIGURATION DECISION: Building static Csound library') csoundLibraryEnvironment.Append(CCFLAGS='-fPIC') csoundLibrary = csoundLibraryEnvironment.Library( csoundLibraryName, libCsoundSources) -if getPlatform() == 'linux' or getPlatform() == 'sunos' or getPlatform() == 'haiku': +if getPlatform() == 'linux' or getPlatform() == 'sunos' or getPlatform() == 'haiku' or getPlatform() == 'netbsd' or getPlatform() == 'dragonfly': # We need the library before sndfile in case we are building a static # libcsound and passing -Wl,-as-needed libCsoundLibs.insert(0,csoundLibrary) @@ -1355,7 +1378,7 @@ def makePythonModule(env, targetName, so pyModule_ = env.SharedLibrary('_%s' % targetName, sources, SHLIBSUFFIX = '.pyd') if getPlatform() == 'win32' and pythonLibs[0] < 'python24': Depends(pyModule_, pythonImportLibrary) - print "PYTHON MODULE %s..." % targetName + print("PYTHON MODULE %s..." % targetName) pythonModules.append(pyModule_) pythonModules.append('%s.py' % targetName) return pyModule_ @@ -1369,15 +1392,15 @@ def makeLuaModule(env, targetName, srcs) luaModule_ = env.SharedLibrary('%s' % targetName, srcs, SHLIBPREFIX="", SHLIBSUFFIX = '.so') else: luaModule_ = env.SharedLibrary('%s' % targetName, srcs, SHLIBSUFFIX = '.dll') - print "LUA MODULE %s..." % targetName + print("LUA MODULE %s..." % targetName) return luaModule_ # libcsnd.so is used by all wrapper libraries. if not (commonEnvironment['buildInterfaces'] == '1'): - print 'CONFIGURATION DECISION: Not building Csound C++ interface library.' + print('CONFIGURATION DECISION: Not building Csound C++ interface library.') else: - print 'CONFIGURATION DECISION: Building Csound C++ interface library.' + print('CONFIGURATION DECISION: Building Csound C++ interface library.') csoundInterfacesEnvironment.Append(CPPPATH = ['interfaces']) if musicXmlFound: csoundInterfacesEnvironment.Prepend(LIBS = 'musicxml2') @@ -1456,36 +1479,36 @@ else: option = '-I' + option csoundWrapperEnvironment.Append(SWIGFLAGS = [option]) swigflags = csoundWrapperEnvironment['SWIGFLAGS'] - print 'swigflags:', swigflags + print('swigflags:', swigflags) luaWrapper = None if not (luaFound and commonEnvironment['buildLuaWrapper'] != '0'): - print 'CONFIGURATION DECISION: Not building Lua wrapper to Csound C++ interface library.' + 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() + 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 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', '.']) + '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) + 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.' + print('CONFIGURATION DECISION: Not building Java wrapper to Csound C++ interface library.') else: - print 'CONFIGURATION DECISION: Building Java wrapper to Csound C++ interface library.' + print('CONFIGURATION DECISION: Building Java wrapper to Csound C++ interface library.') javaWrapperEnvironment = csoundWrapperEnvironment.Clone() if getPlatform() == 'darwin': javaWrapperEnvironment.Append(LINKFLAGS = ['-L.', '-l_csnd']) - else: javaWrapperEnvironment.Prepend(LIBS = ['csnd']) + else: javaWrapperEnvironment.Prepend(LIBS = ['csnd']) if getPlatform() == 'darwin': javaWrapperEnvironment.Append(CPPPATH = ['/System/Library/Frameworks/JavaVM.framework/Headers']) @@ -1525,7 +1548,7 @@ else: target = './interfaces', source = './interfaces', JAVACFLAGS = ['-source', '5', '-target', '5']) try: - os.mkdir('interfaces/csnd', 0755) + os.mkdir('interfaces/csnd', 0o755) except: pass jcsndJar = javaWrapperEnvironment.Jar( @@ -1535,57 +1558,57 @@ else: # Please do not remove these two variables, needed to get things to build on Windows... pythonWrapper = None if not (pythonFound and commonEnvironment['buildPythonWrapper'] != '0'): - print 'CONFIGURATION DECISION: Not building Python wrapper to Csound C++ interface library.' + print('CONFIGURATION DECISION: Not building Python wrapper to Csound C++ interface library.') else: - print 'CONFIGURATION DECISION: Building Python wrapper to Csound C++ interface library.' + print('CONFIGURATION DECISION: Building Python wrapper to Csound C++ interface library.') pythonWrapperEnvironment = csoundWrapperEnvironment.Clone() if getPlatform() == 'darwin': pythonWrapperEnvironment.Append(LINKFLAGS = ['-L.', '-l_csnd']) else: pythonWrapperEnvironment.Prepend(LIBS = Split('csnd')) - if getPlatform() == 'linux': - os.spawnvp(os.P_WAIT, 'rm', ['rm', '-f', '_csnd.so']) - # os.symlink('lib_csnd.so', '_csnd.so') - pythonWrapperEnvironment.Append(LINKFLAGS = ['-Wl,-rpath-link,.']) - if getPlatform() == 'darwin': + if getPlatform() == 'linux': + os.spawnvp(os.P_WAIT, 'rm', ['rm', '-f', '_csnd.so']) + # os.symlink('lib_csnd.so', '_csnd.so') + pythonWrapperEnvironment.Append(LINKFLAGS = ['-Wl,-rpath-link,.']) + if getPlatform() == 'darwin': #pythonWrapperEnvironment.Append(LINKFLAGS = pythonLinkFlags) - if commonEnvironment['dynamicCsoundLibrary'] == '1': - #ilibName = "lib_csnd.dylib" - #ilibVersion = csoundLibraryVersion - #pythonWrapperEnvironment.Append(SHLINKFLAGS = Split('''-Xlinker -compatibility_version -Xlinker %s''' % ilibVersion)) - #pythonWrapperEnvironment.Append(SHLINKFLAGS = Split('''-Xlinker -current_version -Xlinker %s''' % ilibVersion)) - #pythonWrapperEnvironment.Append(SHLINKFLAGS = Split('''-install_name /Library/Frameworks/%s/%s''' % (OSXFrameworkCurrentVersion, ilibName))) - pythonWrapperEnvironment.Append(LINKFLAGS = Split('''-undefined dynamic_lookup''')) + if commonEnvironment['dynamicCsoundLibrary'] == '1': + #ilibName = "lib_csnd.dylib" + #ilibVersion = csoundLibraryVersion + #pythonWrapperEnvironment.Append(SHLINKFLAGS = Split('''-Xlinker -compatibility_version -Xlinker %s''' % ilibVersion)) + #pythonWrapperEnvironment.Append(SHLINKFLAGS = Split('''-Xlinker -current_version -Xlinker %s''' % ilibVersion)) + #pythonWrapperEnvironment.Append(SHLINKFLAGS = Split('''-install_name /Library/Frameworks/%s/%s''' % (OSXFrameworkCurrentVersion, ilibName))) + pythonWrapperEnvironment.Append(LINKFLAGS = Split('''-undefined dynamic_lookup''')) pythonWrapperEnvironment.Append(CPPPATH = pythonIncludePath) - #pythonWrapper = pythonWrapperEnvironment.SharedLibrary('_csnd', pythonWrapperSources) - pyVersToken = '-DPYTHON_24_or_newer' - csoundPythonInterface = pythonWrapperEnvironment.SharedObject( - 'interfaces/python_interface.i', - SWIGFLAGS = [swigflags, '-python', '-outdir', '.', pyVersToken]) - pythonWrapperEnvironment.Clean('.', 'interfaces/python_interface_wrap.h') - #try: os.symlink('lib_csnd.dylib', 'libcsnd.dylib') - #except: print "link exists..." - else: - pythonWrapperEnvironment.Append(LINKFLAGS = pythonLinkFlags) - pythonWrapperEnvironment.Prepend(LIBPATH = pythonLibraryPath) - if getPlatform() == 'win32': - pythonWrapperEnvironment.Prepend(LIBS = pythonLibs) - pythonWrapperEnvironment.Append(CPPPATH = pythonIncludePath) - fixCFlagsForSwig(pythonWrapperEnvironment) - pyVersToken = '-DPYTHON_24_or_newer' - csoundPythonInterface = pythonWrapperEnvironment.SharedObject( - 'interfaces/python_interface.i', - SWIGFLAGS = [swigflags, '-python', '-outdir', '.', pyVersToken]) - pythonWrapperEnvironment.Clean('.', 'interfaces/python_interface_wrap.h') - if getPlatform() == 'win32' and pythonLibs[0] < 'python24' and compilerGNU(): - Depends(csoundPythonInterface, pythonImportLibrary) - pythonWrapper = makePythonModule(pythonWrapperEnvironment, 'csnd', [csoundPythonInterface]) - pythonModules.append('csnd.py') - Depends(pythonWrapper, csnd) + #pythonWrapper = pythonWrapperEnvironment.SharedLibrary('_csnd', pythonWrapperSources) + pyVersToken = '-DPYTHON_24_or_newer' + csoundPythonInterface = pythonWrapperEnvironment.SharedObject( + 'interfaces/python_interface.i', + SWIGFLAGS = [swigflags, '-python', '-outdir', '.', pyVersToken]) + pythonWrapperEnvironment.Clean('.', 'interfaces/python_interface_wrap.h') + #try: os.symlink('lib_csnd.dylib', 'libcsnd.dylib') + #except: print("link exists...") + else: + pythonWrapperEnvironment.Append(LINKFLAGS = pythonLinkFlags) + pythonWrapperEnvironment.Prepend(LIBPATH = pythonLibraryPath) + if getPlatform() == 'win32': + pythonWrapperEnvironment.Prepend(LIBS = pythonLibs) + pythonWrapperEnvironment.Append(CPPPATH = pythonIncludePath) + fixCFlagsForSwig(pythonWrapperEnvironment) + pyVersToken = '-DPYTHON_24_or_newer' + csoundPythonInterface = pythonWrapperEnvironment.SharedObject( + 'interfaces/python_interface.i', + SWIGFLAGS = [swigflags, '-python', '-outdir', '.', pyVersToken]) + pythonWrapperEnvironment.Clean('.', 'interfaces/python_interface_wrap.h') + if getPlatform() == 'win32' and pythonLibs[0] < 'python24' and compilerGNU(): + Depends(csoundPythonInterface, pythonImportLibrary) + pythonWrapper = makePythonModule(pythonWrapperEnvironment, 'csnd', [csoundPythonInterface]) + pythonModules.append('csnd.py') + Depends(pythonWrapper, csnd) if commonEnvironment['generatePdf'] == '0': - print 'CONFIGURATION DECISION: Not generating Csound API PDF documentation.' + print('CONFIGURATION DECISION: Not generating Csound API PDF documentation.') else: - print 'CONFIGURATION DECISION: Generating Csound API PDF documentation.' + print('CONFIGURATION DECISION: Generating Csound API PDF documentation.') refmanTex = commonEnvironment.Command('doc/latex/refman.tex', 'Doxyfile', ['doxygen $SOURCE']) Depends(refmanTex, csoundLibrary) csoundPdf = commonEnvironment.Command('refman.pdf', 'doc/latex/refman.tex', ['pdflatex --include-directory=doc/latex --interaction=nonstopmode --job-name=CsoundAPI $SOURCE']) @@ -1691,7 +1714,7 @@ makePlugin(pluginEnvironment, 'signalflo makePlugin(pluginEnvironment, 'fractalnoise', ['Opcodes/tl/fractalnoise.cpp']) # platform-specific -if (getPlatform() == 'linux' or getPlatform() == 'darwin'): +if getPlatform() == 'linux' or getPlatform() == 'darwin' or getPlatform() == 'netbsd' or getPlatform() == 'dragonfly' or getPlatform() == 'sunos': makePlugin(pluginEnvironment, 'control', ['Opcodes/control.c']) # makePlugin(pluginEnvironment, 'cpumeter', ['Opcodes/cpumeter.c']) if getPlatform() == 'linux': @@ -1718,9 +1741,9 @@ makePlugin(pluginEnvironment, 'cellular' ############################################################################# # UDP opcodes if commonEnvironment['useUDP'] == '0': - print "CONFIGURATION DECISION: Not building UDP plugins." + print("CONFIGURATION DECISION: Not building UDP plugins.") else: - print "CONFIGURATION DECISION: Building UDP plugins." + print("CONFIGURATION DECISION: Building UDP plugins.") udpEnvironment = pluginEnvironment.Clone() if getPlatform() != 'haiku': udpEnvironment.Append(LIBS = ['pthread']) @@ -1733,13 +1756,15 @@ else: # OSC opcodes if not (commonEnvironment['useOSC'] == '1' and oscFound): - print "CONFIGURATION DECISION: Not building OSC plugin." + print("CONFIGURATION DECISION: Not building OSC plugin.") else: - print "CONFIGURATION DECISION: Building OSC plugin." + print("CONFIGURATION DECISION: Building OSC plugin.") oscEnvironment = pluginEnvironment.Clone() oscEnvironment.Append(LIBS = ['lo']) - if getPlatform() != 'haiku': - oscEnvironment.Append(LIBS = ['pthread']) + if getPlatform() == 'dragonfly': + oscEnvironment.Append(LINKFLAGS = ['-pthread']) + elif getPlatform() != 'haiku': + oscEnvironment.Append(LIBS = ['pthread']) if getPlatform() == 'win32': oscEnvironment.Append(LIBS = csoundWindowsLibraries) if compilerGNU(): @@ -1771,32 +1796,32 @@ if jackFound and commonEnvironment['useJ jpluginEnvironment.Append(LIBS = ['jackdmp']) elif getPlatform() == 'darwin': jpluginEnvironment.Append(LIBS = ['pthread']) - jpluginEnvironment.Append(LINKFLAGS = ['-framework', 'Jackmp']) + jpluginEnvironment.Append(LINKFLAGS = ['-framework', 'Jackmp']) makePlugin(jpluginEnvironment, 'jackTransport', 'Opcodes/jackTransport.c') makePlugin(jpluginEnvironment, 'jacko', 'Opcodes/jacko.cpp') if boostFound: makePlugin(pluginEnvironment, 'chua', 'Opcodes/chua/ChuaOscillator.cpp') if gmmFound and commonEnvironment['useDouble'] != '0': makePlugin(pluginEnvironment, 'linear_algebra', 'Opcodes/linear_algebra.cpp') - print 'CONFIGURATION DECISION: Building linear algebra opcodes.' + print('CONFIGURATION DECISION: Building linear algebra opcodes.') else: - print 'CONFIGURATION DECISION: Not building linear algebra opcodes.' + print('CONFIGURATION DECISION: Not building linear algebra opcodes.') if commonEnvironment['buildImageOpcodes'] == '1': if getPlatform() == 'win32': if configure.CheckHeader("png.h", language="C") and zlibhfound: - print 'CONFIGURATION DECISION: Building image opcodes' + print('CONFIGURATION DECISION: Building image opcodes') imEnv = pluginEnvironment.Clone() imEnv.Append(LIBS= Split(''' fltk_png fltk_z ''')) makePlugin(imEnv, 'image', ['Opcodes/imageOpcodes.c']) else: if configure.CheckHeader("png.h", language="C") and zlibhfound: - print 'CONFIGURATION DECISION: Building image opcodes' + print('CONFIGURATION DECISION: Building image opcodes') imEnv = pluginEnvironment.Clone() imEnv.Append(LIBS= Split(''' png z ''')) makePlugin(imEnv, 'image', ['Opcodes/imageOpcodes.c']) else: - print 'CONFIGURATION DECISION: Not building image opcodes' + print('CONFIGURATION DECISION: Not building image opcodes') # FLTK widgets @@ -1810,11 +1835,11 @@ if getPlatform() != 'darwin': if ((commonEnvironment['buildCsoundVST'] == '1') and boostFound and fltkFound): try: if vstEnvironment.ParseConfig(fltkConfigFlags): - print 'Parsed fltk-config.' + print('Parsed fltk-config.') else: - print 'Could not parse fltk-config.' + print('Could not parse fltk-config.') except: - print 'Exception when attempting to parse fltk-config.' + print('Exception when attempting to parse fltk-config.') if getPlatform() == 'darwin': vstEnvironment.Append(LIBS = ['fltk', 'fltk_images']) # png z jpeg are not on OSX at the mo if getPlatform() == 'win32': @@ -1834,7 +1859,7 @@ else: vstEnvironment.Append(LIBS = ['dl']) guiProgramEnvironment.Append(LIBS = ['dl']) if getPlatform() != 'haiku': - csoundProgramEnvironment.Append(LIBS = ['pthread', 'm']) + csoundProgramEnvironment.Append(LIBS = ['pthread', 'm']) if wiifound : if getPlatform() == 'darwin': WiiEnvironment.Append(LIBS = ['wiiuse']) @@ -1842,13 +1867,20 @@ else: WiiEnvironment.Append(LIBS = ['wiiuse', 'bluetooth']) if p5gfound : P5GEnvironment.Append(LIBS = ['p5glove']) - vstEnvironment.Append(LIBS = ['stdc++', 'pthread', 'm']) - guiProgramEnvironment.Append(LIBS = ['stdc++', 'pthread', 'm']) + if getPlatform() == 'dragonfly': + csoundProgramEnvironment.Append(LINKFLAGS = ['-pthread']) + vstEnvironment.Append(LIBS = ['stdc++', 'm']) + vstEnvironment.Append(LINKFLAGS = ['-pthread']) + guiProgramEnvironment.Append(LIBS = ['stdc++', 'm']) + guiProgramEnvironment.Append(LINKFLAGS = ['-pthread']) + else: + vstEnvironment.Append(LIBS = ['stdc++', 'pthread', 'm']) + guiProgramEnvironment.Append(LIBS = ['stdc++', 'pthread', 'm']) if getPlatform() == 'darwin': csoundProgramEnvironment.Append(LINKFLAGS = Split('''-framework Carbon -framework CoreAudio -framework CoreMIDI''')) if (not (commonEnvironment['useFLTK'] == '1' and fltkFound)): - print 'CONFIGURATION DECISION: Not building with FLTK graphs and widgets.' + print('CONFIGURATION DECISION: Not building with FLTK graphs and widgets.') else: widgetsEnvironment = pluginEnvironment.Clone() if (commonEnvironment['buildvst4cs'] == '1'): @@ -1872,13 +1904,20 @@ else: widgetsEnvironment.Append(LIBS = csoundWindowsLibraries) elif getPlatform() == 'darwin': widgetsEnvironment.ParseConfig('fltk-config --use-images --cflags --cxxflags --ldflags') + elif getPlatform() == 'netbsd': + widgetsEnvironment.ParseConfig('fltk-config --use-images --cflags --cxxflags --ldflags') + widgetsEnvironment.Append(LIBS = ['stdc++', 'pthread', 'm']) + elif getPlatform() == 'dragonfly': + widgetsEnvironment.ParseConfig('fltk-config --use-images --cflags --cxxflags --ldflags') + widgetsEnvironment.Append(LIBS = ['stdc++', 'm']) + widgetsEnvironment.Append(LINKFLAGS = ['-pthread']) makePlugin(widgetsEnvironment, 'widgets', ['InOut/FL_graph.cpp', 'InOut/winFLTK.c', 'InOut/widgets.cpp']) if commonEnvironment['buildVirtual'] == '0' or not fltk117Found: - print "CONFIGURATION DECISION: Not building Virtual Keyboard plugin. (FLTK 1.1.7+ required)" + print("CONFIGURATION DECISION: Not building Virtual Keyboard plugin. (FLTK 1.1.7+ required)") else: - print "CONFIGURATION DECISION: Building Virtual Keyboard plugin." + print("CONFIGURATION DECISION: Building Virtual Keyboard plugin.") widgetsEnvironment.Append(CPPPATH = ['./InOut', './InOut/virtual_keyboard']) makePlugin(widgetsEnvironment, 'virtual', ['InOut/virtual_keyboard/FLTKKeyboard.cpp', @@ -1894,7 +1933,7 @@ else: # REAL TIME AUDIO AND MIDI if commonEnvironment['useCoreAudio'] == '1' and getPlatform() == 'darwin': - print "CONFIGURATION DECISION: Building CoreAudio plugin." + print("CONFIGURATION DECISION: Building CoreAudio plugin.") coreaudioEnvironment = pluginEnvironment.Clone() coreaudioEnvironment.Append(CCFLAGS = ['-I/System/Library/Frameworks/CoreAudio.framework/Headers']) # makePlugin(coreaudioEnvironment, 'rtcoreaudio', ['InOut/rtcoreaudio.c']) @@ -1902,18 +1941,22 @@ if commonEnvironment['useCoreAudio'] == coreaudioEnvironment.Append(LINKFLAGS = ['-framework', 'AudioUnit']) makePlugin(coreaudioEnvironment, 'rtauhal', ['InOut/rtauhal.c']) else: - print "CONFIGURATION DECISION: Not building CoreAudio plugin." + print("CONFIGURATION DECISION: Not building CoreAudio plugin.") if not (commonEnvironment['useALSA'] == '1' and alsaFound): - print "CONFIGURATION DECISION: Not building ALSA plugin." + print("CONFIGURATION DECISION: Not building ALSA plugin.") else: - print "CONFIGURATION DECISION: Building ALSA plugin." + print("CONFIGURATION DECISION: Building ALSA plugin.") alsaEnvironment = pluginEnvironment.Clone() - alsaEnvironment.Append(LIBS = ['asound', 'pthread']) + if getPlatform() == 'dragonfly': + alsaEnvironment.Append(LIBS = ['asound']) + alsaEnvironment.Append(LINKFLAGS = ['-pthread']) + else: + alsaEnvironment.Append(LIBS = ['asound', 'pthread']) makePlugin(alsaEnvironment, 'rtalsa', ['InOut/rtalsa.c']) if pulseaudioFound and (getPlatform() == 'linux' or getPlatform() == 'sunos'): - print "CONFIGURATION DECISION: Building PulseAudio plugin" + print("CONFIGURATION DECISION: Building PulseAudio plugin") pulseaudioEnv = pluginEnvironment.Clone() pulseaudioEnv.Append(LIBS = ['pulse-simple']) makePlugin(pulseaudioEnv, 'rtpulse', ['InOut/rtpulse.c']) @@ -1924,9 +1967,9 @@ if getPlatform() == 'win32': makePlugin(winmmEnvironment, 'rtwinmm', ['InOut/rtwinmm.c']) if not (commonEnvironment['usePortAudio'] == '1' and portaudioFound): - print "CONFIGURATION DECISION: Not building PortAudio module." + print("CONFIGURATION DECISION: Not building PortAudio module.") else: - print "CONFIGURATION DECISION: Building PortAudio module." + print("CONFIGURATION DECISION: Building PortAudio module.") portaudioEnvironment = pluginEnvironment.Clone() if getPlatform() == 'win32': portaudioEnvironment.Append(LIBS = ['portaudio']) @@ -1934,7 +1977,7 @@ else: portaudioEnvironment.Append(LIBS = ['portaudio']) if (getPlatform() == 'linux'): if (commonEnvironment['useJack']=='1' and jackFound): - print "Adding Jack library for PortAudio" + print("Adding Jack library for PortAudio") portaudioEnvironment.Append(LIBS = ['jack']) portaudioEnvironment.Append(LIBS = ['asound', 'pthread']) makePlugin(portaudioEnvironment, 'rtpa', ['InOut/rtpa.c']) @@ -1942,18 +1985,24 @@ else: portaudioEnvironment.Append(LIBS = ['winmm', 'dsound']) portaudioEnvironment.Append(LIBS = csoundWindowsLibraries) makePlugin(portaudioEnvironment, 'rtpa', ['InOut/rtpa.cpp']) + elif getPlatform() == 'netbsd' or getPlatform() == 'dragonfly' or getPlatform() == 'sunos5': + portaudioEnvironment.ParseConfig('pkg-config --cflags --libs portaudio-2.0') + makePlugin(portaudioEnvironment, 'rtpa', ['InOut/rtpa.c']) else: makePlugin(portaudioEnvironment, 'rtpa', ['InOut/rtpa.c']) if not (commonEnvironment['useJack'] == '1' and jackFound): - print "CONFIGURATION DECISION: Not building JACK plugin." + print("CONFIGURATION DECISION: Not building JACK plugin.") else: - print "CONFIGURATION DECISION: Building JACK plugin." + print("CONFIGURATION DECISION: Building JACK plugin.") jackEnvironment = pluginEnvironment.Clone() if getPlatform() == 'linux': jackEnvironment.Append(LIBS = ['jack', 'asound', 'pthread']) elif getPlatform() == 'win32': jackEnvironment.Append(LIBS = ['jackdmp']) + elif getPlatform() == 'dragonfly': + jackEnvironment.Append(LIBS = ['jack']) + jackEnvironment.Append(LINKFLAGS = ['-pthread']) else: jackEnvironment.Append(LIBS = ['pthread', 'jack']) makePlugin(jackEnvironment, 'rtjack', ['InOut/rtjack.c']) @@ -1966,7 +2015,7 @@ if getPlatform() == 'haiku': if commonEnvironment['usePortMIDI'] == '1' and portmidiFound: - print 'CONFIGURATION DECISION: Building with PortMIDI.' + print('CONFIGURATION DECISION: Building with PortMIDI.') portMidiEnvironment = pluginEnvironment.Clone() portMidiEnvironment.Append(LIBS = ['portmidi']) if getPlatform() != 'darwin' and getPlatform() != 'win32': @@ -1978,16 +2027,16 @@ if commonEnvironment['usePortMIDI'] == ' portMidiEnvironment.Append(LIBS = ['asound']) makePlugin(portMidiEnvironment, 'pmidi', ['InOut/pmidi.c']) else: - print 'CONFIGURATION DECISION: Not building with PortMIDI.' + print('CONFIGURATION DECISION: Not building with PortMIDI.') if commonEnvironment['useIpMIDI'] == '1' and (getPlatform() == 'linux' or getPlatform() == 'win32' or getPlatform() == 'haiku'): - print 'CONFIGURATION DECISION: Building with ipMIDI.' + print('CONFIGURATION DECISION: Building with ipMIDI.') ipMidiEnvironment = pluginEnvironment.Clone() if getPlatform() == 'win32': ipMidiEnvironment.Append(LIBS = ['ws2_32']) makePlugin(ipMidiEnvironment, 'ipmidi', ['InOut/ipmidi.c']) else: - print 'CONFIGURATION DECISION: Not building with ipMIDI.' + print('CONFIGURATION DECISION: Not building with ipMIDI.') if getPlatform() == 'darwin': coreMidiEnvironment = pluginEnvironment.Clone() @@ -1999,32 +2048,38 @@ if getPlatform() == 'darwin': # FLUIDSYNTH OPCODES if not configure.CheckHeader("fluidsynth.h", language = "C"): - print "CONFIGURATION DECISION: Not building fluid opcodes." + print("CONFIGURATION DECISION: Not building fluid opcodes.") else: - print "CONFIGURATION DECISION: Building fluid opcodes." - fluidEnvironment = pluginEnvironment.Clone() - if getPlatform() == 'win32': - if compilerGNU(): - fluidEnvironment.Append(LIBS = ['fluidsynth']) - else: - fluidEnvironment.Append(LIBS = ['fluidsynth']) - fluidEnvironment.Append(CPPFLAGS = ['-DFLUIDSYNTH_NOT_A_DLL']) - fluidEnvironment.Append(LIBS = ['winmm', 'dsound']) - fluidEnvironment.Append(LIBS = csoundWindowsLibraries) - elif getPlatform() == 'linux' or getPlatform() == 'darwin': - fluidEnvironment.Append(LIBS = ['fluidsynth']) - fluidEnvironment.Append(LIBS = ['pthread']) - elif getPlatform() == 'haiku': - fluidEnvironment.Append(LIBS = ['fluidsynth']) - makePlugin(fluidEnvironment, 'fluidOpcodes', + print("CONFIGURATION DECISION: Building fluid opcodes.") + fluidEnvironment = pluginEnvironment.Clone() + if getPlatform() == 'win32': + if compilerGNU(): + fluidEnvironment.Append(LIBS = ['fluidsynth']) + else: + fluidEnvironment.Append(LIBS = ['fluidsynth']) + fluidEnvironment.Append(CPPFLAGS = ['-DFLUIDSYNTH_NOT_A_DLL']) + fluidEnvironment.Append(LIBS = ['winmm', 'dsound']) + fluidEnvironment.Append(LIBS = csoundWindowsLibraries) + elif getPlatform() == 'linux' or getPlatform() == 'darwin': + fluidEnvironment.Append(LIBS = ['fluidsynth']) + fluidEnvironment.Append(LIBS = ['pthread']) + elif getPlatform() == 'haiku': + fluidEnvironment.Append(LIBS = ['fluidsynth']) + elif getPlatform() == 'netbsd': + fluidEnvironment.Append(LIBS = ['fluidsynth']) + fluidEnvironment.Append(LIBS = ['pthread']) + elif getPlatform() == 'dragonfly': + fluidEnvironment.Append(LIBS = ['fluidsynth']) + fluidEnvironment.Append(LINKFLAGS = ['-pthread']) + makePlugin(fluidEnvironment, 'fluidOpcodes', ['Opcodes/fluidOpcodes/fluidOpcodes.cpp']) # VST HOST OPCODES if (commonEnvironment['buildvst4cs'] != '1'): - print "CONFIGURATION DECISION: Not building vst4cs opcodes." + print("CONFIGURATION DECISION: Not building vst4cs opcodes.") else: - print "CONFIGURATION DECISION: Building vst4cs opcodes." + print("CONFIGURATION DECISION: Building vst4cs opcodes.") if (getPlatform() == 'win32'or getPlatform() == 'linux') and fltkFound: vst4Environment = vstEnvironment.Clone() vst4Environment.Append(CPPFLAGS = ['-DCS_VSTHOST']) @@ -2058,19 +2113,19 @@ else: # DSSI HOST OPCODES if (commonEnvironment['buildDSSI'] == '1' and (getPlatform() == 'linux' or getPlatform() == 'darwin') and configure.CheckHeader("ladspa.h", language = "C")) and configure.CheckHeader("dssi.h", language = "C"): - print "CONFIGURATION DECISION: Building DSSI plugin host opcodes." + print("CONFIGURATION DECISION: Building DSSI plugin host opcodes.") dssiEnvironment = pluginEnvironment.Clone() dssiEnvironment.Append(LIBS = ['dl']) makePlugin(dssiEnvironment, 'dssi4cs', ['Opcodes/dssi4cs/src/load.c', 'Opcodes/dssi4cs/src/dssi4cs.c']) else: - print "CONFIGURATION DECISION: Not building DSSI plugin host opcodes." + print("CONFIGURATION DECISION: Not building DSSI plugin host opcodes.") # Loris opcodes #if not (commonEnvironment['buildLoris'] == '1' and configure.CheckHeader("Opcodes/Loris/src/loris.h") and configure.CheckHeader("fftw3.h")): -# print "CONFIGURATION DECISION: Not building Loris Python extension and Csound opcodes." +# print("CONFIGURATION DECISION: Not building Loris Python extension and Csound opcodes.") #else: -# print "CONFIGURATION DECISION: Building Loris Python extension and Csound opcodes." +# print("CONFIGURATION DECISION: Building Loris Python extension and Csound opcodes.") # For Loris, we build only the loris Python extension module and # the Csound opcodes (modified for Csound 5). # It is assumed that you have copied all contents of the Loris @@ -2127,9 +2182,9 @@ else: # STK opcodes if not (commonEnvironment['buildStkOpcodes'] == '1' and stkFound): - print 'CONFIGURATION DECISION: Not building STK opcodes.' + print('CONFIGURATION DECISION: Not building STK opcodes.') else: - print 'CONFIGURATION DECISION: Building STK opcodes.' + print('CONFIGURATION DECISION: Building STK opcodes.') # For the STK opcodes, the STK distribution include, src, and rawwaves # directories should be copied thusly: # csound5/Opcodes/stk/include @@ -2178,8 +2233,10 @@ else: stkEnvironment.Append(LIBS = ['stdc++']) if getPlatform() == 'win32': stkEnvironment.Append(LIBS = csoundWindowsLibraries) - elif getPlatform() == 'linux' or getPlatform() == 'darwin' or getPlatform() == 'sunos': + elif getPlatform() == 'linux' or getPlatform() == 'darwin' or getPlatform() == 'sunos' or getPlatform() == 'netbsd': stkEnvironment.Append(LIBS = ['pthread']) + elif getPlatform() == 'dragonfly': + stkEnvironment.Append(LINKFLAGS = ['-pthread']) # This is the one that actually defines the opcodes. # They are straight wrappers, as simple as possible. stk = makePlugin(stkEnvironment, 'stk', ['Opcodes/stk/stkOpcodes.cpp']) @@ -2188,9 +2245,9 @@ else: # Python opcodes if not (pythonFound and commonEnvironment['buildPythonOpcodes'] != '0'): - print "CONFIGURATION DECISION: Not building Python opcodes." + print("CONFIGURATION DECISION: Not building Python opcodes.") else: - print "CONFIGURATION DECISION: Building Python opcodes." + print("CONFIGURATION DECISION: Building Python opcodes.") pyEnvironment = pluginEnvironment.Clone() if getPlatform() != 'darwin': pyEnvironment.Append(CPPPATH = pythonIncludePath) @@ -2206,6 +2263,8 @@ else: pyEnvironment.Append(LIBS = ['dl', 'm']) elif getPlatform() == 'win32': pyEnvironment['ENV']['PATH'] = os.environ['PATH'] + elif getPlatform() == 'netbsd' or getPlatform() == 'dragonfly': + pyEnvironment.Append(LIBS = ['m']) pythonOpcodes = makePlugin(pyEnvironment, 'py', ['Opcodes/py/pythonopcodes.c']) if getPlatform() == 'win32' and pythonLibs[0] < 'python24': @@ -2214,9 +2273,9 @@ else: # Python opcodes if not (commonEnvironment['buildLuaOpcodes'] != '0'): - print "CONFIGURATION DECISION: Not building Lua opcodes." + print("CONFIGURATION DECISION: Not building Lua opcodes.") else: - print "CONFIGURATION DECISION: Building Lua opcodes." + print("CONFIGURATION DECISION: Building Lua opcodes.") luaEnvironment = pluginEnvironment.Clone() if getPlatform() == 'linux': @@ -2331,9 +2390,9 @@ def fluidTarget(env, dirName, baseName, # Build Csound5gui (FLTK frontend) if not (commonEnvironment['buildCsound5GUI'] != '0' and fltk117Found): - print 'CONFIGURATION DECISION: Not building FLTK CSOUND5GUI frontend.' + print('CONFIGURATION DECISION: Not building FLTK CSOUND5GUI frontend.') else: - print 'CONFIGURATION DECISION: Building FLTK GUI CSOUND5GUI frontend.' + print('CONFIGURATION DECISION: Building FLTK GUI CSOUND5GUI frontend.') csound5GUIEnvironment = csoundProgramEnvironment.Clone() csound5GUIEnvironment.Append(CPPPATH = ['./interfaces']) if jackFound: @@ -2409,9 +2468,9 @@ else: # Build CsoundAC if not ((commonEnvironment['buildCsoundAC'] == '1') and fltkFound and boostFound and fltkFound and eigenFound): - print 'CONFIGURATION DECISION: Not building CsoundAC extension module for Csound with algorithmic composition.' + print('CONFIGURATION DECISION: Not building CsoundAC extension module for Csound with algorithmic composition.') else: - print 'CONFIGURATION DECISION: Building CsoundAC extension module for Csound with algorithmic composition.' + print('CONFIGURATION DECISION: Building CsoundAC extension module for Csound with algorithmic composition.') acEnvironment = vstEnvironment.Clone() if getPlatform() == 'linux': acEnvironment.ParseConfig('fltk-config --use-images --cflags --cxxflags --ldflags') @@ -2476,7 +2535,7 @@ else: for option in acEnvironment['CPPPATH']: option = '-I' + option acEnvironment.Append(SWIGFLAGS = [option]) - print 'PATH =', commonEnvironment['ENV']['PATH'] + print('PATH =', commonEnvironment['ENV']['PATH']) csoundAcSources = Split(''' frontends/CsoundAC/allegro.cpp frontends/CsoundAC/allegrord.cpp @@ -2547,7 +2606,7 @@ else: csoundAcPythonModule = makePythonModule(pythonCsoundACWrapperEnvironment, 'CsoundAC', csoundAcPythonWrapper) if getPlatform() == 'win32' and pythonLibs[0] < 'python24' and compilerGNU(): - Depends(csoundAcPythonModule, pythonImportLibrary) + Depends(csoundAcPythonModule, pythonImportLibrary) pythonModules.append('CsoundAC.py') Depends(csoundAcPythonModule, pythonWrapper) Depends(csoundAcPythonModule, csoundac) @@ -2572,9 +2631,9 @@ else: # Build CsoundVST if not ((commonEnvironment['buildCsoundVST'] == '1') and boostFound and fltkFound): - print 'CONFIGURATION DECISION: Not building CsoundVST plugin and standalone.' + print('CONFIGURATION DECISION: Not building CsoundVST plugin and standalone.') else: - print 'CONFIGURATION DECISION: Building CsoundVST plugin and standalone.' + print('CONFIGURATION DECISION: Building CsoundVST plugin and standalone.') headers += glob.glob('frontends/CsoundVST/*.h') headers += glob.glob('frontends/CsoundVST/*.hpp') vstEnvironment.Prepend(CPPPATH = ['interfaces', 'frontends/CsoundVST']) @@ -2606,7 +2665,14 @@ else: vstEnvironment.Append(LIBS = Split('fltk fltk_images fltk_png fltk_jpeg fltk_z')) else: vstEnvironment.Append(LIBS = Split('csound64 csnd fltk fltkimages fltkpng fltkjpeg fltkz')) - print 'PATH =', commonEnvironment['ENV']['PATH'] + elif getPlatform() == 'netbsd' or getPlatform() == 'dragonfly': + vstEnvironment.Append(LIBS = ['m']) + vstEnvironment.Append(SHLINKFLAGS = '--no-export-all-symbols') + vstEnvironment.Append(LINKFLAGS = ['-Wl,-rpath-link,.']) + guiProgramEnvironment.Prepend(LINKFLAGS = ['-Wl,-rpath-link,.']) + os.spawnvp(os.P_WAIT, 'rm', ['rm', '-f', '_CsoundVST.so']) + os.symlink('lib_CsoundVST.so', '_CsoundVST.so') + print('PATH =', commonEnvironment['ENV']['PATH']) csoundVstSources = Split(''' frontends/CsoundVST/vstsdk2.4/public.sdk/source/vst2.x/audioeffect.cpp frontends/CsoundVST/vstsdk2.4/public.sdk/source/vst2.x/audioeffectx.cpp @@ -2639,9 +2705,9 @@ else: # Build csoundapi~ (pd class) -print commonEnvironment['buildPDClass'], pdhfound +print(commonEnvironment['buildPDClass'], pdhfound) if commonEnvironment['buildPDClass'] == '1' and pdhfound: - print "CONFIGURATION DECISION: Building PD csoundapi~ class" + print("CONFIGURATION DECISION: Building PD csoundapi~ class") pdClassEnvironment = commonEnvironment.Clone() pdClassEnvironment.Append(LINKFLAGS = libCsoundLinkFlags) pdClassEnvironment.Append(LIBS = libCsoundLibs) @@ -2653,7 +2719,7 @@ if commonEnvironment['buildPDClass'] == pdClass = pdClassEnvironment.Program( 'csoundapi~.pd_darwin', 'frontends/csoundapi_tilde/csoundapi_tilde.c') - elif getPlatform() == 'linux': + elif getPlatform() == 'linux' or getPlatform() == 'netbsd' or getPlatform() == 'dragonfly' or getPlatform() == 'sunos5': pdClass = pdClassEnvironment.SharedLibrary( 'csoundapi~.pd_linux', 'frontends/csoundapi_tilde/csoundapi_tilde.c', @@ -2670,7 +2736,7 @@ if commonEnvironment['buildPDClass'] == # Build tclcsound if commonEnvironment['buildTclcsound'] == '1' and tclhfound: - print "CONFIGURATION DECISION: Building Tclcsound frontend" + print("CONFIGURATION DECISION: Building Tclcsound frontend") csTclEnvironment = commonEnvironment.Clone() csTclEnvironment.Append(LINKFLAGS = libCsoundLinkFlags) csTclEnvironment.Append(LIBS = libCsoundLibs) @@ -2694,6 +2760,15 @@ if commonEnvironment['buildTclcsound'] = lib2 = 'tk%s' % commonEnvironment['tclversion'] csTclEnvironment.Append(LIBS = [lib1, lib2]) csTclEnvironment.Append(LIBS = csoundWindowsLibraries) + elif getPlatform() == 'netbsd': + lib1 = 'tcl%s' % commonEnvironment['tclversion'] + lib2 = 'tk%s' % commonEnvironment['tclversion'] + csTclEnvironment.Append(LIBS = [lib1, lib2, 'pthread']) + elif getPlatform() == 'dragonfly': + lib1 = 'tcl%s' % commonEnvironment['tclversion'] + lib2 = 'tk%s' % commonEnvironment['tclversion'] + csTclEnvironment.Append(LIBS = [lib1, lib2]) + csTclEnvironment.Append(LINKFLAGS = ['-pthread']) csTclCmdObj = csTclEnvironment.SharedObject( 'frontends/tclcsound/commands.c') csTcl = csTclEnvironment.Program( @@ -2721,7 +2796,7 @@ if commonEnvironment['buildTclcsound'] = executables.append(csTk) libs.append(Tclcsoundlib) try: - os.mkdir('tclcsound', 0755) + os.mkdir('tclcsound', 0o755) except: pass # if getPlatform() == 'darwin': @@ -2733,12 +2808,12 @@ if commonEnvironment['buildTclcsound'] = # csTclEnvironment.Command('tclcsound/pkgIndex.tcl', 'tclcsound/tclcsound.dll','tclsh84 pkgbuild.tcl') else: - print "CONFIGURATION DECISION: Not building Tclcsound" + print("CONFIGURATION DECISION: Not building Tclcsound") # Build Winsound FLTK frontend if commonEnvironment['buildWinsound'] == '1' and fltkFound: - print "CONFIGURATION DECISION: Building Winsound frontend" + print("CONFIGURATION DECISION: Building Winsound frontend") # should these be installed ? # headers += glob.glob('frontends/winsound/*.h') csWinEnvironment = commonEnvironment.Clone() @@ -2785,10 +2860,10 @@ if commonEnvironment['buildWinsound'] == Depends(winsound5, csoundLibrary) executables.append(winsound5) else: - print "CONFIGURATION DECISION: Not building Winsound" + print("CONFIGURATION DECISION: Not building Winsound") #if (getPlatform() == 'darwin' and commonEnvironment['buildOSXGUI'] == '1'): -# print "CONFIGURATION DECISION: building OSX GUI frontend" +# print("CONFIGURATION DECISION: building OSX GUI frontend") # csOSXGUIEnvironment = commonEnvironment.Clone() # OSXGUI = csOSXGUIEnvironment.Command( # '''frontends/OSX/build/Csound 5.app/Contents/MacOS/Csound 5''', @@ -2796,10 +2871,10 @@ else: # "cd frontends/OSX; xcodebuild -buildstyle Deployment") # Depends(OSXGUI, csoundLibrary) #else: -# print "CONFIGURATION DECISION: Not building OSX GUI frontend" +# print("CONFIGURATION DECISION: Not building OSX GUI frontend") # build csLADSPA -print "CONFIGURATION DEFAULT: Building csLadspa." +print("CONFIGURATION DEFAULT: Building csLadspa.") csLadspaEnv = commonEnvironment.Clone() csLadspaEnv.Append(LINKFLAGS = libCsoundLinkFlags) csLadspaEnv.Append(LIBS=libCsoundLibs) @@ -2818,12 +2893,12 @@ libs.append(csladspa) # Build beats (score generator) if not (commonEnvironment['buildBeats'] != '0'): - print 'CONFIGURATION DECISION: Not building beats score frontend.' + print('CONFIGURATION DECISION: Not building beats score frontend.') else: - print "CONFIGURATION DECISION: Building beats score frontend" + print("CONFIGURATION DECISION: Building beats score frontend") csBeatsEnvironment = commonEnvironment.Clone() if getPlatform() != "haiku": - csBeatsEnvironment.Append(LINKFLAGS = ['-lm']) + csBeatsEnvironment.Append(LINKFLAGS = ['-lm']) csBeatsEnvironment.Append(YACCFLAGS = ['-d']) #csBeatsEnvironment.Append(LEXFLAGS = ['-Pbeats']) byb = csBeatsEnvironment.CFile(target = 'frontends/beats/beats.tab.c', @@ -2831,15 +2906,14 @@ else: blb = csBeatsEnvironment.CFile(target = 'frontends/beats/lex.yy.c', source = 'frontends/beats/beats.l') bb = csBeatsEnvironment.Program('csbeats', - ['frontends/beats/main.c', - byb, + ['frontends/beats/main.c', 'frontends/beats/beats.tab.c', blb]) executables.append(bb) if not (commonEnvironment['buildcatalog'] != '0'): - print 'CONFIGURATION DECISION: Not building catalog builder.' + print('CONFIGURATION DECISION: Not building catalog builder.') else: - print "CONFIGURATION DECISION: Building catalog builder" + print("CONFIGURATION DECISION: Building catalog builder") catEnvironment = Environment(ENV = os.environ) catEnvironment.Append(LINKFLAGS = ['-ldl']) bb = catEnvironment.Program('mkdb', ['mkdb.c']) @@ -2847,9 +2921,9 @@ else: if (commonEnvironment['generateTags']=='0') or (getPlatform() != 'darwin' and getPlatform() != 'linux'): - print "CONFIGURATION DECISION: Not calling TAGS" + print("CONFIGURATION DECISION: Not calling TAGS") else: - print "CONFIGURATION DECISION: Calling TAGS" + print("CONFIGURATION DECISION: Calling TAGS") allSources = string.join(glob.glob('*/*.h*')) allSources = allSources + ' ' + string.join(glob.glob('*/*.c')) allSources = allSources + ' ' + string.join(glob.glob('*/*.cpp')) @@ -2887,11 +2961,15 @@ INSTDIR = commonEnvironment['instdir'] PREFIX = INSTDIR + commonEnvironment['prefix'] BIN_DIR = PREFIX + "/bin" +BIN_DIR = PREFIX + "/lib/csound5" INCLUDE_DIR = PREFIX + "/include/csound" +INCLUDE_DIR = PREFIX + "/include/csound5" if (commonEnvironment['Lib64'] == '1'): LIB_DIR = PREFIX + "/lib64" + LIB_DIR = PREFIX + "/lib64/csound5" PYTHON_DIR = '%s/lib64' % sys.prefix + PYTHON_DIR = '%s/lib64/csount5' % sys.prefix else: LIB_DIR = PREFIX + "/lib" PYTHON_DIR = '%s/lib' % sys.prefix @@ -2903,8 +2981,10 @@ for i in sys.path: if commonEnvironment['useDouble'] == '0': PLUGIN_DIR = LIB_DIR + "/csound/plugins" + PLUGIN_DIR = LIB_DIR + "/plugins" else: PLUGIN_DIR = LIB_DIR + "/csound/plugins64" + PLUGIN_DIR = LIB_DIR + "/plugins64" if commonEnvironment['install'] == '1': installExecutables = Alias('install-executables', @@ -2920,7 +3000,7 @@ if commonEnvironment['install'] == '1': Alias('install', [installExecutables, installOpcodes, installLibs, installHeaders, installPythonModules]) if getPlatform() == 'darwin' and commonEnvironment['useFLTK'] == '1': - print "CONFIGURATION DECISION: Adding resource fork for csound" + print("CONFIGURATION DECISION: Adding resource fork for csound") addOSXResourceFork(commonEnvironment, 'csound', '') ###Code to create pkconfig files