summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 62535d9d51f48fddd597c88255c5898b1c339723 (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
# Maintainer: mickael9 <mickael9 at gmail dot com>
# Contributor: Peter Ivanov <ivanovp@gmail.com>
# Contributor: joat
# Submitter: BxS <bxsbxs at gmail dot com>

pkgname=microchip-mplabx-bin
pkgver=3.15
pkgrel=1
pkgdesc="IDE for Microchip PIC and dsPIC development"
arch=(i686 x86_64)
url='http://www.microchip.com/mplabx'
license=(custom)
depends=(gtk2 alsa-lib libxslt libxtst "java-runtime>=7")
makedepends=(fakechroot desktop-file-utils)
makedepends_x86_64=(lib32-fakeroot)
optdepends=('microchip-mplabxc8-bin: C compiler for PIC10 PIC12 PIC16 PIC18 MCUs'
            'microchip-mplabxc16-bin: C compiler for PIC24 MCUs and dsPIC DSCs'
            'microchip-mplabxc32-bin: C Compiler for PIC32 MCUs'
            'microchip-mplabc18_bin: C compiler for PIC18 MCUs'
            'sdcc: C compiler for PIC16/18 MCUs'
            'java-openjfx: required JavaFX package for OpenJDK users'
            )
provides=(mplab)
conflicts=(mplab)
options=(!strip docs libtool emptydirs !zipman !upx)
install="${pkgname}.install"

_mplabx_dir="/opt/microchip/mplabx/v${pkgver}"
_mplabx_installer="MPLABX-v${pkgver}-linux-installer"

_mplabcomm_version=3.16.00
_mplabcomm_installer="MPLABCOMM-v${_mplabcomm_version}-linux-installer"
_mplabcomm_dir="/opt/microchip/mplabcomm/v${_mplabcomm_version}"

source=("http://ww1.microchip.com/downloads/en/DeviceDoc/${_mplabx_installer}.tar"
        "LICENSE")
source_x86_64=("fakechroot-i686.pkg.tar.xz::http://www.archlinux.org/packages/extra/i686/fakechroot/download/")

md5sums=('9391c04f5650cb180f4c908c573096c7'
         'a34a85b2600a26f1c558bcd14c2444bd')
md5sums_x86_64=('92b9a1dc8fa0534048790731a7bf2fc5')

backup=("${_mplabx_dir:1}/mplab_ide/etc/mplab_ide.conf")

PKGEXT='.pkg.tar'

package() {
  mkdir -p "${pkgdir}"/{etc,usr/{bin,lib},tmp}

  # Create a fake chroot in $pkgdir to run the installer into
  ln -s /usr/bin "${pkgdir}/"

  echo "root:x:0:0:root:/root:/bin/bash" > "${pkgdir}/etc/passwd"
  echo "root:x:0:root" > "${pkgdir}/etc/group"

  echo "Extracting installers..."
  sh ${_mplabx_installer}.sh --tar xf ./${_mplabx_installer}.run
  mv ${_mplabx_installer}.run "${pkgdir}/tmp"
  chmod 0755 "${pkgdir}/tmp/${_mplabx_installer}.run"

  # Create install script in chroot
  cat << EOF > "${pkgdir}/tmp/install.sh"
#!/bin/sh
LD_LIBRARY_PATH="${srcdir}/usr/lib/libfakeroot/fakechroot:\$LD_LIBRARY_PATH"
PATH=/bin
echo Running MPLABX installer...
tmp/${_mplabx_installer}.run --mode unattended
EOF

  chmod 0755 "${pkgdir}/tmp/install.sh"

  # Run the installer in the fake chroot
  fakechroot chroot "${pkgdir}" tmp/install.sh

  # Remove uninstaller files
  rm -f "${pkgdir}${_mplabx_dir}"/Uninstall_*

  # Fix ugly fonts
  sed -i 's/^default_options="/default_options="-J-Dawt.useSystemAAFontSettings=on /' "${pkgdir}${_mplabx_dir}/mplab_ide/etc/mplab_ide.conf"

  # Fix broken udev rules
  sed -i '1c \ACTION!="add", SUBSYSTEM!="usb_device", GOTO="jlink_rules_end"' "${pkgdir}/etc/udev/rules.d/99-jlink.rules"

  # Patch jdkhome to use system JRE
  local conf
  for conf in mplab_ipe/mplab_ipe mplab_ipe/ipecmd.sh mplab_ide/etc/mplab_ide.conf; do
    sed -i '/^jdkhome=/c \jdkhome=/usr/lib/jvm/default-runtime/' "${pkgdir}${_mplabx_dir}/${conf}"
  done
  sed -i '/^"$jdkhome"bin\/java/c\ java -jar '${_mplabx_dir}'/mplab_ipe/ipe.jar' "${pkgdir}${_mplabx_dir}/mplab_ipe/mplab_ipe"

  # Remove bundled JRE
  rm -rf "${pkgdir}${_mplabx_dir}/sys/java"
  rmdir "${pkgdir}${_mplabx_dir}/sys" # the intent here is to fail if something else than java is put into sys.

  # Move libs away from /usr/local/lib
  mv "${pkgdir}"/usr/local/lib/*.so{,.*} "${pkgdir}"/usr/lib/
  rm -rf "${pkgdir}/usr/local/"

  # Symlink executables
  ln -sf "${_mplabx_dir}"/mplab_ide/bin/mplab_ide "${pkgdir}/usr/bin/"
  ln -sf "${_mplabx_dir}"/mplab_ipe/mplab_ipe "${pkgdir}/usr/bin/"
  ln -sf "${_mplabcomm_dir}/lib/mchplinusbdevice" "${pkgdir}/etc/.mplab_ide/"

  # Symlink libs from MPLABCOMM
  local lib
  for lib in "${pkgdir}${_mplabcomm_dir}"/lib/*.so{,.*}; do
    local bname=$(basename "$lib")
    ln -sf "${_mplabcomm_dir}/lib/${bname}"  "${pkgdir}/usr/lib/"
  done

  # Correctly link .so.* -> .so for all libs
  for lib in "${pkgdir}"/usr/lib/*.so.*; do
    local bname=$(basename "$lib")
    local soname=${bname%.so.*}
    ln -sf ${bname} "${pkgdir}/usr/lib/${soname}.so"
  done

  # Tweak .desktop files for better desktop integration
  echo "StartupWMClass=MPLAB X IDE v${pkgver}" >> "${pkgdir}/usr/share/applications/mplab.desktop"
  echo "StartupWMClass=com-microchip-ipe-ui-ProdProgrammerApp" >> "${pkgdir}/usr/share/applications/mplab_ipe.desktop"

  # Install license files
  install -Dm 644 "${srcdir}"/LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
  install -Dm 644 "${pkgdir}${_mplabcomm_dir}/MPLABCOMMLicense.txt" "${pkgdir}/usr/share/licenses/${pkgname}/MPLABCOMMLicense.txt"

  # Cleanup
  rm "${pkgdir}"/{bin,etc/{group,passwd}}
  rm -r "${pkgdir}/tmp"
  # wtf
  rm -f "${pkgdir}${_mplabcomm_dir}/${_mplabcomm_installer}.run"
}