Skip to content

Commit

Permalink
feat(macros): play MORE
Browse files Browse the repository at this point in the history
Signed-off-by: Kaiyang Wu <[email protected]>
  • Loading branch information
OriginCode committed Jan 28, 2025
1 parent b955afa commit c2408ed
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 12 deletions.
34 changes: 34 additions & 0 deletions aosc/private/defines.rkt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#lang racket/base

(require racket/contract
"macro.rkt")

; TODO: limit abtype and abhost to a set of valid values with contract
(define-vars #f string? pkgname pkgsec abhost abtype)
(define-vars #t string? pkgdes)
(define-vars #f (listof string?)
pkgdep builddep pkgrecom pkgbreak pkgsug pkgconfl pkgrep)
(define-vars #f (listof string?)
autotools-def cmake-def waf-def qtproj-def)
(define-vars #t (listof string?)
autotools-after cmake-after waf-after qtproj-after go-build-after
cargo-after)
(define-vars #f boolean?
ab-flags-o3 ab-flags-specs ab-flags-ssp ab-flags-ftf ab-flags-rro
nolto useclang ab-flags-pie ab-flags-pic abshadow abconfighack
abclean noparallel abstrip absplitdbg)
(define-vars #f boolean? reconf nopython2 nopython3)
(define-vars #f exact-nonnegative-integer?
abthreads)

(struct defines-type (opts) #:transparent)

(define/contract (defines opts)
(-> (listof pair?) defines-type?)
;; TODO: checks here
(defines-type opts))

(define/contract (defines->string defines)
(-> defines-type? string?)
;; TODO: ->string here, apply ->string to each opt
"")
44 changes: 33 additions & 11 deletions aosc/private/macro.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,49 @@
(require racket/contract
racket/format
racket/string
"arch.rkt"
"utils.rkt"
(for-syntax racket/base
racket/syntax))

(define-syntax (define-vars stx)
(syntax-case stx ()
[(_ array contract a)
(with-syntax
([a-val (format-id #'a "~a-val" #'a)]
[(_ array/quote contract a)
(with-syntax*
([a (if (equal? (syntax->datum #'contract) 'boolean?)
(format-id #'a "~a?" #'a)
#'a)]
[a-val (format-id #'a "~a-val" #'a)]
[a? (format-id #'a "~a?" #'a)]
[a->string (format-id #'a "~a->string" #'a)] )
#`(begin
(struct a (val) #:transparent)
(define/contract (a->string val)
(-> a? string?)
(define/contract (a->string val [arch 'any])
(->* (a?) (arch?) string?)
(format "~a=~a"
'a
(if (equal? 'contract string?)
(a-val val)
(if 'array
(format "(~a)" (string-join (map ~v (a-val val))))
(format "\"~a\"" (string-join (a-val val)))))))
(string-upcase
(format "~a~a"
(string-replace
(if (equal? 'contract 'boolean?)
(string-trim (symbol->string 'a) "?" #:left? #f)
(symbol->string 'a))
"-" "_")
(if (equal? arch 'any)
""
(string-append "__" (symbol->string arch)))))
(cond
[(equal? 'contract 'string?)
(if 'array/quote
(~v (a-val val))
(a-val val))]
[(equal? 'contract 'boolean?)
(boolean->exact-nonnegative-integer (a-val val))]
[(equal? 'contract 'exact-nonnegative-integer?)
(a-val val)]
[(equal? 'contract '(listof string?))
(if 'array/quote
(format "(~a)" (string-join (map ~v (a-val val))))
(format "\"~a\"" (string-join (a-val val))))])))
))]
[(_ array contract a b ...)
#'(begin
Expand Down
2 changes: 1 addition & 1 deletion aosc/private/utils.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
(->* (string? any/c) (boolean? arch?) string?)
(string-append entry-name
(if (equal? arch 'any)
""
""
(string-append "__" (string-upcase (symbol->string arch))))
(if quote? "=\"" "=")
(~a value)
Expand Down

0 comments on commit c2408ed

Please sign in to comment.