summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 06695fc885918726a18ac0a0d31100ad106e4422 (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
# Maintainer: Vladimir Panteleev <arch-pkg at thecybershadow.net>
# Contributor: zfo <zfoofz1@gmail.com>
# Contributor: Mihails Strasuns <public@dicebot.lv>
# Contributor: Sven-Hendrik Haase <sh@lutzhaase.com>

_pkgname=ldc
pkgname=("${_pkgname}-git" 'liblphobos-git')
groups=('dlang' 'dlang-ldc')
pkgver=v1.9.0.beta1
epoch=2
pkgrel=1
pkgdesc="A D Compiler based on the LLVM Compiler Infrastructure including D runtime and libphobos2"
arch=('i686' 'x86_64')
url="https://github.com/ldc-developers/ldc"
license=('BSD')
makedepends=('git' 'cmake' 'llvm' 'dmd' 'bash-completion')

source=("git+https://github.com/ldc-developers/ldc.git"
        "git+https://github.com/ldc-developers/druntime.git"
        "git+https://github.com/ldc-developers/phobos.git"
        "git+https://github.com/ldc-developers/dmd-testsuite.git"
        "ldc2.conf")
sha256sums=('SKIP'
            'SKIP'
            'SKIP'
            'SKIP'
            '7f7eea41e730175ea52993f82bef5bdea6d6fc628344cda9488c04bf4b430024')

pkgver() {
  cd "${srcdir}/${_pkgname}"
  git describe --tags HEAD | sed 's/-/./g'
}

prepare() {
  cd "${srcdir}/${_pkgname}"

  git submodule init
  git config submodule.druntime.url "${srcdir}/druntime"
  git config submodule.phobos.url "${srcdir}/phobos"
  git config submodule.tests/d2/dmd-testsuite.url "${srcdir}/dmd-testsuite"
  git submodule update

  # patch the config file to be /etc/ldc2-git.conf
  sed 's/ldc2[.]conf/ldc2-git.conf/' -i driver/configfile.cpp

  # patch ldc to properly link to ldc-git (needed for ldmd)
  sed 's/LDC_EXE ldc2/LDC_EXE ldc2-git/' -i CMakeLists.txt
  sed 's/LDMD_EXE ldmd2/LDMD_EXE ldmd2-git/' -i CMakeLists.txt

  # patch bash-completion
  sed 's/\(ldc2\?\)\b/\1-git/g' -i bash_completion.d/ldc2

  # it's faster just to rename the config files
  mv ldc2_phobos.conf.in ldc2-git_phobos.conf.in
  mv ldc2_install.conf.in ldc2-git_install.conf.in
}

build() {
  cd "${srcdir}/${_pkgname}"

  mkdir -p build && cd build

  # workaround for wrong ld flag format generated by cmake:
  # export LDFLAGS="-L-O1 -L--sort-common -L--as-needed -L-z -Lrelro"

  local args=(
    env

    # Use host DMD
    # This 1) ensures we use the main dmd package, and not something in the user's $PATH;
    # and 2) compilation with ldc links Phobos/Druntime as shared libraries;
    # dmd does static linking to the rescue!
    DMD=/usr/bin/dmd

    cmake
    -DCMAKE_INSTALL_PREFIX=/usr
    -DCMAKE_BUILD_TYPE=Release
    -DCMAKE_SKIP_RPATH=ON
    -DINCLUDE_INSTALL_DIR=/usr/include/dlang/ldc-git

    # This is the git version - use static linking by default
    -DBUILD_SHARED_LIBS=ON

    # https://github.com/ldc-developers/ldc/issues/2661
    -DLDC_WITH_LLD=OFF

    ..
  )
  "${args[@]}"

  make
}

package_ldc-git() {
  local dmd_fe_ver
  dmd_fe_ver=$(sed -n 's/^.*dmd_version = "v\(.*\)";$/\1/p' \
                   "${srcdir}/${_pkgname}/build/driver/ldc-version.cpp")

  depends=('liblphobos-git' 'llvm-libs')
  backup=('etc/ldc2-git.conf')
  provides=("d-compiler=${dmd_fe_ver}")

  cd "${srcdir}/${_pkgname}/build"
  make install DESTDIR="${pkgdir}"

  # rename binaries
  for f in profdata prune-cache; do
    mv "${pkgdir}/usr/bin/ldc-$f" \
       "${pkgdir}/usr/bin/ldc-git-$f"
  done

  # rename bash-completion
  mv "${pkgdir}/usr/share/bash-completion/completions/ldc2" \
     "${pkgdir}/usr/share/bash-completion/completions/ldc2-git"

  # remove liblphobos files
  rm -rf "${pkgdir}/usr/include"
  rm -rf "${pkgdir}/usr/lib"

  # remove misc
  rm -rf "${pkgdir}/usr/bin/ldc-build-runtime"

  # symlinks
  ln -s ldc2-git "${pkgdir}/usr/share/bash-completion/completions/ldc-git"
  ln -s ldc2-git "${pkgdir}/usr/bin/ldc-git"
  ln -s ldmd2-git "${pkgdir}/usr/bin/ldmd-git"

  # licenses
  install -D -m644 "${srcdir}/ldc/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"

  # default configuration files
  install -D -m644 "${srcdir}/ldc2.conf" "${pkgdir}/etc/ldc2-git.conf"
}

package_liblphobos-git() {
  provides=('d-runtime' 'd-stdlib')
  depends=('curl')

  cd "${srcdir}/ldc/build"
  make install DESTDIR="${pkgdir}"

  # remove ldc files
  rm -rf "${pkgdir}/usr/bin/"
  rm -rf "${pkgdir}/etc/"
  rm -rf "${pkgdir}/usr/share/bash-completion/"

  # rename libraries
  for f in libphobos2-ldc libdruntime-ldc libphobos2-ldc-debug libdruntime-ldc-debug \
                          libldc-jit libldc-jit-rt libldc-profile-rt; do
    for ext in a so; do
      test -e "${pkgdir}/usr/lib/$f.$ext" && \
          mv "${pkgdir}/usr/lib/$f.$ext" "${pkgdir}/usr/lib/$f-git.$ext"
    done
  done

  # licenses
  install -D -m644 "${srcdir}/ldc/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
}