Make skeleton definition in defproject more universal. Skeleton plugi…

…n refactoring

Merge request reports

Loading
+2 −4
Changes for share/hits/clean.hit: 2 added lines, 4 removed lines.
Original line number Diff line number Diff line
;; -*- mode: lisp -*-

(clean :depends-on ()
       (let ((target-dir
	      (or
	       (try (get-skeleton-target (find-skeleton (project-slot-value *jabs-current-project* 'skeleton))))
	       (try (get-skeleton-target (find-skeleton (car (project-slot-value *jabs-current-project* 'skeleton))))))))
       (let ((target-dir (try (get-skeleton-target (find-project-skeleton *jabs-current-project*)))))
         (when target-dir
           (os-rm target-dir :recursive t))))
+16 −9
Changes for share/hits/deploy-local.hit: 16 added lines, 9 removed lines.
Original line number Diff line number Diff line
;; -*- mode: lisp -*-
(deploy-local :depends-on ()
	      (let* ((current-skeleton (or (try (find-skeleton (car (project-slot-value *jabs-current-project* 'skeleton))))
					   (try (find-skeleton (project-slot-value *jabs-current-project* 'skeleton)))))
		     (target-dir (when current-skeleton (pathname-as-directory (parse-namestring (get-skeleton-target current-skeleton)))))
              (let* ((current-skeleton (find-project-skeleton *jabs-current-project*))
                     (target-dir (try
                                   (pathname-as-directory
                                    (parse-namestring
                                     (get-skeleton-target current-skeleton)))))
                     ;;
                     (src-dir (try (get-skeleton-src current-skeleton)))
                     (bin-dir (try (get-skeleton-bin current-skeleton)))
@@ -17,16 +19,21 @@
                     (install-file (try (get-skeleton-install-file current-skeleton)))
                     ;;
                     )
		(when (not target-dir)
		  (jlog:crit "Target directory for skeleton ``~a'', project ``~a'' is not set. Can not deploy locally"
                (if (not target-dir)
                    (jlog:wrn "Target directory for skeleton ``~a'', project ``~a'' is not set. Can not deploy locally. Skipping"
                              (get-skeleton-name current-skeleton)
			     (get-project-name *jabs-current-project*)))
                              (get-project-name *jabs-current-project*))
                    ;;
		(dolist (dir (list src-dir bin-dir doc-dir test-dir contrib-dir script-dir share-dir conf-dir))
		  (let ((dst-dir (when dir (pathname-as-directory (or (try (parse-namestring dir))
                    (progn
                      (dolist (dir (list src-dir bin-dir doc-dir test-dir contrib-dir
                                         script-dir share-dir conf-dir))
                        (let ((dst-dir (when dir (pathname-as-directory
                                                  (or (try (parse-namestring dir))
                                                      (try (parse-namestring (car dir))))))))
                          ;; (jlog:crit "AAAA ~a" dst-dir)
                          (when dst-dir
                            (jlog:info "Deploying ``~a'' to ``~a''" dst-dir target-dir)
                            (os-cp dst-dir (merge-pathnames dst-dir target-dir) :recursive t :force t))))
                      (dolist (file (list readme-file license-file install-file))
                        (when (and file (file-exists-p file))
		    (os-cp file (merge-pathnames file target-dir) :recursive t :force t)))))
                          (os-cp file (merge-pathnames file target-dir) :recursive t :force t)))))))
+1 −2
Changes for share/plugins/generic/make-binary/src/make-binary.lisp: 1 added line, 2 removed lines.
Original line number Diff line number Diff line
@@ -27,8 +27,7 @@
                            (pathname-as-directory
                             (parse-namestring
                              (get-skeleton-bin
                               (find-skeleton
                                (car (jabs:project-slot-value *jabs-current-project* 'jabs::skeleton))))))
                               (find-project-skeleton *jabs-current-project*))))
                            "")))
              ;;
              (when (not function)
+41 −4
Changes for src/core/jabs-depmanager/jabs-depmanager.lisp: 41 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -68,11 +68,13 @@ Created for ASDF compatability"
(add-hook *post-init-hook* #'map-global-projects-to-files)
(add-hook *post-init-hook* #'map-global-systems-to-files)

(defgeneric get-project-projects-map (project)
  )

(defmethod get-project-projects-map ((project project))
  "Get project names mapped to files for only for given project
w\o global map"
  (let* ((skel-name (or (car (try (slot-value project 'skeleton)))
                        *jabs-default-skeleton-name*))
  (let* ((skel-name (get-project-skeleton-name project))
         (skel (or
                (find-skeleton skel-name)
                (and
@@ -95,11 +97,13 @@ w\o global map"
            (cons lib (cons contrib opt)))
    hash))

(defgeneric get-project-systems-map (project)
  )

(defmethod get-project-systems-map ((project project))
  "Get asdf system names mapped to files for only for given project
w\o global map. For ASDF back compatability"
  (let* ((skel-name (or (car (try (slot-value project 'skeleton)))
                        *jabs-default-skeleton-name*))
  (let* ((skel-name (get-project-skeleton-name project))
         (skel (or
                (find-skeleton skel-name)
                (and
@@ -122,19 +126,31 @@ w\o global map. For ASDF back compatability"
            (cons lib (cons contrib opt)))
    hash))

(defgeneric get-project-depends-on (project)
  )

(defmethod get-project-depends-on ((project project))
  (try (slot-value project 'depends-on)))

(defgeneric dependency-project-reachable-locally-p (name project)
  )

(defmethod dependency-project-reachable-locally-p (name (project project))
  (check-type name keyword)
  (or (gethash name (get-project-projects-map project))
      (gethash name *jabs-global-projects-map*)))

(defgeneric dependency-system-reachable-locally-p (name project)
  )

(defmethod dependency-system-reachable-locally-p (name (project project))
  (check-type name keyword)
  (or (gethash name (get-project-systems-map project))
      (gethash name *jabs-global-systems-map*)))

(defgeneric find-project-dependency-force-locally (name project)
  )

(defmethod find-project-dependency-force-locally (name (project project))
  "Like ``find-project'', but tries to load local project or
system file, than retry to find project"
@@ -166,24 +182,36 @@ system file, than retry to find project"
                          found-project-file-asd))
              found-project)))))

(defgeneric dependency-project-reachable-remotely-p (name project)
  )

(defmethod dependency-project-reachable-remotely-p (name (project project))
  "Check if project can be reachable in all accessible plugins"
  (let ((plugins (filter-project-plugins-by-type project :repository)))
    (plugins-api-call-to-true
     :find-repository-project plugins name)))

(defgeneric find-project-dependencies-remotely (name project)
  )

(defmethod find-project-dependencies-remotely (name (project project))
  "Check if project can be reachable in all accessible plugins"
  (let ((plugins (filter-project-plugins-by-type project :repository)))
    (plugins-api-call-to-true
     :repository-project-dependencies plugins name)))

(defgeneric load-project-remote-dependency (name project)
  )

(defmethod load-project-remote-dependency (name (project project))
  "Check if project can be reachable in all accessible plugins"
  (let ((plugins (filter-project-plugins-by-type project :repository)))
    (plugins-api-call-to-true
     :load-repository-project plugins name)))

(defgeneric dependency-project-reachable-p (name project)
  )

(defmethod dependency-project-reachable-p (name (project project))
  (or (dependency-project-reachable-locally-p name project)
      (dependency-system-reachable-locally-p name project)
@@ -191,6 +219,9 @@ system file, than retry to find project"

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defgeneric make-project-depencencies-list (project)
  )

(defmethod make-project-depencencies-list ((project project))
  "Make full list of project dependencies (recursively)"
  (labels
@@ -212,11 +243,17 @@ system file, than retry to find project"
    (remove (get-project-name project)
            (reverse (remove-duplicates (reverse (make-deps-list (get-project-name project))))))))

(defgeneric load-project-local-dependency (name project)
  )

(defmethod load-project-local-dependency (name (project project))
  (jlog:dbg "Loading project ``~a'' as dependency for project ``~a''" name (get-project-name project))
  (and (find-project-dependency-force-locally name project)
       (asdf:operate 'asdf:load-op name)))

(defgeneric load-project-dependencies (project)
  )

(defmethod load-project-dependencies ((project project))
  (dolist (v (make-project-depencencies-list project))
    (or
+21 −0
Changes for src/core/jabs-operations/jabs-operations.lisp: 21 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -10,26 +10,47 @@

(in-package :jabs)

(defgeneric load-op (project &optional source-force)
  )

(defmethod load-op ((project project) &optional source-force)
  (if source-force
      (asdf:operate 'asdf:load-source-op (get-project-name project))
      (asdf:operate 'asdf:load-op (get-project-name project))))

(defgeneric load-dependencies-op (project)
  )

(defmethod load-dependencies-op ((project project))
  (load-project-dependencies project))

(defgeneric compile-op (project)
  )

(defmethod compile-op ((project project))
  (asdf:operate 'asdf:compile-op (get-project-name project)))

(defgeneric test-op (project)
  )

(defmethod test-op ((project project))
  (run-tests project))

(defgeneric lib-op (project)
  )

(defmethod lib-op ((project project))
  (jlog:err "lib-op Not implemented"))

(defgeneric link-op (project)
  )

(defmethod link-op ((project project))
  (jlog:err "link-op Not implemented"))

(defgeneric prepare-op (project)
  )

(defmethod prepare-op ((project project))
  (jlog:err "prepare-source-op Not implemented"))

Loading
Loading