#ejecutar make install  cuando pida clave sudo dar
# debe tenerse sudo
USERID=$(shell id -u)
USERNAME=$(shell id -un)
FEC=$(shell date '+%Y-%m-%d')
SHELL=/bin/bash
DISTRO=$(shell distro.sh)

#################################### crea los dirs de los paquetes aca y despues make dist los pone
# antes de lib
all: install
#install



define findfirstSB
$(shell $(shellpath) if test -s /usr/$1 ; then \
                   echo /usr;\
                 elif test -s /usr/local/$1 ; then \
                   echo /usr/local;\
                 elif test -s ~/$1 ; then \
                    echo ~;\
                 elif  test -s ./$1 ; then \
                    echo .;\
                 fi;)
endef
PREFIXMLIB=$(call findfirstSB,share/summapack/data/makefile.lib)
$(info MAKELIB: ${PREFIXMLIB})

# si esta en desarrollo esta, pero muchas veces al ser lo primero que instala no
# y entonces? no es mejor que de error?
ifneq ("$(wildcard $(PREFIXMLIB)/share/summapack/data/makefile.lib)","")
include $(PREFIXMLIB)/share/summapack/data/makefile.lib
endif


BASETMP := $(shell $(shellpath) mktemp -d |sed -e's/\n//'|sed -e's/^\/tmp\///')
# con := permanece cte
$(info BASETMP: ${BASETMP}) 

# cada vez que lo invocas lo hace?


#$(info base ${BASETMP})

SUDO=sudo #ver makefile gral del viejo simusol

SCEPTRESIMUSOL=$(call findfirst,bin/sceptre)
SIMUSOL=$(call findfirst,bin/simusol)
DIASIMUSOL=$(call findfirst,bin/dia)

$(info DIA: ${DIASIMUSOL})

$(info SIMUSOL: ${SIMUSOL})

$(info SCEPTRE: ${SCEPTRESIMUSOL})

PREFIX=/usr/local
DOT=/
DOC=doc/simusol/pkgs/$(PACK)
SHARE=/share
PREFIXSIM=${PREFIX}${SHARE}${DOT}simusol
PREFIXDOWN=${PREFIX}${SHARE}${DOT}down
DOWNLOAD = ${PREFIXDOWN}/pkg
####### sacar download ya esta en makefile.lib
SERVERBAJAR=http://simusol.org/downloads

SERVERSUBIR=simusol.org
SERVERDIR=/var/www/simusol.org/public_html/downloads
SERVERUSER=www-data

sceptresimusolNAME = sceptre_simusol-last.tar.gz
sceptresimusolDIR = $(SERVERBAJAR)/${sceptresimusolNAME}

simusolNAME=simusol_PD-last.tar.gz
simusolDIR=$(SERVERBAJAR)/${simusolNAME}

diasimusolNAME=dia_simusol-last.tar.gz
diasimusolDIR=$(SERVERBAJAR)/${diasimusolNAME}


# cambia de nombre de simusol-summapack a summapack
summapackNAME=summapack-last.tar.gz
summapackDIR=$(SERVERBAJAR)/${summapackNAME}

simusolBaseNAME=SimusolBase-last.tar.gz
simusolBaseDIR=$(SERVERBAJAR)/${simusolBaseNAME}

simusolSinPlotNAME=simusol_SinPlot-last.tar.gz
simusolSinPlotDIR=$(SERVERBAJAR)/${simusolSinPlotNAME}


simusolPlotNAME=SimusolPlot-last.tar.gz
simusolPlotDIR=$(SERVERBAJAR)/${simusolPlotNAME}

simusolExamplesNAME=simusol_examples-last.tar.gz
simusolExamplesDIR=$(SERVERBAJAR)/${simusolExamplesNAME}

simusolDocNAME=simusol_doc-last.tar.gz
simusolDocDIR=$(SERVERBAJAR)/${simusolDocNAME}


TabularNAME=tabular-last.tar.gz
TabularDIR=$(SERVERBAJAR)/${TabularNAME}


### HACEERLO CON PAQUETES
simusolExamplesNAME=simusol_examples-last.tar.gz
simusolExamplesDIR=$(SERVERBAJAR)/${simusolExamplesNAME}

# debian no suele tener instalado sudo, en ubuntu la gente no suele conocer la clave de root para su
# si no necesita internet o instalar paquetes no lo intenta como forma de saber si lo tiene que hacer
# apt debiera comprobar si estan, si no estan hacer update por el mismo
#dpkg-query -W -f='${Status}'  KKK 2>/dev/null | grep -c "ok installed"
#http://superuser.com/questions/427318/test-if-a-package-is-installed-in-apt/427898

# con gfortran version 4 hay errores en algunos archivos de simusol
#verificar si existe repo antes de add
#ls /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test* | wc -l

# no se los pone como dependencias pq se usa sudo

uploadinstalar:
	scp instalar.sh  "${SERVERUSER}@${SERVERNAME}:${SERVERDIR}" ;\


############# OJO HACER DOS, uno para hacer otro para instalar de cada paquete!!!!!
install:
	sudo mkdir -p ${DOWNLOAD}
	sudo chmod a+w ${DOWNLOAD}
	sudo chmod a+r ${DOWNLOAD}
	sudo make updsummapack installcompanion updTabular updsceptre upddiasimusol updsimusolBase updsimusolPlot updsimusol  updsimusolSinPlot updsimusolExamples  updsimusolDoc

#sit summapack dia-simusol tabular sceptre_simusol simusol-SinPlot simusol-PD simusol-examples simusol-doc Base Plot

# updsimusolSinPlot
#  si se quiere usar el simusol que viene por aparte de simplot

uno: updsummapack installcompanion


#sudo make upd
#	sudo make updsceptre
#	sudo make upddiasimusol

#sudo make 
#


# svnversion   sudo apt install subversion
# gfortran

non:
	make makenonsudo
	sudo make makeinstall 




### instala solo si falta
### necesita usar sudo si instala en /usr
insummapack:  
	$(call download,$(SCEPTRESIMUSOL),$(DOWNLOAD),${summapackNAME},${summapackDIR},summapack,SimusolPack,$(call compilation))

### reinstala
#simusol-summapack es el nombre con el cual esta creado el paquete que se baja
#NOta simusol-summapack se renombra a summapack

updsummapack: 
	$(call download,,$(DOWNLOAD),${summapackNAME},${summapackDIR},summapack,SummaPack,$(call compilation))



###############################

##############################

### instala solo si falta
### necesita usar sudo si instala en /usr
insceptre:  
	$(call download,$(SCEPTRESIMUSOL),$(DOWNLOAD),${sceptresimusolNAME},${sceptresimusolDIR},sceptre-simusol,Sceptre,$(call compilation))

### reinstala
updsceptre: 
	$(call download,,$(DOWNLOAD),${sceptresimusolNAME},${sceptresimusolDIR},sceptre-simusol,Sceptre,$(call compilation))



###############################
insimusol:
	$(call download,$(SIMUSOL),$(DOWNLOAD),${simusolNAME},${simusolDIR},simusol-PD,Simusol,$(call compilation))

#(call simusolcomp))

updsimusol: 
	$(call download,,$(DOWNLOAD),${simusolNAME},${simusolDIR},simusol-PD,Simusol,$(call compilation))

# simusol-PD propiamente dicho, el problema de poner solo "simusol" es que hay muchos paquetes con esa raiz encuentra mas de uno!


#define simusolcomp
#	 make ; \
#	 echo NO hacer caso al ejecutar simusol.usuario.instalar 
#endef

################################
indiasimusol:
	$(call download,$(DIASIMUSOL),$(DOWNLOAD),${diasimusolNAME},${diasimusolDIR},dia-simusol,DiaSimusol,$(call compilation))


upddiasimusol: 
	$(call download,,$(DOWNLOAD),${diasimusolNAME},${diasimusolDIR},dia-simusol,DiaSimusol,$(call compilation))


###############################################################################################################
updsimusolBase: 
	$(call download,,$(DOWNLOAD),${simusolBaseNAME},${simusolBaseDIR},SimusolBase,SimusolBase,$(call compilation))

###############################################################################################################
updsimusolPlot: 
	$(call download,,$(DOWNLOAD),${simusolPlotNAME},${simusolPlotDIR},SimusolPlot,SimusolPlot,$(call compilation))
###############################################################################################################
updsimusolSinPlot: 
	$(call download,,$(DOWNLOAD),${simusolSinPlotNAME},${simusolSinPlotDIR},simusol-SinPlot,SimusolSinPlot,$(call compilation))
#################################################################################################################
updsimusolExamples: 
	$(call download,,$(DOWNLOAD),${simusolExamplesNAME},${simusolExamplesDIR},simusol-examples,SimusolExamples,$(call compilation))
#################################################################################################################
updsimusolDoc: 
	$(call download,,$(DOWNLOAD),${simusolDocNAME},${simusolDocDIR},simusol-doc,SimusolDoc,$(call compilation))
#################################################################################################################
updTabular: 
	$(call download,,$(DOWNLOAD),${TabularNAME},${tabularDIR},tabular,Tabular,$(call compilation))



#################################################################################################################
installcompanion:
	mkdir -p ~/.cpanm
	sudo chown ${USERNAME} ~/.cpanm
	sudo chown :${USERNAME} ~/.cpanm ; exit 0;
	curl -L https://cpanmin.us | perl - --sudo App::cpanminus
	sudo packinstall.pl $(DISTRO) sudo   dia gnuplot-x11 libxml-parser-perl gcc gfortran  build-essential xdg-utils mc emacs subversion  libcapture-tiny-perl Path--Class

#para mac https://www.xquartz.org/ https://dl.bintray.com/xquartz/downloads/XQuartz-2.7.11.dmg " brew cask install Xquartz dia"
# mac brew cask install dia
# usar debian cpanminus
#REPO-pp:ubuntu-toolchain-r/test
#gfortran-6
#################################

#Path::Class Capture::Tiny


makenonsudo:
	@if [ "$(USERID)" = "0" ]; then echo "No correr como sudo o root"; exit 2; fi
	cd sceptre-simusol-2016-0.1; make clean; make

makeinstall: 
	@if [ "$(USERID)" != "0" ]; then echo "Correr como sudo o root"; exit 2; fi
	cd sceptre-simusol-2016-0.1; make install;
	cd simusol; make install


# ahora se usa summapack  packinstall.pĺ
installpkg:
	@if [ "$(USERID)" != "0" ]; then echo "Correr como sudo o root"; exit 2; fi
	if test `ls /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test* 2>/dev/null | wc -l` == 0 ; then \
		sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; exit 0; \
	fi;
	OKI=`dpkg-query -W -f='$${Status}' sudo`;\
	for PROG in dia gnuplot-x11 libxml-parser-perl gcc gfortran gfortran-6 build-essential xdg-utils mc emacs; do \
	     OKP=`dpkg-query -W -f='$${Status}' $$PROG`; \
	     if test x"$$OKP" = x ; then \
	        break; \
	     fi;\
	done;\
	echo "SUDO: $$OKI OTROSAPT:  $$OKP" ; \
	if  test  \( x"$$OKP" = x \) -o \( x"$$OKI" = x \) ; then \
	      if test x"$$OKI" = x ; then \
	        echo "Ahora le pedira la contraseña de root (su)" ;\
		su - -c "apt-get update" ; exit 0;\
	      else \
	        echo "Ahora le pedira la contraseña de usuario (sudo)" ;\
		sudo apt-get update ; exit 0;\
	      fi; \
	fi;  \
	if test x"$$OKI" = x ; then \
	 echo "INSTALAR SUDO $$OKI"; \
	 echo "ahora le pedira la contraseña de root, mas adelante la de usuario para sudo" ;\
	 su - -c "apt-get  --force-yes --yes install sudo && adduser $(USERNAME) sudo" ; \
	 exit ;\
	fi;
	if test x"$$OKP" == x ; then \
		sudo apt-get  --force-yes --yes install dia gnuplot-x11 libxml-parser-perl gcc gfortran gfortran-6 build-essential xdg-utils mc emacs ; exit 0;\
	fi;
	if test -e /usr/bin/gfortran-6 ; then \
		sudo rm /usr/bin/gfortran ;\
		sudo ln -s /usr/bin/gfortran-6 /usr/bin/gfortran;\
	fi;

# no es necesario poner la distro


#	packinstall.pl $(DISTRO) libhttp-dav-perl Getopt::Long YAML::Any Time::localtime File::stat Config File::HomeDir File::Find HTTP::DAV HTTP::Request LWP::UserAgent File::Basename Pod::Usage HTML::TagParser Term::ReadKey Text::ASCIITable File::Path  LWP::Simple;

installx:
	@if [ "$(USERID)" = "0" ]; then echo "No correr como sudo, cuando necesite el programa lo hara."; exit 2; fi
	if test `ls /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test* 2>/dev/null | wc -l` == 0 ; then \
		sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; exit 0; \
	fi;
	OKI=`dpkg-query -W -f='$${Status}' sudo`;\
	for PROG in dia gnuplot-x11 libxml-parser-perl gcc gfortran gfortran-6 build-essential xdg-utils mc emacs; do \
	     OKP=`dpkg-query -W -f='$${Status}' $$PROG`; \
	     if test x"$$OKP" = x ; then \
	        break; \
	     fi;\
	done;\
	echo "SUDO: $$OKI OTROSAPT:  $$OKP" ; \
	if  test  \( x"$$OKP" = x \) -o \( x"$$OKI" = x \) ; then \
	      if test x"$$OKI" = x ; then \
	        echo "Ahora le pedira la contraseña de root (su)" ;\
		su - -c "apt-get update" ; exit 0;\
	      else \
	        echo "Ahora le pedira la contraseña de usuario (sudo)" ;\
		sudo apt-get update ; exit 0;\
	      fi; \
	fi;  \
	if test x"$$OKI" = x ; then \
	 echo "INSTALAR SUDO $$OKI"; \
	 echo "ahora le pedira la contraseña de root, mas adelante la de usuario para sudo" ;\
	 su - -c "apt-get  --force-yes --yes install sudo && adduser $(USERNAME) sudo" ; \
	 exit ;\
	fi;
	if test x"$$OKP" == x ; then \
		sudo apt-get  --force-yes --yes install dia gnuplot-x11 libxml-parser-perl gcc gfortran gfortran-6 build-essential xdg-utils mc emacs ; exit 0;\
	fi;
	if test -e /usr/bin/gfortran-6 ; then \
		sudo rm /usr/bin/gfortran ;\
		sudo ln -s /usr/bin/gfortran-6 /usr/bin/gfortran;\
	fi;
	@echo $(USERID) - $(USERNAME)
	cd simusol; sudo make clean; sudo make install
	cd sceptre-simusol-2016-0.1; make clean; make; sudo make install
	echo BORRAR sit antes de hacer tar -xvf con este archivo

#gvfs-bin
#usermod -aG sudo usuario
#gpasswd -a usuario sudo
# en instalar debe haber algo que se instala con otra version de fortran, porque si se hace el orden al reves no fuinciona

cleanlocal:
	sudo rm -f instalar/listado.ls sceptre-simusol-2016-0.1/listado.ls *~ instalar/*~ sceptre-simusol-2016-0.1/*~ ; echo 0
	cd instalar; sudo make clean
	cd sceptre-simusol-2016-0.1; make clean

#dist:   cleanlocal
#	cd ..; tar -zcvf simusol-instalar-todo-$(FEC).tar.gz  sit/*; cd sit; \
#	md5sum ../simusol-instalar-todo-$(FEC).tar.gz > ../simusol-instalar-todo-$(FEC).tar.gz.md5; \
#	ls -l ../simusol-instalar-todo-$(FEC).tar.gz*;  \

#upload: dist
#	scp  ../simusol-instalar-todo-$(FEC).tar.gz  ../simusol-instalar-todo-$(FEC).tar.gz.md5 www-data@simusol.org:/var/www/simusol.org/public_html/downloads	;\
	ssh www-data@simusol.org "cd /var/www/simusol.org/public_html/downloads; rm -f simusol-instalar-todo-last.tar.gz;  rm -f simusol-instalar-todo-last.tar.gz.md5; ln -s simusol-instalar-todo-$(FEC).tar.gz simusol-instalar-todo-last.tar.gz; ln -s simusol-instalar-todo-$(FEC).tar.gz.md5 simusol-instalar-todo-last.tar.gz.md5;";\

#pdv-rio
#automake
#sudo add-apt-repository ppa:texlive-backports/ppa

#emacs texlive-base  texlive-lang-spanish texlive-latex-base latex-beameer texlive-latex-extra texlive-fonts-recommended  
#texlive evince
#texlive-base si se desea trabajar con la documentación.
#nautilus-open-terminal
#gnome-terminal   # en debian para que funcione icono








rmsceptre:
	$(call rmbin,Sceptre,sceptre,$(SCEPTRESIMUSOL))

rmfsceptre: rmsceptre
	$(call rmfbin,Sceptre,${sceptresimusolNAME})


#rmsceptre insceptre

# como no esta terminado el paquete sceptre
setsceptremd5:
	$(call mkmd5,${DOWNLOAD},${sceptresimusolNAME},${sceptresimusolDIR})




#########################################################################


rmsimusol:
	$(call rmbin,Simusol,simusol)

rmfsimusol: rmsimusol
	$(call rmfbin,Simusol,${simusolNAME})


#rmsimusol insimusol


#	 if test x$(SUDO) != x ; then \
#	   sudo -n make install ; \
#	  else\
#	   make install;\
#	 fi; \
# ver de eliminar simusol.usuario.instalar, que lo haga simusol si no esta hecho
# debe ejecutarse en el simusol-gui cada vez 



#########################################################################
rmdiasimusol:
	$(call rmbin,DiaSimusol,dia)

rmfdiasimusol: rmdiasimusol
	$(call rmfbin,DiaSimusol,${diasimusolNAME})






#	 if test x$(SUDO) != x ; then \
#	   sudo -n make install ; \
#	  else\
#	   make install;\
#	 fi; \
# ver de eliminar simusol.usuario.instalar, que lo haga simusol si no esta hecho
# debe ejecutarse en el simusol-gui cada vez 

######################################################################################################

# ojo, si se lo llama dentro de sudo hay problemas!!!!!!!!!!!!





# solo borra targets
# sudo sin n fallara enla interfaz grafica

# en realidad sceptre solo se instala por ahora en /usr/local
# /usr esta reservado para paquetes buinarios del sistema, o sea este make nunca instalara asi
# por ahora no se puede instalar sin sudo

# se podria verificar la fecha o algun cheksum, para proceder (siempre) o antes de proceder (a pedido)

#define mkmd5
#	mkdir -p /tmp/saved  2>/dev/null; exit 0;
#	chmod a+w /tmp/saved; exit 0;
#	mv -f $1/$2 /tmp/saved; exit 0;
#	rm -f $1/$2; exit 0;
#	wget --no-check-certificate -c -P $1 $3; 
#	md5sum -t   $1/$2 > $1/$2.md5 ;
#	scp  $1/$2.md5 wwwrun@$(SERVERSUBIR):/srv/www/htdocs/simusol/simusolsite/downloads/$2.md5
#endef


# no se puede usar el lib aca, no esta summapack al comienzo


define compilation
	   make ;\
	   sudo -n make install 
endef


define download
	@echo "$6 esta en: >$1<"
	if test x"$1" = x ; then \
	 touch INSTALA_companion ;\
	 echo Instalar $6; \
	 mkdir -p $2  2>/dev/null; \
	 rm -f  $2/$3.md5.new ;\
	 wget --no-check-certificate -c -O  $2/$3.md5.new  $4.md5 ; \
	 if test ! -s  $2/$3.md5.new ; then\
	    echo "Internet (o sin permiso: sudo) falla bajando $4.md5" ;\
	    rm -f $2/$3.md5.new;\
	 fi; \
	 MD5NEW=`cat $2/$3.md5.new 2>/dev/null| cut -d' ' -f1` ;\
	 MD5=`cat $2/$3.md5 2>/dev/null| cut -d' ' -f1`;\
	 echo md5 $$MD5 md5new $$MD5NEW ;\
	 if test \( -s $2/$3.md5.new -a \
                    \( ! -e $2/$3 -o  \
                       ! -e $2/$3.md5 -o \
                       x$$MD5 != x$$MD5NEW \) \
                 \) ; then \
	    echo Bajando  $4 ;\
	    mkdir -p /tmp/saved  2>/dev/null; \
	    chmod a+w /tmp/saved; \
	    mv -f $2/$3 /tmp/saved 2>/dev/null;\
	    rm -f $2/$3; \
	    wget --no-check-certificate  -P $2 $4; \
	    if test ! -s  $2/$3 ; then\
	       echo Internet falla bajando $4 ;\
	       rm -f $2/$3;\
	     else \
	       rm -f   $2/$3.md5 ;\
	       md5sum -t   $2/$3 > $2/$3.md5 ; \
	       MD5BAJ=`cat  $2/$3.md5 | cut -d' ' -f1` ;\
	       MD5OK=`cat $2/$3.md5.new 2>/dev/null| cut -d' ' -f1`;\
	       echo md5 $$MD5OK md5new $$MD5BAJ ;\
	       if test x$$MD5OK != x$$MD5BAJ ; then \
	          echo EL archivo $4 bajo mal, lo renombro;\
	          mv -f  $2/$3 $2/$3.mal 2>/dev/null ;\
	       fi;\
	       rm -f $2/$3.md5.new  2>/dev/null;\
	    fi; \
          else \
	    echo No bajo: $4 ;\
	 fi; \
         if test x${BASETMP} != x; then \
	   if  test -e $2/$3 ; then \
	     echo Instalando $6;\
             if test x"$5" != x; then \
	      rm -rf /tmp/${BASETMP} ; \
              mkdir -p /tmp/${BASETMP} ;\
	      cd /tmp/${BASETMP} ;\
	      tar -zxvf $2/$3 >/dev/null ; \
	      DIRBU=`echo $5*| sed -e 's/ //g'` ;\
	      if test -d $$DIRBU  ; then   \
		    echo Encontro directorio  $DIRBU con raiz $5; \
	            cd $5* ; \
	 	    $7 ;\
	            echo $6 fue instalado en ${PREFIX};\
	         else \
	            echo "No encontro directorio con raiz $5, encontro $$DIRBU" ;\
	      fi; \
	      fi; \
	     else \
	      echo No puede bajar $6 ;\
	     fi;\
	 else \
	   echo No hay BASETMP, no puedo descomprimir ;\
	 fi;\
	else \
	   echo No se instala: $6 ya esta instalado en $1;\
	fi
endef
