1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-06 06:20:55 -08:00
emacs/lisp/term/w32-nt.el
Eli Zaretskii bcc33e300a Extend Tree-sitter support on MS-Windows to v0.26.x
* lisp/term/w32-nt.el (dynamic-library-alist): Support Tree-sitter
DLLs for versions upto 0.26.x.
2025-10-14 12:47:57 +03:00

155 lines
6.3 KiB
EmacsLisp
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; w32-nt.el --- MS-Windows native build specific definitions -*- lexical-binding: t -*-
;; Copyright (C) 1993-1994, 2001-2025 Free Software Foundation, Inc.
;; Author: FSF
;; Keywords: terminals
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;; w32-nt.el: this file contains MS-Windows native build specific
;; definitions formerly included in w32-win.el.
;;; Code:
(eval-when-compile (require 'cl-lib))
(defvar dynamic-library-alist)
(defvar libpng-version) ; image.c #ifdef HAVE_NTGUI
(defvar libgif-version)
(defvar libjpeg-version)
(defvar libgnutls-version) ; gnutls.c
(defvar tree-sitter--library-abi) ; treesit.c
;;; Set default known names for external libraries
(setq dynamic-library-alist
(list
'(gdiplus "gdiplus.dll")
'(shlwapi "shlwapi.dll")
'(xpm "libxpm.dll" "xpm4.dll" "libXpm-nox4.dll")
;; Versions of libpng 1.4.x and later are incompatible with
;; earlier versions. Set up the list of libraries according to
;; the version we were compiled against. (If we were compiled
;; without PNG support, libpng-version's value is -1.)
(if (>= libpng-version 10400)
(let ((major (/ libpng-version 10000))
(minor (mod (/ libpng-version 100) 10)))
(list 'png
;; libpngXY.dll is the default name when building
;; with CMake or from a lpngXYY tarball on w32,
;; libpngXY-XY.dll is the DLL name when building
;; with libtool / autotools
(format "libpng%d%d.dll" major minor)
(format "libpng%d%d-%d%d.dll" major minor major minor)))
'(png "libpng12d.dll" "libpng12.dll" "libpng3.dll" "libpng.dll"
;; these are libpng 1.2.8 from GTK+
"libpng13d.dll" "libpng13.dll"))
'(tiff "libtiff-5.dll" "libtiff3.dll" "libtiff.dll")
(if (> libjpeg-version 62)
;; Versions of libjpeg after 6b are incompatible with
;; earlier versions, and each of versions 7, 8, and 9 is
;; also incompatible with the preceding ones (the core data
;; structures used for communications with the library
;; gained additional members with each new version). So we
;; must use only the version of the library which Emacs was
;; compiled against.
(list 'jpeg (format "libjpeg-%d.dll" (/ libjpeg-version 10)))
'(jpeg "jpeg62.dll" "libjpeg.dll" "jpeg-62.dll" "jpeg.dll"))
;; Versions of giflib 5.0.0 and later changed signatures of
;; several functions used by Emacs, which makes those versions
;; incompatible with previous ones. We select the correct
;; libraries according to the version of giflib we were
;; compiled against. (If we were compiled without GIF support,
;; libgif-version's value is -1.)
(if (>= libgif-version 50100)
;; Yes, giflib 5.0 uses 6 as the major version of the API,
;; and giflib 5.1 uses 7, thus "libgif-7.dll" and
;; "libgif-6.dll" below (giflib 4.x used 5 as the major API
;; version). giflib5.dll is from the lua-files project,
;; and gif.dll is from luapower.
'(gif "libgif-7.dll")
(if (>= libgif-version 50000)
'(gif "libgif-6.dll" "giflib5.dll" "gif.dll")
'(gif "libgif-5.dll" "giflib4.dll" "libungif4.dll" "libungif.dll")))
'(svg "librsvg-2-2.dll")
'(webp "libwebp-7.dll" "libwebp.dll")
'(webpdemux "libwebpdemux-2.dll" "libwebpdemux.dll")
'(sqlite3 "libsqlite3-0.dll")
'(gdk-pixbuf "libgdk_pixbuf-2.0-0.dll")
'(glib "libglib-2.0-0.dll")
'(gio "libgio-2.0-0.dll")
'(gobject "libgobject-2.0-0.dll")
(if (>= libgnutls-version 30400)
'(gnutls "libgnutls-30.dll")
'(gnutls "libgnutls-28.dll" "libgnutls-26.dll"))
'(libxml2 "libxml2-16.dll" "libxml2-2.dll" "libxml2.dll")
'(zlib "zlib1.dll" "libz-1.dll")
'(lcms2 "liblcms2-2.dll")
'(gccjit "libgccjit-0.dll")
;; MSYS2 distributes libtree-sitter.dll, without API version
;; number, upto and including version 0.24.3-2; later versions
;; come with libtree-sitter-major.minor.dll (as in
;; libtree-sitter-0.24.dll). Sadly, the header files don't have
;; any symbols for library version, so we can only use the
;; library-language ABI version; according to
;; https://github.com/tree-sitter/tree-sitter/issues/3925, the
;; language ABI must change when the library's ABI is modified.
(if (<= tree-sitter--library-abi 14)
'(tree-sitter "libtree-sitter-0.24.dll"
"libtree-sitter.dll"
"libtree-sitter-0.dll")
;; Supported ABI 13..15
'(tree-sitter "libtree-sitter-0.26.dll"
"libtree-sitter-0.25.dll"))))
;;;; Selections
(declare-function w32--set-selection "w32-win.el")
(declare-function w32--get-selection "w32-win.el")
(declare-function w32--selection-owner-p "w32-win.el")
(declare-function w32-selection-exists-p "w32select.c"
(&optional selection terminal))
;; Make copy&pasting in w32's console interact with the system's clipboard!
(cl-defmethod gui-backend-set-selection (type value
&context (window-system nil))
(w32--set-selection type value))
(cl-defmethod gui-backend-get-selection (type data-type
&context (window-system nil))
(w32--get-selection type data-type))
(cl-defmethod gui-backend-selection-owner-p (selection
&context (window-system nil))
(w32--selection-owner-p selection))
(cl-defmethod gui-selection-exists-p (selection
&context (window-system nil))
(w32-selection-exists-p selection))
(provide 'term/w32-nt)
;;; w32-nt.el ends here