Script para Linux: Buscar funciones en módulos

Started by grisendo, May 30, 2010, 10:04:39 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

grisendo

No sé si lo había hecho alguien antes, pero aquí va el código. Licencia... LGPL por ejemplo:

[code language="bash"]
#!/bin/bash

cd /usr/lib32/bgd/module
FILES="*.so"
for f in $FILES; do
    DATA=`moddesc $f | grep $1 -i`
    RESULT=`echo $?`
    if [ $RESULT -eq 0 ]; then
        echo "=========================================================="
        echo "    FILE: "$f
        echo "----------------------------------------------------------"
        moddesc $f | grep $1 -i
        echo "=========================================================="
    fi
done
[/code]

Se guarda esto en un fichero de texto (por ejemplo "modfind") se le da permisos de ejecución y se guarda en una carpeta que esté en el "path"

Situación de uso: Típico "storyboard" de un novato (y no tan novato) y/o despistado:

  • Hacemos un jueguecillo desde cero
  • Compilamos
  • Mierda!! Dice que la función load_png no existe!!! En qué librería estará?
  • Ejecutamos en consola "modfind load_png"

Resultado:
================================
    FILE: mod_map.so
----------------------------------------------------------
INT LOAD_PNG(STRING)
================================

SplinterGU

gracias, no habia algo asi, si habia uno que te armaba la lista de todo lo que exporta en un unico archivo, pero no para buscar.

te doy un karma
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

grisendo

¿Sería complicado añadir algo así al bgdc? Que ante un error de ese tipo comprobase si algún módulo no incluido (de los que sean visibles en el PATH que tengas definido) lo tiene, y mostrar cuál/cuáles.

osk

La última llamada a moddesc del script se podría sustituir por un simple "echo $DATA", no?

grisendo

En teoría tenía entendido que sí, pero a mí por lo menos si hago "echo $DATA" no me aparecen saltos de línea tal y como los devuelve el comando (no sé por qué!!), por eso vuelvo a ejecutarlo para que se vea por pantalla.

grisendo

Lo encontré!! Si se hace echo $DATA, la cosa pinta mal como había dicho, pero si se hace echo "$DATA" ya respeta los saltos de línea ??? nunca llegaré a comprender del todo bash, sh y similares.

[code language="bash"]
#!/bin/bash
cd /usr/lib32/bgd/module
FILES="*.so"
for f in $FILES; do
   DATA=`moddesc $f | grep $1 -i`
   RESULT=`echo $?`
   if [ $RESULT -eq 0 ]; then
       echo "=========================================================="
       echo "    FILE: "$f
       echo "----------------------------------------------------------"
       echo "$DATA"
       echo "=========================================================="
   fi
done
[/code]

Windgate

Quote from: grisendo on May 31, 2010, 02:34:56 PM
¿Sería complicado añadir algo así al bgdc? Que ante un error de ese tipo comprobase si algún módulo no incluido (de los que sean visibles en el PATH que tengas definido) lo tiene, y mostrar cuál/cuáles.

Bienvenido sería ;)

Te doy un karma por todas esas cosas tan extrañas que haces para Bennu Grisen :D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es