1
0
mirror of https://github.com/moparisthebest/pacman synced 2025-02-28 09:21:53 -05:00

* Updated makepkg to use a new form of options. These two arrays now replace

most of the former options in makepkg.conf, and are described in detail
  there:
   BUILDENV=(fakeroot !distcc color !ccache)
   OPTIONS=(strip !docs !libtool emptydirs)
  Note that PKGBUILD specified options will always have final say. They will
  now be specified as they are above, except using lowercase 'options' array.
* makepkg was fixed so options actually work as expected.
This commit is contained in:
Dan McGee 2007-02-04 18:28:21 +00:00
parent 1bb3cd34bf
commit b1cc72ebb3
4 changed files with 118 additions and 74 deletions

View File

@ -1,6 +1,7 @@
Judd Vinet <jvinet@zeroflux.org>
Aurelien Foret <aurelien@archlinux.org>
Aaron Griffin <aaron@archlinux.org>
Dan McGee <dan@archlinux.org>
Miklós Vajna <vmiklos@frugalware.org>
Christian Hamar <krics@linuxforum.hu>
@ -8,6 +9,5 @@ Christian Hamar <krics@linuxforum.hu>
Josh Wheeler <deltalima@gmail.com>
David Kimpe <DNAku@frugalware.org>
Dan McGee <dpmcgee@gmail.com>
James Rosten <seinfeld90@gmail.com>
Roman Kyrylych <Roman.Kyrylych@gmail.com>

View File

@ -2,12 +2,6 @@ TODO.dan
This is my personal TODO list. No guarantees if it is out of date and things
no longer apply. If you want to help out with any of it, send me an email.
* Variable names in makepkg.conf--confusing
- some use 'USE_', others do not
- some are 'NO', some are 'KEEP', etc.
- some options use 0/1, others are y/n
* Should undocumented makepkg (and thus PKGBUILD) options be put in the
manpage, as well as including sections for them in the makepkg.conf file?
* Go through all makepkg bugs in flyspray and see if they are rectified:
http://bugs.archlinux.org/index.php?tasks=&project=1&string=makepkg
@ -19,27 +13,19 @@ This is my personal TODO list. No guarantees if it is out of date and things
* Port the libdownload (libfetch) manpage from BSD style to Linux style, or at
very least change references to BSD.
* Revise build system to a more static one (Aaron mentioned wmii system).
* NEWS file updating and cleanup. Get rid of items that are bugfixes of never-
released code, etc.
* New cache cleaning functionality in pacman - keep installed version, choose
number to keep, etc. Good python script in the forums that we should try to
emulate, perhaps.
* pacman - downgrade feature - allow users to see cached packages and
* Pacman 3.1 - New cache cleaning functionality in pacman - keep installed
version, choose number to keep, etc. Good python script in the forums that
we should try to emulate, perhaps.
* Pacman 3.1 - downgrade feature - allow users to see cached packages and
downgrade to (previous or any?) available options.
* alpm_log_action & install script logging interaction - producing duplicate
entries in pacman logs (possibly fixed? needs more testing but looks good)
* Pacman 3.1 - Extreme similarity between some of the sync and add code...we
have to be able to abstract more away from sync actions and add actions to
just 'actions' (example: sync,c, add.c, and deptest.c all contain a switch
on PM_DEP_MOD_*). Merge update, add, and sync code when possible, so we
reduce duplication.
* Extreme similarity between some of the sync and add code...we have to be able
to abstract more away from sync actions and add actions to just 'actions'
(example: sync,c, add.c, and deptest.c all contain a switch on PM_DEP_MOD_*)
* Merge update, add, and sync code when possible, so we reduce duplication.
* For Pacman 3.1 - List every function, define, etc. in libalpm. Give one
* Pacman 3.1 - List every function, define, etc. in libalpm. Give one
sentence description of each. If it sounds like two are similar, find a way
to combine or refactor them. If it is unnecessary- delete it. Stop keeping
everything clustered in little add/sync/remove parts, allow transactions to
@ -49,14 +35,28 @@ This is my personal TODO list. No guarantees if it is out of date and things
are still relevant, etc. Ideas for -Re (#6273), changing meaning of -c (has
two meanings, another FS bug), etc.
* Monotone suggestion- allow changing of a branch name after commit (example:
I meant to commit to a new branch, but I forgot --branch option on the
commit. Can I remove the original branch cert and replace it with a new
one?)
* Pacman 3.1 - Possible rewrite of make system. Options:
-- revise to be more static (Aaron mentioned wmii's system)
-- Cmake? It looks intriguing
* Pacman 3.1 - Rewrite _alpm_sortbydeps to use Topological Sort. Should work
using a standard topo sort algorithm, once the crazy types can be fixed up
a bit. Include a cycle check - print a big error message if this happens.
-- http://en.wikipedia.org/wiki/Topological_sort
-- http://everything2.com/?node_id=556079
Quick hits:
* log_progress and cb_trans_progress - same function? not quite but commonality
* log_progress and cb_trans_progress - same function? not quite but close
* unsigned int vs. unsigned
* 'ldd' & 'ldd -u' - many linkages
* possibly split utilities/extras from pacman package
* makepkg3 produces files with arch appended- gensync can't deal with it
* FS #4185 - move where message is logged, perhaps?
* Remove -A flag (and possibly -D, -T, and -Y?)
* ideas mentioned here - http://bbs.archlinux.org/viewtopic.php?id=29450
add a .install message about mirrors, maybe comment whole file, encourage
rankmirrors usage
* update copyrights
* update pacman website
* finish pacman coding style page
* make indent.pro file for GNU indent

View File

@ -1,4 +1,4 @@
# vim: set ft=sh ts=2 sw=2 et:
#
# /etc/makepkg.conf
#
@ -31,35 +31,37 @@ CXXFLAGS="-@MARCHFLAG@=@CARCHFLAGS@ -O2 -pipe"
# BUILD ENVIRONMENT
#########################################################################
#
#-- Fakeroot: for building packages as a non-root user
USE_FAKEROOT="y"
#-- DistCC: a distributed C/C++/ObjC compiler (modify MAKEFLAGS too)
USE_DISTCC="n"
#-- A space-delimited list of hosts running in the DistCC cluster
DISTCC_HOSTS=""
#-- Colorized output messages
USE_COLOR="y"
#-- Use ccache when building
USE_CCACHE=0
# Defaults: ENVIRONMENT=(!fakeroot !distcc color !ccache)
#
#-- fakeroot: Allow building packages as a non-root user
#-- distcc: Use the Distributed C/C++/ObjC compiler
#-- color: Colorize output messages
#-- ccache: Use ccache to cache compilation
#
BUILDENV=(fakeroot !distcc color !ccache)
#
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster.
#DISTCC_HOSTS=""
#########################################################################
# GLOBAL PACKAGE OPTIONS
# These are default values for the options=() settings
#########################################################################
#
#-- Don't strip symbols from binaries/libraries
NOSTRIP=0
#-- Keep doc and info directories
KEEPDOCS=0
#-- Don't remove libtool files?
NOLIBTOOL=0
#-- Don't remove empty directories from package?
NOEMPTYDIRS=0
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5)
#-- Info and doc directories to be removed
DOC_DIRS=(usr/{,share/}{info,doc} opt/gnome/{,share/}{info,doc,gtk-doc})
# Default: OPTIONS=(strip !docs !libtool emptydirs)
#
#-- strip: Strip symbols from binaries/libraries
#-- docs: Save doc and info directories
#-- libtool: Leave libtool (.la) files in binaries
#-- emptydirs: Leave empty directories in binaries
#
OPTIONS=(strip !docs !libtool emptydirs)
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5 sha1)
#-- Info and doc directories to remove (if option set correctly above)
DOC_DIRS=(usr/{,share/}{info,doc} opt/gnome/{,share/}{info,doc,gtk-doc})
#########################################################################
# PACKAGE OUTPUT
@ -71,3 +73,5 @@ DOC_DIRS=(usr/{,share/}{info,doc} opt/gnome/{,share/}{info,doc,gtk-doc})
#SRCDEST=/var/cache/pacman/src
#-- Packager: name/email of the person or organization building packages
#PACKAGER="John Doe <john@doe.com>"
# vim: set ft=sh ts=2 sw=2 et:

View File

@ -32,7 +32,7 @@ BUILDSCRIPT="PKGBUILD"
PKGEXT="pkg.tar.gz"
source "/etc/abs/abs.conf"
SRCROOT=$ABSROOT
SRCROOT="$ABSROOT"
# Options
CLEANUP=0
@ -63,7 +63,7 @@ fi
### SUBROUTINES ###
plain() {
if [ "$USE_COLOR" = "Y" -o "$USE_COLOR" = "y" ]; then
if [ ! "$USE_COLOR" = "n" -a "$(check_buildenv color)" = "y" ]; then
echo -e " \033[1;1m$1\033[1;0m" >&2
else
echo " $1" >&2
@ -71,7 +71,7 @@ plain() {
}
msg() {
if [ "$USE_COLOR" = "Y" -o "$USE_COLOR" = "y" ]; then
if [ ! "$USE_COLOR" = "n" -a "$(check_buildenv color)" = "y" ]; then
echo -e "\033[1;32m==>\033[1;0m \033[1;1m$1\033[1;0m" >&2
else
echo "==> $1" >&2
@ -79,7 +79,7 @@ msg() {
}
msg2() {
if [ "$USE_COLOR" = "Y" -o "$USE_COLOR" = "y" ]; then
if [ ! "$USE_COLOR" = "n" -a "$(check_buildenv color)" = "y" ]; then
echo -e " \033[1;34m->\033[1;0m \033[1;1m$1\033[1;0m" >&2
else
echo " -> $1" >&2
@ -87,7 +87,7 @@ msg2() {
}
warning() {
if [ "$USE_COLOR" = "Y" -o "$USE_COLOR" = "y" ]; then
if [ ! "$USE_COLOR" = "n" -a "$(check_buildenv color)" = "y" ]; then
echo -e "\033[1;33m==> WARNING:\033[1;0m \033[1;1m$1\033[1;0m" >&2
else
echo "==> WARNING: $1" >&2
@ -95,7 +95,7 @@ warning() {
}
error() {
if [ "$USE_COLOR" = "Y" -o "$USE_COLOR" = "y" ]; then
if [ ! "$USE_COLOR" = "n" -a "$(check_buildenv color)" = "y" ]; then
echo -e "\033[1;31m==> ERROR:\033[1;0m \033[1;1m$1\033[1;0m" >&2
else
echo "==> ERROR: $1" >&2
@ -106,16 +106,54 @@ strip_url() {
echo "$1" | sed 's|^.*://.*/||g'
}
# checks to see if options are present in makepkg.conf or PKGBUILD;
# PKGBUILD options always take precedence
check_option() {
local needle=$(echo $1 | tr [:upper:] [:lower:])
local i
# loop PKGBUILD opts first so it overrides makepkg.conf
for i in ${options[@]}; do
local uc=$(echo $i | tr [:lower:] [:upper:])
local lc=$(echo $i | tr [:upper:] [:lower:])
if [ "$uc" = "$1" -o "$lc" = "$1" ]; then
echo $1
if [ "$lc" = "$needle" ]; then
echo "y"
return
elif [ "$lc" = "!$needle" ]; then
echo "n"
return
fi
done
# fall back to makepkg.conf options
for i in ${OPTIONS[@]}; do
local lc=$(echo $i | tr [:upper:] [:lower:])
if [ "$lc" = "$needle" ]; then
echo "y"
return
elif [ "$lc" = "!$needle" ]; then
echo "n"
return
fi
done
echo "unknown"
return
}
# check if option is present in BUILDENV
check_buildenv() {
local needle=$(echo $1 | tr [:upper:] [:lower:])
local i
# use options from makepkg.conf
for i in ${BUILDENV[@]}; do
local lc=$(echo $i | tr [:upper:] [:lower:])
if [ "$lc" = "$needle" ]; then
echo "y"
return
elif [ "$lc" = "!$needle" ]; then
echo "n"
return
fi
done
echo "unknown"
return
}
in_array() {
@ -123,7 +161,7 @@ in_array() {
shift 1
[ -z "$1" ] && return 1
for i in $*; do
[ "$i" == "$needle" ] && return 0
[ "$i" = "$needle" ] && return 0
done
return 1
}
@ -347,7 +385,7 @@ while [ "$#" -ne "0" ]; do
--syncdeps) DEP_BIN=1 ;;
--sudosync) DEP_SUDO=1 ;;
--builddeps) DEP_SRC=1 ;;
--noccache) USE_CCACHE=0 ;;
--noccache) USE_CCACHE="n" ;;
--nodeps) NODEPS=1 ;;
--noextract) NOEXTRACT=1 ;;
--install) INSTALL=1 ;;
@ -370,7 +408,7 @@ while [ "$#" -ne "0" ]; do
while getopts "bBcCdefghij:Lmop:rRsS-" opt; do
case $opt in
b) DEP_SRC=1 ;;
B) USE_CCACHE=0 ;;
B) USE_CCACHE="n" ;;
c) CLEANUP=1 ;;
C) CLEANCACHE=1 ;;
d) NODEPS=1 ;;
@ -498,7 +536,7 @@ fi
# Enter the fakeroot environment if necessary. This will call the makepkg script again
# as the fake root user. We detect this by passing a sentinel option (-F) to makepkg
if [ "$EUID" != "0" ]; then
if [ "$USE_FAKEROOT" = "y" -o "$USE_FAKEROOT" = "Y" ]; then
if [ "$(check_buildenv fakeroot)" = "y" ]; then
if [ $(type -p fakeroot) ]; then
msg "Entering fakeroot environment"
fakeroot -- $0 -F $ARGLIST
@ -514,7 +552,7 @@ if [ "$EUID" != "0" ]; then
else
warning "Running makepkg as an unprivileged user will result in non-root"
plain "ownership of the packaged files. Try using the fakeroot"
plain "environment. (USE_FAKEROOT=y in makepkg.conf)"
plain "environment. ('fakeroot' in BUILDENV in makepkg.conf)"
plain ""
sleep 1
fi
@ -746,12 +784,13 @@ else
mkdir -p $startdir/pkg
# use distcc if requested
if [ "$USE_DISTCC" = "y" ]; then
if [ "$(check_buildenv distcc)" = "y" ]; then
[ -d /usr/lib/distcc/bin ] && export PATH=/usr/lib/distcc/bin:$PATH
fi
# use ccache if it's available
if [ "$USE_CCACHE" = "1" ]; then
# USE_CCACHE still here because it is a command line option
if [ ! "$USE_CCACHE" = "n" -a "$(check_buildenv ccache)" = "y" ]; then
[ -d /usr/lib/ccache/bin ] && export PATH=/usr/lib/ccache/bin:$PATH
fi
@ -799,7 +838,7 @@ else
fi
fi
if [ ! "$(check_option KEEPDOCS)" -a "$KEEPDOCS" = "0" ]; then
if [ "$(check_option docs)" = "n" ]; then
# remove info/doc files
msg "Removing info/doc files..."
cd $startdir/pkg
@ -833,7 +872,7 @@ done
cd $startdir
# strip binaries
if [ ! "$(check_option NOSTRIP)" -a "$NOSTRIP" = "0" ]; then
if [ "$(check_option strip)" = "y" ]; then
msg "Stripping debugging symbols from libraries..."
find pkg/{,usr,usr/local,opt/*}/lib -type f -not -name "*.dll" -not -name "*.exe" \
-exec /usr/bin/strip --strip-debug '{}' \; 2>&1 \
@ -845,15 +884,16 @@ if [ ! "$(check_option NOSTRIP)" -a "$NOSTRIP" = "0" ]; then
fi
# remove libtool (.la) files
if [ "$(check_option NOLIBTOOL)" -a "$NOLIBTOOL" = "1" ]; then
if [ "$(check_option libtool)" = "n" ]; then
msg "Removing libtool .la files..."
find pkg -type f -name "*.la" -exec rm -f -- '{}' \;
fi
# remove empty directories
if [ "$(check_option NOEMPTYDIRS)" -a "$NOEMPTYDIRS" = 1 ]; then
if [ "$(check_option emptydirs)" = "n" ]; then
msg "Removing empty directories..."
find pkg -depth -type d -empty -delete;
cd "$startdir/pkg"
find -depth -type d -empty -delete;
fi
# get some package meta info