add ilib_language to retrieve compiler capabilities
[scilab.git] / scilab / modules / dynamic_link / includes / dynamiclibrary_others.h
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2007-2008 - INRIA - Allan CORNET
4  * Copyright (C) 2007-2008 - INRIA - Sylvestre LEDRU
5  *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  */
16 #ifndef __DYNAMICLIBRARY_OTHERS_H__
17 #define __DYNAMICLIBRARY_OTHERS_H__
18 #if defined(__GNUC__) // guard against mis-compilation
19
20 #include <dlfcn.h>
21 #include <wchar.h>
22 #include "BOOL.h" /* BOOL */
23
24 typedef void * DynLibHandle;
25 typedef void * DynLibFuncPtr;
26
27 /**
28 * Maps the specified executable module into the address space of the calling process
29 * @param name of dynamic library
30 * @return Handle to the loaded library
31 */
32 #define LoadDynLibrary(libname) (DynLibHandle) dlopen(libname,  RTLD_NOW | RTLD_GLOBAL);
33
34 /**
35 * Decrements the reference count of the loaded dynamic-link library
36 * @param Handle to the loaded library
37 * @return BOOL If the function succeeds, the return value is nonzero
38 */
39 BOOL FreeDynLibrary(DynLibHandle hInstance);
40
41 /**
42 * Retrieves the address of an exported function
43 * @param Handle to the loaded library
44 * @param string that specifies the function
45 * @return a pointer
46 */
47 DynLibFuncPtr GetDynLibFuncPtr(DynLibHandle hInstance, const char *funcName);
48
49 /**
50 * return last dynamic linking error
51 * @return a string
52 */
53 #define GetLastDynLibError() dlerror()
54
55
56 typedef int(*PROC_GATEWAY) (void);
57
58 typedef enum
59 {
60     DYN_GW_NO_ERROR = 0,
61     DYN_GW_LOAD_LIBRARY_ERROR = 1,
62     DYN_GW_PTR_FUNCTION_ERROR = 2,
63     DYN_GW_CALL_FUNCTION_ERROR = 3
64
65 } dynamic_gateway_error_code;
66
67 typedef enum
68 {
69     DYNLIB_NAME_FORMAT_AUTO = 0,
70     DYNLIB_NAME_FORMAT_1 = 1,
71     DYNLIB_NAME_FORMAT_2 = 2,
72     DYNLIB_NAME_FORMAT_3 = 3
73 } dynlib_name_format;
74
75 #define FORMATGATEWAYLIBNAME_1 L"%ls%ls"
76 #define FORMATGATEWAYLIBNAME_2 L"sci%ls%ls"
77 #define FORMATGATEWAYLIBNAME_3 L"libsci%ls%ls"
78
79 /**
80 * Build name of dynamic library based on module name
81 * @param[in] module name
82 * @param[in] generated dynamic lib name type
83 * @return name of dynamic library
84 */
85 wchar_t* buildModuleDynLibraryNameW(const wchar_t* _pwstModuleName, dynlib_name_format _iType);
86 char* buildModuleDynLibraryName(const char* _pstModuleName, dynlib_name_format _iType);
87
88 #endif /* __unix // guard against mis-compilation */
89 #endif /* __DYNAMICLIBRARY_OTHERS_H__ */