summarylogtreecommitdiffstats
path: root/catalyst_build_module
blob: 38b346304cdac143ff246ccfabd478db613cdc5b (plain)
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/bin/bash

kernver=${KERNVER:-$(uname -r)}
arch=${ARCH:-$(uname -m)}
arch=${arch/i686/i386}
catver=whatever


install_module(){
  # here we are checking kernel's extramodules dir
    for r in /usr/lib/modules/*; do
      s=${r##*/usr/lib/modules/}
      if [[ ${s:0:3} = "ext" ]]; then
	if [[ `cat ${r}/version | grep -c ${kernver}` != 0 ]]; then
	 pakaver="${s#*-}"
	 destdir="${s}"
	fi
      fi
    done

    echo ""
    echo -e '\E[37;44m'"\033[1mBuilding catalyst-${pakaver} package for ${kernver} kernel ...\033[0m"
    echo "--------"
    if [ ! -d "/usr/lib/modules/${kernver}/build" ]; then
      echo -e '\E[37;44m'"\033[1mKernel header files are absent: directory /usr/lib/modules/${kernver}/build doesn't exist! Game over\033[0m"
      echo "--------"
      return 1
    fi
    workdir=$(mktemp -du /tmp/catalyst.XXXXXX)
#    set -x
    cp "/usr/share/ati/build_mod" "${workdir}" -R
    cd "$workdir"
    sed -i -e "s/_kernver=.*/_kernver=${kernver}/" PKGBUILD
    sed -i -e "s/_pakaver=.*/_pakaver=${pakaver}/" PKGBUILD
    sed -i -e "s/_destdir=.*/_destdir=${destdir}/" PKGBUILD
    if [ "${LOGNAME}" = "root" ]; then
      if [ "${user}" = "root" ]; then
       /usr/bin/makepkg -c --asroot || return 1
     	 else
    	   chown ${user}:video ${workdir}
    	   chown ${user}:video ${workdir}/* >> /dev/null 2>&1
    	   su - ${user} -c "cd ${workdir} && /usr/bin/makepkg -c" || return 1
      fi
      else
	 /usr/bin/makepkg -c || return 1
    fi

    echo -e '\E[37;44m'"\033[1mOk. catalyst-${pakaver} package built succesfully. Installing ...\033[0m"
    if [ -e /usr/bin/sudo ]; then
        echo -e '\E[37;44m'"\033[1mIf it's asking for password - type YOUR password\033[0m"
        sudo /usr/bin/pacman -Ud ${workdir}/catalyst-${pakaver}-${catver}-$(uname -m).pkg.tar || return 1
    else
        echo -e '\E[37;44m'"\033[1mIf it's asking for password - type root password\033[0m"
        su - root -c "/usr/bin/pacman -Ud ${workdir}/catalyst-${pakaver}-${catver}-$(uname -m).pkg.tar" || return 1
    fi
    rm -rf "${workdir}"
#    set +x
    echo -e '\E[37;44m'"\033[1mDone.\033[0m"
}


build_all_modules(){
    for p in /usr/lib/modules/*; do
      if [ ${p:17:3} != "ext" ] && [ -d $p/build ] && [ -d $p/kernel ]; then
	/usr/bin/catalyst_build_module ${p##*/usr/lib/modules/}
      fi
    done
}


remove_module(){
    echo "Removing unused catalyst-{kernver} packages ..."
      for p in /usr/lib/modules/*; do
	# first check is used for historical reasons and should be removed soon - Vi0L0 on 16.03.2013
	if [[ ${p:17:3} != "ext" ]] && [[ ! -d $p/kernel ]] && [[ -e $p/video/fglrx.ko.gz ]]; then
		/usr/bin/pacman -Rd --noconfirm catalyst-${p##*/lib/modules/}
	elif [[ ${p:17:3} = "ext" ]] && [[ ! -e $p/version ]] && [[ -e $p/fglrx.ko.gz ]]; then
		/usr/bin/pacman -Rd --noconfirm catalyst-${p##*/lib/modules/extramodules-}
	fi
      done
}


remove_all_modules(){
    echo "Removing all catalyst-{kernver} packages ..."
      for p in /usr/lib/modules/*; do
	    if [[ ${p:17:3} != "ext" ]] && [[ -e $p/video/fglrx.ko.gz ]]; then
		    /usr/bin/pacman -Rd --noconfirm catalyst-${p##*/usr/lib/modules/}
	    elif [[ ${p:17:3} = "ext" ]] && [[ -e $p/fglrx.ko.gz ]]; then
		    /usr/bin/pacman -Rd --noconfirm catalyst-${p##*/usr/lib/modules/extramodules-}
	    fi
      done
}


case "$1" in
    help|--help)
        echo "usage: $0 {version|all|remove|remove_all|ra}"
        echo "- with no specified kernel version it will use the current kernel version to build module"
	echo "- all will try to build fglrx modules for all working system's kernels"
        echo "- remove is removing unused catalyst-{kernver} packages"
        echo "- remove_all is removing all catalyst-{kernver} packages"
        echo "- ra works same as remove_all"
        ;;
    all)
	build_all_modules
	;;
    remove)
        remove_module
        ;;
    remove_all)
        remove_all_modules
        ;;
    ra)
        remove_all_modules
        ;;
    *)
        test "$1" != "" && kernver="$1"
	if [ "$2" != "" ]; then user="$2"
          elif [ "${LOGNAME}" = "root" ]; then
	      echo "Please specify your (unprivileged) user name:"
	      read user
	fi
        install_module
        ;;
esac