fix problems with distributing unix executables Merge to v5.0
This commit is contained in:
parent
7f2d57e827
commit
eec92017c4
|
@ -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))))))
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user