summaryrefslogtreecommitdiff
path: root/scripts/generate_init_static_plugins.py
blob: 15725d8dc28bea6cf36db684492c2c17c138d64f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/env python3

import argparse
import os
from string import Template

TEMPLATE = Template('''
#include <gst/gst.h>

$plugins_declaration

void
gst_init_static_plugins (void)
{
  static gsize initialization_value = 0;
  if (g_once_init_enter (&initialization_value)) {
    $plugins_registration
    g_once_init_leave (&initialization_value, 1);
  }
}
''')

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument(dest="output", help="Output file")
    parser.add_argument(dest="plugins", help="The list of plugins")

    options = parser.parse_args()

    names = set()
    for plugin in options.plugins.split(os.pathsep):
        filename = os.path.basename(plugin)
        if filename.startswith('libgst') and filename.endswith('.a'):
            names.add(filename[len('libgst'):-len('.a')])

    registration = ['GST_PLUGIN_STATIC_REGISTER(%s);' % name for name in names]
    declaration = ['GST_PLUGIN_STATIC_DECLARE(%s);' % name for name in names]

    with open(options.output, "w") as f:
        f.write(TEMPLATE.substitute({
            'plugins_declaration': '\n'.join(declaration),
            'plugins_registration': '\n  '.join(registration),
            }))