summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: befeb30a7af52c910a3724897f449c521be8d7ed (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
# Maintainer: Julian Houba <craftingdragon007 at outlook dot com>
pkgname='caqtdm'
pkgver=4.5.0
pkgrel=2
pkgdesc="caQtDM is a popular Epics framework for developing panels"
arch=('any')
url="http://caqtdm.github.io/"
license=('GPL-3.0-or-later')
depends=('qt6-base' 'qt6-tools' 'qwt-qt6' 'epics-base' 'zeromq' 'python' 'bash' 'glibc' 'gcc-libs')
makedepends=('patch' 'make' 'gcc' 'git' 'qt6-5compat')
source=("git+https://github.com/caqtdm/caqtdm.git#tag=V4.5.0"
        "fix_qwt_static_cast_gcc.patch"
        "no_rpath.patch")
sha512sums=('SKIP' '10e281ea0f6670ff908421622589b217187e998abd260a3a2a2f43d8d8f577ce072379aa21f35506208c27d2a3c8fd69295ae05a8f90dbdae597a58fdf8568ad'  '0b65a78690a223fa4114982604caf865cff0257126a6c299966508b8f21583755259cb71b07fa51f9614a13d75bd9474aed66295396235faa9404a3d1b371dd3')

prepare() {
    # Write environment variables to env_config.sh
    cat > "${srcdir}/env_config.sh" << 'EOF'
export QWTLIBNAME=qwt-qt6
export QWTINCLUDE=/usr/include/qwt-qt6
export EPICS_BASE=/usr/lib/epics
export PYTHONVERSION=$(python --version 2>&1 | cut -d ' ' -f 2 | cut -d '.' -f 1-2)
export ZMQ=/usr
export ZMQINC=$ZMQ/include
export ZMQLIB=$ZMQ/lib
export QTDM_RPATH=/opt/caqtdm/lib/qt6

if [ -z "$CARCH" ]; then
    export CARCH=$(uname -m)
fi

export EPICS_HOST_ARCH=linux-${CARCH}

export QTHOME=/usr
export QWTHOME=/usr
export QWTLIB=${QWTHOME}/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$PYTHONVERSION
export PYTHONLIB=/usr/lib/
EOF

    echo patching broken files
    patch --forward --strip=1 --input="${srcdir}/fix_qwt_static_cast_gcc.patch"
    echo patching config for rpath removal
    cd "$srcdir/caqtdm"
    patch --forward --strip=1 --input="${srcdir}/no_rpath.patch"
}

build() {
    cd "$srcdir/caqtdm"
    # Source the environment variables
    source "${srcdir}/env_config.sh"
    # Create make files
    qmake6 ./all.pro
    # Build the project
    make
}

package() {
    cd "$srcdir/caqtdm"

    mkdir -p "${pkgdir}/opt/caqtdm/doc"
    mkdir -p "${pkgdir}/opt/caqtdm/lib/qt6"
    mkdir -p "${pkgdir}/usr/bin"
    mkdir -p "${pkgdir}/usr/include"
    mkdir -p "${pkgdir}/usr/include/caqtdm"
    mkdir -p "${pkgdir}/usr/include/caqtdm/plugins"
    mkdir -p "${pkgdir}/usr/include/caqtdm/caQtDM_Plugins"
    mkdir -p "${pkgdir}/usr/lib"
    mkdir -p "${pkgdir}/usr/lib/qt6/plugins/designer/"
    mkdir -p "${pkgdir}/etc/ld.so.conf.d/"
    
    # Install binaries
    cp -r $srcdir/binaries/* $pkgdir/opt/caqtdm/lib/qt6
    echo "#!/bin/bash" > $pkgdir/opt/caqtdm/lib/qt6/caqtdm

    # Create caQtDM script
    echo "caQtDM -style Fusion \"\$@\" &" > $pkgdir/opt/caqtdm/lib/qt6/caqtdm

    # Make the script executable
    chmod +x $pkgdir/opt/caqtdm/lib/qt6/caqtdm

    # Create qt designer script
    echo "#!/bin/bash" >> "$pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer"
    echo "SOURCE=\"\${BASH_SOURCE[0]}\"" >> "$pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer"
    echo "while [ -h \"\$SOURCE\" ]; do # resolve \$SOURCE until the file is no longer a symlink" >> "$pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer"
    echo "  DIR=\"\$( cd -P \"\$( dirname \"\$SOURCE\" )\" && pwd )\"" >> "$pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer"
    echo     "  SOURCE=\"\$(readlink \"\$SOURCE\")\"" >> "$pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer"
    echo "  [[ \$SOURCE != /* ]] && SOURCE=\"\$DIR/\$SOURCE\" # if \$SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located" >> "$pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer"
    echo "done" >> "$pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer"
    echo "DIR=\"\$( cd -P \"\$( dirname \"\$SOURCE\" )\" && pwd )\"" >> "$pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer"
    echo "CAQTDM_HOME=\$DIR/../.." >> "$pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer"
    echo "# Register help" >> "$pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer"
    echo "assistant6 -register \$CAQTDM_HOME/doc/caQtDM.qch" >> "$pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer"
    echo "export QT_PLUGIN_PATH=\$CAQTDM_HOME/lib/qt6" >> "$pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer"
    echo "designer6 \$@" >> "$pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer"

    # Create linker config for finding so files without rpath
    echo "/opt/caqtdm/lib/qt6" > "$pkgdir/etc/ld.so.conf.d/caqtdm.conf"
    echo "/opt/caqtdm/lib/qt6/designer" >> "$pkgdir/etc/ld.so.conf.d/caqtdm.conf"
    echo "/opt/caqtdm/lib/qt6/controlsystems" >> "$pkgdir/etc/ld.so.conf.d/caqtdm.conf"

    # Make the script executable
    chmod +x $pkgdir/opt/caqtdm/lib/qt6/caqtdm_designer


    # Create symlinks
    ln -sfv /opt/caqtdm/lib/qt6/caqtdm $pkgdir/usr/bin/caqtdm
    ln -sfv /opt/caqtdm/lib/qt6/caQtDM $pkgdir/usr/bin/caQtDM
    ln -sfv /opt/caqtdm/lib/qt6/adl2ui $pkgdir/usr/bin/adl2ui
    ln -sfv /opt/caqtdm/lib/qt6/edl2ui $pkgdir/usr/bin/edl2ui
    ln -sfv /opt/caqtdm/lib/qt6/caqtdm_designer $pkgdir/usr/bin/caqtdm_designer

    ln -sfv /opt/caqtdm/lib/qt6/designer/libqtcontrols_controllers_plugin.so $pkgdir/usr/lib/qt6/plugins/designer/
    ln -sfv /opt/caqtdm/lib/qt6/designer/libqtcontrols_graphics_plugin.so $pkgdir/usr/lib/qt6/plugins/designer/
    ln -sfv /opt/caqtdm/lib/qt6/designer/libqtcontrols_monitors_plugin.so $pkgdir/usr/lib/qt6/plugins/designer/
    ln -sfv /opt/caqtdm/lib/qt6/designer/libqtcontrols_utilities_plugin.so $pkgdir/usr/lib/qt6/plugins/designer/
    


    # Install include files and docs
    cp $srcdir/caqtdm/caQtDM_QtControls/src/*.h     $pkgdir/usr/include/caqtdm

    cp $srcdir/caqtdm/caQtDM_QtControls/src/caApplyNumeric   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caBitnames   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caByte   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caCalc   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caCamera   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caCartesianPlot   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caChoice   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caFrame   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caGauge   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caGraphics   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caImage   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caLabel   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caLed   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caLineEdit   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caMenu   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caMessageButton   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caMimeDisplay   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caMultiLineString   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caNumeric   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caSlider   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caSpinbox   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caStripPlot   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caTextEntry   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caThermo   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caToggleButton   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/caWaterfallPlot   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/EApplyButton   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/EArrow   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/EFlag   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/EGauge   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/ELabel   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/ESimpleLabel   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/EWidget   $pkgdir/usr/include/caqtdm
    cp $srcdir/caqtdm/caQtDM_QtControls/src/QtControls   $pkgdir/usr/include/caqtdm

    cp $srcdir/caqtdm/caQtDM_QtControls/plugins/*.h  $pkgdir/usr/include/caqtdm/plugins

    cp $srcdir/caqtdm/caQtDM_Lib/src/*.h     $pkgdir/usr/include/caqtdm
        
    cp $srcdir/caqtdm/caQtDM_Lib/caQtDM_Plugins/*.h     $pkgdir/usr/include/caqtdm/caQtDM_Plugins

    cp $srcdir/caqtdm/caQtDM_Viewer/src/*.h     $pkgdir/usr/include/caqtdm
        
    cp $srcdir/caqtdm/caQtDM_QtControls/doc/*.qch     $pkgdir/opt/caqtdm/doc
    cp $srcdir/caqtdm/caQtDM_QtControls/doc/*.html     $pkgdir/opt/caqtdm/doc
    cp $srcdir/caqtdm/caQtDM_QtControls/doc/*.css     $pkgdir/opt/caqtdm/doc
}