gst-full: Prevent multiple calls to gst_init_static_plugins()
[platform/upstream/gstreamer.git] / scripts / generate_init_static_plugins.py
1 #!/usr/bin/env python3
2
3 import argparse
4 import os
5 from string import Template
6
7 TEMPLATE = Template('''
8 #include <gst/gst.h>
9
10 $plugins_declaration
11
12 void
13 gst_init_static_plugins (void)
14 {
15   static gsize initialization_value = 0;
16   if (g_once_init_enter (&initialization_value)) {
17     $plugins_registration
18     g_once_init_leave (&initialization_value, 1);
19   }
20 }
21 ''')
22
23 if __name__ == "__main__":
24     parser = argparse.ArgumentParser()
25     parser.add_argument(dest="output", help="Output file")
26     parser.add_argument(dest="plugins", help="The list of plugins")
27
28     options = parser.parse_args()
29
30     names = set()
31     for plugin in options.plugins.split(os.pathsep):
32         filename = os.path.basename(plugin)
33         if filename.startswith('libgst') and filename.endswith('.a'):
34             names.add(filename[len('libgst'):-len('.a')])
35
36     registration = ['GST_PLUGIN_STATIC_REGISTER(%s);' % name for name in names]
37     declaration = ['GST_PLUGIN_STATIC_DECLARE(%s);' % name for name in names]
38
39     with open(options.output, "w") as f:
40         f.write(TEMPLATE.substitute({
41             'plugins_declaration': '\n'.join(declaration),
42             'plugins_registration': '\n  '.join(registration),
43             }))