diff options
Diffstat (limited to 'PKGBUILD')
-rw-r--r-- | PKGBUILD | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..97195c03c37b --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,168 @@ +# This is an example PKGBUILD file. Use this as a start to creating your own, +# and remove these comments. For more information, see 'man PKGBUILD'. +# NOTE: Please fill out the license field for your package! If it is unknown, +# then please put 'unknown'. + +# Maintainer: David Strawn <isomarcte a__t gmail d__o__t c__o__m> +pkgname='metals' +pkgver='0.4.4' +pkgrel=1 +epoch= +pkgdesc='Language Server For Scala' +url='https://scalameta.org/metals/' +arch=(any) +license=('Apache') +groups=() +depends=('java-environment=8' 'findutils' 'python') +makedepends=('sbt' 'sed' 'grep' 'coreutils') +checkdepends=() +optdepends=() +provides=() +conflicts=() +replaces=() +backup=() +options=() +install= +changelog= +source=("https://github.com/scalameta/${pkgname}/archive/v${pkgver}.tar.gz" 'metals-client.sh' 'metals-emacs.sh' 'metals-vim.sh' 'metals-vscode.sh' 'metals-sublime.sh') +noextract=() +md5sums=('dd997e9d688f22fe888966800a8ecb54' + 'd680f9edd2d896048f077cfb8b023ac5' + 'a883291ea3ae425c2c51b8310c7e4d1b' + 'dcb3e81e16b90333647d3bc052ce1ece' + 'b1d64c236e20f91fbbaa06a32dbb72e7' + '2d7e382b962b705bcd5862f7182574fe') +sha1sums=('779b02af5af4a61f0449f4f0f8f7f7a30aa81ed7' + 'dafd89307afc8f75fa6c15903f84e400bf4d69a4' + '9e0f0f83edd2dacc1053f66297e4f2c16618c48e' + '214de4e3e38cffce813ba4eafcaf5ca641d95d50' + 'f3fd084eee605caa54fdeb3787dab7c359c75e32' + '42ee89665251bf99935c91283750fe431f7713c4') +sha224sums=('043ea513e2493a2710db34a7a168591663f3a2e3bf379d1575b69193' + '1638081b5bcca4919152528b1b6a340518fc326ed973e7832c80b41c' + '4df1908182071dc2359d0ced412c7ab11ee81cd1d2f1039436776e92' + 'c78851f0f0f1839563ae32e9b9bfa1221165e93050036a52017a5fd9' + '909f6b8caecfcb587c982e55f4ded982a8cb7493e79b621bb6dc9b34' + 'd4ae4cba4aaa5d2ad1baf45d7a4aa4dce894569ca5fba5e9d63f2a95') +sha256sums=('db394fe330c6ff2282b4c4a9b0194dcf8796039e13cfc493383d5f5becd3e865' + '1277ef9c0cefdb769cfb4e6182a8aa55542cae9604b8f8f3dc98c909d8160572' + 'f8f895cb11d0b9af2b5320acf5862fb878f3ba94324bca35278b8aa31b32020c' + '351f317247124f1ba05680520ca6cacb9c8ed9259d50505aa5127018bcad620d' + 'a60cfc3f0fc6fde8309ee7cd9c4a2bdf58668314cee8bdbc7938809e3de4e6c4' + '1f587cc96100d560a43da35127ed1b5d2e36d14211f20e7931029abcab64d430') +sha384sums=('8942d46070eed792f48cb3744003759e620b7adbbe57f2b0c1291574d427d2462ca1a410cbf6081c2a1cfb253f6f2d7d' + '090dce5f166dd210e22ded19eb0150cb35c390d07f2b93bb824cf4fadf4c188788246c264a59aab2f908258f81c0389d' + 'ae8b87a65ee897708134374f976d6b704d48f1f525e036de12cc793ab6960d2bcc176a57be886b0204ddba7c94b93214' + '5c7aa52760f882910dca99f046c1b4384d36e72b40709a513345087ade967a0668a1b003e23320c57200fefb65772016' + '71326bea2d7905bce5a1a4a495108af53b06cc162c86da46a62e85666ce7a78b25e7258219dc953da08743d050e86a60' + '1235abb496221584c8b11b987460c7683ab160210b86d7a5acf117ad9c3315733795bc10af73844f731c20f1c25c64c7') +sha512sums=('e965b9dd43b1cf7f5d166839c8f89874eaea03c9e93f3098a011fd19ba59eab0bc781a30669eb16512cce2a17397aa98c05f84e4993428b3e546db68ba9e496e' + '6cad8b806c5111604381d8ce760db9da8afd46312b8916678af65ace65e531b402e481e457bb7265bc3a3699f08b612b7b231755934af9bd7ee221b902e0dcd7' + '95232be1232d3189a82cc0fe6af1d00fffd8334908e6d166143c69c0eda8e3a24674ce06d85e36213bc6a7044ae2f6a76d94a0715852aaf78b205a08112b403a' + '1f1b034051fb65170bfd3f33cb8eb8a2f75018c1d32ef3a404e876427c3c94dd3beeb17d050a3898e803ad1f789b1b6f8258c0e81b4688b4fc17eb8d8f977522' + '70a0cc5eb6b9a3b64a056524a1187626628e248f9fe419b00aaa1d665af482aa18c6e1c84570b1d1d196f0b143f2ccf91f26bc0c332e8f46120ce1cd5d68b676' + '485f0360f0a25de9e397e44a987fdb2c5872de62568215f225572d0d0607dcab1ceb15d350b917c27c822caf89bdb24abf1433240ceca25867e0a6696d41f240') +validpgpkeys=() + +build() { + export COURSIER_CACHE="${srcdir}/.cache/coursier/v1" + + local -r _SBT_DIR="${srcdir}/.sbt" + local -r _SBT_IVY="${srcdir}/.ivy2" + cd "$pkgname-$pkgver" + sbt -sbt-dir "$_SBT_DIR" -ivy "$_SBT_IVY" clean compile +} + +check() { + export COURSIER_CACHE="${srcdir}/.cache/coursier/v1" + + local -r _SBT_DIR="${srcdir}/.sbt" + local -r _SBT_IVY="${srcdir}/.ivy2" + cd "$pkgname-$pkgver" + ## Tests on most recent release currently fail + # sbt test +} + +package() { + export COURSIER_CACHE='../.cache/coursier/v1' + + ## Constants ## + local -r _SBT_DIR='../.sbt' + local -r _SBT_IVY='../.ivy2' + local -r _TARGET_DIR='/usr/share/java/metals' + local -r _DEST_DIR="${pkgdir}${_TARGET_DIR}" + local -r _BIN_DEST_DIR="${_DEST_DIR}/bin" + local -r _LIB_DEST_DIR="${_DEST_DIR}/lib" + local -r _JAR_DEST_DIR="${_DEST_DIR}/jars" + local -r _USR_BIN="${pkgdir}/usr/bin" + local -r _TEMP_FILE="$(mktemp)" + local -r _LAUNCHER_SCRIPTS=('metals-client.sh' 'metals-emacs.sh' 'metals-vim.sh' 'metals-vscode.sh' 'metals-sublime.sh') + + ## Variables ## + local LIB_NAME + + ## Change Into Correct Directory ## + pushd "$pkgname-$pkgver" + + ## Create lib And bin Directories ## + install -d "$_LIB_DEST_DIR" + install -d "$_BIN_DEST_DIR" + + ## Install Class Files And Jars ## + + ### Determine Dependencies ### + + # If you're reading this and you know of a better way to get all + # the dependencies from SBT directly, please let me know. + sbt -sbt-dir "$_SBT_DIR" -ivy "$_SBT_IVY" compile 'show metals/dependencyClasspath' 2>/dev/null | grep Attributed | sed 's/^[^\*]\+\* Attributed(\([^)]\+\).*/\1/g' > "$_TEMP_FILE" + while read dep + do + local _SANATIZED_DEP="${dep##*${pkgname}-${pkgver}/}" + # Sort out directories from modules from third-party jars. + if [ -d "$_SANATIZED_DEP" ] + then + pushd "$_SANATIZED_DEP" + cp -r ./* "${_LIB_DEST_DIR}/" + popd + else + if [ ! -e "$_JAR_DEST_DIR" ] + then + install -d "${_JAR_DEST_DIR}" + fi + local _JAR_PATH="${dep##*/maven2}" + + install -D "$_SANATIZED_DEP" "${_JAR_DEST_DIR}${_JAR_PATH}" + fi + done<"$_TEMP_FILE" + + ## Install Metals Class Files ## + + install -d "${_DEST_DIR}/metals" + pushd 'metals/target/scala-2.12/classes' + cp -r ./* "${_DEST_DIR}/metals/" + popd + + ## Install And Symlink Launcher Scripts ## + for launcher in ${_LAUNCHER_SCRIPTS[@]} + do + local _LINK_NAME="${launcher##*/}" + _LINK_NAME="${launcher%%.*}" + if [ ! -e "$_USR_BIN" ] + then + install -d "${_USR_BIN}" + fi + install -m 755 "../${launcher}" "$_BIN_DEST_DIR" + ln -s "${_TARGET_DIR}/bin/${launcher}" "${_USR_BIN}/${_LINK_NAME}" + done + + ## Ensure Correct Permissions ## + + chown root:root -R "$_DEST_DIR" + chmod u=rwX -R "$_DEST_DIR" + chmod u=rwX -R "$_BIN_DEST_DIR" + chmod og=rX -R "$_DEST_DIR" + + ## Cleanup ## + rm "$_TEMP_FILE" + popd +} |