Removed xbps-src code. It's available on https://github.com/xtraeme/xbps-src.

This commit is contained in:
Juan RP 2011-11-19 00:05:42 +01:00
parent afac9abe18
commit c973848606
46 changed files with 11 additions and 5707 deletions

19
.gitignore vendored
View file

@ -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

View file

@ -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
View file

@ -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!

View file

@ -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

View file

@ -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.

View file

@ -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.

View file

@ -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:

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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}
}

View file

@ -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

View file

@ -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}
}

View file

@ -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
}

View file

@ -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}
}

View file

@ -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 $@

View file

@ -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

View file

@ -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);
}

View file

@ -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

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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"
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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"
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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|<|\&lt;|g;s|>|\&gt;|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|<|\&lt;|g;s|>|\&gt;|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|<|\&lt;|g;s|>|\&gt;|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|<|\&lt;|g;s|>|\&gt;|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|<|\&lt;|g;s|>|\&gt;|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|<|\&lt;|g;s|>|\&gt;|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"
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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"
}

View file

@ -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 $?
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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

View file

@ -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 $?