Removed xbps-src code. It's available on https://github.com/xtraeme/xbps-src.
This commit is contained in:
parent
afac9abe18
commit
c973848606
46 changed files with 11 additions and 5707 deletions
19
.gitignore
vendored
19
.gitignore
vendored
|
@ -1,19 +0,0 @@
|
||||||
syntax: glob
|
|
||||||
|
|
||||||
masterdir/
|
|
||||||
xbps-src/etc/xbps-src.conf
|
|
||||||
xbps-src/libexec/capchroot
|
|
||||||
xbps-src/libexec/capmount
|
|
||||||
xbps-src/libexec/capumount
|
|
||||||
xbps-src/libexec/chroot-helper
|
|
||||||
xbps-src/libexec/doinst-helper
|
|
||||||
xbps-src/libexec/getdeps-helper
|
|
||||||
xbps-src/shutils/chroot.sh
|
|
||||||
xbps-src/shutils/init_funcs.sh
|
|
||||||
xbps-src/shutils/pkgtarget_funcs.sh
|
|
||||||
xbps-src/shutils/tmpl_funcs.sh
|
|
||||||
xbps-src/xbps-src
|
|
||||||
|
|
||||||
*.bak
|
|
||||||
|
|
||||||
upstream.json
|
|
14
.hgignore
14
.hgignore
|
@ -1,14 +0,0 @@
|
||||||
syntax: glob
|
|
||||||
|
|
||||||
masterdir/
|
|
||||||
etc/xbps-src.conf
|
|
||||||
xbps-src/libexec/xbps-src-capchroot
|
|
||||||
xbps-src/libexec/xbps-src-chroot-capmount
|
|
||||||
xbps-src/libexec/xbps-src-chroot-capumount
|
|
||||||
xbps-src/libexec/xbps-src-chroot-helper
|
|
||||||
xbps-src/libexec/xbps-src-doinst-helper
|
|
||||||
xbps-src/shutils/chroot.sh
|
|
||||||
xbps-src/shutils/init_funcs.sh
|
|
||||||
xbps-src/shutils/pkgtarget_funcs.sh
|
|
||||||
xbps-src/xbps-src
|
|
||||||
*.bak
|
|
48
README
48
README
|
@ -1,44 +1,18 @@
|
||||||
Void GNU/Linux is a new distribution that uses XBPS as its package system,
|
This repository contains the source package tree to build XBPS binary
|
||||||
The X Binary Package System has been designed from scratch, please visit
|
packages from sources for Void GNU/Linux.
|
||||||
http://code.google.com/p/xbps for more information.
|
|
||||||
|
|
||||||
Void GNU/Linux is a simple and minimal distribution that can be customized
|
You can find more info about XBPS and Void GNU/Linux on:
|
||||||
in many ways, through the use of virtual packages. Currently there are
|
|
||||||
1600 packages in the current repository that you can build and install.
|
|
||||||
There is support for i686 and x86_64 architectures, more may be added in
|
|
||||||
a future (i.e. ARM) but it's not a high priority.
|
|
||||||
|
|
||||||
Some features:
|
http://code.google.com/p/xbps
|
||||||
- It's not a fork or customized version of any distro, it has been created
|
|
||||||
from scratch making it an extremely lightweight distro. Base install is
|
|
||||||
approximately 150MB.
|
|
||||||
- Rolling release.
|
|
||||||
- Uses the latest stable Linux kernel. The development snapshot from kernel.org
|
|
||||||
can also be installed in parallel.
|
|
||||||
- Kernel images/modules are never removed, providing an always-bootable system.
|
|
||||||
- Uses a modified "initramfs-tools" version from Debian to handle initial
|
|
||||||
ramdisk images.
|
|
||||||
- Uses a modified "casper" version from Ubuntu to boot from live images.
|
|
||||||
- Uses *systemd* as system and session manager, no SysV compatibility!
|
|
||||||
- Uses its own binary package system: XBPS -- A faster/leaner alternative to Debian's
|
|
||||||
dpkg/apt, RedHat's RPM, ArchLinux's Pacman, etc.
|
|
||||||
- You don't need wrappers of wrappers for the XBPS utils to rebuild/reinstall
|
|
||||||
packages. The provided tools are all that you need.
|
|
||||||
- Uses a BSD port-like system to build binary packages in chroot jails
|
|
||||||
without requiring root permissions. This allows building packages as a regular user
|
|
||||||
without interfering with your installed system!
|
|
||||||
|
|
||||||
When a new stable XBPS version comes out, a new live image is created for
|
To use this repository the 'xbps-src' utility is required. If you don't use
|
||||||
testing purposes along with the minimal base system.
|
Void GNU/Linux you can fetch its sources from:
|
||||||
|
|
||||||
You can find the Live Images at:
|
https://github.com/xtraeme/xbps-src
|
||||||
|
|
||||||
http://xbps.nopcode.org/live/
|
Or alternatively if you are already using Void and/or XBPS you can install
|
||||||
|
the binary package with:
|
||||||
|
|
||||||
If you have questions or contributions please use the google groups forum:
|
$ xbps-bin -y install xbps-src
|
||||||
|
|
||||||
http://groups.google.com/group/xbps
|
Enjoy and happy hacking! meet us at xbps@irc.freenode.net.
|
||||||
|
|
||||||
or join us at irc.freenode.net #xbps.
|
|
||||||
|
|
||||||
Enjoy and happy hacking!
|
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
include vars.mk
|
|
||||||
|
|
||||||
BINS = xbps-src
|
|
||||||
SUBDIRS = etc libexec helpers shutils
|
|
||||||
|
|
||||||
.PHONY: all
|
|
||||||
all:
|
|
||||||
for bin in $(BINS); do \
|
|
||||||
sed -e "s|@@XBPS_INSTALL_PREFIX@@|$(PREFIX)|g" \
|
|
||||||
-e "s|@@XBPS_INSTALL_ETCDIR@@|$(ETCDIR)|g" \
|
|
||||||
-e "s|@@XBPS_INSTALL_SHAREDIR@@|$(SHAREDIR)|g" \
|
|
||||||
-e "s|@@XBPS_INSTALL_SBINDIR@@|$(SBINDIR)|g" \
|
|
||||||
-e "s|@@XBPS_INSTALL_LIBEXECDIR@@|$(LIBEXECDIR)|g" \
|
|
||||||
$$bin.sh.in > $$bin; \
|
|
||||||
done
|
|
||||||
for dir in $(SUBDIRS); do \
|
|
||||||
$(MAKE) -C $$dir || exit 1; \
|
|
||||||
done
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
|
||||||
-rm -f $(BINS)
|
|
||||||
for dir in $(SUBDIRS); do \
|
|
||||||
$(MAKE) -C $$dir clean || exit 1; \
|
|
||||||
done
|
|
||||||
|
|
||||||
.PHONY: install
|
|
||||||
install: all
|
|
||||||
install -d $(SBINDIR)
|
|
||||||
for bin in $(BINS); do \
|
|
||||||
install -m 755 $$bin $(SBINDIR); \
|
|
||||||
done
|
|
||||||
for dir in $(SUBDIRS); do \
|
|
||||||
$(MAKE) -C $$dir install || exit 1; \
|
|
||||||
done
|
|
||||||
|
|
||||||
.PHONY: uninstall
|
|
||||||
uninstall:
|
|
||||||
for bin in $(BINS); do \
|
|
||||||
rm -f $(SBINDIR)/$$bin; \
|
|
||||||
done
|
|
||||||
for dir in $(SUBDIRS); do \
|
|
||||||
$(MAKE) -C $$dir uninstall || exit 1; \
|
|
||||||
done
|
|
242
xbps-src/README
242
xbps-src/README
|
@ -1,242 +0,0 @@
|
||||||
xbps-src - building packages from source
|
|
||||||
========================================
|
|
||||||
|
|
||||||
Introduction
|
|
||||||
------------
|
|
||||||
`xbps-src` is the utility used by the _X binary package system_ to build
|
|
||||||
binary packages from source distribution files. A root directory (`srcpkgs`)
|
|
||||||
contains multiple subdirs, each one to build a package as its name
|
|
||||||
indicates. The following directory structure illustrates it:
|
|
||||||
+
|
|
||||||
.................................
|
|
||||||
xbps-templates/
|
|
||||||
|
|
|
||||||
|-----srcpkgs/
|
|
||||||
|
|
|
||||||
|-----binutils/
|
|
||||||
|-----gcc/
|
|
||||||
|-----glibc/
|
|
||||||
..................................
|
|
||||||
|
|
||||||
A package subdirectory always has a `template` file, that are the
|
|
||||||
specifications to download and build the binary package from its source files.
|
|
||||||
Additionally some packages may have additional subdirs on it: `files`
|
|
||||||
and `patches`. The `files` subdir may contain configuration files, or
|
|
||||||
any other file required to build the package. The `patches` subdir contains
|
|
||||||
patches that are applied to the source before building.
|
|
||||||
+
|
|
||||||
|
|
||||||
Some packages may provide `subpackages`; they are different binary packages
|
|
||||||
that are built from the same source package. Each `subpackage` in the directory
|
|
||||||
structure (as shown above) is a symlink to the `real` package subdir, like this:
|
|
||||||
+
|
|
||||||
....................................
|
|
||||||
srcpkgs/
|
|
||||||
|
|
|
||||||
|-----gcc/
|
|
||||||
|-----libgomp -> gcc
|
|
||||||
|-----libmudflap -> gcc
|
|
||||||
|-----libstdc++ -> gcc
|
|
||||||
....................................
|
|
||||||
|
|
||||||
Each subpackage uses its own `template` build file that is contained in
|
|
||||||
the `real` package subdir, and they have exactly the same name than the
|
|
||||||
symlink pointing to the `real` package subdir. The following example
|
|
||||||
illustrates the structure used by the _udev_ package in the filesystem:
|
|
||||||
+
|
|
||||||
.......................................
|
|
||||||
srcpkgs/
|
|
||||||
|
|
|
||||||
|-----libgudev-devel -> udev
|
|
||||||
|-----libgudev -> udev
|
|
||||||
|-----libudev-devel -> udev
|
|
||||||
|-----libudev -> udev
|
|
||||||
|-----udev/
|
|
||||||
|----template
|
|
||||||
|----libgudev-devel.template
|
|
||||||
|----libgudev.template
|
|
||||||
|----libudev-devel.template
|
|
||||||
|----libudev.template
|
|
||||||
.......................................
|
|
||||||
+
|
|
||||||
|
|
||||||
Subpackages use a reduced version of the main `template` build file, because
|
|
||||||
the build and main install process is all done in the real `template` file.
|
|
||||||
Usually those `<subpkg>.template` files only move files and directories
|
|
||||||
to the `subpackage` destination directory, so they are always smaller.
|
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
The following software is required in the host system to install xbps-src
|
|
||||||
and its helpers:
|
|
||||||
|
|
||||||
- GCC, make, sed and libcap (depelopment package and setcap(8) command).
|
|
||||||
|
|
||||||
To build binary packages with xbps-src also the following software needs
|
|
||||||
to be installed into the host system:
|
|
||||||
|
|
||||||
- awk, bash, gcc c++, gettext, patch, texinfo, perl and fakeroot.
|
|
||||||
- xbps static utilities, available from http://code.google.com/p/xbps.
|
|
||||||
(use the latest available stable version) or
|
|
||||||
'xbps-bin -y install xbps-static' if using Void GNU/Linux.
|
|
||||||
|
|
||||||
Additionally if you want to work as 'root':
|
|
||||||
|
|
||||||
- sudo
|
|
||||||
|
|
||||||
Starting up
|
|
||||||
-----------
|
|
||||||
Firstly you'll have to download the `git` repository that contains `xbps-src`
|
|
||||||
and the build template files. To clone it with `git` use:
|
|
||||||
|
|
||||||
-----------------------------------------------------------------
|
|
||||||
$ git clone https://code.google.com/p/xbps.packages xbps-packages
|
|
||||||
-----------------------------------------------------------------
|
|
||||||
|
|
||||||
`xbps-src` and its shell utilities need to be installed in a directory
|
|
||||||
for correct operation, that is accomplished by issuing:
|
|
||||||
|
|
||||||
--------------------------------------------------
|
|
||||||
$ cd xbps-packages/xbps-src && make install clean
|
|
||||||
--------------------------------------------------
|
|
||||||
|
|
||||||
This will install all files into `/usr/local` by default, can be changed
|
|
||||||
by specifying `PREFIX` and `DESTDIR` to make(1).
|
|
||||||
|
|
||||||
Building packages from source
|
|
||||||
-----------------------------
|
|
||||||
`xbps-src` always look for a `template` file in current directory, that's what
|
|
||||||
it specifies the package build definitions and such. The build templates
|
|
||||||
are located in the `srcpkgs` directory, you should change the cwd to the
|
|
||||||
directory matching the package that you want to work on, i.e for binutils,
|
|
||||||
its directory is `srcpkgs/binutils`.
|
|
||||||
+
|
|
||||||
+
|
|
||||||
|
|
||||||
If configuration file is not specified from the command line with the
|
|
||||||
`-c` flag, it will first try to use the default location at
|
|
||||||
`/usr/local/etc/xbps-src.conf` (or the installation prefix that was specified
|
|
||||||
to the make(1) command), and as last resort in the etc directory of the
|
|
||||||
current directory.
|
|
||||||
+
|
|
||||||
+
|
|
||||||
|
|
||||||
To avoid problems with libtool and configure scripts finding stuff that is
|
|
||||||
available in the host system, almost all packages must be built inside of a
|
|
||||||
chroot. So the first thing would be to create the required set of packages
|
|
||||||
that will be used in the chroot:
|
|
||||||
|
|
||||||
----------------------------------------------------------------
|
|
||||||
$ xbps-src bootstrap
|
|
||||||
----------------------------------------------------------------
|
|
||||||
|
|
||||||
This will build all required packages via fakeroot in masterdir, therefore you
|
|
||||||
can run it as normal user. Once 'xbps-src-chroot' has been built and installed
|
|
||||||
into the 'masterdir' all packages will be built inside of the chroot.
|
|
||||||
+
|
|
||||||
+
|
|
||||||
|
|
||||||
'xbps-src' supports building packages in the chroot with your normal user,
|
|
||||||
thanks to the *POSIX.1e Capabilities* support in the Linux kernel. To use this
|
|
||||||
the target filesystem must support *extended attributes*; right now they
|
|
||||||
are supported on almost all Linux filesytems, such as *ext2*, *ext3*, *ext4*,
|
|
||||||
*xfs*, and others. This option is enabled by default in *xbps-src.conf*.
|
|
||||||
+
|
|
||||||
+
|
|
||||||
|
|
||||||
I believe it's the most easier and faster way to handle clean dependencies;
|
|
||||||
another reason would be that xbps packages are meant to be used in a system and
|
|
||||||
not just for ordinary users. So once all packages are built, you can create and
|
|
||||||
enter to the chroot with:
|
|
||||||
|
|
||||||
----------------------
|
|
||||||
$ xbps-src chroot
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
Press Control + D to exit from the chroot. The following targets will require
|
|
||||||
to be done in the chroot (_once base-chroot is installed_):
|
|
||||||
*build, configure, install and install-destdir*.
|
|
||||||
+
|
|
||||||
+
|
|
||||||
|
|
||||||
Now let's explain some more about the targets that you can use. To start
|
|
||||||
installing packages you should use the install target, all source packages
|
|
||||||
are located in the `srcpkgs` directory, so to install glib:
|
|
||||||
|
|
||||||
------------------------------------------
|
|
||||||
$ cd srcpkgs/<pkgname> && xbps-src install
|
|
||||||
------------------------------------------
|
|
||||||
|
|
||||||
If the package is properly installed, it will be "stowned" automatically.
|
|
||||||
``stowned'' means that this package is available in the master directory,
|
|
||||||
on which xpbs has symlinked all files from DESTDIR/<pkgname>.
|
|
||||||
+
|
|
||||||
|
|
||||||
To remove a currently installed (and stowned) package, you can use:
|
|
||||||
|
|
||||||
-----------------------------------------
|
|
||||||
$ cd srcpkgs/<pkgname> && xbps-src remove
|
|
||||||
-----------------------------------------
|
|
||||||
|
|
||||||
Please note that when you remove it, the package will also be removed
|
|
||||||
from XBPS_DESTDIR and previously `unstowned`.
|
|
||||||
+
|
|
||||||
|
|
||||||
To stow an already installed package (from XBPS_DESTDIR/<pkgname>):
|
|
||||||
|
|
||||||
---------------------------------------
|
|
||||||
$ cd srcpkgs/<pkgname> && xbps-src stow
|
|
||||||
---------------------------------------
|
|
||||||
|
|
||||||
To unstow an already installed (stowned) package:
|
|
||||||
|
|
||||||
-----------------------------------------
|
|
||||||
$ cd srcpkgs/<pkgname> && xbps-src unstow
|
|
||||||
-----------------------------------------
|
|
||||||
|
|
||||||
You can also print some stuff about any template build file, e.g:
|
|
||||||
|
|
||||||
---------------------------------------
|
|
||||||
$ cd srcpkgs/<pkgname> && xbps-src info
|
|
||||||
---------------------------------------
|
|
||||||
|
|
||||||
To list installed (stowned) packages, use this:
|
|
||||||
---------------
|
|
||||||
$ xbps-src list
|
|
||||||
---------------
|
|
||||||
|
|
||||||
To only extract the distfiles, without configuring/building/installing:
|
|
||||||
|
|
||||||
------------------------------------------
|
|
||||||
$ cd srcpkgs/<pkgname> && xbps-src extract
|
|
||||||
------------------------------------------
|
|
||||||
|
|
||||||
To not remove the build directory after successful installation:
|
|
||||||
|
|
||||||
---------------------------------------------
|
|
||||||
$ cd srcpkgs/<pkgname> && xbps-src -C install
|
|
||||||
---------------------------------------------
|
|
||||||
|
|
||||||
To only fetch the distfile:
|
|
||||||
----------------------------------------
|
|
||||||
$ cd srcpkgs/<pkgname> && xbps-src fetch
|
|
||||||
----------------------------------------
|
|
||||||
|
|
||||||
To only install the package, _without_ stowning it into the master directory:
|
|
||||||
--------------------------------------------------
|
|
||||||
$ cd srcpkgs/<pkgname> && xbps-src install-destdir
|
|
||||||
--------------------------------------------------
|
|
||||||
|
|
||||||
To list files installed by a package, note that package must be installed
|
|
||||||
into destination directory first:
|
|
||||||
------------------------------
|
|
||||||
$ xbps-src listfiles <pkgname>
|
|
||||||
------------------------------
|
|
||||||
|
|
||||||
That should be enough to get you started. If you have any question or
|
|
||||||
suggestion about *xbps-src* and the build templates, don't forget that there
|
|
||||||
is a mailing list to talk about it on:
|
|
||||||
|
|
||||||
http://groups.google.com/xbps
|
|
||||||
|
|
||||||
or join us at #xbps on irc.freenode.net.
|
|
|
@ -1,13 +0,0 @@
|
||||||
- Make src packages self contained, without requiring to download
|
|
||||||
the whole repository.
|
|
||||||
|
|
||||||
- Add documentation explaining stuff to create build templates.
|
|
||||||
Explain extensively available variables, build phases, etc.
|
|
||||||
|
|
||||||
- Fix packages with the "XXX" mark.
|
|
||||||
|
|
||||||
- Make all packages use $homepage and $license. base-files installs
|
|
||||||
common license files into /usr/share/licenses, if any package uses any
|
|
||||||
other license not installed there, it should be installed into
|
|
||||||
/usr/share/licenses/$pkgname. Also $license should match the file names
|
|
||||||
available in /usr/share/licenses when using common licenses.
|
|
|
@ -1,32 +0,0 @@
|
||||||
include ../vars.mk
|
|
||||||
|
|
||||||
# Find out the real path for the xbps-src distribdir.
|
|
||||||
_CURDIR = $(shell dirname $(shell pwd))
|
|
||||||
ifeq ($(shell basename ${_CURDIR}), xbps-src)
|
|
||||||
DISTRIBDIR = $(subst /xbps-src,,${_CURDIR})
|
|
||||||
else
|
|
||||||
DISTRIBDIR = ${_CURDIR}
|
|
||||||
endif
|
|
||||||
|
|
||||||
CONF_FILE = xbps-src.conf
|
|
||||||
|
|
||||||
.PHONY: all
|
|
||||||
all:
|
|
||||||
sed -e "s|@@XBPS_DISTRIBDIR@@|${DISTRIBDIR}|" \
|
|
||||||
${CONF_FILE}.in > ${CONF_FILE}
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
|
||||||
-rm -f ${CONF_FILE}
|
|
||||||
|
|
||||||
.PHONY: install
|
|
||||||
install:
|
|
||||||
if [ ! -d $(DESTDIR)$(ETCDIR) ]; then \
|
|
||||||
install -d $(DESTDIR)$(ETCDIR); \
|
|
||||||
fi
|
|
||||||
if [ ! -f $(DESTDIR)$(ETCDIR)/$(CONF_FILE) ]; then \
|
|
||||||
install -m644 $(CONF_FILE) $(DESTDIR)$(ETCDIR); \
|
|
||||||
fi
|
|
||||||
|
|
||||||
.PHONY: uninstall
|
|
||||||
uninstall:
|
|
|
@ -1,89 +0,0 @@
|
||||||
# --*-- shell --*--
|
|
||||||
# Configuration file for the XBPS source build system.
|
|
||||||
#
|
|
||||||
# To disable an option comment it out, don't set it to another value i.e:
|
|
||||||
# FOO=no -> wrong
|
|
||||||
# #FOO=yes -> correct
|
|
||||||
|
|
||||||
# [REQUIRED]
|
|
||||||
# Directory where the xbps-src GIT repository is stored. This is
|
|
||||||
# required to be mounted in the chroot. You shouldn't need to modify this
|
|
||||||
# one unless your xbps-packages git repo has been moved to another path.
|
|
||||||
XBPS_DISTRIBUTIONDIR=@@XBPS_DISTRIBDIR@@
|
|
||||||
|
|
||||||
# [REQUIRED]
|
|
||||||
# Chroot master directory. This is where the packages are built and installed.
|
|
||||||
XBPS_MASTERDIR=$XBPS_DISTRIBUTIONDIR/masterdir
|
|
||||||
|
|
||||||
# [OPTIONAL]
|
|
||||||
# Host directory to be (bind) mounted into the chroot (masterdir) containing
|
|
||||||
# directories for downloaded cached packages from xbps-bin(8), packages
|
|
||||||
# created by xbps-src, downloaded source distribution tarballs, etc.
|
|
||||||
#
|
|
||||||
# Basically your directory will contain this structure:
|
|
||||||
#
|
|
||||||
# /dir
|
|
||||||
# |_ /binpkgs
|
|
||||||
# |_ /repocache
|
|
||||||
# |_ /sources
|
|
||||||
#
|
|
||||||
# When created, those names are constants, so you cannot change them, even
|
|
||||||
# they are case sensitive.
|
|
||||||
#
|
|
||||||
# NOTE: You must create your toplevel /dir yourself
|
|
||||||
#
|
|
||||||
#XBPS_HOSTDIR=/path/to/your/host/directory
|
|
||||||
|
|
||||||
# [OPTIONAL]
|
|
||||||
# Compilation flags for C and C++.
|
|
||||||
XBPS_CFLAGS="-O2 -pipe -mtune=generic"
|
|
||||||
XBPS_CXXFLAGS="$XBPS_CFLAGS"
|
|
||||||
|
|
||||||
# [OPTIONAL]
|
|
||||||
# Enable or disable ccache when building packages.
|
|
||||||
#XBPS_CCACHE=yes
|
|
||||||
|
|
||||||
# [OPTIONAL]
|
|
||||||
# Linker flags passed to the compiler. By default we use --as-needed to
|
|
||||||
# avoid linking extra libraries into binaries. See the following link
|
|
||||||
# for info: http://www.gentoo.org/proj/en/qa/asneeded.xml
|
|
||||||
XBPS_LDFLAGS="-Wl,--as-needed"
|
|
||||||
|
|
||||||
# [OPTIONAL]
|
|
||||||
# Number of parallel jobs to execute when building packages that
|
|
||||||
# use make(1) or alike commands.
|
|
||||||
#XBPS_MAKEJOBS=4
|
|
||||||
|
|
||||||
# [REQUIRED]
|
|
||||||
# Compression program used to build the binary packages.
|
|
||||||
# Possible value: gzip, bzip2 or xz. Default xz.
|
|
||||||
XBPS_COMPRESS_CMD=xz
|
|
||||||
|
|
||||||
# [OPTIONAL]
|
|
||||||
# Compression level used in XBPS_COMPRESS_CMD to build the
|
|
||||||
# binary packages. Possible values: 1-9. If unset, default value
|
|
||||||
# by the command will be used.
|
|
||||||
XBPS_COMPRESS_LEVEL=9
|
|
||||||
|
|
||||||
# [OPTIONAL]
|
|
||||||
# Install required package dependencies from binary packages, through
|
|
||||||
# binary package repositories as specified in the XBPS repositories.plist
|
|
||||||
# configuration file.
|
|
||||||
#
|
|
||||||
# Only dependencies for non bootstrap packages will be installed.
|
|
||||||
# Make sure that you modify the repositories.plist file from:
|
|
||||||
#
|
|
||||||
# XBPS >= 0.10.0:
|
|
||||||
# <masterdir>/usr/local/etc/xbps/repositories.plist.
|
|
||||||
# XBPS < 0.10.0:
|
|
||||||
# <masterdir>/usr/local/etc/xbps-conf.plist
|
|
||||||
#
|
|
||||||
#XBPS_PREFER_BINPKG_DEPS=yes
|
|
||||||
|
|
||||||
# [OPTIONAL]
|
|
||||||
# Build packages with your unprivileged user in the chroot thanks
|
|
||||||
# to POSIX.1e Capabilities as explained in capabilities(7) on GNU/Linux.
|
|
||||||
#
|
|
||||||
# fakeroot is only used for the installation stage via the helper
|
|
||||||
# script doinst-helper.
|
|
||||||
XBPS_USE_CAPABILITIES=yes
|
|
|
@ -1,16 +0,0 @@
|
||||||
include ../vars.mk
|
|
||||||
|
|
||||||
.PHONY: all
|
|
||||||
all:
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
|
||||||
|
|
||||||
.PHONY: install
|
|
||||||
install:
|
|
||||||
install -d $(DESTDIR)$(SHAREDIR)/helpers
|
|
||||||
install -m 644 *.sh $(DESTDIR)$(SHAREDIR)/helpers
|
|
||||||
|
|
||||||
.PHONY: uninstall
|
|
||||||
uninstall:
|
|
||||||
-rm -rf $(DESTDIR)$(SHAREDIR)/helpers
|
|
|
@ -1,11 +0,0 @@
|
||||||
#
|
|
||||||
# This helper is for templates using cmake.
|
|
||||||
#
|
|
||||||
do_configure() {
|
|
||||||
[ -z "$configure_script" ] && configure_script=cmake
|
|
||||||
${configure_script} -DCMAKE_INSTALL_PREFIX=/usr \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release ${configure_args}
|
|
||||||
}
|
|
||||||
|
|
||||||
# cmake scripts use make(1) to build/install.
|
|
||||||
. $XBPS_HELPERSDIR/gnu-makefile.sh
|
|
|
@ -1,12 +0,0 @@
|
||||||
#
|
|
||||||
# This helper is for templates using configure scripts (not generated
|
|
||||||
# by the GNU autotools).
|
|
||||||
#
|
|
||||||
|
|
||||||
do_configure() {
|
|
||||||
[ -z "$configure_script" ] && configure_script="./configure"
|
|
||||||
${configure_script} ${configure_args}
|
|
||||||
}
|
|
||||||
|
|
||||||
# configure scripts use make(1) to build/install.
|
|
||||||
. $XBPS_HELPERSDIR/gnu-makefile.sh
|
|
|
@ -1,14 +0,0 @@
|
||||||
#
|
|
||||||
# This helper is for templates using GNU configure script.
|
|
||||||
#
|
|
||||||
|
|
||||||
# This variable can be used for packages wanting to use common arguments
|
|
||||||
# to GNU configure scripts.
|
|
||||||
#
|
|
||||||
do_configure() {
|
|
||||||
[ -z "$configure_script" ] && configure_script="./configure"
|
|
||||||
${configure_script} ${CONFIGURE_SHARED_ARGS} ${configure_args}
|
|
||||||
}
|
|
||||||
|
|
||||||
# GNU configure scripts use make(1) to build/install.
|
|
||||||
. $XBPS_HELPERSDIR/gnu-makefile.sh
|
|
|
@ -1,23 +0,0 @@
|
||||||
#
|
|
||||||
# This helper is for templates using GNU Makefiles.
|
|
||||||
#
|
|
||||||
do_build() {
|
|
||||||
if [ -z "$make_cmd" ]; then
|
|
||||||
make_cmd=make
|
|
||||||
fi
|
|
||||||
${make_cmd} ${makejobs} ${make_build_args} ${make_build_target}
|
|
||||||
}
|
|
||||||
|
|
||||||
do_install() {
|
|
||||||
local target
|
|
||||||
|
|
||||||
if [ -z "$make_install_target" ]; then
|
|
||||||
target="DESTDIR=${DESTDIR} install"
|
|
||||||
else
|
|
||||||
target="${make_install_target}"
|
|
||||||
fi
|
|
||||||
if [ -z "$make_cmd" ]; then
|
|
||||||
make_cmd=make
|
|
||||||
fi
|
|
||||||
${make_cmd} ${make_install_args} ${target}
|
|
||||||
}
|
|
|
@ -1,44 +0,0 @@
|
||||||
#
|
|
||||||
# This helper does the required steps to be able to build and install
|
|
||||||
# perl modules into the correct location.
|
|
||||||
#
|
|
||||||
# Required vars to be set by a template:
|
|
||||||
#
|
|
||||||
# build_style=perl-module
|
|
||||||
#
|
|
||||||
# Optionally if the module needs more directories to be configured other
|
|
||||||
# than $XBPS_BUILDDIR/$wrksrc, one can use (relative to $wrksrc):
|
|
||||||
#
|
|
||||||
# perl_configure_dirs="blob/bob foo/blah"
|
|
||||||
#
|
|
||||||
do_configure() {
|
|
||||||
local perlmkf
|
|
||||||
|
|
||||||
if [ -z "$perl_configure_dirs" ]; then
|
|
||||||
perlmkf="$wrksrc/Makefile.PL"
|
|
||||||
if [ ! -f $perlmkf ]; then
|
|
||||||
echo "*** ERROR couldn't find $perlmkf, aborting"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $wrksrc && \
|
|
||||||
PERL_MM_USE_DEFAULT=1 perl Makefile.PL \
|
|
||||||
${make_build_args} INSTALLDIRS=vendor
|
|
||||||
fi
|
|
||||||
|
|
||||||
for i in "$perl_configure_dirs"; do
|
|
||||||
perlmkf="$wrksrc/$i/Makefile.PL"
|
|
||||||
if [ -f $perlmkf ]; then
|
|
||||||
cd $wrksrc/$i && PERL_MM_USE_DEFAULT=1 \
|
|
||||||
perl Makefile.PL ${make_build_args} \
|
|
||||||
INSTALLDIRS=vendor
|
|
||||||
else
|
|
||||||
echo -n "*** ERROR: couldn't find $perlmkf"
|
|
||||||
echo ", aborting ***"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# Perl modules use standard make(1) to install.
|
|
||||||
. ${XBPS_HELPERSDIR}/gnu-makefile.sh
|
|
|
@ -1,13 +0,0 @@
|
||||||
#
|
|
||||||
# This helper is for templates installing python modules.
|
|
||||||
#
|
|
||||||
do_build() {
|
|
||||||
python setup.py build ${make_build_args}
|
|
||||||
}
|
|
||||||
|
|
||||||
do_install() {
|
|
||||||
if [ -z "$make_install_args" ]; then
|
|
||||||
make_install_args="--prefix=/usr --root=$DESTDIR"
|
|
||||||
fi
|
|
||||||
python setup.py install ${make_install_args}
|
|
||||||
}
|
|
|
@ -1,46 +0,0 @@
|
||||||
#
|
|
||||||
# This helper replaces shebang paths pointing to the correct ones
|
|
||||||
# as used by xbps. Multiple languages are supported:
|
|
||||||
#
|
|
||||||
# - GNU Bash
|
|
||||||
# - Perl
|
|
||||||
# - Python
|
|
||||||
#
|
|
||||||
|
|
||||||
bash_regexp=".*sh"
|
|
||||||
perl_regexp=".*perl[^[:space:]]*"
|
|
||||||
python_regexp=".*python[^[:space:]]*"
|
|
||||||
|
|
||||||
replace_interpreter()
|
|
||||||
{
|
|
||||||
local lang="$1"
|
|
||||||
local file="$2"
|
|
||||||
local trsb=
|
|
||||||
local orsb=
|
|
||||||
|
|
||||||
[ -z $lang -o -z $file ] && return 1
|
|
||||||
|
|
||||||
case $lang in
|
|
||||||
bash)
|
|
||||||
orsb=$bash_regexp
|
|
||||||
trpath="/bin/bash"
|
|
||||||
;;
|
|
||||||
perl)
|
|
||||||
orsb=$perl_regexp
|
|
||||||
trpath="/usr/bin/perl"
|
|
||||||
;;
|
|
||||||
python)
|
|
||||||
orsb=$python_regexp
|
|
||||||
trpath="/usr/bin/python"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [ -f $file ]; then
|
|
||||||
sed -i -e "1s|^#![[:space:]]*${orsb}|#!${trpath}|" $file && \
|
|
||||||
msg_normal "Transformed $lang script: ${file##$wrksrc}.\n"
|
|
||||||
else
|
|
||||||
msg_warn "Ignoring unexistent $lang script: ${file##$wrksrc}.\n"
|
|
||||||
fi
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
#
|
|
||||||
# This helper is for templates using WAF to build/install.
|
|
||||||
#
|
|
||||||
do_configure() {
|
|
||||||
python waf configure --prefix=/usr ${configure_args}
|
|
||||||
}
|
|
||||||
|
|
||||||
do_build() {
|
|
||||||
python waf build ${make_build_args}
|
|
||||||
}
|
|
||||||
|
|
||||||
do_install() {
|
|
||||||
if [ -z "$make_install_args" ]; then
|
|
||||||
make_install_args="--destdir=$DESTDIR"
|
|
||||||
fi
|
|
||||||
python waf install ${make_install_args}
|
|
||||||
}
|
|
|
@ -1,51 +0,0 @@
|
||||||
include ../vars.mk
|
|
||||||
|
|
||||||
SCRIPTS = chroot-helper.sh doinst-helper.sh
|
|
||||||
MOUNT_BIN = capmount
|
|
||||||
UMOUNT_BIN = capumount
|
|
||||||
CHROOT_BIN = capchroot
|
|
||||||
BINS = $(CHROOT_BIN) $(MOUNT_BIN) $(UMOUNT_BIN)
|
|
||||||
WFLAGS = -Wall -Werror
|
|
||||||
LDFLAGS = -lcap
|
|
||||||
|
|
||||||
ifdef IN_CHROOT
|
|
||||||
BINS =
|
|
||||||
SCRIPTS = doinst-helper.sh
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: all
|
|
||||||
all: $(BINS)
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
|
||||||
-rm -f $(BINS)
|
|
||||||
|
|
||||||
.PHONY: install
|
|
||||||
install:
|
|
||||||
install -d $(DESTDIR)$(LIBEXECDIR)
|
|
||||||
for bin in $(SCRIPTS); do \
|
|
||||||
install -m755 $$bin $(DESTDIR)$(LIBEXECDIR); \
|
|
||||||
done
|
|
||||||
ifdef BINS
|
|
||||||
install -m755 $(MOUNT_BIN) $(DESTDIR)$(LIBEXECDIR)
|
|
||||||
setcap cap_sys_admin=ep $(DESTDIR)$(LIBEXECDIR)/$(MOUNT_BIN)
|
|
||||||
install -m755 $(UMOUNT_BIN) $(DESTDIR)$(LIBEXECDIR)
|
|
||||||
setcap cap_sys_admin=ep $(DESTDIR)$(LIBEXECDIR)/$(UMOUNT_BIN)
|
|
||||||
install -m755 $(CHROOT_BIN) $(DESTDIR)$(LIBEXECDIR)
|
|
||||||
setcap cap_sys_chroot=ep $(DESTDIR)$(LIBEXECDIR)/$(CHROOT_BIN)
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: uninstall
|
|
||||||
uninstall:
|
|
||||||
for bin in $(BINS) $(SCRIPTS); do \
|
|
||||||
rm -f $(DESTDIR)$(LIBEXECDIR)/$$bin; \
|
|
||||||
done
|
|
||||||
|
|
||||||
$(MOUNT_BIN):
|
|
||||||
$(CC) $(WFLAGS) mount.c $(LDFLAGS) -o $@
|
|
||||||
|
|
||||||
$(UMOUNT_BIN):
|
|
||||||
$(CC) $(WFLAGS) umount.c $(LDFLAGS) -o $@
|
|
||||||
|
|
||||||
$(CHROOT_BIN):
|
|
||||||
$(CC) $(WFLAGS) chroot.c $(LDFLAGS) -o $@
|
|
|
@ -1,117 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#-
|
|
||||||
# Copyright (c) 2010-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
HANDLER="$1"
|
|
||||||
|
|
||||||
REQFS="sys proc dev xbps host"
|
|
||||||
|
|
||||||
mount_chroot_fs()
|
|
||||||
{
|
|
||||||
local cnt f blah dowrite
|
|
||||||
|
|
||||||
for f in ${REQFS}; do
|
|
||||||
if [ ! -f ${MASTERDIR}/.${f}_mount_bind_done ]; then
|
|
||||||
unset dowrite
|
|
||||||
echo -n "=> Mounting /${f} in chroot... "
|
|
||||||
if [ ! -d ${MASTERDIR}/${f} ]; then
|
|
||||||
mkdir -p ${MASTERDIR}/${f}
|
|
||||||
fi
|
|
||||||
case ${f} in
|
|
||||||
xbps)
|
|
||||||
blah=${DISTRIBUTIONDIR}
|
|
||||||
dowrite="-w"
|
|
||||||
;;
|
|
||||||
host)
|
|
||||||
blah=${HOSTDIR}
|
|
||||||
dowrite="-w"
|
|
||||||
;;
|
|
||||||
*) blah=/${f};;
|
|
||||||
esac
|
|
||||||
if [ -z "$HOSTDIR" -a "$f" = "host" ]; then
|
|
||||||
echo "unset, ignoring."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
[ ! -d ${blah} ] && echo "failed." && continue
|
|
||||||
${XBPS_LIBEXECDIR}/capmount \
|
|
||||||
${dowrite} ${blah} ${MASTERDIR}/${f} \
|
|
||||||
2>/dev/null
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo 1 > ${MASTERDIR}/.${f}_mount_bind_done
|
|
||||||
echo "done."
|
|
||||||
else
|
|
||||||
echo "FAILED!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
cnt=$(cat ${MASTERDIR}/.${f}_mount_bind_done)
|
|
||||||
cnt=$((${cnt} + 1))
|
|
||||||
echo ${cnt} > ${MASTERDIR}/.${f}_mount_bind_done
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
umount_chroot_fs()
|
|
||||||
{
|
|
||||||
local fs dir cnt
|
|
||||||
|
|
||||||
for fs in ${REQFS}; do
|
|
||||||
[ ! -f ${MASTERDIR}/.${fs}_mount_bind_done ] && continue
|
|
||||||
cnt=$(cat ${MASTERDIR}/.${fs}_mount_bind_done)
|
|
||||||
if [ ${cnt} -gt 1 ]; then
|
|
||||||
cnt=$((${cnt} - 1))
|
|
||||||
echo ${cnt} > ${MASTERDIR}/.${fs}_mount_bind_done
|
|
||||||
else
|
|
||||||
echo -n "=> Unmounting ${fs} from chroot... "
|
|
||||||
${XBPS_LIBEXECDIR}/capumount \
|
|
||||||
${MASTERDIR} ${fs} 2>/dev/null
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
rm -f ${MASTERDIR}/.${fs}_mount_bind_done
|
|
||||||
echo "done."
|
|
||||||
else
|
|
||||||
echo "FAILED!!!"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
unset fs
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ $# -ne 1 ]; then
|
|
||||||
echo "$0: mount || umount"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$MASTERDIR" -o -z "$DISTRIBUTIONDIR" ]; then
|
|
||||||
echo "$0: MASTERDIR or DISTRIBUTIONDIR unset, can't continue."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "${HANDLER}" in
|
|
||||||
mount) mount_chroot_fs;;
|
|
||||||
umount) umount_chroot_fs;;
|
|
||||||
*) echo "$0: invalid target." && exit 1;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
exit 0
|
|
|
@ -1,126 +0,0 @@
|
||||||
/*-
|
|
||||||
* Copyright (c) 2010-2011 Juan Romero Pardines.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* chroot() to target directory by using the CAP_CHROOT
|
|
||||||
* capability set on the file.
|
|
||||||
*
|
|
||||||
* As security measure it only allows to chroot when the target directory
|
|
||||||
* is owned by the same user executing the process and it has read/write
|
|
||||||
* permission on it.
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/mount.h>
|
|
||||||
#include <sys/capability.h>
|
|
||||||
|
|
||||||
#define _PROGNAME "xbps-src-capchroot"
|
|
||||||
|
|
||||||
void
|
|
||||||
usage(void)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Usage: %s <newroot> <args>\n", _PROGNAME);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
cap_t cap;
|
|
||||||
cap_flag_value_t effective, permitted;
|
|
||||||
struct stat st;
|
|
||||||
char *path;
|
|
||||||
|
|
||||||
if (argc < 3)
|
|
||||||
usage();
|
|
||||||
|
|
||||||
cap = cap_get_proc();
|
|
||||||
if (cap == NULL) {
|
|
||||||
fprintf(stderr, "cap_get_proc() returned %s!\n",
|
|
||||||
strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
cap_get_flag(cap, CAP_SYS_CHROOT, CAP_EFFECTIVE, &effective);
|
|
||||||
cap_get_flag(cap, CAP_SYS_CHROOT, CAP_PERMITTED, &permitted);
|
|
||||||
if ((effective != CAP_SET) && (permitted != CAP_SET)) {
|
|
||||||
fprintf(stderr, "ERROR: missing 'cap_sys_chroot' capability!\n"
|
|
||||||
"Please set it with: setcap cap_sys_chroot=ep %s'\n",
|
|
||||||
argv[0]);
|
|
||||||
cap_free(cap);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
cap_free(cap);
|
|
||||||
|
|
||||||
if ((path = realpath(argv[1], NULL)) == NULL) {
|
|
||||||
fprintf(stderr, "ERROR: realpath() %s\n", strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Disallow chroot to '/' */
|
|
||||||
if (strcmp(path, "/") == 0) {
|
|
||||||
fprintf(stderr, "ERROR: chroot to / is not allowed!\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check that uid/gid owns the dir and has rx perms on the
|
|
||||||
* new target root and it is a directory.
|
|
||||||
*/
|
|
||||||
if (stat(path, &st) == -1) {
|
|
||||||
fprintf(stderr, "ERROR: stat() on %s: %s\n",
|
|
||||||
path, strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
if (S_ISDIR(st.st_mode) == 0) {
|
|
||||||
fprintf(stderr, "ERROR: '%s' not a directory!\n", path);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
if ((st.st_uid != getuid()) && (st.st_gid != getgid()) &&
|
|
||||||
(st.st_mode & (S_IRUSR|S_IXUSR|S_IRGRP|S_IXGRP))) {
|
|
||||||
fprintf(stderr, "ERROR: wrong permissions on %s!\n", path);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
/* All ok, change root and process argv on the target root dir. */
|
|
||||||
if (chroot(path) == -1) {
|
|
||||||
fprintf(stderr, "ERROR: chroot() on %s: %s\n", argv[1],
|
|
||||||
strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
if (chdir("/") == -1) {
|
|
||||||
fprintf(stderr, "ERROR: chdir(): %s\n", strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
argv += 2;
|
|
||||||
(void)execvp(argv[0], argv);
|
|
||||||
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
|
@ -1,140 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#-
|
|
||||||
# Copyright (c) 2010-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
PKG_TMPLNAME="$1"
|
|
||||||
|
|
||||||
if [ -n "${CONFIG_FILE}" -a -r "${CONFIG_FILE}" ]; then
|
|
||||||
. ${CONFIG_FILE}
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "${MASTERDIR}" ]; then
|
|
||||||
export XBPS_MASTERDIR="${MASTERDIR}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
. ${XBPS_SHAREDIR}/shutils/init_funcs.sh
|
|
||||||
|
|
||||||
set_defvars
|
|
||||||
|
|
||||||
for f in $XBPS_SHUTILSDIR/*.sh; do
|
|
||||||
[ -r "$f" ] && . $f
|
|
||||||
done
|
|
||||||
|
|
||||||
install_src_phase()
|
|
||||||
{
|
|
||||||
local f i subpkg spkgrev
|
|
||||||
|
|
||||||
[ -z $pkgname ] && return 2
|
|
||||||
#
|
|
||||||
# There's nothing we can do if we are a meta template.
|
|
||||||
# Just creating the dir is enough to write the package metadata.
|
|
||||||
#
|
|
||||||
if [ "$build_style" = "meta-template" ]; then
|
|
||||||
mkdir -p $XBPS_DESTDIR/$pkgname-$version
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $wrksrc || msg_error "can't change cwd to wrksrc!\n"
|
|
||||||
if [ -n "$build_wrksrc" ]; then
|
|
||||||
cd $build_wrksrc \
|
|
||||||
|| msg_error "can't change cwd to build_wrksrc!\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Run pre_install func.
|
|
||||||
if [ ! -f $XBPS_PRE_INSTALL_DONE ]; then
|
|
||||||
run_func pre_install
|
|
||||||
[ $? -eq 0 ] && touch -f $XBPS_PRE_INSTALL_DONE
|
|
||||||
fi
|
|
||||||
|
|
||||||
# do_install()
|
|
||||||
if [ -r $XBPS_HELPERSDIR/${build_style}.sh ]; then
|
|
||||||
. $XBPS_HELPERSDIR/${build_style}.sh
|
|
||||||
fi
|
|
||||||
run_func do_install
|
|
||||||
|
|
||||||
cd ${wrksrc} || msg_error "can't change cwd to wrksrc!\n"
|
|
||||||
|
|
||||||
# Run post_install func.
|
|
||||||
if [ ! -f $XBPS_POST_INSTALL_DONE ]; then
|
|
||||||
run_func post_install
|
|
||||||
[ $? -eq 0 ] && touch -f $XBPS_POST_INSTALL_DONE
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remove libtool archives by default.
|
|
||||||
if [ -z "$keep_libtool_archives" ]; then
|
|
||||||
msg_normal "$pkgver: removing libtool archives...\n"
|
|
||||||
find ${DESTDIR} -type f -name \*.la -delete
|
|
||||||
fi
|
|
||||||
# Remove bytecode python generated files.
|
|
||||||
msg_normal "$pkgver: removing python bytecode archives...\n"
|
|
||||||
find ${DESTDIR} -type f -name \*.py[co] -delete
|
|
||||||
|
|
||||||
# Always remove perllocal.pod and .packlist files.
|
|
||||||
if [ "$pkgname" != "perl" ]; then
|
|
||||||
find ${DESTDIR} -type f -name perllocal.pod -delete
|
|
||||||
find ${DESTDIR} -type f -name .packlist -delete
|
|
||||||
fi
|
|
||||||
# Remove empty directories by default.
|
|
||||||
for f in $(find ${DESTDIR} -depth -type d); do
|
|
||||||
rmdir $f 2>/dev/null && msg_warn "removed empty dir: ${f##${DESTDIR}}\n"
|
|
||||||
done
|
|
||||||
#
|
|
||||||
# Build subpackages if found.
|
|
||||||
#
|
|
||||||
for subpkg in ${subpackages}; do
|
|
||||||
if [ -n "$revision" ]; then
|
|
||||||
spkgrev="${subpkg}-${version}_${revision}"
|
|
||||||
else
|
|
||||||
spkgrev="${subpkg}-${version}"
|
|
||||||
fi
|
|
||||||
check_installed_pkg ${spkgrev}
|
|
||||||
if [ $? -eq 0 -a -z "$BOOTSTRAP_PKG_REBUILD" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
msg_normal "$pkgver: preparing subpackage '${subpkg}'...\n"
|
|
||||||
if [ ! -f $XBPS_SRCPKGDIR/${sourcepkg}/${subpkg}.template ]; then
|
|
||||||
msg_error "Cannot find '${subpkg}' subpkg build template!\n"
|
|
||||||
fi
|
|
||||||
. $XBPS_SRCPKGDIR/${sourcepkg}/${subpkg}.template
|
|
||||||
pkgname=${subpkg}
|
|
||||||
set_tmpl_common_vars
|
|
||||||
if [ ! -f ${wrksrc}/.xbps_do_install_${pkgname}_done ]; then
|
|
||||||
run_func do_install
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
touch -f ${wrksrc}/.xbps_do_install_${pkgname}_done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
msg_warn "$pkgver: skipping '$pkgname' subpkg, already installed into destdir.\n"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
touch -f $XBPS_INSTALL_DONE
|
|
||||||
}
|
|
||||||
|
|
||||||
[ -z "$PKG_TMPLNAME" ] && exit 2
|
|
||||||
|
|
||||||
setup_tmpl $PKG_TMPLNAME
|
|
||||||
install_src_phase $pkgname
|
|
||||||
|
|
||||||
exit 0
|
|
|
@ -1,127 +0,0 @@
|
||||||
/*-
|
|
||||||
* Copyright (c) 2010-2011 Juan Romero Pardines.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Bind mounts a filesystem mountpoint into the target directory,
|
|
||||||
* by using the CAP_SYS_ADMIN capability set on the program.
|
|
||||||
*
|
|
||||||
* Only mounts are possible when user running the process owns
|
|
||||||
* the target directory and has read/write permission on it.
|
|
||||||
*
|
|
||||||
* Mounts are also mounted with nosuid for security meassures.
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <sys/mount.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/capability.h>
|
|
||||||
|
|
||||||
#define _PROGNAME "xbps-src-chroot-capmount"
|
|
||||||
|
|
||||||
void
|
|
||||||
usage(void)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Usage: %s [-w] <orig> <dest>\n", _PROGNAME);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
cap_t cap;
|
|
||||||
cap_flag_value_t effective, permitted;
|
|
||||||
struct stat st;
|
|
||||||
unsigned long flags;
|
|
||||||
int c, rv;
|
|
||||||
bool dowrite = false;
|
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "w")) != -1) {
|
|
||||||
switch (c) {
|
|
||||||
case 'w':
|
|
||||||
dowrite = true;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
usage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
argc -= optind;
|
|
||||||
argv += optind;
|
|
||||||
|
|
||||||
if (argc != 2)
|
|
||||||
usage();
|
|
||||||
|
|
||||||
cap = cap_get_proc();
|
|
||||||
if (cap == NULL) {
|
|
||||||
fprintf(stderr, "cap_get_proc() returned %s!\n",
|
|
||||||
strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
cap_get_flag(cap, CAP_SYS_ADMIN, CAP_EFFECTIVE, &effective);
|
|
||||||
cap_get_flag(cap, CAP_SYS_ADMIN, CAP_PERMITTED, &permitted);
|
|
||||||
if ((effective != CAP_SET) && (permitted != CAP_SET)) {
|
|
||||||
fprintf(stderr, "E: missing 'cap_sys_admin' capability!\n"
|
|
||||||
"Please set it with: setcap cap_sys_admin=ep %s'\n",
|
|
||||||
argv[0]);
|
|
||||||
cap_free(cap);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
cap_free(cap);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Bind mount with nosuid.
|
|
||||||
*/
|
|
||||||
flags = MS_BIND | MS_NOSUID;
|
|
||||||
if (!dowrite)
|
|
||||||
flags |= MS_RDONLY;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check that uid/gid owns the dir and has rx perms on it.
|
|
||||||
*/
|
|
||||||
if (stat(argv[1], &st) == -1) {
|
|
||||||
fprintf(stderr, "ERROR: stat() on %s: %s\n",
|
|
||||||
argv[1], strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
if ((st.st_uid != getuid()) && (st.st_gid != getgid()) &&
|
|
||||||
(st.st_mode & (S_IRUSR|S_IXUSR|S_IRGRP|S_IXGRP))) {
|
|
||||||
fprintf(stderr, "ERROR: wrong permissions on %s!\n", argv[1]);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rv = mount(argv[0], argv[1], "none", flags, NULL);
|
|
||||||
if (rv != 0) {
|
|
||||||
fprintf(stderr, "E: cannot mount %s into %s: %s\n", argv[0],
|
|
||||||
argv[1], strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
exit(EXIT_SUCCESS);
|
|
||||||
}
|
|
|
@ -1,106 +0,0 @@
|
||||||
/*-
|
|
||||||
* Copyright (c) 2010-2011 Juan Romero Pardines.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Umounts a mounted filesystem mountpoint as regular user thanks to
|
|
||||||
* the CAP_SYS_ADMIN capability flag set on the file. The following
|
|
||||||
* arguments are expected: <masterdir> <dir>.
|
|
||||||
*
|
|
||||||
* As security measure it only accepts to unmount a mount point
|
|
||||||
* when the "status" file has been previously written in the masterdir.
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/mount.h>
|
|
||||||
#include <sys/capability.h>
|
|
||||||
|
|
||||||
#define _PROGNAME "xbps-src-chroot-capumount"
|
|
||||||
|
|
||||||
void
|
|
||||||
usage(void)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Usage: %s <masterdir> <dir>\n", _PROGNAME);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
cap_t cap;
|
|
||||||
cap_flag_value_t effective, permitted;
|
|
||||||
char bindf[PATH_MAX - 1];
|
|
||||||
int rv;
|
|
||||||
|
|
||||||
if (argc != 3)
|
|
||||||
usage();
|
|
||||||
|
|
||||||
cap = cap_get_proc();
|
|
||||||
if (cap == NULL) {
|
|
||||||
fprintf(stderr, "cap_get_proc() returned %s!\n",
|
|
||||||
strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
cap_get_flag(cap, CAP_SYS_ADMIN, CAP_EFFECTIVE, &effective);
|
|
||||||
cap_get_flag(cap, CAP_SYS_ADMIN, CAP_PERMITTED, &permitted);
|
|
||||||
if ((effective != CAP_SET) && (permitted != CAP_SET)) {
|
|
||||||
fprintf(stderr, "E: missing 'cap_sys_admin' capability!\n"
|
|
||||||
"Please set it with: setcap cap_sys_admin=ep %s'\n",
|
|
||||||
argv[0]);
|
|
||||||
cap_free(cap);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
cap_free(cap);
|
|
||||||
|
|
||||||
/* Check that status file exists in masterdir */
|
|
||||||
rv = snprintf(bindf, sizeof(bindf), "%s/.%s_mount_bind_done",
|
|
||||||
argv[1], argv[2]);
|
|
||||||
if (rv < 0 || rv >= sizeof(bindf))
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
|
|
||||||
if (access(bindf, R_OK) == -1) {
|
|
||||||
fprintf(stderr, "E: cannot umount %s/%s, missing "
|
|
||||||
"status file\n", argv[1], argv[2]);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Security check passed, continue mounting */
|
|
||||||
rv = snprintf(bindf, sizeof(bindf), "%s/%s", argv[1], argv[2]);
|
|
||||||
if (rv < 0 || rv >= sizeof(bindf))
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
|
|
||||||
if ((rv = umount(bindf)) != 0) {
|
|
||||||
fprintf(stderr, "E: cannot umount %s: %s\n", argv[1],
|
|
||||||
strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
exit(EXIT_SUCCESS);
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
include ../vars.mk
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
|
||||||
-rm -f $(SCRIPTS)
|
|
||||||
|
|
||||||
.PHONY: install
|
|
||||||
install:
|
|
||||||
install -d $(DESTDIR)$(SHAREDIR)/shutils
|
|
||||||
install -m 644 *.sh $(DESTDIR)$(SHAREDIR)/shutils
|
|
||||||
|
|
||||||
.PHONY: uninstall
|
|
||||||
uninstall:
|
|
||||||
-rm -rf $(DESTDIR)$(SHAREDIR)/shutils
|
|
|
@ -1,73 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2008-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
#
|
|
||||||
# Runs the "build" phase for a pkg. This builds the binaries and other
|
|
||||||
# related stuff.
|
|
||||||
#
|
|
||||||
build_src_phase()
|
|
||||||
{
|
|
||||||
local rval
|
|
||||||
|
|
||||||
[ -z $pkgname -o -z $version ] && return 1
|
|
||||||
|
|
||||||
# Skip this phase for meta-template style builds.
|
|
||||||
[ -n "$build_style" -a "$build_style" = "meta-template" ] && return 0
|
|
||||||
|
|
||||||
[ ! -d $wrksrc ] && msg_error "unexistent build directory [$wrksrc]\n"
|
|
||||||
|
|
||||||
cd $wrksrc || return 1
|
|
||||||
if [ -n "$build_wrksrc" ]; then
|
|
||||||
cd $build_wrksrc || return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$XBPS_MAKEJOBS" -a -z "$disable_parallel_build" ]; then
|
|
||||||
makejobs="-j$XBPS_MAKEJOBS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Run pre_build func.
|
|
||||||
if [ ! -f $XBPS_PRE_BUILD_DONE ]; then
|
|
||||||
run_func pre_build
|
|
||||||
[ $? -eq 0 ] && touch -f $XBPS_PRE_BUILD_DONE
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -r $XBPS_HELPERSDIR/${build_style}.sh ]; then
|
|
||||||
. $XBPS_HELPERSDIR/${build_style}.sh
|
|
||||||
fi
|
|
||||||
|
|
||||||
# do_build()
|
|
||||||
run_func do_build
|
|
||||||
rval=$?
|
|
||||||
|
|
||||||
# Run post_build func.
|
|
||||||
if [ ! -f $XBPS_POST_BUILD_DONE ]; then
|
|
||||||
run_func post_build
|
|
||||||
[ $? -eq 0 ] && touch -f $XBPS_POST_BUILD_DONE
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ "$rval" -eq 0 ] && touch -f $XBPS_BUILD_DONE
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
|
@ -1,319 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2008-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
#
|
|
||||||
# Install a required package dependency, like:
|
|
||||||
#
|
|
||||||
# xbps-bin -Ay install "pattern"
|
|
||||||
#
|
|
||||||
install_pkg_from_repos()
|
|
||||||
{
|
|
||||||
local rval tmplogf tmpdepf
|
|
||||||
|
|
||||||
msg_normal "$pkgver: installing '$1'... "
|
|
||||||
|
|
||||||
case "${XBPS_VERSION}" in
|
|
||||||
0.1[1-9].[0-9]*)
|
|
||||||
_pkgdepname=$($XBPS_PKGDB_CMD getpkgdepname "$1")
|
|
||||||
$XBPS_REPO_CMD -oversion show ${_pkgdepname} >/dev/null 2>&1
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
msg_normal_append "not found, building from source...\n"
|
|
||||||
return 2
|
|
||||||
fi
|
|
||||||
_pkgver=$($XBPS_REPO_CMD} -oversion show ${_pkgdepname})
|
|
||||||
msg_normal_append "found ${_pkgver} "
|
|
||||||
$XBPS_PKGDB_CMD pkgmatch "${_pkgdepname}-${_pkgver}" "${1}"
|
|
||||||
if [ $? -eq 1 ]; then
|
|
||||||
_repoloc=$($XBPS_REPO_CMD} -orepository show ${_pkgdepname})
|
|
||||||
msg_normal_append "(${_repoloc})\n"
|
|
||||||
else
|
|
||||||
msg_normal_append "not matched, building from source...\n"
|
|
||||||
return 2
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*) msg_normal_append "\n";;
|
|
||||||
esac
|
|
||||||
|
|
||||||
tmplogf=$(mktemp)
|
|
||||||
$FAKEROOT_CMD $FAKEROOT_CMD_ARGS $XBPS_BIN_CMD -Ay install ${_pkgdepname} >$tmplogf 2>&1
|
|
||||||
rval=$?
|
|
||||||
if [ $rval -ne 0 -a $rval -ne 6 ]; then
|
|
||||||
# xbps-bin can return:
|
|
||||||
#
|
|
||||||
# SUCCESS (0): package installed successfully.
|
|
||||||
# ENOENT (2): package missing in repositories.
|
|
||||||
# EEXIST (6): package already installed.
|
|
||||||
# ENODEV (19): package depends on missing dependencies.
|
|
||||||
#
|
|
||||||
# Any other error returned is critical.
|
|
||||||
autoremove_pkg_dependencies $KEEP_AUTODEPS
|
|
||||||
msg_red "$pkgver: failed to install '$1' dependency! (error $rval)\n"
|
|
||||||
cat $tmplogf && rm -f $tmplogf
|
|
||||||
msg_error "Please see above for the real error, exiting...\n"
|
|
||||||
fi
|
|
||||||
rm -f $tmplogf
|
|
||||||
|
|
||||||
return $rval
|
|
||||||
}
|
|
||||||
|
|
||||||
autoremove_pkg_dependencies()
|
|
||||||
{
|
|
||||||
local cmd curpkgname f
|
|
||||||
|
|
||||||
[ -n "$1" ] && return 0
|
|
||||||
|
|
||||||
cmd="${FAKEROOT_CMD} ${FAKEROOT_CMD_ARGS} ${XBPS_BIN_CMD}"
|
|
||||||
|
|
||||||
# If XBPS_PREFER_BINPKG_DEPS is set, we should remove those
|
|
||||||
# package dependencies installed by the target package, do it.
|
|
||||||
#
|
|
||||||
if [ -n "$XBPS_PREFER_BINPKG_DEPS" -a -z "$bootstrap" ]; then
|
|
||||||
msg_normal "$pkgver: removing automatically installed dependencies ...\n"
|
|
||||||
# Autoremove installed binary packages.
|
|
||||||
${cmd} -y reconfigure all && ${cmd} -Rpyf autoremove
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
msg_red "$pkgver: failed to remove automatic dependencies!\n"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Recursive function that installs all direct and indirect
|
|
||||||
# dependencies of a package.
|
|
||||||
#
|
|
||||||
install_pkg_deps()
|
|
||||||
{
|
|
||||||
local curpkg="$1"
|
|
||||||
local curpkgname=$(${XBPS_PKGDB_CMD} getpkgdepname "$1")
|
|
||||||
local saved_prevpkg=$(${XBPS_PKGDB_CMD} getpkgdepname "$2")
|
|
||||||
local j jver jname reqver
|
|
||||||
|
|
||||||
[ -z "$curpkg" -o -z "$curpkgname" ] && return 2
|
|
||||||
|
|
||||||
if [ -n "$prev_pkg" ]; then
|
|
||||||
curpkg=$prev_pkg
|
|
||||||
curpkgname="$(${XBPS_PKGDB_CMD} getpkgdepname ${curpkg})"
|
|
||||||
fi
|
|
||||||
|
|
||||||
check_pkgdep_matched "$curpkg"
|
|
||||||
[ $? -eq 0 ] && return 0
|
|
||||||
|
|
||||||
if [ -z "$saved_prevpkg" -a -n "${_ORIGINPKG}" ]; then
|
|
||||||
msg_normal "Installing ${_ORIGINPKG} dependency: '$curpkg'.\n"
|
|
||||||
else
|
|
||||||
msg_normal "Installing $saved_prevpkg dependency: '$curpkg'.\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
setup_tmpl "$curpkgname"
|
|
||||||
check_build_depends_pkg
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
msg_normal "Package '$curpkgname' requires:\n"
|
|
||||||
for j in ${build_depends}; do
|
|
||||||
jname="$(${XBPS_PKGDB_CMD} getpkgdepname ${j})"
|
|
||||||
jver="$($XBPS_PKGDB_CMD version ${jname})"
|
|
||||||
check_pkgdep_matched "${j}"
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo " ${j}: found '$jname-$jver'."
|
|
||||||
else
|
|
||||||
echo " ${j}: not found."
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
for j in ${build_depends}; do
|
|
||||||
prev_pkg="$j"
|
|
||||||
if [ -n "$XBPS_PREFER_BINPKG_DEPS" -a -z "$bootstrap" ]; then
|
|
||||||
install_pkg_from_repos "${j}"
|
|
||||||
if [ $? -eq 255 ]; then
|
|
||||||
# xbps-bin returned unexpected error
|
|
||||||
msg_red "$saved_prevpkg: failed to install '$j'\n"
|
|
||||||
elif [ $? -eq 0 ]; then
|
|
||||||
# package installed successfully.
|
|
||||||
:
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
#
|
|
||||||
# Iterate again, this will check if there are more
|
|
||||||
# required deps for current pkg.
|
|
||||||
#
|
|
||||||
install_pkg_deps "${j}" "${curpkg}"
|
|
||||||
if [ $? -eq 1 ]; then
|
|
||||||
if [ -n "$saved_prevpkg" ]; then
|
|
||||||
msg_red "$saved_prevpkg: failed to install '$curpkg'\n"
|
|
||||||
else
|
|
||||||
msg_red "${_ORIGINPKG}: failed to install '$curpkg'\n"
|
|
||||||
fi
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -n "$XBPS_PREFER_BINPKG_DEPS" -a -z "$bootstrap" ]; then
|
|
||||||
install_pkg_from_repos "${curpkg}"
|
|
||||||
if [ $? -eq 255 ]; then
|
|
||||||
# xbps-bin returned unexpected error
|
|
||||||
return $?
|
|
||||||
elif [ $? -eq 2 ]; then
|
|
||||||
# Package not found, build from source.
|
|
||||||
install_pkg "${curpkgname}"
|
|
||||||
if [ $? -eq 1 ]; then
|
|
||||||
msg_red "$saved_prevpkg: failed to install '$curpkg'\n"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if [ -n "$saved_prevpkg" ]; then
|
|
||||||
msg_normal "$saved_prevpkg: installing '$curpkg'...\n"
|
|
||||||
else
|
|
||||||
msg_normal "${_ORIGINPKG}: installing '$curpkg'...\n"
|
|
||||||
fi
|
|
||||||
install_pkg "${curpkgname}"
|
|
||||||
if [ $? -eq 1 ]; then
|
|
||||||
msg_red "$saved_prevpkg: failed to install '$curpkg'\n"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
unset prev_pkg
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Installs all dependencies required by a package.
|
|
||||||
#
|
|
||||||
install_dependencies_pkg()
|
|
||||||
{
|
|
||||||
local pkg="$1"
|
|
||||||
local i pkgn iver missing_deps
|
|
||||||
trap "msg_error 'interrupted\n'" INT
|
|
||||||
|
|
||||||
[ -z "$pkg" ] && return 2
|
|
||||||
[ -z "$build_depends" ] && return 0
|
|
||||||
|
|
||||||
INSTALLING_DEPS=1
|
|
||||||
|
|
||||||
msg_normal "$pkgver: required build dependencies...\n"
|
|
||||||
|
|
||||||
for i in ${build_depends}; do
|
|
||||||
pkgn=$($XBPS_PKGDB_CMD getpkgdepname "${i}")
|
|
||||||
iver=$($XBPS_PKGDB_CMD version "${pkgn}")
|
|
||||||
check_pkgdep_matched "${i}"
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo " ${i}: found '$pkgn-$iver'."
|
|
||||||
else
|
|
||||||
echo " ${i}: not found."
|
|
||||||
if [ -z "$missing_deps" ]; then
|
|
||||||
missing_deps="${i}"
|
|
||||||
else
|
|
||||||
missing_deps="${missing_deps} ${i}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
[ -z "$missing_deps" ] && return 0
|
|
||||||
|
|
||||||
# Install direct build dependencies from binary packages.
|
|
||||||
if [ -n "$XBPS_PREFER_BINPKG_DEPS" -a -z "$bootstrap" ]; then
|
|
||||||
msg_normal "$pkgver: installing dependencies from repositories ...\n"
|
|
||||||
for i in ${missing_deps}; do
|
|
||||||
install_pkg_from_repos "${i}"
|
|
||||||
if [ $? -eq 2 ]; then
|
|
||||||
# ENOENT; install from source
|
|
||||||
install_pkg_deps "${i}" "${pkg}" || return 1
|
|
||||||
curpkgdepname="$($XBPS_PKGDB_CMD getpkgdepname ${i})"
|
|
||||||
setup_tmpl $curpkgdepname
|
|
||||||
install_pkg $curpkgdepname
|
|
||||||
setup_tmpl $($XBPS_PKGDB_CMD getpkgname ${pkg})
|
|
||||||
install_dependencies_pkg "${pkg}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
else
|
|
||||||
# Install direct and indirect build dependencies from source.
|
|
||||||
for i in ${missing_deps}; do
|
|
||||||
install_pkg_deps "${i}" "${pkg}" || return 1
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# unregister sighandler.
|
|
||||||
trap - INT
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Returns 0 if pkgpattern in $1 is matched against current installed
|
|
||||||
# package, 1 otherwise.
|
|
||||||
#
|
|
||||||
check_pkgdep_matched()
|
|
||||||
{
|
|
||||||
local pkg="$1" pkgn iver
|
|
||||||
|
|
||||||
[ -z "$pkg" ] && return 2
|
|
||||||
|
|
||||||
pkgn="$($XBPS_PKGDB_CMD getpkgdepname ${pkg})"
|
|
||||||
[ -z "$pkgn" ] && return 2
|
|
||||||
|
|
||||||
iver="$($XBPS_PKGDB_CMD version $pkgn)"
|
|
||||||
if [ -n "$iver" ]; then
|
|
||||||
${XBPS_PKGDB_CMD} pkgmatch "${pkgn}-${iver}" "${pkg}"
|
|
||||||
[ $? -eq 1 ] && return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Returns 0 if pkgpattern in $1 is installed and greater than current
|
|
||||||
# installed package, otherwise 1.
|
|
||||||
#
|
|
||||||
check_installed_pkg()
|
|
||||||
{
|
|
||||||
local pkg="$1" pkgn iver
|
|
||||||
|
|
||||||
[ -z "$pkg" ] && return 2
|
|
||||||
|
|
||||||
pkgn="$($XBPS_PKGDB_CMD getpkgname ${pkg})"
|
|
||||||
[ -z "$pkgn" ] && return 2
|
|
||||||
|
|
||||||
iver="$($XBPS_PKGDB_CMD version $pkgn)"
|
|
||||||
if [ -n "$iver" ]; then
|
|
||||||
${XBPS_CMPVER_CMD} "${pkgn}-${iver}" "${pkg}"
|
|
||||||
[ $? -eq 0 -o $? -eq 1 ] && return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Returns 0 if pkg has build deps, 1 otherwise.
|
|
||||||
#
|
|
||||||
check_build_depends_pkg()
|
|
||||||
{
|
|
||||||
[ -z "$pkgname" ] && return 2
|
|
||||||
|
|
||||||
if [ -n "$build_depends" ]; then
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
|
@ -1,67 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2010 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
#
|
|
||||||
# Check installed package versions against the source packages repository.
|
|
||||||
#
|
|
||||||
|
|
||||||
# A simple wrapper to speed it up a bit.
|
|
||||||
Add_dependency() {
|
|
||||||
:
|
|
||||||
}
|
|
||||||
|
|
||||||
check_installed_packages()
|
|
||||||
{
|
|
||||||
local f lpkgn lpkgver rv srcpkgver srcver
|
|
||||||
|
|
||||||
for f in $(${XBPS_BIN_CMD} list|awk '{print $1}'); do
|
|
||||||
lpkgn=$(${XBPS_PKGDB_CMD} getpkgname ${f})
|
|
||||||
lpkgver=$(${XBPS_PKGDB_CMD} getpkgversion ${f})
|
|
||||||
|
|
||||||
if [ -r ${XBPS_SRCPKGDIR}/${lpkgn}/${lpkgn}.template ]; then
|
|
||||||
. ${XBPS_SRCPKGDIR}/${lpkgn}/template
|
|
||||||
unset revision
|
|
||||||
sourcepkg=$pkgname
|
|
||||||
. ${XBPS_SRCPKGDIR}/${lpkgn}/${lpkgn}.template
|
|
||||||
else
|
|
||||||
if [ ! -r ${XBPS_SRCPKGDIR}/${lpkgn}/template ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
. ${XBPS_SRCPKGDIR}/${lpkgn}/template
|
|
||||||
fi
|
|
||||||
if [ -n "$revision" ]; then
|
|
||||||
srcver="${version}_${revision}"
|
|
||||||
srcpkgver="${lpkgn}-${version}_${revision}"
|
|
||||||
else
|
|
||||||
srcver="${version}"
|
|
||||||
srcpkgver="${lpkgn}-${version}"
|
|
||||||
fi
|
|
||||||
${XBPS_CMPVER_CMD} ${f} ${srcpkgver}
|
|
||||||
rv=$?
|
|
||||||
if [ $rv -eq 255 ]; then
|
|
||||||
echo "${lpkgn} ${lpkgver} ${srcver}"
|
|
||||||
fi
|
|
||||||
unset pkgname version revision
|
|
||||||
done
|
|
||||||
}
|
|
|
@ -1,354 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2008-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
_mount()
|
|
||||||
{
|
|
||||||
MASTERDIR="${XBPS_MASTERDIR}" DISTRIBUTIONDIR="${XBPS_DISTRIBUTIONDIR}" \
|
|
||||||
HOSTDIR="${XBPS_HOSTDIR}" XBPS_ETCDIR="${XBPS_ETCDIR}" \
|
|
||||||
XBPS_SHAREDIR="${XBPS_SHAREDIR}" ${SUDO_CMD} \
|
|
||||||
${XBPS_LIBEXECDIR}/chroot-helper.sh mount
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
_umount()
|
|
||||||
{
|
|
||||||
MASTERDIR="${XBPS_MASTERDIR}" DISTRIBUTIONDIR="${XBPS_DISTRIBUTIONDIR}" \
|
|
||||||
HOSTDIR="${XBPS_HOSTDIR}" XBPS_ETCDIR="${XBPS_ETCDIR}" \
|
|
||||||
XBPS_SHAREDIR="${XBPS_SHAREDIR}" ${SUDO_CMD} \
|
|
||||||
${XBPS_LIBEXECDIR}/chroot-helper.sh umount
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
chroot_init()
|
|
||||||
{
|
|
||||||
trap "_umount && return $?" 0 INT QUIT TERM
|
|
||||||
|
|
||||||
[ -n "$bootstrap" ] && return 0
|
|
||||||
|
|
||||||
if [ "${CHROOT_CMD}" = "chroot" ]; then
|
|
||||||
if [ "$(id -u)" -ne 0 ]; then
|
|
||||||
msg_error "Root permissions are required for the chroot, try again."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
check_installed_pkg base-chroot-0.11
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "${XBPS_MASTERDIR} has not been prepared for chroot operations."
|
|
||||||
echo "Please install 'base-chroot>=0.11' and try again."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_normal "Entering into the chroot on $XBPS_MASTERDIR.\n"
|
|
||||||
|
|
||||||
if [ ! -d $XBPS_MASTERDIR/usr/local/etc ]; then
|
|
||||||
mkdir -p $XBPS_MASTERDIR/usr/local/etc
|
|
||||||
fi
|
|
||||||
|
|
||||||
XBPSSRC_CF=$XBPS_MASTERDIR/usr/local/etc/xbps/xbps-src.conf
|
|
||||||
|
|
||||||
cat > $XBPSSRC_CF <<_EOF
|
|
||||||
# Generated configuration file by xbps-src, DO NOT EDIT!
|
|
||||||
XBPS_DISTRIBUTIONDIR=/xbps
|
|
||||||
XBPS_MASTERDIR=/
|
|
||||||
XBPS_CFLAGS="$XBPS_CFLAGS"
|
|
||||||
XBPS_CXXFLAGS="$XBPS_CFLAGS"
|
|
||||||
XBPS_LDFLAGS="$XBPS_LDFLAGS"
|
|
||||||
XBPS_FETCH_CMD="xbps-uhelper.static fetch"
|
|
||||||
XBPS_COMPRESS_CMD="$XBPS_COMPRESS_CMD"
|
|
||||||
_EOF
|
|
||||||
|
|
||||||
if [ -n "$XBPS_MAKEJOBS" ]; then
|
|
||||||
echo "XBPS_MAKEJOBS=$XBPS_MAKEJOBS" >> $XBPSSRC_CF
|
|
||||||
fi
|
|
||||||
if [ -n "$XBPS_PREFER_BINPKG_DEPS" ]; then
|
|
||||||
echo "XBPS_PREFER_BINPKG_DEPS=$XBPS_PREFER_BINPKG_DEPS" >> $XBPSSRC_CF
|
|
||||||
fi
|
|
||||||
if [ -n "$XBPS_COMPRESS_LEVEL" ]; then
|
|
||||||
echo "XBPS_COMPRESS_LEVEL=$XBPS_COMPRESS_LEVEL" >> $XBPSSRC_CF
|
|
||||||
fi
|
|
||||||
if [ -n "$XBPS_HOSTDIR" ]; then
|
|
||||||
echo "XBPS_HOSTDIR=/host" >> $XBPSSRC_CF
|
|
||||||
fi
|
|
||||||
if [ -n "$XBPS_CCACHE" ]; then
|
|
||||||
echo "XBPS_CCACHE=$XBPS_CCACHE" >> $XBPSSRC_CF
|
|
||||||
fi
|
|
||||||
echo "# End of configuration file." >> $XBPSSRC_CF
|
|
||||||
|
|
||||||
if [ -d $XBPS_MASTERDIR/tmp ]; then
|
|
||||||
if [ ! -f $XBPS_MASTERDIR/.xbps_mount_bind_done ]; then
|
|
||||||
msg_normal "Cleaning up /tmp...\n"
|
|
||||||
[ -h ${XBPS_MASTERDIR}/tmp ] || rm -rf $XBPS_MASTERDIR/tmp/*
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create custom script to start the chroot bash shell.
|
|
||||||
cat > $XBPS_MASTERDIR/bin/xbps-shell <<_EOF
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
. /usr/local/etc/xbps/xbps-src.conf
|
|
||||||
. /usr/local/share/xbps-src/shutils/init_funcs.sh
|
|
||||||
set_defvars
|
|
||||||
|
|
||||||
PATH=/tools/bin:/usr/local/sbin:/bin:/usr/bin:/sbin
|
|
||||||
PATH=\$PATH:/usr/local/bin:/usr/lib/perl5/core_perl/bin
|
|
||||||
export PATH
|
|
||||||
|
|
||||||
exec env PS1="[\u@masterdir-chroot \W]$ " /bin/bash
|
|
||||||
_EOF
|
|
||||||
chmod 755 $XBPS_MASTERDIR/bin/xbps-shell
|
|
||||||
}
|
|
||||||
|
|
||||||
prepare_chroot()
|
|
||||||
{
|
|
||||||
local f
|
|
||||||
|
|
||||||
# Create some required files.
|
|
||||||
cp -f /etc/mtab $XBPS_MASTERDIR/etc
|
|
||||||
cp -f /etc/resolv.conf $XBPS_MASTERDIR/etc
|
|
||||||
[ -f /etc/localtime ] && cp -f /etc/localtime $XBPS_MASTERDIR/etc
|
|
||||||
|
|
||||||
for f in run/utmp log/btmp log/lastlog log/wtmp; do
|
|
||||||
touch -f $XBPS_MASTERDIR/var/$f
|
|
||||||
done
|
|
||||||
for f in run/utmp log/lastlog; do
|
|
||||||
chmod 644 $XBPS_MASTERDIR/var/$f
|
|
||||||
done
|
|
||||||
[ ! -d $XBPS_MASTERDIR/boot ] && mkdir -p $XBPS_MASTERDIR/boot
|
|
||||||
|
|
||||||
cat > $XBPS_MASTERDIR/etc/passwd <<_EOF
|
|
||||||
root:x:0:0:root:/root:/bin/bash
|
|
||||||
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
|
|
||||||
$(whoami):x:$(id -u):$(id -g):$(whoami) user:/dev/null:/bin/bash
|
|
||||||
_EOF
|
|
||||||
|
|
||||||
# Default group list as specified by LFS.
|
|
||||||
cat > $XBPS_MASTERDIR/etc/group <<_EOF
|
|
||||||
root:x:0:
|
|
||||||
bin:x:1:
|
|
||||||
sys:x:2:
|
|
||||||
kmem:x:3:
|
|
||||||
wheel:x:4:
|
|
||||||
tty:x:5:
|
|
||||||
tape:x:6:
|
|
||||||
daemon:x:7:
|
|
||||||
floppy:x:8:
|
|
||||||
disk:x:9:
|
|
||||||
lp:x:10:
|
|
||||||
dialout:x:11:
|
|
||||||
audio:x:12:
|
|
||||||
video:x:13:
|
|
||||||
utmp:x:14:
|
|
||||||
usb:x:15:
|
|
||||||
cdrom:x:16:
|
|
||||||
optical:x:17:
|
|
||||||
mail:x:18:
|
|
||||||
storage:x:19:
|
|
||||||
scanner:x:20:
|
|
||||||
nogroup:x:99:
|
|
||||||
users:x:1000:
|
|
||||||
$(whoami):x:$(id -g):
|
|
||||||
_EOF
|
|
||||||
|
|
||||||
# Default file as in Ubuntu.
|
|
||||||
cat > $XBPS_MASTERDIR/etc/hosts <<_EOF
|
|
||||||
127.0.0.1 xbps localhost.localdomain localhost
|
|
||||||
127.0.1.1 xbps
|
|
||||||
|
|
||||||
# The following lines are desirable for IPv6 capable hosts
|
|
||||||
::1 ip6-localhost ip6-loopback
|
|
||||||
fe00::0 ip6-localnet
|
|
||||||
ff00::0 ip6-mcastprefix
|
|
||||||
ff02::1 ip6-allnodes
|
|
||||||
ff02::2 ip6-allrouters
|
|
||||||
ff02::3 ip6-allhosts
|
|
||||||
_EOF
|
|
||||||
|
|
||||||
create_binsh_symlink
|
|
||||||
|
|
||||||
touch $XBPS_MASTERDIR/.xbps_perms_done
|
|
||||||
}
|
|
||||||
|
|
||||||
create_binsh_symlink()
|
|
||||||
{
|
|
||||||
if [ ! -h $XBPS_MASTERDIR/bin/sh ]; then
|
|
||||||
cd $XBPS_MASTERDIR/bin
|
|
||||||
if [ -x bash ]; then
|
|
||||||
ln -sf bash sh
|
|
||||||
elif [ -x dash ]; then
|
|
||||||
ln -sf dash sh
|
|
||||||
elif [ -x busybox ]; then
|
|
||||||
ln -sf busybox sh
|
|
||||||
else
|
|
||||||
msg_error "cannot find a suitable shell for chroot!\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
prepare_binpkg_repos()
|
|
||||||
{
|
|
||||||
local repo CONF_FILE
|
|
||||||
|
|
||||||
case "${XBPS_VERSION}" in
|
|
||||||
0.1[0-9].[0-9]*)
|
|
||||||
mkdir -p ${XBPS_MASTERDIR}/usr/local/etc/xbps
|
|
||||||
for f in /etc /usr/local/etc; do
|
|
||||||
for conf in conf repositories; do
|
|
||||||
if [ ! -f $XBPS_MASTERDIR/usr/local/etc/xbps/${conf}.plist ]; then
|
|
||||||
[ -d $f ] && cp -f $f/xbps/${conf}.plist \
|
|
||||||
${XBPS_MASTERDIR}/usr/local/etc/xbps
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
msg_normal "Synchronizing index for remote repositories...\n"
|
|
||||||
${XBPS_REPO_CMD} sync 2>/dev/null
|
|
||||||
;;
|
|
||||||
0.[89].[0-9]*)
|
|
||||||
CONF_FILE=$XBPS_MASTERDIR/usr/local/etc/xbps-conf.plist
|
|
||||||
for f in /etc /usr/local/etc; do
|
|
||||||
if [ -f $f/xbps-conf.plist -a \
|
|
||||||
! -f $CONF_FILE ]; then
|
|
||||||
cp -f $f/xbps-conf.plist \
|
|
||||||
${XBPS_MASTERDIR}/usr/local/etc
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
# XBPS utils >= 0.9.0.
|
|
||||||
msg_normal "Synchronizing index for remote repositories...\n"
|
|
||||||
${XBPS_REPO_CMD} sync
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
for repo in ${XBPS_REPO_LIST}; do
|
|
||||||
${XBPS_REPO_CMD} add ${repo} 2>/dev/null
|
|
||||||
[ $? -ne 0 ] && \
|
|
||||||
msg_warn "Failed to sync pkg-index from ${repo}\n"
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
create_busybox_links()
|
|
||||||
{
|
|
||||||
local lbindir=$XBPS_MASTERDIR/usr/local/bin
|
|
||||||
|
|
||||||
[ ! -d ${lbindir} ] && mkdir -p ${lbindir}
|
|
||||||
|
|
||||||
# Create other symlinks in /usr/local/bin
|
|
||||||
cd ${lbindir} || return 1
|
|
||||||
|
|
||||||
for f in $(${XBPS_MASTERDIR}/bin/busybox --list); do
|
|
||||||
if [ "$f" = "tar" -o "$f" = "sh" -o "$f" = "xz" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
ln -sf ../../../bin/busybox $f
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
install_xbps_utils()
|
|
||||||
{
|
|
||||||
local needed _cmd
|
|
||||||
local xbps_prefix=$XBPS_MASTERDIR/usr/local
|
|
||||||
|
|
||||||
if [ ! -f ${XBPS_MASTERDIR}/.xbps_utils_done ]; then
|
|
||||||
echo "=> Installing static XBPS utils into masterdir."
|
|
||||||
for f in bin repo uhelper; do
|
|
||||||
_cmd=$(which xbps-${f}.static 2>/dev/null)
|
|
||||||
if [ -z "${_cmd}" ]; then
|
|
||||||
echo "Unexistent xbps-uhelper.static file!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
cp -f ${_cmd} $xbps_prefix/sbin
|
|
||||||
done
|
|
||||||
touch ${XBPS_MASTERDIR}/.xbps_utils_done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
install_xbps_src()
|
|
||||||
{
|
|
||||||
set -e
|
|
||||||
install -Dm755 ${XBPS_SBINDIR}/xbps-src \
|
|
||||||
${XBPS_MASTERDIR}/usr/local/sbin/xbps-src
|
|
||||||
install -Dm755 ${XBPS_LIBEXECDIR}/doinst-helper.sh \
|
|
||||||
${XBPS_MASTERDIR}/usr/local/libexec/xbps-src/doinst-helper.sh
|
|
||||||
install -d ${XBPS_MASTERDIR}/usr/local/share/xbps-src/shutils
|
|
||||||
install -m644 ${XBPS_SHAREDIR}/shutils/*.sh \
|
|
||||||
${XBPS_MASTERDIR}/usr/local/share/xbps-src/shutils
|
|
||||||
install -d ${XBPS_MASTERDIR}/usr/local/share/xbps-src/common
|
|
||||||
install -m644 ${XBPS_SHAREDIR}/common/* \
|
|
||||||
${XBPS_MASTERDIR}/usr/local/share/xbps-src/common
|
|
||||||
install -d ${XBPS_MASTERDIR}/usr/local/share/xbps-src/helpers
|
|
||||||
install -m644 ${XBPS_SHAREDIR}/helpers/*.sh \
|
|
||||||
${XBPS_MASTERDIR}/usr/local/share/xbps-src/helpers
|
|
||||||
set +e
|
|
||||||
}
|
|
||||||
|
|
||||||
xbps_chroot_handler()
|
|
||||||
{
|
|
||||||
local action="$1" pkg="$2" rv=0 arg
|
|
||||||
|
|
||||||
[ -z "$action" -a -z "$pkg" ] && return 1
|
|
||||||
|
|
||||||
if [ ! -f $XBPS_MASTERDIR/.xbps_perms_done ]; then
|
|
||||||
echo -n "==> Preparing chroot on $XBPS_MASTERDIR... "
|
|
||||||
prepare_chroot
|
|
||||||
echo "done."
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ ! -d "$XBPS_MASTERDIR/tmp" ] && mkdir -p "$XBPS_MASTERDIR/tmp"
|
|
||||||
|
|
||||||
chroot_init
|
|
||||||
create_binsh_symlink
|
|
||||||
create_busybox_links
|
|
||||||
install_xbps_utils
|
|
||||||
install_xbps_src
|
|
||||||
|
|
||||||
_mount || return $?
|
|
||||||
|
|
||||||
if [ -n "$XBPS_PREFER_BINPKG_DEPS" ]; then
|
|
||||||
prepare_binpkg_repos
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Update ld.so(8) cache
|
|
||||||
msg_normal "Updating ld.so(8) cache...\n"
|
|
||||||
${CHROOT_CMD} $XBPS_MASTERDIR sh -c "ldconfig" || return $?
|
|
||||||
|
|
||||||
if [ "$action" = "chroot" ]; then
|
|
||||||
env IN_CHROOT=1 LANG=C \
|
|
||||||
${CHROOT_CMD} $XBPS_MASTERDIR /bin/xbps-shell || rv=$?
|
|
||||||
else
|
|
||||||
[ -n "$KEEP_WRKSRC" ] && arg="$arg -C"
|
|
||||||
[ -n "$KEEP_AUTODEPS" ] && arg="$arg -K"
|
|
||||||
[ -n "$DESTDIR_ONLY_INSTALL" ] && arg="$arg -D"
|
|
||||||
[ -n "$BUILD_BINPKG" ] && arg="$arg -B"
|
|
||||||
|
|
||||||
action="$arg $action"
|
|
||||||
env in_chroot=1 IN_CHROOT=1 LANG=C _ORIGINPKG="$pkg" \
|
|
||||||
${CHROOT_CMD} $XBPS_MASTERDIR sh -c \
|
|
||||||
"xbps-src $action $pkg" || rv=$?
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_normal "Exiting from the chroot on $XBPS_MASTERDIR.\n"
|
|
||||||
|
|
||||||
return $rv
|
|
||||||
}
|
|
|
@ -1,159 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2008-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
#
|
|
||||||
# Common functions for xbps.
|
|
||||||
#
|
|
||||||
run_func_error()
|
|
||||||
{
|
|
||||||
local func="$1"
|
|
||||||
|
|
||||||
remove_pkgdestdir_sighandler ${pkgname} $KEEP_AUTODEPS
|
|
||||||
echo
|
|
||||||
msg_error "$pkgver: '$func' interrupted!\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_pkgdestdir_sighandler()
|
|
||||||
{
|
|
||||||
local subpkg _pkgname="$1" _kwrksrc="$2"
|
|
||||||
|
|
||||||
setup_tmpl ${_pkgname}
|
|
||||||
[ -z "$sourcepkg" ] && return 0
|
|
||||||
|
|
||||||
# If there is any problem in the middle of writting the metadata,
|
|
||||||
# just remove all files from destdir of pkg.
|
|
||||||
|
|
||||||
for subpkg in ${subpackages}; do
|
|
||||||
if [ -d "$XBPS_DESTDIR/${subpkg}-${version%_*}" ]; then
|
|
||||||
rm -rf "$XBPS_DESTDIR/${subpkg}-${version%_*}"
|
|
||||||
fi
|
|
||||||
if [ -f ${wrksrc}/.xbps_do_install_${subpkg}_done ]; then
|
|
||||||
rm -f ${wrksrc}/.xbps_do_install_${subpkg}_done
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -d "$XBPS_DESTDIR/${sourcepkg}-${version%_*}" ]; then
|
|
||||||
rm -rf "$XBPS_DESTDIR/${sourcepkg}-${version%_*}"
|
|
||||||
msg_red "$pkgver: removed files from DESTDIR...\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
autoremove_pkg_dependencies ${_kwrksrc}
|
|
||||||
}
|
|
||||||
|
|
||||||
run_func()
|
|
||||||
{
|
|
||||||
local rval logpipe logfile
|
|
||||||
|
|
||||||
[ -z "$1" ] && return 1
|
|
||||||
|
|
||||||
if type ${1} >/dev/null 2>&1; then
|
|
||||||
logpipe=/tmp/xbps_src_logpipe.$$
|
|
||||||
if [ -d "${wrksrc}" ]; then
|
|
||||||
logfile=${wrksrc}/.xbps_${1}.log
|
|
||||||
else
|
|
||||||
logfile=$(mktemp -t xbps_${1}_${pkgname}.log.XXXXXXXX)
|
|
||||||
fi
|
|
||||||
mkfifo "$logpipe"
|
|
||||||
exec 3>&1
|
|
||||||
tee "$logfile" < "$logpipe" &
|
|
||||||
exec 1>"$logpipe" 2>"$logpipe"
|
|
||||||
set -e
|
|
||||||
trap "run_func_error $1 && return $?" INT
|
|
||||||
msg_normal "$pkgver: running $1 phase...\n"
|
|
||||||
$1 2>&1
|
|
||||||
rval=$?
|
|
||||||
set +e
|
|
||||||
trap - INT
|
|
||||||
exec 1>&3 2>&3 3>&-
|
|
||||||
rm -f "$logpipe"
|
|
||||||
if [ $rval -ne 0 ]; then
|
|
||||||
msg_error "$pkgver: $1 failed!\n"
|
|
||||||
else
|
|
||||||
msg_normal "$pkgver: $1 phase done.\n"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
return 255 # function not found.
|
|
||||||
}
|
|
||||||
|
|
||||||
msg_red()
|
|
||||||
{
|
|
||||||
# error messages in bold/red
|
|
||||||
printf >&2 "\033[1m\033[31m"
|
|
||||||
if [ -n "$IN_CHROOT" ]; then
|
|
||||||
printf >&2 "[chroot] => ERROR: $@"
|
|
||||||
else
|
|
||||||
printf >&2 "=> ERROR: $@"
|
|
||||||
fi
|
|
||||||
printf >&2 "\033[m"
|
|
||||||
}
|
|
||||||
|
|
||||||
msg_error()
|
|
||||||
{
|
|
||||||
msg_red "$@"
|
|
||||||
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
msg_error_nochroot()
|
|
||||||
{
|
|
||||||
printf >&2 "\033[1m\033[31m>= ERROR: $@\033[m"
|
|
||||||
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
msg_warn()
|
|
||||||
{
|
|
||||||
# warn messages in bold/yellow
|
|
||||||
printf >&2 "\033[1m\033[33m"
|
|
||||||
if [ -n "$IN_CHROOT" ]; then
|
|
||||||
printf >&2 "[chroot] => WARNING: $@"
|
|
||||||
else
|
|
||||||
printf >&2 "=> WARNING: $@"
|
|
||||||
fi
|
|
||||||
printf >&2 "\033[m"
|
|
||||||
}
|
|
||||||
|
|
||||||
msg_warn_nochroot()
|
|
||||||
{
|
|
||||||
printf >&2 "\033[1m\033[33m=> WARNING: $@\033[m"
|
|
||||||
}
|
|
||||||
|
|
||||||
msg_normal()
|
|
||||||
{
|
|
||||||
# normal messages in bold
|
|
||||||
printf "\033[1m"
|
|
||||||
if [ -n "$IN_CHROOT" ]; then
|
|
||||||
printf "[chroot] => $@"
|
|
||||||
else
|
|
||||||
printf "=> $@"
|
|
||||||
fi
|
|
||||||
printf "\033[m"
|
|
||||||
}
|
|
||||||
|
|
||||||
msg_normal_append()
|
|
||||||
{
|
|
||||||
printf "\033[1m$@\033[m"
|
|
||||||
}
|
|
|
@ -1,72 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2008-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
#
|
|
||||||
# Runs the "configure" phase for a pkg. This setups the Makefiles or any
|
|
||||||
# other stuff required to be able to build binaries or such.
|
|
||||||
#
|
|
||||||
export CONFIGURE_SHARED_ARGS="--prefix=/usr --sysconfdir=/etc \
|
|
||||||
--infodir=/usr/share/info --mandir=/usr/share/man \
|
|
||||||
--localstatedir=/var"
|
|
||||||
|
|
||||||
configure_src_phase()
|
|
||||||
{
|
|
||||||
local f rval
|
|
||||||
|
|
||||||
[ -z $pkgname ] && return 1
|
|
||||||
|
|
||||||
# Skip this phase for meta-template style builds.
|
|
||||||
[ -n "$build_style" -a "$build_style" = "meta-template" ] && return 0
|
|
||||||
|
|
||||||
cd $wrksrc || msg_error "unexistent build directory [$wrksrc].\n"
|
|
||||||
|
|
||||||
# Run pre_configure func.
|
|
||||||
if [ ! -f $XBPS_PRECONFIGURE_DONE ]; then
|
|
||||||
run_func pre_configure
|
|
||||||
[ $? -eq 0 ] && touch -f $XBPS_PRECONFIGURE_DONE
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $wrksrc || return 1
|
|
||||||
if [ -n "$build_wrksrc" ]; then
|
|
||||||
cd $build_wrksrc || return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -r $XBPS_HELPERSDIR/${build_style}.sh ]; then
|
|
||||||
. $XBPS_HELPERSDIR/${build_style}.sh
|
|
||||||
fi
|
|
||||||
# run do_configure()
|
|
||||||
run_func do_configure
|
|
||||||
rval=$?
|
|
||||||
|
|
||||||
# Run post_configure func.
|
|
||||||
if [ ! -f $XBPS_POSTCONFIGURE_DONE ]; then
|
|
||||||
run_func post_configure
|
|
||||||
[ $? -eq 0 ] && touch -f $XBPS_POSTCONFIGURE_DONE
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ "$rval" -eq 0 ] && touch -f $XBPS_CONFIGURE_DONE
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
|
@ -1,159 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2008-2010 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
#
|
|
||||||
# Extracts contents of distfiles specified in a template into
|
|
||||||
# the $wrksrc directory.
|
|
||||||
#
|
|
||||||
extract_distfiles()
|
|
||||||
{
|
|
||||||
local pkg="$1" curfile cursufx f
|
|
||||||
|
|
||||||
[ -f $XBPS_EXTRACT_DONE ] && return 0
|
|
||||||
[ -z "$IN_CHROOT" -a ! -w $XBPS_BUILDDIR ] && \
|
|
||||||
msg_error "can't extract distfile(s) (permission denied)\n"
|
|
||||||
|
|
||||||
#
|
|
||||||
# If we are being called via the target, just extract and return.
|
|
||||||
#
|
|
||||||
[ -n "$pkg" -a -z "$pkgname" ] && return 1
|
|
||||||
|
|
||||||
#
|
|
||||||
# If noextract is set, do a "fake extraction".
|
|
||||||
#
|
|
||||||
if [ -z "$distfiles" -o -n "$noextract" ]; then
|
|
||||||
[ ! -d "$wrksrc" ] && mkdir -p $wrksrc
|
|
||||||
run_func do_extract
|
|
||||||
touch -f $XBPS_EXTRACT_DONE
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check that distfiles are there before anything else.
|
|
||||||
for f in ${distfiles}; do
|
|
||||||
curfile=$(basename $f)
|
|
||||||
if [ ! -f ${XBPS_SRCDISTDIR}/${curfile} ]; then
|
|
||||||
msg_error "cannot find ${curfile}, use 'xbps-src fetch' first.\n"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -n "$create_wrksrc" ]; then
|
|
||||||
mkdir -p ${wrksrc} || return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_normal "$pkgver: extracting distfile(s), please wait...\n"
|
|
||||||
|
|
||||||
for f in ${distfiles}; do
|
|
||||||
curfile=$(basename $f)
|
|
||||||
|
|
||||||
if $(echo $f|grep -q '.tar.lzma'); then
|
|
||||||
cursufx="txz"
|
|
||||||
elif $(echo $f|grep -q '.tar.xz'); then
|
|
||||||
cursufx="txz"
|
|
||||||
elif $(echo $f|grep -q '.txz'); then
|
|
||||||
cursufx="txz"
|
|
||||||
elif $(echo $f|grep -q '.tar.bz2'); then
|
|
||||||
cursufx="tbz"
|
|
||||||
elif $(echo $f|grep -q '.tbz'); then
|
|
||||||
cursufx="tbz"
|
|
||||||
elif $(echo $f|grep -q '.tar.gz'); then
|
|
||||||
cursufx="tgz"
|
|
||||||
elif $(echo $f|grep -q '.tgz'); then
|
|
||||||
cursufx="tgz"
|
|
||||||
elif $(echo $f|grep -q '.gz'); then
|
|
||||||
cursufx="gz"
|
|
||||||
elif $(echo $f|grep -q '.bz2'); then
|
|
||||||
cursufx="bz2"
|
|
||||||
elif $(echo $f|grep -q '.tar'); then
|
|
||||||
cursufx="tar"
|
|
||||||
elif $(echo $f|grep -q '.zip'); then
|
|
||||||
cursufx="zip"
|
|
||||||
else
|
|
||||||
msg_error "unknown distfile suffix for $curfile.\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$create_wrksrc" ]; then
|
|
||||||
extractdir="$wrksrc"
|
|
||||||
else
|
|
||||||
extractdir="$XBPS_BUILDDIR"
|
|
||||||
fi
|
|
||||||
|
|
||||||
case ${cursufx} in
|
|
||||||
txz)
|
|
||||||
if ! command -v unxz 2>&1 >/dev/null; then
|
|
||||||
msg_error "cannot find xz for extraction.\n"
|
|
||||||
fi
|
|
||||||
unxz -cf $XBPS_SRCDISTDIR/$curfile | tar xf - -C $extractdir
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
msg_error "extracting $curfile into $XBPS_BUILDDIR.\n"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
tbz)
|
|
||||||
bunzip2 -cf $XBPS_SRCDISTDIR/$curfile | tar xf - -C $extractdir
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
msg_error "extracting $curfile into $XBPS_BUILDDIR.\n"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
tgz)
|
|
||||||
gunzip -cf $XBPS_SRCDISTDIR/$curfile | tar xf - -C $extractdir
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
msg_error "extracting $curfile into $XBPS_BUILDDIR.\n"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
gz|bz2)
|
|
||||||
cp -f $XBPS_SRCDISTDIR/$curfile $extractdir
|
|
||||||
if [ "$cursufx" = ".gz" ]; then
|
|
||||||
cd $XBPS_BUILDDIR && gunzip $curfile
|
|
||||||
else
|
|
||||||
cd $XBPS_BUILDDIR && bunzip2 $curfile
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
tar)
|
|
||||||
tar xf $XBPS_SRCDISTDIR/$curfile -C $extractdir
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
msg_error "extracting $curfile into $XBPS_BUILDDIR.\n"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
zip)
|
|
||||||
if command -v unzip 2>&1 >/dev/null; then
|
|
||||||
unzip -q $XBPS_SRCDISTDIR/$curfile -d $extractdir
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
msg_error "extracting $curfile into $XBPS_BUILDDIR.\n"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
msg_error "cannot find unzip bin for extraction.\n"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
msg_error "cannot guess $curfile extract suffix. ($cursufx)\n"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
touch -f $XBPS_FETCH_DONE
|
|
||||||
touch -f $XBPS_EXTRACT_DONE
|
|
||||||
|
|
||||||
run_func post_extract
|
|
||||||
return 0
|
|
||||||
}
|
|
|
@ -1,147 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2008-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
#
|
|
||||||
# Verifies that file's checksum downloaded matches what it's specified
|
|
||||||
# in template file.
|
|
||||||
#
|
|
||||||
verify_sha256_cksum()
|
|
||||||
{
|
|
||||||
local file="$1"
|
|
||||||
local origsum="$2"
|
|
||||||
|
|
||||||
[ -z "$file" -o -z "$cksum" ] && return 1
|
|
||||||
|
|
||||||
msg_normal "$pkgver: verifying checksum for distfile '$file'... "
|
|
||||||
filesum=$(${XBPS_DIGEST_CMD} $XBPS_SRCDISTDIR/$file)
|
|
||||||
if [ "$origsum" != "$filesum" ]; then
|
|
||||||
echo
|
|
||||||
msg_error "SHA256 mismatch for '$file:'\n$filesum\n"
|
|
||||||
fi
|
|
||||||
msg_normal_append "OK.\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Downloads the distfiles and verifies checksum for all them.
|
|
||||||
#
|
|
||||||
fetch_distfiles()
|
|
||||||
{
|
|
||||||
local pkg="$1" upcksum="$2" dfiles localurl dfcount=0 ckcount=0 f
|
|
||||||
|
|
||||||
[ -z $pkgname ] && return 1
|
|
||||||
|
|
||||||
#
|
|
||||||
# There's nothing of interest if we are a meta template.
|
|
||||||
#
|
|
||||||
[ -n "$build_style" -a "$build_style" = "meta-template" ] && return 0
|
|
||||||
|
|
||||||
[ -f "$XBPS_FETCH_DONE" ] && return 0
|
|
||||||
|
|
||||||
#
|
|
||||||
# If nofetch is set in a build template, skip this phase
|
|
||||||
# entirely and run the do_fetch() function.
|
|
||||||
#
|
|
||||||
if [ -n "$nofetch" ]; then
|
|
||||||
cd ${XBPS_BUILDDIR}
|
|
||||||
[ -n "$build_wrksrc" ] && mkdir -p "$wrksrc"
|
|
||||||
run_func do_fetch
|
|
||||||
touch -f $XBPS_FETCH_DONE
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $XBPS_SRCDISTDIR || return 1
|
|
||||||
for f in ${distfiles}; do
|
|
||||||
curfile=$(basename $f)
|
|
||||||
if [ -f "$XBPS_SRCDISTDIR/$curfile" ]; then
|
|
||||||
for i in ${checksum}; do
|
|
||||||
if [ $dfcount -eq $ckcount -a -n $i ]; then
|
|
||||||
cksum=$i
|
|
||||||
found=yes
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
ckcount=$(($ckcount + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z $found ]; then
|
|
||||||
msg_error "cannot find checksum for $curfile.\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
verify_sha256_cksum $curfile $cksum
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
unset cksum found
|
|
||||||
ckcount=0
|
|
||||||
dfcount=$(($dfcount + 1))
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_normal "$pkgver: fetching distfile '$curfile'...\n"
|
|
||||||
|
|
||||||
if [ -n "$distfiles" ]; then
|
|
||||||
localurl="$f"
|
|
||||||
else
|
|
||||||
localurl="$url/$curfile"
|
|
||||||
fi
|
|
||||||
|
|
||||||
$XBPS_FETCH_CMD $localurl
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
unset localurl
|
|
||||||
if [ ! -f $XBPS_SRCDISTDIR/$curfile ]; then
|
|
||||||
msg_error "couldn't fetch $curfile.\n"
|
|
||||||
else
|
|
||||||
msg_error "there was an error fetching $curfile.\n"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
unset localurl
|
|
||||||
#
|
|
||||||
# XXX duplicate code.
|
|
||||||
#
|
|
||||||
for i in ${checksum}; do
|
|
||||||
if [ $dfcount -eq $ckcount -a -n $i ]; then
|
|
||||||
cksum=$i
|
|
||||||
found=yes
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
ckcount=$(($ckcount + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z $found ]; then
|
|
||||||
msg_error "cannot find checksum for $curfile.\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
verify_sha256_cksum $curfile $cksum
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
unset cksum found
|
|
||||||
ckcount=0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dfcount=$(($dfcount + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
unset cksum found
|
|
||||||
}
|
|
|
@ -1,89 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2008-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
set_defvars()
|
|
||||||
{
|
|
||||||
local DDIRS i
|
|
||||||
|
|
||||||
XBPS_HELPERSDIR=${XBPS_SHAREDIR}/helpers
|
|
||||||
XBPS_SHUTILSDIR=${XBPS_SHAREDIR}/shutils
|
|
||||||
XBPS_META_PATH=$XBPS_MASTERDIR/var/db/xbps
|
|
||||||
XBPS_PKGMETADIR=$XBPS_META_PATH/metadata
|
|
||||||
XBPS_SRCPKGDIR=$XBPS_DISTRIBUTIONDIR/srcpkgs
|
|
||||||
XBPS_COMMONDIR=${XBPS_DISTRIBUTIONDIR}/common
|
|
||||||
|
|
||||||
if [ -n "$IN_CHROOT" ]; then
|
|
||||||
XBPS_DESTDIR=/destdir
|
|
||||||
XBPS_BUILDDIR=/builddir
|
|
||||||
else
|
|
||||||
XBPS_DESTDIR=$XBPS_MASTERDIR/destdir
|
|
||||||
XBPS_BUILDDIR=$XBPS_MASTERDIR/builddir
|
|
||||||
fi
|
|
||||||
if [ -n "$XBPS_HOSTDIR" ]; then
|
|
||||||
XBPS_PACKAGESDIR=$XBPS_HOSTDIR/binpkgs
|
|
||||||
XBPS_SRCDISTDIR=$XBPS_HOSTDIR/sources
|
|
||||||
else
|
|
||||||
XBPS_SRCDISTDIR=$XBPS_MASTERDIR/host/sources
|
|
||||||
XBPS_PACKAGESDIR=$XBPS_MASTERDIR/host/binpkgs
|
|
||||||
fi
|
|
||||||
XBPS_TRIGGERSDIR=$XBPS_SRCPKGDIR/xbps-triggers/files
|
|
||||||
|
|
||||||
DDIRS="DISTRIBUTIONDIR TRIGGERSDIR HELPERSDIR SRCPKGDIR SHUTILSDIR COMMONDIR"
|
|
||||||
for i in ${DDIRS}; do
|
|
||||||
eval val="\$XBPS_$i"
|
|
||||||
if [ ! -d "$val" ]; then
|
|
||||||
echo "ERROR: cannot find $i at $val aborting."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for i in DESTDIR PACKAGESDIR BUILDDIR SRCDISTDIR; do
|
|
||||||
eval val="\$XBPS_$i"
|
|
||||||
if [ ! -d "$val" ]; then
|
|
||||||
mdir=$(dirname $XBPS_MASTERDIR)
|
|
||||||
[ -z "$IN_CHROOT" -a "$mdir" = "/" ] && continue
|
|
||||||
mkdir -p $val
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
export XBPS_VERSION=$(xbps-bin.static -V|awk '{print $2}')
|
|
||||||
case "${XBPS_VERSION}" in
|
|
||||||
0.1[0-9].[0-9]*)
|
|
||||||
xbps_conf="-C $XBPS_MASTERDIR/usr/local/etc/xbps"
|
|
||||||
;;
|
|
||||||
0.[89].[0-9]*)
|
|
||||||
# XBPS < 0.10.0
|
|
||||||
xbps_conf="-C $XBPS_MASTERDIR/usr/local/etc/xbps-conf.plist"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
xbps_conf="$xbps_conf -c $XBPS_MASTERDIR/host/repocache"
|
|
||||||
|
|
||||||
export XBPS_PKGDB_CMD="xbps-uhelper.static -r $XBPS_MASTERDIR"
|
|
||||||
export XBPS_BIN_CMD="xbps-bin.static $xbps_conf -r $XBPS_MASTERDIR"
|
|
||||||
export XBPS_REPO_CMD="xbps-repo.static $xbps_conf -r $XBPS_MASTERDIR"
|
|
||||||
export XBPS_DIGEST_CMD="xbps-uhelper.static digest"
|
|
||||||
export XBPS_CMPVER_CMD="xbps-uhelper.static cmpver"
|
|
||||||
export XBPS_FETCH_CMD="xbps-uhelper.static fetch"
|
|
||||||
}
|
|
|
@ -1,117 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
vinstall()
|
|
||||||
{
|
|
||||||
local file="$1"
|
|
||||||
local mode="$2"
|
|
||||||
local targetdir="$3"
|
|
||||||
local targetfile="$4"
|
|
||||||
|
|
||||||
if [ -z "$DESTDIR" ]; then
|
|
||||||
msg_red "vinstall: DESTDIR unset, can't continue...\n"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $# -lt 3 ]; then
|
|
||||||
msg_red "vinstall: 3 arguments expected: <file> <mode> <target-directory>\n"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -r "$file" ]; then
|
|
||||||
msg_red "vinstall: cannot find '$file'...\n"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$targetfile" ]; then
|
|
||||||
install -Dm${mode} ${file} "${DESTDIR}/${targetdir}/$(basename ${file})"
|
|
||||||
else
|
|
||||||
install -Dm${mode} ${file} "${DESTDIR}/${targetdir}/$(basename ${targetfile})"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
vcopy()
|
|
||||||
{
|
|
||||||
local files=$1
|
|
||||||
local targetdir="$2"
|
|
||||||
|
|
||||||
if [ -z "$DESTDIR" ]; then
|
|
||||||
msg_red "vcopy: DESTDIR unset, can't continue...\n"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
if [ $# -ne 2 ]; then
|
|
||||||
msg_red "vcopy: 2 arguments expected: <files> <target-directory>\n"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cp -a $files ${DESTDIR}/${targetdir}
|
|
||||||
}
|
|
||||||
|
|
||||||
vmove()
|
|
||||||
{
|
|
||||||
local files=$1
|
|
||||||
local targetdir="$2"
|
|
||||||
|
|
||||||
if [ -z "$DESTDIR" ]; then
|
|
||||||
msg_red "vmove: DESTDIR unset, can't continue...\n"
|
|
||||||
return 1
|
|
||||||
elif [ -z "$SRCPKGDESTDIR" ]; then
|
|
||||||
msg_red "vmove: SRCPKGDESTDIR unset, can't continue...\n"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
if [ $# -lt 1 ]; then
|
|
||||||
msg_red "vmove: 1 argument expected: <files>\n"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
if [ -z "${targetdir}" ]; then
|
|
||||||
[ ! -d ${DESTDIR} ] && install -d ${DESTDIR}
|
|
||||||
mv ${SRCPKGDESTDIR}/$files ${DESTDIR}
|
|
||||||
else
|
|
||||||
[ ! -d ${DESTDIR}/${targetdir} ] && vmkdir ${targetdir}
|
|
||||||
mv ${SRCPKGDESTDIR}/$files ${DESTDIR}/${targetdir}
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
vmkdir()
|
|
||||||
{
|
|
||||||
local dir="$1"
|
|
||||||
local mode="$2"
|
|
||||||
|
|
||||||
if [ -z "$DESTDIR" ]; then
|
|
||||||
msg_red "vmkdir: DESTDIR unset, can't continue...\n"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$dir" ]; then
|
|
||||||
msg_red "vmkdir: directory argument unset.\n"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$mode" ]; then
|
|
||||||
install -d ${DESTDIR}/${dir}
|
|
||||||
else
|
|
||||||
install -dm${mode} ${DESTDIR}/${dir}
|
|
||||||
fi
|
|
||||||
}
|
|
|
@ -1,129 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2008-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
xbps_make_binpkg()
|
|
||||||
{
|
|
||||||
local subpkg
|
|
||||||
|
|
||||||
[ -z "$pkgname" ] && return 1
|
|
||||||
|
|
||||||
for subpkg in ${subpackages}; do
|
|
||||||
unset revision noarch nonfree
|
|
||||||
. $XBPS_SRCPKGDIR/$pkgname/$subpkg.template
|
|
||||||
pkgname=${subpkg}
|
|
||||||
set_tmpl_common_vars
|
|
||||||
xbps_make_binpkg_real
|
|
||||||
setup_tmpl ${sourcepkg}
|
|
||||||
done
|
|
||||||
|
|
||||||
[ -n "${subpackages}" ] && set_tmpl_common_vars
|
|
||||||
xbps_make_binpkg_real
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
binpkg_cleanup()
|
|
||||||
{
|
|
||||||
local pkgdir="$1" binpkg="$2"
|
|
||||||
|
|
||||||
[ -z "$pkgdir" -o -z "$binpkg" ] && return 1
|
|
||||||
msg_red "Interrupted! removing $binpkg file!\n"
|
|
||||||
rm -f $pkgdir/$binpkg
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# This function builds a binary package from an installed xbps
|
|
||||||
# package in destdir.
|
|
||||||
#
|
|
||||||
xbps_make_binpkg_real()
|
|
||||||
{
|
|
||||||
local mfiles binpkg pkgdir arch dirs _dirs d clevel
|
|
||||||
|
|
||||||
if [ ! -d "${DESTDIR}" ]; then
|
|
||||||
msg_warn "cannot find destdir for $pkgname... skipping!\n"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
cd ${DESTDIR}
|
|
||||||
|
|
||||||
if [ -n "$noarch" ]; then
|
|
||||||
arch=noarch
|
|
||||||
else
|
|
||||||
arch=$XBPS_MACHINE
|
|
||||||
fi
|
|
||||||
binpkg=$pkgver.$arch.xbps
|
|
||||||
if [ -n "$nonfree" ]; then
|
|
||||||
pkgdir=$XBPS_PACKAGESDIR/nonfree/$arch
|
|
||||||
else
|
|
||||||
pkgdir=$XBPS_PACKAGESDIR/$arch
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Don't overwrite existing binpkgs by default, skip them.
|
|
||||||
#
|
|
||||||
if [ -f $pkgdir/$binpkg ]; then
|
|
||||||
msg_normal "Skipping existing $binpkg pkg...\n"
|
|
||||||
return 6 # EEXIST
|
|
||||||
fi
|
|
||||||
|
|
||||||
#
|
|
||||||
# Make sure that INSTALL is the first file on the archive,
|
|
||||||
# this is to ensure that it's run before any other file is
|
|
||||||
# unpacked.
|
|
||||||
#
|
|
||||||
if [ -x ./INSTALL -a -x ./REMOVE ]; then
|
|
||||||
mfiles="./INSTALL ./REMOVE"
|
|
||||||
elif [ -x ./INSTALL ]; then
|
|
||||||
mfiles="./INSTALL"
|
|
||||||
elif [ -x ./REMOVE ]; then
|
|
||||||
mfiles="./REMOVE"
|
|
||||||
fi
|
|
||||||
mfiles="$mfiles ./files.plist ./props.plist"
|
|
||||||
_dirs=$(find . -maxdepth 1 -type d -o -type l)
|
|
||||||
for d in ${_dirs}; do
|
|
||||||
[ "$d" = "." ] && continue
|
|
||||||
dirs="$d $dirs"
|
|
||||||
done
|
|
||||||
|
|
||||||
[ -n "$XBPS_COMPRESS_LEVEL" ] && clevel="-$XBPS_COMPRESS_LEVEL"
|
|
||||||
[ ! -d $pkgdir ] && mkdir -p $pkgdir
|
|
||||||
|
|
||||||
# Remove binpkg if interrupted...
|
|
||||||
trap "binpkg_cleanup $pkgdir $binpkg" INT
|
|
||||||
msg_normal "Building $binpkg... "
|
|
||||||
${FAKEROOT_CMD} ${FAKEROOT_CMD_ARGS} \
|
|
||||||
tar --exclude "var/db/xbps/metadata/*/flist" \
|
|
||||||
-cpf - ${mfiles} ${dirs} | \
|
|
||||||
$XBPS_COMPRESS_CMD ${clevel} -qf > $pkgdir/$binpkg
|
|
||||||
rval=$?
|
|
||||||
trap - INT
|
|
||||||
|
|
||||||
if [ $rval -eq 0 ]; then
|
|
||||||
msg_normal_append "done.\n"
|
|
||||||
else
|
|
||||||
rm -f $pkgdir/$binpkg
|
|
||||||
msg_normal_append "failed!\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
return $rval
|
|
||||||
}
|
|
|
@ -1,454 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2008-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
xbps_write_metadata_pkg()
|
|
||||||
{
|
|
||||||
local subpkg spkgrev
|
|
||||||
|
|
||||||
for subpkg in ${subpackages}; do
|
|
||||||
if [ -n "${revision}" ]; then
|
|
||||||
spkgrev="${subpkg}-${version}_${revision}"
|
|
||||||
else
|
|
||||||
spkgrev="${subpkg}-${version}"
|
|
||||||
fi
|
|
||||||
check_installed_pkg ${spkgrev}
|
|
||||||
if [ $? -eq 0 -a -z "$DESTDIR_ONLY_INSTALL" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f $XBPS_SRCPKGDIR/${sourcepkg}/${subpkg}.template ]; then
|
|
||||||
msg_error "Cannot find subpkg '${subpkg}' build template!\n"
|
|
||||||
fi
|
|
||||||
setup_tmpl ${sourcepkg}
|
|
||||||
unset run_depends conf_files noarch triggers replaces \
|
|
||||||
revision system_accounts system_groups \
|
|
||||||
preserve xml_entries sgml_entries \
|
|
||||||
xml_catalogs sgml_catalogs gconf_entries gconf_schemas \
|
|
||||||
gtk_iconcache_dirs font_dirs dkms_modules provides \
|
|
||||||
kernel_hooks_version conflicts pycompile_dirs \
|
|
||||||
pycompile_module systemd_services make_dirs
|
|
||||||
. $XBPS_SRCPKGDIR/${sourcepkg}/${subpkg}.template
|
|
||||||
pkgname=${subpkg}
|
|
||||||
set_tmpl_common_vars
|
|
||||||
verify_rundeps ${DESTDIR}
|
|
||||||
xbps_write_metadata_pkg_real
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -n "$build_style" -a "$build_style" = "meta-template" -a -z "${run_depends}" ]; then
|
|
||||||
for spkg in ${subpackages}; do
|
|
||||||
if [ -n "${revision}" ]; then
|
|
||||||
spkgrev="${spkg}-${version}_$revision"
|
|
||||||
else
|
|
||||||
spkgrev="${spkg}-${version}"
|
|
||||||
fi
|
|
||||||
run_depends="${run_depends} ${spkgrev}"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
setup_tmpl ${sourcepkg}
|
|
||||||
# Verify pkg deps.
|
|
||||||
verify_rundeps ${DESTDIR}
|
|
||||||
xbps_write_metadata_pkg_real
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# This function writes the metadata files into package's destdir,
|
|
||||||
# these will be used for binary packages.
|
|
||||||
#
|
|
||||||
xbps_write_metadata_pkg_real()
|
|
||||||
{
|
|
||||||
local metadir=${DESTDIR}/var/db/xbps/metadata/$pkgname
|
|
||||||
local f i j found arch dirat lnkat newlnk lver TMPFLIST TMPFPLIST
|
|
||||||
local fpattern="s|${DESTDIR}||g;s|^\./$||g;/^$/d"
|
|
||||||
|
|
||||||
if [ ! -d "${DESTDIR}" ]; then
|
|
||||||
msg_error "$pkgname not installed into destdir.\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$noarch" ]; then
|
|
||||||
arch=noarch
|
|
||||||
else
|
|
||||||
arch=$XBPS_MACHINE
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$revision" ]; then
|
|
||||||
lver="${version}_${revision}"
|
|
||||||
else
|
|
||||||
lver="${version}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#
|
|
||||||
# If package provides virtual packages, create dynamically the
|
|
||||||
# required virtualpkg.d files.
|
|
||||||
#
|
|
||||||
if [ -n "$provides" -a -n "$replaces" ]; then
|
|
||||||
_tmpf=$(mktemp) || msg_error "$pkgver: failed to create tempfile.\n"
|
|
||||||
cat > ${_tmpf} <<_EOF
|
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>virtual-pkgver</key>
|
|
||||||
<string>$provides</string>
|
|
||||||
<key>target-pkgpattern</key>
|
|
||||||
<string>$(echo $replaces|sed "s|<|\<|g;s|>|\>|g")</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
_EOF
|
|
||||||
install -Dm644 ${_tmpf} \
|
|
||||||
${DESTDIR}/etc/xbps/virtualpkg.d/${pkgname}.plist
|
|
||||||
vmkdir etc/xbps/virtualpkg.d.wants && curcwd=$(pwd) && \
|
|
||||||
cd ${DESTDIR}/etc/xbps/virtualpkg.d.wants && \
|
|
||||||
ln -sf ../virtualpkg.d/${pkgname}.plist . && \
|
|
||||||
cd ${curcwd} && rm -f ${_tmpf} || \
|
|
||||||
msg_error "$pkgver: failed to create virtualpkg.d file in DESTDIR!\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#
|
|
||||||
# Find out if this package contains info files and compress
|
|
||||||
# all them with gzip.
|
|
||||||
#
|
|
||||||
if [ -f ${DESTDIR}/usr/share/info/dir ]; then
|
|
||||||
# Always remove this file if curpkg is not texinfo.
|
|
||||||
if [ "$pkgname" != "texinfo" ]; then
|
|
||||||
[ -f ${DESTDIR}/usr/share/info/dir ] && \
|
|
||||||
rm -f ${DESTDIR}/usr/share/info/dir
|
|
||||||
fi
|
|
||||||
# Add info-files trigger.
|
|
||||||
triggers="info-files $triggers"
|
|
||||||
msg_normal "$pkgver: processing info(1) files...\n"
|
|
||||||
|
|
||||||
find ${DESTDIR}/usr/share/info -type f -follow | while read f
|
|
||||||
do
|
|
||||||
j=$(echo "$f"|sed -e "$fpattern")
|
|
||||||
[ "$j" = "" ] && continue
|
|
||||||
[ "$j" = "/usr/share/info/dir" ] && continue
|
|
||||||
# Ignore compressed files.
|
|
||||||
if $(echo "$j"|grep -q '.*.gz$'); then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
# Ignore non info files.
|
|
||||||
if ! $(echo "$j"|grep -q '.*.info$') && \
|
|
||||||
! $(echo "$j"|grep -q '.*.info-[0-9]*$'); then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if [ -h ${DESTDIR}/"$j" ]; then
|
|
||||||
dirat=$(dirname "$j")
|
|
||||||
lnkat=$(readlink ${DESTDIR}/"$j")
|
|
||||||
newlnk=$(basename "$j")
|
|
||||||
rm -f ${DESTDIR}/"$j"
|
|
||||||
cd ${DESTDIR}/"$dirat"
|
|
||||||
ln -s "${lnkat}".gz "${newlnk}".gz
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo " Compressing info file: $j..."
|
|
||||||
gzip -q9 ${DESTDIR}/"$j"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
#
|
|
||||||
# Find out if this package contains manual pages and
|
|
||||||
# compress all them with gzip.
|
|
||||||
#
|
|
||||||
if [ -d "${DESTDIR}/usr/share/man" ]; then
|
|
||||||
msg_normal "$pkgver: processing manual pages...\n"
|
|
||||||
find ${DESTDIR}/usr/share/man -type f -follow | while read f
|
|
||||||
do
|
|
||||||
j=$(echo "$f"|sed -e "$fpattern")
|
|
||||||
[ "$j" = "" ] && continue
|
|
||||||
if $(echo "$j"|grep -q '.*.gz$'); then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if [ -h ${DESTDIR}/"$j" ]; then
|
|
||||||
dirat=$(dirname "$j")
|
|
||||||
lnkat=$(readlink ${DESTDIR}/"$j")
|
|
||||||
newlnk=$(basename "$j")
|
|
||||||
rm -f ${DESTDIR}/"$j"
|
|
||||||
cd ${DESTDIR}/"$dirat"
|
|
||||||
ln -s "${lnkat}".gz "${newlnk}".gz
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo " Compressing manpage: $j..."
|
|
||||||
gzip -q9 ${DESTDIR}/"$j"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Write the files.plist file.
|
|
||||||
TMPFLIST=$(mktemp -t flist.XXXXXXXXXX) || exit 1
|
|
||||||
TMPFPLIST=$(mktemp -t fplist.XXXXXXXXXX) || exit 1
|
|
||||||
|
|
||||||
msg_normal "$pkgver: creating package metadata...\n"
|
|
||||||
|
|
||||||
cat > "$TMPFPLIST" <<_EOF
|
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
_EOF
|
|
||||||
# Pass 1: add links.
|
|
||||||
echo "<key>links</key>" >> $TMPFPLIST
|
|
||||||
echo "<array>" >> $TMPFPLIST
|
|
||||||
find ${DESTDIR} -type l | while read f
|
|
||||||
do
|
|
||||||
j=$(echo "$f"|sed -e "$fpattern")
|
|
||||||
[ "$j" = "" ] && continue
|
|
||||||
echo "$j" >> $TMPFLIST
|
|
||||||
echo "<dict>" >> $TMPFPLIST
|
|
||||||
echo "<key>file</key>" >> $TMPFPLIST
|
|
||||||
echo "<string>$j</string>" >> $TMPFPLIST
|
|
||||||
echo "<key>target</key>" >> $TMPFPLIST
|
|
||||||
lnk=$(readlink -f "$f"|sed -e "s|${DESTDIR}||")
|
|
||||||
if [ -z "$lnk" -o "$lnk" = "" ]; then
|
|
||||||
lnk=$(readlink "$f"|sed -e "s|${DESTDIR}||")
|
|
||||||
fi
|
|
||||||
echo "<string>$lnk</string>" >> $TMPFPLIST
|
|
||||||
echo "</dict>" >> $TMPFPLIST
|
|
||||||
done
|
|
||||||
echo "</array>" >> $TMPFPLIST
|
|
||||||
|
|
||||||
# Pass 2: add regular files.
|
|
||||||
echo "<key>files</key>" >> $TMPFPLIST
|
|
||||||
echo "<array>" >> $TMPFPLIST
|
|
||||||
find ${DESTDIR} -type f | while read f
|
|
||||||
do
|
|
||||||
j=$(echo "$f"|sed -e "$fpattern")
|
|
||||||
[ "$j" = "" ] && continue
|
|
||||||
echo "$j" >> $TMPFLIST
|
|
||||||
# Skip configuration files.
|
|
||||||
for i in ${conf_files}; do
|
|
||||||
[ "$j" = "$i" ] && found=1 && break
|
|
||||||
done
|
|
||||||
[ -n "$found" ] && unset found && continue
|
|
||||||
echo "<dict>" >> $TMPFPLIST
|
|
||||||
echo "<key>file</key>" >> $TMPFPLIST
|
|
||||||
echo "<string>$j</string>" >> $TMPFPLIST
|
|
||||||
echo "<key>sha256</key>" >> $TMPFPLIST
|
|
||||||
echo "<string>$(${XBPS_DIGEST_CMD} "$f")</string>" \
|
|
||||||
>> $TMPFPLIST
|
|
||||||
echo "</dict>" >> $TMPFPLIST
|
|
||||||
done
|
|
||||||
echo "</array>" >> $TMPFPLIST
|
|
||||||
|
|
||||||
# Pass 3: add directories.
|
|
||||||
echo "<key>dirs</key>" >> $TMPFPLIST
|
|
||||||
echo "<array>" >> $TMPFPLIST
|
|
||||||
find ${DESTDIR} -type d|sort -ur | while read f
|
|
||||||
do
|
|
||||||
j=$(echo "$f"|sed -e "$fpattern")
|
|
||||||
[ "$j" = "" ] && continue
|
|
||||||
echo "$j" >> $TMPFLIST
|
|
||||||
echo "<dict>" >> $TMPFPLIST
|
|
||||||
echo "<key>file</key>" >> $TMPFPLIST
|
|
||||||
echo "<string>$j</string>" >> $TMPFPLIST
|
|
||||||
echo "</dict>" >> $TMPFPLIST
|
|
||||||
done
|
|
||||||
echo "</array>" >> $TMPFPLIST
|
|
||||||
|
|
||||||
# Add configuration files into its own array.
|
|
||||||
if [ -n "${conf_files}" ]; then
|
|
||||||
echo "<key>conf_files</key>" >> $TMPFPLIST
|
|
||||||
echo "<array>" >> $TMPFPLIST
|
|
||||||
for f in ${conf_files}; do
|
|
||||||
i=${DESTDIR}/"${f}"
|
|
||||||
[ ! -f "${i}" ] && continue
|
|
||||||
echo "<dict>" >> $TMPFPLIST
|
|
||||||
echo "<key>file</key>" >> $TMPFPLIST
|
|
||||||
echo "<string>$f</string>" >> $TMPFPLIST
|
|
||||||
echo "<key>sha256</key>" >> $TMPFPLIST
|
|
||||||
echo "<string>$(${XBPS_DIGEST_CMD} "${i}")</string>" \
|
|
||||||
>> $TMPFPLIST
|
|
||||||
echo "</dict>" >> $TMPFPLIST
|
|
||||||
done
|
|
||||||
echo "</array>" >> $TMPFPLIST
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "</dict>" >> $TMPFPLIST
|
|
||||||
echo "</plist>" >> $TMPFPLIST
|
|
||||||
sed -i -e /^$/d $TMPFLIST
|
|
||||||
|
|
||||||
# Write the props.plist file.
|
|
||||||
local TMPFPROPS=$(mktemp -t fprops.XXXXXXXXXX) || exit 1
|
|
||||||
|
|
||||||
local instsize=$(du -sk ${DESTDIR}|awk '{print $1}')
|
|
||||||
|
|
||||||
cat > $TMPFPROPS <<_EOF
|
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>pkgname</key>
|
|
||||||
<string>$pkgname</string>
|
|
||||||
<key>version</key>
|
|
||||||
<string>$lver</string>
|
|
||||||
<key>pkgver</key>
|
|
||||||
<string>$pkgver</string>
|
|
||||||
<key>architecture</key>
|
|
||||||
<string>$arch</string>
|
|
||||||
<key>installed_size</key>
|
|
||||||
<integer>$(($instsize * 1024))</integer>
|
|
||||||
<key>maintainer</key>
|
|
||||||
<string>$(echo $maintainer|sed -e 's|<|\<|g;s|>|\>|g')</string>
|
|
||||||
<key>short_desc</key>
|
|
||||||
<string>$short_desc</string>
|
|
||||||
<key>long_desc</key>
|
|
||||||
<string>$long_desc</string>
|
|
||||||
<key>packaged-with</key>
|
|
||||||
<string>xbps-src $XBPS_SRC_BUILD_VERSION</string>
|
|
||||||
_EOF
|
|
||||||
#
|
|
||||||
# If package sets $dkms_modules, add dkms rundep.
|
|
||||||
#
|
|
||||||
if [ -n "$dkms_modules" ]; then
|
|
||||||
Add_dependency run dkms
|
|
||||||
fi
|
|
||||||
|
|
||||||
#
|
|
||||||
# If package sets $system_accounts or $system_groups, add shadow rundep.
|
|
||||||
#
|
|
||||||
if [ -n "$system_accounts" -o -n "$system_groups" ]; then
|
|
||||||
Add_dependency run shadow
|
|
||||||
fi
|
|
||||||
|
|
||||||
# pkg needs to preserve its files after removal/upgrade?
|
|
||||||
if [ -n "$preserve" ]; then
|
|
||||||
echo "<key>preserve</key>" >> $TMPFPROPS
|
|
||||||
echo "<true/>" >> $TMPFPROPS
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Dependencies
|
|
||||||
if [ -n "$run_depends" ]; then
|
|
||||||
echo "<key>run_depends</key>" >> $TMPFPROPS
|
|
||||||
echo "<array>" >> $TMPFPROPS
|
|
||||||
for f in ${run_depends}; do
|
|
||||||
echo "<string>$(echo $f|sed "s|<|\<|g;s|>|\>|g")</string>" >> $TMPFPROPS
|
|
||||||
done
|
|
||||||
echo "</array>" >> $TMPFPROPS
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Configuration files
|
|
||||||
if [ -n "$conf_files" ]; then
|
|
||||||
echo "<key>conf_files</key>" >> $TMPFPROPS
|
|
||||||
echo "<array>" >> $TMPFPROPS
|
|
||||||
for f in ${conf_files}; do
|
|
||||||
echo "<string>$f</string>" >> $TMPFPROPS
|
|
||||||
done
|
|
||||||
echo "</array>" >> $TMPFPROPS
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Replace package(s).
|
|
||||||
if [ -n "$replaces" ]; then
|
|
||||||
echo "<key>replaces</key>" >> $TMPFPROPS
|
|
||||||
echo "<array>" >> $TMPFPROPS
|
|
||||||
for f in ${replaces}; do
|
|
||||||
echo "<string>$(echo $f|sed "s|<|\<|g;s|>|\>|g")</string>" >> $TMPFPROPS
|
|
||||||
done
|
|
||||||
echo "</array>" >> $TMPFPROPS
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Conflicting package(s).
|
|
||||||
if [ -n "$conflicts" ]; then
|
|
||||||
echo "<key>conflicts</key>" >> $TMPFPROPS
|
|
||||||
echo "<array>" >> $TMPFPROPS
|
|
||||||
for f in ${conflicts}; do
|
|
||||||
echo "<string>$(echo $f|sed "s|<|\<|g;s|>|\>|g")</string>" >> $TMPFPROPS
|
|
||||||
done
|
|
||||||
echo "</array>" >> $TMPFPROPS
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Provides virtual package(s).
|
|
||||||
if [ -n "$provides" ]; then
|
|
||||||
echo "<key>provides</key>" >> $TMPFPROPS
|
|
||||||
echo "<array>" >> $TMPFPROPS
|
|
||||||
for f in ${provides}; do
|
|
||||||
echo "<string>$(echo $f|sed "s|<|\<|g;s|>|\>|g")</string>" >> $TMPFPROPS
|
|
||||||
done
|
|
||||||
echo "</array>" >> $TMPFPROPS
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Build date.
|
|
||||||
echo "<key>build_date</key>" >> $TMPFPROPS
|
|
||||||
echo "<string>$(LANG=C date -u "+%A %d %B, %Y, %T UTC")</string>" >> $TMPFPROPS
|
|
||||||
|
|
||||||
# Homepage
|
|
||||||
if [ -n "$homepage" ]; then
|
|
||||||
echo "<key>homepage</key>" >> $TMPFPROPS
|
|
||||||
echo "<string>$homepage</string>" >> $TMPFPROPS
|
|
||||||
fi
|
|
||||||
|
|
||||||
# License
|
|
||||||
if [ -n "$license" ]; then
|
|
||||||
echo "<key>license</key>" >> $TMPFPROPS
|
|
||||||
echo "<string>$license</string>" >> $TMPFPROPS
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Terminate the property list file.
|
|
||||||
echo "</dict>" >> $TMPFPROPS
|
|
||||||
echo "</plist>" >> $TMPFPROPS
|
|
||||||
|
|
||||||
if [ ! -d $metadir ]; then
|
|
||||||
mkdir -m0755 -p $metadir >/dev/null 2>&1
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
msg_red "you don't have enough perms for this!\n"
|
|
||||||
rm -f $TMPFLIST $TMPFPROPS
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Write metadata files and cleanup.
|
|
||||||
if [ -s $TMPFLIST ]; then
|
|
||||||
mv -f $TMPFLIST $metadir/flist
|
|
||||||
else
|
|
||||||
rm -f $TMPFLIST
|
|
||||||
fi
|
|
||||||
mv -f $TMPFPLIST ${DESTDIR}/files.plist
|
|
||||||
mv -f $TMPFPROPS ${DESTDIR}/props.plist
|
|
||||||
|
|
||||||
$XBPS_PKGDB_CMD sanitize-plist ${DESTDIR}/files.plist || \
|
|
||||||
msg_error "$pkgname: failed to externalize files.plist!\n"
|
|
||||||
$XBPS_PKGDB_CMD sanitize-plist ${DESTDIR}/props.plist || \
|
|
||||||
msg_error "$pkgname: failed to externalize props.plist!\n"
|
|
||||||
|
|
||||||
chmod 644 ${DESTDIR}/files.plist ${DESTDIR}/props.plist
|
|
||||||
[ -f $metadir/flist ] && chmod 644 $metadir/flist
|
|
||||||
|
|
||||||
#
|
|
||||||
# Create the INSTALL/REMOVE scripts if package uses them
|
|
||||||
# or uses any available trigger.
|
|
||||||
#
|
|
||||||
local meta_install meta_remove
|
|
||||||
if [ -n "${sourcepkg}" -a "${sourcepkg}" != "${pkgname}" ]; then
|
|
||||||
meta_install=${XBPS_SRCPKGDIR}/${pkgname}/${pkgname}.INSTALL
|
|
||||||
meta_remove=${XBPS_SRCPKGDIR}/${pkgname}/${pkgname}.REMOVE
|
|
||||||
else
|
|
||||||
meta_install=${XBPS_SRCPKGDIR}/${pkgname}/INSTALL
|
|
||||||
meta_remove=${XBPS_SRCPKGDIR}/${pkgname}/REMOVE
|
|
||||||
fi
|
|
||||||
xbps_write_metadata_scripts_pkg install ${meta_install} || \
|
|
||||||
msg_error "$pkgname: failed to write INSTALL metadata file!\n"
|
|
||||||
|
|
||||||
xbps_write_metadata_scripts_pkg remove ${meta_remove} || \
|
|
||||||
msg_error "$pkgname: failed to write REMOVE metadata file!\n"
|
|
||||||
|
|
||||||
msg_normal "$pkgver: successfully created package metadata.\n"
|
|
||||||
}
|
|
|
@ -1,330 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2009-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
_add_trigger()
|
|
||||||
{
|
|
||||||
local f found name="$1"
|
|
||||||
|
|
||||||
for f in ${triggers}; do
|
|
||||||
[ "$f" = "$name" ] && found=1
|
|
||||||
done
|
|
||||||
[ -z "$found" ] && triggers="$triggers $name"
|
|
||||||
}
|
|
||||||
|
|
||||||
xbps_write_metadata_scripts_pkg()
|
|
||||||
{
|
|
||||||
local action="$1"
|
|
||||||
local action_file="$2"
|
|
||||||
local tmpf=$(mktemp -t xbps-install.XXXXXXXXXX) || exit 1
|
|
||||||
local fpattern="s|${DESTDIR}||g;s|^\./$||g;/^$/d"
|
|
||||||
local targets f info_files home shell descr groups
|
|
||||||
local found triggers_found
|
|
||||||
|
|
||||||
case "$action" in
|
|
||||||
install) ;;
|
|
||||||
remove) ;;
|
|
||||||
*) return 1;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
cd ${DESTDIR}
|
|
||||||
cat >> $tmpf <<_EOF
|
|
||||||
#!/bin/sh -e
|
|
||||||
#
|
|
||||||
# Generic INSTALL/REMOVE script. Arguments passed to this script:
|
|
||||||
#
|
|
||||||
# \$1 = ACTION [pre/post]
|
|
||||||
# \$2 = PKGNAME
|
|
||||||
# \$3 = VERSION
|
|
||||||
# \$4 = UPDATE [yes/no]
|
|
||||||
#
|
|
||||||
# Note that paths must be relative to CWD, to avoid calling
|
|
||||||
# host commands if /bin/sh (dash) is not installed and it's
|
|
||||||
# not possible to chroot(3).
|
|
||||||
#
|
|
||||||
|
|
||||||
export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
|
|
||||||
|
|
||||||
TRIGGERSDIR="./var/db/xbps/triggers"
|
|
||||||
ACTION="\$1"
|
|
||||||
PKGNAME="\$2"
|
|
||||||
VERSION="\$3"
|
|
||||||
UPDATE="\$4"
|
|
||||||
|
|
||||||
#
|
|
||||||
# The following code will run the triggers.
|
|
||||||
#
|
|
||||||
_EOF
|
|
||||||
#
|
|
||||||
# Handle kernel hooks.
|
|
||||||
#
|
|
||||||
if [ -n "${kernel_hooks_version}" ]; then
|
|
||||||
_add_trigger kernel-hooks
|
|
||||||
echo "export kernel_hooks_version=\"${kernel_hooks_version}\"" >> $tmpf
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle DKMS modules.
|
|
||||||
#
|
|
||||||
if [ -n "${dkms_modules}" ]; then
|
|
||||||
_add_trigger dkms
|
|
||||||
echo "export dkms_modules=\"${dkms_modules}\"" >> $tmpf
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle system groups.
|
|
||||||
#
|
|
||||||
if [ -n "${system_groups}" ]; then
|
|
||||||
_add_trigger system-accounts
|
|
||||||
echo "export system_groups=\"${system_groups}\"" >> $tmpf
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle system accounts.
|
|
||||||
#
|
|
||||||
if [ -n "${system_accounts}" ]; then
|
|
||||||
_add_trigger system-accounts
|
|
||||||
echo "export system_accounts=\"${system_accounts}\"" >> $tmpf
|
|
||||||
for f in ${system_accounts}; do
|
|
||||||
eval homedir="\$${f}_homedir"
|
|
||||||
eval shell="\$${f}_shell"
|
|
||||||
eval descr="\$${f}_descr"
|
|
||||||
eval groups="\$${f}_groups"
|
|
||||||
if [ -n "$homedir" ]; then
|
|
||||||
echo "export ${f}_homedir=\"$homedir\"" >> $tmpf
|
|
||||||
fi
|
|
||||||
if [ -n "$shell" ]; then
|
|
||||||
echo "export ${f}_shell=\"$shell\"" >> $tmpf
|
|
||||||
fi
|
|
||||||
if [ -n "$descr" ]; then
|
|
||||||
echo "export ${f}_descr=\"$descr\"" >> $tmpf
|
|
||||||
fi
|
|
||||||
if [ -n "$groups" ]; then
|
|
||||||
echo "export ${f}_groups=\"${groups}\"" >> $tmpf
|
|
||||||
fi
|
|
||||||
unset homedir shell descr groups
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle mkdirs trigger.
|
|
||||||
#
|
|
||||||
if [ -n "${make_dirs}" ]; then
|
|
||||||
_add_trigger mkdirs
|
|
||||||
echo "export make_dirs=\"${make_dirs}\"" >> $tmpf
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle systemd services.
|
|
||||||
#
|
|
||||||
if [ -n "${systemd_services}" ]; then
|
|
||||||
_add_trigger systemd-service
|
|
||||||
echo "export systemd_services=\"${systemd_services}\"" >> $tmpf
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle GNU Info files.
|
|
||||||
#
|
|
||||||
if [ -d "${DESTDIR}/usr/share/info" ]; then
|
|
||||||
unset info_files
|
|
||||||
for f in $(find ${DESTDIR}/usr/share/info -type f); do
|
|
||||||
j=$(echo $f|sed -e "$fpattern")
|
|
||||||
[ "$j" = "" ] && continue
|
|
||||||
[ "$j" = "/usr/share/info/dir" ] && continue
|
|
||||||
if [ -z "$info_files" ]; then
|
|
||||||
info_files="$j"
|
|
||||||
else
|
|
||||||
info_files="$info_files $j"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ -n "${info_files}" ]; then
|
|
||||||
_add_trigger info-files
|
|
||||||
echo "export info_files=\"${info_files}\"" >> $tmpf
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# (Un)Register a shell in /etc/shells.
|
|
||||||
#
|
|
||||||
if [ -n "${register_shell}" ]; then
|
|
||||||
_add_trigger register-shell
|
|
||||||
echo "export register_shell=\"${register_shell}\"" >> $tmpf
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle SGML/XML catalog entries via xmlcatmgr.
|
|
||||||
#
|
|
||||||
if [ -n "${sgml_catalogs}" ]; then
|
|
||||||
for catalog in ${sgml_catalogs}; do
|
|
||||||
sgml_entries="${sgml_entries} CATALOG ${catalog} --"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
if [ -n "${sgml_entries}" ]; then
|
|
||||||
echo "export sgml_entries=\"${sgml_entries}\"" >> $tmpf
|
|
||||||
fi
|
|
||||||
if [ -n "${xml_catalogs}" ]; then
|
|
||||||
for catalog in ${xml_catalogs}; do
|
|
||||||
xml_entries="${xml_entries} nextCatalog ${catalog} --"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
if [ -n "${xml_entries}" ]; then
|
|
||||||
echo "export xml_entries=\"${xml_entries}\"" >> $tmpf
|
|
||||||
fi
|
|
||||||
if [ -n "${sgml_entries}" -o -n "${xml_entries}" ]; then
|
|
||||||
_add_trigger xml-catalog
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle X11 font updates via mkfontdir/mkfontscale.
|
|
||||||
#
|
|
||||||
if [ -n "${font_dirs}" ]; then
|
|
||||||
_add_trigger x11-fonts
|
|
||||||
echo "export font_dirs=\"${font_dirs}\"" >> $tmpf
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle GTK+ Icon cache directories.
|
|
||||||
#
|
|
||||||
if [ -n "${gtk_iconcache_dirs}" ]; then
|
|
||||||
_add_trigger gtk-icon-cache
|
|
||||||
echo "export gtk_iconcache_dirs=\"${gtk_iconcache_dirs}\"" \
|
|
||||||
>> $tmpf
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle .desktop files in /usr/share/applications with
|
|
||||||
# desktop-file-utils.
|
|
||||||
#
|
|
||||||
if [ -d ${DESTDIR}/usr/share/applications ]; then
|
|
||||||
if find . -type f -name \*.desktop 2>&1 >/dev/null; then
|
|
||||||
_add_trigger update-desktopdb
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle GConf schemas/entries files with gconf-schemas.
|
|
||||||
#
|
|
||||||
if [ -n "${gconf_entries}" -o -n "${gconf_schemas}" ]; then
|
|
||||||
if find . -type f -name \*.schemas \
|
|
||||||
-o -name \*.entries 2>&1 >/dev/null; then
|
|
||||||
_add_trigger gconf-schemas
|
|
||||||
fi
|
|
||||||
if [ -n "${gconf_entries}" ]; then
|
|
||||||
echo "export gconf_entries=\"${gconf_entries}\"" \
|
|
||||||
>> $tmpf
|
|
||||||
fi
|
|
||||||
if [ -n "${gconf_schemas}" ]; then
|
|
||||||
echo "export gconf_schemas=\"${gconf_schemas}\"" \
|
|
||||||
>> $tmpf
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle gio-modules trigger.
|
|
||||||
#
|
|
||||||
if [ -d ${DESTDIR}/usr/lib/gio/modules ]; then
|
|
||||||
if find ${DESTDIR}/usr/lib/gio/modules -type f -name \*.so 2>&1 >/dev/null; then
|
|
||||||
_add_trigger gio-modules
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle gsettings schemas in /usr/share/glib-2.0/schemas with
|
|
||||||
# gsettings-schemas.
|
|
||||||
#
|
|
||||||
if [ -d ${DESTDIR}/usr/share/glib-2.0/schemas ]; then
|
|
||||||
if find ${DESTDIR}/usr/share/glib-2.0/schemas -type f -name \*.xml 2>&1 >/dev/null; then
|
|
||||||
_add_trigger gsettings-schemas
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle mime database in /usr/share/mime with update-mime-database.
|
|
||||||
#
|
|
||||||
if [ -d ${DESTDIR}/usr/share/mime ]; then
|
|
||||||
if find ${DESTDIR}/usr/share/mime -type f -name \*.xml 2>&1 >/dev/null; then
|
|
||||||
_add_trigger mimedb
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Handle python bytecode archives with pycompile trigger.
|
|
||||||
#
|
|
||||||
if [ -n "${pycompile_dirs}" -o -n "${pycompile_module}" ]; then
|
|
||||||
if [ -n "${pycompile_dirs}" ]; then
|
|
||||||
echo "export pycompile_dirs=\"${pycompile_dirs}\"" >>$tmpf
|
|
||||||
fi
|
|
||||||
if [ -n "${pycompile_module}" ]; then
|
|
||||||
echo "export pycompile_module=\"${pycompile_module}\"" >>$tmpf
|
|
||||||
fi
|
|
||||||
_add_trigger pycompile
|
|
||||||
fi
|
|
||||||
|
|
||||||
# End of trigger var exports.
|
|
||||||
echo >> $tmpf
|
|
||||||
|
|
||||||
#
|
|
||||||
# Write the INSTALL/REMOVE package scripts.
|
|
||||||
#
|
|
||||||
if [ -n "$triggers" ]; then
|
|
||||||
triggers_found=1
|
|
||||||
echo "case \"\${ACTION}\" in" >> $tmpf
|
|
||||||
echo "pre)" >> $tmpf
|
|
||||||
for f in ${triggers}; do
|
|
||||||
if [ ! -f $XBPS_TRIGGERSDIR/$f ]; then
|
|
||||||
rm -f $tmpf
|
|
||||||
msg_error "$pkgname: unknown trigger $f, aborting!\n"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
for f in ${triggers}; do
|
|
||||||
targets=$($XBPS_TRIGGERSDIR/$f targets)
|
|
||||||
for j in ${targets}; do
|
|
||||||
if ! $(echo $j|grep -q pre-${action}); then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
printf "\t\${TRIGGERSDIR}/$f run $j \${PKGNAME} \${VERSION} \${UPDATE}\n" >> $tmpf
|
|
||||||
printf "\t[ \$? -ne 0 ] && exit \$?\n" >> $tmpf
|
|
||||||
done
|
|
||||||
done
|
|
||||||
printf "\t;;\n" >> $tmpf
|
|
||||||
echo "post)" >> $tmpf
|
|
||||||
for f in ${triggers}; do
|
|
||||||
targets=$($XBPS_TRIGGERSDIR/$f targets)
|
|
||||||
for j in ${targets}; do
|
|
||||||
if ! $(echo $j|grep -q post-${action}); then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
printf "\t\${TRIGGERSDIR}/$f run $j \${PKGNAME} \${VERSION} \${UPDATE}\n" >> $tmpf
|
|
||||||
printf "\t[ \$? -ne 0 ] && exit \$?\n" >> $tmpf
|
|
||||||
done
|
|
||||||
done
|
|
||||||
printf "\t;;\n" >> $tmpf
|
|
||||||
echo "esac" >> $tmpf
|
|
||||||
echo >> $tmpf
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$action" in
|
|
||||||
install)
|
|
||||||
if [ -f ${action_file} ]; then
|
|
||||||
found=1
|
|
||||||
cat ${action_file} >> $tmpf
|
|
||||||
fi
|
|
||||||
echo "exit 0" >> $tmpf
|
|
||||||
mv $tmpf ${DESTDIR}/INSTALL && chmod 755 ${DESTDIR}/INSTALL
|
|
||||||
;;
|
|
||||||
remove)
|
|
||||||
unset found
|
|
||||||
if [ -f ${action_file} ]; then
|
|
||||||
found=1
|
|
||||||
cat ${action_file} >> $tmpf
|
|
||||||
fi
|
|
||||||
echo "exit 0" >> $tmpf
|
|
||||||
mv $tmpf ${DESTDIR}/REMOVE && chmod 755 ${DESTDIR}/REMOVE
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
|
@ -1,93 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2008-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
#
|
|
||||||
# Applies to the build directory all patches found in PATCHESDIR
|
|
||||||
# (srcpkgs/$pkgname/patches).
|
|
||||||
#
|
|
||||||
_process_patch()
|
|
||||||
{
|
|
||||||
local args _patch i=$1
|
|
||||||
|
|
||||||
args="-Np0"
|
|
||||||
_patch=$(basename $i)
|
|
||||||
if [ -f $PATCHESDIR/${_patch}.args ]; then
|
|
||||||
args=$(cat $PATCHESDIR/${_patch}.args)
|
|
||||||
elif [ -n "$patch_args" ]; then
|
|
||||||
args=$patch_args
|
|
||||||
fi
|
|
||||||
cp -f $i $wrksrc
|
|
||||||
|
|
||||||
# Try to guess if its a compressed patch.
|
|
||||||
if $(echo $i|grep -q '.diff.gz'); then
|
|
||||||
gunzip $wrksrc/${_patch}
|
|
||||||
_patch=${_patch%%.gz}
|
|
||||||
elif $(echo $i|grep -q '.patch.gz'); then
|
|
||||||
gunzip $wrksrc/${_patch}
|
|
||||||
_patch=${_patch%%.gz}
|
|
||||||
elif $(echo $i|grep -q '.diff.bz2'); then
|
|
||||||
bunzip2 $wrksrc/${_patch}
|
|
||||||
_patch=${_patch%%.bz2}
|
|
||||||
elif $(echo $i|grep -q '.patch.bz2'); then
|
|
||||||
bunzip2 $wrksrc/${_patch}
|
|
||||||
_patch=${_patch%%.bz2}
|
|
||||||
elif $(echo $i|grep -q '.diff'); then
|
|
||||||
:
|
|
||||||
elif $(echo $i|grep -q '.patch'); then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
msg_warn "$pkgver: unknown patch type: $i.\n"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $wrksrc && patch -s ${args} < ${_patch} 2>/dev/null
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
msg_normal "$pkgver: Patch applied: ${_patch}.\n"
|
|
||||||
else
|
|
||||||
msg_error "'$pkgver: couldn't apply patch: ${_patch}.\n"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
apply_tmpl_patches()
|
|
||||||
{
|
|
||||||
local f
|
|
||||||
|
|
||||||
[ ! -d $PATCHESDIR ] && return 0
|
|
||||||
|
|
||||||
if [ -r $PATCHESDIR/series ]; then
|
|
||||||
cat $PATCHESDIR/series | while read f; do
|
|
||||||
_process_patch "$PATCHESDIR/$f"
|
|
||||||
done
|
|
||||||
else
|
|
||||||
for f in $PATCHESDIR/*; do
|
|
||||||
if $(echo $f|grep -q '.args'); then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
_process_patch $f
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
touch -f $XBPS_APPLYPATCHES_DONE
|
|
||||||
}
|
|
|
@ -1,273 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2008-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
#
|
|
||||||
# Installs a pkg by reading its build template file.
|
|
||||||
#
|
|
||||||
make_repoidx()
|
|
||||||
{
|
|
||||||
local f
|
|
||||||
|
|
||||||
case "${XBPS_VERSION}" in
|
|
||||||
# >= 0.11.0
|
|
||||||
[0-9].[1-9][1-9].[0-9])
|
|
||||||
for f in ${XBPS_MACHINE} noarch nonfree/${XBPS_MACHINE}; do
|
|
||||||
msg_normal "Updating pkg-index for local repository at:\n"
|
|
||||||
msg_normal " $XBPS_PACKAGESDIR/$f\n"
|
|
||||||
${XBPS_REPO_CMD} genindex ${XBPS_PACKAGESDIR}/${f} 2>/dev/null
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
msg_normal "Updating pkg-index for local repository at:\n"
|
|
||||||
msg_normal " $XBPS_PACKAGESDIR\n"
|
|
||||||
${XBPS_REPO_CMD} genindex ${XBPS_PACKAGESDIR} 2>/dev/null
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
_build_pkg_and_update_repos()
|
|
||||||
{
|
|
||||||
local rval f
|
|
||||||
|
|
||||||
[ -z "$BUILD_BINPKG" ] && return 0
|
|
||||||
|
|
||||||
# Build binary package and update local repo index if -B is set.
|
|
||||||
xbps_make_binpkg
|
|
||||||
if [ $? -ne 0 -a $? -ne 6 ]; then
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
make_repoidx
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
install_pkg()
|
|
||||||
{
|
|
||||||
local curpkgn="$1" fullpkg pkg cdestdir
|
|
||||||
|
|
||||||
pkg="$curpkgn-$version"
|
|
||||||
[ -n "$INSTALLING_DEPS" ] && setup_tmpl $curpkgn
|
|
||||||
#
|
|
||||||
# Refuse to install the same package that is already installed.
|
|
||||||
#
|
|
||||||
check_installed_pkg "$pkg"
|
|
||||||
if [ $? -eq 1 -o $? -eq 0 ]; then
|
|
||||||
instver="$($XBPS_PKGDB_CMD version $pkgname)"
|
|
||||||
if [ -n "$instver" -a -z "$DESTDIR_ONLY_INSTALL" ]; then
|
|
||||||
echo "=> $pkgname-$instver already installed."
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Always fetch distfiles before installing dependencies if
|
|
||||||
# template doesn't use nofetch and do_fetch().
|
|
||||||
[ -z "$nofetch" ] && fetch_distfiles
|
|
||||||
|
|
||||||
#
|
|
||||||
# Install dependencies required by this package.
|
|
||||||
#
|
|
||||||
if [ -z "$INSTALLING_DEPS" ]; then
|
|
||||||
install_dependencies_pkg $pkg || return $?
|
|
||||||
#
|
|
||||||
# At this point all required deps are installed, and
|
|
||||||
# only remaining is the origin package; install it.
|
|
||||||
#
|
|
||||||
unset INSTALLING_DEPS
|
|
||||||
setup_tmpl $curpkgn
|
|
||||||
msg_normal "$pkgver: starting installation...\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Fetch distfiles after installing required dependencies,
|
|
||||||
# because some of them might be required for do_fetch().
|
|
||||||
[ -n "$nofetch" ] && fetch_distfiles
|
|
||||||
|
|
||||||
#
|
|
||||||
# Fetch, extract, build and install into the destination directory.
|
|
||||||
#
|
|
||||||
if [ ! -f "$XBPS_EXTRACT_DONE" ]; then
|
|
||||||
extract_distfiles || return $?
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Apply patches if requested by template file
|
|
||||||
if [ ! -f $XBPS_APPLYPATCHES_DONE ]; then
|
|
||||||
apply_tmpl_patches || return $?
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "$XBPS_CONFIGURE_DONE" ]; then
|
|
||||||
configure_src_phase || return $?
|
|
||||||
if [ "$INSTALL_TARGET" = "configure" ]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "$XBPS_BUILD_DONE" ]; then
|
|
||||||
build_src_phase || return $?
|
|
||||||
if [ "$INSTALL_TARGET" = "build" ]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Install pkg into destdir.
|
|
||||||
env XBPS_MACHINE=${XBPS_MACHINE} wrksrc=${wrksrc} \
|
|
||||||
MASTERDIR="${XBPS_MASTERDIR}" \
|
|
||||||
BOOTSTRAP_PKG_REBUILD=$BOOTSTRAP_PKG_REBUILD \
|
|
||||||
CONFIG_FILE=${XBPS_CONFIG_FILE} \
|
|
||||||
${FAKEROOT_CMD} ${FAKEROOT_CMD_ARGS} \
|
|
||||||
${XBPS_LIBEXECDIR}/doinst-helper.sh \
|
|
||||||
${curpkgn} || return $?
|
|
||||||
|
|
||||||
# Strip binaries/libraries.
|
|
||||||
strip_files
|
|
||||||
|
|
||||||
# Always write metadata to package's destdir.
|
|
||||||
trap 'remove_pkgdestdir_sighandler $pkgname $KEEP_AUTODEPS' INT
|
|
||||||
xbps_write_metadata_pkg
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
msg_red "cannot write package metadata for '$pkgname'!\n"
|
|
||||||
trap - INT
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
trap - INT
|
|
||||||
|
|
||||||
# If only installation to destdir, return.
|
|
||||||
if [ -n "$DESTDIR_ONLY_INSTALL" ]; then
|
|
||||||
if [ -d "$wrksrc" -a -z "$KEEP_WRKSRC" ]; then
|
|
||||||
remove_tmpl_wrksrc $wrksrc
|
|
||||||
fi
|
|
||||||
autoremove_pkg_dependencies $KEEP_AUTODEPS
|
|
||||||
_build_pkg_and_update_repos
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Stow package into masterdir.
|
|
||||||
stow_pkg_handler stow || return $?
|
|
||||||
|
|
||||||
# Copy generated pkg metadata files into its metadata dir.
|
|
||||||
if [ ! -f ${DESTDIR}/files.plist ]; then
|
|
||||||
msg_error "${pkgname}: missing metadata files.plist!"
|
|
||||||
fi
|
|
||||||
cp -f ${DESTDIR}/files.plist ${XBPS_PKGMETADIR}/${pkgname}
|
|
||||||
if [ ! -f ${DESTDIR}/props.plist ]; then
|
|
||||||
msg_error "${pkgname}: missing metadata props.plist!"
|
|
||||||
fi
|
|
||||||
cp -f ${DESTDIR}/props.plist ${XBPS_PKGMETADIR}/${pkgname}
|
|
||||||
if [ -f ${DESTDIR}/INSTALL ]; then
|
|
||||||
install -m750 ${DESTDIR}/INSTALL \
|
|
||||||
${XBPS_PKGMETADIR}/${pkgname}
|
|
||||||
fi
|
|
||||||
if [ -f ${DESTDIR}/REMOVE ]; then
|
|
||||||
install -m750 ${DESTDIR}/REMOVE \
|
|
||||||
${XBPS_PKGMETADIR}/${pkgname}
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Remove $wrksrc if -C not specified.
|
|
||||||
#
|
|
||||||
if [ -d "$wrksrc" -a -z "$KEEP_WRKSRC" ]; then
|
|
||||||
remove_tmpl_wrksrc $wrksrc
|
|
||||||
fi
|
|
||||||
|
|
||||||
#
|
|
||||||
# Autoremove packages installed as dependencies if
|
|
||||||
# XBPS_PREFER_BINPKG_DEPS is set.
|
|
||||||
#
|
|
||||||
autoremove_pkg_dependencies $KEEP_AUTODEPS || return $?
|
|
||||||
#
|
|
||||||
# Build binary package and update local repo index if -B is set.
|
|
||||||
#
|
|
||||||
_build_pkg_and_update_repos
|
|
||||||
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Lists files installed by a package.
|
|
||||||
#
|
|
||||||
list_pkg_files()
|
|
||||||
{
|
|
||||||
local pkg="$1" ver=
|
|
||||||
|
|
||||||
[ -z $pkg ] && msg_error "unexistent package, aborting.\n"
|
|
||||||
|
|
||||||
ver=$($XBPS_PKGDB_CMD version $pkg)
|
|
||||||
if [ -z "$ver" ]; then
|
|
||||||
msg_warn "$pkg is not installed.\n"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat $XBPS_PKGMETADIR/$pkg/flist
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Removes a currently installed package (unstow + removed from destdir).
|
|
||||||
#
|
|
||||||
remove_pkg()
|
|
||||||
{
|
|
||||||
local subpkg found pkg
|
|
||||||
|
|
||||||
[ -z $pkgname ] && msg_error "unexistent package, aborting.\n"
|
|
||||||
|
|
||||||
for subpkg in ${subpackages}; do
|
|
||||||
. ${XBPS_SRCPKGDIR}/${sourcepkg}/${subpkg}.template
|
|
||||||
set_tmpl_common_vars
|
|
||||||
pkg="${subpkg}-${version}"
|
|
||||||
if [ -d "$XBPS_DESTDIR/${pkg}" ]; then
|
|
||||||
msg_normal "${pkg}: removing files from destdir...\n"
|
|
||||||
rm -rf "$XBPS_DESTDIR/${pkg}"
|
|
||||||
found=1
|
|
||||||
else
|
|
||||||
msg_warn "${pkg}: not installed in destdir!\n"
|
|
||||||
fi
|
|
||||||
# Remove leftover files in $wrksrc.
|
|
||||||
if [ -f "${wrksrc}/.xbps_do_install_${subpkg}_done" ]; then
|
|
||||||
rm -f ${wrksrc}/.xbps_do_install_${subpkg}_done
|
|
||||||
found=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
pkg="${pkgname}-${version}"
|
|
||||||
if [ -d "$XBPS_DESTDIR/${pkg}" ]; then
|
|
||||||
msg_normal "${pkg}: removing files from destdir...\n"
|
|
||||||
rm -rf "$XBPS_DESTDIR/${pkg}"
|
|
||||||
found=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ -f $XBPS_PRE_INSTALL_DONE ] && rm -f $XBPS_PRE_INSTALL_DONE
|
|
||||||
[ -f $XBPS_POST_INSTALL_DONE ] && rm -f $XBPS_POST_INSTALL_DONE
|
|
||||||
[ -f $XBPS_INSTALL_DONE ] && rm -f $XBPS_INSTALL_DONE
|
|
||||||
|
|
||||||
if [ -n "$DESTDIR_ONLY_INSTALL" ]; then
|
|
||||||
if [ -n "$found" ]; then
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
msg_warn "${pkg}: not installed in destdir!\n"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
stow_pkg_handler unstow || return $?
|
|
||||||
|
|
||||||
[ -n "$found" ] && return 0
|
|
||||||
|
|
||||||
return 1
|
|
||||||
}
|
|
|
@ -1,80 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
_show_hard_pkg_deps()
|
|
||||||
{
|
|
||||||
local f tmplf deps revdepname _pkgn
|
|
||||||
|
|
||||||
_pkgn=$(echo "$1"|sed 's|\+|\\+|g')
|
|
||||||
deps=$(grep -E "^Add_dependency[[:blank:]]+(run|full|build)[[:blank:]]+${_pkgn}([[:space:]]+\".*\")*$" $XBPS_SRCPKGDIR/*/*template|sed 's/:Add_dependency.*//g')
|
|
||||||
for f in ${deps}; do
|
|
||||||
[ -h "$(dirname $f)" ] && continue
|
|
||||||
tmplf=$(basename $f)
|
|
||||||
if [ "$tmplf" != template ]; then
|
|
||||||
revdepname=${tmplf%.template}
|
|
||||||
else
|
|
||||||
revdepname=$(basename $(dirname $f))
|
|
||||||
fi
|
|
||||||
echo $revdepname
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
_show_shlib_pkg_deps()
|
|
||||||
{
|
|
||||||
local f j soname
|
|
||||||
|
|
||||||
soname=$(echo "$1"|sed 's|\+|\\+|g')
|
|
||||||
|
|
||||||
revshlibs=$(grep -E "^${soname}$" ${XBPS_SRCPKGDIR}/*/*.rshlibs)
|
|
||||||
for f in ${revshlibs}; do
|
|
||||||
unset pkg revdepname tmprev
|
|
||||||
revdepname=$(basename "$f")
|
|
||||||
revdepname=${revdepname%.rshlibs*}
|
|
||||||
tmprev=$(echo "$revdepname"|sed 's/-//g')
|
|
||||||
eval pkg=\$pkg_"${tmprev}"
|
|
||||||
if [ -z "${pkg}" ]; then
|
|
||||||
eval local pkg_${tmprev}=1
|
|
||||||
echo "$revdepname"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
show_pkg_revdeps()
|
|
||||||
{
|
|
||||||
local SHLIBS_MAP=$XBPS_COMMONDIR/shlibs
|
|
||||||
local _pkgn shlibs
|
|
||||||
|
|
||||||
[ -z "$1" ] && return 1
|
|
||||||
|
|
||||||
_pkgn=$(echo "$1"|sed 's|\+|\\+|g')
|
|
||||||
|
|
||||||
shlibs=$(grep -E "^lib.*\.so\.[[:digit:]]+[[:blank:]]+${_pkgn}[[:blank:]]?.*$" $SHLIBS_MAP|awk '{print $1}')
|
|
||||||
if [ -n "$shlibs" ]; then
|
|
||||||
# pkg provides shlibs
|
|
||||||
_show_shlib_pkg_deps "$shlibs"
|
|
||||||
fi
|
|
||||||
# show pkgs that use Add_dependency
|
|
||||||
_show_hard_pkg_deps "$1"
|
|
||||||
}
|
|
|
@ -1,211 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2008-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
stow_pkg_handler()
|
|
||||||
{
|
|
||||||
local action="$1" subpkg spkgrev
|
|
||||||
|
|
||||||
for subpkg in ${subpackages}; do
|
|
||||||
if [ -n "$revision" ]; then
|
|
||||||
spkgrev="${subpkg}-${version}_${revision}"
|
|
||||||
else
|
|
||||||
spkgrev="${subpkg}-${version}"
|
|
||||||
fi
|
|
||||||
if [ "$action" = "stow" ]; then
|
|
||||||
check_installed_pkg ${spkgrev}
|
|
||||||
[ $? -eq 0 ] && continue
|
|
||||||
fi
|
|
||||||
if [ ! -f $XBPS_SRCPKGDIR/${sourcepkg}/${subpkg}.template ]; then
|
|
||||||
msg_error "Cannot find $subpkg subpkg build template!\n"
|
|
||||||
fi
|
|
||||||
unset revision pre_install pre_remove post_install \
|
|
||||||
post_remove post_stow
|
|
||||||
. $XBPS_SRCPKGDIR/${sourcepkg}/${subpkg}.template
|
|
||||||
pkgname=${subpkg}
|
|
||||||
set_tmpl_common_vars
|
|
||||||
if [ "$action" = "stow" ]; then
|
|
||||||
stow_pkg_real || return $?
|
|
||||||
else
|
|
||||||
unstow_pkg_real || return $?
|
|
||||||
fi
|
|
||||||
setup_tmpl ${sourcepkg}
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ "$action" = "stow" ]; then
|
|
||||||
stow_pkg_real
|
|
||||||
else
|
|
||||||
unstow_pkg_real
|
|
||||||
fi
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Stow a package, i.e copy files from destdir into masterdir
|
|
||||||
# and register pkg into the package database.
|
|
||||||
#
|
|
||||||
stow_pkg_real()
|
|
||||||
{
|
|
||||||
local i lfile lver regpkgdb_flags
|
|
||||||
|
|
||||||
[ -z "$pkgname" ] && return 2
|
|
||||||
|
|
||||||
if [ $(id -u) -ne 0 ] && [ ! -w $XBPS_MASTERDIR ]; then
|
|
||||||
msg_error "cannot stow $pkgname! (permission denied)\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$build_style" -a "$build_style" = "meta-template" ]; then
|
|
||||||
[ ! -d ${DESTDIR} ] && mkdir -p ${DESTDIR}
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ -n "$stow_flag" ] && setup_tmpl $pkgname
|
|
||||||
|
|
||||||
cd ${DESTDIR} || return 1
|
|
||||||
|
|
||||||
if [ -n "$revision" ]; then
|
|
||||||
lver="${version}_${revision}"
|
|
||||||
else
|
|
||||||
lver="${version}"
|
|
||||||
fi
|
|
||||||
msg_normal "$pkgver: stowning files into masterdir, please wait...\n"
|
|
||||||
|
|
||||||
# Copy files into masterdir.
|
|
||||||
for i in $(find -print); do
|
|
||||||
lfile="$(echo $i|sed -e 's|^\./||')"
|
|
||||||
# Skip pkg metadata
|
|
||||||
if [ "$lfile" = "INSTALL" -o "$lfile" = "REMOVE" -o \
|
|
||||||
"$lfile" = "files.plist" -o "$lfile" = "props.plist" ]; then
|
|
||||||
continue
|
|
||||||
# Skip files that are already in masterdir.
|
|
||||||
elif [ -f "$XBPS_MASTERDIR/$lfile" ]; then
|
|
||||||
echo " Skipping $lfile file, already exists!"
|
|
||||||
continue
|
|
||||||
elif [ -h "$XBPS_MASTERDIR/$lfile" ]; then
|
|
||||||
echo " Skipping $lfile link, already exists!"
|
|
||||||
continue
|
|
||||||
elif [ -d "$XBPS_MASTERDIR/$lfile" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if [ -f "$i" -o -h "$i" ]; then
|
|
||||||
# Always copy the pkg metadata flist file.
|
|
||||||
if [ "$(basename $i)" = "flist" ]; then
|
|
||||||
cp -dp $i $XBPS_MASTERDIR/$lfile
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if [ -n "$IN_CHROOT" -a -n "$stow_copy_files" ]; then
|
|
||||||
# Templates that set stow_copy_files require
|
|
||||||
# some files to be copied, rather than symlinked.
|
|
||||||
local found
|
|
||||||
for j in ${stow_copy_files}; do
|
|
||||||
if [ "/$lfile" = "${j}" ]; then
|
|
||||||
found=1
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ -n "$found" ]; then
|
|
||||||
cp -dp $i $XBPS_MASTERDIR/$lfile
|
|
||||||
unset found
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ -n "$IN_CHROOT" -a -n "$stow_copy" -o -z "$IN_CHROOT" ]; then
|
|
||||||
# In the no-chroot case and templates that
|
|
||||||
# set $stow_copy, we can't stow with symlinks.
|
|
||||||
# Just copy them.
|
|
||||||
cp -dp $i $XBPS_MASTERDIR/$lfile
|
|
||||||
else
|
|
||||||
# Always use symlinks in the chroot with pkgs
|
|
||||||
# that don't have $stow_copy set, they can have
|
|
||||||
# full path.
|
|
||||||
ln -sf $DESTDIR/$lfile $XBPS_MASTERDIR/$lfile
|
|
||||||
fi
|
|
||||||
elif [ -d "$i" ]; then
|
|
||||||
mkdir -p $XBPS_MASTERDIR/$lfile
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
#
|
|
||||||
# Register pkg in plist file.
|
|
||||||
#
|
|
||||||
$XBPS_PKGDB_CMD register $pkgname $lver "$short_desc" || return $?
|
|
||||||
run_func post_stow
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Unstow a package, i.e remove its files from masterdir and
|
|
||||||
# unregister pkg from package database.
|
|
||||||
#
|
|
||||||
unstow_pkg_real()
|
|
||||||
{
|
|
||||||
local f ver
|
|
||||||
|
|
||||||
[ -z $pkgname ] && return 1
|
|
||||||
|
|
||||||
if [ $(id -u) -ne 0 ] && \
|
|
||||||
[ ! -w $XBPS_MASTERDIR ]; then
|
|
||||||
msg_error "cannot unstow $pkgname! (permission denied)\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
ver=$($XBPS_PKGDB_CMD version $pkgname)
|
|
||||||
if [ -z "$ver" ]; then
|
|
||||||
msg_warn "'${pkgname}' not installed in masterdir!\n"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$build_style" = "meta-template" ]; then
|
|
||||||
# If it's a metapkg, do nothing.
|
|
||||||
:
|
|
||||||
elif [ ! -f ${XBPS_PKGMETADIR}/${pkgname}/flist ]; then
|
|
||||||
msg_warn "${pkgname}-${ver}: wasn't installed from source!\n"
|
|
||||||
return 1
|
|
||||||
elif [ ! -w ${XBPS_PKGMETADIR}/${pkgname}/flist ]; then
|
|
||||||
msg_error "${pkgname}-${ver}: cannot be removed (permission denied).\n"
|
|
||||||
elif [ -s ${XBPS_PKGMETADIR}/${pkgname}/flist ]; then
|
|
||||||
msg_normal "${pkgname}-${ver}: removing files from masterdir...\n"
|
|
||||||
run_func pre_remove
|
|
||||||
# Remove installed files.
|
|
||||||
for f in $(cat ${XBPS_PKGMETADIR}/${pkgname}/flist); do
|
|
||||||
if [ -f $XBPS_MASTERDIR/$f -o -h $XBPS_MASTERDIR/$f ]; then
|
|
||||||
rm -f $XBPS_MASTERDIR/$f >/dev/null 2>&1
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo "Removing file: $f"
|
|
||||||
fi
|
|
||||||
elif [ -d $XBPS_MASTERDIR/$f ]; then
|
|
||||||
rmdir $XBPS_MASTERDIR/$f >/dev/null 2>&1
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo "Removing directory: $f"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
run_func post_remove
|
|
||||||
# Remove metadata dir.
|
|
||||||
[ -d $XBPS_PKGMETADIR/$pkgname ] && rm -rf $XBPS_PKGMETADIR/$pkgname
|
|
||||||
|
|
||||||
# Unregister pkg from plist file.
|
|
||||||
$XBPS_PKGDB_CMD unregister $pkgname $ver
|
|
||||||
return $?
|
|
||||||
}
|
|
|
@ -1,57 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2010-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
strip_files()
|
|
||||||
{
|
|
||||||
local subpkg
|
|
||||||
|
|
||||||
for subpkg in ${subpackages}; do
|
|
||||||
. $XBPS_SRCPKGDIR/${sourcepkg}/${subpkg}.template
|
|
||||||
pkgname=${subpkg}
|
|
||||||
set_tmpl_common_vars
|
|
||||||
strip_files_real
|
|
||||||
setup_tmpl ${sourcepkg}
|
|
||||||
done
|
|
||||||
|
|
||||||
strip_files_real
|
|
||||||
}
|
|
||||||
|
|
||||||
strip_files_real()
|
|
||||||
{
|
|
||||||
[ -n "$nostrip" -o -n "$noarch" ] && return 0
|
|
||||||
[ -z "$strip_cmd" ] && strip_cmd=strip
|
|
||||||
|
|
||||||
msg_normal "$pkgver: stripping files, please wait...\n"
|
|
||||||
find ${DESTDIR} -type f | while read f; do
|
|
||||||
case "$(file -bi "$f")" in
|
|
||||||
application/x-executable*)
|
|
||||||
${strip_cmd} "$f" && \
|
|
||||||
echo " Stripped executable: $(basename $f)";;
|
|
||||||
application/x-sharedlib*|application/x-archive*)
|
|
||||||
${strip_cmd} -S "$f" && \
|
|
||||||
echo " Stripped library: $(basename $f)";;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
}
|
|
|
@ -1,398 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2008-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
|
|
||||||
#
|
|
||||||
# Shows info about a template.
|
|
||||||
#
|
|
||||||
info_tmpl()
|
|
||||||
{
|
|
||||||
local i=
|
|
||||||
|
|
||||||
for f in $XBPS_COMMONDIR/*.sh; do
|
|
||||||
[ -r ${f} ] && . ${f}
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "pkgname: $pkgname"
|
|
||||||
echo "version: $version"
|
|
||||||
[ -n "$revision" ] && echo "revision: $revision"
|
|
||||||
for i in ${distfiles}; do
|
|
||||||
[ -n "$i" ] && echo "distfiles: $i"
|
|
||||||
done
|
|
||||||
for i in ${checksum}; do
|
|
||||||
[ -n "$i" ] && echo "checksum: $i"
|
|
||||||
done
|
|
||||||
[ -n "$noarch" ] && echo "noarch: yes"
|
|
||||||
echo "maintainer: $maintainer"
|
|
||||||
[ -n "$homepage" ] && echo "Upstream URL: $homepage"
|
|
||||||
[ -n "$license" ] && echo "License(s): $license"
|
|
||||||
[ -n "$build_style" ] && echo "build_style: $build_style"
|
|
||||||
for i in ${configure_args}; do
|
|
||||||
[ -n "$i" ] && echo "configure_args: $i"
|
|
||||||
done
|
|
||||||
echo "short_desc: $short_desc"
|
|
||||||
for i in ${subpackages}; do
|
|
||||||
[ -n "$i" ] && echo "subpackages: $i"
|
|
||||||
done
|
|
||||||
for i in ${conf_files}; do
|
|
||||||
[ -n "$i" ] && echo "conf_files: $i"
|
|
||||||
done
|
|
||||||
for i in ${replaces}; do
|
|
||||||
[ -n "$i" ] && echo "replaces: $i"
|
|
||||||
done
|
|
||||||
for i in ${conflicts}; do
|
|
||||||
[ -n "$i" ] && echo "conflicts: $i"
|
|
||||||
done
|
|
||||||
echo "$long_desc"
|
|
||||||
echo
|
|
||||||
check_build_depends_pkg
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo "This package requires the following build-time dependencies:"
|
|
||||||
for i in ${build_depends}; do
|
|
||||||
echo " $i"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
if [ -n "${run_depends}" ]; then
|
|
||||||
echo
|
|
||||||
echo "This package requires the folloring run-time dependencies:"
|
|
||||||
for i in ${run_depends}; do
|
|
||||||
echo " $i"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Resets all vars used by a template.
|
|
||||||
#
|
|
||||||
reset_tmpl_vars()
|
|
||||||
{
|
|
||||||
local TMPL_VARS="pkgname distfiles configure_args strip_cmd \
|
|
||||||
make_build_args make_install_args build_style \
|
|
||||||
short_desc maintainer long_desc checksum wrksrc \
|
|
||||||
make_cmd bootstrap register_shell \
|
|
||||||
make_build_target configure_script noextract nofetch \
|
|
||||||
build_depends nostrip nonfree \
|
|
||||||
make_install_target version revision patch_args \
|
|
||||||
sgml_catalogs xml_catalogs xml_entries sgml_entries \
|
|
||||||
disable_parallel_build run_depends font_dirs preserve \
|
|
||||||
only_for_archs conf_files keep_libtool_archives \
|
|
||||||
noarch subpackages sourcepkg gtk_iconcache_dirs \
|
|
||||||
abi_depends api_depends triggers make_dirs \
|
|
||||||
replaces system_accounts system_groups provides \
|
|
||||||
build_wrksrc create_wrksrc broken_as_needed pkgver \
|
|
||||||
ignore_vdeps_dir noverifyrdeps conflicts dkms_modules \
|
|
||||||
gconf_entries gconf_schemas stow_copy stow_copy_files \
|
|
||||||
pycompile_dirs pycompile_module systemd_services \
|
|
||||||
homepage license kernel_hooks_version makejobs \
|
|
||||||
SUBPKG XBPS_EXTRACT_DONE XBPS_CONFIGURE_DONE \
|
|
||||||
XBPS_BUILD_DONE XBPS_INSTALL_DONE FILESDIR DESTDIR \
|
|
||||||
SRCPKGDESTDIR PATCHESDIR CFLAGS CXXFLAGS CPPFLAGS \
|
|
||||||
CC CXX LDFLAGS LD_LIBRARY_PATH"
|
|
||||||
|
|
||||||
local TMPL_FUNCS="pre_configure pre_build pre_install do_build \
|
|
||||||
do_install do_configure post_configure post_build \
|
|
||||||
post_install do_fetch pre_remove post_remove \
|
|
||||||
post_stow post_extract"
|
|
||||||
|
|
||||||
eval unset -v "$TMPL_VARS"
|
|
||||||
eval unset -f "$TMPL_FUNCS"
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Reads a template file and setups required variables for operations.
|
|
||||||
#
|
|
||||||
setup_tmpl()
|
|
||||||
{
|
|
||||||
local pkg="$1"
|
|
||||||
|
|
||||||
[ -z "$pkg" ] && return 1
|
|
||||||
|
|
||||||
if [ "$pkgname" = "$pkg" ]; then
|
|
||||||
[ -n "$DESTDIR" ] && return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
for f in $XBPS_COMMONDIR/*.sh; do
|
|
||||||
[ -r ${f} ] && . ${f}
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -f $XBPS_SRCPKGDIR/${pkg}/template ]; then
|
|
||||||
reset_tmpl_vars
|
|
||||||
. $XBPS_SRCPKGDIR/${pkg}/template
|
|
||||||
prepare_tmpl
|
|
||||||
else
|
|
||||||
msg_error "Cannot find $pkg build template file.\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_subpkg_tmpl()
|
|
||||||
{
|
|
||||||
local f
|
|
||||||
|
|
||||||
[ -z "$1" ] && return 1
|
|
||||||
|
|
||||||
if [ -r "$XBPS_SRCPKGDIR/$1/$1.template" ]; then
|
|
||||||
setup_tmpl $1
|
|
||||||
unset run_depends build_depends
|
|
||||||
. $XBPS_SRCPKGDIR/$1/$1.template
|
|
||||||
for f in ${subpackages}; do
|
|
||||||
[ "$f" != "$1" ] && continue
|
|
||||||
pkgname=$f
|
|
||||||
set_tmpl_common_vars
|
|
||||||
SUBPKG=1
|
|
||||||
break
|
|
||||||
done
|
|
||||||
else
|
|
||||||
setup_tmpl $1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
check_builddep_dup()
|
|
||||||
{
|
|
||||||
local dep="$1" i
|
|
||||||
|
|
||||||
for i in ${build_depends}; do
|
|
||||||
[ "${i}" != "${dep}" ] && continue
|
|
||||||
return 1
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
check_rundep_dup()
|
|
||||||
{
|
|
||||||
local dep="$1" i
|
|
||||||
|
|
||||||
for i in ${run_depends}; do
|
|
||||||
[ "${i}" != "${dep}" ] && continue
|
|
||||||
return 1
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
dependency_version()
|
|
||||||
{
|
|
||||||
local type="$1" pkgn="$2"
|
|
||||||
|
|
||||||
if [ -f $XBPS_SRCPKGDIR/${pkgn}/${pkgn}.depends ]; then
|
|
||||||
. $XBPS_SRCPKGDIR/${pkgn}/${pkgn}.depends
|
|
||||||
elif [ -f $XBPS_SRCPKGDIR/${pkgn}/depends ]; then
|
|
||||||
. $XBPS_SRCPKGDIR/${pkgn}/depends
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$type" = "build" ]; then
|
|
||||||
if [ -z "$api_depends" ]; then
|
|
||||||
echo "${pkgn}>=0"
|
|
||||||
else
|
|
||||||
echo "${pkgn}${api_depends}"
|
|
||||||
fi
|
|
||||||
elif [ "$type" = "run" ]; then
|
|
||||||
if [ -z "$abi_depends" ]; then
|
|
||||||
echo "${pkgn}>=0"
|
|
||||||
else
|
|
||||||
echo "${pkgn}${abi_depends}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
unset abi_depends api_depends
|
|
||||||
}
|
|
||||||
|
|
||||||
Add_dependency()
|
|
||||||
{
|
|
||||||
local type="$1" pkgn="$2" ver="$3"
|
|
||||||
|
|
||||||
case "$type" in
|
|
||||||
build|full|run) ;;
|
|
||||||
*) msg_error "[$pkgname] Unknown dependency type for $pkgn.\n" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
[ -z "$pkgn" ] && msg_error "[$pkgname] Add_dependency: pkgname empty!\n"
|
|
||||||
|
|
||||||
if [ -f $XBPS_SRCPKGDIR/${pkgn}/${pkgn}.depends ]; then
|
|
||||||
. $XBPS_SRCPKGDIR/${pkgn}/${pkgn}.depends
|
|
||||||
elif [ -f $XBPS_SRCPKGDIR/${pkgn}/depends ]; then
|
|
||||||
. $XBPS_SRCPKGDIR/${pkgn}/depends
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$type" = "full" -o "$type" = "build" ]; then
|
|
||||||
if [ -z "$ver" -a -z "$api_depends" ]; then
|
|
||||||
if check_builddep_dup "${pkgn}>=0"; then
|
|
||||||
build_depends="${build_depends} ${pkgn}>=0"
|
|
||||||
fi
|
|
||||||
elif [ -z "$ver" -a -n "$api_depends" ]; then
|
|
||||||
if check_builddep_dup "${pkgn}${api_depends}"; then
|
|
||||||
build_depends="${build_depends} ${pkgn}${api_depends}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if check_builddep_dup "${pkgn}${version}"; then
|
|
||||||
build_depends="${build_depends} ${pkgn}${ver}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$type" = "full" -o "$type" = "run" ]; then
|
|
||||||
if [ -z "$ver" -a -z "$abi_depends" ]; then
|
|
||||||
if check_rundep_dup "${pkgn}>=0"; then
|
|
||||||
run_depends="${run_depends} ${pkgn}>=0"
|
|
||||||
fi
|
|
||||||
elif [ -z "$ver" -a -n "$abi_depends" ]; then
|
|
||||||
if check_rundep_dup "${pkgn}${api_depends}"; then
|
|
||||||
run_depends="${run_depends} ${pkgn}${abi_depends}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if check_rundep_dup "${pkgn}${ver}"; then
|
|
||||||
run_depends="${run_depends} ${pkgn}${ver}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
unset abi_depends api_depends
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Checks some vars used in templates and sets some of them required.
|
|
||||||
#
|
|
||||||
prepare_tmpl()
|
|
||||||
{
|
|
||||||
local REQ_VARS i found
|
|
||||||
|
|
||||||
REQ_VARS="pkgname version short_desc long_desc"
|
|
||||||
|
|
||||||
if [ -n "$build_style" -a "$build_style" = "meta-template" ]; then
|
|
||||||
nofetch=yes
|
|
||||||
noextract=yes
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if required vars weren't set.
|
|
||||||
for i in ${REQ_VARS}; do
|
|
||||||
eval val="\$$i"
|
|
||||||
if [ -z "$val" -o -z "$i" ]; then
|
|
||||||
msg_error "\"$i\" not set on $pkgname template.\n"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -n "$only_for_archs" ]; then
|
|
||||||
if $(echo "$only_for_archs"|grep -q "$XBPS_MACHINE"); then
|
|
||||||
found=1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ -n "${only_for_archs}" -a -z "$found" ]; then
|
|
||||||
msg_error "$pkgname: this package cannot be built on $XBPS_MACHINE.\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
unset XBPS_EXTRACT_DONE XBPS_APPLYPATCHES_DONE
|
|
||||||
unset XBPS_CONFIGURE_DONE XBPS_BUILD_DONE XBPS_INSTALL_DONE
|
|
||||||
|
|
||||||
[ -z "$wrksrc" ] && wrksrc="$pkgname-$version"
|
|
||||||
wrksrc="$XBPS_BUILDDIR/$wrksrc"
|
|
||||||
|
|
||||||
XBPS_FETCH_DONE="$wrksrc/.xbps_fetch_done"
|
|
||||||
XBPS_EXTRACT_DONE="$wrksrc/.xbps_extract_done"
|
|
||||||
XBPS_APPLYPATCHES_DONE="$wrksrc/.xbps_applypatches_done"
|
|
||||||
XBPS_CONFIGURE_DONE="$wrksrc/.xbps_configure_done"
|
|
||||||
XBPS_PRECONFIGURE_DONE="$wrksrc/.xbps_pre_configure_done"
|
|
||||||
XBPS_POSTCONFIGURE_DONE="$wrksrc/.xbps_post_configure_done"
|
|
||||||
XBPS_BUILD_DONE="$wrksrc/.xbps_build_done"
|
|
||||||
XBPS_PRE_BUILD_DONE="$wrksrc/.xbps_pre_build_done"
|
|
||||||
XBPS_POST_BUILD_DONE="$wrksrc/.xbps_post_build_done"
|
|
||||||
XBPS_INSTALL_DONE="$wrksrc/.xbps_install_done"
|
|
||||||
XBPS_PRE_INSTALL_DONE="$wrksrc/.xbps_pre_install_done"
|
|
||||||
XBPS_POST_INSTALL_DONE="$wrksrc/.xbps_post_install_done"
|
|
||||||
|
|
||||||
set_tmpl_common_vars
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_tmpl_wrksrc()
|
|
||||||
{
|
|
||||||
local lwrksrc="$1"
|
|
||||||
|
|
||||||
if [ ! -d "$lwrksrc" ]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_normal "$pkgver: cleaning build directory...\n"
|
|
||||||
rm -rf $lwrksrc
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
set_tmpl_common_vars()
|
|
||||||
{
|
|
||||||
local cflags cxxflags cppflags ldflags
|
|
||||||
|
|
||||||
[ -z "$pkgname" ] && return 1
|
|
||||||
|
|
||||||
if [ -n "$revision" ]; then
|
|
||||||
pkgver="${pkgname}-${version}_${revision}"
|
|
||||||
else
|
|
||||||
pkgver="${pkgname}-${version}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
. $XBPS_SHUTILSDIR/install_files.sh
|
|
||||||
|
|
||||||
if [ -n "$BOOTSTRAP_PKG_REBUILD" ]; then
|
|
||||||
unset bootstrap
|
|
||||||
fi
|
|
||||||
|
|
||||||
FILESDIR=$XBPS_SRCPKGDIR/$pkgname/files
|
|
||||||
PATCHESDIR=$XBPS_SRCPKGDIR/$pkgname/patches
|
|
||||||
DESTDIR=${XBPS_DESTDIR}/${pkgname}-${version}
|
|
||||||
if [ -z "${sourcepkg}" ]; then
|
|
||||||
sourcepkg=${pkgname}
|
|
||||||
fi
|
|
||||||
SRCPKGDESTDIR=${XBPS_DESTDIR}/${sourcepkg}-${version}
|
|
||||||
|
|
||||||
[ -n "$XBPS_CFLAGS" ] && cflags="$XBPS_CFLAGS"
|
|
||||||
[ -n "$CFLAGS" ] && cflags="$cflags $CFLAGS"
|
|
||||||
[ -n "$XBPS_CXXFLAGS" ] && cxxflags="$XBPS_CXXFLAGS"
|
|
||||||
[ -n "$CXXFLAGS" ] && cxxflags="$cxxflags $CXXFLAGS"
|
|
||||||
[ -n "$XBPS_CPPFLAGS" ] && cppflags="$XBPS_CPPFLAGS"
|
|
||||||
[ -n "$CPPFLAGS" ] && cppflags="$cppflags $CPPFLAGS"
|
|
||||||
[ -n "$XBPS_LDFLAGS" ] && ldflags="$XBPS_LDFLAGS"
|
|
||||||
[ -n "$LDFLAGS" ] && ldflags="$ldflags $LDFLAGS"
|
|
||||||
|
|
||||||
[ -n "$cflags" ] && export CFLAGS="$cflags"
|
|
||||||
[ -n "$cxxflags" ] && export CXXFLAGS="$cxxflags"
|
|
||||||
[ -n "$cppflags" ] && export CPPFLAGS="$cppflags"
|
|
||||||
[ -n "$ldflags" ] && export LDFLAGS="$ldflags"
|
|
||||||
|
|
||||||
if [ -n "$broken_as_needed" -a -n "$XBPS_LDFLAGS" ]; then
|
|
||||||
export LDFLAGS="$(echo $LDFLAGS|sed -e "s|-Wl,--as-needed||g")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$IN_CHROOT" ]; then
|
|
||||||
export CPPFLAGS="-I$XBPS_MASTERDIR/usr/include"
|
|
||||||
if [ -d /usr/lib/libfakeroot ]; then
|
|
||||||
LDLIBPATH="/usr/lib/libfakeroot:$XBPS_MASTERDIR/usr/lib"
|
|
||||||
else
|
|
||||||
LDLIBPATH="$XBPS_MASTERDIR/usr/lib"
|
|
||||||
fi
|
|
||||||
if [ -n "$BUILD_32BIT" ]; then
|
|
||||||
# Force gcc multilib to emit 32bit binaries.
|
|
||||||
export CC="gcc -m32"
|
|
||||||
export CXX="g++ -m32"
|
|
||||||
# Export default 32bit directories.
|
|
||||||
LDLIBPATH="$LDLIBPATH:/lib32:/usr/lib32"
|
|
||||||
LDFLAGS="-L/lib32 -L/usr/lib32"
|
|
||||||
fi
|
|
||||||
export LDFLAGS="$LDFLAGS -L$XBPS_MASTERDIR/usr/lib"
|
|
||||||
export LD_LIBRARY_PATH="$LDLIBPATH"
|
|
||||||
fi
|
|
||||||
}
|
|
|
@ -1,241 +0,0 @@
|
||||||
#-
|
|
||||||
# Copyright (c) 2010-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
#
|
|
||||||
# Finds all required libraries for a package, by looking at its executables
|
|
||||||
# and shared libraries and skipping duplicated matches.
|
|
||||||
#
|
|
||||||
# Once the list is known it finds the binary package names mapped to those
|
|
||||||
# libraries and reports if any of them was not added.
|
|
||||||
#
|
|
||||||
|
|
||||||
find_rundep()
|
|
||||||
{
|
|
||||||
local dep="$1" i rpkgdep
|
|
||||||
|
|
||||||
for i in ${run_depends}; do
|
|
||||||
rpkgdep="$($XBPS_PKGDB_CMD getpkgdepname $i)"
|
|
||||||
[ "${rpkgdep}" != "${dep}" ] && continue
|
|
||||||
return 1
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
verify_rundeps()
|
|
||||||
{
|
|
||||||
local j f nlib verify_deps maplib found_dup igndir soname_arch
|
|
||||||
local broken rdep found rsonamef soname_list revbumped tmplf newrev
|
|
||||||
|
|
||||||
maplib=$XBPS_COMMONDIR/shlibs
|
|
||||||
|
|
||||||
[ -n "$noarch" -o -n "$noverifyrdeps" ] && return 0
|
|
||||||
msg_normal "$pkgver: verifying required shlibs...\n"
|
|
||||||
|
|
||||||
depsftmp=$(mktemp -t xbps_src_depstmp.XXXXXXXXXX) || exit 1
|
|
||||||
find ${1} -type f -perm -u+w > $depsftmp 2>/dev/null
|
|
||||||
|
|
||||||
exec 3<&0 # save stdin
|
|
||||||
exec < $depsftmp
|
|
||||||
while read f; do
|
|
||||||
# Don't check dirs specified in ignore_vdeps_dir.
|
|
||||||
for j in ${ignore_vdeps_dir}; do
|
|
||||||
if grep -q ${j} "${f}"; then
|
|
||||||
igndir=1
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
[ -n "$igndir" ] && continue
|
|
||||||
unset igndir
|
|
||||||
|
|
||||||
case "$(file -bi "$f")" in
|
|
||||||
application/x-executable*|application/x-sharedlib*)
|
|
||||||
for nlib in $(objdump -p "$f"|grep NEEDED|awk '{print $2}'); do
|
|
||||||
if [ -z "$verify_deps" ]; then
|
|
||||||
verify_deps="$nlib"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
for j in ${verify_deps}; do
|
|
||||||
[ "$j" != "$nlib" ] && continue
|
|
||||||
found_dup=1
|
|
||||||
break
|
|
||||||
done
|
|
||||||
if [ -z "$found_dup" ]; then
|
|
||||||
verify_deps="$verify_deps $nlib"
|
|
||||||
fi
|
|
||||||
unset found_dup
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
exec 0<&3 # restore stdin
|
|
||||||
rm -f $depsftmp
|
|
||||||
|
|
||||||
if [ -f $XBPS_SRCPKGDIR/$pkgname/$pkgname.template ]; then
|
|
||||||
tmplf=$XBPS_SRCPKGDIR/$pkgname/$pkgname.template
|
|
||||||
else
|
|
||||||
tmplf=$XBPS_SRCPKGDIR/$pkgname/template
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
# Add required run time packages by using required shlibs resolved
|
|
||||||
# above, the mapping is done thru the mapping_shlib_binpkg.txt file.
|
|
||||||
#
|
|
||||||
for f in ${verify_deps}; do
|
|
||||||
unset j rdep _rdep rdepcnt
|
|
||||||
rdep="$(grep "^${f}.*$" $maplib|awk '{print $2}')"
|
|
||||||
rdepcnt="$(grep "^${f}.*$" $maplib|awk '{print $2}'|wc -l)"
|
|
||||||
if [ -z "$rdep" ]; then
|
|
||||||
# Ignore libs by current pkg
|
|
||||||
soname=$(find ${DESTDIR} -type f -name "$f");
|
|
||||||
if [ -z "$soname" ]; then
|
|
||||||
echo " SONAME: $f <-> UNKNOWN PKG PLEASE FIX!"
|
|
||||||
broken=1
|
|
||||||
else
|
|
||||||
echo " SONAME: $f <-> $pkgname (ignored)"
|
|
||||||
fi
|
|
||||||
continue
|
|
||||||
elif [ "$rdepcnt" -gt 1 ]; then
|
|
||||||
unset j found
|
|
||||||
# Check if shlib is provided by multiple pkgs.
|
|
||||||
for j in ${rdep}; do
|
|
||||||
# if there's a SONAME matching pkgname, use it.
|
|
||||||
[ "${j}" != "${pkgname}" ] && continue
|
|
||||||
found=1
|
|
||||||
break
|
|
||||||
done
|
|
||||||
if [ -n "$found" ]; then
|
|
||||||
_rdep=$j
|
|
||||||
else
|
|
||||||
# otherwise pick up the first one.
|
|
||||||
for j in ${rdep}; do
|
|
||||||
[ -z "${_rdep}" ] && _rdep=$j
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
_rdep=$rdep
|
|
||||||
fi
|
|
||||||
if [ "${_rdep}" != "$pkgname" ]; then
|
|
||||||
echo " SONAME: $f <-> ${_rdep}"
|
|
||||||
else
|
|
||||||
# Ignore libs by current pkg
|
|
||||||
echo " SONAME: $f <-> ${_rdep} (ignored)"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
# Add required shlib to rundeps.
|
|
||||||
if [ -z "$soname_list" ]; then
|
|
||||||
soname_list="${f}"
|
|
||||||
else
|
|
||||||
soname_list="${soname_list} ${f}"
|
|
||||||
fi
|
|
||||||
# Try to remove the line from template
|
|
||||||
sed -i -r "/^Add_dependency run ${_rdep}([[:space:]]+\".*\")*$/d" $tmplf
|
|
||||||
if find_rundep ${_rdep}; then
|
|
||||||
Add_dependency run ${_rdep}
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
#
|
|
||||||
# If pkg uses any SONAME not known, error out.
|
|
||||||
#
|
|
||||||
[ -n "$broken" ] && \
|
|
||||||
msg_error "$pkgver: cannot guess required shlibs, aborting!\n"
|
|
||||||
|
|
||||||
#
|
|
||||||
# Update package's rshlibs file.
|
|
||||||
#
|
|
||||||
unset broken f
|
|
||||||
msg_normal "$pkgver: updating rshlibs file...\n"
|
|
||||||
rsonamef=${XBPS_SRCPKGDIR}/${pkgname}/${pkgname}.rshlibs
|
|
||||||
if [ ! -f $rsonamef ]; then
|
|
||||||
# file not found, add soname.
|
|
||||||
for j in ${soname_list}; do
|
|
||||||
echo " SONAME: $j (added)"
|
|
||||||
echo "${j}" >> $rsonamef
|
|
||||||
done
|
|
||||||
[ -n "$soname_list" ] && broken=1
|
|
||||||
else
|
|
||||||
# check if soname is already in the rshlibs file.
|
|
||||||
for j in ${soname_list}; do
|
|
||||||
if ! grep -q "$j" $rsonamef; then
|
|
||||||
echo " SONAME: $j (added)"
|
|
||||||
echo "$j" >> $rsonamef
|
|
||||||
broken=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
unset f
|
|
||||||
exec 3<&0 # save stdin
|
|
||||||
exec < $rsonamef
|
|
||||||
# now check if any soname in the rshlibs file is unnecessary.
|
|
||||||
while read f; do
|
|
||||||
local _soname=$(echo "$f"|awk '{print $1}')
|
|
||||||
local _soname_arch=$(echo "$f"|awk '{print $2}')
|
|
||||||
|
|
||||||
for j in ${soname_list}; do
|
|
||||||
if [ "${_soname}" = "$j" ]; then
|
|
||||||
found=1
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ -n "$found" ]; then
|
|
||||||
unset found
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
# Sometimes a required SONAME is arch dependent, so
|
|
||||||
# ignore it in such case.
|
|
||||||
if [ -n "${_soname_arch}" -a "${_soname_arch}" != "$XBPS_MACHINE" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If SONAME is arch specific, only remove it if
|
|
||||||
# matching on the target arch.
|
|
||||||
_soname_arch=$(grep "$f" $maplib|awk '{print $4}')
|
|
||||||
if [ -z "${_soname_arch}" ] || \
|
|
||||||
[ -n "${_soname_arch}" -a "${_soname_arch}" = "$XBPS_MACHINE" ]; then
|
|
||||||
echo " SONAME: $f (removed, not required)"
|
|
||||||
sed -i "/^${_soname}$/d" $rsonamef
|
|
||||||
broken=1
|
|
||||||
fi
|
|
||||||
unset _soname _soname_arch
|
|
||||||
done
|
|
||||||
exec 0<&3 # restore stdin
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$broken" ]; then
|
|
||||||
msg_warn "$pkgver: shlibs changed... package has been revbumped!\n"
|
|
||||||
_rev=$(egrep '^revision=.*' $tmplf)
|
|
||||||
if [ -n "${_rev}" ]; then
|
|
||||||
if [ -z "$revbumped" ]; then
|
|
||||||
readonly newrev=$((${_rev#revision=} + 1))
|
|
||||||
sed -i "s/^revision=.*$/revision=${newrev}/" $tmplf
|
|
||||||
export revision=${newrev}
|
|
||||||
export pkgver="${pkgname}-${version}_${revision}"
|
|
||||||
revbumped=1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if [ -z "$revbumped" ]; then
|
|
||||||
sed -i "/^short_desc=.*$/irevision=1" $tmplf
|
|
||||||
export revision=1
|
|
||||||
export pkgver="${pkgname}-${version}_${revision}"
|
|
||||||
revbumped=1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
# Common variables.
|
|
||||||
|
|
||||||
PREFIX ?= /usr/local
|
|
||||||
SBINDIR ?= $(DESTDIR)$(PREFIX)/sbin
|
|
||||||
#
|
|
||||||
# The following vars shouldn't be specified with DESTDIR!
|
|
||||||
#
|
|
||||||
SHAREDIR ?= $(PREFIX)/share/xbps-src
|
|
||||||
LIBEXECDIR ?= $(PREFIX)/libexec/xbps-src
|
|
||||||
ETCDIR ?= $(PREFIX)/etc/xbps
|
|
|
@ -1,508 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# Copyright (c) 2008-2011 Juan Romero Pardines.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in the
|
|
||||||
# documentation and/or other materials provided with the distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#-
|
|
||||||
readonly XBPS_SRC_BUILD_VERSION=20111118-1
|
|
||||||
|
|
||||||
if [ -n "$IN_CHROOT" ]; then
|
|
||||||
export XBPS_ETCDIR=/usr/local/etc/xbps
|
|
||||||
export XBPS_SHAREDIR=/usr/local/share/xbps-src
|
|
||||||
export XBPS_LIBEXECDIR=/usr/local/libexec/xbps-src
|
|
||||||
else
|
|
||||||
export XBPS_PREFIX=@@XBPS_INSTALL_PREFIX@@
|
|
||||||
export XBPS_ETCDIR=@@XBPS_INSTALL_ETCDIR@@
|
|
||||||
export XBPS_SBINDIR=@@XBPS_INSTALL_SBINDIR@@
|
|
||||||
export XBPS_SHAREDIR=@@XBPS_INSTALL_SHAREDIR@@
|
|
||||||
export XBPS_LIBEXECDIR=@@XBPS_INSTALL_LIBEXECDIR@@
|
|
||||||
fi
|
|
||||||
|
|
||||||
XBPS_CONFIG_FILE=${XBPS_ETCDIR}/xbps-src.conf
|
|
||||||
PROGNAME=$(basename $0)
|
|
||||||
FAKEROOT_CMD=/usr/bin/fakeroot
|
|
||||||
FAKEROOT_CMD_ARGS="--"
|
|
||||||
SUDO_CMD=sudo
|
|
||||||
CHROOT_CMD=chroot
|
|
||||||
XBPS_MACHINE=$(uname -m)
|
|
||||||
|
|
||||||
# Required utilities in host system.
|
|
||||||
REQHOST_UTILS="awk bash bison sed gcc msgfmt patch makeinfo \
|
|
||||||
perl fakeroot tar xz gzip bzip2 xbps-bin.static \
|
|
||||||
xbps-repo.static xbps-uhelper.static"
|
|
||||||
|
|
||||||
check_reqhost_utils()
|
|
||||||
{
|
|
||||||
local broken
|
|
||||||
|
|
||||||
[ -n "$IN_CHROOT" ] && return 0
|
|
||||||
|
|
||||||
for f in ${REQHOST_UTILS}; do
|
|
||||||
if ! command -v ${f} 2>&1 >/dev/null; then
|
|
||||||
echo "${f} is missing in your system, can't continue!"
|
|
||||||
broken=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
[ -n "$broken" ] && exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
usage()
|
|
||||||
{
|
|
||||||
cat << _EOF
|
|
||||||
$PROGNAME: [-BCDhKS] [-c file] [-m dir] [-p dir] [-s dir] [target] [pkgname]
|
|
||||||
|
|
||||||
Targets:
|
|
||||||
bootstrap
|
|
||||||
Build and install from source the bootstrap packages into <masterdir>.
|
|
||||||
|
|
||||||
bootstrap-update
|
|
||||||
Updates bootstrap packages with latest versions available from registered
|
|
||||||
repositories in the XBPS configuration file, by default set to
|
|
||||||
<masterdir>/usr/local/etc/xbps/repositories.plist.
|
|
||||||
|
|
||||||
build [pkgname]
|
|
||||||
Build package source (fetch + extract + configure + build).
|
|
||||||
|
|
||||||
build-pkg [pkgname|all]
|
|
||||||
Build a binary package from <pkgname> or all packages with the <all>
|
|
||||||
keyword. The package(s) must be installed into <destdir> for this to work.
|
|
||||||
|
|
||||||
checkvers
|
|
||||||
Checks installed package versions in <masterdir> against the srcpkgs tree
|
|
||||||
for new available versions.
|
|
||||||
|
|
||||||
chroot
|
|
||||||
Enter to the chroot in <masterdir>.
|
|
||||||
|
|
||||||
clean [pkgname]
|
|
||||||
Remove <pkgname> build directory.
|
|
||||||
|
|
||||||
clean-autodeps
|
|
||||||
Removes all package dependencies installed automatically.
|
|
||||||
|
|
||||||
configure [pkgname]
|
|
||||||
Configure a package (fetch + extract + configure).
|
|
||||||
|
|
||||||
extract [pkgname]
|
|
||||||
Extract package source distribution file(s) into the build directory.
|
|
||||||
By default set to <masterdir>/builddir.
|
|
||||||
|
|
||||||
fetch [pkgname]
|
|
||||||
Download package source distribution file(s).
|
|
||||||
|
|
||||||
install [pkgname]
|
|
||||||
Installs a package into destination directory and \`stows' its files into
|
|
||||||
<masterdir>. If a package is not from bootstrap group, its files will be
|
|
||||||
symlinked rather than being fully copied.
|
|
||||||
|
|
||||||
list
|
|
||||||
List installed packages in <masterdir>.
|
|
||||||
|
|
||||||
make-repoidx
|
|
||||||
Build a package index for the local repository associated with the
|
|
||||||
master directory <masterdir>. By default set to <masterdir/host/binpkgs.
|
|
||||||
To specify another repo, use -p <dir>.
|
|
||||||
|
|
||||||
remove [pkgname]
|
|
||||||
Remove package completely from <destdir> and <masterdir>.
|
|
||||||
|
|
||||||
show [pkgname]
|
|
||||||
Show information for the specified package.
|
|
||||||
|
|
||||||
show-files <pkgname>
|
|
||||||
Show package files from <pkgname>. Package must be fully installed
|
|
||||||
into <masterdir> for this to work (stowed).
|
|
||||||
|
|
||||||
show-revdeps <pkgname>
|
|
||||||
Show reverse dependencies for <pkgname>, i.e packages that are currently
|
|
||||||
depending on <pkgname>.
|
|
||||||
|
|
||||||
stow [pkgname]
|
|
||||||
Stow <pkgname> files from <destdir> into <masterdir> and register package
|
|
||||||
in database. When a package is \`stowed', its files will be available in
|
|
||||||
<masterdir>, and other packages will be able to found it.
|
|
||||||
|
|
||||||
unstow [pkgname]
|
|
||||||
Remove <pkgname> files from <masterdir> and unregister package
|
|
||||||
from database.
|
|
||||||
|
|
||||||
On targets that accept [pkgname], a package name can be specified and xbps-src
|
|
||||||
will execute the task on any CWD (Current Working Directory). If the argument
|
|
||||||
is omitted xbps-src assumes that CWD is in the target package. Example:
|
|
||||||
|
|
||||||
$ cd srcpkgs/libX11 && xbps-src install
|
|
||||||
$ xbps-src install libX11
|
|
||||||
|
|
||||||
Both ways are equivalent.
|
|
||||||
|
|
||||||
Options:
|
|
||||||
-B Used in the install target, a binary package is built for any
|
|
||||||
required dependency as well as for <pkgname>. The local repository
|
|
||||||
pkg-index is created or updated after a successful package installation.
|
|
||||||
-C Do not remove build directory after successful installation.
|
|
||||||
-c Path to global configuration file:
|
|
||||||
if not specified ${XBPS_ETCDIR}/xbps-src.conf is used.
|
|
||||||
-D Only install <pkgname> to package's destdir (set to
|
|
||||||
<masterdir>/destdir/<pkgname>-<version> by default).
|
|
||||||
-h Usage output.
|
|
||||||
-K Do not remove automatic package dependencies while building
|
|
||||||
or installing a package with XBPS_PREFER_BINPKG_DEPS enabled.
|
|
||||||
-m Master directory, overwritting the value set in the configuration
|
|
||||||
file xbps-src.conf.
|
|
||||||
-p Local packages repository, overwritting default path at
|
|
||||||
<masterdir>/host/binpkgs or if XBPS_HOSTDIR is set <hostdir>/binpkgs.
|
|
||||||
-S Overrides and disables XBPS_PREFER_BINPKG_DEPS even if it was
|
|
||||||
set in the configuration file xbps-src.conf.
|
|
||||||
-s Source distribution files directory, overwritting default path at
|
|
||||||
<masterdir>/host/sources or if XBPS_HOSTDIR is set <hostdir>/sources.
|
|
||||||
_EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
basename_cwd()
|
|
||||||
{
|
|
||||||
echo $(basename $(pwd))
|
|
||||||
}
|
|
||||||
|
|
||||||
check_path()
|
|
||||||
{
|
|
||||||
eval local orig="$1"
|
|
||||||
|
|
||||||
case "$orig" in
|
|
||||||
/) ;;
|
|
||||||
/*) orig="${orig%/}" ;;
|
|
||||||
*) orig="$(pwd)/${orig%/}" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
path_fixed="$orig"
|
|
||||||
}
|
|
||||||
|
|
||||||
run_file()
|
|
||||||
{
|
|
||||||
local file="$1"
|
|
||||||
|
|
||||||
check_path "$file"
|
|
||||||
. $path_fixed
|
|
||||||
}
|
|
||||||
|
|
||||||
check_config_vars()
|
|
||||||
{
|
|
||||||
local val cffound f cfpaths cf="xbps-src.conf"
|
|
||||||
|
|
||||||
if [ -z "$XBPS_CONFIG_FILE" ]; then
|
|
||||||
cfpaths="@@XBPS_INSTALL_PREFIX@@/etc/${cf} ./etc/${cf}"
|
|
||||||
for f in $cfpaths; do
|
|
||||||
if [ -f ${f} ]; then
|
|
||||||
XBPS_CONFIG_FILE=${f}
|
|
||||||
cffound=yes
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
[ -z "$cffound" ] && msg_error "cannot find a config file\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
run_file ${XBPS_CONFIG_FILE}
|
|
||||||
export XBPS_CONFIG_FILE=$path_fixed
|
|
||||||
|
|
||||||
if [ ! -f "$XBPS_CONFIG_FILE" ]; then
|
|
||||||
msg_error "cannot find configuration file: $XBPS_CONFIG_FILE\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
for f in XBPS_DISTRIBUTIONDIR XBPS_MASTERDIR; do
|
|
||||||
eval val="\$${f}"
|
|
||||||
if [ -z "$val" ]; then
|
|
||||||
msg_error "'${f}' not set in configuration file!\n"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ ! -w "$XBPS_MASTERDIR" ]; then
|
|
||||||
echo "ERROR: not enough perms for masterdir $XBPS_MASTERDIR.\n"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# main()
|
|
||||||
#
|
|
||||||
while getopts "CBc:DhKm:p:Ss:V" opt; do
|
|
||||||
case $opt in
|
|
||||||
B) export BUILD_BINPKG=1;;
|
|
||||||
C) export KEEP_WRKSRC=1;;
|
|
||||||
c) XBPS_CONFIG_FILE="$OPTARG";;
|
|
||||||
D) export DESTDIR_ONLY_INSTALL=1;;
|
|
||||||
h) usage && exit 0;;
|
|
||||||
K) export KEEP_AUTODEPS=1;;
|
|
||||||
m)
|
|
||||||
_MASTERDIR_FLAG=1
|
|
||||||
_MASTERDIR="$OPTARG"
|
|
||||||
if [ ! -d ${_MASTERDIR} ]; then
|
|
||||||
mkdir -p ${_MASTERDIR}
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
p)
|
|
||||||
_PACKAGEDIR="$OPTARG"
|
|
||||||
if [ ! -d ${_PACKAGEDIR} ]; then
|
|
||||||
mkdir -p ${_PACKAGEDIR}/${XBPS_MACHINE}
|
|
||||||
mkdir -p ${_PACKAGEDIR}/noarch
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
S) UNSET_PREFER_BINPKG_DEPS=1;;
|
|
||||||
s) export XBPS_SRCDISTDIR="$OPTARG";;
|
|
||||||
V) echo $XBPS_SRC_BUILD_VERSION && exit 0;;
|
|
||||||
--) shift; break;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift $(($OPTIND - 1))
|
|
||||||
|
|
||||||
[ $# -eq 0 -o $# -gt 2 ] && usage && exit 1
|
|
||||||
|
|
||||||
target="$1"
|
|
||||||
_pkgname="$2"
|
|
||||||
|
|
||||||
if [ -z "$target" ]; then
|
|
||||||
echo "=> ERROR: missing target."
|
|
||||||
usage && exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
#
|
|
||||||
# Check configuration vars before anyting else, and set defaults vars.
|
|
||||||
#
|
|
||||||
check_config_vars
|
|
||||||
if [ -n "${_MASTERDIR}" ]; then
|
|
||||||
export XBPS_MASTERDIR=${_MASTERDIR}
|
|
||||||
fi
|
|
||||||
. ${XBPS_SHAREDIR}/shutils/init_funcs.sh
|
|
||||||
|
|
||||||
set_defvars
|
|
||||||
for f in $XBPS_SHUTILSDIR/*.sh; do
|
|
||||||
[ -r "$f" ] && . $f
|
|
||||||
done
|
|
||||||
|
|
||||||
# Disable XBPS_PREFER_BINPKG_DEPS if requested.
|
|
||||||
[ -n "$UNSET_PREFER_BINPKG_DEPS" ] && unset XBPS_PREFER_BINPKG_DEPS
|
|
||||||
|
|
||||||
#
|
|
||||||
# Check for required utilities in host system.
|
|
||||||
#
|
|
||||||
check_reqhost_utils
|
|
||||||
|
|
||||||
#
|
|
||||||
# Fix up some vars when XBPS_USE_CAPABILITIES is set.
|
|
||||||
#
|
|
||||||
if [ -z "$IN_CHROOT" -a -n "$XBPS_USE_CAPABILITIES" ]; then
|
|
||||||
CHROOT_CMD="@@XBPS_INSTALL_LIBEXECDIR@@/capchroot"
|
|
||||||
unset SUDO_CMD
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$(id -u)" -eq 0 ]; then
|
|
||||||
# disable sudo and fakeroot if uid==0
|
|
||||||
CHROOT_CMD="chroot"
|
|
||||||
unset SUDO_CMD
|
|
||||||
if [ -n "$IN_CHROOT" ]; then
|
|
||||||
unset FAKEROOT_CMD
|
|
||||||
unset FAKEROOT_CMD_ARGS
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
#
|
|
||||||
# Sanitize PATH.
|
|
||||||
#
|
|
||||||
if [ -z "$IN_CHROOT" ]; then
|
|
||||||
# In non chroot case always prefer host tools.
|
|
||||||
MYPATH="$PATH:$XBPS_MASTERDIR/bin:$XBPS_MASTERDIR/usr/bin"
|
|
||||||
MYPATH="$MYPATH:$XBPS_MASTERDIR/usr/local/bin"
|
|
||||||
MYPATH="$MYPATH:$XBPS_MASTERDIR/usr/local/sbin"
|
|
||||||
export PATH="$MYPATH"
|
|
||||||
else
|
|
||||||
MYPATH="/tools/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin"
|
|
||||||
MYPATH="$MYPATH:/usr/local/bin:/usr/lib/perl5/core_perl/bin"
|
|
||||||
export PATH="$MYPATH"
|
|
||||||
if [ -n "$XBPS_CCACHE" ]; then
|
|
||||||
CCACHEPATH="/usr/lib/ccache/bin"
|
|
||||||
if [ -n "$XBPS_HOSTDIR" ]; then
|
|
||||||
[ ! -d "$XBPS_HOSTDIR/ccache" ] && \
|
|
||||||
mkdir -p $XBPS_HOSTDIR/ccache
|
|
||||||
export CCACHE_DIR="$XBPS_HOSTDIR/ccache"
|
|
||||||
else
|
|
||||||
[ ! -d "$XBPS_MASTERDIR/host/ccache" ] && \
|
|
||||||
mkdir -p $XBPS_MASTERDIR/host/ccache
|
|
||||||
export CCACHE_DIR="$XBPS_MASTERDIR/host/ccache"
|
|
||||||
fi
|
|
||||||
export PATH="$CCACHEPATH:$PATH"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
#
|
|
||||||
# If masterdir is ready (base-chroot installed and chroot set up) and
|
|
||||||
# XBPS_PREFER_BINPKG_DEPS enabled, force ignoring rules to handle
|
|
||||||
# bootstrap packages.
|
|
||||||
#
|
|
||||||
if [ -n "$DESTDIR_ONLY_INSTALL" -a -n "$XBPS_PREFER_BINPKG_DEPS" \
|
|
||||||
-a -f "$XBPS_MASTERDIR/.xbps_perms_done" ]; then
|
|
||||||
export BOOTSTRAP_PKG_REBUILD=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
#
|
|
||||||
# Main switch.
|
|
||||||
#
|
|
||||||
case "$target" in
|
|
||||||
bootstrap)
|
|
||||||
[ ! -d $XBPS_SRCPKGDIR/base-chroot ] && \
|
|
||||||
msg_error "Cannot find $XBPS_SRCPKGDIR/base-chroot directory!\n"
|
|
||||||
cd $XBPS_SRCPKGDIR/base-chroot && _ORIGINPKG="$(basename_cwd)"
|
|
||||||
setup_tmpl ${_ORIGINPKG} && install_pkg $pkgname
|
|
||||||
;;
|
|
||||||
bootstrap-update)
|
|
||||||
if [ -z "$IN_CHROOT" ]; then
|
|
||||||
xbps_chroot_handler ${target} dummy
|
|
||||||
else
|
|
||||||
${FAKEROOT_CMD} ${FAKEROOT_CMD_ARGS} ${XBPS_BIN_CMD} -y autoupdate
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
build-pkg)
|
|
||||||
if [ -n "${_PACKAGEDIR}" ]; then
|
|
||||||
export XBPS_PACKAGESDIR=${_PACKAGEDIR}
|
|
||||||
fi
|
|
||||||
if [ "$2" = "all" ]; then
|
|
||||||
for f in $($XBPS_BIN_CMD list|awk '{print $1}'); do
|
|
||||||
pkg=$(${XBPS_PKGDB_CMD} getpkgname $f)
|
|
||||||
setup_tmpl $pkg
|
|
||||||
if [ "${pkg}" = "${sourcepkg}" ]; then
|
|
||||||
xbps_make_binpkg
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
else
|
|
||||||
if [ -z "${_pkgname}" ]; then
|
|
||||||
[ ! -r ./template ] && msg_error "missing build template in $(pwd).\n"
|
|
||||||
_pkgname=$(basename_cwd)
|
|
||||||
fi
|
|
||||||
setup_tmpl ${_pkgname}
|
|
||||||
xbps_make_binpkg
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
checkvers)
|
|
||||||
check_installed_packages
|
|
||||||
;;
|
|
||||||
chroot)
|
|
||||||
xbps_chroot_handler chroot dummy
|
|
||||||
;;
|
|
||||||
clean)
|
|
||||||
if [ -z "${_pkgname}" ]; then
|
|
||||||
[ ! -r ./template ] && msg_error "missing build template in $(pwd).\n"
|
|
||||||
_pkgname=$(basename_cwd)
|
|
||||||
fi
|
|
||||||
setup_tmpl ${_pkgname}
|
|
||||||
remove_tmpl_wrksrc $wrksrc
|
|
||||||
;;
|
|
||||||
clean-autodeps)
|
|
||||||
if [ -z "$IN_CHROOT" ]; then
|
|
||||||
xbps_chroot_handler clean-autodeps dummy
|
|
||||||
else
|
|
||||||
pkgver=xbps-src
|
|
||||||
autoremove_pkg_dependencies
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
extract|fetch)
|
|
||||||
if [ -z "${_pkgname}" ]; then
|
|
||||||
[ ! -r ./template ] && msg_error "missing build template in $(pwd).\n"
|
|
||||||
_pkgname=$(basename_cwd)
|
|
||||||
fi
|
|
||||||
setup_tmpl ${_pkgname}
|
|
||||||
if [ "$target" = "info" ]; then
|
|
||||||
info_tmpl
|
|
||||||
exit $?
|
|
||||||
fi
|
|
||||||
fetch_distfiles $update_checksum
|
|
||||||
[ "$target" = "extract" ] && extract_distfiles
|
|
||||||
;;
|
|
||||||
build|configure|install)
|
|
||||||
if [ -z "${_pkgname}" ]; then
|
|
||||||
[ ! -r ./template ] && msg_error "missing build template in $(pwd).\n"
|
|
||||||
_pkgname=$(basename_cwd)
|
|
||||||
fi
|
|
||||||
setup_tmpl ${_pkgname}
|
|
||||||
_ORIGINPKG="${_pkgname}"
|
|
||||||
if [ -z "$IN_CHROOT" -a -z "$bootstrap" ]; then
|
|
||||||
xbps_chroot_handler $target ${_ORIGINPKG} || exit $?
|
|
||||||
else
|
|
||||||
INSTALL_TARGET=$target install_pkg $pkgname || exit $?
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
list)
|
|
||||||
$XBPS_BIN_CMD list
|
|
||||||
;;
|
|
||||||
make-repoidx)
|
|
||||||
if [ -n "${_PACKAGEDIR}" ]; then
|
|
||||||
export XBPS_PACKAGESDIR=${_PACKAGEDIR}
|
|
||||||
fi
|
|
||||||
make_repoidx
|
|
||||||
;;
|
|
||||||
remove)
|
|
||||||
if [ -z "${_pkgname}" ]; then
|
|
||||||
[ ! -r ./template ] && msg_error "missing build template in $(pwd).\n"
|
|
||||||
_pkgname=$(basename_cwd)
|
|
||||||
fi
|
|
||||||
setup_tmpl ${_pkgname}
|
|
||||||
if [ -z "$IN_CHROOT" -a -z "$bootstrap" ]; then
|
|
||||||
xbps_chroot_handler $target ${_pkgname}
|
|
||||||
else
|
|
||||||
remove_pkg
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
show)
|
|
||||||
if [ -z "${_pkgname}" ]; then
|
|
||||||
[ ! -r ./template ] && msg_error "missing build template in $(pwd).\n"
|
|
||||||
_pkgname=$(basename_cwd)
|
|
||||||
fi
|
|
||||||
setup_tmpl ${_pkgname}
|
|
||||||
info_tmpl
|
|
||||||
;;
|
|
||||||
show-files)
|
|
||||||
list_pkg_files ${_pkgname}
|
|
||||||
;;
|
|
||||||
show-revdeps)
|
|
||||||
show_pkg_revdeps ${_pkgname}
|
|
||||||
;;
|
|
||||||
stow)
|
|
||||||
stow_flag=yes
|
|
||||||
if [ -z "${_pkgname}" ]; then
|
|
||||||
[ ! -r ./template ] && msg_error "missing build template in $(pwd).\n"
|
|
||||||
_pkgname=$(basename_cwd)
|
|
||||||
fi
|
|
||||||
setup_tmpl ${_pkgname}
|
|
||||||
stow_pkg_handler stow
|
|
||||||
;;
|
|
||||||
unstow)
|
|
||||||
if [ -z "${_pkgname}" ]; then
|
|
||||||
[ ! -r ./template ] && msg_error "missing build template in $(pwd).\n"
|
|
||||||
_pkgname=$(basename_cwd)
|
|
||||||
else
|
|
||||||
pkgname=${_pkgname}
|
|
||||||
fi
|
|
||||||
stow_pkg_handler unstow
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
msg_red "xbps-src: invalid target $target.\n"
|
|
||||||
usage && exit 1
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Agur
|
|
||||||
exit $?
|
|
Loading…
Reference in a new issue