mkdeb.sh.in: pass remaining arguments to ./configure

Currently, mkdeb.sh (which is used to make a .deb package) runs
./configure with hardcoded options (some of which are automatically
detected based on configure-time variables).  To work around the
hardcoding, contrib/fj-mkdeb.py is used to add additional options by
rewriting the actual call to ./configure on mkdeb.sh.  For example, the
following invocation adds --disable-firetunnel to mkdeb.sh:

    $ ./configure && ./contrib/fj-mkdeb.py --disable-firetunnel

To avoid depending on another script and to avoid re-generating
mkdeb.sh, just let the latter pass the remaining arguments (the first
one is an optional package filename suffix) to ./configure directly.
Example:

    $ make distclean && ./configure && make dist &&
      ./mkdeb.sh "" --disable-firetunnel

Additionally, change contrib/fj-mkdeb.py to do roughly the same as the
above example, by simply forwarding the arguments that it receives to
./mkdeb.sh (which then forwards them to ./configure).  Also, remove the
--only-fix-mkdeb option, since the script does not change mkdeb.sh
anymore.  With these changes, the script's usage (other than when using
--only-fix-mkdeb) should remain the same.

Note: To clean the generated files and then make a .deb package using
the default configuration, the invocation is still the same:

    $ make distclean && ./configure && make deb

Note2: Running ./configure in the above examples is only needed for
generating Makefile/mkdeb.sh from Makefile.in/mkdeb.sh.in after running
distclean, so that running `make` / `./mkdeb.sh` afterwards works.

Should fully fix #772.

Relates to #1205 #3414 #5148.
This commit is contained in:
Kelvin M. Klann 2022-05-13 23:33:20 -03:00
parent b4d0b24c53
commit 9a0fbbd719
4 changed files with 18 additions and 38 deletions

View file

@ -54,7 +54,7 @@ build_apparmor:
script:
- apt-get update -qq
- DEBIAN_FRONTEND=noninteractive apt-get install -y -qq build-essential lintian libapparmor-dev pkg-config gawk
- ./configure --prefix=/usr --enable-apparmor && make deb-apparmor && dpkg -i firejail*.deb
- ./configure && make deb-apparmor && dpkg -i firejail*.deb
- command -V firejail && firejail --version
- firejail --version | grep -F 'AppArmor support is enabled'

View file

@ -222,7 +222,7 @@ deb: dist
./mkdeb.sh
deb-apparmor: dist
./mkdeb.sh -apparmor
./mkdeb.sh -apparmor --enable-apparmor
test-compile: dist
cd test/compile; ./compile.sh $(NAME)-$(VERSION)

View file

@ -3,9 +3,10 @@
# Copyright (C) 2014-2022 Firejail Authors
# License GPL v2
# This script automates the workaround for https://github.com/netblue30/firejail/issues/772
# This script automates the creation of a .deb package. It was originally
# created to work around https://github.com/netblue30/firejail/issues/772
import os, shlex, subprocess, sys
import os, subprocess, sys
def run(srcdir, args):
@ -15,41 +16,29 @@ def run(srcdir, args):
print('Error: Not a firejail source tree? Exiting.')
return 1
dry_run = False
escaped_args = []
# We need to modify the list as we go. So be sure to copy the list to be iterated!
# Ignore unsupported arguments.
for a in args[:]:
if a.startswith('--prefix'):
# prefix should ALWAYS be /usr here. Discard user-set values
args.remove(a)
elif a == '--only-fix-mkdeb':
# for us, not configure
dry_run = True
args.remove(a)
else:
escaped_args.append(shlex.quote(a))
# Remove generated files.
if not dry_run:
distclean = subprocess.call(['make', 'distclean'])
if distclean != 0:
return distclean
distclean = subprocess.call(['make', 'distclean'])
if distclean != 0:
return distclean
# Run configure to generate mkdeb.sh.
first_config = subprocess.call(['./configure', '--prefix=/usr'] + args)
if first_config != 0:
return first_config
# Fix up dynamically-generated mkdeb.sh to include custom configure options.
with open('mkdeb.sh', 'rb') as f:
sh = str(f.read(), 'utf_8')
with open('mkdeb.sh', 'wb') as f:
f.write(bytes(sh.replace('./configure $CONFIG_ARGS',
'./configure $CONFIG_ARGS ' + (' '.join(escaped_args))), 'utf_8'))
# Create the dist file used by mkdeb.sh.
make_dist = subprocess.call(['make', 'dist'])
if make_dist != 0:
return make_dist
if dry_run: return 0
return subprocess.call(['make', 'deb'])
# Run mkdeb.sh with the custom configure options.
return subprocess.call(['./mkdeb.sh'] + args)
if __name__ == '__main__':
@ -57,13 +46,12 @@ if __name__ == '__main__':
print('''Build a .deb of firejail with custom configure options
usage:
{script} [--fj-src=SRCDIR] [--only-fix-mkdeb] [CONFIGURE_OPTIONS [...]]
{script} [--fj-src=SRCDIR] [CONFIGURE_OPTIONS [...]]
--fj-src=SRCDIR: manually specify the location of firejail source tree
as SRCDIR. If not specified, looks in the parent directory
of the directory where this script is located, and then the
current working directory, in that order.
--only-fix-mkdeb: don't run configure or make after modifying mkdeb.sh
CONFIGURE_OPTIONS: arguments for configure
'''.format(script=sys.argv[0]))
sys.exit(0)

View file

@ -9,17 +9,9 @@
set -e
NAME=@PACKAGE_NAME@
VERSION=@PACKAGE_VERSION@
HAVE_APPARMOR=@HAVE_APPARMOR@
HAVE_SELINUX=@HAVE_SELINUX@
EXTRA_VERSION=$1
CONFIG_ARGS="--prefix=/usr"
if [ -n "$HAVE_APPARMOR" ]; then
CONFIG_ARGS="$CONFIG_ARGS --enable-apparmor"
fi
if [ -n "$HAVE_SELINUX" ]; then
CONFIG_ARGS="$CONFIG_ARGS --enable-selinux"
fi
test "$#" -gt 0 && shift
CODE_ARCHIVE="$NAME-$VERSION.tar.xz"
CODE_DIR="$NAME-$VERSION"
@ -36,7 +28,7 @@ echo "*****************************************"
tar -xJvf "$CODE_ARCHIVE"
#mkdir -p "$INSTALL_DIR"
cd "$CODE_DIR"
./configure $CONFIG_ARGS
./configure --prefix=/usr "$@"
make -j2
mkdir debian
DESTDIR=debian make install-strip