abraunegg / onedrive

OneDrive Client for Linux
https://abraunegg.github.io
GNU General Public License v3.0
10.07k stars 859 forks source link

Build error using LDC from Ubuntu 18.04 repository #370

Closed jacklovell closed 5 years ago

jacklovell commented 5 years ago

Bug Report Details

Describe the bug When attempting to build the latest master (493520a) with make DC=ldmd2, I get the following error:

/usr/bin/ldmd2 -w -g -ofonedrive -O  -L-lcurl -L-lsqlite3 -L-ldl -J. src/config.d src/itemdb.d src/log.d src/main.d src/monitor.d src/onedrive.d src/qxor.d src/selective.d src/sqlite.d src/sync.d src/upload.d src/util.d src/progress.d
src/main.d(182): Error: template std.string.strip cannot deduce function from argument types !()(string, string, string), candidates are:
/usr/lib/ldc/x86_64-linux-gnu/include/d/std/string.d(3064):        std.string.strip(Range)(Range str) if (isSomeString!Range || isRandomAccessRange!Range && hasLength!Range && hasSlicing!Range && !isConvertibleToString!Range && isSomeChar!(ElementEncodingType!Range))
/usr/lib/ldc/x86_64-linux-gnu/include/d/std/string.d(3089):        std.string.strip(Range)(auto ref Range str) if (isConvertibleToString!Range)
src/main.d(232): Error: template std.string.strip cannot deduce function from argument types !()(string, string, string), candidates are:
/usr/lib/ldc/x86_64-linux-gnu/include/d/std/string.d(3064):        std.string.strip(Range)(Range str) if (isSomeString!Range || isRandomAccessRange!Range && hasLength!Range && hasSlicing!Range && !isConvertibleToString!Range && isSomeChar!(ElementEncodingType!Range))
/usr/lib/ldc/x86_64-linux-gnu/include/d/std/string.d(3089):        std.string.strip(Range)(auto ref Range str) if (isConvertibleToString!Range)
Makefile:69: recipe for target 'onedrive' failed
make: *** [onedrive] Error 1

Application and Operating System Details:

To Reproduce Steps to reproduce the behavior if not causing an application crash:

  1. Using Ubuntu 18.04, install the ldc, build-essential, libcurl4-openssl-dev and libsqlite3-dev packages from the default repositories.
  2. Run make DC=ldmd2 (also appears when using ldc2)
  3. See error

Additional context This is on a fresh install of Linux Mint 19.1.

Bug Report Checklist

abraunegg commented 5 years ago

@jacklovell On my test Ubuntu system, after install ldc:

root@ubuntu-x64-18:~# apt install ldc
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libllvm6.0 libphobos2-ldc-shared-dev libphobos2-ldc-shared81
The following NEW packages will be installed:
  ldc libllvm6.0 libphobos2-ldc-shared-dev libphobos2-ldc-shared81
0 upgraded, 4 newly installed, 0 to remove and 3 not upgraded.
Need to get 32.1 MB of archives.
After this operation, 167 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://archive.ubuntu.com/ubuntu cosmic/universe amd64 libllvm6.0 amd64 1:6.0.1-9 [14.7 MB]
Get:2 http://archive.ubuntu.com/ubuntu cosmic/universe amd64 libphobos2-ldc-shared81 amd64 1:1.11.0-2 [8,399 kB]             
Get:3 http://archive.ubuntu.com/ubuntu cosmic/universe amd64 libphobos2-ldc-shared-dev amd64 1:1.11.0-2 [6,028 kB]           
Get:4 http://archive.ubuntu.com/ubuntu cosmic/universe amd64 ldc amd64 1:1.11.0-2 [2,912 kB]                                 
Fetched 32.1 MB in 2min 40s (200 kB/s)                                                                                       
Selecting previously unselected package libllvm6.0:amd64.
(Reading database ... 105900 files and directories currently installed.)
Preparing to unpack .../libllvm6.0_1%3a6.0.1-9_amd64.deb ...
Unpacking libllvm6.0:amd64 (1:6.0.1-9) ...
Selecting previously unselected package libphobos2-ldc-shared81:amd64.
Preparing to unpack .../libphobos2-ldc-shared81_1%3a1.11.0-2_amd64.deb ...
Unpacking libphobos2-ldc-shared81:amd64 (1:1.11.0-2) ...
Selecting previously unselected package libphobos2-ldc-shared-dev.
Preparing to unpack .../libphobos2-ldc-shared-dev_1%3a1.11.0-2_amd64.deb ...
Unpacking libphobos2-ldc-shared-dev (1:1.11.0-2) ...
Selecting previously unselected package ldc.
Preparing to unpack .../ldc_1%3a1.11.0-2_amd64.deb ...
Unpacking ldc (1:1.11.0-2) ...
Setting up libllvm6.0:amd64 (1:6.0.1-9) ...
Setting up libphobos2-ldc-shared81:amd64 (1:1.11.0-2) ...
Setting up libphobos2-ldc-shared-dev (1:1.11.0-2) ...
Processing triggers for libc-bin (2.28-0ubuntu1) ...
Processing triggers for man-db (2.8.4-2) ...
Setting up ldc (1:1.11.0-2) ...
root@ubuntu-x64-18:~#
root@ubuntu-x64-18:~# ldc2 --version
LDC - the LLVM D compiler (1.11.0):
  based on DMD v2.081.2 and LLVM 6.0.1
  built with LDC - the LLVM D compiler (0.17.6)
  Default target: x86_64-pc-linux-gnu
  Host CPU: penryn
  http://dlang.org - http://wiki.dlang.org/LDC

  Registered Targets:
    aarch64    - AArch64 (little endian)
    aarch64_be - AArch64 (big endian)
    amdgcn     - AMD GCN GPUs
    arm        - ARM
    arm64      - ARM64 (little endian)
    armeb      - ARM (big endian)
    avr        - Atmel AVR Microcontroller
    bpf        - BPF (host endian)
    bpfeb      - BPF (big endian)
    bpfel      - BPF (little endian)
    hexagon    - Hexagon
    lanai      - Lanai
    mips       - Mips
    mips64     - Mips64 [experimental]
    mips64el   - Mips64el [experimental]
    mipsel     - Mipsel
    msp430     - MSP430 [experimental]
    nvptx      - NVIDIA PTX 32-bit
    nvptx64    - NVIDIA PTX 64-bit
    ppc32      - PowerPC 32
    ppc64      - PowerPC 64
    ppc64le    - PowerPC 64 LE
    r600       - AMD GPUs HD2XXX-HD6XXX
    sparc      - Sparc
    sparcel    - Sparc LE
    sparcv9    - Sparc V9
    systemz    - SystemZ
    thumb      - Thumb
    thumbeb    - Thumb (big endian)
    wasm32     - WebAssembly 32-bit
    wasm64     - WebAssembly 64-bit
    x86        - 32-bit X86: Pentium-Pro and above
    x86-64     - 64-bit X86: EM64T and AMD64
    xcore      - XCore

When building with ldmd2:

root@ubuntu-x64-18:~/code/onedrive# ldmd2 --version
LDC - the LLVM D compiler (1.11.0):
  based on DMD v2.081.2 and LLVM 6.0.1
  built with LDC - the LLVM D compiler (0.17.6)
  Default target: x86_64-pc-linux-gnu
  Host CPU: penryn
  http://dlang.org - http://wiki.dlang.org/LDC

  Registered Targets:
    aarch64    - AArch64 (little endian)
    aarch64_be - AArch64 (big endian)
    amdgcn     - AMD GCN GPUs
    arm        - ARM
    arm64      - ARM64 (little endian)
    armeb      - ARM (big endian)
    avr        - Atmel AVR Microcontroller
    bpf        - BPF (host endian)
    bpfeb      - BPF (big endian)
    bpfel      - BPF (little endian)
    hexagon    - Hexagon
    lanai      - Lanai
    mips       - Mips
    mips64     - Mips64 [experimental]
    mips64el   - Mips64el [experimental]
    mipsel     - Mipsel
    msp430     - MSP430 [experimental]
    nvptx      - NVIDIA PTX 32-bit
    nvptx64    - NVIDIA PTX 64-bit
    ppc32      - PowerPC 32
    ppc64      - PowerPC 64
    ppc64le    - PowerPC 64 LE
    r600       - AMD GPUs HD2XXX-HD6XXX
    sparc      - Sparc
    sparcel    - Sparc LE
    sparcv9    - Sparc V9
    systemz    - SystemZ
    thumb      - Thumb
    thumbeb    - Thumb (big endian)
    wasm32     - WebAssembly 32-bit
    wasm64     - WebAssembly 64-bit
    x86        - 32-bit X86: Pentium-Pro and above
    x86-64     - 64-bit X86: EM64T and AMD64
    xcore      - XCore
root@ubuntu-x64-18:~/code/onedrive# make DC=ldmd2
ldmd2 -w -g -ofonedrive -O  -L-lcurl -L-lsqlite3 -L-ldl -J. src/config.d src/itemdb.d src/log.d src/main.d src/monitor.d src/onedrive.d src/qxor.d src/selective.d src/sqlite.d src/sync.d src/upload.d src/util.d src/progress.d
sed "s|@PREFIX@|/usr/local|g" systemd.units/onedrive.service.in > onedrive.service
sed "s|@PREFIX@|/usr/local|g" systemd.units/onedrive@.service.in > onedrive@.service
sed "s|@DOCDIR@|/usr/local/share/doc/onedrive|g" onedrive.1.in > onedrive.1

When building with ldc2:

root@ubuntu-x64-18:~/code/onedrive# ldc2 --version
LDC - the LLVM D compiler (1.11.0):
  based on DMD v2.081.2 and LLVM 6.0.1
  built with LDC - the LLVM D compiler (0.17.6)
  Default target: x86_64-pc-linux-gnu
  Host CPU: penryn
  http://dlang.org - http://wiki.dlang.org/LDC

  Registered Targets:
    aarch64    - AArch64 (little endian)
    aarch64_be - AArch64 (big endian)
    amdgcn     - AMD GCN GPUs
    arm        - ARM
    arm64      - ARM64 (little endian)
    armeb      - ARM (big endian)
    avr        - Atmel AVR Microcontroller
    bpf        - BPF (host endian)
    bpfeb      - BPF (big endian)
    bpfel      - BPF (little endian)
    hexagon    - Hexagon
    lanai      - Lanai
    mips       - Mips
    mips64     - Mips64 [experimental]
    mips64el   - Mips64el [experimental]
    mipsel     - Mipsel
    msp430     - MSP430 [experimental]
    nvptx      - NVIDIA PTX 32-bit
    nvptx64    - NVIDIA PTX 64-bit
    ppc32      - PowerPC 32
    ppc64      - PowerPC 64
    ppc64le    - PowerPC 64 LE
    r600       - AMD GPUs HD2XXX-HD6XXX
    sparc      - Sparc
    sparcel    - Sparc LE
    sparcv9    - Sparc V9
    systemz    - SystemZ
    thumb      - Thumb
    thumbeb    - Thumb (big endian)
    wasm32     - WebAssembly 32-bit
    wasm64     - WebAssembly 64-bit
    x86        - 32-bit X86: Pentium-Pro and above
    x86-64     - 64-bit X86: EM64T and AMD64
    xcore      - XCore
root@ubuntu-x64-18:~/code/onedrive# make DC=ldc2
ldc2 -w -g -ofonedrive -O  -L-lcurl -L-lsqlite3 -L-ldl -J. src/config.d src/itemdb.d src/log.d src/main.d src/monitor.d src/onedrive.d src/qxor.d src/selective.d src/sqlite.d src/sync.d src/upload.d src/util.d src/progress.d
sed "s|@PREFIX@|/usr/local|g" systemd.units/onedrive.service.in > onedrive.service
sed "s|@PREFIX@|/usr/local|g" systemd.units/onedrive@.service.in > onedrive@.service
sed "s|@DOCDIR@|/usr/local/share/doc/onedrive|g" onedrive.1.in > onedrive.1

Can you please revalidate how & where you are getting the ldc packages from?

jacklovell commented 5 years ago

You appear to have a newer version of LDC than I do. Mine comes from the Ubuntu 18.04 repository:

jlovell@jlovell-thinkpad:~/Software/onedrive$ apt show ldc
Package: ldc
Version: 1:1.8.0-1
Priority: extra
Section: universe/devel
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian D Language Group <pkg-d-devel@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 14.2 MB
Provides: d-compiler, d-v2-compiler
Depends: libphobos2-ldc-shared-dev (= 1:1.8.0-1), libc6 (>= 2.14), libgcc1 (>= 1:3.3), libllvm5.0 (>= 1:5.0~svn298832-1~), libstdc++6 (>= 5.2), zlib1g (>= 1:1.2.0)
Homepage: https://github.com/ldc-developers/ldc
Download-Size: 2,826 kB
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages
Description: LLVM D Compiler
 LDC is a compiler for the D programming Language. It is based on the
 latest DMD frontend and uses LLVM as backend.
 .
 This is the actual ldc compiler

Perhaps there were some additions to LDC between Ubuntu 18.04 (bionic, mine) and 18.10 (cosmic, yours) which are required for building. I note also that LDC 1.8.0 is based on DMD v2.078.3 and LLVM 5.0.1, whereas LDC 1.11.0 is based on DMD v2.081.2 and LLVM 6.0.1.

Is there a minimum version requirement for DMD/LDC? The Readme seems to suggest that LDC 1.8.0 should work, at least on Debian i686.

abraunegg commented 5 years ago

@jacklovell The readme needs to be updated in that regards - you need you compile with a DMD version >= 2.081.1 or LDC >= 1.11.0

Debian i686 is a compiler edge case where the normal DMD compiler fails to operate properly, the DMD packages are not properly packaged, thus you need to use another repository to compile.

abraunegg commented 5 years ago

Updated readme - https://github.com/abraunegg/onedrive/commit/b15948ed6a22c3897a0fe378d4541f3263271e35

Closing issue as this is a compiler compatibility issue due to old compiler version.

lock[bot] commented 5 years ago

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.