Changeset 13235 in project
 Timestamp:
 02/10/09 07:13:04 (12 years ago)
 Location:
 release/3/nemo/trunk
 Files:

 5 edited
Legend:
 Unmodified
 Added
 Removed

release/3/nemo/trunk/exprparser.scm
r13040 r13235 190 190 191 191 (define (nemo:parsesymexpr lst #!optional loc) 192 (print "parseexpr: lst = " lst) 192 193 (let ((ret (cond ((number? lst) lst) 193 194 ((symbol? lst) lst) 
release/3/nemo/trunk/nemocore.scm
r13052 r13235 946 946 (fold 947 947 (lambda (x ax) 948 (matchlet (((qs scopesubst) ax)) 948 949 (match x 949 950 ((? symbol?) … … 963 964 (((nemocore 'addexternal!) sys) x `(input ,id1 ,qid ,n1)) 964 965 (list (cons qid qs) (updatesubst x1 qid scopesubst)))) 965 )) 966 ))) 966 967 (list qs scopesubst) lst)) 967 968 (else (nemo:error 'evalnemosystemdecls … … 986 987 (((or 'reaction 'REACTION) ((and id (? symbol?)) . alst) ) 987 988 (let* ((loc `(reaction ,id)) 989 (alst (filter identity alst)) 988 990 (initial (lookupdef 'initial alst)) 989 991 (conserveeq (alistref 'conserve alst)) … … 1044 1046 (let* ((qid (computeqid id scope scopesubst)) 1045 1047 (qexpr (substexpr (parseexpr expr `(rate ,id)) scopesubst)) 1048 (rest (filter identity rest)) 1046 1049 (initial (lookupdef 'initial rest))) 1047 1050 (envextend! qid '(rate) (and initial (evalconst initial)) `(rhs ,qexpr)) 
release/3/nemo/trunk/nemoutils.scm
r13012 r13235 43 43 44 44 (define (lookupdef k lst . rest) 45 45 46 (letoptionals rest ((default #f)) 46 47 (let ((kv (assoc k lst))) 
release/3/nemo/trunk/nemo.scm
r13180 r13235 82 82 (s+ "write NMODL output to file (default: <modelname>.mod)")) 83 83 (args:makeoption (nmodlkinetic) (optional: "STATES") 84 (s+ "use NMODL kinetic equations for the given state complexes "85 "(or for all state complexes)"))84 (s+ "use NMODL kinetic equations for the given reactions " 85 "(or for all reactions)")) 86 86 (args:makeoption (nmodlmethod) (required: "METHOD") 87 87 (s+ "specify NMODL integration method") … … 143 143 ((? number?) node) 144 144 ((? string?) (sxml:number node)) 145 (('ncml:id id) ( string>symbol (>string id)))145 (('ncml:id id) ($ id)) 146 146 (('ncml:apply ('@ ('id id)) . args) (cons ($ id) (map ncmlexpr>expr args))) 147 147 (('ncml:let ('ncml:bnds . bnds) ('ncml:expr body)) … … 223 223 (ncml:transition (@ (src ,dst) (dst ,src)) (ncml:rate ,(expr>ncmlexpr rate2))))) 224 224 (else (error 'transition>ncmltransition "invalid transition " x)))) 225 226 (define (lineq>ncmllineq parseexpr) 227 (lambda (x) 228 (match x 229 (((and i (? integer?)) '= rhs) 230 `(ncml:lineq (@ (val ,(>string i))) 231 (ncml:expr ,(expr>ncmlexpr (parseexpr rhs))))) 232 (else (error 'lineq>ncmllineq "invalid linear equation " x))))) 225 233 226 234 (define builtinfns … … 263 271 (else (string>symbol (stringappend "ncml:" (>string op)))))) 264 272 265 266 (define (makecomponent>ncml dis model) 273 (define (declaration>ncml parseexpr) 274 (lambda (x) 275 (match x 276 (((or 'input 'INPUT) . lst) 277 (map (lambda (x) 278 (match x 279 ((? symbol?) 280 `(ncml:input (@ id ,(>string x)))) 281 ((id1 (or 'as 'AS) x1) 282 `(ncml:input (@ (id ,(>string id1)) (as ,(>string x1))))) 283 ((id1 (or 'from 'FROM) n1) 284 `(ncml:input (@ (id ,(>string id1)) (from ,(>string n1))))) 285 ((id1 (or 'as 'AS) x1 (or 'from 'FROM) n1) 286 `(ncml:input (@ (id ,(>string id1)) 287 (as ,(>string x1)) (from ,(>string n1))))))) 288 lst)) 289 290 291 (((or 'output 'OUTPUT) . (and lst (? (lambda (x) (every symbol? x))))) 292 (map (lambda (x) `(ncml:output (@ (id ,(>string x))))) lst)) 293 294 295 (((or 'const 'CONST) (and id (? symbol?)) '= expr) 296 `(ncml:const (@ (id ,(>string id))) (ncml:expr ,(expr>ncmlexpr (parseexpr expr))))) 297 298 299 (((or 'reaction 'REACTION) ((and id (? symbol?)) . alst) ) 300 (let ((trs (lookupdef 'transitions alst)) 301 (initial (lookupdef 'initial alst)) 302 (open (lookupdef 'open alst)) 303 (cons (lookupdef 'conserve alst)) 304 (p (lookupdef 'power alst))) 305 (let ((sxmltrs (appendmap transition>ncmltransition trs))) 306 `(ncml:reaction (@ (id ,(>string id))) 307 (ncml:open ,open) 308 ,(and initial `(ncml:initial ,(expr>ncmlexpr (parseexpr initial))) ) 309 ,(and cons `(ncml:conserve ,((lineq>ncmllineq parseexpr) cons)) ) 310 (ncml:transitions ,@sxmltrs) 311 (ncml:power ,(expr>ncmlexpr (parseexpr p))))))) 312 313 314 (((or 'd 'D) ((and id (? symbol?))) '= expr . rest) 315 (let ((initial (lookupdef 'initial rest))) 316 `(ncml:rate (@ (id ,(>string id)) ) 317 ,(and initial `(ncml:initial ,(expr>ncmlexpr (parseexpr initial)))) 318 (ncml:expr ,(expr>ncmlexpr (parseexpr expr)))))) 319 320 321 (((and id (? symbol?)) '= expr) 322 `(ncml:asgn (@ (id ,id)) (ncml:expr ,(expr>ncmlexpr (parseexpr expr))))) 323 324 (((or 'defun 'DEFUN) (and id (? symbol?)) 325 (and idlist (? (lambda (x) (every symbol? x)))) expr) 326 `(ncml:defun (@ (id ,x)) 327 ,@(map (lambda (v) `(ncml:arg ,(>string v))) idlist) 328 (ncml:body ,(expr>ncmlexpr (parseexpr expr))))) 329 330 (((or 'component 'COMPONENT) ((or 'type 'TYPE) typ) ((or 'name 'NAME) name) . lst) 331 `(ncml:component (@ (name ,(>string name)) (type ,(>string typ))) 332 ,@(map (declaration>ncml parseexpr) lst))) 333 334 (((or 'component 'COMPONENT) ((or 'type 'TYPE) typ) . lst) 335 `(ncml:component (@ (type ,(>string typ))) 336 ,@(map (declaration>ncml parseexpr) lst))) 337 338 (((or 'component 'COMPONENT) ((or 'name 'NAME) name) '= 339 (and functorname (? symbol?)) (and args (? list?))) 340 `(ncml:component (@ (name ,(>string name)) 341 (functorname ,(>string functorname))) 342 ,@(map (declaration>ncml parseexpr) lst))) 343 ))) 344 345 (define (makecomponent>ncml dis model parseexpr) 267 346 (lambda (x) 268 347 (let ((en (environmentref model x))) 269 (cond ((procedure? en) 270 (let ((fd (proceduredata en))) 271 `(ncml:defun (@ (id ,x)) 272 ,@(map (lambda (v) `(ncml:arg ,v)) (lookupdef 'vars fd)) 273 (ncml:body ,(expr>ncmlexpr (lookupdef 'body fd)))))) 274 (else 275 (match en 276 277 (($ nemo:quantity 'EXTERNAL localname name namespace) 278 (if namespace 279 `(ncml:input (@ (id ,name)) (as ,localname) (from ,namespace)) 280 `(ncml:input (@ (id ,name)) (as ,localname)))) 281 (($ nemo:quantity 'CONST name value) 282 `(ncml:const (@ (id ,name)) (ncml:expr ,value))) 283 284 (($ nemo:quantity 'ASGN name value rhs) 285 (let ((expr (expr>ncmlexpr rhs))) 286 `(ncml:asgn (@ (id ,name)) (ncml:expr ,expr)))) 287 288 (($ nemo:quantity 'REACTION name initial open trs p) 289 (let ((sxmltrs (appendmap transition>ncmltransition trs))) 290 `(ncml:state_complex (@ (id ,name)) 291 (ncml:open ,open) (ncml:initial ,(expr>ncmlexpr initial)) 292 (ncml:transitions ,@sxmltrs) 293 (ncml:power ,(expr>ncmlexpr p))))) 294 295 (($ nemo:quantity 'COMPONENT name type lst) 296 (let ((component>ncml (makecomponent>ncml dis model)) 297 (componentexports ((dis 'componentexports) model x))) 298 (case type 299 ((toplevel) `(,@(map component>ncml lst) 300 ,@(map (lambda (x) `(ncml:output (@ (id ,x)))) componentexports))) 301 (else `(ncml:component (@ (name ,name) (type ,type)) 302 ,@(filtermap component>ncml lst) 303 ,@(map (lambda (x) `(ncml:output (@ (id ,x)))) componentexports) 304 ))))) 305 306 (else #f))))))) 348 (cond ((procedure? en) 349 (let ((fd (proceduredata en))) 350 `(ncml:defun (@ (id ,x)) 351 ,@(map (lambda (v) `(ncml:arg ,v)) (lookupdef 'vars fd)) 352 (ncml:body ,(expr>ncmlexpr (lookupdef 'body fd)))))) 353 (else 354 (match en 355 356 (($ nemo:quantity 'EXTERNAL localname name namespace) 357 (if namespace 358 `(ncml:input (@ (id ,name)) (as ,localname) (from ,namespace)) 359 `(ncml:input (@ (id ,name)) (as ,localname)))) 360 361 (($ nemo:quantity 'CONST name value) 362 `(ncml:const (@ (id ,name)) (ncml:expr ,value))) 363 364 (($ nemo:quantity 'ASGN name value rhs) 365 (let ((expr (expr>ncmlexpr rhs))) 366 `(ncml:asgn (@ (id ,name)) (ncml:expr ,expr)))) 367 368 (($ nemo:quantity 'RATE name initial rhs) 369 (let ((expr (expr>ncmlexpr rhs)) 370 (initial (and initial (expr>ncmlexpr initial)))) 371 `(ncml:rate (@ (id ,name)) 372 ,(and initial `(ncml:initial ,initial)) 373 (ncml:expr ,expr)))) 374 375 (($ nemo:quantity 'REACTION name initial open trs cons p) 376 (let ((sxmltrs (appendmap transition>ncmltransition trs))) 377 `(ncml:reaction (@ (id ,name)) 378 (ncml:open ,open) 379 ,(and initial `(ncml:initial ,(expr>ncmlexpr initial))) 380 ,(and cons `(ncml:conserve ,(map (lineq>ncmllineq identity) cons)) ) 381 (ncml:transitions ,@sxmltrs) 382 (ncml:power ,(expr>ncmlexpr p))))) 383 384 (($ nemo:quantity 'COMPONENT name type lst) 385 (let ((component>ncml (makecomponent>ncml dis model parseexpr)) 386 (componentexports ((dis 'componentexports) model x))) 387 (case type 388 ((toplevel) `(,@(map component>ncml lst) 389 ,@(map (lambda (x) `(ncml:output (@ (id ,x)))) componentexports))) 390 (else `(ncml:component (@ (name ,name) (type ,type)) 391 ,@(filtermap component>ncml lst) 392 ,@(map (lambda (x) `(ncml:output (@ (id ,x)))) componentexports) 393 ))))) 394 395 (($ nemo:quantity 'FUNCTOR name args type lst) 396 (let ((component>ncml (makecomponent>ncml dis model parseexpr))) 397 `(ncml:functor (@ (name ,name) (type ,type) 398 (parameters ,(stringintersperse (map >string args) ","))) 399 ,@(filtermap (declaration>ncml parseexpr) lst) 400 ))) 401 402 (else #f))))))) 307 403 308 404 309 (define (model>ncml options model )405 (define (model>ncml options model parseexpr) 310 406 (matchlet ((($ nemo:quantity 'DISPATCH dis) (environmentref model (nemointern 'dispatch)))) 311 407 (let ((sysname ((dis 'sysname) model)) 312 (component>ncml (makecomponent>ncml dis model )))408 (component>ncml (makecomponent>ncml dis model parseexpr))) 313 409 `(ncml:model (@ (name ,sysname)) ,@(component>ncml (nemointern 'toplevel)))))) 314 410 … … 343 439 344 440 (define (ensurexmlns doc) 345 (sxml:addattr doc '(xmlns ncml))) 441 (let ((doc1 (sxml:addattr doc '(xmlns:ncml "ncml")))) 442 (sxml:addattr doc1 '(xmlns ncml)))) 346 443 347 444 … … 364 461 365 462 366 (define (ncml>decl s ncml:model)463 (define (ncml>declarations ncml:model) 367 464 (letrec 368 465 ((inputtemplate … … 397 494 `(const ,($ id) = ,expr))))) 398 495 399 ( statecomplextransitiontemplate496 (reactiontransitiontemplate 400 497 (sxml:match 'ncml:transition 401 498 (lambda (node bindings root env) … … 404 501 (rate ((lambda (x) 405 502 (if (not x) 406 (error ' statecomplextransitiontemplate407 " state complextransition requires rate element")503 (error 'reactiontransitiontemplate 504 "reaction transition requires rate element") 408 505 (ncmlexpr>expr (second x)))) 409 506 (sxml:kidn* 'ncml:rate node)))) 410 (if (not src) (error ' statecomplextransitiontemplate411 " state complextransition requires src attribute"))412 (if (not dst) (error ' statecomplextransitiontemplate413 " state complextransition requires dst attribute"))507 (if (not src) (error 'reactiontransitiontemplate 508 "reaction transition requires src attribute")) 509 (if (not dst) (error 'reactiontransitiontemplate 510 "reaction transition requires dst attribute")) 414 511 415 512 `(> ,($ src) ,($ dst) ,rate))))) … … 427 524 `(,($ id) = ,expr))))) 428 525 526 (ratetemplate 527 (sxml:match 'ncml:rate 528 (lambda (node bindings root env) 529 (let ((id (sxml:attr node 'id)) 530 (rhs ((lambda (x) 531 (if (not x) 532 (error 'ratetemplate "rate equation requires expr element") 533 (ncmlexpr>expr (second x)))) 534 (sxml:kidn* 'ncml:expr node))) 535 (initial ((lambda (x) (and x (ncmlexpr>expr (second x)))) 536 (sxml:kidn* 'ncml:initial node)))) 537 (if (not id) (error 'ratetemplate "rate equation requires id attribute")) 538 `(d (,($ id)) = ,rhs ,(and initial `(initial ,initial) )))))) 539 (lineqtemplate 540 (sxml:match 'ncml:lineq 541 (lambda (node bindings root env) 542 (let ((val (string>number (>string (sxml:attr node 'val)))) 543 (rhs ((lambda (x) 544 (if (not x) 545 (error 'lineqtemplate 546 "lineq definition requires expr element") 547 (ncmlexpr>expr (second x)))) 548 (sxml:kidn* 'ncml:expr node)))) 549 `(,val = ,rhs))))) 429 550 430 ( statecomplextemplate431 (sxml:match 'ncml: state_complex551 (reactiontemplate 552 (sxml:match 'ncml:reaction 432 553 (lambda (node bindings root env) 433 (let ((id (string>symbol (>string (sxml:attr node 'id)))) 434 (initial ((lambda (x) 554 (let* ((id ($ (sxml:attr node 'id))) 555 (initial ((lambda (x) (and x (ncmlexpr>expr (second x)))) 556 (sxml:kidn* 'ncml:initial node))) 557 558 (open ((lambda (x) 435 559 (if (not x) 436 (error ' statecomplextemplate437 " state complex declaration requires initialelement")438 ( ncmlexpr>expr(second x))))439 (sxml:kidn* 'ncml: initialnode)))440 (open ((lambda (x) 441 (if (not x)442 ( error 'statecomplextemplate443 "state complex declaration requires open element")444 ($ (second x))))445 (sxml:kidn* 'ncml:open node))) 560 (error 'reactiontemplate 561 "reaction declaration requires open element") 562 ($ (second x)))) 563 (sxml:kidn* 'ncml:open node))) 564 565 (conserve ((lambda (x) 566 (and x (let ((tmpl (sxml:makenullss lineqtemplate))) 567 (stx:applytemplates (second x) tmpl root env)))) 568 (sxml:kidn* 'ncml:conserve node))) 569 446 570 (power ((lambda (x) 447 571 (if (not x) 448 (error ' statecomplextemplate449 " state complexdeclaration requires open element")572 (error 'reactiontemplate 573 "reaction declaration requires open element") 450 574 (sxml:number (second x)))) 451 575 (sxml:kidn* 'ncml:power node))) 576 452 577 (transitions ((lambda (x) 453 578 (if (not x) 454 (error ' statecomplextemplate455 " state complexdeclaration requires transitions element")456 (let ((tmpl (sxml:makenullss statecomplextransitiontemplate)))579 (error 'reactiontemplate 580 "reaction declaration requires transitions element") 581 (let ((tmpl (sxml:makenullss reactiontransitiontemplate))) 457 582 (stx:applytemplates (cdr x) tmpl root env)))) 458 (sxml:kidn* 'ncml:transitions node)))) 583 (sxml:kidn* 'ncml:transitions node))) 584 585 ) 459 586 460 (if (not id) (error 'statecomplextemplate "state complex transition requires id attribute")) 461 `(statecomplex (,id (initial ,initial) (open ,open) (power ,power) 462 (transitions ,@transitions))))))) 587 (if (not id) (error 'reactiontemplate "reaction transition requires id attribute")) 588 `(reaction (,id (initial ,initial) (open ,open) (power ,power) 589 ,(and conserve `(conserve ,conserve) ) 590 (transitions ,@transitions))))))) 463 591 464 592 … … 486 614 (lambda (node bindings root env) 487 615 (let ((name (sxml:attr node 'name)) 616 (functorname (sxml:attr node 'functorname)) 488 617 (type (sxml:attr node 'type))) 489 618 (if (not type) (error 'componenttemplate "component definition requires type attribute")) 490 619 (if name 491 `(component (type ,($ type)) (name ,($ name)) ,@(ncml>decls (sxml:kids node))) 492 `(component (type ,($ type)) ,@(ncml>decls (sxml:kids node)))))))) 620 `(component (type ,($ type)) (name ,($ name)) ,@(ncml>declarations (sxml:kids node))) 621 (if functorname 622 `(component (name ,($ name)) = ,functorname ,(ncml>declarations (sxml:kids node))) 623 `(component (type ,($ type)) ,@(ncml>declarations (sxml:kids node))))))))) 624 625 (functortemplate 626 (sxml:match 'ncml:functor 627 (lambda (node bindings root env) 628 (let ((parameters (sxml:attr node 'parameters)) 629 (name (sxml:attr node 'name)) 630 (type (sxml:attr node 'type))) 631 (if (not type) (error 'functortemplate "functor definition requires type attribute")) 632 (if (not name) (error 'functortemplate "functor definition requires name attribute")) 633 (if (not parameters) 634 (error 'functortemplate "functor definition requires parameters attribute")) 635 `(functor (type ,($ type)) (name ,($ name)) 636 (args ,(map string>symbol (stringsplit parameters ","))) 637 ,@(ncml>declarations (sxml:kids node))))))) 493 638 494 639 (hhtemplate … … 553 698 ) 554 699 555 (stx:applytemplates ncml:model (sxml:makenullss inputtemplate 556 outputtemplate 557 consttemplate 558 asgntemplate 559 statecomplextemplate 560 defuntemplate 561 componenttemplate 562 hhtemplate 563 decayingpooltemplate) 564 ncml:model (list)))) 700 (stx:applytemplates ncml:model 701 (sxml:makenullss inputtemplate 702 outputtemplate 703 consttemplate 704 asgntemplate 705 ratetemplate 706 reactiontemplate 707 defuntemplate 708 componenttemplate 709 functortemplate 710 hhtemplate 711 decayingpooltemplate) 712 ncml:model (list)))) 565 713 566 714 … … 569 717 (let* ((ncml:model ((lambda (x) 570 718 (if (null? x) (error 'ncml>model "ncml:model element not found in input document") (car x))) 571 (ncml:sxpath '( ncml:model) `(*TOP* . ,doc))))719 (ncml:sxpath '(// ncml:model) `(*TOP* . ,doc)))) 572 720 (modelname (sxml:attr ncml:model 'name)) 573 (modeldecls (ncml>decl s (sxml:kids ncml:model))))574 (let* ((model+nemo (nemoconstructor modelname modeldecls identity))575 (model (first model+nemo))576 (nemo (second model+nemo)))721 (modeldecls (ncml>declarations (sxml:kids ncml:model)))) 722 (let* ((model+nemo (nemoconstructor modelname modeldecls (lambda (x . rest) (identity x)))) 723 (model (first model+nemo)) 724 (nemo (second model+nemo))) 577 725 (let ((model1 (nemo:hhtransformer model))) 578 726 (if (assoc 'depgraph options) (print "dependency graph: " ((nemo 'depgraph*) model1))) … … 615 763 (else (error 'nemo "unknown input format" informat)))) 616 764 765 (parseexpr (case informat 766 ((sxml xml) identity) 767 ((sexp sexp) identity) 768 ((nemo) nemo:parsesymexpr) 769 (else (error 'nemo "unknown input format" informat)))) 770 617 771 (model (case informat 618 772 ((sxml xml) (ncml>model options doc)) 619 ((sexp sexp) (sexp>model options doc identity))620 ((nemo) (sexp>model options doc nemo:parsesymexpr))773 ((sexp sexp) (sexp>model options doc parseexpr)) 774 ((nemo) (sexp>model options doc parseexpr)) 621 775 (else (error 'nemo "unknown input format" informat)))) 776 622 777 (sxmlfname ((lambda (x) (and x (if (and (cdr x) (string? (cdr x))) 623 778 (s+ (pathnamestripextension (cdr x)) ".sxml") … … 653 808 (else (error "unknown matlabmethod " method))))) 654 809 ) 655 (if sxmlfname (withoutputtofile sxmlfname (lambda () (prettyprint (model>ncml options model))))) 656 (if xmlfname (let* ((doc (model>ncml options model)) 810 (if sxmlfname (withoutputtofile sxmlfname 811 (lambda () (prettyprint (model>ncml options model))))) 812 (if xmlfname (let* ((doc (model>ncml options model parseexpr)) 657 813 (doc1 (ensurexmlns 658 814 (cond ((eq? (car doc) '*TOP*) (assoc 'ncml:model (cdr doc))) 659 815 (else doc))))) 660 (withoutputtofile xmlfname (lambda () (printfragments (generateXML `(begin ,doc1))))))) 816 (withoutputtofile xmlfname 817 (lambda () (printfragments (generateXML `(begin ,doc1))))))) 661 818 (if modfname 662 819 (withoutputtofile 
release/3/nemo/trunk/nemo.setup
r13180 r13235 8 8 (run (csi s expr.grm)) 9 9 10 (compile Od2 s o ,(dynldname "nemocore")10 (compile d2 s o ,(dynldname "nemocore") 11 11 ,@(if hasexports? '(checkimports emitexports nemocore.exports) '()) 12 12 nemocore.scm) … … 27 27 ,@(if hasexports? `((exports "nemocore.exports")) (list)) )) 28 28 29 (compile  O d2 s o ,(dynldname "nemoutils")29 (compile d2 s o ,(dynldname "nemoutils") 30 30 ,@(if hasexports? '(checkimports emitexports nemoutils.exports) '()) 31 31 nemoutils.scm) … … 48 48 49 49 50 (compile  O d2 s o ,(dynldname "nemoionch")50 (compile d2 s o ,(dynldname "nemoionch") 51 51 ,@(if hasexports? '(checkimports emitexports nemoionch.exports) '()) 52 52 nemoionch.scm) … … 76 76 77 77 78 (compile  O d2 s extension o ,(dynldname "nemonmodl")78 (compile d2 s extension o ,(dynldname "nemonmodl") 79 79 ,@(if hasexports? '(checkimports emitexports nemonmodl.exports) '()) 80 80 nemonmodl.scm) … … 94 94 95 95 (if (fileexists? "nemomatlab.scm") 96 (compile  O d2 s extension o ,(dynldname "nemomatlab")96 (compile d2 s extension o ,(dynldname "nemomatlab") 97 97 ,@(if hasexports? '(checkimports emitexports nemomatlab.exports) '()) 98 98 nemomatlab.scm)) … … 113 113 114 114 115 (compile  O d2 s o ,(dynldname "nemohh")115 (compile d2 s o ,(dynldname "nemohh") 116 116 ,@(if hasexports? '(checkimports emitexports nemohh.exports) '()) 117 117 extensions/nemohh.scm) … … 134 134 (run (csi qbs nemoeggdoc.scm > nemo.html)) 135 135 136 (compile  O d2 nemo.scm lchicken)136 (compile d2 nemo.scm lchicken) 137 137 138 138 (installprogram
Note: See TracChangeset
for help on using the changeset viewer.