2.1.2 : Le script d'installation du projet



Nous allons voir dans cette section comment écrire le fichier install.sh à la racine du projet :

Ceci est in script bash classique pour compiler un projet :
1
#!/bin/bash
Faisons un petit test, afin d'avoir une compilation multi coeurs même sur mac :
1
2
3
4
5
if [[ "$OSTYPE" == "darwin"* ]]; then
	export nbproc=`sysctl -n hw.physicalcpu`
else
	export nbproc=`nproc`	
fi
Il est toujours utile de permettre à l'utilisateur de changer de prefix d'installation. Et nous ajoutons une petite partie pour les utilisateurs de anaconda. Si une variable CONDA_PREFIX ou CONDA_ENV_PATH existe, alors, nous somme dans un environnement anaconda et nous installerons notre projet dans celui-ci :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
INSTALL_PREFIX="$1"

if [ -z "$1" ]
then
	if [ -z ${CONDA_ENV_PATH} ]
	then
		if [ -z ${CONDA_PREFIX} ]
		then
			INSTALL_PREFIX="$HOME/usr"
		else
			INSTALL_PREFIX=${CONDA_PREFIX}
		fi
	else
		INSTALL_PREFIX=${CONDA_ENV_PATH}
	fi
fi

export PATH=${INSTALL_PREFIX}/bin:${PATH}
export LD_LIBRARY_PATH=${INSTALL_PREFIX}/lib:${LD_LIBRARY_PATH}
export DYLD_LIBRARY_PATH=${INSTALL_PREFIX}/lib:${DYLD_LIBRARY_PATH}
De la même façon que l'approche manuelle, nous supprimons le dossier build si il existe déjà et nous en créons un nouveau :
1
2
3
4
5
6
7
8
if [ -d build ]
then
	echo "Remove existing directory build"
	rm -fr build
fi

mkdir -p build
cd build
Ensuite, nous appellons CMake avec le prefix d'installation :
1
2
3
4
5
6
cmake .. -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX}
if [ $? != 0 ]
then
	echo "Error on cmake : exit -1"
	exit -1
fi
Nous compilons de manière parallèle en fonction du nombre de coeurs disponible noteBien sur que c'est exessif pour notre petit projet, mais comme ceci vous avez l'idée complète. :
1
2
3
4
5
6
make -j $nbproc
if [ $? != 0 ]
then
	echo "Error on make : exit -1"
	exit -1
fi
Puis, nous installons le projet :
1
2
3
4
5
6
make install -j $nbproc
if [ $? != 0 ]
then
	echo "Error on install : exit -1"
	exit -1
fi
Si vous ne voulez pas prendre en compte explicitement le tests de l'exécution de toutes les commandes précédentes, vous pouvez ajouter set -e -x au début du script pour que bash le fasse à votre place. Et vous pourrez enlever les conditions sur CMake et Make.

Le fichier install.sh complet :

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
#!/bin/bash

if [[ "$OSTYPE" == "darwin"* ]]; then
	export nbproc=`sysctl -n hw.physicalcpu`
else
	export nbproc=`nproc`	
fi

INSTALL_PREFIX="$1"

if [ -z "$1" ]
then
	if [ -z ${CONDA_ENV_PATH} ]
	then
		if [ -z ${CONDA_PREFIX} ]
		then
			INSTALL_PREFIX="$HOME/usr"
		else
			INSTALL_PREFIX=${CONDA_PREFIX}
		fi
	else
		INSTALL_PREFIX=${CONDA_ENV_PATH}
	fi
fi

export PATH=${INSTALL_PREFIX}/bin:${PATH}
export LD_LIBRARY_PATH=${INSTALL_PREFIX}/lib:${LD_LIBRARY_PATH}
export DYLD_LIBRARY_PATH=${INSTALL_PREFIX}/lib:${DYLD_LIBRARY_PATH}

if [ -d build ]
then
	echo "Remove existing directory build"
	rm -fr build
fi

mkdir -p build
cd build

cmake .. -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX}
if [ $? != 0 ]
then
	echo "Error on cmake : exit -1"
	exit -1
fi

make -j $nbproc
if [ $? != 0 ]
then
	echo "Error on make : exit -1"
	exit -1
fi

make install -j $nbproc
if [ $? != 0 ]
then
	echo "Error on install : exit -1"
	exit -1
fi


Vous pouvez le télécharger ici.