• Re: Emacs 29.1, native compilation, patches 12 and 13

    From Aymeric Agon-Rambosson@21:1/5 to All on Fri Aug 4 08:40:01 2023
    Le jeudi 3 août 2023 à 12:41, David Bremner <david@tethera.net> a
    écrit :

    First, thanks for your efforts so far. It does make me think you
    are
    probably right, that we can (try to) drop the corresponding
    patches.

    I do have one question (which might be annoying to answer): do
    the
    resulting elpa-* packages install with your patched emacs? I
    vaguely
    remember some issues with post install byte-compilation.

    I assume that by "resulting", you mean, those built with my
    patched emacs, as opposed to the ones present in the archives,
    that is built by archive emacs.

    Whether or not those elpa-* packages were build by my patched
    emacs or the archive one does not matter : the content of the
    resulting package are the same. After all, we only ship source
    elisp files and sometimes documentation.

    To be certain of that, I modified my previous experiment to
    calculate the shasum of the resulting deb files after each build,
    and I compared the results between my patched emacs and the
    archive one.

    I attach the new version of the script, and the results.

    You will see that the only packages that produce different results
    (geiser marginalia orderless vertico citar consult-el embark) are
    the ones that are unreproducible anyway.

    So now we can agree that your question is equivalent to "Do the
    elpa-* packages from the archive install with my patched emacs ?",
    which is easier to answer :).

    In order to answer that, I made another experiment. I created two
    chroots, one with the archive version of emacs installed
    (emacs-nox, more specifically), and one with my patched version
    (of emacs-nox again).

    I then tried to install each binary package we maintain, in each
    of the chroots, and checked whether there was any one of those
    binary package that would install in the archive version, and not
    in my patched version.

    There is only one (elpa-ligature), for reasons entirely unrelated
    with byte- or native-compilation (unresolvable dependencies : it
    depends on emacs-gtk, that I cannot install in the chroot
    containing my patched version of emacs-nox without unreasonably
    complicating the implementation of the experiment).

    I attach the list of binary packages we maintain, the experiment
    script, and the results.

    Best,

    Aymeric


    --=-=-Content-Type: text/plain
    Content-Disposition: attachment; filename=emacs_build_results

    autothemer-el 2 2 0
    assess-el 2 2 0
    bbdb 0 0 0
    adaptive-wrap 0 0 0
    ace-popup-menu 0 0 0
    ace-window 0 0 0
    atomic-chrome-el 0 0 0
    beacon 0 0 0
    ace-link 0 0 0
    avy-menu 0 0 0
    apache-mode-el 0 0 0
    aggressive-indent-mode 0 0 0
    avy 0 0 0
    auto-dictionary-mode 0 0 0
    a-el 0 0 0
    apiwrap-el 0 0 0
    beginend-el 2 2 0
    bm-el 2 2 0
    clojure-mode 2 2 0
    circe 2 2 0
    bongo 0 0 0
    browse-kill-ring-el 0 0 0
    bpftrace-mode 0 0 0
    boxquote-el 0 0 0
    No such package : dash-functional-el
    bui-el 0 0 0
    char-menu-el 0 0 0
    c-sig 0 0 0
    company-mode 2 2 0
    color-theme-modern 0 0 0
    citar 0 0 1
    cycle-quotes 2 2 0
    crdt-el 0 0 0
    consult-el 0 0 1
    closql-el 0 0 0
    compat-el 0 0 0
    dap-mode 0 0 0
    debpaste-el 0 0 0
    deft 0 0 0
    debian-el 0 0 0
    devscripts-el 0 0 0
    darcsum 0 0 0
    csv-mode 0 0 0
    dh-make-elpa 0 0 0
    dash-el 0 0 0
    dh-elpa 0 0 0
    diffview-el 0 0 0
    diminish-el 0 0 0
    dimmer-el 0 0 0
    dired-quick-sort 0 0 0
    diff-hl-el 0 0 0
    No such package : elisp-slime-nav
    discover-my-major 0 0 0
    dockerfile-mode 0 0 0
    dpkg-dev-el 0 0 0
    dired-du 0 0 0
    ediprolog-el 0 0 0
    dired-rsync 0 0 0
    el-mock-el 0 0 0
    elfeed 2 2 0
    dumb-jump-el 2 2 0
    editorconfig-emacs 0 0 0
    el-x 0 0 0
    elisp-bug-hunter 2 2 0
    ebib 0 0 0
    eglot 0 0 0
    elm-mode 0 0 0
    elpa-darkroom 0 0 0
    elpa-ligature 0 0 0
    elpa-rust-mode 0 0 0
    elpa-subed 0 0 0
    elpa-transient 0 0 0
    elpher 0 0 0
    emacs-buttercup 2 2 0
    emacs-anzu 0 0 0
    elscreen 0 0 0
    emacs-async 0 0 0
    emacs-cmake-mode 0 0 0
    elpa-undo-tree 0 0 0
    emacs-bash-completion 0 0 0
    emacs-corfu 0 0 0
    emacs-dashboard 0 0 0
    emacs-bind-map 0 0 0
    emacs-db 0 0 0
    emacs-ctable 0 0 0
    elisp-refs 0 0 0
    emacs-discomfort 0 0 0
    emacs-debase 0 0 0
    emacs-goodies-el 0 0 0
    emacs-helm-ag 2 2 0
    emacs-desktop-notification-center 0 0 0
    emacs-fossil 0 0 0
    emacs-epc 0 0 0
    emacs-doom-themes 0 0 0
    emacs-git-modes 0 0 0
    emacs-highlight-indentation 0 0 0
    emacs-git-messenger 0 0 0
    emacs-htmlize 0 0 0
    emacs-kv 2 2 0
    emacs-deferred 0 0 0
    emacs-lsp-haskell 0 0 0
    emacs-ivy 0 0 0
    elpa-snakemake 0 0 0
    emacs-libvterm 0 0 0
    emacs-noflet 0 0 0
    emacs-openwith 0 0 0
    emacs-jabber 0 0 0
    emacs-orgalist 0 0 0
    emacs-jedi 0 0 0
    emacs-memoize 0 0 0
    emacs-pass-mode 0 0 0
    emacs-neotree 0 0 0
    emacs-pg-el 0 0 0
    emacs-pdf-tools 0 0 0
    emacs-lsp-ui 0 0 0
    emacs-pod-mode 0 0 0
    emacs-posframe 0 0 0
    emacs-powerline 0 0 0
    emacs-smeargle 0 0 0
    emacs-session 0 0 0
    emacs-web-server 2 2 0
    emacs-svg-lib 0 0 0
    emacs-wgrep 2 2 0
    emacs-tablist 0 0 0
    emacs-uuid 0 0 0
    emacs-request 0 0 0
    emacs-python-environment 0 0 0
    emacsql 2 2 0
    emacs-world-time-mode 0 0 0
    emacs-which-key 0 0 0
    emacs-websocket 0 0 0
    embark 0 0 1
    engine-mode 0 0 0
    eproject-el 0 0 0
    esh-help-el 0 0 0
    eshell-bookmark 0 0 0
    ement-el 0 0 0
    eshell-git-prompt 0 0 0
    emacsql-sqlite3 2 2 0
    eshell-prompt-extras 0 0 0
    ert-expectations-el 0 0 0
    epl 0 0 0
    ert-async-el 0 0 0
    esup-el 2 2 0
    eshell-up 0 0 0
    eshell-z 0 0 0
    exec-path-from-shell-el 0 0 0
    f-el 2 2 0
    expand-region-el 0 0 0
    exwm 0 0 0
    esxml 0 0 0
    eyebrowse-el 0 0 0
    exwm-mff 0 0 0
    fill-column-indicator 0 0 0
    flycheck 1 1 0
    flx 0 0 0
    faceup 0 0 0
    flycheck-package 0 0 0
    ess 2 2 0
    folding-mode-el 0 0 0
    evil-el 0 0 0
    find-file-in-project 0 0 0
    ggtags 0 0 0
    geiser 0 0 1
    ghub-el 0 0 0
    git-annex-el 0 0 0
    fountain-mode 0 0 0
    ghub-plus-el 0 0 0
    go-mode.el 2 2 0
    fsm-el 0 0 0
    git-timemachine 0 0 0
    git-auto-commit-mode 0 0 0
    golden-ratio-el 0 0 0
    goto-chg-el 0 0 0
    graphviz-dot-mode 0 0 0
    gitlab-ci-mode-el 0 0 0
    haskell-mode 2 2 0
    gnuplot-mode 2 2 0
    helm-org 0 0 0
    helm-projectile 0 0 0
    graphql-el 0 0 0
    helm 0 0 0
    helpful-el 2 2 0
    highlight-numbers-el 0 0 0
    hl-todo-el 0 0 0
    hungry-delete-el 0 0 0
    ido-ubiquitous 2 2 0
    ibuffer-projectile 0 0 0
    ibuffer-vc 0 0 0
    ht-el 0 0 0
    hydra-el 0 0 0
    imenu-list 0 0 0
    initsplit-el 0 0 0
    js2-mode 2 2 0
    jinja2-mode 0 0 0
    irony-mode 2 2 0
    iedit 0 0 0
    ido-vertical-mode 0 0 0
    ilisp 0 0 0
    key-chord-el 0 0 0
    let-alist 0 0 0
    linum-relative 0 0 0
    ledger-mode 0 0 0
    lua-mode 2 2 0
    lsp-java 0 0 0
    lsp-mode 2 2 0
    load-relative-el 0 0 0
    kotlin-mode 0 0 0
    lsp-treemacs 0 0 0
    loop-el 0 0 0
    magit-popup 0 0 0
    m-buffer-el 0 0 0
    makey 0 0 0
    magit-todos 0 0 0
    marginalia 0 0 1
    magit 0 0 0
    meson-mode 0 0 0
    message-templ 0 0 0
    minimap-el 0 0 0
    modus-themes 0 0 0
    magit-forge-el 0 0 0
    magit-annex 0 0 0
    mocker-el 0 0 0
    monokai-emacs 0 0 0
    markdown-mode 0 0 0
    mastodon-el 0 0 0
    mpv.el 0 0 0
    move-text-el 0 0 0
    mutt-alias-el 0 0 0
    nginx-mode 0 0 0
    muttrc-mode-el 0 0 0
    nose-el 0 0 0
    no-littering-el 0 0 0
    nov-el 0 0 0
    maildir-utils 0 0 0
    ol-notmuch 0 0 0
    olivetti-mode 0 0 0
    orderless 0 0 1
    org-appear 0 0 0
    org-bullets 0 0 0
    org-contrib 0 0 0
    org-drill 0 0 0
    org-present 0 0 0
    org-tree-slide 0 0 0
    org-roam 2 2 0
    org-make-toc 0 0 0
    ox-texinfo-plus 0 0 0
    page-break-lines-el 0 0 0
    paredit-el 0 0 0
    paredit-everywhere 0 0 0
    org-mode 0 0 0
    parent-mode-el 0 0 0
    package-lint-el 0 0 0
    persp-projectile 0 0 0
    pcre2el 0 0 0
    parsebib 0 0 0
    persist-el 0 0 0
    php-elisp 2 2 0
    perspective-el 0 0 0
    pfuture-el 0 0 0
    pip-requirements-el 0 0 0
    pointback 0 0 0
    popup-el 0 0 0
    projectile 2 2 0
    pos-tip 0 0 0
    project-el 0 0 0
    plz-el 0 0 0
    py-autopep8-el 0 0 0
    pkg-info-el 0 0 0
    No such package : rg-el
    pyvenv-el 2 2 0
    pyim-basedict-el 0 0 0
    py-isort-el 0 0 0
    rainbow-delimiters 2 2 0
    qml-mode 0 0 0
    queue-el 0 0 0
    puppet-mode 0 0 0
    rainbow-identifiers-el 0 0 0
    rainbow-mode 0 0 0
    recursive-narrow 0 0 0
    redtick 0 0 0
    pyim-el 0 0 0
    rich-minority 0 0 0
    scala-mode-el 2 2 0
    relint-el 0 0 0
    restart-emacs 0 0 0
    smart-mode-line 0 0 0
    smex 0 0 0
    solarized-emacs 0 0 0
    sml-mode 0 0 0
    s-el 0 0 0
    srv-el 0 0 0
    spinner-el 0 0 0
    sesman 0 0 0
    seq-el 0 0 0
    shut-up 0 0 0
    super-save-el 0 0 0
    system-packages-el 2 2 0
    sxiv-el 0 0 0
    suggest-el 0 0 0
    tabbar-el 0 0 0
    transmission-el 0 0 0
    taxy-el 0 0 0
    taxy-magit-section-el 0 0 0
    vala-mode-el 0 0 0
    verilog-mode 3 3 0
    systemd-el 0 0 0
    treepy-el 0 0 0
    undercover-el 0 0 0
    vertico 0 0 1
    vimish-fold 0 0 0
    rtags 0 0 0
    use-package 0 0 0
    volume-el 0 0 0
    visual-regexp-el 0 0 0
    wc-mode 0 0 0
    treemacs 0 0 0
    with-simulated-input-el 2 2 0
    with-editor 0 0 0
    visual-fill-column 0 0 0
    writegood-mode 0 0 0
    virtualenvwrapper-el 0 0 0
    web-mode 0 0 0
    weechat-el 0 0 0
    xcite 0 0 0
    writeroom-mode 0 0 0
    xcscope-el 0 0 0
    yaml-el 2 2 0
    xref-el 0 0 0
    xelb 0 0 0
    ws-butler 0 0 0
    yasnippet 2 2 0
    yaml-mode 0 0 0
    xr-el 0 0 0
    xml-rpc-el 0 0 0
    zenburn-emacs 0 0 0
    ztree 0 0 0
    zzz-to-char 0 0 0
    yasnippet-snippets 0 0 0
    racket-mode 0 0 0

    --=-=-Content-Type: text/x-sh
    Content-Disposition: attachment; filename=test_emacs_build.sh

    #!/bin/sh

    # Attempts to build the package provided as argument
    # First only with the archive
    # Second with the .deb files in the directory pointed by variable DEB_EXTRA_PACKAGES

    # And compare the results ; on the standard output is written :
    # - the name of the source package
    # - the return value of the first attempt
    # - the return value of the second attempt

    if test $# -lt 1; then
    echo "Missing argument : source package"
    exit 1
    fi

    # The directory holding the modified versions of emacs, set to a correct value DEB_EXTRA_PACKAGES=/home/rico/temp/emacs
    TEMP_DIRECTORY=$(mktemp -d)

    cd $TEMP_DIRECTORY

    apt source -t sid --only-source --download-only $1 1>/dev/null 2>/dev/null

    dscfile=$(find . -name "*.dsc")

    if test "$dscfile" = ""; then
    echo "No such package : $1"
    cd
    rm -rf $TEMP_DIRECTORY
    exit 1
    fi

    # First attempt
    sbuild -d unstable --chroot=unstable-amd64-sbuild --no-run-lintian --no-run-piuparts $dscfile 1>/dev/null 2>/dev/null
    first_attempt="$?"
    shasum ./*.deb > first_attempt_shasum
    rm -f ./*.deb

    # Second attempt
    sbuild -d unstable --chroot=unstable-amd64-sbuild --no-run-lintian --no-run-piuparts --extra-package=$DEB_EXTRA_PACKAGES $dscfile 1>/dev/null 2>/dev/null
    second_attempt="$?"
    shasum ./*.deb > second_attempt_shasum
    rm -f ./*.deb

    diff -q first_attempt_shasum second_attempt_shasum 1>/dev/null 2>/dev/null identical="$?"

    echo "$1 $first_attempt $second_attempt $identical"

    cd

    rm -rf $TEMP_DIRECTORY


    --=-=-Content-Type: text/plain
    Content-Disposition: attachment; filename=emacs_install_results

    dh-elpa-helper 0 0
    bbdb 0 0
    elpa-adaptive-wrap 0 0
    c-sig 0 0
    elpa-a 0 0
    elpa-aggressive-indent 0 0
    darcsum 0 0
    elpa-ace-window 0 0
    elpa-ace-link 0 0
    elpa-ace-popup-menu 0 0
    elpa-anzu 0 0
    elpa-apache-mode 0 0
    elpa-apiwrap 0 0
    elpa-async 0 0
    elpa-auto-dictionary 0 0
    elpa-avy 0 0
    elpa-assess 0 0
    elpa-autothemer 0 0
    elpa-beacon 0 0
    elpa-atomic-chrome 0 0
    elpa-beginend 0 0
    elpa-avy-menu 0 0
    elpa-bash-completion 0 0
    elpa-bind-key 0 0
    dh-elpa 0 0
    elpa-bm 0 0
    elpa-bind-chord 0 0
    elpa-boxquote 0 0
    elpa-bpftrace-mode 0 0
    elpa-browse-kill-ring 0 0
    elpa-bongo 0 0
    elpa-buttercup 0 0
    elpa-bug-hunter 0 0
    elpa-bui 0 0
    elpa-ac-rtags 0 0
    elpa-bind-map 0 0
    debian-el 0 0
    elpa-circe 0 0
    elpa-clojure-mode 0 0
    elpa-cmake-mode 0 0
    elpa-char-menu 0 0
    dpkg-dev-el 0 0
    elpa-clojure-mode-extra-font-locking 0 0
    elpa-closql 0 0
    elpa-company 0 0
    elpa-color-theme-modern 0 0
    elpa-concurrent 0 0
    elpa-compat 0 0
    elpa-crdt 0 0
    elpa-c-sig 0 0
    elpa-csv-mode 0 0
    elpa-ctable 0 0
    elpa-cycle-quotes 0 0
    elpa-corfu 0 0
    elpa-darcsum 0 0
    elpa-darkroom 0 0
    elpa-dash 0 0
    elpa-debase 0 0
    elpa-db 0 0
    elpa-deferred 0 0
    elpa-counsel 0 0
    elpa-deft 0 0
    elpa-debpaste 0 0
    elpa-diff-hl 0 0
    elpa-diffview 0 0
    elpa-diminish 0 0
    elpa-dimmer 0 0
    elpa-dired-du 0 0
    elpa-consult 0 0
    elpa-dockerfile-mode 0 0
    elpa-discomfort 0 0
    elpa-company-rtags 0 0
    elpa-doom-themes 0 0
    elpa-discover-my-major 0 0
    elpa-dired-quick-sort 0 0
    elpa-dired-rsync 0 0
    elpa-elfeed-web 100 100
    elpa-editorconfig 0 0
    elpa-ednc 0 0
    elpa-ebib 0 0
    elpa-elisp-refs 0 0
    elpa-el-mock 0 0
    elpa-elpher 0 0
    elpa-debian-el 0 0
    elpa-eglot 0 0
    elpa-elfeed 0 0
    elpa-el-x 0 0
    elpa-dumb-jump 0 0
    elpa-elm-mode 0 0
    elpa-emacsql 0 0
    elpa-elscreen 0 0
    elpa-ediprolog 0 0
    dh-make-elpa 0 0
    elpa-emacsql-mysql 0 0
    elpa-emacs-dashboard 0 0
    elpa-emacsql-sqlite 0 0
    elpa-emacsql-psql 0 0
    elpa-citar 100 100
    elpa-engine-mode 0 0
    elpa-emacsql-sqlite3 0 0
    elpa-epl 0 0
    elpa-ert-async 0 0
    devscripts-el 0 0
    elpa-dpkg-dev-el 0 0
    elpa-eshell-bookmark 0 0
    elpa-ert-expectations 0 0
    elpa-eshell-prompt-extras 0 0
    elpa-eshell-up 0 0
    elpa-eshell-z 0 0
    elpa-epc 0 0
    elpa-esup 0 0
    elpa-esxml 0 0
    elpa-esh-help 0 0
    elpa-exec-path-from-shell 0 0
    elpa-expand-region 0 0
    elpa-faceup 0 0
    elpa-fill-column-indicator 0 0
    elpa-eshell-git-prompt 0 0
    elpa-eyebrowse 0 0
    elpa-evil 0 0
    elpa-embark 0 0
    elpa-ement 0 0
    elpa-f 0 0
    elpa-flx 0 0
    elpa-flx-ido 0 0
    elpa-eproject 0 0
    elpa-fsm 0 0
    elpa-folding 0 0
    elpa-geiser 0 0
    elpa-find-file-in-project 0 0
    elpa-fountain-mode 0 0
    elpa-exwm 0 0
    elpa-git-auto-commit-mode 0 0
    elpa-flycheck 0 0
    elpa-exwm-mff 0 0
    elpa-ghub 0 0
    elpa-gitlab-ci-mode 0 0
    elpa-ggtags 0 0
    elpa-git-messenger 0 0
    elpa-gitattributes-mode 0 0
    elpa-ghub+ 0 0
    elpa-golden-ratio 0 0
    elpa-flycheck-package 0 0
    elpa-git-commit 0 0
    elpa-devscripts 0 0
    elpa-git-timemachine 0 0
    elpa-gitconfig-mode 0 0
    elpa-goto-chg 0 0
    elpa-graphql 0 0
    elpa-gitignore-mode 0 0
    elpa-git-annex 0 0
    elpa-git-modes 0 0
    elpa-helm-core 0 0
    elpa-flycheck-rtags 0 0
    elpa-graphviz-dot-mode 0 0
    elpa-go-mode 0 0
    elpa-highlight-indentation 0 0
    elpa-highlight-numbers 0 0
    elpa-haskell-mode 100 100
    elpa-helm 0 0
    elpa-ht 0 0
    elpa-hungry-delete 0 0
    elpa-htmlize 0 0
    elpa-hl-todo 0 0
    elpa-helpful 0 0
    elpa-ibuffer-vc 0 0
    elpa-ido-vertical-mode 0 0
    elpa-iedit 0 0
    elpa-hydra 0 0
    elpa-imenu-list 0 0
    elpa-ibuffer-projectile 0 0
    elpa-initsplit 0 0
    elpa-helm-ag 0 0
    elpa-ess 0 0
    elpa-helm-org 0 0
    elpa-ido-completing-read+ 0 0
    elpa-ivy 0 0
    elpa-jinja2-mode 0 0
    elpa-helm-projectile 0 0
    elpa-key-chord 0 0
    elpa-irony 0 0
    elpa-kotlin-mode 0 0
    elpa-kv 0 0
    elpa-ivy-hydra 0 0
    elpa-jabber 0 0
    elpa-ledger 0 0
    elpa-let-alist 0 0
    elpa-linum-relative 0 0
    elpa-load-relative 0 0
    elpa-loop 0 0
    elpa-helm-rtags 0 0
    elpa-lua-mode 0 0
    elpa-ivy-rtags 0 0
    elpa-js2-mode 0 0
    elpa-lv 0 0
    elpa-dap-mode 0 0
    elpa-gnuplot-mode 0 0
    elpa-helm-virtualenvwrapper 0 0
    elpa-magit-section 0 0
    elpa-magit-popup 0 0
    elpa-makey 0 0
    elpa-ligature 0 100
    elpa-markdown-mode 0 0
    elpa-memoize 0 0
    elpa-m-buffer 0 0
    elpa-marginalia 0 0
    elpa-jedi-core 0 0
    elpa-mastodon 0 0
    elpa-meson-mode 0 0
    elpa-message-templ 0 0
    elpa-minimap 0 0
    elpa-lsp-mode 0 0
    elpa-mocker 0 0
    elpa-monokai-theme 0 0
    elpa-move-text 0 0
    elpa-modus-themes 0 0
    elpa-muttrc-mode 0 0
    elpa-neotree 0 0
    elpa-jedi 0 0
    elpa-nginx-mode 0 0
    elpa-magit 0 0
    elpa-lsp-haskell 100 100
    elpa-noflet 0 0
    elpa-olivetti 0 0
    elpa-no-littering 0 0
    elpa-nov 0 0
    elpa-mutt-alias 0 0
    elpa-openwith 0 0
    elpa-orderless 0 0
    elpa-orgalist 0 0
    elpa-org-appear 0 0
    elpa-org-bullets 0 0
    elpa-nose 0 0
    elpa-org-present 0 0
    elpa-org-drill 0 0
    elpa-org-tree-slide 100 100
    elpa-org-make-toc 0 0
    elpa-ox-texinfo+ 0 0
    elpa-page-break-lines 0 0
    elpa-paredit 0 0
    elpa-package-lint 0 0
    elpa-magit-annex 0 0
    elpa-package-lint-flymake 0 0
    elpa-lsp-ui 0 0
    elpa-org-roam 0 0
    elpa-parent-mode 0 0
    elpa-paredit-everywhere 0 0
    elpa-parsebib 0 0
    elpa-org 100 100
    elpa-persist 0 0
    elpa-pcre2el 0 0
    elpa-ol-notmuch 100 100
    elpa-perspective 0 0
    elpa-org-contrib 100 100
    elpa-pfuture 0 0
    elpa-pg 0 0
    elpa-magit-todos 0 0
    elpa-php-mode 0 0
    elpa-pdf-tools-server 0 0
    elpa-pkg-info 0 0
    elpa-plz 0 0
    elpa-persp-projectile 0 0
    elpa-pointback 100 100
    elpa-pod-mode 0 0
    elpa-popup 0 0
    elpa-pip-requirements 0 0
    elpa-posframe 0 0
    elpa-pos-tip 0 0
    elpa-pdf-tools 0 0
    elpa-powerline 0 0
    elpa-projectile 0 0
    elpa-project 0 0
    elpa-puppet-mode 0 0
    elpa-qml-mode 0 0
    elpa-queue 0 0
    elpa-rainbow-delimiters 0 0
    elpa-rainbow-identifiers 0 0
    elpa-pyim 0 0
    elpa-rainbow-mode 0 0
    elpa-recursive-narrow 0 0
    elpa-pyim-basedict 0 0
    elpa-lsp-treemacs 0 0
    elpa-racket-mode 0 0
    elpa-py-autopep8 0 0
    elpa-redtick 0 0
    elpa-restart-emacs 0 0
    elpa-py-isort 0 0
    elpa-rich-minority 0 0
    elpa-relint 0 0
    elpa-request 0 0
    elpa-rust-mode 0 0
    elpa-s 0 0
    elpa-scala-mode 0 0
    elpa-seq 0 0
    elpa-sesman 0 0
    elpa-session 0 0
    elpa-shut-up 0 0
    elpa-python-environment 0 0
    elpa-simple-httpd 0 0
    elpa-smart-mode-line 0 0
    elpa-smeargle 0 0
    elpa-smex 0 0
    elpa-pyvenv 0 0
    elpa-snakemake-mode 0 0
    elpa-sml-mode 0 0
    elpa-spinner 0 0
    elpa-snakemake 100 100
    elpa-srv 0 0
    elpa-rtags 0 0
    elpa-smart-mode-line-powerline-theme 0 0
    elpa-super-save 0 0
    elpa-svg-lib 0 0
    elpa-mpv 100 100
    elpa-systemd 0 0
    elpa-system-packages 0 0
    elpa-tabbar 0 0
    elpa-tablist 0 0
    elpa-swiper 0 0
    elpa-pass 0 0
    elpa-solarized-theme 0 0
    elpa-taxy 0 0
    elpa-transient 0 0
    elpa-transient-doc 0 0
    elpa-suggest 0 0
    elpa-transmission 0 0
    elpa-treepy 0 0
    elpa-taxy-magit-section 0 0
    elpa-undo-tree 0 0
    elpa-undercover 0 0
    elpa-use-package 0 0
    elpa-uuid 0 0
    elpa-vala-mode 0 0
    elpa-vc-fossil 0 0
    elpa-visual-fill-column 0 0
    elpa-use-package-ensure-system-package 0 0
    elpa-visual-regexp 0 0
    elpa-vertico 0 0
    elpa-use-package-chords 0 0
    elpa-volume 0 0
    elpa-wc-mode 0 0
    elpa-vterm 0 0
    elpa-vimish-fold 0 0
    elpa-web-mode 0 0
    elpa-websocket 0 0
    elpa-magit-forge 0 0
    elpa-wgrep 0 0
    elpa-sxiv 0 0
    elpa-wgrep-ack 0 0
    elpa-wgrep-ag 0 0
    elpa-wgrep-helm 0 0
    elpa-which-key 0 0
    elpa-with-simulated-input 0 0
    elpa-world-time-mode 0 0
    elpa-writegood-mode 0 0
    elpa-weechat 0 0
    elpa-with-editor 0 0
    elpa-ws-butler 0 0
    elpa-writeroom-mode 0 0
    elpa-virtualenvwrapper 0 0
    elpa-xcite 0 0
    elpa-xcscope 0 0
    elpa-xml-rpc 0 0
    elpa-xr 0 0
    elpa-xref 0 0
    elpa-yaml-mode 0 0
    elpa-zenburn-theme 0 0
    elpa-treemacs 0 0
    elpa-ztree 0 0
    elpa-xelb 0 0
    elpa-zzz-to-char 0 0
    elpa-yasnippet 0 0
    elpa-yasnippet-snippets 0 0
    emacs-libvterm 0 0
    elscreen 0 0
    expand-region-el 0 0
    geiser 0 0
    ilisp 0 0
    ilisp-doc 0 0
    flycheck-doc 0 0
    irony-server 0 0
    golang-mode 0 0
    haskell-mode 100 100
    maildir-utils 0 0
    elpa-treemacs-projectile 0 0
    elpa-lsp-java 0 0
    scala-mode-el 0 0
    js2-mode 0 0
    verilog-mode 0 0
    sml-mode 0 0
    vala-mode-el 0 0
    mu4e 0 0
    xcite 0 0
    xcscope-el 0 0
    org-roam-doc 0 0
    elpa-treemacs-evil 0 0
    elpa-yaml 0 0
    rtags 0 0
    elpa-subed 0 0
    yasnippet 0 0
    org-mode 100 100
    gnuplot-mode 0 0
    elpa-treemacs-magit 0 0
    emacs-goodies-el 0 0

    --=-=-Content-Type: text/plain
    Content-Disposition: attachment; filename=paquets_debian_emacsen_binaires

    bbdb
    c-sig
    darcsum
    debian-el
    devscripts-el
    dh-elpa
    dh-elpa-helper
    dh-make-elpa
    dpkg-dev-el
    elpa-a
    elpa-ace-link
    elpa-ace-popup-menu
    elpa-ace-window
    elpa-ac-rtags
    elpa-adaptive-wrap
    elpa-aggressive-indent
    elpa-anzu
    elpa-apache-mode
    elpa-apiwrap
    elpa-assess
    elpa-async
    elpa-atomic-chrome
    elpa-auto-dictionary
    elpa-autothemer
    elpa-avy
    elpa-avy-menu
    elpa-bash-completion
    elpa-beacon
    elpa-beginend
    elpa-bind-chord
    elpa-bind-key
    elpa-bind-map
    elpa-bm
    elpa-bongo
    elpa-boxquote
    elpa-bpftrace-mode
    elpa-browse-kill-ring
    elpa-bug-hunter
    elpa-bui
    elpa-buttercup
    elpa-char-menu
    elpa-circe
    elpa-citar
    elpa-clojure-mode
    elpa-clojure-mode-extra-font-locking
    elpa-closql
    elpa-cmake-mode
    elpa-color-theme-modern
    elpa-company
    elpa-company-rtags
    elpa-compat
    elpa-concurrent
    elpa-consult
    elpa-corfu
    elpa-counsel
    elpa-crdt
    elpa-c-sig
    elpa-csv-mode
    elpa-ctable
    elpa-cycle-quotes
    elpa-dap-mode
    elpa-darcsum
    elpa-darkroom
    elpa-dash
    elpa-db
    elpa-debase
    elpa-debian-el
    elpa-debpaste
    elpa-deferred
    elpa-deft
    elpa-devscripts
    elpa-diff-hl
    elpa-diffview
    elpa-diminish
    elpa-dimmer
    elpa-dired-du
    elpa-dired-quick-sort
    elpa-dired-rsync
    elpa-discomfort
    elpa-discover-my-major
    elpa-dockerfile-mode
    elpa-doom-themes
    elpa-dpkg-dev-el
    elpa-dumb-jump
    elpa-ebib
    elpa-ediprolog
    elpa-editorconfig
    elpa-ednc
    elpa-eglot
    elpa-elfeed
    elpa-elfeed-web
    elpa-elisp-refs
    elpa-elm-mode
    elpa-el-mock
    elpa-elpher
    elpa-elscreen
    elpa-el-x
    elpa-emacs-dashboard
    elpa-emacsql
    elpa-emacsql-mysql
    elpa-emacsql-psql
    elpa-emacsql-sqlite
    elpa-emacsql-sqlite3
    elpa-embark
    elpa-ement
    elpa-engine-mode
    elpa-epc
    elpa-epl
    elpa-eproject
    elpa-ert-async
    elpa-ert-expectations
    elpa-eshell-bookmark
    elpa-eshell-git-prompt
    elpa-eshell-prompt-extras
    elpa-eshell-up
    elpa-eshell-z
    elpa-esh-help
    elpa-ess
    elpa-esup
    elpa-esxml
    elpa-evil
    elpa-exec-path-from-shell
    elpa-expand-region
    elpa-exwm
    elpa-exwm-mff
    elpa-eyebrowse
    elpa-f
    elpa-faceup
    elpa-fill-column-indicator
    elpa-find-file-in-project
    elpa-flx
    elpa-flx-ido
    elpa-flycheck
    elpa-flycheck-package
    elpa-flycheck-rtags
    elpa-folding
    elpa-fountain-mode
    elpa-fsm
    elpa-geiser
    elpa-ggtags
    elpa-ghub
    elpa-ghub+
    elpa-git-annex
    elpa-gitattributes-mode
    elpa-git-auto-commit-mode
    elpa-git-commit
    elpa-gitconfig-mode
    elpa-gitignore-mode
    elpa-gitlab-ci-mode
    elpa-git-messenger
    elpa-git-modes
    elpa-git-timemachine
    elpa-gnuplot-mode
    elpa-golden-ratio
    elpa-go-mode
    elpa-goto-chg
    elpa-graphql
    elpa-graphviz-dot-mode
    elpa-haskell-mode
    elpa-helm
    elpa-helm-ag
    elpa-helm-core
    elpa-helm-org
    elpa-helm-projectile
    elpa-helm-rtags
    elpa-helm-virtualenvwrapper
    elpa-helpful
    elpa-highlight-indentation
    elpa-highlight-numbers
    elpa-hl-todo
    elpa-ht
    elpa-htmlize
    elpa-hungry-delete
    elpa-hydra
    elpa-ibuffer-projectile
    elpa-ibuffer-vc
    elpa-ido-completing-read+
    elpa-ido-vertical-mode
    elpa-iedit
    elpa-imenu-list
    elpa-initsplit
    elpa-irony
    elpa-ivy
    elpa-ivy-hydra
    elpa-ivy-rtags
    elpa-jabber
    elpa-jedi
    elpa-jedi-core
    elpa-jinja2-mode
    elpa-js2-mode
    elpa-key-chord
    elpa-kotlin-mode
    elpa-kv
    elpa-ledger
    elpa-let-alist
    elpa-ligature
    elpa-linum-relative
    elpa-load-relative
    elpa-loop
    elpa-lsp-haskell
    elpa-lsp-java
    elpa-lsp-mode
    elpa-lsp-treemacs
    elpa-lsp-ui
    elpa-lua-mode
    elpa-lv
    elpa-magit
    elpa-magit-annex
    elpa-magit-forge
    elpa-magit-popup
    elpa-magit-section
    elpa-magit-todos
    elpa-makey
    elpa-marginalia
    elpa-markdown-mode
    elpa-mastodon
    elpa-m-buffer
    elpa-memoize
    elpa-meson-mode
    elpa-message-templ
    elpa-minimap
    elpa-mocker
    elpa-modus-themes
    elpa-monokai-theme
    elpa-move-text
    elpa-mpv
    elpa-mutt-alias
    elpa-muttrc-mode
    elpa-neotree
    elpa-nginx-mode
    elpa-noflet
    elpa-no-littering
    elpa-nose
    elpa-nov
    elpa-olivetti
    elpa-ol-notmuch
    elpa-openwith
    elpa-orderless
    elpa-org
    elpa-orgalist
    elpa-org-appear
    elpa-org-bullets
    elpa-org-contrib
    elpa-org-drill
    elpa-org-make-toc
    elpa-org-present
    elpa-org-roam
    elpa-org-tree-slide
    elpa-ox-texinfo+
    elpa-package-lint
    elpa-package-lint-flymake
    elpa-page-break-lines
    elpa-paredit
    elpa-paredit-everywhere
    elpa-parent-mode
    elpa-parsebib
    elpa-pass
    elpa-pcre2el
    elpa-pdf-tools
    elpa-pdf-tools-server
    elpa-persist
    elpa-perspective
    elpa-persp-projectile
    elpa-pfuture
    elpa-pg
    elpa-php-mode
    elpa-pip-requirements
    elpa-pkg-info
    elpa-plz
    elpa-pod-mode
    elpa-pointback
    elpa-popup
    elpa-posframe
    elpa-pos-tip
    elpa-powerline
    elpa-project
    elpa-projectile
    elpa-puppet-mode
    elpa-py-autopep8
    elpa-pyim
    elpa-pyim-basedict
    elpa-py-isort
    elpa-python-environment
    elpa-pyvenv
    elpa-qml-mode
    elpa-queue
    elpa-racket-mode
    elpa-rainbow-delimiters
    elpa-rainbow-identifiers
    elpa-rainbow-mode
    elpa-recursive-narrow
    elpa-redtick
    elpa-relint
    elpa-request
    elpa-restart-emacs
    elpa-rich-minority
    elpa-rtags
    elpa-rust-mode
    elpa-s
    elpa-scala-mode
    elpa-seq
    elpa-sesman
    elpa-session
    elpa-shut-up
    elpa-simple-httpd
    elpa-smart-mode-line
    elpa-smart-mode-line-powerline-theme
    elpa-smeargle
    elpa-smex
    elpa-sml-mode
    elpa-snakemake
    elpa-snakemake-mode
    elpa-solarized-theme
    elpa-spinner
    elpa-srv
    elpa-subed
    elpa-suggest
    elpa-super-save
    elpa-svg-lib
    elpa-swiper
    elpa-sxiv
    elpa-systemd
    elpa-system-packages
    elpa-tabbar
    elpa-tablist
    elpa-taxy
    elpa-taxy-magit-section
    elpa-transient
    elpa-transient-doc
    elpa-transmission
    elpa-treemacs
    elpa-treemacs-evil
    elpa-treemacs-magit
    elpa-treemacs-projectile
    elpa-treepy
    elpa-undercover
    elpa-undo-tree
    elpa-use-package
    elpa-use-package-chords
    elpa-use-package-ensure-system-package
    elpa-uuid
    elpa-vala-mode
    elpa-vc-fossil
    elpa-vertico
    elpa-vimish-fold
    elpa-virtualenvwrapper
    elpa-visual-fill-column
    elpa-visual-regexp
    elpa-volume
    elpa-vterm
    elpa-wc-mode
    elpa-web-mode
    elpa-websocket
    elpa-weechat
    elpa-wgrep
    elpa-wgrep-ack
    elpa-wgrep-ag
    elpa-wgrep-helm
    elpa-which-key
    elpa-with-editor
    elpa-with-simulated-input
    elpa-world-time-mode
    elpa-writegood-mode
    elpa-writeroom-mode
    elpa-ws-butler
    elpa-xcite
    elpa-xcscope
    elpa-xelb
    elpa-xml-rpc
    elpa-xr
    elpa-xref
    elpa-yaml
    elpa-yaml-mode
    elpa-yasnippet
    elpa-yasnippet-snippets
    elpa-zenburn-theme
    elpa-ztree
    elpa-zzz-to-char
    elscreen
    emacs-goodies-el
    emacs-libvterm
    expand-region-el
    flycheck-doc
    geiser
    gnuplot-mode
    golang-mode
    haskell-mode
    ilisp
    ilisp-doc
    irony-server
    js2-mode
    maildir-utils
    mu4e
    org-mode
    org-roam-doc
    rtags
    scala-mode-el
    sml-mode
    vala-mode-el
    verilog-mode
    xcite
    xcscope-el
    yasnippet

    --=-=-Content-Type: text/x-sh
    Content-Disposition: attachment; filename=test_emacs_install.sh

    #!/bin/sh

    # Attempts to install the package provided as argument in two different chroots.
    # The first one has got the archive version of emacs installed
    # The second one has got the patched version of emacs installed

    # The setting up of those chroots is out of the scope of this script.

    # On the standard output is written :
    # - the name of the binary package
    # - the return value of the first attempt
    # - the return value of the second attempt

    if test $# -lt 1; then
    echo "Missing argument : binary package"
    exit 1
    fi

    # Fix with your own chroot names

    schroot -d /tmp -u root -c unstable-amd64test-archive-emacs -- apt install -y $1
    first_attempt="$?"

    schroot -d /tmp -u root -c unstable-amd64test-patched-emacs -- apt install -y $1
    second_attempt="$?"

    echo "$1 $first_attempt $second_attempt"

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Sean Whitton@21:1/5 to Aymeric Agon-Rambosson on Fri Aug 4 13:00:02 2023
    Hello,

    On Thu 03 Aug 2023 at 07:40am +02, Aymeric Agon-Rambosson wrote:

    tl;dr : The changes introduced by Andrea Corallo following said discussion have made patches 12 and 13 (the rebased version of Lars Ingebrigsten commits)
    useless, so we should drop them.

    In fact, I thought that this was the unanimous conclusion of the discussion, hence my mail to Sean from yesterday where I enquired as to why patches 12 and
    13 were still present.

    For context, the earlier version of patches 12 and 13 were introduced to solve
    a series of FTBFS bugs we had with various elpa-* packages (see #1021842, for instance). Those bugs happened roughly like so :

    1. Whenever a primitive (a function available from elisp, but implemented in C) is advised, it is necessary to compile a trampoline to allow to jump dynamically to the native-compiled definition of the advice, which could be anywhere on the user's system.
    2. Said trampoline needs to be output to a file.
    3. The job of function comp--trampoline-abs-filename is to find a directory in
    which to store this file, and return it.
    4. This search was made from a list of candidates (think /usr/lib/emacs/29.1/native-lisp or ~/.emacs.d/eln-cache).
    5. If no such candidate was available, either because they were unwritable (the former) or because they did not exist (the latter, in our build environments), the function errored out, which caused our bug.

    Thank you for the investigation.

    My conception of the environment variable is a bit broader than just
    this particular bug: I think that it is a good idea to be able to switch
    off native compilation in the way this environment variable permits.
    So I am inclined to keep the patches.

    --
    Sean Whitton

    --=-=-Content-Type: application/pgp-signature; name="signature.asc"

    -----BEGIN PGP SIGNATURE-----

    iQJNBAEBCgA3FiEEm5FwB64DDjbk/CSLaVt65L8GYkAFAmTM2LgZHHNwd2hpdHRv bkBzcHdoaXR0b24ubmFtZQAKCRBpW3rkvwZiQIg4D/9MtFYGhipcof1rN00chcE2 HrE/ngxHvQyhblq5ae4q6euYt9OF8d9vquYTHz5JZ6EzTzyGEpDiMmsfyU873IE/ 6dnfUSaw3sLSHlzI9Tp10mZb4osLsDhoE5rfeGxEgE8OV2OKmJUt5i3jbaMLD3yK OfdJI8hxWKiUw+ROwarhsuwnPM6kMjb1Hg4EIywknU8NA/0Gk7gLjHTrrwyFQtSs jZnfIJx0zi1K+kxgWagoMdvHHfmfBq67nZEd2xIHaW4R203T8GvW1bbjkeS3K3Fo AkPsRS80+mBlRcROKHWBdTwdx6OPqr4tdtB7ge2Q7d2UXaKtXpzwsmfE4d7BT7/j RmKYQRlEBuCmyWMLfV53xUt2s5OLGXCFBk44IrKsu0esqNBuEzb8EfWwvia+5Gc8 g3bJKBVVFBWFuEA7zah68V7NOxDMyxxCz8yIs7OOn266HIlClhGUoYNiyfQq2hI7 Aa/a4dpEo+wkMn9eTQFlOBbCE1S5ipM1PkvwMwZ5uZmxANE9AQxeFTXjeW+XejGQ JcvNgPlwUevX4uYHRmNXDWdS81nBg2m6Nnx44o4Vl6mwu0+NMO78OrtSeJ2/GOGM ScvlAdQnN4ZmpvMSVyLjqj9cZmpDScxPLeLXQuZV7r3Mvqm3iYkHDyA5x77sL/6d A+QfhWnEmY4uGik5XLZyOA==vwh9
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Us
  • From David Bremner@21:1/5 to Aymeric Agon-Rambosson on Fri Aug 4 12:30:01 2023
    Aymeric Agon-Rambosson <aymeric.agon@yandex.com> writes:

    For this reason, I have in my fork (https://salsa.debian.org/ricorambo/deb-emacs) a branch (rico-without-lars-patch) that simply drops patches 12 and 13.

    The experiment is the following : for every package maintained by
    the debian-emacsen team, a build is attempted with the version of
    emacs in current sid, and another is attempted with the version of
    emacs from my fork.

    If the patches were really useful, there would be at least some
    elpa-* package that would build correctly on the first attempt,
    and FTBFS on the second.

    First, thanks for your efforts so far. It does make me think you are
    probably right, that we can (try to) drop the corresponding patches.

    I do have one question (which might be annoying to answer): do the
    resulting elpa-* packages install with your patched emacs? I vaguely
    remember some issues with post install byte-compilation.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Aymeric Agon-Rambosson@21:1/5 to All on Fri Aug 4 19:00:01 2023
    Le vendredi 4 août 2023 à 11:53, Sean Whitton
    <spwhitton@spwhitton.name> a écrit :

    My conception of the environment variable is a bit broader than
    just
    this particular bug: I think that it is a good idea to be able
    to switch
    off native compilation in the way this environment variable
    permits.

    Except... The patches do no such thing.

    The patches do *not*, I repeat, do *not* switch off native
    compilation.

    The *only* thing these patches do is :
    - If inhibit-automatic-native-compilation (very misleading
    variable name indeed) is t, then trampolines are output in a
    temporary file.
    - If inhibit-automatic-native-compilation is nil, then trampolines
    are output in the first available candidate directory, OR in a
    temporary directory if no suitable candidate was found.

    This is *all* they do, despite the name of the variable that seems
    to promise so much more. You see what I mean when I say they are
    useless. With or without the patch, in our build environment, we
    end up doing the exact same thing : outputting our trampolines to
    a file somewhere in /tmp.

    You can check this by looking at all the places where the content
    of this variable is actually used. You will find that it is only
    used in the function comp--trampoline-abs-filename, to do what I
    described you it does previously.

    Now, if you want to "switch off native compilation", which I agree
    is a convenient thing to be able to do, you have two variables
    that *really* do something :
    - native-comp-jit-compilation, that controls whether loaded .elc
    files are asynchronously compiled. Note that this does *not*
    include trampolines : even if this variable is nil, trampolines
    are still compiled.
    - native-comp-enable-subr-trampolines, that controls whether or
    not the trampolines are compiled, and where they are
    output. Sean, this is the variable I discussed the semantic of
    with Andrea. Now, we do *not* want to disable trampoline
    compilation, lest we accept to render all advices on primitive
    functions null and void (which will cause quite a lot of FTBFS
    bugs, many packages advise primitives as part of their
    testbed). The docstring of this variable explains this in more
    detail.

    Controlling these two variables with environment variables
    requires only a patch like the following :


    --=-=-Content-Type: text/x-diff
    Content-Disposition: inline; filename=envvar.patch

    diff --git a/lisp/startup.el b/lisp/startup.el
    index d6e1c23fa28..3f89df0f119 100644
    --- a/lisp/startup.el
    +++ b/lisp/startup.el
    @@ -595,6 +595,9 @@ It is the default value of the variable `top-level'."
    (setq user-emacs-directory
    (startup--xdg-or-homedot startup--xdg-config-home-emacs nil))

    + (setq native-comp-jit-compilation (getenv "DEBIAN_ENABLE_NATIVE_COMP_JIT"))
    + (setq native-comp-enable-subr-trampolines (getenv "DEBIAN_ENABLE_NATIVE_COMP_TRAMPOLINES"))
    +
    (when (featurep 'native-compile)
    (unless (native-comp-available-p)
    ;; Disable deferred async compilation and trampoline synthesis

    --=-=-Content-Type: text/plain; format=flowed


    Which is much simpler than the ones we have now, and actually does
    what we want to do.

    We would then simply have :

    $ENV{'DEBIAN_ENABLE_NATIVE_COMP_JIT'} = 'nil';

    in the relevant emacsen-common scripts instead of the current :

    $ENV{'EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION'} = 't';

    Sean, this is what I meant when I said we should let upstream
    focus on the semantic of elisp variables, and ju
  • From Aymeric Agon-Rambosson@21:1/5 to All on Fri Aug 4 21:10:01 2023
    Little correction on what I wrote earlier. Sorry about that, I
    should have been more careful.

    Le vendredi 4 août 2023 à 18:49, Aymeric Agon-Rambosson <aymeric.agon@yandex.com> a écrit :

    The *only* thing these patches do is :
    - If inhibit-automatic-native-compilation (very misleading
    variable name
    indeed) is t, then trampolines are output in a temporary
    file.
    - If inhibit-automatic-native-compilation is nil, then
    trampolines are output
    in the first available candidate directory, OR in a
    temporary directory if
    no suitable candidate was found.

    This is *all* they do, despite the name of the variable that
    seems to promise so
    much more. You see what I mean when I say they are useless. With
    or without the
    patch, in our build environment, we end up doing the exact same
    thing :
    outputting our trampolines to a file somewhere in /tmp.

    You can check this by looking at all the places where the
    content of this
    variable is actually used. You will find that it is only used in
    the function
    comp--trampoline-abs-filename, to do what I described you it
    does previously.

    That is not entirely true. The C variable Vinhibit_automatic_native_compilation, corresponding to elisp
    variable inhibit-automatic-native-compilation, is effectively used
    to disable native compilation of loaded elc files.

    The patch remains useless nonetheless : this (partial) disabling
    of native compilation is redundant with the one already provided
    by variable native-comp-jit-compilation.

    In fact, if you look at this part of the patch :


    --=-=-Content-Type: text/x-diff
    Content-Disposition: inline; filename=redundant.patch

    diff --git a/src/comp.c b/src/comp.c
    index 59c9e9619a3..06ddb956bb5 100644
    --- a/src/comp.c
    +++ b/src/comp.c
    @@ -5179,6 +5179,7 @@ maybe_defer_native_compilation (Lisp_Object function_name,
    return;

    if (!native_comp_jit_compilation
    + || !NILP (Vinhibit_native_compilation)
    || noninteractive
    || !NILP (Vpurify_flag)
    || !COMPILEDP (definition)

    --=-=-Content-Type: text/plain; format=flowed


    You will notice that the first two boolean conditions are
    redundant : native_comp_jit_compilation already does what Vinhibit_native_compilation wants to do, albeit with an inverted
    meaning.

    So, let me correct myself ; the patch does not do one, but two
    useless things :
    - it provides a mechanism to output trampolines to a temporary
    location, despite the fact that there already is one that does
    the same thing.
    - it duplicates variable native-comp-jit-compilation to
    inhibit-automatic-native-compilation, simply flipping its
    meaning.

    The rest of what I wrote about us just needing the little patch I
    provided to control the relevant v
  • From Sean Whitton@21:1/5 to Aymeric Agon-Rambosson on Sun Aug 6 18:40:01 2023
    Hello,

    On Fri 04 Aug 2023 at 09:08pm +02, Aymeric Agon-Rambosson wrote:

    That is not entirely true. The C variable Vinhibit_automatic_native_compilation, corresponding to elisp variable inhibit-automatic-native-compilation, is effectively used to disable native compilation of loaded elc files.

    The patch remains useless nonetheless : this (partial) disabling of native compilation is redundant with the one already provided by variable native-comp-jit-compilation.

    In fact, if you look at this part of the patch :

    diff --git a/src/comp.c b/src/comp.c
    index 59c9e9619a3..06ddb956bb5 100644
    --- a/src/comp.c
    +++ b/src/comp.c
    @@ -5179,6 +5179,7 @@ maybe_defer_native_compilation (Lisp_Object function_name,
    return;

    if (!native_comp_jit_compilation
    + || !NILP (Vinhibit_native_compilation)
    || noninteractive
    || !NILP (Vpurify_flag)
    || !COMPILEDP (definition)


    You will notice that the first two boolean conditions are redundant : native_comp_jit_compilation already does what Vinhibit_native_compilation wants to do, albeit with an inverted meaning.

    But the patch allows it to be done using an env var. There is no env
    var corresponding to the new Vnative_comp_jit_compilation. And the env
    var is needed so that we can be sure it's turned off early enough.

    So, while it would be tidier to rework the patch to avoid introducing a
    second variable, its functionality is still useful.

    --
    Sean Whitton

    --=-=-Content-Type: application/pgp-signature; name="signature.asc"

    -----BEGIN PGP SIGNATURE-----

    iQJNBAEBCgA3FiEEm5FwB64DDjbk/CSLaVt65L8GYkAFAmTPzHcZHHNwd2hpdHRv bkBzcHdoaXR0b24ubmFtZQAKCRBpW3rkvwZiQIkKD/41WUnjQjVbxvA6ZcWDWlEu pBMxHuGEtZB2dp6yRnDR9FsHLPOUlSmRcvu2oQGg7WIWBbYC62J1lFwiZFa+akmX LBsvb9TJdKbfcQch1lmDzBi8nW21U4KQsB1xUCXA0jFqsxkko3cwVsiUW7pbSrOS rks/11eF57NN7vFfBM17u2HLNwrv9/j4I1morhx0WOs/GIGM5/f9XZEF+fdESVmJ 6mSFZO+WjI6gbUZWV8UjKWFjHIhQU8eslXsW7Q4SMC4LJvi/SiIfuFP6NnBv0GtW c9EVkp4Fs7XsuwYSLYSLfYskIbT3QVIXPd8eMRmWD+HbEeypaBA5025/Sh8dzSLF 1JX86DfNGJm294c3TFy81hiaJMu9WfH3BXa3bfNmW5SdwcJ8b1rcIbMCQzU8K0rh zx0ZoN9FhkgLfKOq3GR08BVzzxQ4AZz4jncqHn8CWoh2rEkFeG2YMebe6waVgo/t /NWoksC9rBVEIBkmUsZSewG0ZHecJrLyQWpAmM/thZEOM8xLb7z4r/hRHKQFa3Aq +Sk2uXf+uxM/jn0UEqQDGGLtKRU+r+A5FKeh6oDAefMWIOW6A9Eo4ZZXaxSJYtTj /uJ/be8+znMehBZnTdAv6lPfbg4t6NpWZJsHevgNYOHPVn2tndHctP3ltp56+nPy mpaE9evJkZpn77XPXpMQNw=®96
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usen
  • From Aymeric Agon-Rambosson@21:1/5 to All on Mon Aug 7 00:10:01 2023
    Le dimanche 6 août 2023 à 17:38, Sean Whitton
    <spwhitton@spwhitton.name> a écrit :

    But the patch allows it to be done using an env var. There is
    no env
    var corresponding to the new Vnative_comp_jit_compilation. And
    the env
    var is needed so that we can be sure it's turned off early
    enough.

    Exactly, so we can just add the envvar with the two-line patch
    that I sent :


    --=-=-Content-Type: text/x-diff
    Content-Disposition: inline; filename=envvar.patch

    diff --git a/lisp/startup.el b/lisp/startup.el
    index d6e1c23fa28..3f89df0f119 100644
    --- a/lisp/startup.el
    +++ b/lisp/startup.el
    @@ -595,6 +595,9 @@ It is the default value of the variable `top-level'."
    (setq user-emacs-directory
    (startup--xdg-or-homedot startup--xdg-config-home-emacs nil))

    + (setq native-comp-jit-compilation (getenv "DEBIAN_ENABLE_NATIVE_COMP_JIT"))
    + (setq native-comp-enable-subr-trampolines (getenv "DEBIAN_ENABLE_NATIVE_COMP_TRAMPOLINES"))
    +
    (when (featurep 'native-compile)
    (unless (native-comp-available-p)
    ;; Disable deferred async compilation and trampoline synthesis

    --=-=-Content-Type: text/plain; format=flowed


    So, while it would be tidier to rework the patch to avoid
    introducing a
    second variable, its functionality is still useful.

    The only part of the patches that adds something that is not
    already there is the part that adds the envvar.

    The useful functionality of these patches can therefore be
    entirely achieved with the two-line patch that I sent.

    It is not only tidier, it is also equivalent