aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/term/w32-nt.el
blob: 7a5ae5ed2b5b2ece7f565e725967dbe3b9aa5d43 (plain) (blame)
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
;;; w32-nt.el --- MS-Windows native build specific definitions -*- lexical-binding: t -*-

;; Copyright (C) 1993-1994, 2001-2026 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