X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=bindings%2Fcxx%2Fenums.py;h=3711334e74f740135a94f58ef70e78e7a8570268;hb=35334baa90dd7c68862ec25b58db0701a5802245;hp=bfc06b5945fabbc0fd56f9b4931a665211823152;hpb=b8721d7cf0ee95c51fb6a3d357f371b314b5aeab;p=libsigrok.git diff --git a/bindings/cxx/enums.py b/bindings/cxx/enums.py index bfc06b59..3711334e 100644 --- a/bindings/cxx/enums.py +++ b/bindings/cxx/enums.py @@ -27,9 +27,11 @@ index_file = sys.argv[1] # Get directory this script is in. dirname = os.path.dirname(os.path.realpath(__file__)) -outdirname = "bindings/cxx" -if not os.path.exists(os.path.join(outdirname, 'include/libsigrok')): - os.makedirs(os.path.join(outdirname, 'include/libsigrok')) +outdirname = "bindings" +if not os.path.exists(os.path.join(outdirname, 'cxx/include/libsigrokcxx')): + os.makedirs(os.path.join(outdirname, 'cxx/include/libsigrokcxx')) +if not os.path.exists(os.path.join(outdirname, 'swig')): + os.makedirs(os.path.join(outdirname, 'swig')) mapping = dict([ ('sr_loglevel', ('LogLevel', 'Log verbosity level')), @@ -38,9 +40,11 @@ mapping = dict([ ('sr_unit', ('Unit', 'Unit of measurement')), ('sr_mqflag', ('QuantityFlag', 'Flag applied to measured quantity')), ('sr_configkey', ('ConfigKey', 'Configuration key')), + ('sr_configcap', ('Capability', 'Configuration capability')), ('sr_datatype', ('DataType', 'Configuration data type')), ('sr_channeltype', ('ChannelType', 'Channel type')), - ('sr_trigger_matches', ('TriggerMatchType', 'Trigger match type'))]) + ('sr_trigger_matches', ('TriggerMatchType', 'Trigger match type')), + ('sr_output_flag', ('OutputFlag', 'Flag applied to output modules'))]) index = ElementTree.parse(index_file) @@ -65,15 +69,19 @@ for compound in index.findall('compound'): if name in mapping: classes[member] = mapping[name] -header = open(os.path.join(outdirname, 'include/libsigrok/enums.hpp'), 'w') -code = open(os.path.join(outdirname, 'enums.cpp'), 'w') -swig = open(os.path.join(dirname, '../swig/enums.i'), 'w') +header = open(os.path.join(outdirname, 'cxx/include/libsigrokcxx/enums.hpp'), 'w') +code = open(os.path.join(outdirname, 'cxx/enums.cpp'), 'w') +swig = open(os.path.join(outdirname, 'swig/enums.i'), 'w') for file in (header, code): print("/* Generated file - edit enums.py instead! */", file=file) +print("namespace sigrok {", file=header) + # Template for beginning of class declaration and public members. header_public_template = """ +template<> const SR_API std::map EnumValue<{classname}, enum {enumname}>::_values; + /** {brief} */ class SR_API {classname} : public EnumValue<{classname}, enum {enumname}> {{ @@ -138,7 +146,7 @@ for enum, (classname, classbrief) in classes.items(): file=code) # Define map of enum values to constants - print('template<> const std::map EnumValue<%s, enum %s>::_values = {' % ( + print('template<> const SR_API std::map EnumValue<%s, enum %s>::_values = {' % ( enum_name, classname, classname, enum_name), file=code) for name, trimmed_name in zip(member_names, trimmed_names): print('\t{%s, %s::%s},' % (name, classname, trimmed_name), file=code) @@ -165,3 +173,5 @@ for enum, (classname, classbrief) in classes.items(): filename = os.path.join(dirname, "%s_methods.i" % classname) if os.path.exists(filename): print(str.join('', open(filename).readlines()), file=swig) + +print("}", file=header)