summaryrefslogtreecommitdiff
blob: a7473d0ce0a9ffbdbd69dc26fd45f857af0ed3e1 (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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI=3

inherit eutils linux-mod autotools

DESCRIPTION="Kernel module and driver library for GPIB (IEEE 488.2) hardware"
HOMEPAGE="http://linux-gpib.sourceforge.net/"
SRC_URI="mirror://sourceforge/linux-gpib/${P}.tar.gz
	firmware? ( http://linux-gpib.sourceforge.net/firmware/gpib_firmware-2006-11-12.tar.gz )"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="pcmcia static debug guile perl php python tcl doc firmware"

RDEPEND="
	tcl? ( dev-lang/tcl )
	guile? ( dev-scheme/guile )
	perl? ( dev-lang/perl )
	php? ( dev-lang/php )
	python? ( dev-lang/python )
	firmware? ( sys-apps/fxload )
"

DEPEND="${RDEPEND}
	sys-kernel/module-rebuild
	doc? ( app-text/docbook-sgml-utils )
"

pkg_setup () {
	linux-mod_pkg_setup

	case ${KV_MINOR} in
		4) die "This version of Linux-GPIB requires a version 2.6.x of the Linux kernel. 2.4.x kernels are supported by Linux-GPIB versions 3.1.x." ;;
		6) ;;
		*) die "Unsupported kernel version '${KV}'." ;;
	esac

	if [ ${KV_PATCH} -lt 8 ] ; then
		die "Kernels older than 2.6.8 are not supported."
	fi
}

src_prepare () {
	# Needed to prevent sandbox violations
	epatch "${FILESDIR}/${P}-drivers-make.am.patch"

	# Needed to install Gpib.py inside the sandbox
	epatch "${FILESDIR}/${P}-language-python-makefile.am.patch"

	eautoreconf
}

src_configure () {
	set_arch_to_kernel
	econf \
		$(use_enable pcmcia) \
		$(use_enable static) \
		$(use_enable debug driver-debug) \
		$(use_enable guile guile-binding) \
		$(use_enable perl perl-binding) \
		$(use_enable php php-binding) \
		$(use_enable python python-binding) \
		$(use_enable tcl tcl-binding) \
		$(use_enable doc documentation) \
		--with-linux-srcdir=${KV_DIR} \
		|| die "configure failed"
}

src_install () {

	FIRM_DIR=/usr/share/usb

	# Here I changed the sbindir in order to install the gpib_config to /sbin,
	# not /usr/sbin. This is done to enable running gpib_config from
	# the modprobe.conf file: if /usr is not in the root file system,
	# but a mounted partition then gpib_congig cannot be found in the moment when
	# modprobe is run.
	make \
		DESTDIR=${D} \
		INSTALL_MOD_PATH=${D} \
		HOTPLUG_USB_CONF_DIR=${D}/etc/hotplug/usb \
		USB_FIRMWARE_DIR=${D}${FIRM_DIR} \
		docdir=/usr/share/doc/${PF}/html \
		install || die "install problem"

	echo "KERNEL==\"gpib[0-9]*\",	MODE=\"0660\", GROUP=\"gpib\"" >> 99-gpib.rules
	insinto /etc/udev/rules.d/
	doins 99-gpib.rules

	dodoc doc/linux-gpib.pdf ChangeLog AUTHORS README* NEWS

	insinto /etc
	newins util/templates/gpib.conf gpib.conf
	newins util/templates/gpib.conf gpib.conf.example

	if use pcmcia ; then
		dodir /etc/pcmcia
		insinto /etc/pcmcia
		doins "${S}"/etc/pcmcia/*
	fi

	if use firmware ; then

		dodir "${FIRM_DIR}/agilent_8237a"
		insinto "${FIRM_DIR}/agilent_8237a"
		doins "${WORKDIR}"/gpib_firmware-2006-11-12/agilent_8237a/*

		dodir "${FIRM_DIR}/ni_gpib_usb_b"
		insinto "${FIRM_DIR}/ni_gpib_usb_b"
		doins "${WORKDIR}"/gpib_firmware-2006-11-12/ni_gpib_usb_b/*

		dodir "/usr/share/linux-gpib/hp_82341"
		insinto "/usr/share/linux-gpib/hp_82341"
		doins "${WORKDIR}"/gpib_firmware-2006-11-12/hp_82341/*

	fi
}

pkg_preinst () {
	enewgroup gpib
}

pkg_postinst () {

	/sbin/depmod -ae
	make -C "${S}"/drivers device-file-check-emerge
	module-rebuild add ${CATEGORY}/${PF}

	einfo "You need to run the 'gpib_config' utility to setup the driver before"
	einfo "you can use it. In order to do it automatically you can add to your"
	einfo "start script something like this (supposing the appropriate driver"
	einfo "is loaded on the startup):"
	einfo "		gpib_config --minor 0"
	echo
	einfo ""
	einfo "To give a user access to the computer's gpib board you will have to add"
	einfo "them to the group 'gpib' or, you could change the permissions on the device"
	einfo "files /dev/gpib[0-15] to something you like better, using 'chmod'."
	echo
	einfo ""
	einfo "Edit /etc/gpib.conf to match your interface board, and any devices you wish"
	einfo "to open via ibfind().  See the documentation in /usr/share/linux-gpib/html for"
	einfo "more information."

	if use pcmcia ; then
		echo
		einfo ""
		einfo "For PCMCIA cards:"
		einfo "All files needed for a PCMCIA board were copied to /etc/pcmcia."
		einfo "You may wish to edit the options passed to the gpib_config call in the"
		einfo "/etc/pcmcia/linux-gpib-pcmcia script."
		einfo "You may need to send a SIGHUP signal to the cardmgr daemon to force it"
		einfo "to reload the files in /etc/pcmcia (alternatively you could use your"
		einfo "pcmcia init.d script to restart the cardmgr, or you could just reboot)."
		einfo "The driver module will be loaded as needed by the cardmgr."
		einfo ""
	fi

	if use firmware ; then
		echo
		einfo ""
		einfo "For Agilent (HP) 82341C and 82341D cards:"
		einfo "The firmware for these boards is uploaded by passing the appropriate"
		einfo "firmware file from /usr/share/linux-gpib/hp_82341 directory to"
		einfo "gpib_config using the -I or --init-data command line option. Example:"
		einfo "gpib_config --minor 0 --init-data \\"
		einfo "/usr/share/linux-gpib/hp_82341/hp_82341c_fw.bin"
		einfo ""
	fi

}

pkg_postrm() {
	/sbin/depmod -ae
	module-rebuild del ${CATEGORY}/${PF}
}