summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: b808b97591579c4f8ea425c4c47f374039fe359b (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
# Maintainer: Gonçalo Pereira <you@example.com>
# Contributor: Fabio 'Lolix' Loli <fabio.loli@disroot.org>

pkgname=linuxcnc
pkgver=2.9.8
pkgrel=3
pkgdesc="Controls CNC machines (mills, lathes, 3D printers, robots, etc.)"
arch=(x86_64)
url="https://linuxcnc.org/"
license=(GPL2 custom)
depends=(
  glibc python gtk3 libusb libxss python-cairo gobject-introspection-runtime
  dbus-python python-pillow libxmu python-gobject tk python-matplotlib boost-libs
  python-numpy gstreamer at-spi2-core libepoxy libtirpc libxft harfbuzz fontconfig
  gdk-pixbuf2 libxext librsvg glib2 zlib cairo readline systemd-libs freetype2
  libx11 libxinerama python-configobj libgpiod python-yapps2 tcl pango bwidget
  python-opengl
)
makedepends=(intltool boost asciidoc glu procps-ng psmisc tclx libtirpc)
options=(!strip)

source=(
  "$pkgname-$pkgver.tar.gz::https://github.com/LinuxCNC/linuxcnc/archive/refs/tags/v$pkgver.tar.gz"
  "unredestributable.txt"
)

sha256sums=('e106b0c41b15bb93da7308861b4754ca647d6f4a4f298ed419bf3d192aa4a42f'
            '228a035c143ccbdd6056e1189267b034f046742cae034bff821eccc8dbc68ee3')

prepare() {
  cd "$srcdir/$pkgname-$pkgver/src"

  # libtirpc (glibc no longer provides SunRPC)
  export CPPFLAGS="-I/usr/include/tirpc"
  export CFLAGS="-I/usr/include/tirpc"
  export LDFLAGS="-ltirpc"
  
  ./autogen.sh

  ./configure \
    --prefix=/usr \
    --enable-non-distributable=yes \
    --with-realtime=uspace \
    --without-libmodbus \
    --disable-gtk2
}

build() {
  cd "$srcdir/$pkgname-$pkgver/src"
  make
}

package() {
  cd "$srcdir/$pkgname-$pkgver/src"
  DESTDIR="$pkgdir" make install

  # License
  install -Dm644 "$srcdir/unredestributable.txt" \
    "$pkgdir/usr/share/licenses/$pkgname/unredestributable.txt"

  # Desktop menu
  install -Dm644 ../share/menus/CNC.menu \
    "$pkgdir/etc/xdg/menus/CNC.menu"

  # Tcl path fix (TCLLIBPATH is space-separated)
  install -Dm644 /dev/stdin "$pkgdir/etc/profile.d/linuxcnc.sh" <<'EOF'
[[ " $TCLLIBPATH " != *" /usr/lib/tcltk/linuxcnc "* ]] && \
export TCLLIBPATH="/usr/lib/tcltk/linuxcnc $TCLLIBPATH"
EOF

  # Fix Python path (dist-packages → site-packages)
  pyver=$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
  if [[ -d "$pkgdir/usr/lib/python3/dist-packages" ]]; then
    mkdir -p "$pkgdir/usr/lib/python$pyver/site-packages"
    mv "$pkgdir/usr/lib/python3/dist-packages/"* "$pkgdir/usr/lib/python$pyver/site-packages/"
    rmdir "$pkgdir/usr/lib/python3/dist-packages" || true
  fi

  # Ensure hallib and modules are in /usr/lib/linuxcnc
  mkdir -p "$pkgdir/usr/lib/linuxcnc/modules"
  cp -a ../rtlib/*.so "$pkgdir/usr/lib/linuxcnc/modules/"

  # Install manpages
  install -Dm644 ../docs/man/man1/*.1 "$pkgdir/usr/share/man/man1"
  install -Dm644 ../docs/man/man3/* "$pkgdir/usr/share/man/man3"
  install -Dm644 ../docs/man/man9/* "$pkgdir/usr/share/man/man9"

  # Fix: Remove /lib directory (Arch uses /usr/lib, /lib is a symlink)
  # Move any contents to /usr/lib if they exist, then remove /lib
  if [[ -d "$pkgdir/lib" ]]; then
    if [[ -n "$(ls -A "$pkgdir/lib")" ]]; then
      cp -a "$pkgdir/lib/"* "$pkgdir/usr/lib/"
    fi
    rm -rf "$pkgdir/lib"
  fi
}