;ELC   
;;; Compiled
;;; in Emacs version 29.4
;;; with all optimizations.



(byte-code "\300\301!\210\300\302!\210\300\303!\210\304\305\306\307\310\311\310\301\312\313&	\210\314\315\316\317\320DD\321\312\322\323\324&\210\314\325\316\317\326DD\327\312\322\323\330&\210\314\331\316\317\332DD\333\323\334%\210\314\335\316\317\336DD\337\323\334%\207" [require ede ede/make semantic/db custom-declare-group project-linux nil "File and tag browser frame." :group tools :version "24.3" custom-declare-variable project-linux-build-directory-default funcall function #[0 "\300\207" [ask] 1 #1=""] "Build directory." "24.4" :type (choice (const :tag "Same as source directory" same) (const :tag "Ask the user" ask)) project-linux-architecture-default #[0 "\300\207" [ask] 1 #1#] "Target architecture to assume when not auto-detected." (choice (string :tag "Architecture name") (const :tag "Ask the user" ask)) project-linux-compile-target-command #[0 "\301P\207" [ede-make-command " -k -C %s SUBDIRS=%s"] 2 #1#] "Default command used to compile a target." string project-linux-compile-project-command #[0 "\301P\207" [ede-make-command " -k -C %s"] 2 #1#] "Default command used to compile a project."] 10)#@60 Find the Linux version for the Linux src in DIR.

(fn DIR)
(defalias 'ede-linux-version #[257 "\301\302!r\211q\210\303 \210\304!\305\306\307\310\311$\210eb\210\307\211\211\312\313!\210\314\315!\262\312\316!\210\314\315!\262\312\317!\210\314\315!\262\320\320\260\321!\210\266\203)\207" [default-directory get-buffer-create " *linux-query*" erase-buffer file-name-as-directory insert-file-contents "Makefile" nil 0 512 re-search-forward "^VERSION *= *\\([0-9.]+\\)" match-string 1 "^PATCHLEVEL *= *\\([0-9.]+\\)" "^SUBLEVEL *= *\\([0-9.]+\\)" "." kill-buffer] 10 (#$ . 1206)])
(byte-code "\300\301\302\303!\"\210\300\304\305\303!\"\210\300\306\304\"\210\307\306\310\311#\210\312\303\313\304#\314\303\315\316\317$\207" [defalias ede-linux-project-p eieio-make-class-predicate ede-linux-project ede-linux-project--eieio-childp eieio-make-child-predicate ede-linux-project-child-p make-obsolete "use (cl-typep ... 'ede-linux-project) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (ede-project) ((build-directory :initarg :build-directory :type string :documentation "Build directory.") (architecture :initarg :architecture :type string :documentation "Target architecture.") (include-path :initarg :include-path :type list :documentation "Include directories.\nContains both common and target architecture-specific directories.")) (:documentation "Project Type for the Linux source code." :method-invocation-order :depth-first)] 6)#@74 Create a new object of class type `ede-linux-project'.

(fn &rest SLOTS)
(defalias 'ede-linux-project #[128 "\300\301\302#\207" [apply make-instance ede-linux-project] 5 (#$ . 2682)])
(byte-code "\300\301\302\303#\300\207" [function-put ede-linux-project compiler-macro ede-linux-project--anon-cmacro] 4)#@26 

(fn WHOLE &rest SLOTS)
(defalias 'ede-linux-project--anon-cmacro #[385 "\211@;\204 \207\300\301\302@@#@\303@DABB\304\211@%\207" [macroexp-warn-and-return format "Obsolete name arg %S to constructor %S" identity nil] 8 (#$ . 2993)])#@155 Detect build directory for sources in DIR.
If DIR has not been used as a build directory, fall back to
`project-linux-build-directory-default'.

(fn DIR)
(defalias 'ede-linux--get-build-directory #[257 "\301\302\303\"!\203 \211\206 \304\267\202 \207\305\306\"\207\307\207" [project-linux-build-directory-default file-exists-p expand-file-name ".config" #s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (same 19 ask 20)) read-directory-name "Select Linux' build directory: " nil] 5 (#$ . 3241)])#@61 Return a list of architecture names found in DIR.

(fn DIR)
(defalias 'ede-linux--get-archs #[257 "\300\301\"\302C\303!\203 \304\305\306#\307!\"\210\211\242\207" [expand-file-name "arch" nil file-directory-p mapc make-closure #[257 "\211\302\230?\2050 \211\303\230?\2050 \211\304\230?\2050 \305\306\301\"!\2050 \211\300\242\235\203( \300\242\207\300\307\300\242C\"\240\207" [V0 V1 "." ".." "x86_64" file-directory-p expand-file-name append] 5 "\n\n(fn ELEM)"] directory-files] 8 (#$ . 3783)])#@178 Try to auto-detect the architecture as configured in DIR.
DIR is Linux' build directory.  If it cannot be auto-detected,
returns `project-linux-architecture-default'.

(fn DIR)
(defalias 'ede-linux--detect-architecture #[257 "\301\302\"\303!\304\211\2033 \203/ \211\204/ @\262\305\301\306P\"!\203( \262A\262\202 \211\2064 \207" [project-linux-architecture-default expand-file-name "arch" ede-linux--get-archs nil file-directory-p "/include/generated"] 9 (#$ . 4290)])#@214 Try to auto-detect the architecture as configured in BDIR.
Uses `ede-linux--detect-architecture' for the auto-detection.
If the result is `ask', let the user choose from architectures
found in DIR.

(fn DIR BDIR)
(defalias 'ede-linux--get-architecture #[514 "\300!\211\301=\203 \302\303\304!\"\207\207" [ede-linux--detect-architecture ask completing-read "Select target architecture: " ede-linux--get-archs] 7 (#$ . 4779)])#@167 Return a list with include directories.
Returned directories might not exist, since they are not created
until Linux is built for the first time.

(fn DIR BDIR ARCH)
(defalias 'ede-linux--include-path #[771 "\300\301\302\"\303B\304B\305B\305B\306B\307B\n\310B\n\311B\257\312\313\314$\2055 \315\"\207" [list make-closure #[257 "\301@\302AQ\300\"\207" [V0 format "/"] 5 "\n\n(fn ELEM)"] "arch/%s/include" "arch/%s/include/generated" "include" "arch/%s/include/uapi" "arch/%s/include/generated/uapi" "include/uapi" "include/generated/uapi" nil apply cl-mapcar cl-coerce] 14 (#$ . 5212)])#@211 Return a Linux Project object if there is a match.
Return nil if there isn't one.
Argument DIR is the directory it is created for.
ROOTPROJ is nil, since there is only one project.

(fn DIR &optional ROOTPROJ)
(defalias 'ede-linux-load #[513 "\300!\301\"\302#\303\304\305\306\307\310\n!\311\312\f!\313\314\315\"\316\317\320&\207" [ede-linux--get-build-directory ede-linux--get-architecture ede-linux--include-path make-instance ede-linux-project :name "Linux" :version ede-linux-version :directory file-name-as-directory :file expand-file-name "scripts/ver_linux" :build-directory :architecture :include-path] 21 (#$ . 5826)])
(byte-code "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320&\321\"\210\322\323\324\325!\"\210\322\326\327\325!\"\210\322\330\326\"\210\331\330\332\333#\210\334\325\335\326#\336\325\337\316\340$\207" [ede-add-project-autoload make-instance ede-project-autoload :name "LINUX ROOT" :file ede/linux :proj-file "scripts/ver_linux" :load-type ede-linux-load :class-sym ede-linux-project :new-p nil :safe-p t unique defalias ede-linux-target-c-p eieio-make-class-predicate ede-linux-target-c ede-linux-target-c--eieio-childp eieio-make-child-predicate ede-linux-target-c-child-p make-obsolete "use (cl-typep ... 'ede-linux-target-c) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (ede-target) (:documentation "EDE Linux Project target for C code.\nAll directories need at least one target.")] 17)#@75 Create a new object of class type `ede-linux-target-c'.

(fn &rest SLOTS)
(defalias 'ede-linux-target-c #[128 "\300\301\302#\207" [apply make-instance ede-linux-target-c] 5 (#$ . 7320)])
(byte-code "\300\301\302\303#\300\207" [function-put ede-linux-target-c compiler-macro ede-linux-target-c--anon-cmacro] 4)#@26 

(fn WHOLE &rest SLOTS)
(defalias 'ede-linux-target-c--anon-cmacro #[385 "\211@;\204 \207\300\301\302@@#@\303@DABB\304\211@%\207" [macroexp-warn-and-return format "Obsolete name arg %S to constructor %S" identity nil] 8 (#$ . 7636)])
(byte-code "\300\301\302\303!\"\210\300\304\305\303!\"\210\300\306\304\"\210\307\306\310\311#\210\312\303\313\304#\314\303\315\316\317$\207" [defalias ede-linux-target-misc-p eieio-make-class-predicate ede-linux-target-misc ede-linux-target-misc--eieio-childp eieio-make-child-predicate ede-linux-target-misc-child-p make-obsolete "use (cl-typep ... 'ede-linux-target-misc) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (ede-target) nil (:documentation "EDE Linux Project target for Misc files.\nAll directories need at least one target.")] 6)#@78 Create a new object of class type `ede-linux-target-misc'.

(fn &rest SLOTS)
(defalias 'ede-linux-target-misc #[128 "\300\301\302#\207" [apply make-instance ede-linux-target-misc] 5 (#$ . 8462)])
(byte-code "\300\301\302\303#\300\207" [function-put ede-linux-target-misc compiler-macro ede-linux-target-misc--anon-cmacro] 4)#@26 

(fn WHOLE &rest SLOTS)
(defalias 'ede-linux-target-misc--anon-cmacro #[385 "\211@;\204 \207\300\301\302@@#@\303@DABB\304\211@%\207" [macroexp-warn-and-return format "Obsolete name arg %S to constructor %S" identity nil] 8 (#$ . 8793)])
(byte-code "\300\301\302\303\304\305%\210\300\306\302\307\302\310%\210\300\311\302\312\302\313%\210\300\314\302\315\302\316%\207" [cl-generic-define-method initialize-instance nil ((this ede-linux-project) &rest _fields) curried #[257 "\300!\210\301\302\303\"\207" [cl--generic-isnot-nnm-p nil make-closure #[128 "\301\302\300#\303\304#\207" [V0 make-closure #[128 "\302\301\206 \300\"\207" [V0 V1 apply] 4 "\n\n(fn &rest ARGS)"] apply #[642 " \210\300\301\"?\205 \302\303\304#\207" [slot-boundp targets eieio-oset :targets nil] 7 "\n\n(fn CL--CNM THIS &rest FIELDS)"]] 6 "Make sure the targets slot is bound.\n\n(fn THIS &rest FIELDS)"]] 5 "\n\n(fn CL--NM)"] ede-project-root-directory ((this ede-linux-project) &optional _file) #[513 "\300\301\302\303\"!!\207" [ede-up-directory file-name-directory eieio-oref file] 7 "Return the root for THIS Linux project with file.\n\n(fn THIS &optional FILE)"] ede-project-root ((this ede-linux-project)) #[257 "\207" #1=[] 2 "Return my root.\n\n(fn THIS)"] ede-find-subproject-for-directory ((proj ede-linux-project) _dir) #[514 "\207" #1# 3 "Return PROJ, for handling all subdirs below DIR.\n\n(fn PROJ DIR)"]] 6)#@93 Find a target that is a CLASS and is in DIR in the list of TARGETS.

(fn CLASS DIR TARGETS)
(defalias 'ede-linux-find-matching-target #[771 "\300\211\203# \211@\301\"\203 \302\303\"\230\203 \211\262A\266\202\202 \210\207" [nil object-of-class-p eieio-oref path] 9 (#$ . 10213)])
(byte-code "\300\301\302\303\302\304%\210\300\305\302\306\302\307%\207" [cl-generic-define-method ede-find-target nil ((proj ede-linux-project) buffer) #[514 "\301\302!!\211\204 \303\202 \304\305\"\203 \306\202 \303\307\310\"\311#\211\204@ \312\313\314\315!!\316\317\320&\262\321\322#\210\207" [default-directory file-name-extension buffer-file-name ede-linux-target-misc string-match "c\\|h" ede-linux-target-c eieio-oref targets ede-linux-find-matching-target make-instance :name file-name-nondirectory directory-file-name :path :source nil object-add-to-list :targets] 15 "Find an EDE target in PROJ for BUFFER.\nIf one doesn't exist, create a new one for this directory.\n\n(fn PROJ BUFFER)"] ede-preprocessor-map ((this ede-linux-target-c)) #[257 "\300\301!\210\302!\303!\304\305\"\211\205 \306!\205 \307!\310\2033 \311!\203* \312!\210\313\314\315\"\"\262\207" [require semantic/db ede-target-parent ede-project-root ede-expand-filename "include/linux/version.h" file-exists-p semanticdb-file-table-object (("__KERNEL__" . "")) semanticdb-needs-refresh-p semanticdb-refresh-table append eieio-oref lexical-table] 11 "Get the pre-processor map for Linux C code.\nAll files need the macros from lisp.h!\n\n(fn THIS)"]] 6)#@93 Return a file name if NAME exists under ROOT with SUBDIR in between.

(fn NAME ROOT SUBDIR)
(defalias 'ede-linux-file-exists-name #[771 "\300\300\"\"\301!\205 \211\207" [expand-file-name file-exists-p] 8 (#$ . 11767)])
(byte-code "\300\301\302\303\304\305%\210\300\306\302\307\302\310%\210\300\311\302\312\302\313%\210\300\314\302\315\302\316%\210\317\320!\207" [cl-generic-define-method ede-expand-filename-impl nil ((proj ede-linux-project) name) curried #[257 "\300!\210\301\302\303\"\207" [cl--generic-isnot-nnm-p nil make-closure #[128 "\301\302\300#\303\304#\207" [V0 make-closure #[128 "\302\301\206 \300\"\207" [V0 V1 apply] 4 "\n\n(fn &rest ARGS)"] apply #[771 "\300!\301!\302!\303\304\"\204 \305\202Y \306\307\"\203I \303\310\"\305\203D \211\204D \311@#\206; \311@#\262A\262\202\" \262\202Y \306\312\"\203X \311\313#\202Y \305\211\206`  \207" [file-name-extension ede-project-root ede-project-root-directory eieio-oref build-directory nil string-match "h" include-path ede-linux-file-exists-name "txt" "Documentation"] 13 "\n\n(fn CL--CNM PROJ NAME)"]] 6 "Within this project PROJ, find the file NAME.\nKnows about how the Linux source tree is organized.\n\n(fn PROJ NAME)"]] 5 "\n\n(fn CL--NM)"] project-compile-project ((proj ede-linux-project) &optional command) #[513 "\302!\303\304!\210\204 	\204 \305\"\262\304!\207" [project-linux-compile-project-command compile-command ede-project-root-directory require compile format] 6 "Compile the entire current project.\nArgument COMMAND is the command to use when compiling.\n\n(fn PROJ &optional COMMAND)"] project-compile-target ((obj ede-linux-target-c) &optional command) #[513 "\303!\304!\305!\306\307\"\310\311!\210\204 	\204\" \312\n#\262\311!\207" [project-linux-compile-project-command compile-command project-linux-compile-target-command ede-target-parent ede-project-root ede-project-root-directory eieio-oref path require compile format] 10 "Compile the current target.\nArgument COMMAND is the command to use for compiling the target.\n\n(fn OBJ &optional COMMAND)"] project-rescan ((this ede-linux-project)) #[257 "\300!\301!\302\"\303#\304!\305\306#\210\305\307#\210\305\310#\210\305\311#\207" [ede-project-root-directory ede-linux--get-build-directory ede-linux--get-architecture ede-linux--include-path ede-linux-version eieio-oset version :build-directory :architecture :include-path] 10 "Rescan this Linux project from the sources.\n\n(fn THIS)"] provide ede/linux] 6)
