~ chicken-core (chicken-5) 298e78cddafd9c9f4f443588739ac898bb845e10
commit 298e78cddafd9c9f4f443588739ac898bb845e10 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Fri Aug 19 22:45:04 2016 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Sun Nov 13 11:32:21 2016 +0100 bugfixes in chicken-do and script-generation/execution diff --git a/chicken-do.c b/chicken-do.c index c2fe6b2a..401920f8 100644 --- a/chicken-do.c +++ b/chicken-do.c @@ -28,14 +28,14 @@ int main(int argc, char *argv[]) char **args = (char **)malloc(sizeof(char *) * argc); char *target; struct stat st, sd; - int quiet = 0; + int quiet = 0, opts = 1; if(argc < 3) usage(1); target = argv[ 1 ]; for(i = 2; i < argc; ++i) { - if(*argv[ i ] == '-') { + if(opts && *argv[ i ] == '-') { switch(argv[ i ][ 1 ]) { case 'q': quiet = 1; break; case 'h': usage(0); @@ -43,13 +43,16 @@ int main(int argc, char *argv[]) } } else if(!strcmp(argv[ i ], ":")) break; - else args[ a++ ] = argv[ i ]; + else { + args[ a++ ] = argv[ i ]; + opts = 0; + } } if(i == argc) usage(1); args[ a ] = NULL; - + if(stat(target, &st) == -1) { if(errno == ENOENT) goto build; diff --git a/egg-compile.scm b/egg-compile.scm index 4bd800b9..91201e1d 100644 --- a/egg-compile.scm +++ b/egg-compile.scm @@ -267,15 +267,13 @@ ;; collect information (for-each compile info) ;; sort topologically, by dependencies - (let ((order (reverse - (topological-sort - (map (lambda (dep) - (cons (car dep) - (filter-deps - (car dep) - (get-keyword dependencies: (cdr dep))))) - exts) - dep=?)))) + (let ((order (reverse (topological-sort + (map (lambda (dep) + (cons (car dep) + (filter-deps (car dep) (get-keyword dependencies: + (cdr dep))))) + (append prgs exts)) + dep=?)))) ;; generate + return build/install commands (values ;; build commands @@ -285,12 +283,14 @@ (let* ((data (assq t exts)) (link (get-keyword linkage: (cdr data)))) (append - (if (memq 'static link) - `((compile-static-extension ,@data)) - '()) (if (memq 'dynamic link) `((compile-dynamic-extension ,@data)) '()) + ;; static must come last, as *.o file will be overwritten + ;; and removed by dynamic build (meh) + (if (memq 'static link) + `((compile-static-extension ,@data)) + '()) (if (uses-compiled-import-library? mode) `((compile-import-library ,@data)) '()) @@ -300,12 +300,12 @@ (lambda (prg cmds) (let ((link (get-keyword linkage: (cdr prg)))) (append - (if (memq 'static link) - `((compile-static-program ,@prg)) - '()) (if (memq 'dynamic link) `((compile-dynamic-program ,@prg)) '()) + (if (memq 'static link) + `((compile-static-program ,@prg)) + '()) cmds))) '() prgs)) @@ -559,11 +559,11 @@ EOF )))) (define ((install-suffix mode name info) platform) - (let ((infostr (with-output-to-string (cut pp info))) - (dir (destination-repository mode)) - (qdir (quotearg (slashify dir platform))) - (dest (quotearg (slashify (make-pathname dir name +egg-info-extension+) - platform)))) + (let* ((infostr (with-output-to-string (cut pp info))) + (dir (destination-repository mode)) + (qdir (quotearg (slashify dir platform))) + (dest (quotearg (slashify (make-pathname dir name +egg-info-extension+) + platform)))) (case platform ((unix) (printf #<<EOF diff --git a/new-install.scm b/new-install.scm index 2038da4c..d7cfdcce 100644 --- a/new-install.scm +++ b/new-install.scm @@ -279,7 +279,7 @@ (lversion (get-egg-property info 'version))) (cond ((and (file-exists? timestamp) (> (- now (with-input-from-file timestamp read)) +one-hour+) - (not (check-server-version name version lversion))) + (not (check-remote-version name version lversion))) (fetch) (let ((info (load-egg-info eggfile))) ; new egg info (fetched) (values cached (get-egg-property info 'version)))) @@ -333,14 +333,25 @@ platform))) (system cmd))) -(define (check-server-version name version lversion) - (let loop ((srvs default-servers)) - (and (pair? srvs) - (let ((versions (try-list-versions name (car srvs)))) - (or (and versions - (any (cut version>=? <> version) versions)) - (loop (cdr srvs))))))) - +(define (check-remote-version name version lversion) + (let loop ((locs default-locations)) + (cond ((null? locs) + (let loop ((srvs default-servers)) + (and (pair? srvs) + (let ((versions (try-list-versions name (car srvs)))) + (or (and versions + (any (cut version>=? <> version) versions)) + (loop (cdr srvs))))))) + ((probe-dir (make-pathname (car locs) name)) + => (lambda (dir) + (let* ((eggfile (make-pathname dir name +egg-extension+)) + (info (load-egg-info eggfile)) + (rversion (get-egg-property info 'version))) + (or (and rversion + (version>=? rversion version)) + (loop (cdr locs)))))) + (else (loop (cdr locs)))))) + ;; retrieve eggs, recursively (if needed) @@ -607,7 +618,7 @@ (d "running script ~a~%" script) (if (eq? platform 'windows) (exec script) - (exec (string-append "sh " (make-pathname "." script)))) + (exec (string-append "sh " script))) (change-directory old)))) (define (write-info name info mode)Trap