Duda con Makefile [Solucionado]

Iniciado por leogtz, 7 Agosto 2011, 10:24 AM

0 Miembros y 1 Visitante están viendo este tema.

leogtz

Estoy creando un Makefile, bueno, ya está todo hecho, funciona y todo, pero tengo un problema, necesito copiar un script a /usr/local/bin, por lo que necesita permisos para ejecutarse, ya saben:

su -
make install

Pero necesito que se copie al usuario actual, cuando hago:
sudo make install
se hace el proceso pero para root, no para el usuario actual...

Saludos, y gracias de antemano.

EDITO:

He pensado en un script configure que edite una linea del Makefile que apunte al usuario actual, pero bueno, no creo que sea la solución correcta, pero bueno, quizá funcione...

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Foxy Rider

#1
Pensalo en términos de shell scripting ^^
Es un mero condicional usando id ... te ilustro la "lógica" :

Código (bash) [Seleccionar]
if [ $(id -u) != 0 ]; then
echo "No soy root, deberia copiar todo a otro lado";
else
echo "Si soy root, deberia copiar al directorio base";
fi


Tendrías que tener una variable UID con el valor que retorne id y a eso, hacerle un ifeq, lee la documentación de gnu para ver cómo hacerlo con su formato de makefiles : http://www.gnu.org/software/automake/manual/make/Conditional-Syntax.html#Conditional-Syntax

Saludos.

P.S: la forma correcta es hacerlo al estilo autotools, con un parámetro o variable llamada "PREFIX" que indique el directorio "base", que puede ser /, /usr/local, /home/algunUsuario ... y sobre eso se copia la estructura de directorios

P.S 2 : no sé si vá a scripting o a programación general, pero acá, no corresponde el hilo ... veré a donde lo mando

leogtz

#2
Lo del IF me queda claro, pero bueno, invocando al script de esta manera:

sudo make install

siempre será root, necesito permisos para copiar a /usr/local/bin para que el script se pueda invocar desde donde sea.

Esto se está complicando, siendo que podría editar fácilmente la línea con un comando sed :p
#!/bin/bash
sed -i "s|^LIBDIR=\(.*\)|LIBDIR=$HOME/.pcmenu|g" ./Makefile

Pero claro, sé que no sería la forma adecuada de hacerlo...

Me interesa lo que pones en el primer "P.S" voy a ver como tratarlo, quizá viendo un ejemplo.

También estoy analizando los permisos que debe llevar el install...

Saludos y gracias.

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

leogtz

Bueno, al final hice lo siguiente:
Makefile, mandé la libreria al directorio /usr/local/lib y el script lo instale en /usr/local/bin, claro que para instalar se tiene que hacer:

su - # ó sudo ..... . . . .
make [-B] install


Y parece que funciona.

Código (bash) [Seleccionar]
LIBDIR=/usr/local/lib
SH_PATH=/usr/local/bin
VERSION=1.0

all: test
@echo ""
@echo "If no error, run make -B install as root"

help:
@echo ""
@echo "Usage: make [test|install|uninstall]"
@echo ""
@echo "Try make test. If everything is ok, run make -B install as root"
@echo ""
@echo "You can remove installation using make uninstall as root"
@echo ""

install:
@echo "Install..."
install -m666 simple_curses.sh $(LIBDIR)/simple_curses.sh
install -m655 paquetes.sh $(SH_PATH)/paquetes.sh || echo -e "Run as root"
@echo ".... done"

uninstall:
@echo "Removing library"
rm -rf $(LIBDIR)/simple_curses.sh
rm -rf $(SH_PATH)/paquetes.sh || echo -e "Run as root"
@echo "done"

test:
@echo "Check if dmenu,pacman is installed"
which pacman &> /dev/null && echo -e "\033[32mpacman found\033[0m" || echo -e "\033[33mpacman ....... not found\033[0m"
which dmenu &> /dev/null && echo -e "\033[32mdmenu found\033[0m" || echo -e "dmenu ....... not found";
@echo "Done."

dist:
mkdir ./pacmenu-$(VERSION)
cp LICENSE README AUTHORS INSTALL simple_curses.sh paquetes.sh Makefile ./pacmenu-$(VERSION)
tar cvfz pacmenu-$(VERSION).tar.gz ./pacmenu-$(VERSION)
rm -rf ./pacmenu-$(VERSION)
@echo "pacmenu-$(VERSION).tar.gz done"
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Foxy Rider

¿ Era eso ? pensé que querías hacer distinto !  :xD
Igualmente chusmeate esto -> http://www.math.utpa.edu/lf/codes/toolsmanual.html
Después, no te conformes, y andate a cmake (acá toca leer varios CMakeLists.txt, la docu y la wiki), que autotools es un horror (no tanto como mantener Makefiles a mano)

Saludos.

leogtz

Cita de: vertex@Symphony en 10 Agosto 2011, 08:55 AM
¿ Era eso ? pensé que querías hacer distinto !  :xD

Jaja, ¿que querías?, es un script en shell de 400 líneas, todo escrito en shell, solo quería saber lo básico.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com