#!/bin/sh
# Installation script for the PHP/Java Bridge module and its back-ends.

#set -x
v=""
if test "X$1" = "X--verbose" || test "X$1" = "X-v" ; then
v="-v"
fi

if ! test -d modules; then
  echo "Nothing to install. Do a phpize && configure && make first, bye."
  exit 10
fi

php=`php-config --php-binary`
if test $? != 0; then php="`which php`"; fi
if test $? != 0; then php="`which php-cgi`"; fi
if test $? != 0; then 
 for i in /usr/bin/php /usr/bin/php-cgi /usr/local/bin/php /usr/local/bin/php-cgi; do
  if test -f $i; then php=$i; break; fi
 done
fi

if test X$php = X; then echo "php not installed, bye."; exit 3; fi

echo '<?php phpinfo();?>' | ${php} >/tmp/phpinfo.$$
ini=`fgrep "Scan this dir for additional" /tmp/phpinfo.$$ | head -1 |
sed 's/<[TtRr][/a-z ="0-9]*>/ => /g' | 
sed 's/<[/a-z ="0-9]*>//g' | 
sed 's/^.*=> //' | sed 's/ *$//; s/^ *//'`
ext=`fgrep extension_dir /tmp/phpinfo.$$ | head -1 |
sed 's/<[TtRr][/a-z ="0-9]*>/ => /g' | 
sed 's/<[/a-z ="0-9]*>//g' | 
sed 's/^.*=> //' | sed 's/ *$//; s/^ *//'`
phpini=`fgrep "Configuration File (php.ini) Path" /tmp/phpinfo.$$ | head -1 |
sed 's/<[TtRr][/a-z ="0-9]*>/ => /g' | 
sed 's/<[/a-z ="0-9]*>//g' | 
sed 's/^.*=> //' | sed 's/ *$//; s/^ *//'`
phpinc=`fgrep "include_path" /tmp/phpinfo.$$ | head -1 |
sed 's/<[TtRr][/a-z ="0-9]*>/ => /g' | 
sed 's/<[/a-z ="0-9]*>//g' | 
sed 's/^.*=> //' | sed 's/ *$//; s/^ *//' |
LANG=C awk '{for(i=1; i<=(split($0, ar, "[;:]")); i++) if(substr(ar[i], 1) != "." && substr(ar[i], 1) != "..") print ar[i] }' |
head -1`
/bin/rm -f /tmp/phpinfo.$$

# install generic ini
make install >install.log || exit 1
mod_dir=`/bin/cat install.log | sed -n '/Installing shared extensions:/s///p' | awk '{print $1}'`
if test X$v != X; then echo "installed in $mod_dir"; fi

overwrite="no"
if test X$ini = X; then
echo ""
echo "This php installation does not have a config-file-scan-dir,"
echo "java.ini, java-standalone.ini and java-servlet.ini not installed,"
echo "will use file $phpini instead."
if test -f ${phpini}; then
   echo -n "Overwrite existing php.ini file (yes/no): "; read overwrite;
fi
fi

if test -d "$ext"; then 
if test X$v != X; then echo "Using extension_dir: $ext"; fi
else
echo ""
echo "Warning: Your php installation is broken, the \"extension_dir\" does "
echo "not exist or is not a directory (see php.ini extension_dir setting)."
echo "Please correct this, for example type:"
echo "mkdir \"$ext\""
echo ""
fi

/bin/rm -f $ini 2>/dev/null
if test X$ini != X; then
 /bin/mkdir -p $ini
 /bin/cp $v java.ini $ini
else
  if test X$overwrite = "Xyes"; then
    /bin/rm $v -f "${phpini}.backup"
    /bin/mv $v "$phpini" "${phpini}.backup"
    /bin/cat java.ini >"$phpini"
  fi
fi

if test -f modules/java && ! test -f modules/JavaBridge.jar; then
jre=modules/java
else
jre="`locate /bin/java | grep 'java$' | head -1`"
echo -n "Location of the java executable ($jre): "; read jre2;
if test X$jre2 != X; then jre=$jre2; fi
if test -d $jre; then jre=${jre}/bin/java; fi
if ! test -x $jre; then echo "$jre is not an executable file."; exit 4; fi
jre_home=`dirname $jre`
jre_home=`dirname $jre_home`
fi


# devel
/bin/rm $v -f /usr/share/java/JavaBridge.jar /usr/share/java/script-api.jar /usr/share/java/php-script.jar /usr/java/packages/lib/ext/JavaBridge.jar /usr/java/packages/lib/ext/php-script.jar
if test -f modules/php-script.jar; then
    echo ""
    echo "Do you want to install the development files for jdk1.6?";
    echo -n "install development files (yes/no): "; read devel;
    if test "X$devel" != "Xno"; then
	/bin/mkdir -p /usr/share/java 2>/dev/null

	/bin/cp $v modules/JavaBridge.jar \
	      modules/php-script.jar \
	      modules/script-api.jar /usr/share/java

	/bin/mkdir -p /usr/java/packages/lib/ext 2>/dev/null

	/bin/rm -f /usr/java/packages/lib/ext/JavaBridge.jar \
	      /usr/java/packages/lib/ext/php-script.jar 2>/dev/null

	/bin/ln $v -s /usr/share/java/JavaBridge.jar \
	         /usr/share/java/php-script.jar /usr/java/packages/lib/ext

	echo "Installed in /usr/share/java"
	echo ""
        echo "The development files have been installed on this computer."
	echo "Type (e.g.) /usr/java/jdk1.6.0/bin/jrunscript -l php-interactive"
	echo "to start an interactive php session."
	echo ""
      fi
fi

# snarf
if test X$phpinc = X; then phpinc="/usr/share/pear"; fi
echo "";
echo "Generate PHP classes from standard Java classes and install them in"
echo "the ${phpinc} directory?"
echo -n "snarf java libraries (yes/no): "; read snarf;
if ! test "X$snarf" = "Xno"; then
$jre -Djava.library.path=./modules -Djava.class.path=./modules/JavaBridge.jar -Djava.awt.headless=true -Dphp.java.bridge.base=./modules php.java.bridge.JavaBridge --snarf ${phpinc} unsupported/lucene.jar
echo ""
fi

check_document_root() {
    document_root="/var/www/html";
    if ! test -d /var/www/html; then
	document_root="/usr/local/var/www/html";
	echo ""
	echo "Enter the location of HTTP server document root (e.g.: /usr/local/htdocs)";
	echo -n "document root ($document_root): "; read document_root;
	if test X$document_root = X; then document_root="/usr/local/var/www/html";fi
	echo ""
	if ! test -d $document_root; then echo "$document_root is not directory"; exit 5; fi
    fi
}

j2ee=no
# j2ee/servlet
/bin/rm $v -f ${ini}/java-servlet.ini 2>/dev/null
if test -f modules/JavaBridge.war; then
    echo ""
    echo "Do you want to start the Servlet/J2EE back-end as a service?";
    echo "This is the fastest and easiest service, only RedHat Enterprise"
    echo "or Fedora Linux users should say no here."
    echo "Say no, if you want to enable Security Enhanced Linux."
    echo "Say no, if you want to start the service automatically with Apache."
    echo "If unsure, say no";
    echo -n "install j2ee back-end (yes/no): "; read j2ee;
    if test "X$j2ee" != "Xno"; then
      webapps="`locate /webapps | fgrep tomcat | grep 'webapps$' | head -1`"
      echo ""
      echo "Enter the location of the autodeploy folder (e.g.: /opt/tomcat/webapps):";
      echo -n "autodeploy ($webapps): "; read webapps2;
      if test X$webapps2 != X; then webapps=$webapps2; fi
      /bin/rm $v -rf ${webapps}/JavaBridge.war ${webapps}/JavaBridge
      /bin/cp $v modules/JavaBridge.war $webapps;
      echo "Installed in $webapps.";
      check_document_root || exit 5
      if test -d ${document_root} && ! test -e ${document_root}/JavaBridge; then
        ln -s $webapps/JavaBridge ${document_root}/;
        echo "Installed in ${document_root}. "
      fi
      if test X$ini != X; then  
	  /bin/cp $v java-servlet.ini $ini; 
      else
	  if test X$overwrite = "Xyes"; then
	      /bin/cat java-servlet.ini >>"$phpini"; 
	  fi
      fi
      if test -f /etc/selinux/config && test -f /usr/sbin/semodule; then 
        if test X$v = X; then
	    (cd security/module; /usr/bin/make; /usr/sbin/semodule -i php-java-bridge-tomcat.pp) >/dev/null
	else
	    (cd security/module; /usr/bin/make; /usr/sbin/semodule -i php-java-bridge-tomcat.pp) 
	fi
      fi
      echo ""
      echo "The J2EE back-end has been desployed into the J2EE server. Now start the J2EE"
      echo "server and the web server, for example with the commands (Linux):"
      echo ""
      echo "    service tomcat5 restart"
      echo "    service httpd restart"
      echo ""
      echo " or (Unix):"
      echo ""
      echo "    JAVA_HOME=$jre_home `dirname $webapps`/bin/catalina.sh stop"
      echo "    JAVA_HOME=$jre_home `dirname $webapps`/bin/catalina.sh start"
      echo "    apachectl restart"
      echo ""
     
      echo "Browse to http://localhost:<PORT>/JavaBridge to see the test page from the"
      echo "J2EE server. PORT is 8080 for tomcat, 9080 for WebSphere and 8888 for Oracle."
      echo "Browse to http://localhost/JavaBridge to see the test page from the web server."
      echo ""
    fi
fi


# standalone
/bin/rm $v -f ${ini}/java-standalone.ini 2>/dev/null
for i in /etc/init.d /etc/rc.d/init.d /etc/rc.d; do
    if test -f ${i}/php-java-bridge; then
	/bin/rm $v -f ${i}/php-java-bridge
	break;
    fi
done
install_sel_module() {
 (
	cd security/module; 
	/usr/bin/make; 
	/usr/sbin/semodule -i php-java-bridge.pp
	/usr/bin/chcon -t javabridge_exec_t $ext/RunJavaBridge
	/usr/bin/chcon -t sbin_t /usr/sbin/php-java-bridge
	if test X$javabridgeservice != X; then /usr/bin/chcon -t initrc_exec_t $javabridgeservice; fi
 )
}
/bin/rm $v -f /usr/sbin/php-java-bridge
if test -f modules/JavaBridge.jar && test "X$j2ee" = "Xno"; then
    echo ""
    echo "Do you want to start the standalone back-end from a service script?"
    echo "Non- RedHat Enterprise or Fedora Linux users probably want to say no here.";
    echo "Say no, if you want to start the service automatically with Apache."
    echo "Say no, if this operating system doesn't support SysV service scripts."
    echo "Say yes, if you want to enable Security Enhanced Linux."
    echo "If unsure, say no";
    echo -n "install service script (yes/no): "; read standalone;
    if test "X$standalone" = "Xyes"; then
	/bin/cp $v php-java-bridge /usr/sbin
	/bin/chmod +x /usr/sbin/php-java-bridge
	if test X$v != X; then echo "Installed /usr/sbin/php-java-bridge"; fi
	for i in /etc/init.d /etc/rc.d/init.d /etc/rc.d; do
	if test -d $i; then
	    /bin/cp $v php-java-bridge.service ${i}/php-java-bridge
	    /bin/chmod +x ${i}/php-java-bridge
	    javabridgeservice=${i}/php-java-bridge # used in install_sel_module
	    if test X$v != X; then echo "Installed service ${i}/php-java-bridge"; fi
	    break;
	fi
	done
	/sbin/chkconfig --add php-java-bridge &&
	/sbin/chkconfig php-java-bridge on
        echo -n "run the back-end with limited rights (yes/no): "; read limited;
        if test "X$limited" = "Xyes"; then
          echo -n "run the back-end as user (default: apache): "; read user;
	  if test X$user = X; then user="apache"; fi
          echo -n "run the back-end as group (default: apache): "; read group;
	  if test X$user = X; then group=$user; fi
          (/bin/chown $user:$group $ext/RunJavaBridge &&
           /bin/chmod 6111 $ext/RunJavaBridge) || /bin/rm -f $ext/RunJavaBridge
        else
          /bin/rm -f $ext/RunJavaBridge
        fi
	if test X$ini != X; then 
	    /bin/cat java-standalone.ini | sed 's|^;java\.java_home[\t =].*$|;java.java_home = |; s|^;java\.java[\t =].*$|java.java = '$jre'|' >${ini}/java-standalone.ini
	    if test X$v != X; then echo "Installed ${ini}/java-standalone.ini"; fi
	    
        else
           if test X$overwrite = "Xyes"; then
	       /bin/cat java-standalone.ini | sed 's|^;java\.java_home[\t =].*$|;java.java_home = |; s|^;java\.java[\t =].*$|java.java = '$jre'|' >"$phpini"
	   fi
	fi
	check_document_root || exit 5;
	if test -d ${document_root} && ! test -e ${document_root}/test.php; then
          /bin/cp $v test.php ${document_root}/test.php
	  if test X$v != X; then echo "Installed ${document_root}/test.php."; fi
	fi
        echo -n "start now? (yes/no): "; read restart;
	if test -f /etc/selinux/config && test -f /usr/sbin/semodule; then 
          if test X$v = X; then
	    install_sel_module >/dev/null
	  else
	    install_sel_module
	  fi
        fi
        if test X$restart != no; then
            /sbin/service php-java-bridge restart
            /sbin/service httpd restart
        fi
	echo ""
	echo "The php-java-bridge service has been installed. It can be started with:"
	echo ""
	echo "    service php-java-bridge restart"
	echo "    service httpd restart"
	echo ""
        echo "Browse to http://localhost/test.php to see the test page."
	echo ""
    fi
fi

echo "PHP/Java Bridge installed."
if test -d /etc/selinux; then
if /usr/sbin/selinuxenabled; then
  if test -f /etc/selinux/config && test -f /usr/sbin/semodule; then
    echo "SEL Security: \"javabridge\" policy module installed."
  fi
else
  echo "You are running a SELinx system. Please install the policy sources"
  echo "or install the files from the RPM distribution download."
  echo "Please see the README document for details".
fi
fi

echo ""
echo "Now type \"${php} test.php\" to check the installation."
echo ""

exit 0
