aboutsummaryrefslogblamecommitdiff
path: root/configure
blob: 4563a9f5a9e290ff381d636c6c8477d345b9f8a3 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
           
                                                                                                                                                                      










                                                                      
           

















                                                                                    
                                                                                     
   
 
              












                                                                                                                                                         
    






























                                                                                                                         
                                        
    
                              
  
                                            
                                          
                            







                                                                                                      

                             






                                                                                                

                             
                                                              
  
 
                 
    
                                                              


               






                                                                           




                                
                                                                                                                                                                                                                                                                                                        



                               
                              
  
                                      





                     
                                        
  
                                                
   
 
                                                                      
#!/bin/bash

OPTS=`getopt -o "h" --long prefix:,enable-plugin:,disable-plugin:,valac:,valac-flags:,lib-suffix:,help,disable-fast-vapi,no-debug,fetch-only -n './configure' -- "$@"`
if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; exit 1 ; fi

eval set -- "$OPTS"

PREFIX=${PREFIX:-/usr/local}
VALA_EXECUTABLE=${VALA_EXECUTABLE:-$(which valac)}
ENABLED_PLUGINS=
DISABLED_PLUGINS=
VALAC_FLAGS=
DISABLE_FAST_VAPI=
LIB_SUFFIX=
NO_DEBUG=
FETCH_ONLY=

help() {
    cat << EOF
Usage:
  ./configure [OPTIONS]...

Options:
  -h, --help                 Print this help and exit
  --prefix=PREFIX            Prepend PREFIX to program installation paths. [$PREFIX]
  --lib-suffix=SUFFIX        Append SUFFIX to the directory name for libraries
  --no-debug                 Build without debug symbols

  --enable-plugin=PLUGIN     Enable compilation of plugin PLUGIN.
  --disable-plugin=PLUGIN    Disable compilation of plugin PLUGIN.

  --valac=VALAC              Use VALAC as Vala pre-compiler. [$VALA_EXECUTABLE]
  --valac-flags=FLAGS        Use FLAGS when invoking the vala compiler
  --disable-fast-vapi        Disable the usage of Vala compilers fast-vapi feature.

  --fetch-only               Only fetch the files required to run ./configure without
                             network access later and exit
EOF
}

while true; do
    case "$1" in
        --prefix ) PREFIX="$2"; shift; shift ;;
        --enable-plugin ) if [ "$ENABLED_PLUGINS" == "" ]; then ENABLED_PLUGINS="$2"; else ENABLED_PLUGINS="ENABLED_PLUGINS;$2"; fi; shift; shift ;;
        --disable-plugin ) if [ "$DISABLED_PLUGINS" == "" ]; then DISABLED_PLUGINS="$2"; else DISABLED_PLUGINS="DISABLED_PLUGINS;$2"; fi; shift; shift ;;
        --valac ) VALA_EXECUTABLE="$2"; shift; shift ;;
        --valac-flags ) VALAC_FLAGS="$2"; shift; shift ;;
        --lib-suffix ) LIB_SUFFIX="$2"; shift; shift ;;
        --disable-fast-vapi ) DISABLE_FAST_VAPI=yes; shift ;;
        --no-debug ) NO_DEBUG=yes; shift ;;
        --fetch-only ) FETCH_ONLY=yes; shift ;;
        -h | --help ) help; exit 0 ;;
        -- ) shift; break ;;
        * ) break ;;
    esac
done

if [ -d ".git" ]; then
    git submodule update --init 2>/dev/null
elif [ -x $(which git) ]; then
    tmp=0
    for i in $(cat .gitmodules | grep -n submodule | awk -F ':' '{print $1}') $(wc -l .gitmodules | awk '{print $1}'); do
        if ! [ $tmp -eq 0 ]; then
            name=$(cat .gitmodules | head -n $tmp | tail -n 1 | awk -F '"' '{print $2}')
            def=$(cat .gitmodules | head -n $i | tail -n $(($i-$tmp)) | awk -F ' ' '{print $1 $2 $3}')
            path=$(echo "$def" | grep '^path=' | awk -F '=' '{print $2}')
            url=$(echo "$def" | grep '^url=' | awk -F '=' '{print $2}')
            branch=$(echo "$def" | grep '^branch=' | awk -F '=' '{print $2}')

            if ! ls "$path"/* >/dev/null 2>/dev/null; then
                if ! [ -x $(which git) ]; then
                    echo "Failed retrieving missing files"
                    exit 5
                fi
                git clone "$url" "$path" 2>/dev/null
                if [[ "$branch" != "" ]]; then
                    pushd "$path" > /dev/null
                    git checkout "$branch" 2>/dev/null
                    popd > /dev/null
                fi
                echo "Submodule path '$path': checked out '$branch' (via git clone)"
            fi
        fi
        tmp=$i
    done
fi

if [[ "$FETCH_ONLY" == "yes" ]]; then exit 0; fi

if [ ! -x "$(which cmake 2>/dev/null)" ]
then
    echo "-!- CMake required."
    exit 1
fi

ninja_bin="$(which ninja-build 2>/dev/null)"
if ! [ -x "$ninja_bin" ]; then
    ninja_bin="$(which ninja 2>/dev/null)"
fi
if [ -x "$ninja_bin" ]; then
    ninja_version=$($ninja_bin --version 2>/dev/null)
    if [ $? -eq 0 ]; then
        echo "-- Found Ninja: $ninja_bin (found version \"$ninja_version\")"
        cmake_type="Ninja"
        exec_bin="$ninja_bin"
        exec_command="$exec_bin"
    elif [[ "/usr/sbin/ninja" == "$ninja_bin" ]]; then
        echo "-- Ninja at $ninja_bin is not usable. Did you install 'ninja' instead of 'ninja-build'?"
    fi
fi

if ! [ -x "$exec_bin" ]; then
    make_bin="$(which make 2>/dev/null)"
    if [ -x "$make_bin" ]; then
        echo "-- Found Make: $make_bin"
        cmake_type="Unix Makefiles"
        exec_bin="$make_bin"
        exec_command="$exec_bin"
        echo "--   Running with make. Using Ninja (ninja-build) might improve build experience."
    fi
fi

if ! [ -x "$exec_bin" ]; then
    echo "-!- No compatible build system (Ninja, Make) found."
    exit 4
fi


if [ -f ./build ]
then
    echo "-!- ./build file exists. ./configure can't continue"
    exit 2
fi

if [ -d build ]
then
    last_type=`cat build/.cmake_type`
    if [ "$cmake_type" != "$last_type" ]
    then
        echo "-- Using different build system, cleaning build system files"
        cd build
        rm -r CMakeCache.txt CMakeFiles
        cd ..
    fi
fi

mkdir -p build
cd build

echo "$cmake_type" > .cmake_type
cmake -G "$cmake_type" -DCMAKE_INSTALL_PREFIX="$PREFIX" -DENABLED_PLUGINS="$ENABLED_PLUGINS" -DDISABLED_PLUGINS="$DISABLED_PLUGINS" -DVALA_EXECUTABLE="$VALA_EXECUTABLE" -DCMAKE_VALA_FLAGS="$VALAC_FLAGS" -DDISABLE_FAST_VAPI="$DISABLE_FAST_VAPI" -DLIB_SUFFIX="$LIB_SUFFIX" -DNO_DEBUG="$NO_DEBUG" ..

if [ "$cmake_type" == "Ninja" ]
then
cat << EOF > Makefile
default:
	@sh -c "$exec_command"
%:
	@sh -c "$exec_command \"\$@\""
EOF
fi

cd ..

cat << EOF > Makefile
default:
	@sh -c "cd build; $exec_command"
%:
	@sh -c "cd build; $exec_command \"\$@\""
EOF

echo "-- Configured. Type 'make' to build, 'make install' to install."