WinRPM is an installer for RPM packages provided by an RPM-md build system. The default RPM-md provider is the OpenSUSE build service, which builds 32- and 64-bit DLLs for libraries used by several Julia packages (note: builds are cross-compiled).
To install WinRPM via the Julia package manager, use:
Pkg.add("WinRPM")
To search for a package from within Julia:
using WinRPM
WinRPM.search("packagename")
See also: upstream package information for Win64 and Win32
To install a library using WinRPM:
WinRPM.install("gtk2")
WinRPM.install("win_iconv","mingw32")
WinRPM will automatically install dependencies declared in the RPM-md package specification.
Please see the OpenSUSE build service packaging guidelines for further information.
WinRPM may be integrated with the BinDeps
system by declaring a provides(WinRPM.RPM...
line for each serviceable dependency.
For example, in the Tk.jl
package the following lines declare availability of the tcl
and tk
libraries
from WinRPM:
if is_windows()
using WinRPM
provides(WinRPM.RPM, "tk", tk, os=:Windows)
provides(WinRPM.RPM, "tcl", tcl, os=:Windows)
end
These lines must be preceded by BinDeps.library_dependency
declarations;
please see the BinDeps documentation for more information.
It may also be helpful to review usage examples in Tk.jl or other existing packages
(see deps/build.jl
): Nettle.jl
Cairo.jl
For stand-alone use, add the following lines to your %APPDATA%/julia/.juliarc.jl
file:
RPMbindir = Pkg.dir("WinRPM","deps","usr","$(Sys.ARCH)-w64-mingw32","sys-root","mingw","bin")
push!(Libdl.DL_LOAD_PATH,RPMbindir)
ENV["PATH"]=ENV["PATH"]*";"*RPMbindir
RPM-md provides the following functions for general usage:
update
, whatprovides
, search
, lookup
, and install
update()
-- download the new metadata from the hosts. Additional hosts can be added by editing the file sources.list
.
whatprovides(file)
-- given a part of a filename or file-path, returns a list of packages that include
search(string)
-- search for a string in the package description, summary, or name fields and returns a list of matching packages
lookup(name)
-- search for a package by name
install(pkg)
-- install a package (by name or package identifier), including dependencies, into the deps
folder
The functions typically take a second parameter "arch" specifying the package architecture for search, defaulting to the current operating system.
It also offers the keyword argument yes
which should be set to true
if no prompt is desired.
Package lists can be further filtered and analyzed, as the following example demonstrates:
julia> using WinRPM
julia> gtk3_candidates = WinRPM.search("gtk3", "mingw32")
1. webkitgtk3-debug (mingw32) - Debug information for package mingw32-webkitgtk3
2. webkitgtk3-lang (mingw32) - Languages for package mingw32-webkitgtk3
3. webkitgtk3-tools (mingw32) - Library for rendering web content, GTK+ 3 Port (tools)
4. gtk3-data (mingw32) - The GTK+ toolkit library (version 3) -- Data Files
5. gtk3-lang (mingw32) - Languages for package mingw32-gtk3
6. gtk3 (mingw32) - The GTK+ toolkit library (version 3)
7. gtk3-devel (mingw32) - The GTK+ toolkit library (version 3) -- Development Files
8. gtk3-debug (mingw32) - Debug information for package mingw32-gtk3
9. gtk3-tools (mingw32) - The GTK+ toolkit library (version 3) -- Tools
10. libwebkitgtk3 (mingw32) - Library for rendering web content, GTK+ 3 Port
11. libwebkitgtk3-devel (mingw32) - Library for rendering web content, GTK+ 3 Port (development files)
julia> gtk3_pkg = gtk3_candidates[6]
Name: gtk3
Summary: The GTK+ toolkit library (version 3)
Version: 3.8.1 (rel 1.31)
Arch: mingw32
URL: http://www.gtk.org/
License: LGPL-2.0+
Description: GTK+ is a multi-platform toolkit for creating graphical user interfaces.
Offering a complete set of widgets, GTK+ is suitable for projects
ranging from small one-off projects to complete application suites.
julia> WinRPM.install(gtk3_pkg)
MESSAGE: Installing: libxml2, atk, gdk-pixbuf, liblzma, zlib, libpng, libtiff, pixman, freetype, libffi, glib2-lang, atk-lang, libjpeg, gdk-pixbuf-lang, libharfbuzz, glib2, fontconfig, libcairo2, libjasper, libgcc, libintl, gtk3
MESSAGE: Downloading: libxml2
MESSAGE: Extracting: libxml2
2286 blocks
MESSAGE: Downloading: atk
MESSAGE: Extracting: atk
263 blocks
...
MESSAGE: Downloading: gtk3
MESSAGE: Extracting: gtk3
9614 blocks
MESSAGE: Success
julia> # or we can just install it directly
julia> WinRPM.install("gtk3")