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
|
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DESCRIPTION="LabJackM driver + C library and Kipling for LabJack T4, T7, and Digit (64-bit)"
HOMEPAGE="https://labjack.com/support/software/installers/ljm"
SRC_URI="https://labjack.com/sites/default/files/software/labjack_ljm_software_2017_12_21_x86_64.tar.gz"
LICENSE="LabJack Boost-1.0 LGPL-2.1 MIT"
SLOT="0"
KEYWORDS="~amd64"
IUSE="examples +kipling"
DEPEND="app-arch/unmakeself
kipling? ( gnome-base/gconf )
"
RDEPEND="${DEPEND}"
S="${WORKDIR}/labjack_ljm_software_2017_12_21_x86_64"
src_prepare() {
eapply_user
# Unpack selfextracting tarball:
unmakeself labjack_ljm_installer.run
# Fix destination directories:
sed -i \
-e "s:_DESTINATION=/usr/local/lib:_DESTINATION=${PORTAGE_BUILDDIR}/image/usr/lib64:" \
-e "s:_DESTINATION=/usr/local/:_DESTINATION=${PORTAGE_BUILDDIR}/image/usr/:" \
-e "s:_DESTINATION=/opt:_DESTINATION=${PORTAGE_BUILDDIR}/image/opt:" \
-e "s:/lib/udev/rules.d:${PORTAGE_BUILDDIR}/image/lib/udev/rules.d:" \
setup.sh
# Don't clean up. Print messages in success() in pkg_info():
sed -i 's:go rm -rf "./labjack_ljm_software":echo "The package was installed succesfully"; exit 0 # \&:' setup.sh
# The library path is added to /etc/ld.so.conf and ldconfig is run, but since we use the default dir (/usr/lib64/), this isn't necessary:
sed -i 's:^setup_ldconfig$:# setup_ldconfig:' setup.sh
# Cannot restart device rules at this stage:
sed -i 's:^restart_device_rules$:# restart_device_rules:' setup.sh
# Remove path from symbolic links in the same directory:
sed -i \
-e 's:ln -s -f ${LIB_DESTINATION}/${LJM_REALNAME} ${LIB_DESTINATION}/${LJM_SONAME}:ln -s -f ${LJM_REALNAME} ${LIB_DESTINATION}/${LJM_SONAME}:' \
-e 's:ln -s -f ${LIB_DESTINATION}/${LJM_SONAME} ${LIB_DESTINATION}/${LJM_LINKERNAME}:ln -s -f ${LJM_SONAME} ${LIB_DESTINATION}/${LJM_LINKERNAME}:' \
setup.sh
# Portage now refuses world-writable files and directories. This should be reported at the end:
# sed -i \
# -e 's| --mode=777 | --mode=755 |' \
# -e 's|chmod 777 |chmod 755 |' \
# -e 's| chmod 666 | chmod 644 |' \
# -e 's|chmod a+rw |chmod 644 |' \
# setup.sh
}
src_install() {
## Note: installing in /usr/bin, /usr/lib, /usr/include and /usr/share doesn't work, since the /usr/local/... is hardcoded in some of the binaries...
mkdir -p "${PORTAGE_BUILDDIR}/image/usr/bin" "${PORTAGE_BUILDDIR}/image/usr/include" "${PORTAGE_BUILDDIR}/image/usr/lib64" "${PORTAGE_BUILDDIR}/image/usr/share" "${PORTAGE_BUILDDIR}/image/opt" "${PORTAGE_BUILDDIR}/image/lib/udev/rules.d"
VERSION=`head -n 100 labjack_ljm_installer.run | grep scriptargs= | sed -e 's/scriptargs=//' -e 's/"//g'` # v2017_12_21_x86_64 has LJM library v1.17.0
elog "${P} contains LJM library ${VERSION}"
elog "Running LabJack setup script..."
./setup.sh ${VERSION} || die
elog "Exiting LabJack setup script..."
# Remove symlink to non-existing target:
rm -f "${PORTAGE_BUILDDIR}/image/opt/labjack_kipling/node_modules/.bin/ncp"
# Install header files for examples to /usr/include, so that they can be used elsewhere:
insinto usr/include
doins labjack_ljm_examples/LabJackMModbusMap.h labjack_ljm_examples/examples/LJM_Utilities.h labjack_ljm_examples/examples/stream/LJM_StreamUtilities.h
chmod a-x "${PORTAGE_BUILDDIR}/image/usr/include/LabJackM.h" # Fix permissions
# Install examples if desired:
if use examples; then
elog "Copying examples..."
insinto usr/share/LabJack
doins -r labjack_ljm_examples
fi
# Do NOT install kipling if explicitly indicated with the -kipling USE flag:
use kipling || rm -rf "${PORTAGE_BUILDDIR}/image/opt/" "${PORTAGE_BUILDDIR}/image/usr/bin/"
# Create symlinks from /usr/... to /usr/local/... so that things actually work:
mkdir -p "${PORTAGE_BUILDDIR}/image/usr/local/bin" "${PORTAGE_BUILDDIR}/image/usr/local/include" "${PORTAGE_BUILDDIR}/image/usr/local/lib64" "${PORTAGE_BUILDDIR}/image/usr/local/share"
MAJOR_VERSION=`echo ${VERSION} | sed 's:^\(.*\)\..*\..*$:\1:'`
use kipling && dosym ../../bin/labjack_kipling usr/local/bin/labjack_kipling
dosym ../../lib64/libLabJackM.so usr/local/lib64/libLabJackM.so
dosym ../../lib64/libLabJackM.so.${MAJOR_VERSION} usr/local/lib64/libLabJackM.so.${MAJOR_VERSION}
dosym ../../lib64/libLabJackM.so.${VERSION} usr/local/lib64/libLabJackM.so.${VERSION}
dosym ../../include/LabJackM.h usr/local/include/LabJackM.h
dosym ../../include/LabJackMModbusMap.h usr/local/include/LabJackMModbusMap.h
dosym ../../include/LJM_StreamUtilities.h usr/local/include/LJM_StreamUtilities.h
dosym ../../include/LJM_Utilities.h usr/local/include/LJM_Utilities.h
dosym ../../share/LabJack usr/local/share/LabJack
# Does not seem to work:
strip --strip-unneeded -R .comment -R .GCC.command.line -R .note.gnu.gold-version \
"${PORTAGE_BUILDDIR}/image/opt/labjack_kipling/Kipling" "${PORTAGE_BUILDDIR}/image/opt/labjack_kipling/core" "${PORTAGE_BUILDDIR}/image/usr/lib64/libLabJackM.so.${VERSION}"
}
pkg_postinst() {
elog
elog "You may have to manually restart the device rules, e.g. using "
elog " 'udevadm control --reload' or restart your computer."
elog
elog "If you have any LabJack devices connected, please disconnect and"
elog " reconnect them afterwards for device rule changes to take effect"
elog " (or use 'udevadm trigger')."
elog
elog "Note that (user) settings will be saved in the world writable"
elog " directory /usr/share/LabJack/"
elog
elog "labjack-ljm expects to be installed in /usr/local/, rather than /usr/."
elog "This has been hard-coded in some of the binaries, and moving files will"
elog " result in a defunct package."
}
|