fix problems with distributing unix executables Merge to v5.0

This commit is contained in:
Matthew Flatt 2010-05-28 10:32:05 -06:00 committed by Matthew Flatt
parent 7f2d57e827
commit eec92017c4
2 changed files with 41 additions and 33 deletions

View File

@ -23,7 +23,7 @@
(case (system-type)
[(windows) #f]
[(unix) "bin"]
[(macosx) (if (memq type '(mredcgc mred3m))
[(macosx) (if (memq type '(gracketcgc gracket3m))
#f
"bin")]))
orig-binaries
@ -38,7 +38,7 @@
(make-directory dest-dir))
(let-values ([(base name dir?) (split-path b)])
(let ([dest (build-path dest-dir name)])
(if (and (memq type '(mredcgc mred3m))
(if (and (memq type '(gracketcgc gracket3m))
(eq? 'macosx (system-type)))
(begin
(copy-app b dest)
@ -51,7 +51,7 @@
types)]
[single-mac-app? (and (eq? 'macosx (system-type))
(= 1 (length types))
(memq (car types) '(mredcgc mred3m)))])
(memq (car types) '(gracketcgc gracket3m)))])
;; Create directories for libs, collects, and extensions:
(let-values ([(lib-dir collects-dir relative-collects-dir exts-dir relative-exts-dir)
(if single-mac-app?
@ -110,7 +110,7 @@
[sub-dir
(build-path 'up relative-dir)]
[(and (eq? 'macosx (system-type))
(memq type '(mredcgc mred3m))
(memq type '(gracketcgc gracket3m))
(not single-mac-app?))
(build-path 'up 'up 'up relative-dir)]
[else
@ -152,33 +152,33 @@
(list
"iconv.dll"
"UnicoWS.dll"))
(when (or (memq 'mzschemecgc types)
(memq 'mredcgc types))
(when (or (memq 'racketcgc types)
(memq 'gracketcgc types))
(map copy-dll
(list
(versionize "libracket~a.dll")
(versionize "libmzgc~a.dll"))))
(when (or (memq 'mzscheme3m types)
(memq 'mred3m types))
(when (or (memq 'racket3m types)
(memq 'gracket3m types))
(map copy-dll
(list
(versionize "libracket3m~a.dll"))))
(when (memq 'mredcgc types)
(when (memq 'gracketcgc types)
(map copy-dll
(list
(versionize "libgracket~a.dll"))))
(when (memq 'mred3m types)
(when (memq 'gracket3m types)
(map copy-dll
(list
(versionize "libgracket3m~a.dll")))))]
[(macosx)
(when (memq 'mzschemecgc types)
(when (memq 'racketcgc types)
(copy-framework "Racket" #f lib-dir))
(when (memq 'mzscheme3m types)
(when (memq 'racket3m types)
(copy-framework "Racket" #t lib-dir))
(when (memq 'mredcgc types)
(when (memq 'gracketcgc types)
(copy-framework "GRacket" #f lib-dir))
(when (memq 'mred3m types)
(when (memq 'gracket3m types)
(copy-framework "GRacket" #t lib-dir))]
[(unix)
(let ([lib-plt-dir (build-path lib-dir "plt")])
@ -190,25 +190,25 @@
(format "~a~a" name (variant-suffix variant #f)))
(build-path lib-plt-dir
(format "~a~a-~a" name variant (version)))))])
(when (memq 'mzschemecgc types)
(when (memq 'racketcgc types)
(copy-bin "racket" 'cgc))
(when (memq 'mzscheme3m types)
(when (memq 'racket3m types)
(copy-bin "racket" '3m))
(when (memq 'mredcgc types)
(when (memq 'gracketcgc types)
(copy-bin "gracket" 'cgc))
(when (memq 'mred3m types)
(when (memq 'gracket3m types)
(copy-bin "gracket" '3m)))
(when (shared-libraries?)
(when (or (memq 'mzschemecgc types)
(memq 'mredcgc types))
(when (or (memq 'racketcgc types)
(memq 'gracketcgc types))
(copy-shared-lib "racket" lib-dir)
(copy-shared-lib "mzgc" lib-dir))
(when (or (memq 'mzscheme3m types)
(memq 'mred3m types))
(when (or (memq 'racket3m types)
(memq 'gracket3m types))
(copy-shared-lib "racket3m" lib-dir))
(when (memq 'mredcgc types)
(when (memq 'gracketcgc types)
(copy-shared-lib "gracket" lib-dir))
(when (memq 'mred3m types)
(when (memq 'gracket3m types)
(copy-shared-lib "gracket3m" lib-dir))))]))
(define (search-dll dll-dir dll)
@ -293,18 +293,18 @@
binaries)]
[(macosx)
(if (and (= 1 (length types))
(memq (car types) '(mredcgc mred3m)))
(memq (car types) '(gracketcgc gracket3m)))
;; Special case for single GRacket app:
(update-framework-path "@executable_path/../Frameworks/"
(car binaries)
#t)
;; General case:
(for-each (lambda (b type)
(update-framework-path (if (memq type '(mzschemecgc mzscheme3m))
(update-framework-path (if (memq type '(racketcgc racket3m))
"@executable_path/../lib/"
"@executable_path/../../../lib/" )
b
(memq type '(mredcgc mred3m))))
(memq type '(gracketcgc gracket3m))))
binaries types))]
[(unix)
(for-each (lambda (b type)
@ -568,11 +568,11 @@
(let ([3m? (equal? (list-ref m 4) #"3")])
(if (equal? (caddr m) #"r")
(if 3m?
'mred3m
'mredcgc)
'gracket3m
'gracketcgc)
(if 3m?
'mzscheme3m
'mzschemecgc))))
'racket3m
'racketcgc))))
(error 'assemble-distribution
"file is not a PLT executable: ~e"
b))))))

View File

@ -229,7 +229,7 @@ int main(int argc, char **argv)
{
char *me = argv[0], *data, **new_argv;
char *exe_path, *lib_path, *dll_path;
int start, prog_end, end, count, fd, v, x11;
int start, prog_end, end, count, fd, v, en, x11;
int argpos, inpos, collcount = 1;
if (config[7] == '[') {
@ -423,11 +423,19 @@ int main(int argc, char **argv)
/* Execute the original binary: */
v = execv(exe_path, new_argv);
en = errno;
write_str(2, argv[0]);
write_str(2, ": failed to start ");
write_str(2, exe_path);
write_str(2, " (");
write_str(2, strerror(en));
write_str(2, ")\n");
if (*lib_path) {
write_str(2, " used library path ");
write_str(2, lib_path);
write_str(2, "\n");
}
return v;
}