GithubHelp home page GithubHelp logo

bhanditz / sevenzip-go Goto Github PK

View Code? Open in Web Editor NEW

This project forked from itchio/sevenzip-go

0.0 2.0 0.0 42 KB

๐Ÿ“ฆ Go bindings to use 7-zip as a library

License: MIT License

Go 58.27% C 41.73%

sevenzip-go's Introduction

sevenzip-go

Bindings to use 7-zip as a library from golang.

Structure

sevenzip-go needs two dynamic libraries to operate, and it expects them to be in the executable's folder.

For example

  • On Windows, you'll need foobar.exe, c7zip.dll, and 7z.dll in the same directory
  • On Linux, you'll need foobar, libc7zip.so, and 7z.so in the same directory
  • On macOS, you'll need foobar, libc7zip.dylib, and 7z.so in the same directory

Note: the 7-zip library is called 7z.so on macOS, that's not a typo.

If it can't find it, it'll print messages to stderr (and return an error).

Rationale

sevenzip-go was made primarily to serve as a decompression engine for https://github.com/itchio/butler

most of butler's functionality does not require 7-zip, and:

  • we want folks to be able to build butler easily, without having to build C/C++ projects manually
  • we want folks to be able to run their custom butler builds easily, without having to worry about missing dynamic libraries
  • we want to use 7z.dll from the official 7-zip builds (it is a notorious pain to build, as it requires MSVC 2010)

While the whole setup sounds crazy (especially considering the whole Go->cgo->C->C++->COM/C++ pipeline), it fits all those goals.

Caveats

Pay attention to the dynamic library requirement above:

Neither sevenzip-go nor lib7zip look for DLLs in the PATH or LD_LIBRARY_PATH or DYLD_LIBRARY_PATH, they only look in the executable's directory. This is on purpose, so we don't accidentally load an older version of 7-zip.

The library allocates memory via C functions, so you should make sure to call .Free() on the various objects you get from sevenzip-go.

Error handling is best-effort, but there's many moving pieces involved here. Some items of an archive may fail to extract, the errors can be retrieved with extractCallback.Errors() (which returns a slice of errors).

Example

The ./cmd/go7z package

Links

License

sevenzip-go is released under the MIT license, see the LICENSE file.

Other required components are distributed under the MPL 2.0, the LGPL 2.1, and other terms - see their own LICENSE or COPYING files.

sevenzip-go's People

Contributors

fasterthanlime avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.