alter the way the border of Canvas::Rectangle is drawn to meet the intent that a...
[ardour.git] / tools / autowaf.py
index 46c563519ffc255fa434bb821f91d02428bfe82b..f5996d9cd2a8f99699a8f421dbc9ce7796eb7e63 100644 (file)
@@ -10,6 +10,7 @@ import glob
 import os
 import subprocess
 import sys
 import os
 import subprocess
 import sys
+import shutil
 
 from waflib import Configure, Context, Logs, Node, Options, Task, Utils
 from waflib.TaskGen import feature, before, after
 
 from waflib import Configure, Context, Logs, Node, Options, Task, Utils
 from waflib.TaskGen import feature, before, after
@@ -82,15 +83,14 @@ def set_options(opt, debug_by_default=False):
     opt.add_option('--docs', action='store_true', default=False, dest='docs',
                    help="Build documentation - requires doxygen")
 
     opt.add_option('--docs', action='store_true', default=False, dest='docs',
                    help="Build documentation - requires doxygen")
 
-    # LV2 options
-    opt.add_option('--lv2-user', action='store_true', default=False, dest='lv2_user',
-                   help="Install LV2 bundles to user location")
-    opt.add_option('--lv2-system', action='store_true', default=False, dest='lv2_system',
-                   help="Install LV2 bundles to system location")
-    dirs_options.add_option('--lv2dir', type='string',
-                            help="LV2 bundles [Default: LIBDIR/lv2]")
     g_step = 1
 
     g_step = 1
 
+def copyfile (task):
+    # a cross-platform utility for copying files as part of tasks
+    src = task.inputs[0].abspath()
+    tgt = task.outputs[0].abspath()
+    shutil.copy2 (src, tgt)
+
 def check_header(conf, lang, name, define='', mandatory=True):
     "Check for a header"
     includes = '' # search default system include paths
 def check_header(conf, lang, name, define='', mandatory=True):
     "Check for a header"
     includes = '' # search default system include paths
@@ -165,6 +165,24 @@ def normpath(path):
     else:
         return os.path.normpath(path)
 
     else:
         return os.path.normpath(path)
 
+def ensure_visible_symbols(bld, visible):
+    if bld.env['MSVC_COMPILER']:
+        if visible:
+            print ('*** WARNING: MSVC does not allow symbols to be visible/exported by default while building ' + bld.name)
+        else:
+            pass
+    else:        
+        if not hasattr (bld,'cxxflags'):
+            bld.cxxflags = []
+        if not hasattr (bld,'cflags'):
+            bld.cflags = []
+        if visible:
+            bld.cxxflags += [ '-fvisibility=default' ]
+            bld.cflags += [ '-fvisibility=default' ]
+        else:
+            bld.cxxflags += [ '-fvisibility=hidden' ]
+            bld.cflags += [ '-fvisibility=hidden' ]
+
 def configure(conf):
     global g_step
     if g_step > 1:
 def configure(conf):
     global g_step
     if g_step > 1:
@@ -200,27 +218,6 @@ def configure(conf):
     config_dir('MANDIR',     opts.mandir,     os.path.join(conf.env['DATADIR'], 'man'))
     config_dir('DOCDIR',     opts.docdir,     os.path.join(conf.env['DATADIR'], 'doc'))
 
     config_dir('MANDIR',     opts.mandir,     os.path.join(conf.env['DATADIR'], 'man'))
     config_dir('DOCDIR',     opts.docdir,     os.path.join(conf.env['DATADIR'], 'doc'))
 
-    if Options.options.lv2dir:
-        conf.env['LV2DIR'] = Options.options.lv2dir
-    elif Options.options.lv2_user:
-        if sys.platform == "darwin":
-            conf.env['LV2DIR'] = os.path.join(os.getenv('HOME'), 'Library/Audio/Plug-Ins/LV2')
-        elif sys.platform == "win32":
-            conf.env['LV2DIR'] = os.path.join(os.getenv('APPDATA'), 'LV2')
-        else:
-            conf.env['LV2DIR'] = os.path.join(os.getenv('HOME'), '.lv2')
-    elif Options.options.lv2_system:
-        if sys.platform == "darwin":
-            conf.env['LV2DIR'] = '/Library/Audio/Plug-Ins/LV2'
-        elif sys.platform == "win32":
-            conf.env['LV2DIR'] = os.path.join(os.getenv('COMMONPROGRAMFILES'), 'LV2')
-        else:
-            conf.env['LV2DIR'] = os.path.join(conf.env['LIBDIR'], 'lv2')
-    else:
-        conf.env['LV2DIR'] = os.path.join(conf.env['LIBDIR'], 'lv2')
-
-    conf.env['LV2DIR'] = normpath(conf.env['LV2DIR'])
-
     if Options.options.docs:
         doxygen = conf.find_program('doxygen')
         if not doxygen:
     if Options.options.docs:
         doxygen = conf.find_program('doxygen')
         if not doxygen:
@@ -526,7 +523,7 @@ def build_dox(bld, name, version, srcdir, blddir, outdir=''):
                                                       excl='**/_*'))
 
 # Version code file generation
                                                       excl='**/_*'))
 
 # Version code file generation
-def build_version_files(header_path, source_path, domain, major, minor, micro):
+def build_version_files(header_path, source_path, domain, major, minor, micro, exportname, visheader):
     header_path = os.path.abspath(header_path)
     source_path = os.path.abspath(source_path)
     text  = "int " + domain + "_major_version = " + str(major) + ";\n"
     header_path = os.path.abspath(header_path)
     source_path = os.path.abspath(source_path)
     text  = "int " + domain + "_major_version = " + str(major) + ";\n"
@@ -542,10 +539,12 @@ def build_version_files(header_path, source_path, domain, major, minor, micro):
 
     text  = "#ifndef __" + domain + "_version_h__\n"
     text += "#define __" + domain + "_version_h__\n"
 
     text  = "#ifndef __" + domain + "_version_h__\n"
     text += "#define __" + domain + "_version_h__\n"
-    text += " extern const char* " + domain + "_revision;\n"
-    text += " extern int " + domain + "_major_version;\n"
-    text += " extern int " + domain + "_minor_version;\n"
-    text += " extern int " + domain + "_micro_version;\n"
+    if visheader != '':
+        text += "#include \"" + visheader + "\"\n"
+    text += exportname + " extern const char* " + domain + "_revision;\n"
+    text += exportname + " extern int " + domain + "_major_version;\n"
+    text += exportname + " extern int " + domain + "_minor_version;\n"
+    text += exportname + " extern int " + domain + "_micro_version;\n"
     text += "#endif /* __" + domain + "_version_h__ */\n"
     try:
         o = open(header_path, 'w')
     text += "#endif /* __" + domain + "_version_h__ */\n"
     try:
         o = open(header_path, 'w')
@@ -557,6 +556,7 @@ def build_version_files(header_path, source_path, domain, major, minor, micro):
 
     return None
 
 
     return None
 
+# Internationalization with gettext
 def build_i18n_pot(bld, srcdir, dir, name, sources, copyright_holder=None):
     Logs.info('Generating pot file from %s' % name)
     pot_file = '%s.pot' % name
 def build_i18n_pot(bld, srcdir, dir, name, sources, copyright_holder=None):
     Logs.info('Generating pot file from %s' % name)
     pot_file = '%s.pot' % name
@@ -718,85 +718,3 @@ def run_tests(ctx, appname, tests, desired_status=0, dirs=['src'], name='*'):
     else:
         Logs.pprint('RED', '** FAIL: %d %s.%s tests failed' % (failures, appname, name))
 
     else:
         Logs.pprint('RED', '** FAIL: %d %s.%s tests failed' % (failures, appname, name))
 
-def run_ldconfig(ctx):
-    if (ctx.cmd == 'install'
-        and not ctx.env['RAN_LDCONFIG']
-        and ctx.env['LIBDIR']
-        and not 'DESTDIR' in os.environ
-        and not Options.options.destdir):
-        try:
-            Logs.info("Waf: Running `/sbin/ldconfig %s'" % ctx.env['LIBDIR'])
-            subprocess.call(['/sbin/ldconfig', ctx.env['LIBDIR']])
-            ctx.env['RAN_LDCONFIG'] = True
-        except:
-            pass
-
-def write_news(name, in_files, out_file, top_entries=None, extra_entries=None):
-    import rdflib
-    import textwrap
-    from time import strftime, strptime
-
-    doap = rdflib.Namespace('http://usefulinc.com/ns/doap#')
-    dcs  = rdflib.Namespace('http://ontologi.es/doap-changeset#')
-    rdfs = rdflib.Namespace('http://www.w3.org/2000/01/rdf-schema#')
-    foaf = rdflib.Namespace('http://xmlns.com/foaf/0.1/')
-    rdf  = rdflib.Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#')
-    m    = rdflib.ConjunctiveGraph()
-
-    try:
-        for i in in_files:
-            m.parse(i, format='n3')
-    except:
-        Logs.warn('Error parsing data, unable to generate NEWS')
-        return
-
-    proj = m.value(None, rdf.type, doap.Project)
-    for f in m.triples([proj, rdfs.seeAlso, None]):
-        if f[2].endswith('.ttl'):
-            m.parse(f[2], format='n3')
-
-    entries = {}
-    for r in m.triples([proj, doap.release, None]):
-        release   = r[2]
-        revision  = m.value(release, doap.revision, None)
-        date      = m.value(release, doap.created, None)
-        blamee    = m.value(release, dcs.blame, None)
-        changeset = m.value(release, dcs.changeset, None)
-        dist      = m.value(release, doap['file-release'], None)
-
-        if revision and date and blamee and changeset:
-            entry = '%s (%s) stable;\n' % (name, revision)
-
-            for i in m.triples([changeset, dcs.item, None]):
-                item = textwrap.wrap(m.value(i[2], rdfs.label, None), width=79)
-                entry += '\n  * ' + '\n    '.join(item)
-                if dist and top_entries is not None:
-                    if not str(dist) in top_entries:
-                        top_entries[str(dist)] = []
-                    top_entries[str(dist)] += [
-                        '%s: %s' % (name, '\n    '.join(item))]
-
-            if extra_entries:
-                for i in extra_entries[str(dist)]:
-                    entry += '\n  * ' + i
-
-            entry += '\n\n --'
-
-            blamee_name = m.value(blamee, foaf.name, None)
-            blamee_mbox = m.value(blamee, foaf.mbox, None)
-            if blamee_name and blamee_mbox:
-                entry += ' %s <%s>' % (blamee_name,
-                                       blamee_mbox.replace('mailto:', ''))
-                
-            entry += '  %s\n\n' % (
-                strftime('%a, %d %b %Y %H:%M:%S +0000', strptime(date, '%Y-%m-%d')))
-
-            entries[revision] = entry
-        else:
-            Logs.warn('Ignored incomplete %s release description' % name)
-
-    if len(entries) > 0:
-        news = open(out_file, 'w')
-        for e in sorted(entries.keys(), reverse=True):
-            news.write(entries[e])
-        news.close()