Moritz Heidkamp avatar Moritz Heidkamp committed b9dcfa6

Nicer define-targets API

Comments (0)

Files changed (2)

   (ir-macro-transformer
    (lambda (x i r)
      (let ((first (cadr x)))
-       (cond ((symbol? first)
-              `(define ,first (define-targets . ,(cddr x))))
-             ((string? first)
-              `(define-targets (list (list . ,(cdr x)))))
-             (else
-              `(let ((targets ,first))
-                 (for-each (lambda (t)
-                             (register-target! (car t) (cadr t) (caddr t)))
-                           targets)
-                 (map car targets))))))))
+       (if (symbol? first)
+           `(define ,first (define-targets . ,(cddr x)))
+           `(let ((targets (append . ,(map (lambda (x) `(receive ,x)) (cdr x)))))
+              (for-each (lambda (t)
+                          (register-target! (car t) (cadr t) (caddr t)))
+                        targets)
+              (map car targets)))))))
+
+(define-syntax define-target
+  (syntax-rules ()
+    ((_ name dependencies)
+     (define-target name dependencies (lambda _ (list))))
+    ((_ name dependencies realization)
+     (define-targets (list (->string 'name) dependencies realization)))))
 
 (define (target-ref target)
   (alist-ref target (targets) equal?))
 (targets
  register-target!
  define-targets
+ define-target
  source-directory
  output-directory
  realize-targets)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.