#!/usr/bin/env bash # dvdisaster: Additional error correction for optical media. # Copyright (C) 2004-2018 Carsten Gnoerlich. # # Email: support@dvdisaster.org # # This file is part of dvdisaster. # # dvdisaster is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # dvdisaster is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with dvdisaster. If not, see . # Load the shell functions needed for the rest of this script. BASH_BASED_CONFIGURE=./scripts/bash-based-configure BASH_BASED_CONFIGURE_OPTS="--buildtmp=$(pwd)/build $@" REQUIRED_CFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -I. -pipe" RECOMMENDED_CFLAGS="-O2 -fomit-frame-pointer -Wall -Wno-unknown-warning-option -Wno-deprecated-declarations -Wno-stringop-truncation -Wno-format-zero-length" DEBUG_CFLAGS="-ggdb -Wall" if test -e $BASH_BASED_CONFIGURE; then source $BASH_BASED_CONFIGURE $BASH_BASED_CONFIGURE_OPTS else echo "Could not find $BASH_BASED_CONFIGURE" echo "You're probably not in the right directory." exit 1 fi # Set the package name and version PACKAGE dvdisaster 0.79.8 DEFINE_INT PATCHLEVEL 9 DEFINE_STRING HAVE_UNSTABLE_RELEASE 1 DEFINE_STRING HOMEPAGE "https://dvdisaster.jcea.es" # Check for some essential tools. REQUIRE_GMAKE REQUIRE_GCC # Find out and verify the basedir of the source installation, # and where to install the binary. GET_SRCDIR GNUmakefile.template GET_PKGNAME GET_PREFIX /usr/local GET_BINDIR GET_MANDIR GET_DOCDIR GET_DIR "$PKGNAME" docsub "Documentation sub"\ " put documentation into this subdirectory\n under \$DOCDIR " GET_LOCALEDIR GET_BUILDROOT GET_BUILDTMP PRINT_MESSAGE "\nDetermining build flavor:" # old way of specifying --with-cli-only if [ "$CLI_ONLY" = 1 ]; then cfg_with_cli_only=yes unset CLI_ONLY fi WITH_OPTION cli-only no "[yes | no]" # Remove the useless CLI console under windows if [[ $(uname) =~ MINGW ]] && [ "$cfg_with_cli_only" != "yes" ]; then CFG_LDFLAGS="$CFG_LDFLAGS -mwindows" fi # Look for required libraries PRINT_MESSAGE "\nLooking for includes and libraries:" REQUIRE_GLIB2 2 32 0 if test "$cfg_with_cli_only" != "yes"; then REQUIRE_GTK2 2 6 0 WITH_THREADS fi echo if ! CHECK_INCLUDE locale.h locale || ! CHECK_INCLUDE libintl.h intl ; then echo " [previous test forces -with-nls=no]" cfg_force_with_nls=no fi if CHECK_INCLUDE cpuid.h cpuid; then CFG_HAVE_OPTIONS="$CFG_HAVE_OPTIONS -DHAVE_CPUID" fi CHECK_LIBRARY intl gettext intl CHECK_LIBRARY cam cam_open_device cam # Look for required functions PRINT_MESSAGE "\nChecking for functions and symbols..." CHECK_FUNCTION mmap if ! CHECK_FUNCTION getopt_long ; then if ! test -e src/getopt.h || ! test -e src/getopt.c ; then echo " * getopt_long is missing. You can provide one by simply" echo " * copying getopt.c, getopt1.c and getopt.h from the GNU" echo " * C library into the src/ directory." exit 1 fi fi if ! CHECK_FUNCTION gettext ; then echo " [previous test forces -with-nls=no]" cfg_force_with_nls=no fi CHECK_FUNCTION round SAVE_CFLAGS=$CFG_CFLAGS CFG_CFLAGS="$CFG_CFLAGS -D_LARGEFILE64_SOURCE" CHECK_SYMBOL fcntl.h O_LARGEFILE CFG_CFLAGS=$SAVE_CFLAGS # Machine specific echo CHECK_ENDIAN CHECK_BITNESS CHECK_SSE2 CHECK_ALTIVEC # Look for required tools PRINT_MESSAGE "\nChecking for additional tools..." if ! EXECUTE_PROGRAM "xgettext --help" xgettext \ ||! EXECUTE_PROGRAM "msgmerge --help" msgmerge \ ||! EXECUTE_PROGRAM "msgfmt --help" msgfmt ; then echo "* You need to install the GNU gettext tools" echo "* for localization support." echo " [previous test forces -with-nls=no]" cfg_force_with_nls=no fi if test "$cfg_with_cli_only" != "yes"; then if ! EXECUTE_PROGRAM "gdk-pixbuf-csource --help" gdk_pixbuf_csource ; then echo "* gdk-pixbuf not installed" echo "* or path to gdk-pixbuf-csource is missing." exit 1 fi fi # Evaluate the --with* customization options PRINT_MESSAGE "\nAdditional configuration options:" WITH_OPTION nls yes "[yes | no]" WITH_OPTION embedded-src-path yes "[yes | no]" PRINT_MESSAGE "\nDebugging options (do not use in production system):" WITH_OPTION memdebug no "[no | yes]" WITH_OPTION debug-printf-format no "[no | yes]" WITH_OPTION werror no "[no | yes]" if test "$cfg_with_debug_printf_format" == "yes"; then # don't use the binary compiled with this, # it's only useful to properly get all the build-time # warnings around printf-errors, that are otherwise # not catched by the compiler because of the _() macro DEFINE_STRING DEBUG_PRINTF_FORMAT 1 else # warnings given by -Wformat-security are bogus because of _(), # see above comment if you actually want to check for format errors CFG_CFLAGS="$CFG_CFLAGS -Wno-format-security" fi if test "$cfg_with_werror" == "yes"; then CFG_CFLAGS="$CFG_CFLAGS -Werror" fi if test "$cfg_with_efence" == "yes"; then if ! CHECK_LIBRARY efence malloc efence; then exit 1; fi fi # -------------- end of manual configuration -------------------- # Do not proceed further if in --help mode if test -n "$cfg_help_mode"; then FINALIZE_HELP exit 0 fi # Fetch the source files and build the CFILES/OFILES list PRINT_MESSAGE "\nCollecting source files:" rm -f src/conftest.c src/method-link.c cfiles="src/method-link.c" ofiles="$BUILDTMP/method-link.o" for cfile in src/*.c; do if test "$cfg_with_cli_only" == "yes"; then grep -q 'DVDISASTER_GUI_FILE' "$cfile" && continue fi cfile_prefix=`echo $cfile | sed -e 's/\.c//'` cfiles="$cfiles $cfile" ofiles="$ofiles $BUILDTMP/$(basename $cfile_prefix.o)" echo -n " $cfile_prefix" done echo echo -e "\nCFG_CFILES = $cfiles" >> Makefile.config echo "CFG_OFILES = $ofiles" >> Makefile.config if test "$cfg_with_cli_only" != "yes"; then echo "ICONS = src/inlined-icons.h" >> Makefile.config fi # Create the method wrapper PRINT_MESSAGE "\nCollecting methods:" cat >> src/method-link.c <> src/method-link.c done echo >> src/method-link.c for method in $method_prefix; do echo " register_${method}();" >> src/method-link.c done echo "}" >> src/method-link.c echo # Okay, hopefully we've got everything together now. (cd locale; bash create-makefile) CREATE_MAKEFILES GNUmakefile # Okay, tell the user we're done and how to proceed. echo echo "Configuration is complete." echo "Type 'make show' to verify the settings," echo "or enter 'make' to start the build immediately." echo if test -n "$CFLAGS"; then echo "* Note that your \$CFLAGS=$CFLAGS" echo "* have been included into the configuration." echo "* It is recommended not to specify additional \$CFLAGS," echo "* but feel free to continue at your own risk." echo fi if test -n "$LDFLAGS"; then echo "* Note that your \$LDFLAGS=$LDFLAGS" echo "* have been included into the configuration." echo "* It is recommended not to specify additional \$LDFLAGS," echo "* but feel free to continue at your own risk." echo fi if test -n "$BUILDROOT"; then echo "* Note that installation will be done relative to" echo "* \$BUILDROOT=$BUILDROOT." echo "* This is okay if you want to create packages like rpm or" echo "* debian archives." echo "* Normal installs will be broken by setting --buildroot." echo fi id_binary="id" if test `$id_binary -u` -eq 0; then echo "* WARNING: Compiling the project as ROOT USER is not recommended" echo "* and may cause unexpected problems. If compilation fails" echo "* please delete the source archive, unpack it anew and" echo "* try again as ordinary user." echo "* Installing the package as root is okay, of course." fi