Warning, /sdk/kde-dev-scripts/makeobj is written in an unsupported language. File is not indexed.
0001 #! /usr/bin/env bash
0002
0003 # this is a script around make which basicly checks
0004 # if it's in srcdir or in builddir and changes to
0005 # the right directory for calling /usr/bin/make
0006 # (C) Stephan Kulow
0007
0008 # Variable replacement code by Allen Winter <allen.winter@kdab.com>
0009 # Copyright (c) 2011,2013 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.net>
0010
0011 # You may need to set OBJ_REPLACEMENT variable to get it to work.
0012 # In the variable use the sed syntax to switch directories, for example
0013 # export OBJ_REPLACEMENT="s:/home/zack/cvs/kde:/home/zack/build:"
0014 # will assure that the builds are performed under /home/zack/build
0015 # directory, when the cvs is held under /home/zack/cvs/kde.
0016
0017 # Variables:
0018 # %BRANCH% with the name of the Git or SVN branch you are in (as applicable)
0019 # %GITBRANCH% with the name of the Git branch you are in (empty if not in a Git branch)
0020 # %SVNBRANCH% with the name of the SVN branch you are in (empty if not in an SVN branch)
0021 # %CC% with the basename of your C compiler set in $CC (gcc if empty)
0022 # %CXX% with the basename of your C++ compiler set in $CXX (g++ if empty)
0023 # %ARCH% with the machine architecture (i.e. 'uname -m')
0024 # %OS% with the operating system name (i.e. 'uname -o'), in lower-case without "GNU"
0025
0026 findup() {
0027 parg="$1"
0028 _hit=""
0029 spwd="$PWD"
0030 if test -z "$parg"; then return 1; fi
0031
0032 while ! test -e "$parg"; do
0033 cd ..
0034 if test "$PWD" = "/"; then
0035 cd "$spwd"
0036 return 1
0037 fi
0038 done
0039 _hit="$PWD/$parg"
0040 cd "$spwd"
0041 }
0042
0043 gitbranch() {
0044 findup .git
0045 if test -n "$_hit"; then
0046 _gitbranch=`sed -e 's,.*/,,' "$_hit/HEAD"`
0047 fi
0048 }
0049
0050 svnbranch() {
0051 findup .svn
0052 if test -n "$_hit"; then
0053 _root=`svn info . | grep "Repository Root:" | awk '{print $3}'`
0054 _baseurl=`svn info . | grep '^URL:' | awk '{print $2}' | sed -e s,$_root/,,`
0055 _svnbranch=`echo "$_baseurl" | awk -F/ '{print $1}'`
0056 fi
0057 }
0058
0059 branch() {
0060 gitbranch
0061 if test -z "$_gitbranch"; then
0062 svnbranch
0063 if test -z "$_svnbranch"; then
0064 _branch=""
0065 else
0066 _branch=$_svnbranch
0067 fi
0068 else
0069 _branch=$_gitbranch
0070 fi
0071 }
0072
0073 file=Makefile
0074 dir=.
0075 args=()
0076
0077 _branch=""
0078 _gitbranch=""
0079 _svnbranch=""
0080
0081 # We don't support non-GNU Make.
0082 # Try the name that GNU Make has on non-GNU platforms first
0083 GMAKE="`command -v gmake`"
0084 GMAKE="${GMAKE:-`command -v make`}"
0085
0086 while test $# -gt 0 ; do
0087 case "${1}" in
0088 -f)
0089 shift
0090 file="${1}"
0091 shift
0092 args=("${args[@]}" -f $file)
0093 ;;
0094 -C)
0095 shift
0096 dir="${1}"
0097 shift ;;
0098 -v)
0099 shift
0100 exec $GMAKE "${args[@]}" -v $@
0101 ;;
0102 *)
0103 args=("${args[@]}" "$1")
0104 shift
0105 ;;
0106 esac
0107 done
0108
0109 cd "$dir"
0110 dir=.
0111 cwd=$PWD
0112
0113 # No CMakeList and no Makefile (and no .pro file either)? Maybe we need to go up then.
0114 while test ! -f CMakeLists.txt && test ! -f Makefile ; do
0115 if test "`ls -1 *.pro 2>/dev/null`" && test -n "`ls -1 ../*.pro 2>/dev/null`"; then
0116 break;
0117 fi
0118 if test -f build.ninja; then
0119 file=build.ninja
0120 break;
0121 fi
0122 dir="$dir/`basename \"$PWD\"`"
0123 cd ..
0124 if test X"$PWD" = X"/"; then
0125 cd -- "$cwd"
0126 break
0127 fi
0128 done
0129
0130 if test ! -f "$file"; then
0131 branch
0132 if test -n "$CC"; then
0133 tmp=`echo $CC | awk '{print $1}'`
0134 _cc="`basename \"$tmp\"`"
0135 else
0136 _cc="gcc"
0137 fi
0138 if test -n "$CXX"; then
0139 tmp="`echo \"$CXX\" | awk '{print $1}'`"
0140 _cxx="`basename \"$tmp\"`"
0141 else
0142 _cxx="g++"
0143 fi
0144 _arch="`uname -m`"
0145 _os="`(uname -o 2>/dev/null || uname -s) | tr '[A-Z]' '[a-z]' | sed -e s+gnu/++`"
0146
0147 if test -n "$OBJ_SUBDIR"; then
0148 OBJ_SUBDIR="`echo \"$OBJ_SUBDIR\" | \
0149 sed -e s+%BRANCH%+\"$_branch\"+g | \
0150 sed -e s+%GITBRANCH%+\"$_gitbranch\"+g | \
0151 sed -e s+%SVNBRANCH%+\"$_svnbranch\"+g | \
0152 sed -e s,%CC%,\"$_cc\",g | \
0153 sed -e s,%CXX%,\"$_cxx\",g | \
0154 sed -e s,%ARCH%,\"$_arch\",g | \
0155 sed -e s,%OS%,\"$_os\",g`"
0156 dir=$PWD
0157 subdir=.
0158 while test ! -f "$dir/$OBJ_SUBDIR/$file"; do
0159 subdir="`basename \"$dir\"`/$subdir"
0160 dir="`dirname \"$dir\"`"
0161 if test X"$dir" = X"/"; then
0162 # the case that someone puts the compile dir in /
0163 # is very unlikely, so we better skip here ;)
0164 echo "can't find $OBJ_SUBDIR above current dir"
0165 exit 1
0166 fi
0167 done
0168 cd -- "$dir/$OBJ_SUBDIR/$subdir"
0169 else
0170 if test -n "$OBJ_REPLACEMENT"; then
0171 OBJ_REPLACEMENT="`echo \"$OBJ_REPLACEMENT\" | \
0172 sed -e s+%BRANCH%+\"$_branch\"+g | \
0173 sed -e s+%GITBRANCH%+\"$_gitbranch\"+g | \
0174 sed -e s+%SVNBRANCH%+\"$_svnbranch\"+g | \
0175 sed -e s,%CC%,\"$_cc\",g | \
0176 sed -e s,%CXX%,\"$_cxx\",g | \
0177 sed -e s,%ARCH%,\"$_arch\",g | \
0178 sed -e s,%OS%,\"$_os\",g`"
0179 pwd="`echo $PWD | sed -e \"$OBJ_REPLACEMENT\"`"
0180 if test ! -e "$pwd"; then
0181 echo "no objdir found. Tried $pwd"
0182 exit 1
0183 fi
0184 if test ! -f "$pwd/$file"; then
0185 # ninja requires building from the toplevel
0186 cd -- "$pwd"
0187 findup build.ninja
0188 if test -n "$_hit"; then
0189 pwd=`dirname $_hit`
0190 file=build.ninja
0191 fi
0192 # No objdir with a Makefile found. But if "make" will work in srcdir, then go ahead; might be a non-kde project.
0193 test -f "$pwd/GNUmakefile" && file=GNUmakefile
0194 test -f "$pwd/makefile" && file=makefile
0195 if ! test -f "$pwd/$file"; then
0196 echo "no Makefile or build.ninja found in $pwd"
0197 exit 1
0198 fi
0199 fi
0200 cd -- "$pwd"
0201 fi
0202 fi
0203 fi
0204
0205 echo "makeobj[0]: Entering directory \`$PWD'"
0206
0207 if test -z "$MAKE"; then
0208 using_new_unsermake=0
0209 if head -n 1 "$file" 2>/dev/null | grep unsermake >/dev/null; then
0210 using_new_unsermake=1
0211 fi
0212 if head -n 1 "$file" 2>/dev/null | grep automake >/dev/null; then
0213 using_new_unsermake=0
0214 fi
0215 if test $using_new_unsermake -eq 1; then
0216 MAKE="`command -v unsermake`"
0217 if test ! -x "$MAKE"; then
0218 echo 'Makefile was created with unsermake, but there'
0219 echo 'is no unsermake in $PATH'
0220 exit 1
0221 fi
0222 elif test -f "Makefile"; then
0223 MAKE="$GMAKE"
0224 elif test -f "build.ninja"; then
0225 MAKE="ninja"
0226 else
0227 echo "No Makefile or build.ninja found in $PWD!"
0228 fi
0229 fi
0230 LANG=en_US.UTF-8 $MAKE "${args[@]}"
0231 retval=$?
0232 echo "makeobj[0]: Leaving directory \`$PWD'"
0233 exit $retval
0234