mirror of
https://gitee.com/an-tao/drogon.git
synced 2024-12-02 11:47:56 +08:00
bba5253a0f
Somewhat controversial, but in general scripts shouldn't have sudo embedded, if necessary the user should run the whole script under sudo. See for example discussions in: https://askubuntu.com/questions/425754/how-do-i-run-a-sudo-command-inside-a-script https://unix.stackexchange.com/questions/20284/should-i-be-using-sudo-in-scripts-that-i-write with conflicting answers. However, removing the sudo from the script here would allow removing dependency on sudo from Dockerfile (I believe) since in Docker the install is done as root, while a user installing elsewhere is free to use sudo for the whole script.
102 lines
1.9 KiB
Bash
Executable File
102 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
#build drogon
|
|
function build_drogon() {
|
|
|
|
#Update the submodule and initialize
|
|
git submodule update --init
|
|
|
|
#Remove the config.h generated by the old version of drogon.
|
|
rm -f lib/inc/drogon/config.h
|
|
|
|
#Save current directory
|
|
current_dir="${PWD}"
|
|
|
|
#The folder in which we will build drogon
|
|
build_dir='./build'
|
|
if [ -d $build_dir ]; then
|
|
echo "Deleted folder: ${build_dir}"
|
|
rm -rf $build_dir
|
|
fi
|
|
|
|
#Create building folder
|
|
echo "Created building folder: ${build_dir}"
|
|
mkdir $build_dir
|
|
|
|
echo "Entering folder: ${build_dir}"
|
|
cd $build_dir
|
|
|
|
echo "Start building drogon ..."
|
|
if [ $1 -eq 1 ]; then
|
|
cmake .. -DBUILD_TESTING=YES $cmake_gen
|
|
elif [ $1 -eq 2 ]; then
|
|
cmake .. -DBUILD_TESTING=YES -DBUILD_DROGON_SHARED=ON -DCMAKE_CXX_VISIBILITY_PRESET=hidden -DCMAKE_VISIBILITY_INLINES_HIDDEN=1 $cmake_gen
|
|
else
|
|
cmake .. -DCMAKE_BUILD_TYPE=release $cmake_gen
|
|
fi
|
|
|
|
#If errors then exit
|
|
if [ "$?" != "0" ]; then
|
|
exit -1
|
|
fi
|
|
|
|
$make_program $make_flags
|
|
|
|
#If errors then exit
|
|
if [ "$?" != "0" ]; then
|
|
exit -1
|
|
fi
|
|
|
|
echo "Installing ..."
|
|
$make_program install
|
|
|
|
#Go back to the current directory
|
|
cd $current_dir
|
|
#Ok!
|
|
}
|
|
|
|
make_program=make
|
|
make_flags=''
|
|
cmake_gen=''
|
|
parallel=1
|
|
|
|
case $(uname) in
|
|
FreeBSD)
|
|
nproc=$(sysctl -n hw.ncpu)
|
|
;;
|
|
Darwin)
|
|
nproc=$(sysctl -n hw.ncpu) # sysctl -n hw.ncpu is the equivalent to nproc on macOS.
|
|
;;
|
|
*)
|
|
nproc=$(nproc)
|
|
;;
|
|
esac
|
|
|
|
# simulate ninja's parallelism
|
|
case nproc in
|
|
1)
|
|
parallel=$(( nproc + 1 ))
|
|
;;
|
|
2)
|
|
parallel=$(( nproc + 1 ))
|
|
;;
|
|
*)
|
|
parallel=$(( nproc + 2 ))
|
|
;;
|
|
esac
|
|
|
|
if [ -f /bin/ninja ]; then
|
|
make_program=ninja
|
|
cmake_gen='-GNinja'
|
|
else
|
|
make_flags="$make_flags -j$parallel"
|
|
fi
|
|
|
|
if [ "$1" = "-t" ]; then
|
|
build_drogon 1
|
|
elif [ "$1" = "-tshared" ]; then
|
|
build_drogon 2
|
|
else
|
|
build_drogon 0
|
|
fi
|