# This file is part of the src2pkg program: # Copyright 2005-2008 Gilbert Ashley # src2pkg is released under the GNU General Public License Version 2 ### fake_install fake_install() { if [[ "$INSTALL_COMMAND" = "skip" ]] ; then echo $BLUE"Skipping fake_install - "$NORMAL elif [[ "$FAILED" = "" ]] ; then ! [[ $CONFIG_DIR ]] && CONFIG_DIR=$SRC_DIR ! [[ $OBJ_DIR ]] && OBJ_DIR=$CONFIG_DIR find_makefile # install using an install.sh script or other named script # The -S option turns off redirection of stdout and stderr -allowing tracking of interactive install scripts. # But if we are running QUIET it will be reset just after critical install install operations if [[ $SHELL_INSTALL ]] ; then if ! [[ $INSTALL_LINE ]] ; then INSTALL_LINE="sh install.sh" if [[ -e $OBJ_DIR/install.sh ]] ; then echo $BLUE"Found install.sh script - "$NORMAL"Interactive input may be required." sleep 2 else echo $CYAN"NOTICE! "$NORMAL"No install.sh script found!" fi fi [[ "$QUIET" = "YES" ]] && RESTORE_QUIET=1 QUIET="NO" elif [[ ! $MAKEFILE ]] ; then [[ "$QUIET" = "YES" ]] && RESTORE_QUIET=1 QUIET="NO" fi # if the INSTALL_LINE was given to src2pkg, split it into INSTALL_COMMAND # and INSTALL_RULE. This lets us insert the DESTDIR if needed if [[ $INSTALL_LINE ]] ; then INSTALL_LINE=$(echo $INSTALL_LINE |white_out) if [[ $(echo $INSTALL_LINE |grep " ") ]] ; then INSTALL_COMMAND=$(echo $INSTALL_LINE |cut -f1 -d' ') INSTALL_RULE=$(echo $INSTALL_LINE |cut -f2- -d' ') fi elif [[ $INSTALL_COMMAND ]] && [[ $INSTALL_RULE ]] ; then true else FAILED="NO INSTALL_LINE" echo $RED"FAILED!! "$NORMAL"No INSTALL_LINE given." exit fi # # pretty tricky to figure out whether the INSTALL_RULE will work, and whether DESTDIR is supported # Running the install rule an extra time and checking the exit status takes longer but is more dependable if [[ -e $OBJ_DIR/$MAKEFILE ]] && [[ "$INSTALL_COMMAND" =~ "make" ]] ; then echo -n $BLUE"Checking for '$INSTALL_RULE' rule - "$NORMAL # do a dry-run of the install rule if [[ $INSTALL_LINE ]] ; then # if the INSTALL_LINE was given explicitly don't test it -this is to cover cases like this: # MAKE_COMMAND='make -f Makefile.unix' # INSTALL_LINE='make -f Makefile.unix install install_data' # otherwise we'd need to do even more parsing of the params true else $MAKE_COMMAND -n $INSTALL_RULE &> /dev/null fi # and check the value returned if [[ $? -eq 0 ]] ; then echo $GREEN"Okay"$NORMAL if [[ "$INSTALL_TYPE" = "DESTDIR" ]] ; then echo -n $BLUE"Checking for DESTDIR, INSTALL_ROOT, PREFIX or CMAKE_INSTALL_PREFIX - "$NORMAL # make sure the Makefile supports DESTDIR or revert to JAIL method if [[ "$(grep 'DESTDIR' ${OBJ_DIR}/${MAKEFILE} 2> /dev/null)" != "" ]] \ || [[ "$(grep 'DESTDIR' ${OBJ_DIR}/make.tmpl 2> /dev/null)" != "" ]] \ || [[ "$(grep 'DESTDIR' ${OBJ_DIR}/config.mk 2> /dev/null)" != "" ]] \ || [[ "$(grep 'DESTDIR' ${OBJ_DIR}/config.make 2> /dev/null)" != "" ]] ; then DEST_DIR="DESTDIR" #echo $BLUE"Found support for DESTDIR -"$NORMAL echo $GREEN"Okay"$NORMAL elif [[ "$(grep 'prefix' ${OBJ_DIR}/${MAKEFILE} 2> /dev/null)" != "" ]] \ || [[ "$(grep 'prefix' ${OBJ_DIR}/make.tmpl 2> /dev/null)" != "" ]] \ || [[ "$(grep 'prefix' ${OBJ_DIR}/config.mk 2> /dev/null)" != "" ]] \ || [[ "$(grep 'prefix' ${OBJ_DIR}/config.make 2> /dev/null)" != "" ]] ; then DEST_DIR="prefix" #echo $BLUE"Found support for --prefix -"$NORMAL echo $GREEN"Okay"$NORMAL elif [[ "$(grep 'INSTALL_ROOT' ${OBJ_DIR}/${MAKEFILE} 2> /dev/null)" != "" ]] \ || [[ "$(grep 'INSTALL_ROOT' ${OBJ_DIR}/make.tmpl 2> /dev/null)" != "" ]] \ || [[ "$(grep 'INSTALL_ROOT' ${OBJ_DIR}/config.mk 2> /dev/null)" != "" ]] \ || [[ "$(grep 'INSTALL_ROOT' ${OBJ_DIR}/config.make 2> /dev/null)" != "" ]] ; then DEST_DIR="INSTALL_ROOT" #echo $BLUE"Found support for INSTALL_ROOT -"$NORMAL echo $GREEN"Okay"$NORMAL elif [[ "$(grep 'PREFIX' ${OBJ_DIR}/${MAKEFILE} 2> /dev/null)" != "" ]] \ || [[ "$(grep 'PREFIX' ${OBJ_DIR}/make.tmpl 2> /dev/null)" != "" ]] \ || [[ "$(grep 'PREFIX' ${OBJ_DIR}/config.mk 2> /dev/null)" != "" ]] \ || [[ "$(grep 'PREFIX' ${OBJ_DIR}/config.make 2> /dev/null)" != "" ]] ; then DEST_DIR="PREFIX" #echo $BLUE"Found support for PREFIX -"$NORMAL echo $GREEN"Okay"$NORMAL elif [[ "$(grep 'CMAKE_INSTALL_PREFIX' ${OBJ_DIR}/cmake_install.cmake 2> /dev/null)" != "" ]] ; then DEST_DIR="CMAKE_INSTALL_PREFIX" #echo $BLUE"Found support for PREFIX -"$NORMAL echo $GREEN"Okay"$NORMAL else echo "Not found" echo $CYAN"NOTICE - "$NORMAL"DESTDIR not supported. Falling back to JAIL install" INSTALL_TYPE=JAIL fi fi else echo "" INSTALL_TYPE="DEFAULT" fi fi if [ "$INSTALL_TYPE" = "DEFAULT" ] ; then echo $CYAN"NOTICE! "$NORMAL"No install rule in $MAKEFILE." do_generic_installation elif [ "$INSTALL_TYPE" = "DESTDIR" ] ; then #. $SRC2PKG_LIBDIR/destdir_install install_to_destdir elif [ "$INSTALL_TYPE" = "REAL" ] ; then #. $SRC2PKG_LIBDIR/real_root_install install_to_real_root elif [ "$INSTALL_TYPE" = "JAIL" ] ; then #. $SRC2PKG_LIBDIR/jail_root_install install_to_jail_root fi rm -f $CWD/FILELIST.tmp ## during the above installation routines a stricter trap is used, so here ## we reset it to a more lenient trap which doesn't scold the user trap safe_user_cancel 2 if [[ "$FAILED" = "" ]] ; then post_fake_install fi fi } # end fake_install post_fake_install() { # shortcut switch for deleting all development files [[ $RUNTIME_ONLY = "YES" ]] && { DELETE_STATIC_LIBS="YES" DELETE_HEADERS="YES" } # Remove only static libs [[ $DELETE_STATIC_LIBS = "YES" ]] && { for dir in $LIB_DIRS ; do rm -f $PKG_DIR/$dir/*.a done } # Remove only include header files and directories [[ $DELETE_HEADERS = "YES" ]] && { for dir in $INC_DIRS ; do rm -rf $PKG_DIR/$dir done } } do_generic_installation() { if [[ -f $OBJ_DIR/$NAME ]] && [[ -x $OBJ_DIR/$NAME ]] ; then echo $BLUE"Found executable in OBJ_DIR - "$NORMAL"Matches NAME '$NAME'" echo $BLUE"Doing generic installation - "$NORMAL mkdir -p $PKG_DIR/$PRE_FIX/bin cp -a $OBJ_DIR/$NAME $PKG_DIR/$PRE_FIX/bin elif [[ -f $OBJ_DIR/$ORIG_NAME ]] && [[ -x $OBJ_DIR/$ORIG_NAME ]] ; then echo $BLUE"Found executable in OBJ_DIR - "$NORMAL"Matches ORIG_NAME '$ORIG_NAME'" echo $BLUE"Doing generic installation - "$NORMAL mkdir -p $PKG_DIR/$PRE_FIX/bin cp -a $OBJ_DIR/$ORIG_NAME $PKG_DIR/$PRE_FIX/bin elif [[ -f $OBJ_DIR/bin/$NAME ]] && [[ -x $OBJ_DIR/bin/$NAME ]] ; then echo $BLUE"Found executable in OBJ_DIR/bin - "$NORMAL"Matches NAME '$NAME'" echo $BLUE"Doing generic installation - "$NORMAL mkdir -p $PKG_DIR/$PRE_FIX/bin cp -a $OBJ_DIR/bin/$NAME $PKG_DIR/$PRE_FIX/bin else FAILED="GENERIC_INSTALL No executables found" echo $RED"FAILED!"$NORMAL fi } emergency_restore() { echo "Please don't interrupt during installation!" ls $BACKUP_DIR/$NAME-$VERSION-backup-$BUILD$SIG/* &> /dev/null if [[ $? -eq 0 ]] ; then rm -rf $BACKUP_DIR/$NAME-$VERSION-backup-$BUILD$SIG/no-backup 2> /dev/null 1> /dev/null if [[ $(ls $BACKUP_DIR/$NAME-$VERSION-backup-$BUILD$SIG/*) != "" ]] ; then cd $BACKUP_DIR/$NAME-$VERSION-backup-$BUILD$SIG echo "Emergency restoration of backup files!" ${TAR_STATIC} -cpf - . | ${TAR_STATIC} -f - -xvpC / # &> /dev/null echo "Backup file restoration complete." fi fi } # find_makefile() { ! [[ $OBJ_DIR ]] && OBJ_DIR=$SRC_DIR if [[ "${MAKE_COMMAND:0:7}" = "make -f" ]] ; then # keep what's to the right of 'make -f ' filename=${MAKE_COMMAND:8} # keep what's to the left of the first space MAKEFILE=${filename%%" "*} ! [[ $MAKE_COMMAND ]] && INSTALL_COMMAND="make -f $MAKEFILE" ! [[ $INSTALL_COMMAND ]] && INSTALL_COMMAND="make -f $MAKEFILE" ! [[ $INSTALL_RULE ]] && INSTALL_RULE="install" elif [[ -e $OBJ_DIR/GNUmakefile ]] ; then MAKEFILE="GNUmakefile" ! [[ $MAKE_COMMAND ]] && MAKE_COMMAND="make" ! [[ $INSTALL_COMMAND ]] && INSTALL_COMMAND="make" ! [[ $INSTALL_RULE ]] && INSTALL_RULE="install" elif [[ -e $OBJ_DIR/Makefile ]] ; then MAKEFILE="Makefile" ! [[ $MAKE_COMMAND ]] && MAKE_COMMAND="make" ! [[ $INSTALL_COMMAND ]] && INSTALL_COMMAND="make" ! [[ $INSTALL_RULE ]] && INSTALL_RULE="install" elif [[ -e $OBJ_DIR/makefile ]] ; then MAKEFILE="makefile" ! [[ $MAKE_COMMAND ]] && MAKE_COMMAND="make" ! [[ $INSTALL_COMMAND ]] && INSTALL_COMMAND="make" ! [[ $INSTALL_RULE ]] && INSTALL_RULE="install" elif [[ -e $OBJ_DIR/SConstruct ]] ; then MAKEFILE="SConstruct" ! [[ $MAKE_COMMAND ]] && MAKE_COMMAND="scons" ! [[ $INSTALL_COMMAND ]] && INSTALL_COMMAND="scons" ! [[ $INSTALL_RULE ]] && INSTALL_RULE="install" elif [[ -e $OBJ_DIR/Jamfile ]] ; then MAKEFILE="Jamfile" ! [[ $MAKE_COMMAND ]] && MAKE_COMMAND="jam" ! [[ $INSTALL_COMMAND ]] && INSTALL_COMMAND="jam" ! [[ $INSTALL_RULE ]] && INSTALL_RULE="install" elif [[ -e $OBJ_DIR/setup.py ]] ; then MAKEFILE="./setup.py" ! [[ $MAKE_COMMAND ]] && MAKE_COMMAND="'./setup.py build'" ! [[ $INSTALL_LINE ]] && INSTALL_LINE="./setup.py install" fi }