]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/dist: fix superfluous and confusing "binaries ... to be copied or moved" message
authorShenghou Ma <minux.ma@gmail.com>
Fri, 12 Oct 2012 05:35:05 +0000 (13:35 +0800)
committerShenghou Ma <minux.ma@gmail.com>
Fri, 12 Oct 2012 05:35:05 +0000 (13:35 +0800)
Also, to aid debugging cmd/dist, make make.bat support --dist-tool flag.

Fixes #3100.

R=alex.brainman
CC=golang-dev
https://golang.org/cl/6637061

src/cmd/dist/a.h
src/cmd/dist/build.c
src/cmd/dist/plan9.c
src/cmd/dist/unix.c
src/cmd/dist/windows.c
src/make.bat

index b108572c0c24df08b229a3ee5ed77bc1f3dd23e7..ace2ff60ad790ec0ca066c1fe0ba02dbe8b25dd5 100644 (file)
@@ -150,3 +150,4 @@ int xstrlen(char*);
 char*  xstrrchr(char*, int);
 char*  xstrstr(char*, char*);
 char*  xworkdir(void);
+int    xsamefile(char*, char*);
index 8c813006ecb121658f0040ad254dda345326b8b7..74100595c0c89947910b7c67d485555852d654da 100644 (file)
@@ -1564,7 +1564,7 @@ cmdbanner(int argc, char **argv)
                                "Read and run ./sudo.bash to install the debuggers.\n");
        }
 
-       if(!streq(goroot_final, goroot)) {
+       if(!xsamefile(goroot_final, goroot)) {
                xprintf("\n"
                        "The binaries expect %s to be copied or moved to %s\n",
                        goroot, goroot_final);
index 8bbff1d24c50d94b78be7d55cdc79884bd4a15b0..7482d970a4ddda74a41609485e62b79853e608cc 100644 (file)
@@ -742,4 +742,11 @@ xstrrchr(char *p, int c)
        return strrchr(p, c);
 }
 
+// xsamefile returns whether f1 and f2 are the same file (or dir)
+int
+xsamefile(char *f1, char *f2)
+{
+       return streq(f1, f2); // suffice for now
+}
+
 #endif // PLAN9
index e38d5bcc0f461b24ef1d5965fd132e6b9d3a6077..ff63556127c0ae156220ec25b45703d0246ee852 100644 (file)
@@ -727,5 +727,12 @@ xstrrchr(char *p, int c)
        return strrchr(p, c);
 }
 
+// xsamefile returns whether f1 and f2 are the same file (or dir)
+int
+xsamefile(char *f1, char *f2)
+{
+       return streq(f1, f2); // suffice for now
+}
+
 #endif // PLAN9
 #endif // __WINDOWS__
index 90310cd28d02997c2033d9a296de319aab4b8855..5fa9634919166a59c84bb8aad338548850fd2e6c 100644 (file)
@@ -925,4 +925,41 @@ xstrrchr(char *p, int c)
        return nil;
 }
 
+// xsamefile returns whether f1 and f2 are the same file (or dir)
+int
+xsamefile(char *f1, char *f2)
+{
+       Rune *ru;
+       HANDLE fd1, fd2;
+       BY_HANDLE_FILE_INFORMATION fi1, fi2;
+       int r;
+
+       // trivial case
+       if(streq(f1, f2))
+               return 1;
+       
+       torune(&ru, f1);
+       // refer to ../../pkg/os/stat_windows.go:/sameFile
+       fd1 = CreateFileW(ru, 0, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
+       xfree(ru);
+       if(fd1 == INVALID_HANDLE_VALUE)
+               return 0;
+       torune(&ru, f2);
+       fd2 = CreateFileW(ru, 0, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
+       xfree(ru);
+       if(fd2 == INVALID_HANDLE_VALUE) {
+               CloseHandle(fd1);
+               return 0;
+       }
+       r = GetFileInformationByHandle(fd1, &fi1) != 0 && GetFileInformationByHandle(fd2, &fi2) != 0;
+       CloseHandle(fd2);
+       CloseHandle(fd1);
+       if(r != 0 &&
+          fi1.dwVolumeSerialNumber == fi2.dwVolumeSerialNumber &&
+          fi1.nFileIndexHigh == fi2.nFileIndexHigh &&
+          fi1.nFileIndexLow == fi2.nFileIndexLow)
+               return 1;
+       return 0;
+}
+
 #endif // __WINDOWS__
index ec39392dd9db757b859e64f8efad21a78ffaec1c..01c2dc457819d40f55b0a2fc3cc8ed4cb05a23ed 100644 (file)
@@ -68,6 +68,9 @@ call env.bat
 del env.bat
 echo.
 
+if x%1==x--dist-tool goto copydist
+if x%2==x--dist-tool goto copydist
+
 echo # Building compilers and Go bootstrap tool.
 set buildall=-a
 if x%1==x--no-clean set buildall=
@@ -105,6 +108,11 @@ if x%1==x--no-banner goto nobanner
 
 goto end
 
+:copydist
+mkdir %GOTOOLDIR% 2>NUL
+copy cmd\dist\dist.exe %GOTOOLDIR%\
+goto end
+
 :fail
 set GOBUILDFAIL=1