Codebase list fractalnow / 2bed886c-f678-4269-8efb-ff75eb01add5/main configure
2bed886c-f678-4269-8efb-ff75eb01add5/main

Tree @2bed886c-f678-4269-8efb-ff75eb01add5/main (Download .tar.gz)

configure @2bed886c-f678-4269-8efb-ff75eb01add5/mainraw · history · blame

#!/bin/bash

version_number="0.8.2"

win32=`uname -o | grep -i "msys\|cygwin\|mingw"`
if test -n "${win32}"; then
	echo "Windows system detected."
	binary_extension=".exe"
	prefix="install_dir"
else
	binary_extension=
	prefix="/usr/local"
fi
debug=
no_spinlock=
use_builtin_complex=
qt_debug_char=

project_pretty_name="FractalNow"
project_name="fractalnow"

bin_dir="bin"

lib_dir="lib"
lib_pretty_name="libFractalNow"
lib_name="fractalnow"
lib_bin="lib${lib_name}.a"

command_line_dir="command-line"
command_line_pretty_name="FractalNow"
command_line_name="fractalnow"
command_line_bin="${command_line_name}${binary_extension}"

gui_dir="gui"
gui_pretty_name="QFractalNow"
gui_name="qfractalnow"
gui_bin="${gui_name}${binary_extension}"
gui_pro_file="${gui_name}.pro"
gui_icons_dir="${gui_dir}/icons"

doc_dir="doc"
examples_dir="examples"

generate_samples_script="generate_samples.sh"

usage="Usage: configure [-prefix DIR] [-debug] [-no-spinlock]

Options:

  -prefix DIR              Set the instalation directory to DIR (default: ${prefix})
  -debug                   Build with debugging symbols
  -no-spinlock             Disable POSIX spinlocks (use mutexes only)
  -use-builtin-complex     Use builtin complex instead of standard C99 complex
"

while test $# -gt 0; do
	case "$1" in
	"-prefix" )
		prefix="$2"
		shift ; shift
		;;
	"-debug" )
		debug="-debug"
		shift
		;;
	"-use-builtin-complex" )
		use_builtin_complex="-use-builtin-complex"
		shift
		;;
	"-no-spinlock" )
		no_spinlock="-no-spinlock"
		shift
		;;
	"-help" | "--help" )
		echo "$usage"
		exit
		;;
	*)
		echo "*** ERROR: Unrecognized option '$1'" >&2
		echo "$usage"
		exit 1
		;;
	esac
done

if test -n "${debug}"; then
	qt_debug_char='d';
fi

if test -n "${use_builtin_complex}"; then
	builtin_complex_define="_USE_BUILTIN_COMPLEX"
else
	builtin_complex_define=""
fi

if test -n "${no_spinlock}"; then
	spinlock_define="NO_SPINLOCK"
else
	spinlock_define="_POSIX_C_SOURCE=200809L"
fi

if test -n "${no_mp_floats}"; then
	mp_floats_define=""
else
	mp_floats_define="_ENABLE_MP_FLOATS"
fi

if test -n "${no_ldouble_floats}"; then
	ldouble_floats_define=""
else
	ldouble_floats_define="_ENABLE_LDOUBLE_FLOATS"
fi

is_absolute=`echo "${prefix}" | grep '^/'`
if test -z "${is_absolute}"; then
	system_pwd="`which pwd`"
	prefix="`\"${system_pwd}\"`/${prefix}"
fi;

echo "Prefix: '${prefix}'"
if test -n "${debug}"; then
	echo "Debug: yes"
else
	echo "Debug: no"
fi

if test -n "${use_builtin_complex}"; then
	echo "Standard C99 complex: no (builtin)"
else
	echo "Standard C99 complex: yes"
fi

if test -n "${no_spinlock}"; then
	echo "Spin locks: no"
else
	echo "Spin locks: yes"
fi

echo "Testing for qmake..."

if qmake -qt5 -v &>/dev/null; then
	qt_version=`qmake -query QT_VERSION`
	echo "Found qmake (Qt ${qt_version})"
	major=`echo $qt_version | sed -e "s/\([0-9][0-9]*\).*/\1/"`
	minor=`echo $qt_version | sed -e "s/[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/"`
	if test ${major} -ne 5 -o ${minor} -lt 0; then
		echo "*** ERROR: ${gui_pretty_name} requires Qt 5.0 or greater."
		exit 1
	fi;
else
	echo "*** ERROR: qmake not found. Install qmake and make sure it is in your PATH." >&2
	exit 1
fi;

if test -n "${win32}"; then
	which_qmake=`which qmake 2>/dev/null`
	if test -n "${which_qmake}"; then
		qt_bin_dir=`dirname "${which_qmake}"`
		qtcore4=`ls "${qt_bin_dir}" | grep "QtCore${qt_debug_char}4\.dll"`
		if test -f "${qt_bin_dir}/${qtcore4}"; then
			qtcore4_dll="${qtcore4}"
			echo "Found '${qtcore4_dll}'."
		fi;
		qtgui4=`ls "${qt_bin_dir}" | grep "QtGui${qt_debug_char}4\.dll"`
		if test -f "${qt_bin_dir}/${qtgui4}"; then
			qtgui4_dll="${qtgui4}"
			echo "Found '${qtgui4_dll}'."
		fi;
	fi
fi

#Used for common part of Makefiles
config="VERSION_NUMBER = ${version_number}
DEBUG = ${debug}
BUILTIN_COMPLEX_DEFINE = ${builtin_complex_define}
SPINLOCK_DEFINE = ${spinlock_define}
MP_FLOATS_DEFINE = ${mp_floats_define}
LDOUBLE_FLOATS_DEFINE = ${ldouble_floats_define}
quiet-command = "'$(if $(VERB),$1,$(if $(2),@echo $2 && $1, @$1))
'

#Generate lib Makefile
echo "Generating library Makefile..."
echo "${config}
TARGET_NAME = ${lib_bin}
"> "${lib_dir}/Makefile"
cat "${lib_dir}/Makefile.configure" >> "${lib_dir}/Makefile"

#Generate command-line Makefile
echo "Generating command-line Makefile..."
echo "${config}
TARGET_NAME = ${command_line_name}
FRACTAL2D_LIB = ${lib_name}
" > "${command_line_dir}/Makefile"
cat "${command_line_dir}/Makefile.configure" >> "${command_line_dir}/Makefile"

#Generate gui qmake project file
echo "Generating gui qmake project file..."
echo "${config}
TARGET_NAME = ${gui_name}
FRACTAL2D_LIB = ${lib_name}
" > "${gui_dir}/${gui_pro_file}"
cat "${gui_dir}/${gui_pro_file}.configure" >> "${gui_dir}/${gui_pro_file}"

#Run qmake
echo "Running qmake..."
qmake -qt5 -makefile "${gui_dir}/${gui_pro_file}" -o "${gui_dir}/Makefile" 2>/dev/null
if test $? -ne 0; then
	echo "*** ERROR: Running qmake failed."
	exit 1
fi;

#Generate main Makefile
echo "Generating main Makefile..."
#Set variables for installing/uninstalling
echo "${config}
PROJECT_NAME = ${project_name}
LIB_DIR = ${lib_dir}
BIN_DIR = ${bin_dir}
COMMAND_LINE_DIR = ${command_line_dir}
COMMAND_LINE_NAME = ${command_line_name}
COMMAND_LINE_BINARY = ${command_line_bin}
GUI_DIR = ${gui_dir}
GUI_NAME = ${gui_name}
GUI_BINARY = ${gui_bin}
GUI_ICONS_DIR = ${gui_icons_dir}
GUI_PRO_FILE = ${gui_pro_file}
DOC_DIR = ${doc_dir}
EXAMPLES_DIR = ${examples_dir}
GENERATE_SAMPLES_SCRIPT = ${generate_samples_script}
PREFIX = ${prefix}" > Makefile

#Set specific variable for installing Qt DLLs on WIndows
if test -n "${win32}"; then
echo "
GNU_BIN_DIR = ${gnu_bin_dir}
QT_BIN_DIR = ${qt_bin_dir}
QTCORE4_DLL = ${qtcore4_dll}
QTGUI4_DLL = ${qtgui4_dll}" >> Makefile
fi

#Define main commands to installing/uninstalling
cat Makefile.configure >> Makefile

if test -z "${win32}"; then
	echo 'install: all
	$(CHK_DIR_EXISTS) "${PREFIX}/bin" || $(MKDIR) "${PREFIX}/bin"
	$(INSTALL_PROGRAM) "${COMMAND_LINE_DIR}/${BIN_DIR}/${COMMAND_LINE_BINARY}" "${PREFIX}/bin/"
	$(INSTALL_PROGRAM) "${GUI_DIR}/${BIN_DIR}/${GUI_BINARY}" "${PREFIX}/bin/"' >> Makefile
	if test -z "${debug}"; then
		echo '	$(STRIP_BINARY) "${PREFIX}/bin/${COMMAND_LINE_BINARY}"' >> Makefile
		echo '	$(STRIP_BINARY) "${PREFIX}/bin/${GUI_BINARY}"' >> Makefile
	fi
	echo '	$(CHK_DIR_EXISTS) "${PREFIX}/share/doc/${PROJECT_NAME}" || $(MKDIR) "${PREFIX}/share/doc/${PROJECT_NAME}"
	$(INSTALL_DIR) "${DOC_DIR}/." "${PREFIX}/share/doc/${PROJECT_NAME}/"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/${PROJECT_NAME}" || $(MKDIR) "${PREFIX}/share/${PROJECT_NAME}"
	cd "${PREFIX}/share/${PROJECT_NAME}" && $(SYMLINK) "../doc/${PROJECT_NAME}" "${DOC_DIR}" && (cd - >/dev/null)
	$(INSTALL_DIR) "${EXAMPLES_DIR}" "${PREFIX}/share/${PROJECT_NAME}/"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/${PROJECT_NAME}/${BIN_DIR}" || $(MKDIR) "${PREFIX}/share/${PROJECT_NAME}/${BIN_DIR}"
	cd "${PREFIX}/share/${PROJECT_NAME}/${BIN_DIR}" && $(SYMLINK) "../../../bin/${COMMAND_LINE_BINARY}" && (cd - >/dev/null)
	cd "${PREFIX}/share/${PROJECT_NAME}/${BIN_DIR}" && $(SYMLINK) "../../../bin/${GUI_BINARY}" && (cd - >/dev/null)
	$(INSTALL_PROGRAM) "${GENERATE_SAMPLES_SCRIPT}" "${PREFIX}/share/${PROJECT_NAME}/"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/icons/hicolor/16x16/apps" || $(MKDIR) "${PREFIX}/share/icons/hicolor/16x16/apps"
	$(INSTALL_FILE) "${GUI_ICONS_DIR}/icon16x16.png" "${PREFIX}/share/icons/hicolor/16x16/apps/${GUI_NAME}.png"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/icons/hicolor/22x22/apps" || $(MKDIR) "${PREFIX}/share/icons/hicolor/22x22/apps"
	$(INSTALL_FILE) "${GUI_ICONS_DIR}/icon22x22.png" "${PREFIX}/share/icons/hicolor/22x22/apps/${GUI_NAME}.png"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/icons/hicolor/24x24/apps" || $(MKDIR) "${PREFIX}/share/icons/hicolor/24x24/apps"
	$(INSTALL_FILE) "${GUI_ICONS_DIR}/icon24x24.png" "${PREFIX}/share/icons/hicolor/24x24/apps/${GUI_NAME}.png"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/icons/hicolor/32x32/apps" || $(MKDIR) "${PREFIX}/share/icons/hicolor/32x32/apps"
	$(INSTALL_FILE) "${GUI_ICONS_DIR}/icon32x32.png" "${PREFIX}/share/icons/hicolor/32x32/apps/${GUI_NAME}.png"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/icons/hicolor/36x36/apps" || $(MKDIR) "${PREFIX}/share/icons/hicolor/36x36/apps"
	$(INSTALL_FILE) "${GUI_ICONS_DIR}/icon36x36.png" "${PREFIX}/share/icons/hicolor/36x36/apps/${GUI_NAME}.png"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/icons/hicolor/48x48/apps" || $(MKDIR) "${PREFIX}/share/icons/hicolor/48x48/apps"
	$(INSTALL_FILE) "${GUI_ICONS_DIR}/icon48x48.png" "${PREFIX}/share/icons/hicolor/48x48/apps/${GUI_NAME}.png"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/icons/hicolor/64x64/apps" || $(MKDIR) "${PREFIX}/share/icons/hicolor/64x64/apps"
	$(INSTALL_FILE) "${GUI_ICONS_DIR}/icon64x64.png" "${PREFIX}/share/icons/hicolor/64x64/apps/${GUI_NAME}.png"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/icons/hicolor/72x72/apps" || $(MKDIR) "${PREFIX}/share/icons/hicolor/72x72/apps"
	$(INSTALL_FILE) "${GUI_ICONS_DIR}/icon72x72.png" "${PREFIX}/share/icons/hicolor/72x72/apps/${GUI_NAME}.png"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/icons/hicolor/96x96/apps" || $(MKDIR) "${PREFIX}/share/icons/hicolor/96x96/apps"
	$(INSTALL_FILE) "${GUI_ICONS_DIR}/icon96x96.png" "${PREFIX}/share/icons/hicolor/96x96/apps/${GUI_NAME}.png"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/icons/hicolor/128x128/apps" || $(MKDIR) "${PREFIX}/share/icons/hicolor/128x128/apps"
	$(INSTALL_FILE) "${GUI_ICONS_DIR}/icon128x128.png" "${PREFIX}/share/icons/hicolor/128x128/apps/${GUI_NAME}.png"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/icons/hicolor/192x192/apps" || $(MKDIR) "${PREFIX}/share/icons/hicolor/192x192/apps"
	$(INSTALL_FILE) "${GUI_ICONS_DIR}/icon192x192.png" "${PREFIX}/share/icons/hicolor/192x192/apps/${GUI_NAME}.png"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/icons/hicolor/256x256/apps" || $(MKDIR) "${PREFIX}/share/icons/hicolor/256x256/apps"
	$(INSTALL_FILE) "${GUI_ICONS_DIR}/icon256x256.png" "${PREFIX}/share/icons/hicolor/256x256/apps/${GUI_NAME}.png"
	$(CHK_DIR_EXISTS) "${PREFIX}/share/pixmaps" || $(MKDIR) "${PREFIX}/share/pixmaps"
	$(INSTALL_FILE) "${GUI_ICONS_DIR}/icon.xpm" "${PREFIX}/share/pixmaps/${GUI_NAME}.xpm"
	cd "${PREFIX}/share/pixmaps" && $(SYMLINK) "../icons/hicolor/256x256/apps/${GUI_NAME}.png" && (cd - >/dev/null)
	$(CHK_DIR_EXISTS) "${PREFIX}/share/applications" || $(MKDIR) "${PREFIX}/share/applications"
	$(INSTALL_FILE) "${GUI_DIR}/${GUI_NAME}.desktop" "${PREFIX}/share/applications/"

uninstall:
	$(DEL_FILE) "${PREFIX}/bin/${COMMAND_LINE_BINARY}"
	$(DEL_FILE) "${PREFIX}/bin/${GUI_BINARY}"
	$(DEL_EMPTY_DIR) "${PREFIX}/bin"
	$(DEL_DIR) "${PREFIX}/share/doc/${PROJECT_NAME}"
	$(DEL_EMPTY_DIR) "${PREFIX}/share/doc"
	$(DEL_FILE) "${PREFIX}/share/${PROJECT_NAME}/${DOC_DIR}"
	$(DEL_DIR) "${PREFIX}/share/${PROJECT_NAME}/${EXAMPLES_DIR}"
	$(DEL_FILE) "${PREFIX}/share/${PROJECT_NAME}/${BIN_DIR}/${COMMAND_LINE_BINARY}"
	$(DEL_FILE) "${PREFIX}/share/${PROJECT_NAME}/${BIN_DIR}/${GUI_BINARY}"
	$(DEL_EMPTY_DIR) "${PREFIX}/share/${PROJECT_NAME}/${BIN_DIR}"
	$(DEL_FILE) "${PREFIX}/share/${PROJECT_NAME}/${GENERATE_SAMPLES_SCRIPT}"
	$(DEL_EMPTY_DIR) "${PREFIX}/share/${PROJECT_NAME}"
	$(DEL_FILE) "${PREFIX}/share/icons/hicolor/16x16/apps/${GUI_NAME}.png"
	$(DEL_EMPTY_DIR) -p "${PREFIX}/share/icons/hicolor/16x16/apps"
	$(DEL_FILE) "${PREFIX}/share/icons/hicolor/22x22/apps/${GUI_NAME}.png"
	$(DEL_EMPTY_DIR) -p "${PREFIX}/share/icons/hicolor/22x22/apps"
	$(DEL_FILE) "${PREFIX}/share/icons/hicolor/24x24/apps/${GUI_NAME}.png"
	$(DEL_EMPTY_DIR) -p "${PREFIX}/share/icons/hicolor/24x24/apps"
	$(DEL_FILE) "${PREFIX}/share/icons/hicolor/32x32/apps/${GUI_NAME}.png"
	$(DEL_EMPTY_DIR) -p "${PREFIX}/share/icons/hicolor/32x32/apps"
	$(DEL_FILE) "${PREFIX}/share/icons/hicolor/36x36/apps/${GUI_NAME}.png"
	$(DEL_EMPTY_DIR) -p "${PREFIX}/share/icons/hicolor/36x36/apps"
	$(DEL_FILE) "${PREFIX}/share/icons/hicolor/48x48/apps/${GUI_NAME}.png"
	$(DEL_EMPTY_DIR) -p "${PREFIX}/share/icons/hicolor/48x48/apps"
	$(DEL_FILE) "${PREFIX}/share/icons/hicolor/64x64/apps/${GUI_NAME}.png"
	$(DEL_EMPTY_DIR) -p "${PREFIX}/share/icons/hicolor/64x64/apps"
	$(DEL_FILE) "${PREFIX}/share/icons/hicolor/72x72/apps/${GUI_NAME}.png"
	$(DEL_EMPTY_DIR) -p "${PREFIX}/share/icons/hicolor/72x72/apps"
	$(DEL_FILE) "${PREFIX}/share/icons/hicolor/96x96/apps/${GUI_NAME}.png"
	$(DEL_EMPTY_DIR) -p "${PREFIX}/share/icons/hicolor/96x96/apps"
	$(DEL_FILE) "${PREFIX}/share/icons/hicolor/128x128/apps/${GUI_NAME}.png"
	$(DEL_EMPTY_DIR) -p "${PREFIX}/share/icons/hicolor/128x128/apps"
	$(DEL_FILE) "${PREFIX}/share/icons/hicolor/192x192/apps/${GUI_NAME}.png"
	$(DEL_EMPTY_DIR) -p "${PREFIX}/share/icons/hicolor/192x192/apps"
	$(DEL_FILE) "${PREFIX}/share/icons/hicolor/256x256/apps/${GUI_NAME}.png"
	$(DEL_EMPTY_DIR) -p "${PREFIX}/share/icons/hicolor/256x256/apps"
	$(DEL_FILE) "${PREFIX}/share/applications/${GUI_NAME}.desktop"
	$(DEL_EMPTY_DIR) "${PREFIX}/share/applications"
	$(DEL_FILE) "${PREFIX}/share/pixmaps/${GUI_NAME}.xpm"
	$(DEL_FILE) "${PREFIX}/share/pixmaps/${GUI_NAME}.png"
	$(DEL_EMPTY_DIR) -p "${PREFIX}/share/pixmaps"
' >> Makefile
else
	echo 'install: all
	$(CHK_DIR_EXISTS) "${PREFIX}/${PROJECT_NAME}" || $(MKDIR) "${PREFIX}/${PROJECT_NAME}"
	$(INSTALL_PROGRAM) "${COMMAND_LINE_DIR}/${BIN_DIR}/${COMMAND_LINE_BINARY}" "${PREFIX}/${PROJECT_NAME}/"
	$(INSTALL_PROGRAM) "${GUI_DIR}/${BIN_DIR}/${GUI_BINARY}" "${PREFIX}/${PROJECT_NAME}/"' >> Makefile
	if test -z "${debug}"; then
		echo '	$(STRIP_BINARY) "${PREFIX}/${PROJECT_NAME}/${COMMAND_LINE_BINARY}"' >> Makefile
		echo '	$(STRIP_BINARY) "${PREFIX}/${PROJECT_NAME}/${GUI_BINARY}"' >> Makefile
	fi
	echo '	$(INSTALL_PROGRAM) "${GENERATE_SAMPLES_SCRIPT}" "${PREFIX}/${PROJECT_NAME}/"
	$(INSTALL_DIR) "${DOC_DIR}" "${PREFIX}/${PROJECT_NAME}/"
	$(INSTALL_DIR) "${EXAMPLES_DIR}" "${PREFIX}/${PROJECT_NAME}/"' >> Makefile
	if test -n "${qtcore4_dll}"; then
		echo '	$(INSTALL_FILE) "${QT_BIN_DIR}/${QTCORE4_DLL}" "${PREFIX}/${PROJECT_NAME}/"' >> Makefile
	fi
	if test -n "${qtgui4_dll}"; then
		echo '	$(INSTALL_FILE) "${QT_BIN_DIR}/${QTGUI4_DLL}" "${PREFIX}/${PROJECT_NAME}/"' >> Makefile
	fi
	echo '	$(INSTALL_FILE) "ChangeLog" "${PREFIX}/${PROJECT_NAME}/"' >> Makefile
	echo '	$(INSTALL_FILE) "README" "${PREFIX}/${PROJECT_NAME}/"' >> Makefile

	echo '
uninstall:
	$(DEL_FILE) "${PREFIX}/${PROJECT_NAME}/${COMMAND_LINE_BINARY}"
	$(DEL_FILE) "${PREFIX}/${PROJECT_NAME}/${GUI_BINARY}"
	$(DEL_FILE) "${PREFIX}/${PROJECT_NAME}/${GENERATE_SAMPLES_SCRIPT}"
	$(DEL_DIR) "${PREFIX}/${PROJECT_NAME}/${DOC_DIR}"
	$(DEL_DIR) "${PREFIX}/${PROJECT_NAME}/${EXAMPLES_DIR}"' >> Makefile
	if test -n "${qtcore4_dll}"; then
		echo '	$(DEL_FILE) "${PREFIX}/${PROJECT_NAME}/${QTCORE4_DLL}"' >> Makefile
	fi
	if test -n "${qtgui4_dll}"; then
		echo '	$(DEL_FILE) "${PREFIX}/${PROJECT_NAME}/${QTGUI4_DLL}"' >> Makefile
	fi
	echo '	$(DEL_FILE) "${PREFIX}/${PROJECT_NAME}/ChangeLog"' >> Makefile
	echo '	$(DEL_FILE) "${PREFIX}/${PROJECT_NAME}/README"' >> Makefile
	echo '	$(DEL_EMPTY_DIR) "${PREFIX}/${PROJECT_NAME}"' >> Makefile
	echo '	$(DEL_EMPTY_DIR) "${PREFIX}"' >> Makefile
fi

echo "#!/bin/bash

./configure -prefix \"${prefix}\" "${debug}" "${no_spinlock}" "${use_builtin_complex}"
" > config.status
chmod +x config.status >/dev/null

echo "Configure finished. Run 'make' to build ${project_pretty_name} and 'make install' to install it."
if test -n "${win32}"; then
	echo "You might need to add some DLLs manually to complete install."
fi;