diff --git a/devscripts/checkdeps.sh b/devscripts/checkdeps.sh index 55161ae32..37e36c286 100644 --- a/devscripts/checkdeps.sh +++ b/devscripts/checkdeps.sh @@ -1,78 +1,153 @@ +# +# Mini Object Storage, (C) 2015 Minio, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# #!/usr/bin/env bash -check_version() { - local version=$1 check=$2 - local highest=$(echo -e "$version\n$check" | sort -nrt. -k1,1 -k2,2 -k3,3 | head -1) - [[ "$highest" = "$version" ]] && return 0 - return 1 +_init() { + ## Minimum required versions for build dependencies + GCC_VERSION="4.0" + YASM_VERSION="1.2.0" + GIT_VERSION="1.0" + PIP_VERSION="1.4" + GO_VERSION="1.4" + + ## Check all dependencies are present + MISSING="" +} + +### +# +# Takes two arguments +# arg1: version number in `x.x.x` format +# arg2: version number in `x.x.x` format +# +# example: check_version "$version1" "$version2" +# +# returns: +# 0 - Installed version is equal to required +# 1 - Installed version is greater than required +# 2 - Installed version is lesser than required +# 3 - If args have length zero +# +#### +check_version () { + ## validate args + [[ -z "$1" ]] && return 3 + [[ -z "$2" ]] && return 3 + + if [[ $1 == $2 ]]; then + return 0 + fi + + local IFS=. + local i ver1=($1) ver2=($2) + # fill empty fields in ver1 with zeros + for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)); do + ver1[i]=0 + done + for ((i=0; i<${#ver1[@]}; i++)); do + if [[ -z ${ver2[i]} ]]; then + # fill empty fields in ver2 with zeros + ver2[i]=0 + fi + if ((10#${ver1[i]} > 10#${ver2[i]})); then + + return 1 + fi + if ((10#${ver1[i]} < 10#${ver2[i]})); then + ## Installed version is lesser than required - Bad condition + return 2 + fi + done + return 0 +} + +check_golang_env() { + echo ${GOROOT:?} 2>&1 >/dev/null + if [ $? -eq 1 ]; then + echo "ERROR" + echo "GOROOT environment variable missing, please refer to Go installation document" + echo "https://github.com/Minio-io/minio/blob/master/BUILDDEPS.md#install-go-13" + exit 1 + fi + + echo ${GOPATH:?} 2>&1 >/dev/null + if [ $? -eq 1 ]; then + echo "ERROR" + echo "GOPATH environment variable missing, please refer to Go installation document" + echo "https://github.com/Minio-io/minio/blob/master/BUILDDEPS.md#install-go-13" + exit 1 + fi +} + +check_deps() { + check_version "$(env pip --version 2>/dev/null| awk {'print $2'})" "${PIP_VERSION}" + if [ $? -ge 2 ]; then + MISSING="pip" + fi + + check_version "$(env go version 2>/dev/null | sed 's/^.* go\([0-9.]*\).*$/\1/')" "${GO_VERSION}" + if [ $? -ge 2 ]; then + MISSING="${MISSING} golang(1.4)" + fi + + check_version "$(env git --version 2>/dev/null | sed 's/^.* \([0-9.]*\).*$/\1/')" "${GIT_VERSION}" + if [ $? -ge 2 ]; then + MISSING="${MISSING} git" + fi + + check_version "$(env gcc --version 2>/dev/null | sed 's/^.* \([0-9.]*\).*$/\1/' | head -1)" "${GCC_VERSION}" + if [ $? -ge 2 ]; then + MISSING="${MISSING} build-essential" + fi + + check_version "$(env yasm --version 2>/dev/null | sed 's/^.* \([0-9.]*\).*$/\1/' | head -1)" "${YASM_VERSION}" + if [ $? -ge 2 ]; then + MISSING="${MISSING} yasm(1.2.0)" + fi + + env mkdocs help >/dev/null 2>&1 + if [ $? -ne 0 ]; then + MISSING="${MISSING} mkdocs" + fi +} + +main() { + echo -n "Checking if proper environment variables are set.. " + check_golang_env + + echo "Done" + echo "Using GOPATH=${GOPATH} and GOROOT=${GOROOT}" + + echo -n "Checking dependencies for Minio.. " + check_deps + + ## If dependencies are missing, warn the user and abort + if [ "x${MISSING}" != "x" ]; then + echo "ERROR" + echo + echo "The following build tools are missing:" + echo + echo "** ${MISSING} **" + echo + echo "Please install them " + echo "${MISSING}" + echo + exit 1 + fi + echo "Done" } -echo -n "Checking if proper environment variables are set.. " - -echo ${GOROOT:?} 2>&1 >/dev/null -if [ $? -eq 1 ]; then - echo "ERROR" - echo "GOROOT environment variable missing, please refer to Go installation document" - echo "https://github.com/Minio-io/minio/blob/master/BUILDDEPS.md#install-go-13" - exit 1 -fi - -echo ${GOPATH:?} 2>&1 >/dev/null -if [ $? -eq 1 ]; then - echo "ERROR" - echo "GOPATH environment variable missing, please refer to Go installation document" - echo "https://github.com/Minio-io/minio/blob/master/BUILDDEPS.md#install-go-13" - exit 1 -fi - -echo "Done" -echo "Using GOPATH=${GOPATH} and GOROOT=${GOROOT}" - -echo -n "Checking dependencies for Minio.. " - -## Check all dependencies are present -MISSING="" - -check_version "$(env go version | sed 's/^.* go\([0-9.]*\).*$/\1/')" "1.4" -if [ $? -ne 0 ]; then - MISSING="${MISSING} golang(1.4)" -fi - -env git --version > /dev/null 2>&1 -if [ $? -ne 0 ]; then - MISSING="${MISSING} git" -fi - -env gcc --version > /dev/null 2>&1 -if [ $? -ne 0 ]; then - MISSING="${MISSING} build-essential" -fi - -env yasm --version > /dev/null 2>&1 -if [ $? -ne 0 ]; then - MISSING="${MISSING} yasm" -fi - -if ! yasm -f elf64 pkg/storage/erasure/gf-vect-dot-prod-avx2.asm -o /dev/null 2>/dev/null ; then - MISSING="${MISSING} yasm(1.2.0)" -fi - -env mkdocs help >/dev/null 2>&1 -if [ $? -ne 0 ]; then - MISSING="${MISSING} mkdocs" -fi - -## If dependencies are missing, warn the user and abort -if [ "x${MISSING}" != "x" ]; then - echo "ERROR" - echo - echo "The following build tools are missing:" - echo - echo "** ${MISSING} **" - echo - echo "Please install them " - echo "${MISSING}" - echo - exit 1 -fi -echo "Done" +_init && main "$@" diff --git a/devscripts/setup_development_environment.sh b/devscripts/setup_development_environment.sh index 380b7bdbc..03ca40add 100644 --- a/devscripts/setup_development_environment.sh +++ b/devscripts/setup_development_environment.sh @@ -30,11 +30,50 @@ pop_dir() { popd >/dev/null } -check_version() { - local version=$1 check=$2 - local highest=$(echo -e "$version\n$check" | sort -nrt. -k1,1 -k2,2 -k3,3 | head -1) - [[ "$highest" = "$version" ]] && return 0 - return 1 +### +# +# Takes two arguments +# arg1: version number in `x.x.x` format +# arg2: version number in `x.x.x` format +# +# example: check_version "$version1" "$version2" +# +# returns: +# 0 - Installed version is equal to required +# 1 - Installed version is greater than required +# 2 - Installed version is lesser than required +# 3 - If args have length zero +# +#### +check_version () { + ## validate args + [[ -z $1 ]] && return 3 + [[ -z $2 ]] && return 3 + + if [[ $1 == $2 ]]; then + return 0 + fi + local IFS=. + local i ver1=($1) ver2=($2) + # fill empty fields in ver1 with zeros + for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)); do + ver1[i]=0 + done + for ((i=0; i<${#ver1[@]}; i++)); do + if [[ -z ${ver2[i]} ]]; then + # fill empty fields in ver2 with zeros + ver2[i]=0 + fi + if ((10#${ver1[i]} > 10#${ver2[i]})); then + + return 1 + fi + if ((10#${ver1[i]} < 10#${ver2[i]})); then + ## Installed version is lesser than required - Bad condition + return 2 + fi + done + return 0 } is_supported_arch() { @@ -137,24 +176,24 @@ main() { push_dir ${MINIO_DEV} check_version "$(env pip --version | awk {'print $2'})" ${PIP_VERSION} - [[ $? -ne 0 ]] && die "pip not installed" + [[ $? -ge 2 ]] && die "pip not installed" check_version "$(env gcc --version | sed 's/^.* \([0-9.]*\).*$/\1/' | head -1)" ${GCC_VERSION} - [[ $? -ne 0 ]] && die "gcc not installed" + [[ $? -ge 2 ]] && die "gcc not installed" - check_version "$(env git --version | sed 's/^.* go\([0-9.]*\).*$/\1/')" ${GIT_VERSION} - [[ $? -ne 1 ]] && die "Git not installed" + check_version "$(env git --version | sed 's/^.* \([0-9.]*\).*$/\1/')" ${GIT_VERSION} + [[ $? -ge 2 ]] && die "Git not installed" check_version "$(env go version 2>/dev/null | sed 's/^.* go\([0-9.]*\).*$/\1/')" ${GOLANG_VERSION} - [[ $? -eq 0 ]] && \ + [[ $? -le 1 ]] && \ [[ -z $GOROOT ]] && die "Please setup the goroot variable according to your current installation of golang." \ || install_go - check_version "$(env yasm --version 2>/dev/null)" ${YASM_VERSION} - [[ $? -eq 0 ]] || install_yasm + check_version "$(env yasm --version 2>/dev/null | sed 's/^.* \([0-9.]*\).*$/\1/' | head -1)" ${YASM_VERSION} + [[ $? -ge 2 ]] || install_yasm env mkdocs help >/dev/null 2>&1 - [[ $? -eq 0 ]] || install_mkdocs + [[ $? -ne 0 ]] || install_mkdocs setup_env source env.sh @@ -167,4 +206,4 @@ main() { # Putting main function at the end of the script ensures that the execution # won't start until the script is entirely downloaded. -_init "$@" && main "$@" +_init && main "$@" diff --git a/pkg/api/minioapi/contenttype.go b/pkg/api/minioapi/contenttype.go index 819a53ded..075f1b4aa 100644 --- a/pkg/api/minioapi/contenttype.go +++ b/pkg/api/minioapi/contenttype.go @@ -1,3 +1,19 @@ +/* + * Mini Object Storage, (C) 2015 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package minioapi import ( diff --git a/pkg/api/minioapi/errors.go b/pkg/api/minioapi/errors.go index 795692ed7..28173441b 100644 --- a/pkg/api/minioapi/errors.go +++ b/pkg/api/minioapi/errors.go @@ -1,3 +1,19 @@ +/* + * Mini Object Storage, (C) 2015 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package minioapi import ( diff --git a/pkg/api/minioapi/handler.go b/pkg/api/minioapi/handler.go index b0f04e8e5..5cc3f96e8 100644 --- a/pkg/api/minioapi/handler.go +++ b/pkg/api/minioapi/handler.go @@ -1,3 +1,19 @@ +/* + * Mini Object Storage, (C) 2015 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package minioapi import ( diff --git a/pkg/api/minioapi/headers.go b/pkg/api/minioapi/headers.go index dfcd43a1c..1d28098b7 100644 --- a/pkg/api/minioapi/headers.go +++ b/pkg/api/minioapi/headers.go @@ -1,3 +1,19 @@ +/* + * Mini Object Storage, (C) 2015 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package minioapi import (