80c248b8089a3bcfa149933c0fe85b211558b02e
[vlc.git] / extras / tools / bootstrap
1 #!/bin/sh
2 # Copyright © 2011 Rafaël Carré
3 #
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 2 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
17
18 export LC_ALL=
19 NEEDED=
20
21 if [ ! -f tools.mak ]
22 then
23         echo "You must run me in ./extras/tools !"
24         exit 1
25 fi
26
27 check_version() {
28     gotver=$2
29     gotmajor=`echo $gotver|cut -d. -f1`
30     gotminor=`echo $gotver|cut -d. -f2`
31     gotmicro=`echo $gotver|cut -d. -f3`
32     [ -z "$gotmicro" ] && gotmicro=0
33     needmajor=`echo $3|cut -d. -f1`
34     needminor=`echo $3|cut -d. -f2`
35     needmicro=`echo $3|cut -d. -f3`
36     [ -z "$needmicro" ] && needmicro=0
37     if [ "$needmajor" -ne "$gotmajor" \
38          -o "$needmajor" -eq "$gotmajor" -a "$needminor" -gt "$gotminor" \
39          -o "$needmajor" -eq "$gotmajor" -a "$needminor" -eq "$gotminor" -a "$needmicro" -gt "$gotmicro" ]
40     then
41         echo "$1 too old"
42         NEEDED="$NEEDED .$1"
43     fi
44
45 }
46
47 check_version_majmin() {
48     gotver=$2
49     gotmajor=`echo $gotver|cut -d. -f1`
50     gotminor=`echo $gotver|cut -d. -f2`
51     needmajor=`echo $3|cut -d. -f1`
52     needminor=`echo $3|cut -d. -f2`
53     if [ "$needmajor" -ne "$gotmajor" \
54          -o "$needminor" -ne "$gotminor" ]
55     then
56         echo "$1 not compatible"
57         NEEDED="$NEEDED .$1"
58     fi
59
60 }
61
62 check_tar() {
63 if ! tar PcJ /dev/null >/dev/null 2>&1 && ! tar PcJf /dev/null /dev/null 2>&1
64 then
65     echo "tar doesn't support xz (J option)"
66     NEEDED="$NEEDED .tar .xz"
67 fi
68 }
69
70 check_sed() {
71 tmp="`pwd`/check_sed"
72 trap "rm \"$tmp\" \"$tmp-e\" 2>/dev/null" EXIT
73 echo "test file for GNU sed" > $tmp
74 if ! sed -i -e 's/sed//' $tmp >/dev/null 2>&1
75 then
76     echo "sed doesn't do in-place editing (-i option)"
77     NEEDED="$NEEDED .sed"
78 fi
79 }
80
81 check_nasm() {
82 if ! nasm -v >/dev/null 2>&1
83 then
84     echo "nasm not found"
85     NEEDED="$NEEDED .nasm"
86 else
87     # found, need to check version ?
88     [ -z "$1" ] && return # no
89     gotver=`nasm -v | cut -d ' ' -f 3`
90     check_version nasm $gotver $1
91 fi
92 }
93
94 check() {
95 if ! $1 --version >/dev/null 2>&1 && ! $1 -version >/dev/null 2>&1
96 then
97     echo "$1 not found"
98     NEEDED="$NEEDED .$1"
99 else
100     # found, need to check version ?
101     [ -z "$2" ] && return # no
102     gotver=`$1 --version | head -1 | sed s/'.* '//`
103     check_version $1 $gotver $2
104 fi
105 }
106
107 check_majmin() {
108 if ! $1 --version >/dev/null 2>&1 && ! $1 -version >/dev/null 2>&1 && ! $1 --version 2>/dev/null
109 then
110     echo "$1 not found"
111     NEEDED="$NEEDED .$1"
112 else
113     # found, need to check version ?
114     [ -z "$2" ] && return # no
115     gotver=`$1 --version | head -1 | sed s/'.* '//`
116     check_version_majmin $1 $gotver $2
117 fi
118 }
119
120 check autoconf 2.69
121 check automake 1.15
122 check m4 1.4.16
123 check libtool 2.4
124 check pkg-config
125 check cmake 3.8.2
126 check yasm
127 check_tar
128 check ragel
129 check_sed
130 check_majmin protoc 3.1.0
131 check ant
132 check xz
133 check bison 3.0.0
134 check flex
135 check_nasm 2.13.01
136 check gettext
137
138 [ -n "$NEEDED" ] && mkdir -p build/ && echo "To-be-built packages: `echo $NEEDED | sed 's/\.//g'`"
139
140 CPUS=
141 case `uname` in
142     Linux|MINGW32*|MINGW64*)
143         CPUS=`getconf _NPROCESSORS_ONLN 2>&1`
144      ;;
145     Darwin|FreeBSD|NetBSD)
146         CPUS=`getconf NPROCESSORS_ONLN 2>&1`
147     ;;
148     OpenBSD)
149         CPUS=`sysctl -n hw.ncpu 2>&1`
150     ;;
151     SunOS)
152         CPUS=`psrinfo | wc -l 2>&1`
153     ;;
154     *)
155         CPUS=1  # default
156      ;;
157 esac
158
159
160 cat > Makefile << EOF
161 MAKEFLAGS += -j$CPUS
162 CMAKEFLAGS += --parallel=$CPUS
163 PREFIX=\$(abspath ./build)
164
165 all: $NEEDED
166         @echo "You are ready to build VLC and its contribs"
167
168 include tools.mak
169 EOF