// argument is the usr/lib directory where libjulia is, or NULL to guess. // if that doesn't work, try the full path to the "lib" directory that // contains lib/julia/sys.ji DLLEXPORT void jl_init(char *julia_home_dir) { libsupport_init(); char *image_file = jl_locate_sysimg(julia_home_dir); julia_init(image_file); jl_set_const(jl_core_module, jl_symbol("JULIA_HOME"), jl_cstr_to_string(julia_home)); jl_module_export(jl_core_module, jl_symbol("JULIA_HOME")); }
// argument is the usr/lib directory where libjulia is, or NULL to guess. // if that doesn't work, try the full path to the "lib" directory that // contains lib/julia/sys.ji DLLEXPORT void jl_init(char *julia_home_dir) { libsupport_init(); char *image_file = jl_locate_sysimg(julia_home_dir); julia_init(image_file); jl_set_const(jl_core_module, jl_symbol("JULIA_HOME"), jl_cstr_to_string(julia_home)); jl_module_export(jl_core_module, jl_symbol("JULIA_HOME")); jl_eval_string("Base.reinit_stdio()"); jl_eval_string("Base.librandom_init()"); jl_eval_string("Base.init_sched()"); jl_eval_string("Base.init_head_sched()"); jl_eval_string("Base.init_load_path()"); }
// argument is the usr/lib directory where libjulia is, or NULL to guess. // if that doesn't work, try the full path to the "lib" directory that // contains lib/julia/sys.ji DLLEXPORT void jl_init(char *julia_home_dir) { if (jl_is_initialized()) return; libsupport_init(); char *image_file = jl_locate_sysimg(julia_home_dir, JL_SYSTEM_IMAGE_PATH); julia_init(image_file); jl_set_const(jl_core_module, jl_symbol("JULIA_HOME"), jl_cstr_to_string(julia_home)); jl_module_export(jl_core_module, jl_symbol("JULIA_HOME")); jl_eval_string("Base.reinit_stdio()"); jl_eval_string("Base.Random.librandom_init()"); jl_eval_string("Base.init_sched()"); jl_eval_string("Base.init_head_sched()"); jl_eval_string("Base.init_load_path()"); }
// First argument is the usr/lib directory where libjulia is, or NULL to guess. // if that doesn't work, try the full path to the "lib" directory that // contains lib/julia/sys.ji // Second argument is the path of a system image file (*.ji) relative to the // first argument path, or relative to the default julia home dir. The default // is something like ../lib/julia/sys.ji DLLEXPORT void jl_init_with_image(char *julia_home_dir, char *image_relative_path) { if (jl_is_initialized()) return; libsupport_init(); if (image_relative_path == NULL) image_relative_path = JL_SYSTEM_IMAGE_PATH; char *image_file = jl_locate_sysimg(julia_home_dir, image_relative_path); julia_init(image_file); jl_set_const(jl_core_module, jl_symbol("JULIA_HOME"), jl_cstr_to_string(julia_home)); jl_module_export(jl_core_module, jl_symbol("JULIA_HOME")); jl_eval_string("Base.early_init()"); jl_eval_string("Base.init_head_sched()"); jl_eval_string("Base.init_load_path()"); jl_exception_clear(); }
//-| mode=="rcqls" is for rcqls development, mode="tty" is for initialization of STDOUT, STDERR with C API) //-| other value of mode mean standard jlapi.c DLLEXPORT void jlapi_init(char *julia_home_dir, char* mode) { libsupport_init(); char *image_file = jl_locate_sysimg(julia_home_dir); printf("image-file=%s\n",image_file); julia_init(image_file); jlapi_mode=mode; jl_set_const(jl_core_module, jl_symbol("JULIA_HOME"), jl_cstr_to_string(julia_home)); jl_module_export(jl_core_module, jl_symbol("JULIA_HOME")); //-| This avoid LD_PRELOAD on linux since shared objects not exported //-| Maybe fix this in a better way with options compilation. char julia_api_libname[512]; #if defined(_OS_WINDOWS_) const char *shlib_ext=".dll"; const char *sep="\\"; #elif defined(__APPLE__) const char *shlib_ext=".dylib"; const char *sep="/"; #else const char *shlib_ext=".so"; const char *sep="/"; #endif snprintf(julia_api_libname, sizeof(julia_api_libname), "%s%s%s%s%s%s", julia_home_dir, sep,"julia",sep,"libjulia-api",shlib_ext); load_library_permanently(julia_api_libname); if(strcmp(mode,"rcqls")<=0) { // cqls, rcqls //-| Called first to fix the DL_LOAD_PATH needed to (dl)open library (libpcre for example) //-| Replacement of Base.init_load_path() //-| Update 01/08/2013: No need to set DL_LOAD_PATH, just push //-| jl_set_global(jl_base_module,jl_symbol("DL_LOAD_PATH"),jl_eval_string("ByteString[join([JULIA_HOME,\"..\",\"lib\",\"julia\"],Base.path_separator)]")); jl_eval_string("Base.push!(DL_LOAD_PATH,join([JULIA_HOME,\"..\",\"lib\",\"julia\"],Base.path_separator))"); //-| DL_LOAD_PATH is a global constant already defined before and then not overloaded by julia //-| Only LOAD_PATH would be initialized (needs libpcre because of abspath)! jl_eval_string("vers = \"v$(VERSION.major).$(VERSION.minor)\""); jl_set_global(jl_base_module,jl_symbol("LOAD_PATH"),jl_eval_string("ByteString[abspath(JULIA_HOME,\"..\",\"local\",\"share\",\"julia\",\"site\",vers),abspath(JULIA_HOME,\"..\",\"share\",\"julia\",\"site\",vers)]")); } else jl_eval_string("Base.init_load_path()"); if(strcmp(mode,"tty")==0) { jl_eval_string("Base.reinit_stdio()"); jl_set_global(jl_base_module,jl_symbol("STDIN"),jl_eval_string("Base.init_stdio(ccall(:jl_stdin_stream ,Ptr{Void},()),0)")); //-| 2 next lines fails even it is if no more necessary //-| Update 27/07/13: no more crash but stuck when print. jl_set_global(jl_base_module,jl_symbol("STDOUT"),jl_eval_string("Base.init_stdio(ccall(:jl_stdout_stream,Ptr{Void},()),1)")); jl_set_global(jl_base_module,jl_symbol("STDERR"),jl_eval_string("Base.init_stdio(ccall(:jl_stderr_stream,Ptr{Void},()),2)")); } else if(strcmp(mode,"rcqls")<=0) { //cqls, rcqls jl_eval_string("Base.reinit_stdio()"); //-| STDIN, STDOUT and STDERR not properly loaded //-| I prefer redirection of STDOUT and STDERR in IOBuffer (maybe STDIN ???) jl_set_global(jl_base_module,jl_symbol("STDIN"),jl_eval_string("Base.init_stdio(ccall(:jl_stdin_stream ,Ptr{Void},()),0)")); //jl_set_global(jl_base_module,jl_symbol("STDIN"),jl_eval_string("IOBuffer()")); jl_set_global(jl_base_module,jl_symbol("STDOUT"),jl_eval_string("IOBuffer()")); jl_set_global(jl_base_module,jl_symbol("STDERR"),jl_eval_string("IOBuffer()")); } else jl_eval_string("Base.reinit_stdio()"); jl_eval_string("Base.fdwatcher_reinit()"); jl_eval_string("Base.Random.librandom_init()"); jl_eval_string("Base.check_blas()"); jl_eval_string("LinAlg.init()"); jl_eval_string("Sys.init()"); jl_eval_string("Base.init_sched()"); jl_eval_string("Base.init_head_sched()"); jl_eval_string("Base.try_include(abspath(ENV[\"HOME\"],\".juliarc.jl\"))"); if(strcmp(mode,"rcqls")==0) { jl_eval_string("println(\"Julia initialized!\")"); jlapi_print_stdout(); } }