%module{Slic3r::XS};
%package{Slic3r::XS};

#include <xsinit.h>
#include "Utils.hpp"

%{

%}

%package{Slic3r};
%{

SV*
VERSION()
    CODE:
        RETVAL = newSVpv(SLIC3R_VERSION, 0);
    OUTPUT: RETVAL

SV*
BUILD()
    CODE:
        RETVAL = newSVpv(SLIC3R_BUILD, 0);
    OUTPUT: RETVAL

SV*
DEBUG_OUT_PATH_PREFIX()
    CODE:
        RETVAL = newSVpv(SLIC3R_DEBUG_OUT_PATH_PREFIX, 0);
    OUTPUT: RETVAL

SV*
FORK_NAME()
    CODE:
        RETVAL = newSVpv(SLIC3R_FORK_NAME, 0);
    OUTPUT: RETVAL

void
set_logging_level(level)
    unsigned int level;
    CODE:
        Slic3r::set_logging_level(level);

void
trace(level, message)
    unsigned int level;
    char        *message;
    CODE:
        Slic3r::trace(level, message);

void
xspp_test_croak_hangs_on_strawberry()
    CODE:
    	try {
    		throw 1;
    	} catch (...) {
    		croak("xspp_test_croak_hangs_on_strawberry: exception catched\n");
    	}
%}