diff options
Diffstat (limited to 'PKGBUILD')
-rw-r--r-- | PKGBUILD | 319 |
1 files changed, 319 insertions, 0 deletions
diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..2dade02fd961 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,319 @@ +# Maintainer: Chris Severance aur.severach aATt spamgourmet dott com + +_opt_DKMS=1 # This can be toggled between installs +_opt_PARALLEL=0 # 0 for SPEED without parallel port, 1 to enable parallel support + +# See /etc/perle-serial-setultrap.sh for persistent port modes + +# Perle Ultraport 1 2 4 8 8i 16 +# Perle PCI-RAS 4 8 +# Perle Ultraport 1 2 4 8 16 SI Exar +# Perle Ultraport Express 1 2 4 8 8i +# Perle SPEED LE 1 2 4 8 Oxford 95x, not supported by built in kernel drivers +# Perle SPEED LE1P +# Perle SPEED LE1P Express + +# ls -l /dev/ttyPS* +# lsmod | grep perle +# lspci -v | grep -A4 -i perle + +# dmesg | grep -A8 -i perle +#[ 6188.852357] Perle Systems Limited - Parallel Port Driver: version 3.9.0 date: 2013-04-15, time: 19:04:11 +#[ 6188.855676] Perle Serial driver version 3.9.0 (2013-04-11) with SHARE_IRQ SERIAL_PCI enabled +#[ 6188.856613] ttyPS0 at iomem 0xffffc90003143000 (irq = 18) is a 16C950/2/4 +#[ 6188.856629] ttyPS1 at iomem 0xffffc90003145200 (irq = 18) is a 16C950/2/4 +#[ 6188.856644] ttyPS2 at iomem 0xffffc90003147400 (irq = 18) is a 16C950/2/4 +#[ 6188.856660] ttyPS3 at iomem 0xffffc900032e3600 (irq = 18) is a 16C950/2/4 + +# A list I found, (-) are not in the source files and are unlikely to be supported by this driver. +#http://deviceinbox.com/drivers/812-perle-pci-fast-16-fmc-port-adapter.html +# My SPEED4 LE 04003170 OXPCIe954-FBAG shows as 155f:b032 +# My SPEED2 LE shows as 155f:b022 +# 10B5:9030 PLX Technology, Inc. PCI9030 32-bit 33MHz PCI <-> IOBus Bridge +# -10B5:9050 PLX Technology, Inc. PCI <-> IOBus Bridge +# -11CB:9501 Perle SPEED4+ PCI Adapter +# -11CB:9511 Perle SPEED2+ PCI Adapter Local Bus +# 13A8:0152 Exar Corp. XR17C/D152 Dual PCI UART +# 13A8:0154 Exar Corp. XR17C154 Quad UART +# 13A8:0158 Exar Corp. XR17C158 Octal UART +# 1415:9501 Oxford Semiconductor Ltd OX16PCI954 (Quad 16950 UART) function 0 (Uart) +# -1415:9510 Oxford Semiconductor Ltd OX16PCI954 (Quad 16950 UART) function 1 (Disabled) +# 1415:9505 OXSEMI OXMPCIe95x +# 1415:9511 OXSEMI 16PCI95N +# 1415:9513 OXSEMI OXMPCI952P +# 1415:9521 OXSEMI 16PCI952 +# 155F:0211 Perle UltraPort2 SI Adapter +# 155F:0221 Perle UltraPort8 SI Adapter +# 155F:0231 Perle UltraPort4 SI Adapter +# 155F:0251 Perle UltraPort8i SI Adapter +# 155F:0261 Perle UltraPort1 SI Adapter +# 155F:0311 Perle UltraPort2 Express Adapter Local Bus +# 155F:0321 Perle UltraPort8 Express Adapter Local Bus +# 155F:0331 Perle UltraPort4 Express Adapter Local Bus +# 155F:0351 Perle UltraPort8i Express Adapter +# 155F:0361 Perle UltraPort1 Express Adapter Local Bus +# 155F:B001 Perle SPEED1 LE Adapter +# 155F:B002 Perle SPEED2 LE Adapter Local Bus +# 155F:B004 Perle SPEED4 LE Adapter Local Bus +# 155F:B008 Perle SPEED8 LE Adapter +# 155F:B011 Perle SPEED1 LEV2 - Parallel Port Not Supported +# 155F:B012 Perle SPEED2 LEV2 - Parallel Port Not Supported +# 155F:B013 Perle SPEED1 LE1P Parallel Port +# 155F:B014 Perle SPEED2 LE1P Parallel Port +# 155F:B015 Perle SPEED LE1P Parallel Port +# 155F:B021 Perle SPEED1 LE Express Adapter +# 155F:B022 Perle SPEED2 LE Express - Parallel Port Not Supported +# 155F:B024 Perle SPEED2 LE1P Express Adapter +# 155F:B025 Perle SPEED LE1P Express Adapter +# 155F:B026 Perle SPEED1 LE1P Express Parallel Port +# 155F:B030 Perle UltraPort1 Express Adapter +# 155F:B031 Perle UltraPort2 Express Adapter +# 155F:B032 Perle UltraPort4 Express Adapter +# 155F:B033 Perle UltraPort8 Express Adapter +# 155F:B034 Perle UltraPort8i Express Adapter + +set -u +pkgname='perle-serial' +pkgver='3.9.0_14' +pkgrel='1' +pkgdesc='kernel module driver for Perle UltraPort SI Express PCI-RAS modem SPEED LE multi I/O serial parallel RS-232 422 485 port' +arch=('i686' 'x86_64') +url='http://downloads.comtrol.com/html/RPuPCI_drivers.htm' +license=('GPL') +depends=('awk') +makedepends=('gzip' 'findutils' 'sed' 'diffutils' 'patch') +backup=('etc/perle-serial-setultrap.sh') +install="${pkgname}-install.sh" +_srcdir="${pkgname}-${pkgver%%_*}" +source=("https://www.perle.com//downloads/drivers/ultraport/linux/perle-serial-${pkgver//_/-}.tgz") +sha256sums=('7ded341fe93f76fc5d607a3888ac0407e78c9165ad8fb297ec9e375269e72f8b') + +_opt_SERIAL=1 # This is for bug testing dkms only. All cards have serial ports so this should always be enabled. + +if [ "${_opt_SERIAL}" -ne 0 ]; then + _modulenames+=('perle-serial') +fi +if [ "${_opt_PARALLEL}" -ne 0 ]; then + _modulenames+=('pparport-pc') +fi + +if [ "${_opt_DKMS}" -ne 0 ]; then + depends+=('linux' 'dkms' 'linux-headers') +else + makedepends+=('linux-headers') +fi + +# 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 _pkgname _modulenames; do + _ckline="$(declare -p ${_ckvar} 2>/dev/null)" + _ckline="${_ckline#* }" + _ckline="${_ckline#* }" + _ckline="${_ckline//\[[0-9]\]=/}" # unenumerate arrays + _ckline="${_ckline//\"/\'}" + if ! grep -q "^${_ckline}"'$' "${startdir}/${install}"; then + set +u + msg "${install} must be fixed" + echo "${_ckline}" + false + fi + done +} + +prepare() { + if [ "${_opt_PARALLEL}" -eq 0 ] && [ "${_opt_SERIAL}" -eq 0 ]; then + msg 'Disabling both PARALLEL and SERIAL does not make sense' + false + fi + set -u + _install_check + cd "${_srcdir}" + + # Files unpack with bad permissions + find -type 'd' -exec chmod 755 '{}' ';' + find -type 'f' -exec chmod 644 '{}' '+' + find -type 'f' -name '*.sh' -exec chmod 755 '{}' '+' + rm 'querydrivers.sh' + + # Fix for reproducible build. The release date seems more useful than the build date. + local _dtm + _dtm="$(TZ=UTC stat -c '%y' 'pparport26/pparport_pc.c')" # 2013-04-15 19:04:11.862057600 +0000 + local _dt="${_dtm%% *}" + local _tm="${_dtm#* }" + _tm="${_tm%%\.*}" + sed -e "s|__DATE__|\"${_dt}\"|g" -e "s|__TIME__|\"${_tm}\"|g" -i 'pparport26/pparport_pc.c' + + # Improve install + sed -e 's:lib/:usr/lib/:g' \ + -e '# Forgot to clean a few things' \ + -e '/\*\.o\.cmd/ s:^.*$:& *.symvers *.order *.mod.c .*.ko.cmd .*.o.d\n\trm -rf .tmp_versions:g' \ + -i 'pserial/Makefile' 'pparport26/Makefile' + set +u +} + +build() { + set -u + cd "${_srcdir}" + if [ "${_opt_PARALLEL}" -ne 0 ]; then + make -C 'pparport26' -s -j1 + fi + if [ "${_opt_SERIAL}" -ne 0 ]; then + make -C 'pserial' -s -j1 # too small for parallel make + fi + set +u +} + +package() { + set -u + cd "${_srcdir}" + if [ "${_opt_DKMS}" -eq 0 ]; then + # I don't want Linux version info showing on AUR web. After a few months 'linux<0.0.0' makes it look like an out of date package. + local _kernelversionsmall="$(uname -r)" + _kernelversionsmall="${_kernelversionsmall%%-*}" + _kernelversionsmall="${_kernelversionsmall%\.0}" # trim 4.0.0 -> 4.0, 4.1.0 -> 4.1 + # prevent the mksrcinfo bash emulator from getting these vars! + eval 'conf''licts=("linux>${_kernelversionsmall}" "linux<${_kernelversionsmall}")' + eval 'dep''ends+=("linux=${_kernelversionsmall}")' + fi + + if [ "${_opt_PARALLEL}" -ne 0 ]; then + make -C 'pparport26' -s -j1 DESTDIR="${pkgdir}/" PERLE_DIR="${srcdir}/${_srcdir}" rpm_install + fi + if [ "${_opt_SERIAL}" -ne 0 ]; then + make -C 'pserial' -s -j1 DESTDIR="${pkgdir}/" PERLE_DIR="${srcdir}/${_srcdir}" rpm_install + # Cat fight! + cat <(cat << EOF +#!/usr/bin/sh + +# Automatically generated by ${pkgname} PKGBUILD from Arch Linux AUR +# https://aur.archlinux.org/ +EOF + ) "${pkgdir}/etc/init.d/rc.setultrap" <(cat << EOF + +# These must be the last lines. Put all your Perle control lines above this. +if [ "\${1:-}" = '--systemd' ]; then + systemd-notify --ready +fi +EOF + ) > "${pkgdir}/etc/perle-serial-setultrap.sh" + sed -e 's:/bin/:/usr/bin/:g' -e 's:/usr/usr/:/usr/:g' -i "${pkgdir}/etc/perle-serial-setultrap.sh" + chmod 744 "${pkgdir}/etc/perle-serial-setultrap.sh" + rm -r "${pkgdir}/UNKONWN" "${pkgdir}/etc/init.d" + # Install persistent settings service + install -Dm644 <(cat << EOF +# Automatically generated by ${pkgname}-${pkgver} PKGBUILD from Arch Linux AUR +# https://aur.archlinux.org/ + +[Unit] +Description=Perle multi port serial persistent settings +After=network.target + +[Service] +Type=notify +ExecStart=/usr/bin/bash /etc/perle-serial-setultrap.sh --systemd +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target +EOF + ) "${pkgdir}/usr/lib/systemd/system/perle-serial-settings.service" + fi + + # Relocate misc drivers into tree + local _ulm="${pkgdir}/usr/lib/modules/$(uname -r)" + if [ "${_opt_SERIAL}" -ne 0 ]; then + install -d "${_ulm}/kernel/drivers/tty" + mv "${_ulm}/misc/perle-serial.ko" "${_ulm}/kernel/drivers/tty/" + fi + if [ "${_opt_PARALLEL}" -ne 0 ]; then + install -d "${_ulm}/kernel/drivers/parport" + mv "${_ulm}/misc/pparport-pc.ko" "${_ulm}/kernel/drivers/parport/" + fi + rmdir "${_ulm}/misc" + + # The module is in the same folder as DKMS. Compress to a different name to prevent conflict. + # When future versions of DKMS compress we'll stop doing this. + find "${pkgdir}/usr/lib/modules/" -type 'f' -name '*.ko' -exec 'gzip' '-9' '{}' ';' + + if [ "${_opt_DKMS}" -ne 0 ]; then + rm -rf "${pkgdir}/usr/lib/modules/" + local _dkms="${pkgdir}/usr/src/${pkgname}-${pkgver}" + install -Dm644 <(cat << EOF +# Automatically generated by ${pkgname}-${pkgver} PKGBUILD from Arch Linux AUR +# https://aur.archlinux.org/ + +PACKAGE_NAME="${pkgname}" +PACKAGE_VERSION="${pkgver}" +AUTOINSTALL="yes" +# MAKE[0] is expected to make all modules with an umbrella makefile +MAKE[0]="make -j1" +EOF + ) "${_dkms}/dkms.conf" + install -Dm644 <(cat << EOF +# Automatically generated by ${pkgname}-${pkgver} PKGBUILD from Arch Linux AUR +# https://aur.archlinux.org/ + +modules: + +# Arch DKMS appears to not use make clean but it's here anyway just in case it does +clean: + +EOF + ) "${_dkms}/Makefile" + local _modno=0 + if [ "${_opt_SERIAL}" -ne 0 ]; then + cat >> "${_dkms}/dkms.conf" << EOF + +BUILT_MODULE_NAME[${_modno}]="${_modulenames[${_modno}]}" +BUILT_MODULE_LOCATION[${_modno}]="pserial" +# The install version is .ko.gz. The DKMS version is .ko. No conflicts. +DEST_MODULE_LOCATION[${_modno}]="/kernel/drivers/tty" +EOF + _modno=$((_modno+1)) + cp -pr 'pserial/' "${_dkms}/" + sed -e '/modules:/ a make -j1 KERNELRELEASE=$(KERNELRELEASE) -C pserial' -i "${_dkms}/Makefile" + sed -e '/clean:/ a make -j1 -C pserial clean' -i "${_dkms}/Makefile" + fi + if [ "${_opt_PARALLEL}" -ne 0 ]; then + cat >> "${_dkms}/dkms.conf" << EOF + +BUILT_MODULE_NAME[${_modno}]="${_modulenames[${_modno}]}" +BUILT_MODULE_LOCATION[${_modno}]="pparport26" +# The install version is .ko.gz. The DKMS version is .ko. No conflicts. +DEST_MODULE_LOCATION[${_modno}]="/kernel/drivers/parport" +EOF + _modno=$((_modno+1)) + cp -pr 'pparport26/' "${_dkms}/" + sed -e '/modules:/ a make -j1 KERNELRELEASE=$(KERNELRELEASE) -C pparport26' -i "${_dkms}/Makefile" + sed -e '/clean:/ a make -j1 -C pparport26 clean' -i "${_dkms}/Makefile" + fi + # sed 'a' can't add leading tabs so we add them here. It's also handy because this guarantees tabs not spaces. + sed -e 's:^make:\t&:g' -i "${_dkms}/Makefile" + sed -e '/^KERNEL_/ s:shell uname -r:shell echo "$(KERNELRELEASE)":g' \ + -e '# No DKMS instructions say to do this but it works and keeps the MAKE line real simple' \ + -e 's:shell uname -r:KERNELRELEASE:g' \ + -e '# DKMS sets KERNELRELEASE which accidentally launches phase 2 of this Makefile' \ + -e '# Fix by changing the detection var.' \ + -e '# SUBDIRS makes more sense to me because I can see it in the Makefile!' \ + -e 's:^ifeq (\$(KERNELRELEASE),):ifeq (\$(SUBDIRS),):g' \ + -e '# Disable stuff only used for make install' \ + -e '/^base =/,/^$/ d' \ + -e '# Disable non kernel utilities' \ + -e 's:^UTILS:# &:g' \ + -i "${_dkms}"/*/'Makefile' + rm "${_dkms}"/*/*.sh "${_dkms}"/*/rc.* + if [ "${_opt_SERIAL}" -ne 0 ]; then + make -s -C "${_dkms}/pserial" clean KERNELRELEASE="$(uname -r)" + rm "${_dkms}/pserial"/{ps_addports,set_io8_rts,swirl.c} "${_dkms}/pserial"/setultrap.* "${_dkms}/pserial"/osultrap.* + fi + if [ "${_opt_PARALLEL}" -ne 0 ]; then + make -s -C "${_dkms}/pparport26" clean KERNELRELEASE="$(uname -r)" + fi + fi + set +u +} + +set +u |