aboutsummaryrefslogtreecommitdiff
path: root/configure
blob: 425d9528fce0b62d4d3acd7c44566f1a8017a2af (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/bin/bash

OPTS=`getopt -o "h" --long prefix:,enable-plugin:,disable-plugin:,valac:,valac-flags:,lib-suffix:,help,disable-fast-vapi,no-debug -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=

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.

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 ;;
    -h | --help ) help; exit 0 ;;
    -- ) shift; break ;;
    * ) break ;;
  esac
done

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

# TODO don't use git submodule
git submodule update --init --recursive

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."