xinstall glob question

Darren Weber dweber at macports.org
Thu Apr 30 16:35:32 PDT 2009


It seems that I should be able to replace most of the system calls as
follows (orig system call is commented here, with tcl replacements below):

#system "
#    cd ${build.dir};
#    find ${destroot}/${vtkExamplePath}/bin | grep -e '\[^(bin)\]\$' >
find.txt;
#    for f in `cat find.txt`; do
#        if \[ -f \${f} \] && \[ -x \${f} \]; then
#            echo install_name_tool changing link libs for \${f};
#            otool -L \${f} | grep 'libvtk' > otool_libs.txt;
#            for lib in `cat otool_libs.txt`; do
#                newlib=`echo \${lib} | sed
s#${build.dir}/bin#${prefix}/lib/${distname}#`;
#                install_name_tool -change \${lib} \${newlib} \${f};
#            done;
#            rm otool_libs.txt;
#        fi;
#    done;
#    rm find.txt;
#    "


foreach f [glob ${destroot}/${vtkExamplePath}/bin/*] {
    if { string equal [file extension ${f}] ".app" } {
        set exeName [file rootname [lindex [file split $f] end]]
        set f [format "%s/Contents/MacOS/%s" ${f} ${exeName}]
    }
    if { expr [file isfile ${f}] && [file executable ${f}] } {
        system "
            cd ${build.dir};
            otool -L \${f} | grep 'libvtk' > otool_libs.txt;
            for lib in `cat otool_libs.txt`; do
                newlib=`echo \${lib} | sed
s#${build.dir}/bin#${prefix}/lib/${distname}#`;
                install_name_tool -change \${lib} \${newlib} \${f};
            done;
            rm otool_libs.txt;
            "
    }
}



There is some problem with the tcl equivalent.  While it appears to work in
tclsh, it doesn't work in the Portfile.  Any ideas?

Thanks in advance,
Darren





On Thu, Apr 30, 2009 at 3:24 PM, Ryan Schmidt <ryandesign at macports.org>wrote:

> On Apr 30, 2009, at 17:18, Darren Weber wrote:
>
>  Please take a look at this mess to reset RPATH for all libs in a set of
>> binaries:
>>
>> system "
>>    cd ${build.dir};
>>    find ${destroot}/${vtkExamplePath}/bin | grep -e '\[^(bin)\]\$' >
>> find.txt;
>>    for f in `cat find.txt`; do
>>        if \[ -f \${f} \] && \[ -x \${f} \]; then
>>            echo install_name_tool changing link libs for \${f};
>>            otool -L \${f} | grep 'libvtk' > otool_libs.txt;
>>            for lib in `cat otool_libs.txt`; do
>>                newlib=`echo \${lib} | sed
>> s#${build.dir}/bin#${prefix}/lib/${distname}#`;
>>                install_name_tool -change \${lib} \${newlib} \${f};
>>            done;
>>            rm otool_libs.txt;
>>        fi;
>>    done;
>>    rm find.txt;
>>    "
>>
>> It works, but can it be done more efficiently?
>>
>> Can you do file tests in tcl, like the bash tests [ -f $f ] && [ -x $f ] ?
>>
>
> Sure, those are respectively "file isfile" and "file executable". Take a
> look at the manual for the file command:
>
> http://wiki.tcl.tk/1041
>
>
>  PS, Don't ask me why it's required ;-)
>>
>
> I'm scared to...
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-dev/attachments/20090430/a1a28fd0/attachment-0001.html>


More information about the macports-dev mailing list