Skip to content

Commit c3e5264

Browse files
GillesDuvertGiloo
andauthored
DLM support, without proprietary file (idl_export.h) (#2053)
Co-authored-by: Giloo <gildas@localhost>
1 parent b3dee3b commit c3e5264

File tree

7 files changed

+1937
-4655
lines changed

7 files changed

+1937
-4655
lines changed

src/CMakeLists.txt

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ if(PYTHON_MODULE) #GDL.so
231231
SET_TARGET_PROPERTIES(gdl PROPERTIES NO_SONAME TRUE)
232232
SET_TARGET_PROPERTIES(gdl PROPERTIES SUFFIX ".so") # e.g. Mac defaults to .dylib which is not looked for by Python
233233
else(PYTHON_MODULE) #GDL.so
234+
#permit gdl (exe) to export its symbols, necessary for linkimage and DLM
235+
set (CMAKE_SHARED_LIBRARY_ENABLE_EXPORTS true)
234236
set(SOURCES ${SOURCES} gdl.cpp)
235237
add_executable(gdl ${SOURCES})
236238
endif(PYTHON_MODULE)
@@ -277,17 +279,17 @@ else(PYTHON_MODULE)
277279
set_target_properties(gdl PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE)
278280
endif(PYTHON_MODULE)
279281

280-
#permit gdl.exe to export its symbols, necessary for linkimage and DLM
281-
if (NOT APPLE AND NOT OSX AND NOT MINGW)
282-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--export-dynamic")
283-
endif()
284-
if (APPLE OR OSX )
285-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fvisibility=protected") #-exported_symbols_list ${EXPORTED_SYMBOLS_LIST}")
286-
endif()
287-
if (MINGW )
288-
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--export-all-symbols")
289-
endif()
290-
282+
### replaced by use of CMAKE_SHARED_LIBRARY_ENABLE_EXPORTS above
283+
### if (NOT APPLE AND NOT OSX AND NOT MINGW)
284+
### set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--export-dynamic")
285+
### endif()
286+
### if (APPLE OR OSX )
287+
### set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fvisibility=protected") #-exported_symbols_list ${EXPORTED_SYMBOLS_LIST}")
288+
### endif()
289+
### if (MINGW )
290+
### #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--export-all-symbols")
291+
### endif()
292+
###
291293
install(DIRECTORY ${CMAKE_SOURCE_DIR}/src/pro/ DESTINATION ${CMAKE_INSTALL_PREFIX}/${GDL_DATA_DIR}/lib
292294
PATTERN CVS EXCLUDE
293295
PATTERN checks EXCLUDE

src/basic_pro_jmg.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ static SizeT increment=33; //why not?
4545

4646
BaseGDL* CallDllFunc(EnvT* e) {
4747
void* address = static_cast<DLibPro*> (e->GetPro())->GetDllEntry();
48-
IDL_SYSRTN_FUN calldllfunc = (IDL_SYSRTN_FUN) address;
48+
EXPORT_SYSRTN_FUN calldllfunc = (EXPORT_SYSRTN_FUN) address;
4949
int argc = e->NParam();
50-
IDL_VPTR argv[argc];
50+
EXPORT_VPTR argv[argc];
5151
for (auto i = 0; i < argc; ++i) {
5252
// tells if input parameter is temporary (expression)
5353
bool tempo = (e->GetString(i).find('>') != std::string::npos);
@@ -74,42 +74,42 @@ static SizeT increment=33; //why not?
7474
//pass the variable anyway using GetRefExtraList
7575
BaseGDL* gvar = e->GetRefExtraList((*refextra)[i]);
7676
kws[i].varptr = gvar;
77-
if (gvar == NULL) kws[i].type = IDL_TYP_UNDEF;
77+
if (gvar == NULL) kws[i].type = GDL_TYP_UNDEF;
7878
} else {
7979
kws[i].readonly = 0;
8080
kws[i].varptr = *gvarp;
81-
if (*gvarp == NULL) kws[i].type = IDL_TYP_UNDEF;
81+
if (*gvarp == NULL) kws[i].type = GDL_TYP_UNDEF;
8282
}
8383
}
8484
}
8585
passed.npassed = nkw;
8686
passed.passed = kws;
8787
argk = (char*) (&passed);
8888
}
89-
IDL_VPTR ret = calldllfunc(argc, argv, argk);
89+
EXPORT_VPTR ret = calldllfunc(argc, argv, argk);
9090
//check if some argk keywords have been returned too. A real variable must be associated to be replaced in return
9191
for (auto i = 0; i < nkw; ++i) {
9292
if (kws[i].out != NULL) {
9393
BaseGDL** gvarp = e->GetRefExtraListPtr((*refextra)[i]); //Ptr as the variable may not exist
9494
if (gvarp) { //replace parameter's value
9595
GDLDelete(*gvarp);
96-
*gvarp = (BaseGDL*) VPTR_ToGDL((IDL_VPTR) (kws[i].out));
96+
*gvarp = (BaseGDL*) VPTR_ToGDL((EXPORT_VPTR) (kws[i].out));
9797
} else {
9898
e->Throw("Unexpected error, variable not existing. Please report.");
9999
}
100100
}
101101
}
102-
if (ret->type == IDL_TYP_UNDEF) e->Throw("Variable is undefined: <UNDEFINED>.");
102+
if (ret->type == GDL_TYP_UNDEF) e->Throw("Variable is undefined: <UNDEFINED>.");
103103
BaseGDL* back=VPTR_ToGDL(ret, true); //protect data
104104
GDL_FreeResources() ;
105105
return back;
106106
}
107107

108108
void CallDllPro(EnvT* e) {
109109
void* address = static_cast<DLibPro*> (e->GetPro())->GetDllEntry();
110-
IDL_SYSRTN_PRO calldllpro = (IDL_SYSRTN_PRO) address;
110+
EXPORT_SYSRTN_PRO calldllpro = (EXPORT_SYSRTN_PRO) address;
111111
int argc = e->NParam();
112-
IDL_VPTR argv[argc];
112+
EXPORT_VPTR argv[argc];
113113
for (auto i = 0; i < argc; ++i) {
114114
// tells if input parameter is temporary (expression)
115115
bool tempo = (e->GetString(i).find('>') != std::string::npos);
@@ -136,11 +136,11 @@ static SizeT increment=33; //why not?
136136
//pass the variable anyway using GetRefExtraList
137137
BaseGDL* gvar = e->GetRefExtraList((*refextra)[i]);
138138
kws[i].varptr = gvar;
139-
if (gvar == NULL) kws[i].type = IDL_TYP_UNDEF;
139+
if (gvar == NULL) kws[i].type = GDL_TYP_UNDEF;
140140
} else {
141141
kws[i].readonly = 0;
142142
kws[i].varptr = *gvarp;
143-
if (*gvarp == NULL) kws[i].type = IDL_TYP_UNDEF;
143+
if (*gvarp == NULL) kws[i].type = GDL_TYP_UNDEF;
144144
}
145145
}
146146
}
@@ -155,7 +155,7 @@ static SizeT increment=33; //why not?
155155
BaseGDL** gvarp = e->GetRefExtraListPtr((*refextra)[i]); //Ptr as the variable may not exist
156156
if (gvarp) {
157157
GDLDelete(*gvarp);
158-
*gvarp = (BaseGDL*) VPTR_ToGDL((IDL_VPTR) (kws[i].out));
158+
*gvarp = (BaseGDL*) VPTR_ToGDL((EXPORT_VPTR) (kws[i].out));
159159
} else {
160160
e->Throw("Unexpected error, variable not existing. Please report.");
161161
}
@@ -604,8 +604,8 @@ void CleanupProc( DLibPro* proc ) {
604604
static bool IdlStaticsUninitialized=true;
605605
if (IdlStaticsUninitialized) {
606606
IdlStaticsUninitialized=false;
607-
//set up values for some IDL_XXX info structures
608-
//IDL_SysvVersion:
607+
//set up values for some EXPORT_XXX info structures
608+
//EXPORT_SysvVersion:
609609
DStructGDL* version = SysVar::Version();
610610
static unsigned releaseTag = version->Desc()->TagIndex( "RELEASE");
611611
static unsigned osTag = version->Desc()->TagIndex("OS");

0 commit comments

Comments
 (0)