Search code examples
enumsvala

Vala error "unknown type name" using enum from camel


I am writing this code in Vala, using Camel

using Camel;
[...]
MimeParser par = new MimeParser();
[...]
par.push_state( MimeParserState.MULTIPART, boundary );

I downloaded the camel-1.2.vapi from github vala-girs (this link), put it in a vapi subdirectory and compiled with

valac --vapidir=vapi --includedir=/usr/include/evolution-data-server/camel --pkg camel-1.2 --pkg posix --target-glib=2.32 -o prog prog.vala -X -lcamel-1.2

Compiling I get this error:

error: unknown type name "CamelMimeParserState"
 const gchar* camel_mime_parser_state_to_string (CamelMimeParserState self);

Looking the C output code I see that the CamelMimeParserState type is used several times but it is never defined. It should be a simple enum because the camel-1.2.vapi file says:

[CCode (cheader_filename = "camel/camel.h", cprefix = "CAMEL_MIME_PARSER_STATE_", has_type_id = false)]
public enum MimeParserState {
            INITIAL,
            PRE_FROM,
            FROM,
            HEADER,
            BODY,
            MULTIPART,
            MESSAGE,
            PART,
            END,
            EOF,
            PRE_FROM_END,
            FROM_END,
            HEADER_END,
            BODY_END,
            MULTIPART_END,
            MESSAGE_END
    }

So why doesn't the C output code simply use an enum as the vapi file says (described by cprefix CAMEL_MIME_PARSER_STATE_)?

Is there an error in the .vapi file?


Solution

  • I found the solution. The vapi file is wrong because the cname field is missing. Changing the vapi file adding this cname="camel_mime_parser_state_t":

    [CCode (cheader_filename = "camel/camel.h", cname="camel_mime_parser_state_t", cprefix = "CAMEL_MIME_PARSER_STATE_", has_type_id = false)]
    public enum MimeParserState {
        INITIAL,
        [...]
    

    works correctly.