summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: e8e75cd6064e72857cea114c31740228f5860519 (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
# Maintainer: Julian Houba <info at craftingdragon dot ch>
_pkgsrc=caqtdm
pkgname='caqtdm-git'
pkgver=4.6.1.r5761.g3a331b7
pkgrel=1
pkgdesc='caQtDM is a popular Epics framework for developing panels'
arch=('x86_64')
url='https://caqtdm.github.io/'
license=('GPL-3.0-or-later')
depends=(
    'epics-base'
    'gcc-libs'
    'glibc'
    'python'
    'qt6-base'
    'qt6-opcua'
    'qt6-positioning'
    'qt6-serialbus'
    'qt6-tools'
    'qwt'
    'zeromq'
)
makedepends=(
    'git'
    'qt6-5compat'
)
provides=("caqtdm=${pkgver}")
conflicts=('caqtdm')
source=("$_pkgsrc::git+https://github.com/caqtdm/caqtdm.git")
sha256sums=('SKIP')

pkgver() {
    cd "$srcdir/$_pkgsrc/caQtDM_Viewer"
    local _ver _rev _hash
    _ver=$(grep -oP 'CAQTDM_VERSION\s*=\s*\K[Vv]?[\d.]+' qtdefs.pri | sed 's/^[Vv]//')
    _rev=$(git rev-list --count HEAD)
    _hash=$(git rev-parse --short=7 HEAD)
    printf "%s.r%s.g%s" "$_ver" "$_rev" "$_hash"
}

build() {
    cd "$srcdir/$_pkgsrc"

    local _pythonver
    _pythonver=$(python --version 2>&1 | cut -d' ' -f2 | cut -d'.' -f1-2)

    export QWTLIBNAME=qwt
    export QWTINCLUDE=/usr/include/qwt
    export EPICS_BASE=/usr/lib/epics
    export PYTHONVERSION="$_pythonver"
    export ZMQ=/usr
    export ZMQINC=/usr/include
    export ZMQLIB=/usr/lib
    export CAQTDM_OPCUA=1
    export CAQTDM_MODBUS=1
    export CAQTDM_GPS=1
    export CAQTDM_NORPATH=1
    export EPICS_HOST_ARCH="linux-${CARCH}"
    export QTHOME=/usr
    export QWTHOME=/usr
    export QWTLIB=/usr/lib
    export QWTVERSION=6.1
    export EPICSINCLUDE="$EPICS_BASE/include"
    export EPICSLIB="$EPICS_BASE/lib/$EPICS_HOST_ARCH"
    export EPICSEXTENSIONS="$EPICS_BASE/extensions"
    export QTCONTROLS_LIBS="$srcdir/binaries"
    export CAQTDM_COLLECT="$srcdir/binaries"
    export QTBASE="$QTCONTROLS_LIBS"
    export CAQTDM_CA_ARCHIVELIBS="$srcdir/binaries/"
    export CAQTDM_LOGGING_ARCHIVELIBS="$srcdir/binaries"
    export QTDM_LIBINSTALL="$EPICSEXTENSIONS/lib/$EPICS_HOST_ARCH"
    export QTDM_BININSTALL="$EPICSEXTENSIONS/bin/$EPICS_HOST_ARCH"
    export PYTHONINCLUDE="/usr/include/python$_pythonver"
    export PYTHONLIB=/usr/lib/

    qmake6 ./all.pro
    make
}

package() {
    cd "$srcdir/$_pkgsrc"

    install -dm755 \
        "$pkgdir/opt/caqtdm/doc" \
        "$pkgdir/opt/caqtdm/lib/qt6" \
        "$pkgdir/usr/bin" \
        "$pkgdir/usr/include/caqtdm/plugins" \
        "$pkgdir/usr/include/caqtdm/caQtDM_Plugins" \
        "$pkgdir/usr/lib/qt6/plugins/designer" \
        "$pkgdir/etc/ld.so.conf.d"

    # Install compiled binaries and libraries
    cp -r "$srcdir/binaries/"* "$pkgdir/opt/caqtdm/lib/qt6/"

    # Create caQtDM wrapper script
    install -Dm755 /dev/stdin "$pkgdir/opt/caqtdm/lib/qt6/caqtdm" << 'EOF'
#!/bin/bash
caQtDM -style Fusion "$@" &
EOF

    # Create Qt Designer integration script
    install -Dm755 /dev/stdin "$pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer" << 'EOF'
#!/bin/bash
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do
    DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
    SOURCE="$(readlink "$SOURCE")"
    [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
done
DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
CAQTDM_HOME="$DIR/../.."

# Register help documentation
assistant6 -register "$CAQTDM_HOME/doc/caQtDM.qch"
export QT_PLUGIN_PATH="$CAQTDM_HOME/lib/qt6"
designer6 "$@"
EOF

    # Create linker configuration so shared libraries are found without rpath
    install -Dm644 /dev/stdin "$pkgdir/etc/ld.so.conf.d/caqtdm.conf" << 'EOF'
/opt/caqtdm/lib/qt6
/opt/caqtdm/lib/qt6/designer
/opt/caqtdm/lib/qt6/controlsystems
EOF

    # Symlink executables into /usr/bin
    ln -sf /opt/caqtdm/lib/qt6/caqtdm         "$pkgdir/usr/bin/caqtdm"
    ln -sf /opt/caqtdm/lib/qt6/caQtDM         "$pkgdir/usr/bin/caQtDM"
    ln -sf /opt/caqtdm/lib/qt6/adl2ui          "$pkgdir/usr/bin/adl2ui"
    ln -sf /opt/caqtdm/lib/qt6/edl2ui          "$pkgdir/usr/bin/edl2ui"
    ln -sf /opt/caqtdm/lib/qt6/caqtdm_designer "$pkgdir/usr/bin/caqtdm_designer"

    # Symlink Qt Designer plugins
    local _designerdir="$pkgdir/usr/lib/qt6/plugins/designer"
    ln -sf /opt/caqtdm/lib/qt6/designer/libqtcontrols_controllers_plugin.so \
        "$_designerdir/"
    ln -sf /opt/caqtdm/lib/qt6/designer/libqtcontrols_graphics_plugin.so \
        "$_designerdir/"
    ln -sf /opt/caqtdm/lib/qt6/designer/libqtcontrols_monitors_plugin.so \
        "$_designerdir/"
    ln -sf /opt/caqtdm/lib/qt6/designer/libqtcontrols_utilities_plugin.so \
        "$_designerdir/"

    # Install C++ header files
    install -Dm644 -t "$pkgdir/usr/include/caqtdm/" \
        "$srcdir/$_pkgsrc/caQtDM_QtControls/src/"*.h
    install -Dm644 -t "$pkgdir/usr/include/caqtdm/" \
        "$srcdir/$_pkgsrc/caQtDM_Lib/src/"*.h
    install -Dm644 -t "$pkgdir/usr/include/caqtdm/" \
        "$srcdir/$_pkgsrc/caQtDM_Viewer/src/"*.h
    install -Dm644 -t "$pkgdir/usr/include/caqtdm/plugins/" \
        "$srcdir/$_pkgsrc/caQtDM_QtControls/plugins/"*.h
    install -Dm644 -t "$pkgdir/usr/include/caqtdm/caQtDM_Plugins/" \
        "$srcdir/$_pkgsrc/caQtDM_Lib/caQtDM_Plugins/"*.h

    # Install extension-less convenience headers (Qt-style includes)
    find "$srcdir/$_pkgsrc/caQtDM_QtControls/src" -maxdepth 1 \
        -type f ! -name '*.*' \
        ! -iname '*license*' ! -iname '*copying*' ! -iname '*readme*' \
        -exec install -Dm644 -t "$pkgdir/usr/include/caqtdm/" {} +

    # Install documentation (referenced by caqtdm_designer via $CAQTDM_HOME/doc)
    install -Dm644 -t "$pkgdir/opt/caqtdm/doc/" \
        "$srcdir/$_pkgsrc/caQtDM_QtControls/doc/"*.qch \
        "$srcdir/$_pkgsrc/caQtDM_QtControls/doc/"*.html \
        "$srcdir/$_pkgsrc/caQtDM_QtControls/doc/"*.css
}