#!/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;