# This file is part of the src2pkg program:
# Copyright 2005-2013 Gilbert Ashley <amigo@ibilio.org>
# src2pkg is released under the GNU General Public License Version 2

### compress_man_pages
#  This function corrects the location of wrongly placed man-pages and info-pages
#  and makes the compression of them uniform
###
compress_man_pages() {
if [[ $ALLOW_USER_EXTENSIONS = "YES" ]] ; then
 # check if the user has any pre-execution extensions to this file and run them, if so.
 [[ -f "$HOME"/.src2pkg/extensions/12.pre ]] && . "$HOME"/.src2pkg/extensions/12.pre
fi

if [[ "$FAILED" = "" ]] && [[ ! $USER_CANCELLED ]] ; then
  if [[ ! $RESUME ]] || [[ $RESUME = $FUNCNAME ]] || [[ $HAVE_RESUMED ]] ; then
	[[ $RESUME = $FUNCNAME ]] && HAVE_RESUMED=1 && echo $CYAN"   Notice - "$BLUE"Resuming build at: "$NORMAL "$FUNCNAME"
	if [[ $PAUSE = "BEFORE" ]] || [[ $PAUSE = $FUNCNAME ]] ; then
		echo $MAGENTA"Notice - "$BLUE"Pausing before: "$NORMAL" '$FUNCNAME'  Press ENTER to continue"
		read
	fi
  
	if [[ "$CORRECT_MANS" = "YES" ]] ; then
		# Move badly placed  man-pages
		if [[ -L "$PKG_DIR"/$BAD_MAN_PATH ]] ; then
		  rm -f "$PKG_DIR"/$BAD_MAN_PATH
		fi
		if [[ -L "$PKG_DIR"/$GOOD_MAN_PATH ]] ; then
		  rm -f "$PKG_DIR"/$GOOD_MAN_PATH
		fi
		if [[ -d "$PKG_DIR"/$BAD_MAN_PATH ]] ; then
			#( cd "$PKG_DIR" ; mkdir -p $GOOD_MAN_PATH &> /dev/null )
			#( cd "$PKG_DIR" ; mv $BAD_MAN_PATH/* $GOOD_MAN_PATH/ &> /dev/null )
			#rm -rf "$PKG_DIR"/$BAD_MAN_PATH
			echo $CYAN"   Notice - "$NORMAL"Moving man pages installed under $BAD_MAN_PATH to ${MAN_DIR#$PKG_DIR}"
			mkdir -p "$PKG_DIR"/${GOOD_MAN_PATH}
			( cd "$PKG_DIR"/$BAD_MAN_PATH && tar --remove-files -cpf - * | tar -f - -xpC "$PKG_DIR"/$GOOD_MAN_PATH )
			rm -rf "$PKG_DIR"/$BAD_MAN_PATH
			#rmdir "$PKG_DIR"/$BAD_MAN_PATH/*/*
			#rmdir "$PKG_DIR"/$BAD_MAN_PATH/*
			#rmdir "$PKG_DIR"/$BAD_MAN_PATH
		fi
		if [[ -d $PKG_DIR/$GOOD_MAN_PATH ]] ; then 
		  if [[ $(find $PKG_DIR/$GOOD_MAN_PATH -type d -name "cat*") ]] ; then
			[[ $DEBUG ]] && echo $CYAN"   Notice - "$NORMAL"Removing pre-formatted (cat) man-pages"
			( cd $PKG_DIR/$GOOD_MAN_PATH
				find . -type d -name "cat*" | xargs rm -rf
			)
		  fi
		fi
	fi
	if [[ $SAVE_SPACE -gt 3 ]] ; then
		for dir in $PRE_FIX/info $PRE_FIX/share/info usr/info usr/local/info usr/share/info /usr/local/share/info ; do
			if [[ -d "$PKG_DIR"/$dir ]] ; then
			  echo -n $BLUE"Removing info files - "$NORMAL
			  rm -rf "$PKG_DIR"/$dir
			  echo $GREEN"Done!"$NORMAL
			fi
		done
	elif [[ "$CORRECT_MANS" = "YES" ]] ; then
		# Move badly placed info pages
		if [[ -L "$PKG_DIR"/$BAD_INFO_PATH ]] ; then
		  rm -f "$PKG_DIR"/$BAD_INFO_PATH
		fi
		if [[ -L "$PKG_DIR"/$GOOD_INFO_PATH ]] ; then
		  rm -f "$PKG_DIR"/$GOOD_INFO_PATH
		fi
		if [[ -d "$PKG_DIR"/$BAD_INFO_PATH ]] ; then
			echo $CYAN"   Notice - "$NORMAL"Moving info pages installed under $BAD_INFO_PATH to ${INFO_DIR#$PKG_DIR}"
			#( cd $PKG_DIR ; mv $BAD_INFO_PATH $GOOD_INFO_PATH &> /dev/null )
			#rm -rf "$PKG_DIR"/$BAD_INFO_PATH
			mkdir -p ${GOOD_INFO_PATH}
			( cd "$PKG_DIR"/$BAD_INFO_PATH && tar --remove-files -cpf - * | tar -f - -xpC "$PKG_DIR"/$GOOD_INFO_PATH )
			#rm -rf "$PKG_DIR"/$BAD_INFO_PATH
			rmdir "$PKG_DIR"/$BAD_INFO_PATH
		fi
		# remove the info/dir file if present
		if [[ -f "$PKG_DIR"/$GOOD_INFO_PATH/dir ]] ; then
		  rm -f "$PKG_DIR"/$GOOD_INFO_PATH/dir
		fi
		# remove the usr/share dir if empty
		if [[ -d "$PKG_DIR"/usr/share ]] && [[ $(ls "$PKG_DIR"/usr/share/ 2> /dev/null) = "" ]] ; then
		  [[ $DEBUG ]] && echo $BLUE"Removing empty usr/share directory -"$NORMAL
		  rm -rf "$PKG_DIR"/usr/share
		fi
	fi
	
	# make a more thorough check for man-pages if there still aren't any in the package
	if ! [[ -d "$MAN_DIR" ]] ; then
		for mansuffix in 1 1x 3 5 8 ; do
			if [[ -f "${SRC_DIR}"/${NAME}.${mansuffix} ]] ; then
				mkdir -p "$MAN_DIR"/man$mansuffix
				cp "$SRC_DIR"/$NAME.$mansuffix "$MAN_DIR"/man$mansuffix
				FOUND_MANS=SRC_DIR
			fi
			if [[ -f "${SRC_DIR}"/debian/${NAME}.${mansuffix} ]] ; then
				mkdir -p "$MAN_DIR"/man$mansuffix
				cp "$SRC_DIR"/debian/$NAME.$mansuffix "$MAN_DIR"/man$mansuffix
				FOUND_MANS=SRC_DIR/debian
			fi
			if [[ -f "${SRC_DIR}"/man${mansuffix}/${NAME}.${mansuffix} ]] ; then
				mkdir -p "$MAN_DIR"/man$mansuffix
				cp "$SRC_DIR"/man$mansuffix/$NAME.$mansuffix "$MAN_DIR"/man$mansuffix
				FOUND_MANS=SRC_DIR/man$mansuffix
			fi
			if [[ -f "$CWD"/${NAME}.${mansuffix} ]] ; then
				mkdir -p "$MAN_DIR"/man$mansuffix
				cp "$CWD"/$NAME.$mansuffix "$MAN_DIR"/man$mansuffix
				FOUND_MANS=CWD
			fi
			if [[ -f "$CWD"/Resources/${NAME}.${mansuffix} ]] ; then
				mkdir -p "$MAN_DIR"/man$mansuffix
				cp "$CWD"/Resources/$NAME.$mansuffix "$MAN_DIR"/man$mansuffix
				FOUND_MANS=Resources
			fi
			if [[ -f "$CWD"/patches/${NAME}.${mansuffix} ]] ; then
				mkdir -p "$MAN_DIR"/man$mansuffix
				cp "$CWD"/patches/$NAME.$mansuffix "$MAN_DIR"/man$mansuffix
				FOUND_MANS=patches
			fi
			if [[ -f "$PATCHES_DIR"/$NAME-patches/${NAME}.${mansuffix} ]] ; then
				mkdir -p "$MAN_DIR"/man$mansuffix
				cp "$PATCHES_DIR"/$NAME-patches/$NAME.$mansuffix "$MAN_DIR"/man$mansuffix
				FOUND_MANS=$NAME-patches
			fi
			# make one last ditch effort to find a man-page
			if [[ $(find "${SRC_DIR}" -name "*.${mansuffix}") ]] ; then
				for MAN in  $(find "${SRC_DIR}" -name "*.${mansuffix}") ; do
					if [[ $(file $MAN |grep troff) ]] ; then
						mkdir -p "$MAN_DIR"/man$mansuffix
						cp "$MAN" "$MAN_DIR"/man$mansuffix
						FOUND_MANS=SRC_DIR
					fi
				done
			fi
		done
		# lots of imake-type packages have .man pages, but we put them in man1
		if [[ -f "$SRC_DIR"/$NAME.man ]] ; then
				mkdir -p "$MAN_DIR"/man1
				cp "$SRC_DIR"/$NAME.man $MAN_DIR/man1/$NAME.1
				FOUND_MANS=SRC_DIR
		elif [[ -f "$SRC_DIR"/debian/$NAME.man ]] ; then
				mkdir -p "$MAN_DIR"/man1
				cp "$SRC_DIR"/debian/$NAME.man $MAN_DIR/man1/$NAME.1
				FOUND_MANS=SRC_DIR
		fi
		if [[ $FOUND_MANS ]] ; then
			echo $CYAN"   NOTICE - "$NORMAL"No man-pages installed by $MAKEFILE"
			echo $BLUE"Found man-pages in $FOUND_MANS -"$NORMAL" Installing in PKG_DIR"
		fi
	fi
	
	[[ $SAVE_SPACE -gt 0 ]] && MAN_COMPRESS="bzip2"
	
	case $MAN_COMPRESS in
		gzip*) MAN_COMPRESS_EXT=gz ;;
		bzip2*) MAN_COMPRESS_EXT=bz2 ;;
		lzma*) MAN_COMPRESS_EXT=lzma ;;
	esac
	# fix up any links to man-pages first
	if [[ -d "$MAN_DIR" ]]; then
		( cd "$MAN_DIR"
			for manpagedir in $(find * -type d -name "man*") ; do
				# this function is from 09-fix_pkg_perms
				replace_hardlinks $manpagedir
				( cd $manpagedir
				   for eachpage in $( find . -maxdepth 1 -type l) ; do
					TARGET_PAGE=$( readlink $eachpage )
					case $TARGET_PAGE in
						*.gz) BASE_TARGET=$(basename $TARGET_PAGE .gz) 
							BASE_LINK=$(basename $eachpage .gz) ;;
						*.bz2) BASE_TARGET=$(basename $TARGET_PAGE .bz2)
							BASE_LINK=$(basename $eachpage .bz2) ;;
						*.lzma) BASE_TARGET=$(basename $TARGET_PAGE .lzma)
							BASE_LINK=$(basename $eachpage .lzma) ;;
						*) BASE_TARGET=$TARGET_PAGE ; BASE_LINK=$eachpage ;;
					esac
					rm -f $eachpage
					ln -sf $BASE_TARGET.$MAN_COMPRESS_EXT $BASE_LINK.$MAN_COMPRESS_EXT
				   done
				)
			done
		)
	fi
	
	# decompress any already-compressed man-pages
	if [[ -d "$MAN_DIR" ]] ; then
	  echo -n $BLUE"Compressing man pages - "$NORMAL
	  cd "$MAN_DIR"
	  find . -name '*.gz' -a -type f -exec gunzip -f {} \; &> /dev/null
	  find . -name '*.bz2' -a -type f -exec bunzip2 -f {} \; &> /dev/null
	  find . -name '*.lzma' -a -type f -exec unlzma -f {} \; &> /dev/null
	  find . -name '*.xz' -a -type f -exec unxz -f {} \; &> /dev/null
	  find . -type f -exec chmod 644 {} \;
	  find . -type f -exec $MAN_COMPRESS -f {} \;  &> /dev/null && MANSCOMPRESSED=1
	  find . -type f -exec $MAN_COMPRESS {} \;  &> /dev/null && MANSCOMPRESSED=1
	  echo $GREEN"Done"$NORMAL
	fi
	if [[ -d "$INFO_DIR" ]] ; then
	  echo -n $BLUE"Compressing info pages - "$NORMAL
	  cd "$INFO_DIR"
	  find . -name '*.gz' -a -type f -exec gunzip -f {} \; &> /dev/null
	  find . -name '*.bz2' -a -type f -exec bunzip2 -f {} \; &> /dev/null
	  find . -name '*.lzma' -a -type f -exec unlzma -f {} \; &> /dev/null
	  find . -name '*.xz' -a -type f -exec unxz -f {} \; &> /dev/null
	  find . -type f -exec chmod 644 {} \;
	  find . -type f -exec $MAN_COMPRESS -f {} \;  &> /dev/null && MANSCOMPRESSED=1
	  echo $GREEN"Done"$NORMAL
	fi
	# double-check the perms on the newly-created compressed files and the links
	# check directory perms
	if [[ -d "$MAN_DIR" ]] ; then
		chmod 755 "$MAN_DIR"
		( cd "$MAN_DIR" ;
		find . -type d -exec chmod 755 {} \;
		find . -type f -exec chmod 644 {} \;
		)
	fi
	# check directory perms
	if [[ -d "$INFO_DIR" ]] ; then
		chmod 755 "$INFO_DIR"
		( cd "$INFO_DIR" ; find -type f -exec chmod 644 {} \; )
	fi
	if [[ $PAUSE = "AFTER" ]] || [[ $PAUSE = $FUNCNAME ]] ; then
		echo $MAGENTA"Notice - "$BLUE"Pausing after: "$NORMAL" '$FUNCNAME'  Press ENTER to continue"
		read
	fi
  fi
fi

if [[ $ALLOW_USER_EXTENSIONS = "YES" ]] ; then
 # check if the user has any post-execution extensions to this file and run them, if so.
 [[ -f "$HOME"/.src2pkg/extensions/12.post ]] && . "$HOME"/.src2pkg/extensions/12.post
fi

}
# end compress_man_pages
