jw-pkg/doc/packaging/add-pkg-conflicts-support.patch

351 lines
13 KiB
Diff
Raw Normal View History

Index: make/rpmdist.mk
===================================================================
RCS file: /home/jannet/arc/cvs/proj/jw-build/make/rpmdist.mk,v
retrieving revision 1.137
diff -u -r1.137 rpmdist.mk
--- make/rpmdist.mk 8 Apr 2017 13:40:04 -0000 1.137
+++ make/rpmdist.mk 26 Jun 2017 10:23:07 -0000
@@ -73,7 +73,8 @@
# to be replaced by pkg.sh
RPM_REQUIRES_DEVEL += $(call proj_query, pkg-requires --dont-expand-version-macros $(PROJ_QUERY_PKG_REQUIRES_EXTRA_ARGS) devel $(PROJECT))
RPM_REQUIRES_RUN += $(call proj_query, pkg-requires --dont-expand-version-macros $(PROJ_QUERY_PKG_REQUIRES_EXTRA_ARGS) run $(PROJECT))
-#RPM_REQUIRES_DEVEL += $(RPM_PROJECT)-run = __NEXT_VERSION__
+RPM_CONFLICTS_DEVEL += $(call proj_query, pkg-conflicts --dont-expand-version-macros $(PROJ_QUERY_PKG_CONFLICTS_EXTRA_ARGS) devel $(PROJECT))
+RPM_CONFLICTS_RUN += $(call proj_query, pkg-conflicts --dont-expand-version-macros $(PROJ_QUERY_PKG_CONFLICTS_EXTRA_ARGS) run $(PROJECT))
RPM_UPLOAD_OS_NAME = $(shell echo $(OS_NAME_VERSION) | sed 's/-.*//')
RPM_UPLOAD_OS_VERSION = $(shell echo $(OS_NAME_VERSION) | sed 's/[^-]\+-//')
@@ -88,8 +89,9 @@
include $(JWBDIR)/make/upload-rules.mk
PKG_SH = $(PKG_SH_EXE) \
- -N $(RPM_PROJECT) \
- -R "$(RPM_REQUIRES_RUN)" -D "$(RPM_REQUIRES_DEVEL)" -P $(PROJECT) \
+ -N $(RPM_PROJECT) -P $(PROJECT) \
+ -R "$(RPM_REQUIRES_RUN)" -D "$(RPM_REQUIRES_DEVEL)" \
+ -X "$(RPM_CONFLICTS_RUN)" -Y "$(RPM_CONFLICTS_DEVEL)" \
-m $(JWB_SCRIPT_DIR) -a $(RPM_ARCH) -p $(DIST_PCKG_DIR) -F $(PKG_FORMAT) \
-B $(RPM_UPLOAD_URLPREFIX) -A $(RPM_UPLOAD_FILE_ATTRIB)
Index: scripts/create-mkdebian.sh
===================================================================
RCS file: /home/jannet/arc/cvs/proj/jw-build/scripts/create-mkdebian.sh,v
retrieving revision 1.22
diff -u -r1.22 create-mkdebian.sh
--- scripts/create-mkdebian.sh 13 Jan 2017 19:26:28 -0000 1.22
+++ scripts/create-mkdebian.sh 26 Jun 2017 10:23:07 -0000
@@ -55,6 +55,8 @@
Package: \$NAME-run
Architecture: any
Depends: \`format_depends "\${shlibs:Depends}, \${misc:Depends}, \$REQUIRES_RUN"\`
+# untested:
+Conflicts: \`format_depends "\${shlibs:Depends}, \${misc:Depends}, \$CONFLICTS_RUN"\`
Description: `cfg_value summary`
`cfg_value description | sed 's/^/ /'`
EOT
@@ -64,6 +66,8 @@
Package: \$NAME-devel
Architecture: any
Depends: \`format_depends "\$NAME-run = \$VERSION-\$RELEASE, \$REQUIRES_DEVEL"\`
+# untested:
+Conflicts: \`format_depends "\$NAME-run = \$VERSION-\$RELEASE, \$CONFLICTS_DEVEL"\`
Description: \$NAME Development Package
Development tools for \$NAME-run
EOT
Index: scripts/create-mkspec.sh
===================================================================
RCS file: /home/jannet/arc/cvs/proj/jw-build/scripts/create-mkspec.sh,v
retrieving revision 1.20
diff -u -r1.20 create-mkspec.sh
--- scripts/create-mkspec.sh 25 Jun 2017 17:16:24 -0000 1.20
+++ scripts/create-mkspec.sh 26 Jun 2017 10:23:07 -0000
@@ -50,6 +50,7 @@
|echo "Summary: `cfg_value summary`"
|echo "Group: `cfg_value global.group`"
|[ "\$REQUIRES_RUN" ] && echo "Requires: \$REQUIRES_RUN"
+ |[ "\$CONFLICTS_RUN" ] && echo "Conflicts: \$CONFLICTS_RUN"
|echo "%description -n \$NAME-run"
|echo "Runtime package"
|echo ""
@@ -60,6 +61,7 @@
|echo "Summary: `cfg_value summary`, development package"
|echo "Group: `cfg_value global.group`"
|[ "\$REQUIRES_DEVEL" ] && echo "Requires: \$REQUIRES_DEVEL"
+ |[ "\$CONFLICTS_DEVEL" ] && echo "Conflicts: \$CONFLICTS_DEVEL"
|echo "%description -n \$NAME-devel"
|echo "Development package"
|echo ""
Index: scripts/mkspec-wrapper.sh
===================================================================
RCS file: /home/jannet/arc/cvs/proj/jw-build/scripts/mkspec-wrapper.sh,v
retrieving revision 1.24
diff -u -r1.24 mkspec-wrapper.sh
--- scripts/mkspec-wrapper.sh 26 Jul 2016 15:02:21 -0000 1.24
+++ scripts/mkspec-wrapper.sh 26 Jun 2017 10:23:07 -0000
@@ -18,7 +18,7 @@
[ "$1" ] && exit $1
}
-set -- `getopt P:T:V:S:N:hR:D:d: "$@"`
+set -- `getopt P:T:V:S:N:hR:D:X:Y:d: "$@"`
while [ "$1" != -- ]; do
case $1 in
@@ -42,12 +42,24 @@
shift
done
;;
+ -X)
+ while [ "`echo $2 | cut -c1`" != "-" ]; do
+ CONFLICTS_RUN="$CONFLICTS_RUN $2"
+ shift
+ done
+ ;;
-D)
while [ "`echo $2 | cut -c1`" != "-" ]; do
REQUIRES_DEVEL="$REQUIRES_DEVEL $2"
shift
done
;;
+ -Y)
+ while [ "`echo $2 | cut -c1`" != "-" ]; do
+ CONFLICTS_DEVEL="$CONFLICTS_DEVEL $2"
+ shift
+ done
+ ;;
-P)
PROJECT="$2"
shift;;
@@ -81,6 +93,7 @@
fi
REQUIRES="$REQUIRES_RUN $REQUIRES_DEVEL"
+CONFLICTS="$CONFLICTS_RUN $CONFLICTS_DEVEL"
#if [ -n "$REQUIRES" ]; then
# REQUIRES_RUN=`echo $REQUIRES |
# sed -e '
@@ -96,6 +109,7 @@
export \
REQUIRES REQUIRES_RUN REQUIRES_DEVEL \
+ CONFLICTS CONFLICTS_RUN CONFLICTS_DEVEL \
TOPDIR \
PROJECT NAME \
SOURCE \
Index: scripts/pkg.sh
===================================================================
RCS file: /home/jannet/arc/cvs/proj/jw-build/scripts/pkg.sh,v
retrieving revision 1.33
diff -u -r1.33 pkg.sh
--- scripts/pkg.sh 12 Jun 2017 09:35:57 -0000 1.33
+++ scripts/pkg.sh 26 Jun 2017 10:23:07 -0000
@@ -410,6 +410,8 @@
local distribution=`os`
local RPM_REQUIRES_RUN=`echo $RPM_REQUIRES_RUN | sed "s/__NEXT_VERSION__/$version/g; s/VERSION-REVISION/$version/g; s/VERSION/$version/g"`
local RPM_REQUIRES_DEVEL=`echo $RPM_REQUIRES_DEVEL | sed "s/__NEXT_VERSION__/$version/g; s/VERSION-REVISION/$version/g; s/VERSION/$version/g"`
+ local RPM_CONFLICTS_RUN=`echo $RPM_CONFLICTS_RUN | sed "s/__NEXT_VERSION__/$version/g; s/VERSION-REVISION/$version/g; s/VERSION/$version/g"`
+ local RPM_CONFLICTS_DEVEL=`echo $RPM_CONFLICTS_DEVEL | sed "s/__NEXT_VERSION__/$version/g; s/VERSION-REVISION/$version/g; s/VERSION/$version/g"`
# --- create source directory tree
create_empty_dir $src_tree "Source files compilation directory"
@@ -464,7 +466,9 @@
-S $tar_archive \
-N $RPM_PROJECT \
-R "$RPM_REQUIRES_RUN" \
+ -X "$RPM_CONFLICTS_RUN" \
-D "$RPM_REQUIRES_DEVEL" \
+ -Y "$RPM_CONFLICTS_DEVEL" \
-P $PROJECT \
-d $distribution \
> $RPM_PROJECT.$deffmt
@@ -909,7 +913,7 @@
[ -d .git ] && SCM=git
-opts='ht:p:m:N:R:D:P:a:F:B:A:'
+opts='ht:p:m:N:R:D:X:Y:P:a:F:B:A:'
args=("$@")
global_args=()
while [ "$1" ]; do
@@ -949,10 +953,18 @@
eval RPM_REQUIRES_RUN=\"$2\"
shift
;;
+ -X)
+ eval RPM_CONFLICTS_RUN=\"$2\"
+ shift
+ ;;
-D)
eval RPM_REQUIRES_DEVEL=\"$2\"
shift
;;
+ -Y)
+ eval RPM_CONFLICTS_DEVEL=\"$2\"
+ shift
+ ;;
-P)
eval PROJECT=\"$2\"
shift
Index: scripts/projects.py
===================================================================
RCS file: /home/jannet/arc/cvs/proj/jw-build/scripts/projects.py,v
retrieving revision 1.51
diff -u -r1.51 projects.py
--- scripts/projects.py 26 Jun 2017 09:33:53 -0000 1.51
+++ scripts/projects.py 26 Jun 2017 10:23:07 -0000
@@ -68,7 +68,7 @@
return r
return None
-def pkg_requires_os_cascade():
+def os_cascade():
os = get_os()
name = re.sub('-.*', '', os)
# e.g. os, linux, suse, suse-tumbleweed
@@ -202,6 +202,55 @@
r.append(m)
return r
+def pkg_relations(rel_type, args_):
+ parser = argparse.ArgumentParser(description='pkg-' + rel_type)
+ # TODO: implement Vendor evaluation
+
+ parser.add_argument('--vendor', '-V', nargs='?', default='jw', help='Package Vendor')
+ parser.add_argument('flavour', help='Flavour')
+ parser.add_argument('module', nargs='*', help='Modules')
+ parser.add_argument('--dont-strip-revision', action='store_true',
+ default=False, help='Always treat VERSION macro as VERSION-REVISION')
+ parser.add_argument('--dont-expand-version-macros', action='store_true',
+ default=False, help='Don\'t expand VERSION and REVISION macros')
+ args=parser.parse_args(args_)
+ debug('flavour = ', args.flavour, ', vendor = ', args.vendor)
+ version_pattern=re.compile("[0-9-.]*")
+ subsecs = os_cascade()
+ subsecs.append('jw')
+ debug("subsecs = ", subsecs)
+ r = []
+ for s in subsecs:
+ for m in args.module:
+ value = get_value(m, 'pkg.' + rel_type + '.' + s, args.flavour)
+ if not value:
+ continue
+ deps = value.split(',')
+ for spec in deps:
+ dep = re.split('([=><]+)', spec)
+ for i, item in enumerate(dep):
+ dep[i] = item.strip()
+ if len(dep) == 3:
+ dep_project = re.sub(r'-devel$|-run$', '', dep[0])
+ if args.dont_expand_version_macros and dep_project in args.module:
+ version = dep[2]
+ else:
+ version = get_value(dep_project, 'version', '')
+ if dep[2] == 'VERSION':
+ if args.dont_strip_revision:
+ dep[2] = version
+ else:
+ dep[2] = version.split('-')[0]
+ elif dep[2] == 'VERSION-REVISION':
+ dep[2] = version
+ elif version_pattern.match(dep[2]):
+ # dep[2] = dep[2]
+ pass
+ else:
+ raise Exception("Unknown version specifier in " + spec)
+ r.append(' '.join(dep))
+ print(', '.join(r))
+
def get_libname(names):
vals = get_modules_from_project_txt(names, 'build', 'libname',
scope = 1, add_self=False, names_only=True)
@@ -266,6 +315,7 @@
args=parser.parse_args(args_)
print("blah = " + args.blah)
+# TODO: seems at least partly redundant to cmd_pkg_requires / pkg_relations
def cmd_requires_pkg(args_):
parser = argparse.ArgumentParser(description='required-os-pkg')
parser.add_argument('module', nargs='*', help='Modules')
@@ -275,7 +325,7 @@
debug("flavours = " + args.flavours)
deps = get_modules_from_project_txt(args.module, 'pkg.requires.jw', flavours,
scope = 2, add_self=True, names_only=True)
- subsecs = pkg_requires_os_cascade()
+ subsecs = os_cascade()
debug("subsecs = ", subsecs)
requires = []
for s in subsecs:
@@ -290,7 +340,7 @@
print(r[1:])
def cmd_os_cascade(args_):
- print(' '.join(pkg_requires_os_cascade()))
+ print(' '.join(os_cascade()))
def cmd_ldlibpath(args_):
parser = argparse.ArgumentParser(description='ldlibpath')
@@ -349,6 +399,7 @@
r = r + ':' + proj_dir(m) + '/bin'
print(r[1:])
+# TODO: seems at least partly redundant to cmd_pkg_requires / pkg_relations
def cmd_prereq(args_):
parser = argparse.ArgumentParser(description='path')
parser.add_argument('flavour', help='Flavour')
@@ -359,53 +410,10 @@
print(' '.join(deps))
def cmd_pkg_requires(args_):
- parser = argparse.ArgumentParser(description='pkg-requires')
- # TODO: implement Vendor evaluation
+ return pkg_relations("requires", args_)
- parser.add_argument('--vendor', '-V', nargs='?', default='jw', help='Package Vendor')
- parser.add_argument('flavour', help='Flavour')
- parser.add_argument('module', nargs='*', help='Modules')
- parser.add_argument('--dont-strip-revision', action='store_true',
- default=False, help='Always treat VERSION macro as VERSION-REVISION')
- parser.add_argument('--dont-expand-version-macros', action='store_true',
- default=False, help='Don\'t expand VERSION and REVISION macros')
- args=parser.parse_args(args_)
- debug('flavour = ', args.flavour, ', vendor = ', args.vendor)
- version_pattern=re.compile("[0-9-.]*")
- subsecs = pkg_requires_os_cascade()
- subsecs.append('jw')
- debug("subsecs = ", subsecs)
- r = []
- for s in subsecs:
- for m in args.module:
- value = get_value(m, 'pkg.requires.' + s, args.flavour)
- if not value:
- continue
- deps = value.split(',')
- for spec in deps:
- dep = re.split('([=><]+)', spec)
- for i, item in enumerate(dep):
- dep[i] = item.strip()
- if len(dep) == 3:
- dep_project = re.sub(r'-devel$|-run$', '', dep[0])
- if args.dont_expand_version_macros and dep_project in args.module:
- version = dep[2]
- else:
- version = get_value(dep_project, 'version', '')
- if dep[2] == 'VERSION':
- if args.dont_strip_revision:
- dep[2] = version
- else:
- dep[2] = version.split('-')[0]
- elif dep[2] == 'VERSION-REVISION':
- dep[2] = version
- elif version_pattern.match(dep[2]):
- # dep[2] = dep[2]
- pass
- else:
- raise Exception("Unknown version specifier in " + spec)
- r.append(' '.join(dep))
- print(', '.join(r))
+def cmd_pkg_conflicts(args_):
+ return pkg_relations("conflicts", args_)
def cmd_proj_dir(args_):
parser = argparse.ArgumentParser(description='proj-dir')