Package Details: cling 1.0-1

Git Clone URL: https://aur.archlinux.org/cling.git (read-only, click to copy)
Package Base: cling
Description: Interactive C++ interpreter, built on the top of LLVM and Clang libraries
Upstream URL: https://root.cern/cling/
Keywords: c c++ cling interpreter llvm
Licenses: custom:Cling Release License
Conflicts: cling
Provides: cling
Submitter: archibald869
Maintainer: archibald869
Last Packager: archibald869
Votes: 19
Popularity: 0.84
First Submitted: 2019-08-28 11:45 (UTC)
Last Updated: 2024-05-10 06:45 (UTC)

Dependencies (9)

Required by (1)

Sources (2)

Latest Comments

1 2 3 4 5 Next › Last »

kaelingre commented on 2025-01-15 16:39 (UTC)

Adding 1+1 works perfectly fine for me using the below PKGBUILD. I get though different errors for different code, e.g. when omitting semicolons to have an expression automatically printed. They are related to missing members in the global namespace (so no problem with missing header files).

archibald869 commented on 2025-01-12 11:06 (UTC) (edited on 2025-01-12 12:08 (UTC) by archibald869)

First of all, sorry for my late response!

@kaelingre: Thank you very much for your effort! I tried your PKGBUILD for v1.2, but I still get a similar error behavior:

ERROR in cling::CIFactory::createCI():
  resource directory /[...]/src/build/lib/clang/18 not found!

****************** CLING ******************
* Type C++ code and press enter to run it *
*             Type .q to exit             *
*******************************************
[cling]$ 1+1
In file included from input_line_4:1:
In file included from /opt/cling/include/cling/Interpreter/RuntimePrintValue.h:20:
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/filesystem:51:
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/fs_fwd.h:35:
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/system_error:42:
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/iosfwd:42:
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/postypes.h:40:
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cwchar:44:
/usr/include/wchar.h:35:10: fatal error: 'stddef.h' file not found
#include <stddef.h>
         ^~~~~~~~~~
(int) 2
[cling]$

kaelingre commented on 2025-01-03 08:43 (UTC)

Here's a PKGBUILD for v1.2 with LLVM18:

# Maintainer: archibald869 <archibald869 at web dot de>

pkgname=cling
pkgver=1.2
pkgrel=1
pkgdesc="Interactive C++ interpreter, built on the top of LLVM and Clang libraries"
arch=("i686" "x86_64")
url="https://root.cern/cling/"
license=("custom:Cling Release License")
provides=("cling")
conflicts=("cling")
depends=("libxml2")
makedepends=("git" "cmake" "ninja" "python")
optdepends=(
    "perl: support for scan-build, ccc-analyzer and c++-analyzer"
    "python: support for scan-view and Jupyter"
    "python-pygments: support for opt-viewer"
    "python-yaml: support for opt-viewer"
)
source=(
    "cling-llvm::git+https://github.com/root-project/llvm-project.git#tag=cling-llvm18-20240821-01"
    "cling::git+https://github.com/root-project/cling.git#tag=v$pkgver"
)
sha256sums=(
    "SKIP"
    "SKIP"
)
options=(!lto !debug)


build() {
    mkdir -p "$srcdir/build"
    cd "$srcdir/build"

    cmake \
        -G Ninja \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_INSTALL_PREFIX="/opt/cling" \
        -DLLVM_TARGETS_TO_BUILD="host;NVPTX" \
        -DLLVM_BUILD_LLVM_DYLIB=OFF \
        -DLLVM_ENABLE_RTTI=ON \
        -DLLVM_ENABLE_FFI=ON \
        -DLLVM_BUILD_DOCS=OFF \
        -DLLVM_BUILD_TOOLS=OFF \
        -DLLVM_ENABLE_SPHINX=OFF \
        -DLLVM_ENABLE_DOXYGEN=OFF \
        -DLLVM_EXTERNAL_PROJECTS=cling \
        -DLLVM_EXTERNAL_CLING_SOURCE_DIR="$srcdir/cling" \
        -DLLVM_ENABLE_PROJECTS=clang \
        "$srcdir/cling-llvm/llvm"

    ninja
}

package() {
    cd "$srcdir/build"

    DESTDIR="$pkgdir" ninja install

    install -d "$pkgdir/usr/bin"
    ln -s "/opt/cling/bin/cling" "$pkgdir/usr/bin/cling"

    install -Dm644 "$srcdir/cling/LICENSE.TXT" \
        "$pkgdir/usr/share/licenses/$pkgname/LICENSE"

    # include CMake target import file so that other packages are able to use
    # `find_package(Cling REQUIRED)`
    install -Dm644 "$srcdir/build/tools/cling/lib/cmake/cling/ClingTargets.cmake" \
        "$pkgdir/opt/cling/lib/cmake/cling"

    # adjust cling target locations
    sed -Ei 's#(IMPORTED_LOCATION_RELEASE) ".*/([^/]*)"#\1 "/opt/cling/lib/\2"#g' \
        "$pkgdir/opt/cling/lib/cmake/cling/ClingTargets.cmake"
    sed -Ei 's#(INTERFACE_COMPILE_DEFINITIONS "LLVM_PATH=).*#\1\\"/opt/cling\\""#g' \
        "$pkgdir/opt/cling/lib/cmake/cling/ClingTargets.cmake"

    # omit man page for clang's scan-build
    rm -f "$pkgdir/opt/cling/share/man/man1/scan-build.1"

    # remove empty directories
    rmdir -p --ignore-fail-on-non-empty "$pkgdir/opt/cling/share/man/man1"
    rmdir -p --ignore-fail-on-non-empty "$pkgdir/opt/cling/include/cling/cint"
}

kaelingre commented on 2024-09-02 15:42 (UTC) (edited on 2024-09-02 15:44 (UTC) by kaelingre)

The below bug seems fixed in version 1.1 (with LLVM16 this time...). Please use this PKGBUILD:

# Maintainer: archibald869 <archibald869 at web dot de>

pkgname=cling
pkgver=1.1
pkgrel=1
pkgdesc="Interactive C++ interpreter, built on top of LLVM and Clang libraries"
arch=("i686" "x86_64")
url="https://root.cern/cling/"
license=("custom:Cling Release License")
provides=("cling")
conflicts=("cling")
depends=("libxml2")
makedepends=("git" "cmake" "ninja" "python")
optdepends=(
    "perl: support for scan-build, ccc-analyzer and c++-analyzer"
    "python: support for scan-view and Jupyter"
    "python-pygments: support for opt-viewer"
    "python-yaml: support for opt-viewer"
)
source=(
    "cling-llvm.tar.gz::https://github.com/root-project/llvm-project/archive/refs/tags/cling-llvm16-20240621-02.tar.gz"
    "cling.tar.gz::https://github.com/root-project/cling/archive/refs/tags/v${pkgver}.tar.gz"
)
sha512sums=(
    "06d3faaec9bb205dd43f9abfac92437a7fdb8759c455f254a2ed6780223df38fb7bce567a75fa10c36d9dc0d737214d69d50141d33c23e6bb8e9972ec0343c6f"
    "23f5ef64c94ef5e6aa2004800c017d9b5f909c4764863327ae97110e4818e6e2cff64426025ea952400ec8a1e5159a248363ae09ef23a524439ffaf72132fac3"
)
options=(!lto !debug)

build() {
    mkdir -p "$srcdir/build"
    cd "$srcdir/build"

    cmake \
        -G Ninja \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_INSTALL_PREFIX="/opt/cling" \
        -DLLVM_TARGETS_TO_BUILD="host;NVPTX" \
        -DLLVM_BUILD_LLVM_DYLIB=OFF \
        -DLLVM_ENABLE_RTTI=ON \
        -DLLVM_ENABLE_FFI=ON \
        -DLLVM_BUILD_DOCS=OFF \
        -DLLVM_BUILD_TOOLS=OFF \
        -DLLVM_ENABLE_SPHINX=OFF \
        -DLLVM_ENABLE_DOXYGEN=OFF \
        -DLLVM_EXTERNAL_PROJECTS=cling \
        -DLLVM_EXTERNAL_CLING_SOURCE_DIR="$srcdir/cling-$pkgver" \
        -DLLVM_ENABLE_PROJECTS=clang \
        "$srcdir/llvm-project-cling-llvm16-20240621-02/llvm"

    ninja
}

package() {
    cd "$srcdir/build"

    DESTDIR="$pkgdir" ninja install

    install -d "$pkgdir/usr/bin"
    ln -s "/opt/cling/bin/cling" "$pkgdir/usr/bin/cling"

    install -Dm644 "$srcdir/cling-$pkgver/LICENSE.TXT" \
        "$pkgdir/usr/share/licenses/$pkgname/LICENSE"

    # include CMake target import file so that other packages are able to use
    # `find_package(Cling REQUIRED)`
    install -Dm644 "$srcdir/build/tools/cling/lib/cmake/cling/ClingTargets.cmake" \
        "$pkgdir/opt/cling/lib/cmake/cling"

    # adjust cling target locations
    sed -Ei 's#(IMPORTED_LOCATION_RELEASE) ".*/([^/]*)"#\1 "/opt/cling/lib/\2"#g' \
        "$pkgdir/opt/cling/lib/cmake/cling/ClingTargets.cmake"
    sed -Ei 's#(INTERFACE_COMPILE_DEFINITIONS "LLVM_PATH=).*#\1\\"/opt/cling\\""#g' \
        "$pkgdir/opt/cling/lib/cmake/cling/ClingTargets.cmake"

    # omit man page for clang's scan-build
    rm -f "$pkgdir/opt/cling/share/man/man1/scan-build.1"

    # remove empty directories
    rmdir -p --ignore-fail-on-non-empty "$pkgdir/opt/cling/share/man/man1"
    rmdir -p --ignore-fail-on-non-empty "$pkgdir/opt/cling/include/cling/cint"
}

kaelingre commented on 2024-07-29 11:20 (UTC) (edited on 2024-07-29 14:29 (UTC) by kaelingre)

@Tyilo and @ThePirate42: I get the same problem. It seems that the resource directory is not correctly set during installation:

resource directory /home/tyilo/.cache/paru/clone/cling/src/build/lib/clang/13.0.0 not found!

The missing files (e.g. stddef.h) are though correctly installed into /opt/cling/lib/clang/13.0.0/include. I haven't quite figured out how to fix it yet.

ThePirate42 commented on 2024-06-29 16:01 (UTC)

I have the same problem:

https://pastebin.com/DU9212iq

Tyilo commented on 2024-05-17 11:11 (UTC)

The built cling binary doesn't seem to work for me:

ERROR in cling::CIFactory::createCI():
  resource directory /home/tyilo/.cache/paru/clone/cling/src/build/lib/clang/13.0.0 not found!

****************** CLING ******************
* Type C++ code and press enter to run it *
*             Type .q to exit             *
*******************************************
[cling]$ int a = 3;
[cling]$ a + 3
In file included from input_line_5:1:
In file included from /opt/cling/include/cling/Interpreter/RuntimePrintValue.h:19:
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/memory:80:
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/shared_ptr.h:52:
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/iosfwd:42:
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/postypes.h:40:
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/cwchar:44:
/usr/include/wchar.h:35:10: fatal error: 'stddef.h' file not found
#include <stddef.h>
         ^~~~~~~~~~
 #0 0x000062409aeab4cb (/usr/bin/cling+0x8d34cb)
 #1 0x000062409aea8ebb (/usr/bin/cling+0x8d0ebb)
 #2 0x00000cde7e165ae0 (/usr/lib/libc.so.6+0x3cae0)
 #3 0x000062409ce0959f clang::DeclContext::removeDecl(clang::Decl*) (/usr/bin/cling+0x283159f)
 #4 0x000062409ad286fc cling::DeclUnloader::VisitNamedDecl(clang::NamedDecl*) (/usr/bin/cling+0x7506fc)
 #5 0x000062409ad2bb1c cling::DeclUnloader::VisitNamespaceDecl(clang::NamespaceDecl*) (/usr/bin/cling+0x753b1c)
 #6 0x000062409ad2b74b cling::DeclUnloader::VisitDeclContext(clang::DeclContext*) (/usr/bin/cling+0x75374b)
 #7 0x000062409ad2b889 cling::DeclUnloader::VisitLinkageSpecDecl(clang::LinkageSpecDecl*) (/usr/bin/cling+0x753889)
 #8 0x000062409adbc8ae cling::TransactionUnloader::unloadDeclarations(cling::Transaction*, cling::DeclUnloader&) (/usr/bin/cling+0x7e48ae)
 #9 0x000062409adbcd2d cling::TransactionUnloader::RevertTransaction(cling::Transaction*) (/usr/bin/cling+0x7e4d2d)
#10 0x000062409ad90f69 cling::Interpreter::unload(cling::Transaction&) (/usr/bin/cling+0x7b8f69)
#11 0x000062409ad868ca cling::IncrementalParser::commitTransaction(llvm::PointerIntPair<cling::Transaction*, 2u, cling::IncrementalParser::EParseResult, llvm::PointerLikeTypeTraits<cling::Transaction*>, llvm::PointerIntPairInfo<cling::Transaction*, 2u, llvm::PointerLikeTypeTraits<cling::Transaction*>>>&, bool) (/usr/bin/cling+0x7ae8ca)
#12 0x000062409ad89df3 cling::IncrementalParser::Compile(llvm::StringRef, cling::CompilationOptions const&) (/usr/bin/cling+0x7b1df3)
#13 0x000062409ad8d952 cling::Interpreter::declare(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, cling::Transaction**) (/usr/bin/cling+0x7b5952)
#14 0x000062409adcf5da cling::valuePrinterInternal::printValueInternal[abi:cxx11](cling::Value const&) (/usr/bin/cling+0x7f75da)
#15 0x000062409adc698d cling::Value::print(llvm::raw_ostream&, bool) const (/usr/bin/cling+0x7ee98d)
#16 0x00000cde7e08704a 
#17 0x000062409ad71a07 cling::IncrementalExecutor::executeWrapper(llvm::StringRef, cling::Value*) const (/usr/bin/cling+0x799a07)
#18 0x000062409ad8eeef cling::Interpreter::RunFunction(clang::FunctionDecl const*, cling::Value*) (/usr/bin/cling+0x7b6eef)
#19 0x000062409ad8f6d6 cling::Interpreter::EvaluateInternal(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, cling::CompilationOptions, cling::Value*, cling::Transaction**, unsigned long) (/usr/bin/cling+0x7b76d6)
#20 0x000062409ad8fa4e cling::Interpreter::process(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, cling::Value*, cling::Transaction**, bool) (/usr/bin/cling+0x7b7a4e)
#21 0x000062409ade23a1 cling::MetaProcessor::process(llvm::StringRef, cling::Interpreter::CompilationResult&, cling::Value*, bool) (/usr/bin/cling+0x80a3a1)
#22 0x000062409aed1992 cling::UserInterface::runInteractively(bool) (/usr/bin/cling+0x8f9992)
#23 0x000062409abf67c9 main (/usr/bin/cling+0x61e7c9)
#24 0x00000cde7e14ec88 (/usr/lib/libc.so.6+0x25c88)
#25 0x00000cde7e14ed4c __libc_start_main (/usr/lib/libc.so.6+0x25d4c)
#26 0x000062409ac8ad55 _start (/usr/bin/cling+0x6b2d55)
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0.  Program arguments: /usr/bin/cling
fish: Job 1, '/usr/bin/cling' terminated by signal SIGSEGV (Address boundary error)

carlosal1015 commented on 2024-05-11 14:47 (UTC)

Nice, thanks for the trick.

archibald869 commented on 2024-05-10 06:55 (UTC) (edited on 2024-05-10 06:56 (UTC) by archibald869)

@carlosal1015: Sorry for the late reply! I prefer to leave the default configuration as it is. If you want to allow redefinition of variables, functions etc., you can enter the following statement in the interactive shell: cling::runtime::gClingOpts->AllowRedefinition = 1;

archibald869 commented on 2024-05-10 06:49 (UTC) (edited on 2024-05-10 06:50 (UTC) by archibald869)

@kaelingre: Many thanks for your helpful preparatory work! I updated the PKGBUILD for v1.0. In the course of this, I also added !debug to the options.