aboutsummaryrefslogtreecommitdiffstats
path: root/stubdom/caml/main-caml.c
blob: dd55aca38f7a21a26a721857b80e039dd749d155 (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
/*
 * Caml bootstrap
 *
 * Samuel Thibault <Samuel.Thibault@eu.citrix.net>, January 2008
 */

#include <stdio.h>
#include <errno.h>

#include <caml/mlvalues.h>
#include <caml/callback.h>
#include <unistd.h>

/* Ugly binary compatibility with Linux */
FILE *_stderr asm("stderr");
int *__errno_location;
/* Will probably break everything, probably need to fetch from glibc */
void *__ctype_b_loc;

int main(int argc, char *argv[], char *envp[])
{
    value *val;

    /* Get current thread's value */
    _stderr = stderr;
    __errno_location = &errno;

    printf("starting caml\n");

    /* Wait before things might hang up */
    sleep(1);

    caml_startup(argv);
    val = caml_named_value("main");
    if (!val) {
        printf("Couldn't find Caml main");
        return 1;
    }
    caml_callback(*val, Val_int(0));
    printf("callback returned\n");
    return 0;
}