summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 3b6db5f774d36f883e5b0f878daae869a195be18 (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
128
129
130
# Maintainer:  Chris Severance aur.severach aATt spamgourmet dott com

# Brainboxes prefix list. Some but not all are supported by this driver.
# BL - Bluetooth Serial Adapter
# CC - PCI Serial Cards
# ES - Ethernet to Serial
# ED - Ethernet IO
# IS - IntaShield uPCI Serial Cards
# IX - IntaShield PCI Express Serial Cards
# PM - Serial PC Card (PCMCIA)
# PX - PCI Express Serial Cards
# UC - uPCI Serial Cards
# UP - uPCI Powered Serial Cards
# US - USB to Serial
# VX - Serial ExpressCard
# XC - Serial Parallel ExpressCard

# Some future supported models are found in $tf/13

set -u
pkgname='brainboxes-serial-pci'
pkgver='0.0.20160614'
pkgrel='1'
pkgdesc='script to enable Brainboxes serial and parallel ports PCI PCIe Express PCMCIA PM UC CC-525 CC-530 PX-275 PX-279 PX-263 PX-295 PX-272 PX-306'
arch=('any')
url='http://www.brainboxes.com/faq/items/where-can-i-find-the-latest-drivers-for-linux'
license=('GPL')
depends=('perl' 'setserial' 'pciutils')
backup=('etc/bbportinst'{.conf,.local} 'etc/modprobe.d/parport_bb.conf')
options=('!strip')
install="${pkgname}-install.sh"
_srcdir='bbportinst'
source=('http://www.brainboxes.com/files/pages/support/faqs/drivers%20and%20firmware/bbportinst.zip' '0000-restore-deprecated-pcie-cards.patch')
sha256sums=('d5ac2012bae944d398517511b55cd43d920c79de910cae8e60ca05eaa1408b70'
            'ba1481741952faa9399df8f16a4808e89322c079bf248d664579ae7882bc2726')

_servicename="${pkgname}.service"

# We can't modify .install but we can stop and force the user to fix it.
_install_check() {
  local _ckvar
  local _ckline
  local _pkgname="${pkgname}"
  for _ckvar in '_servicename'; do
    _ckline="${_ckvar}='${!_ckvar}'"
    if ! grep -q "^${_ckline}"'$' "${startdir}/${install}"; then
      msg "${install} must be fixed"
      echo "${_ckline}"
      set +u
      false
    fi
  done
}

prepare() {
  set -u
  _install_check
  cd "${_srcdir}"

  sed -e 's:\s*\r$::g' -i $(grep -rlFe $'\r')
  chmod 755 'bbportinst'

  if ! :; then
    # Pull the commented PCIe cards in from an old version
    gunzip < '$tf/13/9638928d-f5c9-4b4e-8050-fb2d8fc6aac4.gz' > 'bbportinst.9638928d-f5c9-4b4e-8050-fb2d8fc6aac4'
    sed -e 's:\s*\r$::g' -i 'bbportinst.9638928d-f5c9-4b4e-8050-fb2d8fc6aac4'

    # Extract table out and insert it into the new file. This gives us a clean diff without the other unwanted code changes.
    sed -ne '/^my @card_info_table/,/^);$/ p' 'bbportinst.9638928d-f5c9-4b4e-8050-fb2d8fc6aac4' > 'bbportinst.oldtable'
    rm 'bbportinst.9638928d-f5c9-4b4e-8050-fb2d8fc6aac4'

    sed -e '# Insert marker for new table' \
        -e '/^my @card_info_table/ i #@TABLE_PLACE@' \
        -e '# Remove old table leaving only marker' \
        -e '/^my @card_info_table/,/^);$/ d' 'bbportinst' |
    sed -e '# Insert old table at marker' \
        -e '/^#@TABLE_PLACE@$/ r bbportinst.oldtable' |
    sed -e '# Remove marker' \
        -e '/^#@TABLE_PLACE@$/ d' > 'bbportinst.new.oldtable'
    rm 'bbportinst.oldtable'

    diff -pNau5 bbportinst{,.new.oldtable} > '0000-restore-deprecated-pcie-cards.patch' || :
    rm 'bbportinst.new.oldtable'
    set +u
    msg 'Move supplied patch to PKGBUILD'
    false
  fi
  patch -Nup0 -i '../0000-restore-deprecated-pcie-cards.patch'

  # Fix path
  sed -e 's:/bin/setserial:/usr/bin/setserial:g' -i 'bbportinst'
  sed -e '# Custom shell script instead of rc.local' \
      -e '/^boot_local_file =/ s:auto:/etc/bbportinst.local:g' \
      -e '# This file isnt unique enough' \
      -e '/^parport_conf_file =/ s:auto:/etc/modprobe.d/parport_bb.conf:g' \
    -i 'bbportinst.conf'
  set +u
}

package() {
  set -u
  cd "${_srcdir}"
  install -Dpm744 'bbportinst' -t "${pkgdir}/usr/bin"
  install -Dpm644 'bbportinst.conf' -t "${pkgdir}/etc"
  install -Dm644 /dev/null "${pkgdir}/etc/bbportinst.local"
  install -Dm644 /dev/null "${pkgdir}/etc/modprobe.d/parport_bb.conf"

  # systemd service
  install -Dm644 <(cat << EOF
# Automatically generated by ${pkgname}-${pkgver} PKGBUILD from Arch Linux AUR
# https://aur.archlinux.org/

[Unit]
Description=Configure BrainBoxes Serial Parallel Cards bbportinst
After=network.target

[Service]
Type=notify
ExecStart=/usr/bin/sh -c 'source /etc/bbportinst.local; systemd-notify --ready'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF
  ) "${pkgdir}/usr/lib/systemd/system/${_servicename}"

  set +u
}

set +u