• Kirill Smelkov's avatar
    golang: Build SWIG and include it into Go build environment · 762daa2c
    Kirill Smelkov authored
    Even if we don't use swig in our go projects, if hosting environment has
    swig, but incorrectly installed, then Go build will fail as:
    
       --- FAIL: TestScript (0.03s)
           --- FAIL: TestScript/list_swigcxx (0.46s)
               script_test.go:252:
                   # go list should not report SWIG-generated C++ files in CompiledGoFiles. (0.001s)
                   # CompiledGoFiles should contain 4 files:
                   #  a.go
                   #  a.swigcxx.go
                   #  _cgo_gotypes.go
                   #  a.cgo1.go (0.421s)
                   > go list -f '{{.CompiledGoFiles}}' -compiled=true example/swig
                   [stdout]
                   []
                   [stderr]
                   # example/swig
                   :1: Error: Unable to find 'swig.swg'
                   :3: Error: Unable to find 'go.swg'
                   [exit status 2]
                   FAIL: testdata/script/list_swigcxx.txt:12: unexpected command failure
    
    Such broken environment, in particular, is present on our testnodes,
    because there swig program is being included into slapos-node package,
    slapos command includes it into $PATH for spawned programs
    
        https://lab.nexedi.com/nexedi/slapos/blob/99cf4bfd/component/slapos/buildout.cfg#L22-30
        https://lab.nexedi.com/nexedi/slapos/blob/99cf4bfd/component/slapos/buildout.cfg#L74-88
    
    but the swig binary itself is configured to look into its supporting files in
    the wrong place:
    
        slapuser91@vifibcloud-rapidspace-hosting-007:~/t/swig$ /opt/slapos/parts/swig/bin/swig -swiglib
        /usr/src/packages/BUILD/slapos/build/opt/slapos/parts/swig/share/swig/3.0.10
    
        slapuser91@vifibcloud-rapidspace-hosting-007:~/t/swig$ ll /usr/src/packages/BUILD/slapos/build/opt/slapos/parts/swig/share/swig/3.0.10
        ls: cannot access '/usr/src/packages/BUILD/slapos/build/opt/slapos/parts/swig/share/swig/3.0.10': No such file or directory
    
    which leads to SWIG being broken:
    
        slapuser91@vifibcloud-rapidspace-hosting-007:~/t/swig$ /opt/slapos/parts/swig/bin/swig -v -go -intgosize 64 a.swigcxx
        Language subdirectory: go
        Search paths:
           ./
           ./swig_lib/go/
           /usr/src/packages/BUILD/slapos/build/opt/slapos/parts/swig/share/swig/3.0.10/go/
           ./swig_lib/
           /usr/src/packages/BUILD/slapos/build/opt/slapos/parts/swig/share/swig/3.0.10/
        Preprocessing...
        :1: Error: Unable to find 'swig.swg'
        :3: Error: Unable to find 'go.swg'
    
    -> Fix it by building SWIG ourselves and using that built swig to build go and
    in the Go environment provided to users.
    
    See "Troubleshooting" in http://www.swig.org/Release/README for details.
    
    /cc @luke, @jerome, @romain
    762daa2c