Στις 19/12/2018 14:03, ο Massimo Manghi έγραψε:
On 12/19/18 10:08 AM, Georgios Petasis wrote:

Dear Massimo,

I have committed an update to CMakeLists.txt (master branch), which:
1) After libs have been installed, writes a file "regenerate_pkgIndex.tcl", inside the installation directory.
2) Puts in the file:
"puts \"Regenerating pkgIndex.tcl in [pwd]:\"
file delete {*}[glob [file join packages * pkgIndex.tcl]] pkgIndex.tcl
pkg_mkIndex -verbose [pwd] init.tcl \\
       {*}[glob [file join packages * *.tcl] \\
       [file join ${RIVET_LIBS_ARCH} *[info sharedlibextension]]]"

librivetparser and librivetlib are created with the .so suffix on Windows too so this code would fail to put these libraries in pkgIndex (see my notes below anyway). We must keep the module named as mod_rivet.so because Apache itself expects this suffix but we can adopt the OS native suffix for any other binary library.

I guess this requires a similar procedure for the library suffix determination. I tried something like

execute_process(COMMAND ${shell_command}
            ERROR_VARIABLE EXEC_ERROR_VAR
            OUTPUT_VARIABLE LIB_SUFFIX
            OUTPUT_STRIP_TRAILING_WHITESPACE)


where shell_command to is

${TCL_TCLSH} inlinetcl.tcl puts [info sharedlibextension]

where inline.tcl simply is

eval $argv

it works from the command line, but execute_process returns empty output variables
Why we need to guess? Aren't all extensions being ".so" for all platforms?
In line 138 of CMakeLists.txt I see that I have put manually everything to .so.

So, I will simply put .so also in the script.

3) Executes the file with tclsh (it will break if tclsh is not found during configuration)
4) Deletes the file.

I have replaced "eval" with "{*}". Eval will break if paths contain spaces (very common in Windows). "{*}" will break in old tcl versions (I do not remember when it was introduced).

*I do not know what it should be put in RIVET_LIBS_ARCH*.


The way you defined RIVET_LIB_ARCH it points to the directory that keeps only the MPM bridges modules that must not go to pkgIndex as they are of no general usefulness. Their named is determined by this macro

#define RIVET_MPM_BRIDGE_COMPOSE(bridge)
RIVET_DIR,"/mpm/rivet_",bridge,"_mpm.so"

in RIVET_LIB_ARCH just remove the final 'mpm' and put the right suffix in the code fragment.
Ok.

George

I'm in favor to adopt the native suffix for external libraries too, as libraries such as librivet are of generic purpose and they can be used from the shell

-- Massimo

---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-dev-unsubscr...@tcl.apache.org
For additional commands, e-mail: rivet-dev-h...@tcl.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-dev-unsubscr...@tcl.apache.org
For additional commands, e-mail: rivet-dev-h...@tcl.apache.org

Reply via email to