#!/usr/bin/env python
-import autowaf
+from waflib.extras import autowaf as autowaf
+from waflib import Options
+from waflib import TaskGen
import os
import sys
-import TaskGen
# Version of this package (even if built as a child)
MAJOR = '4'
# Variables for 'waf dist'
APPNAME = 'libpbd'
VERSION = LIBPBD_VERSION
+I18N_PACKAGE = 'libpbd4'
# Mandatory variables
-srcdir = '.'
-blddir = 'build'
+top = '.'
+out = 'build'
path_prefix = 'libs/pbd/'
-def set_options(opt):
- autowaf.set_options(opt)
+libpbd_sources = [
+ 'basename.cc',
+ 'base_ui.cc',
+ 'boost_debug.cc',
+ 'cartesian.cc',
+ 'command.cc',
+ 'convert.cc',
+ 'controllable.cc',
+ 'controllable_descriptor.cc',
+ 'clear_dir.cc',
+ 'cpus.cc',
+ 'debug.cc',
+ 'enumwriter.cc',
+ 'event_loop.cc',
+ 'enums.cc',
+ 'epa.cc',
+ 'error.cc',
+ 'ffs.cc',
+ 'file_manager.cc',
+ 'file_utils.cc',
+ 'fpu.cc',
+ 'glib_semaphore.cc',
+ 'id.cc',
+ 'locale_guard.cc',
+ 'localtime_r.cc',
+ 'malign.cc',
+ 'mountpoint.cc',
+ 'openuri.cc',
+ 'pathexpand.cc',
+ 'pathscanner.cc',
+ 'pbd.cc',
+ 'pool.cc',
+ 'property_list.cc',
+ 'pthread_utils.cc',
+ 'receiver.cc',
+ 'resource.cc',
+ 'search_path.cc',
+ 'semutils.cc',
+ 'shortpath.cc',
+ 'signals.cc',
+ 'sndfile_manager.cc',
+ 'stacktrace.cc',
+ 'stateful_diff_command.cc',
+ 'stateful.cc',
+ 'strreplace.cc',
+ 'strsplit.cc',
+ 'textreceiver.cc',
+ 'transmitter.cc',
+ 'undo.cc',
+ 'uuid.cc',
+ 'version.cc',
+ 'whitespace.cc',
+ 'xml++.cc',
+]
+
+def options(opt):
+ autowaf.set_options(opt)
def configure(conf):
- autowaf.build_version_files(path_prefix+'pbd/version.h', path_prefix+'version.cc',
- 'libpbd', MAJOR, MINOR, MICRO)
- autowaf.configure(conf)
- conf.check_tool('compiler_cxx')
- autowaf.check_pkg(conf, 'libxml-2.0', uselib_store='XML')
- autowaf.check_pkg(conf, 'sigc++-2.0', uselib_store='SIGCPP', atleast_version='2.0')
- if sys.platform != 'darwin':
- autowaf.check_pkg(conf, 'uuid', uselib_store='UUID')
-
- conf.check(function_name='getmntent', header_name='mntent.h', define_name='HAVE_GETMNTENT')
- conf.check(header_name='execinfo.h', define_name='HAVE_EXECINFO')
- conf.check(header_name='unistd.h', define_name='HAVE_UNISTD')
- if conf.check_cc(function_name='posix_memalign', header_name='stdlib.h', ccflags='-D_XOPEN_SOURCE=600') == False:
- conf.define ('NO_POSIX_MEMALIGN',1)
-
- conf.write_config_header('libpbd-config.h')
-
- # Boost headers
- autowaf.check_header(conf, 'boost/shared_ptr.hpp')
- autowaf.check_header(conf, 'boost/weak_ptr.hpp')
- # autowaf.check_header(conf, 'boost/uuid/uuid.hpp')
+ conf.load('compiler_cxx')
+ autowaf.build_version_files(path_prefix+'pbd/version.h', path_prefix+'version.cc',
+ 'libpbd', MAJOR, MINOR, MICRO)
+ autowaf.configure(conf)
+ autowaf.check_pkg(conf, 'libxml-2.0', uselib_store='XML')
+ autowaf.check_pkg(conf, 'sigc++-2.0', uselib_store='SIGCPP', atleast_version='2.0')
+
+ conf.check(function_name='getmntent', header_name='mntent.h', define_name='HAVE_GETMNTENT',mandatory=False)
+ conf.check(header_name='execinfo.h', define_name='HAVE_EXECINFO',mandatory=False)
+ conf.check(header_name='unistd.h', define_name='HAVE_UNISTD',mandatory=False)
+ conf.check_cc(function_name='posix_memalign', header_name='stdlib.h', cflags='-D_XOPEN_SOURCE=600', define_name='HAVE_POSIX_MEMALIGN', mandatory=False)
+ conf.check(function_name='localtime_r', header_name='time.h', define_name='HAVE_LOCALTIME_R',mandatory=False)
+
+ conf.write_config_header('libpbd-config.h', remove=False)
+
+ # Boost headers
+ autowaf.check_header(conf, 'cxx', 'boost/shared_ptr.hpp')
+ autowaf.check_header(conf, 'cxx', 'boost/weak_ptr.hpp')
def build(bld):
- # Library
- obj = bld.new_task_gen('cxx', 'shlib')
- obj.source = '''
- basename.cc
- base_ui.cc
- boost_debug.cc
- cartesian.cc
- command.cc
- convert.cc
- controllable.cc
- controllable_descriptor.cc
- clear_dir.cc
- crossthread.cc
- cpus.cc
- debug.cc
- enumwriter.cc
- event_loop.cc
- dmalloc.cc
- enums.cc
- epa.cc
- error.cc
- filesystem.cc
- filesystem_paths.cc
- file_manager.cc
- file_utils.cc
- fpu.cc
- id.cc
- locale_guard.cc
- malign.cc
- mountpoint.cc
- openuri.cc
- pathscanner.cc
- pool.cc
- property_list.cc
- pthread_utils.cc
- receiver.cc
- search_path.cc
- semutils.cc
- shortpath.cc
- signals.cc
- sndfile_manager.cc
- stacktrace.cc
- stateful_diff_command.cc
- stateful.cc
- strreplace.cc
- strsplit.cc
- textreceiver.cc
- transmitter.cc
- undo.cc
- uuid.cc
- version.cc
- whitespace.cc
- xml++.cc
- '''
-
- if bld.env['DEBUG_RT_ALLOC']:
- obj.source += 'debug_rt_alloc.c'
-
- obj.export_incdirs = ['.']
- obj.includes = ['.']
- obj.name = 'libpbd'
- obj.target = 'pbd'
- obj.uselib = 'GLIBMM SIGCPP XML UUID SNDFILE'
- if sys.platform == 'darwin':
- TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cc']
- obj.source += 'cocoa_open_uri.mm'
- obj.uselib += ' OSX'
- obj.vnum = LIBPBD_LIB_VERSION
- obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
- obj.cxxflags = ['-DPACKAGE="libpbd"']
-
- if bld.env['build_target'] == 'x86_64':
- obj.cxxflags += [ '-DUSE_X86_64_ASM' ]
-
- if bld.env['BUILD_TESTS'] and bld.env['HAVE_CPPUNIT']:
- # Unit tests
- testobj = bld.new_task_gen('cxx', 'program')
- testobj.source = '''
- test/testrunner.cc
- test/xpath.cc
- test/scalar_properties.cc
- test/signals_test.cc
- '''.split()
- testobj.target = 'run-tests'
- testobj.includes = obj.includes + ['test', '../pbd']
- testobj.uselib = 'CPPUNIT XML SNDFILE'
- testobj.uselib_local = 'libpbd'
+
+ # Make signals_generated.h using signals.py
+ bld(rule = 'python ${SRC} ${TGT}', source = 'pbd/signals.py', target = 'pbd/signals_generated.h')
+
+ # Library
+ if bld.is_defined ('INTERNAL_SHARED_LIBS'):
+ print('BUILD SHARED LIB')
+ obj = bld.shlib(features = 'cxx cxxshlib', source=libpbd_sources)
+ else:
+ print('BUILD STATIC LIB')
+ obj = bld.stlib(features = 'cxx cxxstlib', source=libpbd_sources)
+ obj.cxxflags = [ '-fPIC' ]
+
+ if bld.is_defined('DEBUG_RT_ALLOC'):
+ obj.source += 'debug_rt_alloc.c'
+
+ if bld.env['build_target'] != 'mingw':
+ obj.source += [ 'crossthread.cc' ]
+ else:
+ obj.source += [ 'mingw64/mingw64_pbd.cc' ]
+
+ obj.export_includes = ['.']
+ obj.includes = ['.']
+ obj.name = 'libpbd'
+ obj.target = 'pbd'
+ obj.uselib = 'GLIBMM SIGCPP XML UUID SNDFILE GIOMM'
+ if sys.platform == 'darwin':
+ TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cc']
+ if 'cocoa_open_uri.mm' not in obj.source:
+ obj.source += [ 'cocoa_open_uri.mm' ]
+ obj.uselib += ' OSX'
+ obj.vnum = LIBPBD_LIB_VERSION
+ obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
+ obj.defines = ['PACKAGE="' + I18N_PACKAGE + '"']
+
+ if bld.env['build_target'] == 'x86_64':
+ obj.defines += [ 'USE_X86_64_ASM' ]
+
+ if bld.env['BUILD_TESTS'] and bld.is_defined('HAVE_CPPUNIT'):
+ # Unit tests
+ testobj = bld(features = 'cxx cxxprogram')
+ testobj.source = '''
+ test/testrunner.cc
+ test/xpath.cc
+ test/mutex_test.cc
+ test/scalar_properties.cc
+ test/signals_test.cc
+ test/convert_test.cc
+ test/filesystem_test.cc
+ test/test_common.cc
+ '''.split()
+ testobj.target = 'run-tests'
+ testobj.includes = obj.includes + ['test', '../pbd']
+ testobj.uselib = 'CPPUNIT XML SNDFILE'
+ testobj.use = 'libpbd'
+ testobj.name = 'libpbd-tests'
+ if sys.platform != 'darwin' and bld.env['build_target'] != 'mingw':
+ testobj.linkflags = ['-lrt']
def shutdown():
- autowaf.shutdown()
-
+ autowaf.shutdown()